TotemVFATFrameAnalyzer

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
/****************************************************************************
*
* This is a part of TOTEM offline software.
* Authors:
*   Jan Kašpar (jan.kaspar@gmail.com)
*
****************************************************************************/

#include "FWCore/Framework/interface/global/EDAnalyzer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/EventSetup.h"

#include "DataFormats/FEDRawData/interface/FEDRawData.h"
#include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"

#include "DataFormats/CTPPSDigi/interface/TotemFEDInfo.h"

#include "EventFilter/CTPPSRawToDigi/interface/SimpleVFATFrameCollection.h"
#include "EventFilter/CTPPSRawToDigi/interface/RawDataUnpacker.h"

#include <string>

class TotemVFATFrameAnalyzer : public edm::global::EDAnalyzer<> {
public:
  explicit TotemVFATFrameAnalyzer(const edm::ParameterSet &);
  ~TotemVFATFrameAnalyzer();

  virtual void analyze(edm::StreamID, const edm::Event &, const edm::EventSetup &) const override;

private:
  std::vector<unsigned int> fedIds;

  edm::EDGetTokenT<FEDRawDataCollection> fedDataToken;

  pps::RawDataUnpacker rawDataUnpacker;

  template <typename DigiType>
  void run(edm::Event &, const edm::EventSetup &);
};

using namespace edm;
using namespace std;

TotemVFATFrameAnalyzer::TotemVFATFrameAnalyzer(const edm::ParameterSet &conf)
    : fedIds(conf.getParameter<vector<unsigned int> >("fedIds")),
      rawDataUnpacker(conf.getParameterSet("RawUnpacking")) {
  fedDataToken = consumes<FEDRawDataCollection>(conf.getParameter<edm::InputTag>("rawDataTag"));
}

TotemVFATFrameAnalyzer::~TotemVFATFrameAnalyzer() {}

void TotemVFATFrameAnalyzer::analyze(edm::StreamID, const edm::Event &event, const edm::EventSetup &) const {
  // raw data handle
  edm::Handle<FEDRawDataCollection> rawData;
  event.getByToken(fedDataToken, rawData);

  // raw-data unpacking
  vector<TotemFEDInfo> fedInfo;
  SimpleVFATFrameCollection vfatCollection;
  for (const auto &fedId : fedIds) {
    const FEDRawData &data = rawData->FEDData(fedId);
    if (data.size() > 0)
      rawDataUnpacker.run(fedId, data, fedInfo, vfatCollection);
  }

  // print VFAT frames
  edm::LogInfo("TotemVFATFrameAnalyzer")
      << "\n----------------------------------------------------------------------------------------------------\n"
      << event.id() << "\n";

  for (VFATFrameCollection::Iterator fr(&vfatCollection); !fr.IsEnd(); fr.Next()) {
    edm::LogInfo("TotemVFATFrameAnalyzer") << fr.Position() << " > ";
    fr.Data()->Print();
  }
}

DEFINE_FWK_MODULE(TotemVFATFrameAnalyzer);