CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
L1RCTInputProducer.cc
Go to the documentation of this file.
2 
5 
10 
13 
16 
19 
22 
23 #include <vector>
24 using std::vector;
25 
26 #include <iostream>
27 using std::cout;
28 using std::endl;
29 
31  rctLookupTables(new L1RCTLookupTables),
32  rct(new L1RCT(rctLookupTables)),
33  useEcal(conf.getParameter<bool>("useEcal")),
34  useHcal(conf.getParameter<bool>("useHcal")),
35  ecalDigisLabel(conf.getParameter<edm::InputTag>("ecalDigisLabel")),
36  hcalDigisLabel(conf.getParameter<edm::InputTag>("hcalDigisLabel"))
37 {
38  produces<std::vector<unsigned short> >("rctCrate");
39  produces<std::vector<unsigned short> >("rctCard");
40  produces<std::vector<unsigned short> >("rctTower");
41  produces<std::vector<unsigned int> >("rctEGammaET");
42  produces<std::vector<bool> >("rctHoEFGVetoBit");
43  produces<std::vector<unsigned int> >("rctJetMETET");
44  produces<std::vector<bool> >("rctTowerActivityBit");
45  produces<std::vector<bool> >("rctTowerMIPBit");
46  produces<std::vector<unsigned short> >("rctHFCrate");
47  produces<std::vector<unsigned short> >("rctHFRegion");
48  produces<std::vector<unsigned int> >("rctHFET");
49  produces<std::vector<bool> >("rctHFFG");
50 }
51 
53 {
54  if(rct != 0) delete rct;
55  if(rctLookupTables != 0) delete rctLookupTables;
56 }
57 
58 
59 
61 {
62 
63  // Refresh configuration information every event
64  // Hopefully, this does not take too much time
65  // There should be a call back function in future to
66  // handle changes in configuration
67 
68  edm::ESHandle<L1RCTParameters> rctParameters;
69  eventSetup.get<L1RCTParametersRcd>().get(rctParameters);
70  const L1RCTParameters* r = rctParameters.product();
72  eventSetup.get<L1RCTChannelMaskRcd>().get(channelMask);
73  const L1RCTChannelMask* c = channelMask.product();
75  eventSetup.get<L1CaloEcalScaleRcd>().get(ecalScale);
76  const L1CaloEcalScale* e = ecalScale.product();
78  eventSetup.get<L1CaloHcalScaleRcd>().get(hcalScale);
79  const L1CaloHcalScale* h = hcalScale.product();
81  eventSetup.get<L1EmEtScaleRcd>().get(emScale);
82  const L1CaloEtScale* s = emScale.product();
83 
89 
92 
93  if (useEcal) { event.getByLabel(ecalDigisLabel, ecal); }
94  if (useHcal) { event.getByLabel(hcalDigisLabel, hcal); }
95 
98  if (ecal.isValid()) { ecalColl = *ecal; }
99  if (hcal.isValid()) { hcalColl = *hcal; }
100 
101  rct->digiInput(ecalColl, hcalColl);
102 
103  // Stuff to create
104 
105  std::auto_ptr<std::vector<unsigned short> >
106  rctCrate(new std::vector<unsigned short>);
107  std::auto_ptr<std::vector<unsigned short> >
108  rctCard(new std::vector<unsigned short>);
109  std::auto_ptr<std::vector<unsigned short> >
110  rctTower(new std::vector<unsigned short>);
111  std::auto_ptr<std::vector<unsigned int> >
112  rctEGammaET(new std::vector<unsigned int>);
113  std::auto_ptr<std::vector<bool> > rctHoEFGVetoBit(new std::vector<bool>);
114  std::auto_ptr<std::vector<unsigned int> >
115  rctJetMETET(new std::vector<unsigned int>);
116  std::auto_ptr<std::vector<bool> > rctTowerActivityBit(new std::vector<bool>);
117  std::auto_ptr<std::vector<bool> > rctTowerMIPBit(new std::vector<bool>);
118 
119  for(int crate = 0; crate < 18; crate++) {
120  for(int card = 0; card < 7; card++) {
121  for(int tower = 0; tower < 32; tower++) {
122  unsigned short ecalCompressedET =
123  rct->ecalCompressedET(crate, card, tower);
124  unsigned short ecalFineGrainBit =
125  rct->ecalFineGrainBit(crate, card, tower);
126  unsigned short hcalCompressedET =
127  rct->hcalCompressedET(crate, card, tower);
128  unsigned int lutBits =
129  rctLookupTables->lookup(ecalCompressedET, hcalCompressedET,
130  ecalFineGrainBit, crate, card, tower);
131  unsigned int eGammaETCode = lutBits & 0x0000007F;
132  bool hOeFGVetoBit = (lutBits >> 7) & 0x00000001;
133  unsigned int jetMETETCode = (lutBits >> 8) & 0x000001FF;
134  bool activityBit = (lutBits >> 17) & 0x00000001;
135  if(eGammaETCode > 0 || jetMETETCode > 0 ||
136  hOeFGVetoBit || activityBit) {
137  rctCrate->push_back(crate);
138  rctCard->push_back(card);
139  rctTower->push_back(tower);
140  rctEGammaET->push_back(eGammaETCode);
141  rctHoEFGVetoBit->push_back(hOeFGVetoBit);
142  rctJetMETET->push_back(jetMETETCode);
143  rctTowerActivityBit->push_back(activityBit);
144  rctTowerMIPBit->push_back(0); // FIXME: MIP bit is not yet defined
145  }
146  }
147  }
148  }
149 
150  std::auto_ptr<std::vector<unsigned short> >
151  rctHFCrate(new std::vector<unsigned short>);
152  std::auto_ptr<std::vector<unsigned short> >
153  rctHFRegion(new std::vector<unsigned short>);
154  std::auto_ptr<std::vector<unsigned int> > rctHFET(new std::vector<unsigned int>);
155  std::auto_ptr<std::vector<bool> > rctHFFG(new std::vector<bool>);
156  for(int crate = 0; crate < 18; crate++) {
157  for(int hfRegion = 0; hfRegion < 8; hfRegion++) {
158  unsigned short hfCompressedET = rct->hfCompressedET(crate, hfRegion);
159  unsigned int hfETCode =
160  rctLookupTables->lookup(hfCompressedET, crate, 999, hfRegion);
161  if(hfETCode > 0) {
162  rctHFCrate->push_back(crate);
163  rctHFRegion->push_back(hfRegion);
164  rctHFET->push_back(hfETCode);
165  rctHFFG->push_back(0); // FIXME: HF FG is not yet defined
166  }
167  }
168  }
169 
170  //putting stuff back into event
171  event.put(rctCrate, "rctCrate");
172  event.put(rctCard, "rctCard");
173  event.put(rctTower, "rctTower");
174  event.put(rctEGammaET, "rctEGammaET");
175  event.put(rctHoEFGVetoBit, "rctHoEFGVetoBit");
176  event.put(rctJetMETET, "rctJetMETET");
177  event.put(rctTowerActivityBit, "rctTowerActivityBit");
178  event.put(rctTowerMIPBit, "rctTowerMIPBit");
179  event.put(rctHFCrate, "rctHFCrate");
180  event.put(rctHFRegion, "rctHFRegion");
181  event.put(rctHFET, "rctHFET");
182  event.put(rctHFFG, "rctHFFG");
183 
184 }
unsigned short hcalCompressedET(int crate, int card, int tower)
Definition: L1RCT.h:82
unsigned short hfCompressedET(int crate, int tower)
Definition: L1RCT.h:86
edm::InputTag ecalDigisLabel
L1RCTInputProducer(const edm::ParameterSet &ps)
void setHcalScale(const L1CaloHcalScale *hcalScale)
unsigned short ecalFineGrainBit(int crate, int card, int tower)
Definition: L1RCT.h:80
unsigned short ecalCompressedET(int crate, int card, int tower)
Definition: L1RCT.h:78
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool isValid() const
Definition: HandleBase.h:76
void setL1CaloEtScale(const L1CaloEtScale *etScale)
tuple conf
Definition: dbtoconf.py:185
edm::InputTag hcalDigisLabel
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
virtual void produce(edm::Event &e, const edm::EventSetup &c)
void setEcalScale(const L1CaloEcalScale *ecalScale)
void setRCTParameters(const L1RCTParameters *rctParameters)
void digiInput(const EcalTrigPrimDigiCollection &ecalCollection, const HcalTrigPrimDigiCollection &hcalCollection)
Definition: L1RCT.cc:116
L1RCTLookupTables * rctLookupTables
tuple cout
Definition: gather_cfg.py:121
Definition: L1RCT.h:20
void setChannelMask(const L1RCTChannelMask *channelMask)
unsigned int lookup(unsigned short ecalInput, unsigned short hcalInput, unsigned short fgbit, unsigned short crtNo, unsigned short crdNo, unsigned short twrNo) const