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 
17 
19 
23 
26 
28  : fileName(conf.getUntrackedParameter<std::string>("rctTestInputFile")),
29  rctLookupTables(new L1RCTLookupTables),
30  rct(new L1RCT(rctLookupTables)),
31  useEcal(conf.getParameter<bool>("useEcal")),
32  useHcal(conf.getParameter<bool>("useHcal")),
33  ecalDigisToken_(consumes(conf.getParameter<edm::InputTag>("ecalDigisLabel"))),
34  hcalDigisToken_(consumes(conf.getParameter<edm::InputTag>("hcalDigisLabel"))),
35  rctParametersToken_(esConsumes<L1RCTParameters, L1RCTParametersRcd>()),
36  channelMaskToken_(esConsumes<L1RCTChannelMask, L1RCTChannelMaskRcd>()),
37  emScaleToken_(esConsumes<L1CaloEtScale, L1EmEtScaleRcd>()),
38  transcoderToken_(esConsumes<CaloTPGTranscoder, CaloTPGRecord>()),
39  hcalScaleToken_(esConsumes<L1CaloHcalScale, L1CaloHcalScaleRcd>()),
40  ecalScaleToken_(esConsumes<L1CaloEcalScale, L1CaloEcalScaleRcd>()),
41  useDebugTpgScales(conf.getParameter<bool>("useDebugTpgScales")),
42  tokens_(consumesCollector()) {
43  ofs.open(fileName.c_str(), std::ios::app);
44  if (!ofs) {
45  throw cms::Exception("FailedFileOpen") << "Could not create " << fileName << std::endl;
46  }
47 }
48 
50  if (rct != nullptr)
51  delete rct;
52  if (rctLookupTables != nullptr)
53  delete rctLookupTables;
54 }
55 
58  const L1RCTParameters *r = rctParameters.product();
60  const L1RCTChannelMask *c = channelMask.product();
62  const L1CaloEtScale *s = emScale.product();
63 
67 
68  if (useDebugTpgScales) {
69  // use old-style scales
71  const CaloTPGTranscoder *h_tpg = transcoder.product();
72 
74 
75  L1CaloEcalScale *ecalScale = new L1CaloEcalScale();
76  L1CaloHcalScale *hcalScale = new L1CaloHcalScale();
77 
78  // create input scales, werner's code
79  // ECAL
80  std::cout << "ECAL Pos " << L1CaloEcalScale::nBinRank << std::endl;
81  for (unsigned short ieta = 1; ieta <= L1CaloEcalScale::nBinEta; ++ieta) {
82  for (unsigned short irank = 0; irank < L1CaloEcalScale::nBinRank; ++irank) {
83  std::cout << ieta << " " << irank;
84  EcalSubdetector subdet = (ieta <= 17) ? EcalBarrel : EcalEndcap;
85  double etGeVPos = e_tpg.getTPGInGeV(irank,
86  EcalTrigTowerDetId(1, // +ve eta
87  subdet,
88  ieta,
89  1)); // dummy phi value
90  ecalScale->setBin(irank, ieta, 1, etGeVPos);
91  std::cout << etGeVPos << ", ";
92  }
93  std::cout << std::endl;
94  }
95  std::cout << std::endl;
96 
97  std::cout << "ECAL Neg" << std::endl;
98  for (unsigned short ieta = 1; ieta <= L1CaloEcalScale::nBinEta; ++ieta) {
99  for (unsigned short irank = 0; irank < L1CaloEcalScale::nBinRank; ++irank) {
100  EcalSubdetector subdet = (ieta <= 17) ? EcalBarrel : EcalEndcap;
101 
102  std::cout << ieta << " " << irank;
103  double etGeVNeg = e_tpg.getTPGInGeV(irank,
104  EcalTrigTowerDetId(-1, // -ve eta
105  subdet,
106  ieta,
107  2)); // dummy phi value
108  ecalScale->setBin(irank, ieta, -1, etGeVNeg);
109  std::cout << etGeVNeg << ", ";
110  }
111  std::cout << std::endl;
112  }
113  std::cout << std::endl;
114 
115  // HCAL
116  std::cout << "HCAL" << std::endl;
117  for (unsigned short ieta = 1; ieta <= L1CaloHcalScale::nBinEta; ++ieta) {
118  for (unsigned short irank = 0; irank < L1CaloHcalScale::nBinRank; ++irank) {
119  double etGeV = h_tpg->hcaletValue(ieta, irank);
120 
121  hcalScale->setBin(irank, ieta, 1, etGeV);
122  hcalScale->setBin(irank, ieta, -1, etGeV);
123  std::cout << etGeV << ", ";
124  std::cout << std::endl;
125  }
126  std::cout << std::endl;
127  }
128 
129  // set the input scales
130  rctLookupTables->setEcalScale(ecalScale);
131  rctLookupTables->setHcalScale(hcalScale);
132 
133  } else {
135  const L1CaloHcalScale *h = hcalScale.product();
137  const L1CaloEcalScale *e = ecalScale.product();
138 
141  }
142 
147  if (ecal.isValid()) {
148  ecalColl = *ecal;
149  }
150  if (hcal.isValid()) {
151  hcalColl = *hcal;
152  }
153  rct->digiInput(ecalColl, hcalColl);
154  static int nEvents = 0;
155  if (nEvents == 0) {
156  ofs << "Crate = 0-17" << std::endl
157  << "Card = 0-7 within the crate" << std::endl
158  << "Tower = 0-31 covers 4 x 8 covered by the card" << std::endl
159  << "EMAddr(0:8) = EMFGBit(0:0)+CompressedEMET(1:8)" << std::endl
160  << "HDAddr(0:8) = HDFGBit(0:0)+CompressedHDET(1:8) - note: "
161  "HDFGBit(0:0) is not part of the hardware LUT address"
162  << std::endl
163  << "LutOut(0:17)= "
164  "LinearEMET(0:6)+HoEFGVetoBit(7:7)+LinearJetET(8:16)+ActivityBit(17:"
165  "17)"
166  << std::endl
167  << "Event"
168  << "\t"
169  << "Crate"
170  << "\t"
171  << "Card"
172  << "\t"
173  << "Tower"
174  << "\t"
175  << "EMAddr"
176  << "\t"
177  << "HDAddr"
178  << "\t"
179  << "LUTOut" << std::endl;
180  }
181  if (nEvents < 64) {
182  for (unsigned short iCrate = 0; iCrate < 18; iCrate++) {
183  for (unsigned short iCard = 0; iCard < 7; iCard++) {
184  // tower numbered from 0-31
185  for (unsigned short iTower = 0; iTower < 32; iTower++) {
186  unsigned short ecal = rct->ecalCompressedET(iCrate, iCard, iTower);
187  unsigned short hcal = rct->hcalCompressedET(iCrate, iCard, iTower);
188  unsigned short fgbit = rct->ecalFineGrainBit(iCrate, iCard, iTower);
189  unsigned short mubit = rct->hcalFineGrainBit(iCrate, iCard, iTower);
190  unsigned long lutOutput = rctLookupTables->lookup(ecal, hcal, fgbit, iCrate, iCard, iTower);
191  ofs << std::hex << nEvents << "\t" << iCrate << "\t" << iCard << "\t" << iTower << "\t" << ecal * 2 + fgbit
192  << "\t" << hcal * 2 + mubit << "\t" << lutOutput << std::dec << std::endl;
193  }
194  }
195  }
196  }
197  nEvents++;
198 }
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