File indexing completed on 2024-04-06 12:10:42
0001 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
0002 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
0003 #include "FWCore/Framework/interface/ESHandle.h"
0004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0005 #include <iostream>
0006
0007 #include "EventFilter/HcalRawToDigi/plugins/HcalDigiToRaw.h"
0008
0009 using namespace std;
0010
0011 HcalDigiToRaw::HcalDigiToRaw(edm::ParameterSet const& conf)
0012 : hbheTag_(conf.getUntrackedParameter("HBHE", edm::InputTag())),
0013 hoTag_(conf.getUntrackedParameter("HO", edm::InputTag())),
0014 hfTag_(conf.getUntrackedParameter("HF", edm::InputTag())),
0015 zdcTag_(conf.getUntrackedParameter("ZDC", edm::InputTag())),
0016 calibTag_(conf.getUntrackedParameter("CALIB", edm::InputTag())),
0017 trigTag_(conf.getUntrackedParameter("TRIG", edm::InputTag())),
0018
0019 tok_hbhe_(consumes<HBHEDigiCollection>(hbheTag_)),
0020 tok_ho_(consumes<HODigiCollection>(hoTag_)),
0021 tok_hf_(consumes<HFDigiCollection>(hfTag_)),
0022 tok_calib_(consumes<HcalCalibDigiCollection>(calibTag_)),
0023 tok_zdc_(consumes<ZDCDigiCollection>(zdcTag_)),
0024 tok_htp_(consumes<HcalTrigPrimDigiCollection>(trigTag_)),
0025 tok_dbService_(esConsumes<HcalDbService, HcalDbRecord>()) {
0026 produces<FEDRawDataCollection>();
0027 }
0028
0029
0030 HcalDigiToRaw::~HcalDigiToRaw() {}
0031
0032
0033 void HcalDigiToRaw::produce(edm::StreamID id, edm::Event& e, const edm::EventSetup& es) const {
0034 HcalPacker::Collections colls;
0035
0036
0037 edm::Handle<HBHEDigiCollection> hbhe;
0038 if (!hbheTag_.label().empty()) {
0039 e.getByToken(tok_hbhe_, hbhe);
0040 colls.hbhe = hbhe.product();
0041 }
0042 edm::Handle<HODigiCollection> ho;
0043 if (!hoTag_.label().empty()) {
0044 e.getByToken(tok_ho_, ho);
0045 colls.hoCont = ho.product();
0046 }
0047 edm::Handle<HFDigiCollection> hf;
0048 if (!hfTag_.label().empty()) {
0049 e.getByToken(tok_hf_, hf);
0050 colls.hfCont = hf.product();
0051 }
0052 edm::Handle<HcalCalibDigiCollection> Calib;
0053 if (!calibTag_.label().empty()) {
0054 e.getByToken(tok_calib_, Calib);
0055 colls.calibCont = Calib.product();
0056 }
0057 edm::Handle<ZDCDigiCollection> zdc;
0058 if (!zdcTag_.label().empty()) {
0059 e.getByToken(tok_zdc_, zdc);
0060 colls.zdcCont = zdc.product();
0061 }
0062 edm::Handle<HcalTrigPrimDigiCollection> htp;
0063 if (!trigTag_.label().empty()) {
0064 e.getByToken(tok_htp_, htp);
0065 if (htp.isValid())
0066 colls.tpCont = htp.product();
0067 }
0068
0069 edm::ESHandle<HcalDbService> pSetup = es.getHandle(tok_dbService_);
0070 const HcalElectronicsMap* readoutMap = pSetup->getHcalMapping();
0071
0072 auto raw = std::make_unique<FEDRawDataCollection>();
0073
0074 const int ifed_first = FEDNumbering::MINHCALFEDID;
0075 const int ifed_last = FEDNumbering::MAXHCALFEDID;
0076
0077 int orbitN = e.id().event();
0078 int bcnN = 2000;
0079
0080
0081 for (int ifed = ifed_first; ifed <= ifed_last; ++ifed) {
0082 FEDRawData& fed = raw->FEDData(ifed);
0083 try {
0084 packer_.pack(ifed, ifed - ifed_first, e.id().event(), orbitN, bcnN, colls, *readoutMap, fed);
0085 } catch (cms::Exception& e) {
0086 edm::LogWarning("Unpacking error") << e.what();
0087 } catch (...) {
0088 edm::LogWarning("Unpacking exception");
0089 }
0090 }
0091
0092 e.put(std::move(raw));
0093 }