HcalRawToDigiFake

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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
#include "FWCore/Framework/interface/global/EDProducer.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include <iostream>
#include <unordered_set>
#include <string>

//helper
namespace raw_impl {
  template <class T>
  void get(edm::EDGetTokenT<T> tok, edm::Event& e, const std::string& productName = "") {
    edm::Handle<T> h_coll;
    e.getByToken(tok, h_coll);
    auto o_coll = std::make_unique<T>();
    if (h_coll.isValid()) {
      //copy constructor
      o_coll = std::make_unique<T>(*(h_coll.product()));
    }
    if (!productName.empty())
      e.put(std::move(o_coll), productName);
    else
      e.put(std::move(o_coll));
  }
}  // namespace raw_impl

class HcalRawToDigiFake : public edm::global::EDProducer<> {
public:
  explicit HcalRawToDigiFake(const edm::ParameterSet& ps);
  ~HcalRawToDigiFake() override;
  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
  void produce(edm::StreamID id, edm::Event& e, const edm::EventSetup& c) const override;

private:
  //members
  edm::EDGetTokenT<QIE10DigiCollection> tok_QIE10DigiCollection_;
  edm::EDGetTokenT<QIE11DigiCollection> tok_QIE11DigiCollection_;
  edm::EDGetTokenT<HBHEDigiCollection> tok_HBHEDigiCollection_;
  edm::EDGetTokenT<HFDigiCollection> tok_HFDigiCollection_;
  edm::EDGetTokenT<HODigiCollection> tok_HODigiCollection_;
  edm::EDGetTokenT<HcalTrigPrimDigiCollection> tok_TPDigiCollection_;
  edm::EDGetTokenT<HOTrigPrimDigiCollection> tok_HOTPDigiCollection_;
  edm::EDGetTokenT<HcalCalibDigiCollection> tok_CalibDigiCollection_;
  edm::EDGetTokenT<ZDCDigiCollection> tok_ZDCDigiCollection_;
  edm::EDGetTokenT<QIE10DigiCollection> tok_ZDCQIE10DigiCollection_;
  edm::EDGetTokenT<HcalTTPDigiCollection> tok_TTPDigiCollection_;
  const bool unpackCalib_, unpackZDC_, unpackTTP_;
};

HcalRawToDigiFake::HcalRawToDigiFake(edm::ParameterSet const& conf)
    : tok_QIE10DigiCollection_(consumes<QIE10DigiCollection>(conf.getParameter<edm::InputTag>("QIE10"))),
      tok_QIE11DigiCollection_(consumes<QIE11DigiCollection>(conf.getParameter<edm::InputTag>("QIE11"))),
      tok_HBHEDigiCollection_(consumes<HBHEDigiCollection>(conf.getParameter<edm::InputTag>("HBHE"))),
      tok_HFDigiCollection_(consumes<HFDigiCollection>(conf.getParameter<edm::InputTag>("HF"))),
      tok_HODigiCollection_(consumes<HODigiCollection>(conf.getParameter<edm::InputTag>("HO"))),
      tok_TPDigiCollection_(consumes<HcalTrigPrimDigiCollection>(conf.getParameter<edm::InputTag>("TRIG"))),
      tok_HOTPDigiCollection_(consumes<HOTrigPrimDigiCollection>(conf.getParameter<edm::InputTag>("HOTP"))),
      tok_CalibDigiCollection_(consumes<HcalCalibDigiCollection>(conf.getParameter<edm::InputTag>("CALIB"))),
      tok_ZDCDigiCollection_(consumes<ZDCDigiCollection>(conf.getParameter<edm::InputTag>("ZDC"))),
      tok_ZDCQIE10DigiCollection_(consumes<QIE10DigiCollection>(conf.getParameter<edm::InputTag>("ZDCQIE10"))),
      tok_TTPDigiCollection_(consumes<HcalTTPDigiCollection>(conf.getParameter<edm::InputTag>("TTP"))),
      unpackCalib_(conf.getParameter<bool>("UnpackCalib")),
      unpackZDC_(conf.getParameter<bool>("UnpackZDC")),
      unpackTTP_(conf.getParameter<bool>("UnpackTTP")) {
  // products produced...
  produces<QIE10DigiCollection>();
  produces<QIE11DigiCollection>();
  produces<HBHEDigiCollection>();
  produces<HFDigiCollection>();
  produces<HODigiCollection>();
  produces<HcalTrigPrimDigiCollection>();
  produces<HOTrigPrimDigiCollection>();
  if (unpackCalib_)
    produces<HcalCalibDigiCollection>();
  if (unpackZDC_)
    produces<ZDCDigiCollection>();
  if (unpackTTP_)
    produces<HcalTTPDigiCollection>();
  produces<QIE10DigiCollection>("ZDC");
}

// Virtual destructor needed.
HcalRawToDigiFake::~HcalRawToDigiFake() {}

void HcalRawToDigiFake::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
  edm::ParameterSetDescription desc;
  desc.add<bool>("UnpackZDC", true);
  desc.add<bool>("UnpackCalib", true);
  desc.add<bool>("UnpackTTP", true);
  //empty tag = not usually produced by simulation
  desc.add<edm::InputTag>("QIE10", edm::InputTag("simHcalDigis", "HFQIE10DigiCollection"));
  desc.add<edm::InputTag>("QIE11", edm::InputTag("simHcalDigis", "HBHEQIE11DigiCollection"));
  desc.add<edm::InputTag>("HBHE", edm::InputTag("simHcalDigis"));
  desc.add<edm::InputTag>("HF", edm::InputTag("simHcalDigis"));
  desc.add<edm::InputTag>("HO", edm::InputTag("simHcalDigis"));
  desc.add<edm::InputTag>("TRIG", edm::InputTag("simHcalTriggerPrimitiveDigis"));
  desc.add<edm::InputTag>("HOTP", edm::InputTag(""));
  desc.add<edm::InputTag>("CALIB", edm::InputTag(""));
  desc.add<edm::InputTag>("ZDC", edm::InputTag("simHcalUnsuppressedDigis"));
  desc.add<edm::InputTag>("ZDCQIE10", edm::InputTag(""));
  desc.add<edm::InputTag>("TTP", edm::InputTag(""));
  //not used, just for compatibility
  desc.add<edm::InputTag>("InputLabel", edm::InputTag("rawDataCollector"));
  desc.add<int>("firstSample", 0);
  desc.add<int>("lastSample", 0);
  descriptions.add("HcalRawToDigiFake", desc);
}

// Functions that gets called by framework every event
void HcalRawToDigiFake::produce(edm::StreamID id, edm::Event& e, const edm::EventSetup& es) const {
  //handle each collection
  raw_impl::get(tok_QIE10DigiCollection_, e);
  raw_impl::get(tok_QIE11DigiCollection_, e);
  raw_impl::get(tok_HBHEDigiCollection_, e);
  raw_impl::get(tok_HFDigiCollection_, e);
  raw_impl::get(tok_HODigiCollection_, e);
  raw_impl::get(tok_TPDigiCollection_, e);
  raw_impl::get(tok_HOTPDigiCollection_, e);
  if (unpackCalib_)
    raw_impl::get(tok_CalibDigiCollection_, e);
  if (unpackZDC_)
    raw_impl::get(tok_ZDCDigiCollection_, e);
  raw_impl::get(tok_ZDCQIE10DigiCollection_, e, "ZDC");
  if (unpackTTP_)
    raw_impl::get(tok_TTPDigiCollection_, e);
}

DEFINE_FWK_MODULE(HcalRawToDigiFake);