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");
143 if(doNoiseOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyNoise");
144 if(doInTimeOccupancies)
bookHistos(ibooker, wh,
string(
"Occupancies"),
"OccupancyInTimeHits");
146 if(lookForSyncNoise || filterSyncNoise) {
147 bookHistos(ibooker, wh,
string(
"SynchNoise"),
"SyncNoiseEvents");
148 bookHistos(ibooker, wh,
string(
"SynchNoise"),
"SyncNoiseChambs");
151 for(
int st = 1; st <= 4; ++st) {
152 for(
int sect = 1; sect <= 14; ++sect) {
153 if((sect == 13 || sect == 14) && st != 4)
continue;
158 if (doAllHitsOccupancies) {
159 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyAllHits_perCh");
161 channelsMap(dtChId,
"OccupancyAllHits_perCh");
163 if(doNoiseOccupancies)
164 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyNoise_perCh");
165 if(doInTimeOccupancies)
166 bookHistos(ibooker, dtChId,
string(
"Occupancies"),
"OccupancyInTimeHits_perCh");
168 for(
int sl = 1; sl <= 3; ++sl) {
169 if(st == 4 && sl == 2)
continue;
172 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBox");
175 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxDTonly");
176 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxNoDT");
177 bookHistos(ibooker, dtSLId,
string(
"TimeBoxes"),
"TimeBoxDTalso");
189 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask]: Begin of LS transition" << endl;
193 if(lumiBlock % resetCycle == 0) {
195 <<
"[DTDigiTask]: Reset at the LS transition : "
196 << lumiBlock << endl;
198 map<string,map<uint32_t,MonitorElement*> >::const_iterator histosIt = digiHistos.begin();
199 map<string,map<uint32_t,MonitorElement*> >::const_iterator histosEnd = digiHistos.end();
200 for(;histosIt != histosEnd ; ++histosIt) {
201 map<uint32_t,MonitorElement*>::const_iterator histoIt = (*histosIt).second.begin();
202 map<uint32_t,MonitorElement*>::const_iterator histoEnd = (*histosIt).second.end();
203 for(;histoIt != histoEnd; ++histoIt) { (*histoIt).second->Reset(); }
207 for(
int wh=-2; wh<=2; wh++) {
208 for(
int sect=1; sect<=14; sect++) {
209 for(
int st=1; st<=4; st++) {
210 if( (sect == 13 || sect == 14) && st != 4 ) {
continue;}
212 channelsMap(dtChId,
"OccupancyAllHits_perCh");
218 map<string,map<int,MonitorElement*> >::const_iterator whHistosIt = wheelHistos.begin();
219 map<string,map<int,MonitorElement*> >::const_iterator whHistosEnd = wheelHistos.end();
220 for(; whHistosIt != whHistosEnd ; ++whHistosIt) {
221 if ((*whHistosIt).first.find(
"Sync") == string::npos) {
222 map<int,MonitorElement*>::const_iterator histoIt = (*whHistosIt).second.begin();
223 map<int,MonitorElement*>::const_iterator histoEnd = (*whHistosIt).second.end();
224 for(;histoIt != histoEnd; ++histoIt) { (*histoIt).second->Reset(); }
235 stringstream wheel; wheel << dtSL.
wheel();
237 stringstream sector; sector << dtSL.
sector();
238 stringstream superLayer; superLayer << dtSL.
superlayer();
240 "/Sector" + sector.str() +
241 "/Station" + station.str());
244 string histoName = histoTag
246 +
"_St" + station.str()
247 +
"_Sec" + sector.str()
248 +
"_SL" + superLayer.str();
250 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
251 <<
"[DTDigiTask]: booking SL histo:" << histoName
252 <<
" (tag: " << histoTag
253 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
254 "/Station" + station.str() +
255 "/Sector" + sector.str() +
"/" + folder << endl;
261 else tTrig = defaultTTrig;
264 if ( folder ==
"TimeBoxes") {
265 string histoTitle = histoName +
" (TDC Counts)";
268 (digiHistos[histoTag])[dtSL.
rawId()] =
269 ibooker.
book1D(histoName,histoTitle, maxTTMounts/timeBoxGranularity, 0, maxTTMounts);
270 if(doLayerTimeBoxes) {
271 for(
int layer = 1; layer != 5; ++layer) {
273 stringstream layerHistoName; layerHistoName << histoName <<
"_L" << layer;
274 (digiHistos[histoTag])[layerId.rawId()] =
275 ibooker.
book1D(layerHistoName.str(),layerHistoName.str(), maxTTMounts/timeBoxGranularity, 0, maxTTMounts);
280 (digiHistos[histoTag])[dtSL.
rawId()] =
281 ibooker.
book1D(histoName,histoTitle, 3*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
282 if(doLayerTimeBoxes) {
284 for(
int layer = 1; layer != 5; ++layer) {
286 stringstream layerHistoName; layerHistoName << histoName <<
"_L" << layer;
287 (digiHistos[histoTag])[layerId.rawId()] =
288 ibooker.
book1D(layerHistoName.str(),layerHistoName.str(), 3*tMax/timeBoxGranularity, tTrig-tMax, tTrig+2*tMax);
294 if ( folder ==
"CathodPhotoPeaks" ) {
296 "/Sector" + sector.str() +
297 "/Station" + station.str() +
"/" +
folder);
298 (digiHistos[histoTag])[dtSL.
rawId()] = ibooker.
book1D(histoName,histoName,500,0,1000);
306 stringstream wheel; wheel << dtCh.
wheel();
308 stringstream sector; sector << dtCh.
sector();
310 "/Sector" + sector.str() +
311 "/Station" + station.str());
314 string histoName = histoTag
316 +
"_St" + station.str()
317 +
"_Sec" + sector.str();
320 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
321 <<
"[DTDigiTask]: booking chamber histo:"
322 <<
" (tag: " << histoTag
323 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
324 "/Station" + station.str() +
325 "/Sector" + sector.str() << endl;
328 if (folder ==
"Occupancies") {
330 const DTChamber* dtchamber = muonGeom->chamber(dtCh);
331 const std::vector<const DTSuperLayer*> dtSupLylist = dtchamber->
superLayers();
332 std::vector<const DTSuperLayer*>::const_iterator suly = dtSupLylist.begin();
333 std::vector<const DTSuperLayer*>::const_iterator sulyend = dtSupLylist.end();
339 while(suly != sulyend) {
340 const std::vector<const DTLayer*> dtLyList = (*suly)->layers();
341 std::vector<const DTLayer*>::const_iterator ly = dtLyList.begin();
342 std::vector<const DTLayer*>::const_iterator lyend = dtLyList.end();
343 stringstream superLayer; superLayer << (*suly)->id().superlayer();
346 nWires = muonGeom->layer((*ly)->id())->specificTopology().channels();
347 firstWire = muonGeom->layer((*ly)->id())->specificTopology().firstChannel();
348 stringstream layer; layer << (*ly)->id().layer();
349 string histoName_layer = histoName +
"_SL" + superLayer.str() +
"_L" + layer.str();
350 if(histoTag ==
"OccupancyAllHits_perL"
351 || histoTag ==
"OccupancyNoise_perL"
352 || histoTag ==
"OccupancyInTimeHits_perL")
353 (digiHistos[histoTag])[(*ly)->id().rawId()] = ibooker.
book1D(histoName_layer,histoName_layer,nWires,firstWire,nWires+firstWire);
355 if((nWires+firstWire) > nWires_max) nWires_max = (nWires+firstWire);
361 if(histoTag !=
"OccupancyAllHits_perL"
362 && histoTag !=
"OccupancyNoise_perL"
363 && histoTag !=
"OccupancyInTimeHits_perL"){
365 string histoTitle = histoName;
366 if(!readTTrigDB && histoTag ==
"OccupancyInTimeHits_perCh") {
368 int inTimeHitsLowerBoundCorr = int(round(defaultTTrig)) - inTimeHitsLowerBound;
369 int inTimeHitsUpperBoundCorr = int(round(defaultTTrig)) + defaultTmax + inTimeHitsUpperBound;
370 title <<
"Occ. digis in time [" << inTimeHitsLowerBoundCorr <<
", "
371 << inTimeHitsUpperBoundCorr <<
"] (TDC counts)";
372 histoTitle = title.str();
374 (digiHistos[histoTag])[dtCh.
rawId()] = ibooker.
book2D(histoName,histoTitle,nWires_max,1,nWires_max+1,12,0,12);
376 for(
int i=1;
i<=12;
i++) {
382 string label=
"SL1: L"+layer_name;
383 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
390 string label=
"SL2: L"+layer_name;
391 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
393 else if(i>8 && i<13){
398 string label=
"SL3: L"+layer_name;
399 (digiHistos[histoTag])[dtCh.
rawId()]->setBinLabel(i,label,2);
408 stringstream wheel; wheel << wheelId;
412 string histoName = histoTag +
"_W" + wheel.str();
415 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask")
416 <<
"[DTDigiTask]: booking wheel histo:" << histoName
417 <<
" (tag: " << histoTag
418 <<
") folder: " << topFolder() +
"Wheel" + wheel.str() +
"/" <<endl;
420 if(folder ==
"Occupancies") {
422 string histoTitle =
"# of digis per chamber WHEEL: "+wheel.str();
423 (wheelHistos[histoTag])[wheelId] = ibooker.
book2D(histoName,histoTitle,12,1,13,4,1,5);
424 (wheelHistos[histoTag])[wheelId]->setBinLabel(1,
"MB1",2);
425 (wheelHistos[histoTag])[wheelId]->setBinLabel(2,
"MB2",2);
426 (wheelHistos[histoTag])[wheelId]->setBinLabel(3,
"MB3",2);
427 (wheelHistos[histoTag])[wheelId]->setBinLabel(4,
"MB4",2);
428 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"sector",1);
429 }
else if(folder ==
"SynchNoise") {
431 if (histoTag==
"SyncNoiseEvents") {
432 string histoTitle =
"# of Syncronous-noise events WHEEL: "+wheel.str();
433 (wheelHistos[histoTag])[wheelId] = ibooker.
book2D(histoName,histoTitle,12,1,13,4,1,5);
434 (wheelHistos[histoTag])[wheelId]->setBinLabel(1,
"MB1",2);
435 (wheelHistos[histoTag])[wheelId]->setBinLabel(2,
"MB2",2);
436 (wheelHistos[histoTag])[wheelId]->setBinLabel(3,
"MB3",2);
437 (wheelHistos[histoTag])[wheelId]->setBinLabel(4,
"MB4",2);
438 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"sector",1);
439 }
else if (histoTag==
"SyncNoiseChambs") {
440 string histoTitle =
"# of Synchornous-noise chamb per evt. WHEEL: "+wheel.str();
441 (wheelHistos[histoTag])[wheelId] = ibooker.
book1D(histoName,histoTitle,50,0.5,50.5);
442 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"# of noisy chambs.",1);
443 (wheelHistos[histoTag])[wheelId]->setAxisTitle(
"# of evts.",2);
453 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Analyze #Run: " <<
event.id().run()
454 <<
" #Event: " <<
event.id().event() << endl;
461 event.getByToken(dtDigiToken_, dtdigis);
464 if (!isLocalRun)
event.getByToken(ltcDigiCollectionToken_, ltcdigis);
468 if(checkNoisyChannels) {
476 if(dtdigis->begin() == dtdigis->end()) {
477 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"Event " <<
nevents <<
" empty." << endl;
480 if (lookForSyncNoise || filterSyncNoise) {
483 for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); dtLayerId_It++) {
484 DTChamberId chId = ((*dtLayerId_It).first).chamberId();
485 if(hitMap.find(chId) == hitMap.end()) {
488 hitMap[chId] += (((*dtLayerId_It).second).
second - ((*dtLayerId_It).second).first);
494 map<DTChamberId,int>::const_iterator hitMapIt = hitMap.begin();
495 map<DTChamberId,int>::const_iterator hitMapEnd = hitMap.end();
499 for (; hitMapIt != hitMapEnd; ++hitMapIt) {
500 if((hitMapIt->second) > maxTDCHits) {
503 int wh = chId.
wheel();
505 LogTrace(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Synch noise in chamber: " << chId
506 <<
" with # digis: " << hitMapIt->second << endl;
508 if(chMap.find(wh) == chMap.end()) { chMap[wh] = 0; }
511 syncNoisyChambers.insert(chId);
513 wheelHistos[
"SyncNoiseEvents"][wh]->Fill(chId.
sector(),chId.
station());
519 map<int,int>::const_iterator chMapIt = chMap.begin();
520 map<int,int>::const_iterator chMapEnd = chMap.end();
521 for (; chMapIt != chMapEnd; ++chMapIt) {
522 wheelHistos[
"SyncNoiseChambs"][(*chMapIt).first]->Fill((*chMapIt).second);
528 if (syncNoisyChambers.size() != 0) {
529 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"[DTDigiTask] Synch Noise in event: " <<
nevents;
530 if(filterSyncNoise)
LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") <<
"\tnoisy time-boxes and occupancy will not be filled!" << endl;
536 if (syncNoisyChambers.size() > 3) {
537 time_t eventTime = time_t(event.
time().
value()>>32);
539 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask|DTSynchNoise")
540 <<
"[DTDigiTask] At least 4 Synch Noisy chambers in Run : " <<
event.id().run()
541 <<
" Lumi : " <<
event.id().luminosityBlock()
542 <<
" Event : " <<
event.id().event()
543 <<
" at time : " << ctime(&eventTime) << endl;
545 set<DTChamberId>::const_iterator chIt = syncNoisyChambers.begin();
546 set<DTChamberId>::const_iterator chEnd = syncNoisyChambers.end();
548 stringstream synchNoisyCh;
549 for (;chIt!=chEnd;++chIt) { synchNoisyCh <<
" " << (*chIt); }
550 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask|DTSynchNoise") <<
551 "[DTDigiTask] Chamber List :" << synchNoisyCh.str() << endl;
555 LogVerbatim(
"DTDQM|DTMonitorModule|DTDigiTask") << (syncNumTot*100./
nevents) <<
"% sync noise events since the beginning \n"
556 << (syncNum*0.1) <<
"% sync noise events in the last 1000 events " << endl;
561 bool isSyncNoisy =
false;
564 for (dtLayerId_It=dtdigis->begin(); dtLayerId_It!=dtdigis->end(); ++dtLayerId_It) {
567 if (filterSyncNoise) {
568 DTChamberId chId = ((*dtLayerId_It).first).chamberId();
569 if(syncNoisyChambers.find(chId) != syncNoisyChambers.end()) {
575 digiIt!=((*dtLayerId_It).second).
second; ++digiIt) {
577 bool isNoisy =
false;
578 bool isFEMasked =
false;
579 bool isTDCMasked =
false;
580 bool isTrigMask =
false;
583 if(checkNoisyChannels) {
584 const DTWireId wireId(((*dtLayerId_It).first), (*digiIt).wire());
585 statusMap->cellStatus(wireId, isNoisy, isFEMasked, isTDCMasked, isTrigMask, isDead, isNohv);
589 const DTSuperLayerId dtSLId = ((*dtLayerId_It).first).superlayerId();
590 uint32_t indexSL = dtSLId.
rawId();
592 uint32_t indexCh = dtChId.
rawId();
593 int layer_number=((*dtLayerId_It).first).layer();
599 tTrigMap->get( ((*dtLayerId_It).first).superlayerId(),
601 else tTrig = defaultTTrig;
603 int inTimeHitsLowerBoundCorr = int(round(tTrig)) - inTimeHitsLowerBound;
604 int inTimeHitsUpperBoundCorr = int(round(tTrig)) + tMax + inTimeHitsUpperBound;
606 float t0;
float t0RMS;
607 int tdcTime = (*digiIt).countsTDC();
610 const DTWireId dtWireId(((*dtLayerId_It).first), (*digiIt).wire());
613 tdcTime += int(round(t0));
620 if (( !isNoisy ) && (!isSyncNoisy)) {
622 histoTag =
"TimeBox" + triggerSource();
624 (digiHistos.find(histoTag)->second).
find(indexSL)->second->Fill(tdcTime);
626 (digiHistos.find(histoTag)->second).
find((*dtLayerId_It).first.rawId())->
second->Fill(tdcTime);
632 if (doAllHitsOccupancies) {
634 histoTag =
"OccupancyAllHits_perCh";
635 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
636 digiHistos[histoTag].find(indexCh);
645 mappedHisto->second->Fill((*digiIt).wire(),(layer_number+(superlayer_number-1)*4)-1);
649 histoTag =
"OccupancyAllHits";
650 map<int, MonitorElement*>::const_iterator histoPerWheel =
651 wheelHistos[histoTag].find(dtChId.
wheel());
653 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
656 if(doNoiseOccupancies) {
657 if (tdcTime < inTimeHitsLowerBoundCorr ) {
662 histoTag =
"OccupancyNoise_perCh";
663 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
664 digiHistos[histoTag].find(indexCh);
666 mappedHisto->second->Fill((*digiIt).wire(),
667 (layer_number+(superlayer_number-1)*4)-1);
671 histoTag =
"OccupancyNoise";
672 map<int, MonitorElement*>::const_iterator histoPerWheel =
673 wheelHistos[histoTag].find(dtChId.
wheel());
675 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
679 if(doInTimeOccupancies) {
680 if (tdcTime > inTimeHitsLowerBoundCorr && tdcTime < inTimeHitsUpperBoundCorr) {
684 histoTag =
"OccupancyInTimeHits_perCh";
685 map<uint32_t, MonitorElement*>::const_iterator mappedHisto =
686 digiHistos[histoTag].find(indexCh);
688 mappedHisto->second->Fill((*digiIt).wire(),
689 (layer_number+(superlayer_number-1)*4)-1);
692 histoTag =
"OccupancyInTimeHits";
693 map<int, MonitorElement*>::const_iterator histoPerWheel =
694 wheelHistos[histoTag].find(dtChId.
wheel());
696 histoPerWheel->second->Fill(dtChId.
sector(),dtChId.
station());
704 syncNoisyChambers.clear();
714 for (std::vector<LTCDigi>::const_iterator ltc_it = ltcdigis->begin(); ltc_it != ltcdigis->end(); ltc_it++){
715 size_t otherTriggerSum=0;
716 for (
size_t i = 1; i < 6; i++)
717 otherTriggerSum +=
size_t((*ltc_it).HasTriggered(i));
719 if ((*ltc_it).HasTriggered(0) && otherTriggerSum == 0)
720 l1ASource =
"DTonly";
721 else if (!(*ltc_it).HasTriggered(0))
723 else if ((*ltc_it).HasTriggered(0) && otherTriggerSum > 0)
724 l1ASource =
"DTalso";
734 if(tpMode)
return string(
"DT/10-TestPulses/");
735 return string(
"DT/01-Digi/");
749 int nWires_max = (digiHistos[histoTag])[dtCh.
rawId()] -> getNbinsX();
752 for(
int sl=1; sl<=3; sl++) {
753 for(
int ly=1; ly<=4; ly++) {
754 for(
int ch=1; ch<=nWires_max; ch++) {
756 int dduId = -1, rosId = -1, robId = -1, tdcId = -1, channelId = -1;
757 int realCh = mapping->geometryToReadOut(dtCh.
wheel(),dtCh.
station(),dtCh.
sector(),sl,ly,ch,dduId,rosId,robId,tdcId,channelId);
762 int lybin = (4*sl - 4) + ly;
763 (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
TimeValue_t value() const
edm::Timestamp time() const
tuple folder
Histograms Source for live online DQM in P5