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 }
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
l1RctEmulDigis_ECALGREN1_cff.ecalDigisLabel
ecalDigisLabel
Definition: l1RctEmulDigis_ECALGREN1_cff.py:8
L1RCTInputProducer.h
electrons_cff.bool
bool
Definition: electrons_cff.py:393
L1CaloHcalScale
Definition: L1CaloHcalScale.h:28
L1RCTInputProducer::hcalScaleToken
edm::ESGetToken< L1CaloHcalScale, L1CaloHcalScaleRcd > hcalScaleToken
Definition: L1RCTInputProducer.h:46
L1CaloEcalScale
Definition: L1CaloEcalScale.h:28
L1RCTInputProducer::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Definition: L1RCTInputProducer.cc:49
L1RCTLookupTables::lookup
unsigned int lookup(unsigned short ecalInput, unsigned short hcalInput, unsigned short fgbit, unsigned short crtNo, unsigned short crdNo, unsigned short twrNo) const
Definition: L1RCTLookupTables.cc:22
L1RCTInputProducer::rct
L1RCT * rct
Definition: L1RCTInputProducer.h:38
hcal
Definition: ConfigurationDatabase.cc:13
L1CaloEcalScaleRcd
Definition: L1CaloEcalScaleRcd.h:12
edm
HLT enums.
Definition: AlignableModifier.h:19
L1RCTInputProducer::useHcal
bool useHcal
Definition: L1RCTInputProducer.h:40
gather_cfg.cout
cout
Definition: gather_cfg.py:144
L1RCTParametersRcd
Definition: L1RCTParametersRcd.h:12
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
l1RctEmulDigis_ECALGREN1_cff.hcalDigisLabel
hcalDigisLabel
Definition: l1RctEmulDigis_ECALGREN1_cff.py:4
hgcalTowerProducer_cfi.tower
tower
Definition: hgcalTowerProducer_cfi.py:4
L1RCT::hfCompressedET
unsigned short hfCompressedET(int crate, int tower)
Definition: L1RCT.h:71
edm::SortedCollection
Definition: SortedCollection.h:49
L1RCTChannelMask
Definition: L1RCTChannelMask.h:7
L1RCTInputProducer::rctParametersToken
edm::ESGetToken< L1RCTParameters, L1RCTParametersRcd > rctParametersToken
Definition: L1RCTInputProducer.h:43
edm::Handle
Definition: AssociativeIterator.h:50
L1RCT::ecalCompressedET
unsigned short ecalCompressedET(int crate, int card, int tower)
Definition: L1RCT.h:63
L1RCTInputProducer::useEcal
bool useEcal
Definition: L1RCTInputProducer.h:39
distMuonMETValueMapProducer_cff.useHcal
useHcal
Definition: distMuonMETValueMapProducer_cff.py:23
patCandidatesForDimuonsSequences_cff.hcal
hcal
Definition: patCandidatesForDimuonsSequences_cff.py:37
alignCSCRings.s
s
Definition: alignCSCRings.py:92
L1RCT.h
L1RCTLookupTables::setHcalScale
void setHcalScale(const L1CaloHcalScale *hcalScale)
Definition: L1RCTLookupTables.h:27
L1RCT
Definition: L1RCT.h:20
HcalDigiCollections.h
EcalDigiCollections.h
edm::ESHandle
Definition: DTSurvey.h:22
L1RCTInputProducer::ecalScaleToken
edm::ESGetToken< L1CaloEcalScale, L1CaloEcalScaleRcd > ecalScaleToken
Definition: L1RCTInputProducer.h:45
L1RCTInputProducer::ecalDigisLabel
edm::InputTag ecalDigisLabel
Definition: L1RCTInputProducer.h:41
h
L1RCT::ecalFineGrainBit
unsigned short ecalFineGrainBit(int crate, int card, int tower)
Definition: L1RCT.h:64
L1RCTLookupTables
Definition: L1RCTLookupTables.h:11
distMuonMETValueMapProducer_cff.useEcal
useEcal
Definition: distMuonMETValueMapProducer_cff.py:22
edm::ParameterSet
Definition: ParameterSet.h:47
L1RCTChannelMaskRcd
Definition: L1RCTChannelMaskRcd.h:12
L1RCTInputProducer::~L1RCTInputProducer
~L1RCTInputProducer() override
Definition: L1RCTInputProducer.cc:42
L1CaloEtScale
Definition: L1CaloEtScale.h:29
L1RCTLookupTables::setL1CaloEtScale
void setL1CaloEtScale(const L1CaloEtScale *etScale)
Definition: L1RCTLookupTables.h:29
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
L1RCTInputProducer::channelMaskToken
edm::ESGetToken< L1RCTChannelMask, L1RCTChannelMaskRcd > channelMaskToken
Definition: L1RCTInputProducer.h:44
L1RCTLookupTables.h
edm::EventSetup
Definition: EventSetup.h:57
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
L1RCTInputProducer::rctLookupTables
L1RCTLookupTables * rctLookupTables
Definition: L1RCTInputProducer.h:37
alignCSCRings.r
r
Definition: alignCSCRings.py:93
eostools.move
def move(src, dest)
Definition: eostools.py:511
L1RCTLookupTables::setEcalScale
void setEcalScale(const L1CaloEcalScale *ecalScale)
Definition: L1RCTLookupTables.h:31
L1EmEtScaleRcd
Definition: L1EmEtScaleRcd.h:30
L1RCTLookupTables::setRCTParameters
void setRCTParameters(const L1RCTParameters *rctParameters)
Definition: L1RCTLookupTables.h:21
L1RCTParameters
Definition: L1RCTParameters.h:27
bsc_activity_cfg.ecal
ecal
Definition: bsc_activity_cfg.py:25
L1RCTInputProducer::hcalDigisLabel
edm::InputTag hcalDigisLabel
Definition: L1RCTInputProducer.h:42
L1RCTLookupTables::setChannelMask
void setChannelMask(const L1RCTChannelMask *channelMask)
Definition: L1RCTLookupTables.h:23
event
Definition: event.py:1
L1RCTInputProducer::L1RCTInputProducer
L1RCTInputProducer(const edm::ParameterSet &ps)
Definition: L1RCTInputProducer.cc:16
L1RCTInputProducer::emScaleToken
edm::ESGetToken< L1CaloEtScale, L1EmEtScaleRcd > emScaleToken
Definition: L1RCTInputProducer.h:47
edm::Event
Definition: Event.h:73
L1RCT::digiInput
void digiInput(const EcalTrigPrimDigiCollection &ecalCollection, const HcalTrigPrimDigiCollection &hcalCollection)
Definition: L1RCT.cc:109
L1RCT::hcalCompressedET
unsigned short hcalCompressedET(int crate, int card, int tower)
Definition: L1RCT.h:65
L1CaloHcalScaleRcd
Definition: L1CaloHcalScaleRcd.h:13
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37