CMS 3D CMS Logo

HcalLuttoDB.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: HcalLuttoDB
4 // Class: HcalLuttoDB
5 //
13 //
14 // Original Author: Michael Weinberger
15 // Created: Mon Mar 19 11:53:56 CDT 2007
16 //
17 //
18 
19 // system include files
20 #include <memory>
21 
22 // user include files
27 
29 
38 
43 
44 using namespace edm;
45 using namespace std;
46 #include <iostream>
47 #include <fstream>
48 #include "md5.h"
49 
50 //
51 // class decleration
52 //
53 
54 class HcalLuttoDB : public edm::EDAnalyzer {
55 public:
56  explicit HcalLuttoDB(const edm::ParameterSet&);
57  ~HcalLuttoDB() override;
58 
59  void beginJob() override;
60  void analyze(const edm::Event&, const edm::EventSetup&) override;
61  void endJob() override;
62 
63 private:
64  void writeoutlut1(HcalDetId id, HcalElectronicsId eid, const std::vector<unsigned short>& lut, std::ostream& os);
65  std::vector<unsigned char> extractOutputLut(const CaloTPGTranscoder& coder, HcalTrigTowerDetId chan);
66  void writeoutlut2(HcalTrigTowerDetId id,
68  const std::vector<unsigned char>& lut,
69  std::ostream& os);
73  std::ostream* openPerCrate(int crate);
74  std::ostream* openPerLut1(HcalElectronicsId eid);
75  std::ostream* openPerLut2(HcalElectronicsId eid);
76  std::ostream* openChecksums();
80  std::ostream* oc_;
81 };
82 // ----------member data ---------------------------
83 
86 static const int formatRevision_ = 1;
87 
88 // constructors and destructor
89 //
91  creationtag_ = iConfig.getParameter<std::string>("creationtag");
92  targetfirmware_ = iConfig.getParameter<std::string>("targetfirmware");
93  filePerCrate_ = iConfig.getUntrackedParameter<bool>("filePerCrate", true);
94  fileformat_ = iConfig.getParameter<std::string>("filePrefix");
95  tokdb_ = esConsumes<HcalDbService, HcalDbRecord>();
96  tokhcalCode_ = esConsumes<HcalTPGCoder, HcalTPGRecord>();
97  tokcaloCode_ = esConsumes<CaloTPGTranscoder, CaloTPGRecord>();
98 }
99 
101 
102 //
103 // member functions
104 //
105 
106 std::ostream* HcalLuttoDB::openChecksums() {
107  char fname[1024];
108  snprintf(fname, 1024, "%s_checksums.xml", fileformat_.c_str());
109  std::ostream* os = new std::ofstream(fname);
110  (*os) << "<?xml version=\"1.0\"?>\n<CFGBrick>\n";
111  return os;
112 }
113 
114 std::ostream* HcalLuttoDB::openPerCrate(int crate) {
115  char fname[1024];
116  snprintf(fname, 1024, "%s_%d.xml", fileformat_.c_str(), crate);
117  std::ostream* os = new std::ofstream(fname);
118  (*os) << "<?xml version=\"1.0\"?>\n<CFGBrickSet>\n";
119  return os;
120 }
121 
123  char fname[1024];
124  snprintf(fname,
125  1024,
126  "%s_%d_%d%c_%d_%d_1.xml",
127  fileformat_.c_str(),
128  eid.readoutVMECrateId(),
129  eid.htrSlot(),
130  ((eid.htrTopBottom()) ? ('t') : ('b')),
131  eid.fiberIndex(),
132  eid.fiberChanId());
133  std::ostream* os = new std::ofstream(fname);
134  (*os) << "<?xml version=\"1.0\"?>\n";
135  return os;
136 }
137 
139  char fname[1024];
140  snprintf(fname,
141  1024,
142  "%s_%d_%d%c_%d_%d_2.xml",
143  fileformat_.c_str(),
144  eid.readoutVMECrateId(),
145  eid.htrSlot(),
146  ((eid.htrTopBottom()) ? ('t') : ('b')),
147  eid.slbSiteNumber(),
148  eid.slbChannelIndex());
149  std::ostream* os = new std::ofstream(fname);
150  (*os) << "<?xml version=\"1.0\"?>\n";
151  return os;
152 }
153 
156  const std::vector<unsigned short>& lut,
157  std::ostream& os) {
158  os << "<CFGBrick> " << std::endl;
159  os << " <Parameter name='IETA' type='int'>" << id.ieta() << "</Parameter>" << std::endl;
160  os << " <Parameter name='IPHI' type='int'>" << id.iphi() << "</Parameter>" << std::endl;
161  os << " <Parameter name='DEPTH' type='int'>" << id.depth() << "</Parameter>" << std::endl;
162  os << " <Parameter name='CRATE' type='int'>" << eid.readoutVMECrateId() << "</Parameter>" << std::endl;
163  os << " <Parameter name='SLOT' type='int'>" << eid.htrSlot() << "</Parameter>" << std::endl;
164  os << " <Parameter name='TOPBOTTOM' type='int'>" << eid.htrTopBottom() << "</Parameter>" << std::endl;
165  os << " <Parameter name='FIBER' type='int'>" << eid.fiberIndex() << "</Parameter>" << std::endl;
166  os << " <Parameter name='FIBERCHAN' type='int'>" << eid.fiberChanId() << "</Parameter>" << std::endl;
167  os << " <Parameter name='LUT_TYPE' type='int'>1</Parameter>" << std::endl;
168  os << " <Parameter name='CREATIONTAG' type='string'>" << creationtag_ << "</Parameter>" << std::endl;
169  os << " <Parameter name='CREATIONSTAMP' type='string'>" << creationstamp_ << "</Parameter>" << std::endl;
170  os << " <Parameter name='FORMATREVISION' type='string'>" << formatRevision_ << "</Parameter>" << std::endl;
171  os << " <Parameter name='TARGETFIRMWARE' type='string'>" << targetfirmware_ << "</Parameter>" << std::endl;
172  int generalizedIndex = id.ietaAbs() + 1000 * id.depth() + 10000 * id.iphi() + ((id.ieta() < 0) ? (0) : (100)) +
173  ((id.subdet() == HcalForward && id.ietaAbs() == 29) ? (4 * 10000) : (0));
174 
175  os << " <Parameter name='GENERALIZEDINDEX' type='int'>" << generalizedIndex << "</Parameter>" << std::endl;
176  // do checksum
177  md5_state_t md5er;
178  md5_byte_t digest[16];
179  unsigned char tool[2];
180  md5_init(&md5er);
181  for (int i = 0; i < 128; i++) {
182  tool[0] = lut[i] & 0xFF;
183  tool[1] = (lut[i] >> 8) & 0xFF;
184  md5_append(&md5er, tool, 2);
185  }
186  md5_finish(&md5er, digest);
187  os << " <Parameter name='CHECKSUM' type='string'>";
188  for (int i = 0; i < 16; i++)
189  os << std::hex << (((int)(digest[i])) & 0xFF);
190  os << "</Parameter>\n";
191 
192  *oc_ << " <Data crate='" << eid.readoutVMECrateId() << "' slot='" << eid.htrSlot() << "' fpga='"
193  << eid.htrTopBottom() << "' fiber='" << eid.fiberIndex() << "' fiberchan='" << eid.fiberChanId()
194  << "' luttype='1' elements='1' encoding='hex'>";
195  for (int i = 0; i < 16; i++)
196  *oc_ << std::hex << (((int)(digest[i])) & 0xFF);
197  *oc_ << "</Data>\n";
198 
199  os << " <Data elements='128' encoding='hex'> " << std::endl;
200  os << std::hex;
201  for (int initr2 = 0; initr2 < 128; initr2++) {
202  os << lut[initr2] << " ";
203  }
204  os << std::dec;
205  os << std::endl;
206  os << " </Data> " << std::endl;
207  os << "</CFGBrick> " << std::endl;
208 }
209 
212  const std::vector<unsigned char>& lut,
213  std::ostream& os) {
214  os << "<CFGBrick> " << std::endl;
215  os << " <Parameter name='IETA' type='int'>" << id.ieta() << "</Parameter>" << std::endl;
216  os << " <Parameter name='IPHI' type='int'>" << id.iphi() << "</Parameter>" << std::endl;
217  os << " <Parameter name='CRATE' type='int'>" << eid.readoutVMECrateId() << "</Parameter>" << std::endl;
218  os << " <Parameter name='SLOT' type='int'>" << eid.htrSlot() << "</Parameter>" << std::endl;
219  os << " <Parameter name='TOPBOTTOM' type='int'>" << eid.htrTopBottom() << "</Parameter>" << std::endl;
220  os << " <Parameter name='SLB' type='int'>" << eid.slbSiteNumber() << "</Parameter>" << std::endl;
221  os << " <Parameter name='SLBCHAN' type='int'>" << eid.slbChannelIndex() << "</Parameter>" << std::endl;
222  os << " <Parameter name='LUT_TYPE' type='int'>2</Parameter>" << std::endl;
223  os << " <Parameter name='CREATIONTAG' type='string'>" << creationtag_ << "</Parameter>" << std::endl;
224  os << " <Parameter name='CREATIONSTAMP' type='string'>" << creationstamp_ << "</Parameter>" << std::endl;
225  os << " <Parameter name='FORMATREVISION' type='string'>" << formatRevision_ << "</Parameter>" << std::endl;
226  os << " <Parameter name='TARGETFIRMWARE' type='string'>" << targetfirmware_ << "</Parameter>" << std::endl;
227  int generalizedIndex = id.ietaAbs() + 10000 * id.iphi() + ((id.ieta() < 0) ? (0) : (100));
228 
229  os << " <Parameter name='GENERALIZEDINDEX' type='int'>" << generalizedIndex << "</Parameter>" << std::endl;
230 
231  // do checksum
232  md5_state_t md5er;
233  md5_byte_t digest[16];
234  md5_init(&md5er);
235  md5_append(&md5er, &(lut[0]), 1024);
236  md5_finish(&md5er, digest);
237  os << " <Parameter name='CHECKSUM' type='string'>";
238  for (int i = 0; i < 16; i++)
239  os << std::hex << (((int)(digest[i])) & 0xFF);
240  os << "</Parameter>\n";
241 
242  *oc_ << " <Data crate='" << eid.readoutVMECrateId() << "' slot='" << eid.htrSlot() << "' fpga='"
243  << eid.htrTopBottom() << "' slb='" << eid.slbSiteNumber() << "' slbchan='" << eid.slbChannelIndex()
244  << "' luttype='2' elements='1' encoding='hex'>";
245  for (int i = 0; i < 16; i++)
246  *oc_ << std::hex << (((int)(digest[i])) & 0xFF);
247  *oc_ << "</Data>\n";
248 
249  os << " <Data elements='1024' encoding='hex'> " << std::endl;
250  os << std::hex;
251  for (int initr2 = 0; initr2 < 1024; initr2++) {
252  os << (int(lut[initr2]) & 0xFF) << " ";
253  }
254  os << std::dec;
255  os << std::endl;
256  os << " </Data> " << std::endl;
257  os << "</CFGBrick> " << std::endl;
258 }
259 
260 std::vector<unsigned char> HcalLuttoDB::extractOutputLut(const CaloTPGTranscoder& coder, HcalTrigTowerDetId chan) {
261  std::vector<unsigned char> lut;
262  for (int i = 0; i < 1024; i++) {
264  lut.push_back(s.compressedEt());
265  }
266  return lut;
267 }
268 
269 // ------------ method called to produce the data ------------
271  //using namespace edm;
272  //using namespace std;
273 
274  edm::LogInfo("Hcal") << "Beginning dump of Hcal TPG LUTS (this may take a minute or two)";
275 
276  const HcalElectronicsMap* Map_;
277  const HcalDbService* pSetup = &iSetup.getData(tokdb_);
278  Map_ = pSetup->getHcalMapping();
279  // get the conditions, for the decoding
280  const HcalTPGCoder* inputCoder = &iSetup.getData(tokhcalCode_);
281  const CaloTPGTranscoder* outTranscoder = &iSetup.getData(tokcaloCode_);
282 
283  std::vector<HcalElectronicsId> allEID = Map_->allElectronicsId();
284  std::vector<HcalElectronicsId>::iterator itreid;
285 
286  std::ostream* pfile = nullptr;
287  oc_ = openChecksums();
288 
289  for (int crate = 0; crate < 20; crate++) {
290  edm::LogInfo("Hcal") << "Beginning crate " << crate;
291  for (itreid = allEID.begin(); itreid != allEID.end(); ++itreid) {
292  if (itreid->readoutVMECrateId() != crate)
293  continue;
294  if (itreid->isTriggerChainId()) { // lut2
295  HcalTrigTowerDetId tid = Map_->lookupTrigger(*itreid);
296  if (tid.null())
297  continue;
298 
299  if (filePerCrate_ && pfile == nullptr)
300  pfile = openPerCrate(crate);
301  else if (pfile == nullptr)
302  pfile = openPerLut2(*itreid);
303 
304  std::vector<unsigned char> lut = extractOutputLut(*outTranscoder, tid);
305  writeoutlut2(tid, *itreid, lut, *pfile);
306  if (!filePerCrate_) {
307  delete pfile;
308  pfile = nullptr;
309  }
310  } else { // lut1
311  HcalGenericDetId gid = Map_->lookup(*itreid);
312  if (gid.null() || !(gid.genericSubdet() == HcalGenericDetId::HcalGenBarrel ||
315  continue;
316 
317  if (filePerCrate_ && pfile == nullptr)
318  pfile = openPerCrate(crate);
319  else if (pfile == nullptr)
320  pfile = openPerLut1(*itreid);
321 
322  std::vector<unsigned short> lut = inputCoder->getLinearizationLUT(HcalDetId(gid));
323  writeoutlut1(HcalDetId(gid), *itreid, lut, *pfile);
324  if (!filePerCrate_) {
325  delete pfile;
326  pfile = nullptr;
327  }
328  }
329  }
330  if (pfile != nullptr) {
331  if (filePerCrate_)
332  *pfile << "</CFGBrickSet>\n";
333  delete pfile;
334  pfile = nullptr;
335  }
336  }
337  *oc_ << "</CFGBrick>\n";
338  delete oc_;
339 }
340 
341 // ------------ method called once each job just before starting event loop ------------
343  char buffer[120];
344  time_t now = time(nullptr);
345  struct tm* tm = localtime(&now);
346  strftime(buffer, 120, "%F %T", tm);
347  creationstamp_ = buffer;
348 }
349 
350 // ------------ method called once each job just after ending the event loop ------------
352 
353 //define this as a plug-in
HcalElectronicsMap.h
CaloTPGTranscoder
Definition: CaloTPGTranscoder.h:24
HcalLuttoDB::writeoutlut1
void writeoutlut1(HcalDetId id, HcalElectronicsId eid, const std::vector< unsigned short > &lut, std::ostream &os)
Definition: HcalLuttoDB.cc:154
HcalLuttoDB::tokhcalCode_
edm::ESGetToken< HcalTPGCoder, HcalTPGRecord > tokhcalCode_
Definition: HcalLuttoDB.cc:78
bk::beginJob
void beginJob()
Definition: Breakpoints.cc:14
HcalLuttoDB::filePerCrate_
bool filePerCrate_
Definition: HcalLuttoDB.cc:70
mps_fire.i
i
Definition: mps_fire.py:428
HcalLuttoDB
Definition: HcalLuttoDB.cc:54
HcalElectronicsMap::allElectronicsId
std::vector< HcalElectronicsId > allElectronicsId() const
Definition: HcalElectronicsMap.cc:110
HcalGenericDetId
Definition: HcalGenericDetId.h:15
HcalLuttoDB::openPerLut2
std::ostream * openPerLut2(HcalElectronicsId eid)
Definition: HcalLuttoDB.cc:138
submitPVValidationJobs.now
now
Definition: submitPVValidationJobs.py:639
HcalTriggerPrimitiveSample
Definition: HcalTriggerPrimitiveSample.h:11
edm
HLT enums.
Definition: AlignableModifier.h:19
HcalLuttoDB::endJob
void endJob() override
Definition: HcalLuttoDB.cc:351
HcalTPGCoder::getLinearizationLUT
virtual std::vector< unsigned short > getLinearizationLUT(HcalDetId id) const
Get the full linearization LUT (128 elements). Default implementation just uses adc2Linear to get all...
Definition: HcalTPGCoder.cc:3
HcalLuttoDB::HcalLuttoDB
HcalLuttoDB(const edm::ParameterSet &)
Definition: HcalLuttoDB.cc:90
protons_cff.time
time
Definition: protons_cff.py:39
HcalGenericDetId::HcalGenEndcap
Definition: HcalGenericDetId.h:20
HcalGenericDetId.h
DetId::null
constexpr bool null() const
is this a null id ?
Definition: DetId.h:59
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
EDAnalyzer.h
creationtag_
std::string creationtag_
Definition: HcalLuttoDB.cc:84
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
CaloTPGTranscoder.h
HcalLuttoDB::~HcalLuttoDB
~HcalLuttoDB() override
Definition: HcalLuttoDB.cc:100
HcalTPGRecord.h
HcalDbService::getHcalMapping
const HcalElectronicsMap * getHcalMapping() const
Definition: HcalDbService.cc:343
HcalLuttoDB::openChecksums
std::ostream * openChecksums()
Definition: HcalLuttoDB.cc:106
edm::EDAnalyzer
Definition: EDAnalyzer.h:28
HcalTPGCoder
Definition: HcalTPGCoder.h:26
edmScanValgrind.buffer
buffer
Definition: edmScanValgrind.py:171
HcalElectronicsMap::lookupTrigger
const DetId lookupTrigger(HcalElectronicsId fId) const
brief lookup the trigger logical detid associated with the given electronics id
Definition: HcalElectronicsMap.cc:80
HcalLuttoDB::tokcaloCode_
edm::ESGetToken< CaloTPGTranscoder, CaloTPGRecord > tokcaloCode_
Definition: HcalLuttoDB.cc:79
MakerMacros.h
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
HcalLuttoDB::writeoutlut2
void writeoutlut2(HcalTrigTowerDetId id, HcalElectronicsId eid, const std::vector< unsigned char > &lut, std::ostream &os)
Definition: HcalLuttoDB.cc:210
HcalElectronicsId
Readout chain identification for Hcal.
Definition: HcalElectronicsId.h:32
HcalLuttoDB::openPerCrate
std::ostream * openPerCrate(int crate)
Definition: HcalLuttoDB.cc:114
HcalDbRecord.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HcalTrigTowerDetId.h
HcalLuttoDB::beginJob
void beginJob() override
Definition: HcalLuttoDB.cc:342
HcalLuttoDB::tokdb_
edm::ESGetToken< HcalDbService, HcalDbRecord > tokdb_
Definition: HcalLuttoDB.cc:77
edm::ParameterSet
Definition: ParameterSet.h:47
HcalLuttoDB::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: HcalLuttoDB.cc:270
HcalDetId.h
HcalLuttoDB::openPerLut1
std::ostream * openPerLut1(HcalElectronicsId eid)
Definition: HcalLuttoDB.cc:122
HcalDetId
Definition: HcalDetId.h:12
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
runTauDisplay.eid
eid
Definition: runTauDisplay.py:298
formatRevision_
static const int formatRevision_
Definition: HcalLuttoDB.cc:86
analyze
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
HcalGenericDetId::HcalGenBarrel
Definition: HcalGenericDetId.h:19
edm::EventSetup
Definition: EventSetup.h:58
HcalSubdetector.h
CaloTPGRecord.h
HcalElectronicsId.h
HcalLuttoDB::oc_
std::ostream * oc_
Definition: HcalLuttoDB.cc:80
edm::ESGetToken< HcalDbService, HcalDbRecord >
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
HcalElectronicsMap
Definition: HcalElectronicsMap.h:31
HcalForward
Definition: HcalAssistant.h:36
alignmentValidation.fname
string fname
main script
Definition: alignmentValidation.py:959
HcalDbService
Definition: HcalDbService.h:26
std
Definition: JetResolutionObject.h:76
targetfirmware_
std::string targetfirmware_
Definition: HcalLuttoDB.cc:85
HcalElectronicsMap::lookup
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
Definition: HcalElectronicsMap.cc:70
DetId.h
officialStyle.chan
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi....
Definition: officialStyle.py:106
HcalGenericDetId::genericSubdet
HcalGenericSubdetector genericSubdet() const
Definition: HcalGenericDetId.cc:21
HcalLuttoDB::fileformat_
std::string fileformat_
Definition: HcalLuttoDB.cc:72
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
HcalLuttoDB::creationstamp_
std::string creationstamp_
Definition: HcalLuttoDB.cc:71
HcalLuttoDB::extractOutputLut
std::vector< unsigned char > extractOutputLut(const CaloTPGTranscoder &coder, HcalTrigTowerDetId chan)
Definition: HcalLuttoDB.cc:260
HcalDbService.h
CaloTPGTranscoder::hcalCompress
virtual HcalTriggerPrimitiveSample hcalCompress(const HcalTrigTowerDetId &id, unsigned int sample, int fineGrain) const =0
Compression from linear samples+fine grain in the HTR.
ParameterSet.h
edm::Event
Definition: Event.h:73
HcalGenericDetId::HcalGenForward
Definition: HcalGenericDetId.h:22
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
HcalTPGCoder.h
HcalTrigTowerDetId
Definition: HcalTrigTowerDetId.h:14