CMS 3D CMS Logo

L1RCTSaveInput.cc
Go to the documentation of this file.
1 #include <fstream>
2 #include <iostream>
3 #include <memory>
4 #include <string>
5 using std::cerr;
6 using std::cout;
7 using std::endl;
8 using std::ostream;
9 
10 #include <iomanip>
11 
16 
18 
22 
25 
27  : fileName(conf.getUntrackedParameter<std::string>("rctTestInputFile")),
28  rctLookupTables(new L1RCTLookupTables),
29  rct(new L1RCT(rctLookupTables)),
30  useEcal(conf.getParameter<bool>("useEcal")),
31  useHcal(conf.getParameter<bool>("useHcal")),
32  ecalDigisToken_(consumes(conf.getParameter<edm::InputTag>("ecalDigisLabel"))),
33  hcalDigisToken_(consumes(conf.getParameter<edm::InputTag>("hcalDigisLabel"))),
34  rctParametersToken_(esConsumes<L1RCTParameters, L1RCTParametersRcd>()),
35  channelMaskToken_(esConsumes<L1RCTChannelMask, L1RCTChannelMaskRcd>()),
36  emScaleToken_(esConsumes<L1CaloEtScale, L1EmEtScaleRcd>()),
37  transcoderToken_(esConsumes<CaloTPGTranscoder, CaloTPGRecord>()),
38  hcalScaleToken_(esConsumes<L1CaloHcalScale, L1CaloHcalScaleRcd>()),
39  ecalScaleToken_(esConsumes<L1CaloEcalScale, L1CaloEcalScaleRcd>()),
40  useDebugTpgScales(conf.getParameter<bool>("useDebugTpgScales")),
41  tokens_(consumesCollector()) {
42  ofs.open(fileName.c_str(), std::ios::app);
43  if (!ofs) {
44  throw cms::Exception("FailedFileOpen") << "Could not create " << fileName << std::endl;
45  }
46 }
47 
49  if (rct != nullptr)
50  delete rct;
51  if (rctLookupTables != nullptr)
52  delete rctLookupTables;
53 }
54 
57  const L1RCTParameters *r = rctParameters.product();
59  const L1RCTChannelMask *c = channelMask.product();
61  const L1CaloEtScale *s = emScale.product();
62 
66 
67  if (useDebugTpgScales) {
68  // use old-style scales
70  const CaloTPGTranscoder *h_tpg = transcoder.product();
71 
73 
74  L1CaloEcalScale *ecalScale = new L1CaloEcalScale();
75  L1CaloHcalScale *hcalScale = new L1CaloHcalScale();
76 
77  // create input scales, werner's code
78  // ECAL
79  std::cout << "ECAL Pos " << L1CaloEcalScale::nBinRank << std::endl;
80  for (unsigned short ieta = 1; ieta <= L1CaloEcalScale::nBinEta; ++ieta) {
81  for (unsigned short irank = 0; irank < L1CaloEcalScale::nBinRank; ++irank) {
82  std::cout << ieta << " " << irank;
83  EcalSubdetector subdet = (ieta <= 17) ? EcalBarrel : EcalEndcap;
84  double etGeVPos = e_tpg.getTPGInGeV(irank,
85  EcalTrigTowerDetId(1, // +ve eta
86  subdet,
87  ieta,
88  1)); // dummy phi value
89  ecalScale->setBin(irank, ieta, 1, etGeVPos);
90  std::cout << etGeVPos << ", ";
91  }
92  std::cout << std::endl;
93  }
94  std::cout << std::endl;
95 
96  std::cout << "ECAL Neg" << std::endl;
97  for (unsigned short ieta = 1; ieta <= L1CaloEcalScale::nBinEta; ++ieta) {
98  for (unsigned short irank = 0; irank < L1CaloEcalScale::nBinRank; ++irank) {
99  EcalSubdetector subdet = (ieta <= 17) ? EcalBarrel : EcalEndcap;
100 
101  std::cout << ieta << " " << irank;
102  double etGeVNeg = e_tpg.getTPGInGeV(irank,
103  EcalTrigTowerDetId(-1, // -ve eta
104  subdet,
105  ieta,
106  2)); // dummy phi value
107  ecalScale->setBin(irank, ieta, -1, etGeVNeg);
108  std::cout << etGeVNeg << ", ";
109  }
110  std::cout << std::endl;
111  }
112  std::cout << std::endl;
113 
114  // HCAL
115  std::cout << "HCAL" << std::endl;
116  for (unsigned short ieta = 1; ieta <= L1CaloHcalScale::nBinEta; ++ieta) {
117  for (unsigned short irank = 0; irank < L1CaloHcalScale::nBinRank; ++irank) {
118  double etGeV = h_tpg->hcaletValue(ieta, irank);
119 
120  hcalScale->setBin(irank, ieta, 1, etGeV);
121  hcalScale->setBin(irank, ieta, -1, etGeV);
122  std::cout << etGeV << ", ";
123  std::cout << std::endl;
124  }
125  std::cout << std::endl;
126  }
127 
128  // set the input scales
129  rctLookupTables->setEcalScale(ecalScale);
130  rctLookupTables->setHcalScale(hcalScale);
131 
132  } else {
134  const L1CaloHcalScale *h = hcalScale.product();
136  const L1CaloEcalScale *e = ecalScale.product();
137 
140  }
141 
146  if (ecal.isValid()) {
147  ecalColl = *ecal;
148  }
149  if (hcal.isValid()) {
150  hcalColl = *hcal;
151  }
152  rct->digiInput(ecalColl, hcalColl);
153  static int nEvents = 0;
154  if (nEvents == 0) {
155  ofs << "Crate = 0-17" << std::endl
156  << "Card = 0-7 within the crate" << std::endl
157  << "Tower = 0-31 covers 4 x 8 covered by the card" << std::endl
158  << "EMAddr(0:8) = EMFGBit(0:0)+CompressedEMET(1:8)" << std::endl
159  << "HDAddr(0:8) = HDFGBit(0:0)+CompressedHDET(1:8) - note: "
160  "HDFGBit(0:0) is not part of the hardware LUT address"
161  << std::endl
162  << "LutOut(0:17)= "
163  "LinearEMET(0:6)+HoEFGVetoBit(7:7)+LinearJetET(8:16)+ActivityBit(17:"
164  "17)"
165  << std::endl
166  << "Event"
167  << "\t"
168  << "Crate"
169  << "\t"
170  << "Card"
171  << "\t"
172  << "Tower"
173  << "\t"
174  << "EMAddr"
175  << "\t"
176  << "HDAddr"
177  << "\t"
178  << "LUTOut" << std::endl;
179  }
180  if (nEvents < 64) {
181  for (unsigned short iCrate = 0; iCrate < 18; iCrate++) {
182  for (unsigned short iCard = 0; iCard < 7; iCard++) {
183  // tower numbered from 0-31
184  for (unsigned short iTower = 0; iTower < 32; iTower++) {
185  unsigned short ecal = rct->ecalCompressedET(iCrate, iCard, iTower);
186  unsigned short hcal = rct->hcalCompressedET(iCrate, iCard, iTower);
187  unsigned short fgbit = rct->ecalFineGrainBit(iCrate, iCard, iTower);
188  unsigned short mubit = rct->hcalFineGrainBit(iCrate, iCard, iTower);
189  unsigned long lutOutput = rctLookupTables->lookup(ecal, hcal, fgbit, iCrate, iCard, iTower);
190  ofs << std::hex << nEvents << "\t" << iCrate << "\t" << iCard << "\t" << iTower << "\t" << ecal * 2 + fgbit
191  << "\t" << hcal * 2 + mubit << "\t" << lutOutput << std::dec << std::endl;
192  }
193  }
194  }
195  }
196  nEvents++;
197 }
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
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
EcalTPGScale::Tokens tokens_
edm::EDGetTokenT< HcalTrigPrimDigiCollection > hcalDigisToken_
void setBin(unsigned short rank, unsigned short eta, short etaSign, double et)
set scale element; use this to create non-linear scales
L1RCTSaveInput(const edm::ParameterSet &)
L1RCTLookupTables * rctLookupTables
void setBin(unsigned short rank, unsigned short eta, short etaSign, double et)
set scale element; use this to create non-linear scales
unsigned short hcalFineGrainBit(int crate, int card, int tower)
Definition: L1RCT.h:68
edm::EDGetTokenT< EcalTrigPrimDigiCollection > ecalDigisToken_
edm::ESGetToken< CaloTPGTranscoder, CaloTPGRecord > transcoderToken_
T const * product() const
Definition: ESHandle.h:86
void setHcalScale(const L1CaloHcalScale *hcalScale)
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
static const unsigned short nBinRank
std::string fileName
edm::ESGetToken< L1CaloEcalScale, L1CaloEcalScaleRcd > ecalScaleToken_
edm::ESGetToken< L1RCTChannelMask, L1RCTChannelMaskRcd > channelMaskToken_
void setL1CaloEtScale(const L1CaloEtScale *etScale)
std::vector< edm::EDGetTokenT< int > > tokens_
std::ofstream ofs
edm::ESGetToken< L1CaloHcalScale, L1CaloHcalScaleRcd > hcalScaleToken_
void analyze(const edm::Event &, const edm::EventSetup &) override
edm::ESGetToken< L1CaloEtScale, L1EmEtScaleRcd > emScaleToken_
double getTPGInGeV(const EcalTriggerPrimitiveDigi &tpDigi) const
Definition: EcalTPGScale.cc:17
void setEcalScale(const L1CaloEcalScale *ecalScale)
edm::ESGetToken< L1RCTParameters, L1RCTParametersRcd > rctParametersToken_
void setRCTParameters(const L1RCTParameters *rctParameters)
HLT enums.
static const unsigned short nBinRank
void digiInput(const EcalTrigPrimDigiCollection &ecalCollection, const HcalTrigPrimDigiCollection &hcalCollection)
Definition: L1RCT.cc:109
static const unsigned short nBinEta
static const unsigned short nBinEta
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
virtual double hcaletValue(const int &ieta, const int &iphi, const int &version, const int &compressedValue) const =0
EcalSubdetector
void setChannelMask(const L1RCTChannelMask *channelMask)
Definition: event.py:1
~L1RCTSaveInput() override