CMS 3D CMS Logo

L1RCTInputProducer.cc
Go to the documentation of this file.
2 
5 
8 
9 #include <vector>
10 using std::vector;
11 
12 #include <iostream>
13 using std::cout;
14 using std::endl;
15 
17  : rctLookupTables(new L1RCTLookupTables),
18  rct(new L1RCT(rctLookupTables)),
19  useEcal(conf.getParameter<bool>("useEcal")),
20  useHcal(conf.getParameter<bool>("useHcal")),
21  ecalDigisLabel(conf.getParameter<edm::InputTag>("ecalDigisLabel")),
22  hcalDigisLabel(conf.getParameter<edm::InputTag>("hcalDigisLabel")),
23  rctParametersToken(esConsumes<L1RCTParameters, L1RCTParametersRcd>()),
24  channelMaskToken(esConsumes<L1RCTChannelMask, L1RCTChannelMaskRcd>()),
25  ecalScaleToken(esConsumes<L1CaloEcalScale, L1CaloEcalScaleRcd>()),
26  hcalScaleToken(esConsumes<L1CaloHcalScale, L1CaloHcalScaleRcd>()),
27  emScaleToken(esConsumes<L1CaloEtScale, L1EmEtScaleRcd>()) {
28  produces<std::vector<unsigned short>>("rctCrate");
29  produces<std::vector<unsigned short>>("rctCard");
30  produces<std::vector<unsigned short>>("rctTower");
31  produces<std::vector<unsigned int>>("rctEGammaET");
32  produces<std::vector<bool>>("rctHoEFGVetoBit");
33  produces<std::vector<unsigned int>>("rctJetMETET");
34  produces<std::vector<bool>>("rctTowerActivityBit");
35  produces<std::vector<bool>>("rctTowerMIPBit");
36  produces<std::vector<unsigned short>>("rctHFCrate");
37  produces<std::vector<unsigned short>>("rctHFRegion");
38  produces<std::vector<unsigned int>>("rctHFET");
39  produces<std::vector<bool>>("rctHFFG");
40 }
41 
43  if (rct != nullptr)
44  delete rct;
45  if (rctLookupTables != nullptr)
46  delete rctLookupTables;
47 }
48 
50  // Refresh configuration information every event
51  // Hopefully, this does not take too much time
52  // There should be a call back function in future to
53  // handle changes in configuration
54 
56  const L1RCTParameters *r = rctParameters.product();
58  const L1RCTChannelMask *c = channelMask.product();
60  const L1CaloEcalScale *e = ecalScale.product();
62  const L1CaloHcalScale *h = hcalScale.product();
64  const L1CaloEtScale *s = emScale.product();
65 
71 
74 
75  if (useEcal) {
76  event.getByLabel(ecalDigisLabel, ecal);
77  }
78  if (useHcal) {
79  event.getByLabel(hcalDigisLabel, hcal);
80  }
81 
84  if (ecal.isValid()) {
85  ecalColl = *ecal;
86  }
87  if (hcal.isValid()) {
88  hcalColl = *hcal;
89  }
90 
91  rct->digiInput(ecalColl, hcalColl);
92 
93  // Stuff to create
94 
95  std::unique_ptr<std::vector<unsigned short>> rctCrate(new std::vector<unsigned short>);
96  std::unique_ptr<std::vector<unsigned short>> rctCard(new std::vector<unsigned short>);
97  std::unique_ptr<std::vector<unsigned short>> rctTower(new std::vector<unsigned short>);
98  std::unique_ptr<std::vector<unsigned int>> rctEGammaET(new std::vector<unsigned int>);
99  std::unique_ptr<std::vector<bool>> rctHoEFGVetoBit(new std::vector<bool>);
100  std::unique_ptr<std::vector<unsigned int>> rctJetMETET(new std::vector<unsigned int>);
101  std::unique_ptr<std::vector<bool>> rctTowerActivityBit(new std::vector<bool>);
102  std::unique_ptr<std::vector<bool>> rctTowerMIPBit(new std::vector<bool>);
103 
104  for (int crate = 0; crate < 18; crate++) {
105  for (int card = 0; card < 7; card++) {
106  for (int tower = 0; tower < 32; tower++) {
107  unsigned short ecalCompressedET = rct->ecalCompressedET(crate, card, tower);
108  unsigned short ecalFineGrainBit = rct->ecalFineGrainBit(crate, card, tower);
109  unsigned short hcalCompressedET = rct->hcalCompressedET(crate, card, tower);
110  unsigned int lutBits =
111  rctLookupTables->lookup(ecalCompressedET, hcalCompressedET, ecalFineGrainBit, crate, card, tower);
112  unsigned int eGammaETCode = lutBits & 0x0000007F;
113  bool hOeFGVetoBit = (lutBits >> 7) & 0x00000001;
114  unsigned int jetMETETCode = (lutBits >> 8) & 0x000001FF;
115  bool activityBit = (lutBits >> 17) & 0x00000001;
116  if (eGammaETCode > 0 || jetMETETCode > 0 || hOeFGVetoBit || activityBit) {
117  rctCrate->push_back(crate);
118  rctCard->push_back(card);
119  rctTower->push_back(tower);
120  rctEGammaET->push_back(eGammaETCode);
121  rctHoEFGVetoBit->push_back(hOeFGVetoBit);
122  rctJetMETET->push_back(jetMETETCode);
123  rctTowerActivityBit->push_back(activityBit);
124  rctTowerMIPBit->push_back(false); // FIXME: MIP bit is not yet defined
125  }
126  }
127  }
128  }
129 
130  std::unique_ptr<std::vector<unsigned short>> rctHFCrate(new std::vector<unsigned short>);
131  std::unique_ptr<std::vector<unsigned short>> rctHFRegion(new std::vector<unsigned short>);
132  std::unique_ptr<std::vector<unsigned int>> rctHFET(new std::vector<unsigned int>);
133  std::unique_ptr<std::vector<bool>> rctHFFG(new std::vector<bool>);
134  for (int crate = 0; crate < 18; crate++) {
135  for (int hfRegion = 0; hfRegion < 8; hfRegion++) {
136  unsigned short hfCompressedET = rct->hfCompressedET(crate, hfRegion);
137  unsigned int hfETCode = rctLookupTables->lookup(hfCompressedET, crate, 999, hfRegion);
138  if (hfETCode > 0) {
139  rctHFCrate->push_back(crate);
140  rctHFRegion->push_back(hfRegion);
141  rctHFET->push_back(hfETCode);
142  rctHFFG->push_back(false); // FIXME: HF FG is not yet defined
143  }
144  }
145  }
146 
147  // putting stuff back into event
148  event.put(std::move(rctCrate), "rctCrate");
149  event.put(std::move(rctCard), "rctCard");
150  event.put(std::move(rctTower), "rctTower");
151  event.put(std::move(rctEGammaET), "rctEGammaET");
152  event.put(std::move(rctHoEFGVetoBit), "rctHoEFGVetoBit");
153  event.put(std::move(rctJetMETET), "rctJetMETET");
154  event.put(std::move(rctTowerActivityBit), "rctTowerActivityBit");
155  event.put(std::move(rctTowerMIPBit), "rctTowerMIPBit");
156  event.put(std::move(rctHFCrate), "rctHFCrate");
157  event.put(std::move(rctHFRegion), "rctHFRegion");
158  event.put(std::move(rctHFET), "rctHFET");
159  event.put(std::move(rctHFFG), "rctHFFG");
160 }
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
void produce(edm::Event &e, const edm::EventSetup &c) override
unsigned int lookup(unsigned short ecalInput, unsigned short hcalInput, unsigned short fgbit, unsigned short crtNo, unsigned short crdNo, unsigned short twrNo) const
unsigned short hcalCompressedET(int crate, int card, int tower)
Definition: L1RCT.h:65
unsigned short hfCompressedET(int crate, int tower)
Definition: L1RCT.h:71
edm::InputTag ecalDigisLabel
edm::ESGetToken< L1RCTChannelMask, L1RCTChannelMaskRcd > channelMaskToken
L1RCTInputProducer(const edm::ParameterSet &ps)
T const * product() const
Definition: ESHandle.h:86
void setHcalScale(const L1CaloHcalScale *hcalScale)
~L1RCTInputProducer() override
unsigned short ecalFineGrainBit(int crate, int card, int tower)
Definition: L1RCT.h:64
unsigned short ecalCompressedET(int crate, int card, int tower)
Definition: L1RCT.h:63
edm::ESGetToken< L1CaloHcalScale, L1CaloHcalScaleRcd > hcalScaleToken
void setL1CaloEtScale(const L1CaloEtScale *etScale)
edm::InputTag hcalDigisLabel
edm::ESGetToken< L1CaloEcalScale, L1CaloEcalScaleRcd > ecalScaleToken
void setEcalScale(const L1CaloEcalScale *ecalScale)
void setRCTParameters(const L1RCTParameters *rctParameters)
HLT enums.
void digiInput(const EcalTrigPrimDigiCollection &ecalCollection, const HcalTrigPrimDigiCollection &hcalCollection)
Definition: L1RCT.cc:109
L1RCTLookupTables * rctLookupTables
Definition: L1RCT.h:20
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
edm::ESGetToken< L1RCTParameters, L1RCTParametersRcd > rctParametersToken
def move(src, dest)
Definition: eostools.py:511
void setChannelMask(const L1RCTChannelMask *channelMask)
Definition: event.py:1
edm::ESGetToken< L1CaloEtScale, L1EmEtScaleRcd > emScaleToken