48 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: Constructor" << endl;
51 dtDigiToken_ = consumes<DTDigiCollection>(
67 ltcDigiCollectionToken_ = consumes<LTCDigiCollection>(
77 inTimeHitsLowerBound = ps.
getParameter<
int>(
"inTimeHitsLowerBound");
78 inTimeHitsUpperBound = ps.
getParameter<
int>(
"inTimeHitsUpperBound");
105 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"DTDigiTask: analyzed " <<
nevents <<
" events" << endl;
112 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: begin run" << endl;
135 if(doStaticBooking) {
138 nEventMonitor = ibooker.
bookFloat(tpMode ?
"nProcessedEventsDigiTP" :
"nProcessedEventsDigi" );
140 for(
int wh = -2; wh <= 2; ++wh) {
141 if(doAllHitsOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyAllHits");
142 if(doNoiseOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyNoiseHits");
143 if(doInTimeOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyInTimeHits");
145 if(lookForSyncNoise || filterSyncNoise) {
146 bookHistos(ibooker, wh,
string(
"SynchNoise"),
"SyncNoiseEvents");
147 bookHistos(ibooker, wh,
string(
"SynchNoise"),
"SyncNoiseChambs");
150 for(
int st = 1; st <= 4; ++st) {
151 for(
int sect = 1; sect <= 14; ++sect) {
152 if((sect == 13 || sect == 14) && st != 4)
continue;
157 if (doAllHitsOccupancies) {
158 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyAllHits_perCh");
160 channelsMap(dtChId,
"OccupancyAllHits_perCh");
162 if(doNoiseOccupancies)
163 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyNoise_perCh");
164 if(doInTimeOccupancies)
165 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyInTimeHits_perCh");
167 for(
int sl = 1; sl <= 3; ++sl) {
168 if(st == 4 && sl == 2)
continue;
171 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBox");
174 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxDTonly");
175 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxNoDT");
176 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxDTalso");
188 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: Begin of LS transition" << endl;
192 if(lumiBlock % resetCycle == 0) {
194 <<
"[DTDigiTask]: Reset at the LS transition : "
195 << lumiBlock << endl;
197 map<string,map<uint32_t,MonitorElement*> >::const_iterator histosIt = digiHistos.begin();
198 map<string,map<uint32_t,MonitorElement*> >::const_iterator histosEnd = digiHistos.end();
199 for(;histosIt != histosEnd ; ++histosIt) {
200 map<uint32_t,MonitorElement*>::const_iterator histoIt = (*histosIt).second.begin();
201 map<uint32_t,MonitorElement*>::const_iterator histoEnd = (*histosIt).second.end();
202 for(;histoIt != histoEnd; ++histoIt) { (*histoIt).second->Reset(); }
206 for(
int wh=-2; wh<=2; wh++) {
207 for(
int sect=1; sect<=14; sect++) {
208 for(
int st=1; st<=4; st++) {
209 if( (sect == 13 || sect == 14) && st != 4 ) {
continue;}
211 channelsMap(dtChId,
"OccupancyAllHits_perCh");
217 map<string,map<int,MonitorElement*> >::const_iterator whHistosIt = wheelHistos.begin();
218 map<string,map<int,MonitorElement*> >::const_iterator whHistosEnd = wheelHistos.end();
219 for(; whHistosIt != whHistosEnd ; ++whHistosIt) {
220 if ((*whHistosIt).first.find(
"Sync") == string::npos) {
221 map<int,MonitorElement*>::const_iterator histoIt = (*whHistosIt).second.begin();
222 map<int,MonitorElement*>::const_iterator histoEnd = (*whHistosIt).second.end();
223 for(;histoIt != histoEnd; ++histoIt) { (*histoIt).second->Reset(); }
234 stringstream wheel; wheel << dtSL.
wheel();
236 stringstream sector; sector << dtSL.
sector();
237 stringstream superLayer; superLayer << dtSL.
superlayer();
239 "/Sector" + sector.str() +
240 "/Station" + station.str());
245 +
"_St" + station.str()
246 +
"_Sec" + sector.str()
247 +
"_SL" + superLayer.str();
249 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
250 <<
"[DTDigiTask]: booking SL histo:" << histoName
251 <<
" (tag: " << histoTag
252 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
253 "/Station" + station.str() +
254 "/Sector" + sector.str() +
"/" + folder << endl;
260 else tTrig = defaultTTrig;
263 if ( folder ==
"TimeBoxes") {
264 string histoTitle = histoName +
" (TDC Counts)";
267 (digiHistos[histoTag])[dtSL.
rawId()] =
268 ibooker.
book1D(histoName,histoTitle, maxTDCCounts/timeBoxGranularity, 0, maxTDCCounts);
269 if(doLayerTimeBoxes) {
270 for(
int layer = 1; layer != 5; ++layer) {
272 stringstream layerHistoName; layerHistoName << histoName <<
"_L" << layer;
273 (digiHistos[histoTag])[layerId.rawId()] =
274 ibooker.
book1D(layerHistoName.str(),layerHistoName.str(), maxTDCCounts/timeBoxGranularity, 0, maxTDCCounts);
279 (digiHistos[histoTag])[dtSL.
rawId()] =
280 ibooker.
book1D(histoName,histoTitle, 3*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
281 if(doLayerTimeBoxes) {
283 for(
int layer = 1; layer != 5; ++layer) {
285 stringstream layerHistoName; layerHistoName << histoName <<
"_L" << layer;
286 (digiHistos[histoTag])[layerId.rawId()] =
287 ibooker.
book1D(layerHistoName.str(),layerHistoName.str(), 3*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
293 if ( folder ==
"CathodPhotoPeaks" ) {
295 "/Sector" + sector.str() +
296 "/Station" + station.str() +
"/" + folder);
297 (digiHistos[histoTag])[dtSL.
rawId()] = ibooker.
book1D(histoName,histoName,500,0,1000);
305 stringstream wheel; wheel << dtCh.
wheel();
307 stringstream sector; sector << dtCh.
sector();
309 "/Sector" + sector.str() +
310 "/Station" + station.str());
313 string histoName = histoTag
315 +
"_St" + station.str()
316 +
"_Sec" + sector.str();
319 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
320 <<
"[DTDigiTask]: booking chamber histo:"
321 <<
" (tag: " << histoTag
322 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
323 "/Station" + station.str() +
324 "/Sector" + sector.str() << endl;
327 if (folder ==
"Occupancies") {
329 const DTChamber* dtchamber = muonGeom->chamber(dtCh);
330 const std::vector<const DTSuperLayer*> dtSupLylist = dtchamber->
superLayers();
331 std::vector<const DTSuperLayer*>::const_iterator suly = dtSupLylist.begin();
332 std::vector<const DTSuperLayer*>::const_iterator sulyend = dtSupLylist.end();
338 while(suly != sulyend) {
339 const std::vector<const DTLayer*> dtLyList = (*suly)->layers();
340 std::vector<const DTLayer*>::const_iterator ly = dtLyList.begin();
341 std::vector<const DTLayer*>::const_iterator lyend = dtLyList.end();
342 stringstream superLayer; superLayer << (*suly)->id().superlayer();
345 nWires = muonGeom->layer((*ly)->id())->specificTopology().channels();
346 firstWire = muonGeom->layer((*ly)->id())->specificTopology().firstChannel();
347 stringstream layer; layer << (*ly)->id().layer();
348 string histoName_layer = histoName +
"_SL" + superLayer.str() +
"_L" + layer.str();
349 if(histoTag ==
"OccupancyAllHits_perL"
350 || histoTag ==
"OccupancyNoise_perL"
351 || histoTag ==
"OccupancyInTimeHits_perL")
352 (digiHistos[histoTag])[(*ly)->id().rawId()] = ibooker.
book1D(histoName_layer,histoName_layer,nWires,firstWire,nWires+firstWire);
354 if((nWires+firstWire) > nWires_max) nWires_max = (nWires+firstWire);
360 if(histoTag !=
"OccupancyAllHits_perL"
361 && histoTag !=
"OccupancyNoise_perL"
362 && histoTag !=
"OccupancyInTimeHits_perL"){
365 if(!readTTrigDB && histoTag ==
"OccupancyInTimeHits_perCh") {
367 int inTimeHitsLowerBoundCorr = int(round(defaultTTrig)) - inTimeHitsLowerBound;
368 int inTimeHitsUpperBoundCorr = int(round(defaultTTrig)) + defaultTmax + inTimeHitsUpperBound;
369 title <<
"Occ. digis in time [" << inTimeHitsLowerBoundCorr <<
", "
370 << inTimeHitsUpperBoundCorr <<
"] (TDC counts)";
371 histoTitle = title.str();
373 (digiHistos[histoTag])[dtCh.
rawId()] = ibooker.
book2D(histoName,histoTitle,nWires_max,1,nWires_max+1,12,0,12);
375 for(
int i=1;
i<=12;
i++) {
381 string label=
"SL1: L"+layer_name;
382 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
389 string label=
"SL2: L"+layer_name;
390 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
392 else if(i>8 && i<13){
397 string label=
"SL3: L"+layer_name;
398 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
407 stringstream wheel; wheel << wheelId;
411 string histoName = histoTag +
"_W" + wheel.str();
414 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
415 <<
"[DTDigiTask]: booking wheel histo:" << histoName
416 <<
" (tag: " << histoTag
417 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
"/" <<endl;
419 if(folder ==
"Occupancies") {
421 string histoTitle =
"# of digis per chamber WHEEL: "+wheel.str();
422 (wheelHistos[histoTag])[wheelId] = ibooker.
book2D(histoName,histoTitle,12,1,13,4,1,5);
423 (wheelHistos[histoTag])[wheelId]->setBinLabel(1,
"MB1",2);
424 (wheelHistos[histoTag])[wheelId]->setBinLabel(2,
"MB2",2);
425 (wheelHistos[histoTag])[wheelId]->setBinLabel(3,
"MB3",2);
426 (wheelHistos[histoTag])[wheelId]->setBinLabel(4,
"MB4",2);
427 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"sector",1);
428 }
else if(folder ==
"SynchNoise") {
430 if (histoTag==
"SyncNoiseEvents") {
431 string histoTitle =
"# of Syncronous-noise events WHEEL: "+wheel.str();
432 (wheelHistos[histoTag])[wheelId] = ibooker.
book2D(histoName,histoTitle,12,1,13,4,1,5);
433 (wheelHistos[histoTag])[wheelId]->setBinLabel(1,
"MB1",2);
434 (wheelHistos[histoTag])[wheelId]->setBinLabel(2,
"MB2",2);
435 (wheelHistos[histoTag])[wheelId]->setBinLabel(3,
"MB3",2);
436 (wheelHistos[histoTag])[wheelId]->setBinLabel(4,
"MB4",2);
437 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"sector",1);
438 }
else if (histoTag==
"SyncNoiseChambs") {
439 string histoTitle =
"# of Synchornous-noise chamb per evt. WHEEL: "+wheel.str();
440 (wheelHistos[histoTag])[wheelId] = ibooker.
book1D(histoName,histoTitle,50,0.5,50.5);
441 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"# of noisy chambs.",1);
442 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"# of evts.",2);
452 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Analyze #Run: " <<
event.id().run()
453 <<
" #Event: " <<
event.id().event() << endl;
460 event.getByToken(dtDigiToken_, dtdigis);
463 if (!isLocalRun)
event.getByToken(ltcDigiCollectionToken_, ltcdigis);
467 if(checkNoisyChannels) {
475 if(dtdigis->begin() == dtdigis->end()) {
476 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"Event " <<
nevents <<
" empty." << endl;
479 if (lookForSyncNoise || filterSyncNoise) {
482 for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); dtLayerId_It++) {
483 DTChamberId chId = ((*dtLayerId_It).first).chamberId();
484 if(hitMap.find(chId) == hitMap.end()) {
487 hitMap[chId] += (((*dtLayerId_It).second).
second - ((*dtLayerId_It).second).first);
493 map<DTChamberId,int>::const_iterator hitMapIt = hitMap.begin();
494 map<DTChamberId,int>::const_iterator hitMapEnd = hitMap.end();
498 for (; hitMapIt != hitMapEnd; ++hitMapIt) {
499 if((hitMapIt->second) > maxTDCHits) {
502 int wh = chId.
wheel();
504 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Synch noise in chamber: " << chId
505 <<
" with # digis: " << hitMapIt->second << endl;
507 if(chMap.find(wh) == chMap.end()) { chMap[wh] = 0; }
510 syncNoisyChambers.insert(chId);
512 wheelHistos[
"SyncNoiseEvents"][wh]->Fill(chId.
sector(),chId.
station());
518 map<int,int>::const_iterator chMapIt = chMap.begin();
519 map<int,int>::const_iterator chMapEnd = chMap.end();
520 for (; chMapIt != chMapEnd; ++chMapIt) {
521 wheelHistos[
"SyncNoiseChambs"][(*chMapIt).first]->Fill((*chMapIt).second);
527 if (syncNoisyChambers.size() != 0) {
528 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Synch Noise in event: " <<
nevents;
529 if(filterSyncNoise)
LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"\tnoisy time-boxes and occupancy will not be filled!" << endl;
535 if (syncNoisyChambers.size() > 3) {
536 time_t eventTime = time_t(event.
time().
value()>>32);
538 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask|DTSynchNoise")
539 <<
"[DTDigiTask] At least 4 Synch Noisy chambers in Run : " <<
event.id().run()
540 <<
" Lumi : " <<
event.id().luminosityBlock()
541 <<
" Event : " <<
event.id().event()
542 <<
" at time : " << ctime(&eventTime) << endl;
544 set<DTChamberId>::const_iterator chIt = syncNoisyChambers.begin();
545 set<DTChamberId>::const_iterator chEnd = syncNoisyChambers.end();
547 stringstream synchNoisyCh;
548 for (;chIt!=chEnd;++chIt) { synchNoisyCh <<
" " << (*chIt); }
549 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask|DTSynchNoise") <<
550 "[DTDigiTask] Chamber List :" << synchNoisyCh.str() << endl;
554 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") << (syncNumTot*100./
nevents) <<
"% sync noise events since the beginning \n"
555 << (syncNum*0.1) <<
"% sync noise events in the last 1000 events " << endl;
560 bool isSyncNoisy =
false;
563 for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It) {
566 if (filterSyncNoise) {
567 DTChamberId chId = ((*dtLayerId_It).first).chamberId();
568 if(syncNoisyChambers.find(chId) != syncNoisyChambers.end()) {
574 digiIt!=((*dtLayerId_It).second).
second; ++digiIt) {
576 bool isNoisy =
false;
577 bool isFEMasked =
false;
578 bool isTDCMasked =
false;
579 bool isTrigMask =
false;
582 if(checkNoisyChannels) {
583 const DTWireId wireId(((*dtLayerId_It).first), (*digiIt).wire());
584 statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
588 const DTSuperLayerId dtSLId = ((*dtLayerId_It).first).superlayerId();
589 uint32_t indexSL = dtSLId.
rawId();
591 uint32_t indexCh = dtChId.
rawId();
592 int layer_number=((*dtLayerId_It).first).layer();
598 tTrigMap->get( ((*dtLayerId_It).first).superlayerId(),
600 else tTrig = defaultTTrig;
602 int inTimeHitsLowerBoundCorr = int(round(tTrig)) - inTimeHitsLowerBound;
603 int inTimeHitsUpperBoundCorr = int(round(tTrig)) + tMax + inTimeHitsUpperBound;
605 float t0;
float t0RMS;
606 int tdcTime = (*digiIt).countsTDC();
609 const DTWireId dtWireId(((*dtLayerId_It).first), (*digiIt).wire());
612 tdcTime += int(round(t0));
619 if (( !isNoisy ) && (!isSyncNoisy)) {
621 histoTag =
"TimeBox" + triggerSource();
623 (digiHistos.find(histoTag)->second).
find(indexSL)->second->Fill(tdcTime);
625 (digiHistos.find(histoTag)->second).
find((*dtLayerId_It).first.rawId())->
second->Fill(tdcTime);
631 if (doAllHitsOccupancies) {
633 histoTag =
"OccupancyAllHits_perCh";
634 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
635 digiHistos[histoTag].find(indexCh);
644 mappedHisto->second->Fill((*digiIt).wire(),(layer_number+(superlayer_number-1)*4)-1);
648 histoTag =
"OccupancyAllHits";
649 map<int, MonitorElement*>::const_iterator histoPerWheel =
650 wheelHistos[histoTag].find(dtChId.
wheel());
652 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
655 if(doNoiseOccupancies) {
656 if (tdcTime < inTimeHitsLowerBoundCorr ) {
661 histoTag =
"OccupancyNoise_perCh";
662 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
663 digiHistos[histoTag].find(indexCh);
665 mappedHisto->second->Fill((*digiIt).wire(),
666 (layer_number+(superlayer_number-1)*4)-1);
669 histoTag =
"OccupancyNoise";
670 map<int, MonitorElement*>::const_iterator histoPerWheel =
671 wheelHistos[histoTag].find(dtChId.
wheel());
673 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
678 if(doInTimeOccupancies) {
679 if (tdcTime > inTimeHitsLowerBoundCorr && tdcTime < inTimeHitsUpperBoundCorr) {
683 histoTag =
"OccupancyInTimeHits_perCh";
684 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
685 digiHistos[histoTag].find(indexCh);
687 mappedHisto->second->Fill((*digiIt).wire(),
688 (layer_number+(superlayer_number-1)*4)-1);
691 histoTag =
"OccupancyInTimeHits";
692 map<int, MonitorElement*>::const_iterator histoPerWheel =
693 wheelHistos[histoTag].find(dtChId.
wheel());
695 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
703 syncNoisyChambers.clear();
713 for (std::vector<LTCDigi>::const_iterator ltc_it = ltcdigis->begin(); ltc_it != ltcdigis->end(); ltc_it++){
714 size_t otherTriggerSum=0;
715 for (
size_t i = 1; i < 6; i++)
716 otherTriggerSum +=
size_t((*ltc_it).HasTriggered(i));
718 if ((*ltc_it).HasTriggered(0) && otherTriggerSum == 0)
719 l1ASource =
"DTonly";
720 else if (!(*ltc_it).HasTriggered(0))
722 else if ((*ltc_it).HasTriggered(0) && otherTriggerSum > 0)
723 l1ASource =
"DTalso";
733 if(tpMode)
return string(
"DT/10-TestPulses/");
734 return string(
"DT/01-Digi/");
748 int nWires_max = (digiHistos[histoTag])[dtCh.
rawId()] -> getNbinsX();
751 for(
int sl=1; sl<=3; sl++) {
752 for(
int ly=1; ly<=4; ly++) {
753 for(
int ch=1; ch<=nWires_max; ch++) {
755 int dduId = -1, rosId = -1, robId = -1, tdcId = -1, channelId = -1;
756 int realCh = mapping->geometryToReadOut(dtCh.
wheel(),dtCh.
station(),dtCh.
sector(),sl,ly,ch,dduId,rosId,robId,tdcId,channelId);
761 int lybin = (4*sl - 4) + ly;
762 (digiHistos[histoTag])[dtCh.
rawId()] -> setBinContent(ch,lybin,-1.);
LuminosityBlockID id() const
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void analyze(const edm::Event &e, const edm::EventSetup &c)
Analyze.
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &setup)
void channelsMap(const DTChamberId &dtCh, std::string histoTag)
To map real channels.
DTChamberId chamberId() const
Return the corresponding ChamberId.
std::string topFolder() const
void beginLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &context)
To reset the MEs.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
DTDigiTask(const edm::ParameterSet &ps)
Constructor.
uint32_t rawId() const
get the raw id
U second(std::pair< T, U > const &p)
const std::vector< const DTSuperLayer * > & superLayers() const
Return the superlayers in the chamber.
MonitorElement * book1D(Args &&...args)
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
virtual ~DTDigiTask()
Destructor.
int superlayer() const
Return the superlayer number (deprecated method name)
void dqmBeginRun(const edm::Run &, const edm::EventSetup &)
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
void bookHistos(DQMStore::IBooker &ibooker, const DTSuperLayerId &dtSL, std::string folder, std::string histoTag)
Book the ME.
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
LuminosityBlockNumber_t luminosityBlock() const
std::vector< DTDigi >::const_iterator const_iterator
MonitorElement * bookFloat(Args &&...args)
int station() const
Return the station number.
int wheel() const
Return the wheel number.
std::string triggerSource()
get the L1A source
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
TimeValue_t value() const
edm::Timestamp time() const