CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripMonitorDigi.cc
Go to the documentation of this file.
1 // -*- c++ -*-
4 // Original Author: Dorian Kcira
5 // Created: Sat Feb 4 20:49:10 CET 2006
6 #include<fstream>
7 #include "TNamed.h"
27 
30 
31 #include "TMath.h"
33 
34 #include <iostream>
35 
41 
42 /* mia: but is there not a smarter way ?!?!?! */
43 const double NORBITS_PER_SECOND = 11223.;
44 
45 //--------------------------------------------------------------------------------------------
47  dqmStore_(edm::Service<DQMStore>().operator->()),
48  conf_(iConfig),
49  show_mechanical_structure_view(true),
50  show_readout_view (false),
51  show_control_view (false),
52  select_all_detectors (true),
53  reset_each_run (false),
54  folder_organizer(),
55  m_cacheID_(0)
56 {
57  firstEvent = -1;
58  eventNb = 0;
59 
60  // Detector Partitions
61  SubDetPhasePartMap["TIB"] = "TI";
62  SubDetPhasePartMap["TID__MINUS"] = "TI";
63  SubDetPhasePartMap["TID__PLUS"] = "TI";
64  SubDetPhasePartMap["TOB"] = "TO";
65  SubDetPhasePartMap["TEC__MINUS"] = "TM";
66  SubDetPhasePartMap["TEC__PLUS"] = "TP";
67 
68  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
69 
70  // get Digi Producer List
71  digiProducerList = conf_.getParameter<std::vector<edm::InputTag> >("DigiProducersList");
72  for (auto const& tag : digiProducerList) {
74  }
75 
76  //get on/off option for every cluster from cfi
77  edm::ParameterSet ParametersNumberOfDigis = conf_.getParameter<edm::ParameterSet>("TH1NumberOfDigis");
78  layerswitchnumdigison = ParametersNumberOfDigis.getParameter<bool>("layerswitchon");
79  moduleswitchnumdigison = ParametersNumberOfDigis.getParameter<bool>("moduleswitchon");
80 
81  edm::ParameterSet ParametersNumberOfDigisPerStrip = conf_.getParameter<edm::ParameterSet>("TH1NumberOfDigisPerStrip");
82  moduleswitchnumdigispstripon = ParametersNumberOfDigisPerStrip.getParameter<bool>("moduleswitchon");
83 
84  edm::ParameterSet ParametersADCsHottestStrip = conf_.getParameter<edm::ParameterSet>("TH1ADCsHottestStrip");
85  layerswitchadchotteston = ParametersADCsHottestStrip.getParameter<bool>("layerswitchon");
86  moduleswitchadchotteston = ParametersADCsHottestStrip.getParameter<bool>("moduleswitchon");
87 
88  edm::ParameterSet ParametersADCsCoolestStrip = conf_.getParameter<edm::ParameterSet>("TH1ADCsCoolestStrip");
89  layerswitchadccooleston = ParametersADCsCoolestStrip.getParameter<bool>("layerswitchon");
90  moduleswitchadccooleston = ParametersADCsCoolestStrip.getParameter<bool>("moduleswitchon");
91 
92  edm::ParameterSet ParametersDigiADCs = conf_.getParameter<edm::ParameterSet>("TH1DigiADCs");
93  layerswitchdigiadcson = ParametersDigiADCs.getParameter<bool>("layerswitchon");
94  moduleswitchdigiadcson = ParametersDigiADCs.getParameter<bool>("moduleswitchon");
95 
96  edm::ParameterSet ParametersStripOccupancy = conf_.getParameter<edm::ParameterSet>("TH1StripOccupancy");
97  layerswitchstripoccupancyon = ParametersStripOccupancy.getParameter<bool>("layerswitchon");
98  moduleswitchstripoccupancyon = ParametersStripOccupancy.getParameter<bool>("moduleswitchon");
99 
100  edm::ParameterSet ParametersDigiProf = conf_.getParameter<edm::ParameterSet>("TProfNumberOfDigi");
101  layerswitchnumdigisprofon = ParametersDigiProf.getParameter<bool>("layerswitchon");
102 
103  edm::ParameterSet ParametersDigiADC = conf_.getParameter<edm::ParameterSet>("TProfDigiADC");
104  layerswitchdigiadcprofon = ParametersDigiProf.getParameter<bool>("layerswitchon");
105 
106  edm::ParameterSet ParametersTotDigiProf = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfDigis");
107  subdetswitchtotdigiprofon = ParametersTotDigiProf.getParameter<bool>("subdetswitchon");
108 
109  // edm::ParameterSet ParametersTotDigisProfVsLS = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfDigisVsLS");
110  // subdetswitchtotdigiproflson = ParametersTotDigisProfVsLS.getParameter<bool>("subdetswitchon");
111 
112  edm::ParameterSet ParametersTotDigiFailure = conf_.getParameter<edm::ParameterSet>("TotalNumberOfDigisFailure");
113  subdetswitchtotdigifailureon = ParametersTotDigiFailure.getParameter<bool>("subdetswitchon");
114 
115  edm::ParameterSet ParametersDigiApvProf = conf_.getParameter<edm::ParameterSet>("TProfDigiApvCycle");
116  subdetswitchapvcycleprofon = ParametersDigiApvProf.getParameter<bool>("subdetswitchon");
117 
118  edm::ParameterSet ParametersDigiApvTH2 = conf_.getParameter<edm::ParameterSet>("TH2DigiApvCycle");
119  subdetswitchapvcycleth2on = ParametersDigiApvTH2.getParameter<bool>("subdetswitchon");
120 
121  edm::ParameterSet ParametersNApvShots = conf_.getParameter<edm::ParameterSet>("TH1NApvShots");
122  subdetswitchnapvshotson = ParametersNApvShots.getParameter<bool>("subdetswitchon");
123 
124  edm::ParameterSet ParametersNStripApvShots = conf_.getParameter<edm::ParameterSet>("TH1NStripsApvShots");
125  subdetswitchnstripsapvshotson = ParametersNStripApvShots.getParameter<bool>("subdetswitchon");
126 
127  edm::ParameterSet ParametersChargeMedianApvShots = conf_.getParameter<edm::ParameterSet>("TH1ChargeMedianApvShots");
128  subdetswitchchargemedianapvshotson = ParametersChargeMedianApvShots.getParameter<bool>("subdetswitchon");
129 
130  edm::ParameterSet ParametersApvNumberApvShots = conf_.getParameter<edm::ParameterSet>("TH1ApvNumApvShots");
131  subdetswitchapvshotsApvon = ParametersChargeMedianApvShots.getParameter<bool>("subdetswitchon");
132 
133  edm::ParameterSet ParametersNApvShotsProf = conf_.getParameter<edm::ParameterSet>("TProfNShotsVsTime");
134  subdetswitchapvshotsonprof = ParametersNApvShotsProf.getParameter<bool>("subdetswitchon");
135 
136  //Global Histograms
137 
138  edm::ParameterSet ParametersGlobalNApvShots = conf_.getParameter<edm::ParameterSet>("TH1NApvShots");
139  globalswitchnapvshotson = ParametersGlobalNApvShots.getParameter<bool>("globalswitchon");
140 
141  edm::ParameterSet ParametersGlobalNApvShotsProf = conf_.getParameter<edm::ParameterSet>("TProfGlobalNShots");
142  globalsummaryapvshotson = ParametersGlobalNApvShotsProf.getParameter<bool>("globalswitchon");
143 
144  edm::ParameterSet ParametersGlobalNStripApvShots = conf_.getParameter<edm::ParameterSet>("TH1NStripsApvShots");
145  globalswitchnstripsapvshotson = ParametersGlobalNStripApvShots.getParameter<bool>("globalswitchon");
146 
147  edm::ParameterSet ParametersGlobalApvNumApvShots = conf_.getParameter<edm::ParameterSet>("TH1ApvNumApvShots");
148  globalswitchapvshotsApvon = ParametersGlobalApvNumApvShots.getParameter<bool>("globalswitchon");
149 
150  edm::ParameterSet ParametersGlobalChargeMedianApvShots = conf_.getParameter<edm::ParameterSet>("TH1ChargeMedianApvShots");
151  globalswitchchargemedianapvshotson = ParametersGlobalChargeMedianApvShots.getParameter<bool>("globalswitchon");
152 
153  edm::ParameterSet ParametersGlobalNApvShotsTimeProf = conf_.getParameter<edm::ParameterSet>("TProfNShotsVsTime");
154  globalswitchapvshotsonprof = ParametersGlobalNApvShotsTimeProf.getParameter<bool>("globalswitchon");
155 
156  //Digi and APV Shots Maps
157 
158  digitkhistomapon = conf_.getParameter<bool>("TkHistoMap_On");
159 
160  shotshistomapon = conf_.getParameter<bool>("TkHistoMapNApvShots_On");
161  shotsstripshistomapon = conf_.getParameter<bool>("TkHistoMapNStripApvShots_On");
162  shotschargehistomapon = conf_.getParameter<bool>("TkHistoMapMedianChargeApvShots_On");
163 
164  createTrendMEs = conf_.getParameter<bool>("CreateTrendMEs");
165  Mod_On_ = conf_.getParameter<bool>("Mod_On");
166  // xLumiProf = conf_.getParameter<int>("xLumiProf");
167  // Event History Producer
168  historyProducer_ = conf_.getParameter<edm::InputTag>("HistoryProducer");
169  historyProducerToken_ = consumes<EventWithHistory>(conf_.getParameter<edm::InputTag>("HistoryProducer") );
170 
171  // Apv Phase Producer
172  apvPhaseProducer_ = conf_.getParameter<edm::InputTag>("ApvPhaseProducer");
173  apvPhaseProducerToken_ = consumes<APVCyclePhaseCollection>(conf_.getParameter<edm::InputTag>("ApvPhaseProducer") );
174 
175  gtEvmToken_ = consumes<L1GlobalTriggerEvmReadoutRecord>(edm::InputTag("gtEvmDigis") );
176 
177  // Create DCS Status
178  bool checkDCS = conf_.getParameter<bool>("UseDCSFiltering");
179  if (checkDCS) dcsStatus_ = new SiStripDCSStatus();
180  else dcsStatus_ = 0;
181 
182  //initialize boolean for the data-presence check (needed for TotalNumberOfDigisFailure histogram)
183  isStableBeams = false;
184  SBTransitionDone = false;
185  SBDeclaredAt = 0;
186  ignoreFirstNLumisections_ = TMath::Max ( 0 , ParametersTotDigiFailure.getParameter<int32_t>("ignoreFirstNLumisections") );
187  integrateNLumisections_ = TMath::Max ( 1 , ParametersTotDigiFailure.getParameter<int32_t>("integrateNLumisections") );
188 }
189 //------------------------------------------------------------------------------------------
190 
192  if (dcsStatus_) delete dcsStatus_;
193 }
194 
195 //--------------------------------------------------------------------------------------------
197 
199  unsigned long long cacheID = es.get<SiStripDetCablingRcd>().cacheIdentifier();
200  if (m_cacheID_ != cacheID) {
201  m_cacheID_ = cacheID;
202  edm::LogInfo("SiStripMonitorDigi") <<"SiStripMonitorDigi::beginRun: "
203  << " Creating MEs for new Cabling ";
204  createMEs(es);
205  }
206  } else if (reset_each_run) {
207  edm::LogInfo("SiStripMonitorDigi") <<"SiStripMonitorDigi::beginRun: "
208  << " Resetting MEs ";
209  for (std::map<uint32_t, ModMEs >::const_iterator idet = DigiMEs.begin() ; idet!=DigiMEs.end() ; idet++) {
210  ResetModuleMEs(idet->first);
211  }
212  }
213 
215  //get FED cabling to know if SiStrip is in DAQ or no
216  unsigned long long cacheID = es.get<SiStripDetCablingRcd>().cacheIdentifier();
217  if (m_cacheID_ != cacheID) {
218  m_cacheID_ = cacheID;
219  }
221  es.get<SiStripDetCablingRcd>().get(detCabling_);
222 
223  //nFEDConnected = 0;
224  nFedTIB = 0;
225  nFedTIDm = 0;
226  nFedTIDp = 0;
227  nFedTECm = 0;
228  nFedTECp = 0;
229  nFedTOB = 0;
230 
231  //const int siStripFedIdMin = FEDNumbering::MINSiStripFEDID;
232  //const int siStripFedIdMax = FEDNumbering::MAXSiStripFEDID;
233 
235  if( es.find( recordKey ) != 0) {
236 
237  edm::ESHandle<RunInfo> sumFED;
238  es.get<RunInfoRcd>().get(sumFED);
239 
240  if ( sumFED.isValid() ) {
241  std::vector<int> FedsInIds= sumFED->m_fed_in;
242  for(unsigned int it = 0; it < FedsInIds.size(); ++it) {
243  int fedID = FedsInIds[it];
244  // if(fedID>=siStripFedIdMin && fedID<=siStripFedIdMax) ++nFEDConnected;
245  /* mia: but is there not a smarter way !?!?!? */
246  if ( fedID >= 50 && fedID <= 133 ) ++nFedTIB;
247  if ( fedID >= 134 && fedID <= 148 ) ++nFedTIDm;
248  if ( fedID >= 149 && fedID <= 163 ) ++nFedTIDp;
249  if ( fedID >= 164 && fedID <= 259 ) ++nFedTECm;
250  if ( fedID >= 260 && fedID <= 355 ) ++nFedTECp;
251  if ( fedID >= 356 && fedID <= 489 ) ++nFedTOB;
252 
253  }
254  }
255  }
256  }
257 
258 }
259 
260 //--------------------------------------------------------------------------------------------
262 }
263 
264 //--------------------------------------------------------------------------------------------
267  // if (digiFailureMEs.SubDetTotDigiProfLS) digiFailureMEs.SubDetTotDigiProfLS->Reset();
268  }
270  isStableBeams = false;
271  //integrate stats over several LS to prevent eventual low trigger rates
273  }
274 }
275 
276 //--------------------------------------------------------------------------------------------
278 
280  {
281  SBDeclaredAt = (int)lb.id().luminosityBlock();
282  SBTransitionDone = true;
283  }
284 
286 
287  int nFeds [6] = { 96 , 96 , 84 , 15 , 15 , 134 }; // tec- , tec+ , tib , tid- , tid+ , tob
288  int nFedsConnected [6] = { nFedTECm , nFedTECp , nFedTIB , nFedTIDm , nFedTIDp , nFedTOB };
289 
290  MonitorElement * me = dqmStore_->get(topFolderName_+"/MechanicalView/NumberOfDigisInLastLS");
291  if (me) {
292 
293  for (int ibin = 1; ibin<7;ibin++){
294 
295  float value = me->getBinContent(ibin);
296 
297  float fillvalue = 2;
298  if ( isStableBeams
299  // && (int)lb.id().luminosityBlock() > ignoreFirstNLumisections_ //ignore first X lumisections for HV rampup
301  && (float)nFedsConnected[ibin-1] / nFeds[ibin-1] > 0.5
302  && value < 50. ){
303 
304  fillvalue = 1.01;
305  }
306 
307  //account for integrated LS: fill previous bins as well
308  for ( int fillbin = (int)lb.id().luminosityBlock() - integrateNLumisections_ + 1 ; fillbin <= (int)lb.id().luminosityBlock() ; fillbin++ )
309  digiFailureMEs.SubDetDigiFailures2D -> Fill( fillbin , ibin-1 , fillvalue );
310  }
311  }
312  }
313 
314 }
315 //--------------------------------------------------------------------------------------------
317 }
318 
319 
320 //--------------------------------------------------------------------------------------------
322 
324 
325  //Retrieve tracker topology from geometry
326  edm::ESHandle<TrackerTopology> tTopoHandle;
327  es.get<IdealGeometryRecord>().get(tTopoHandle);
328  const TrackerTopology* const tTopo = tTopoHandle.product();
329 
330  // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on
332 
333  // get list of active detectors from SiStripDetCabling
334  std::vector<uint32_t> activeDets;
335  activeDets.clear(); // just in case
336  SiStripDetCabling_->addActiveDetectorsRawIds(activeDets);
337 
338  SiStripSubStructure substructure;
339 
340  // remove any eventual zero elements - there should be none, but just in case
341  for(std::vector<uint32_t>::iterator idets = activeDets.begin(); idets != activeDets.end(); idets++){
342  if(*idets == 0) activeDets.erase(idets);
343  }
344 
345  // create SiStripFolderOrganizer
347 
348  // Create TkHistoMap for Digi and APV shots properies
349 
350  if (digitkhistomapon) tkmapdigi = new TkHistoMap(topFolderName_,"TkHMap_NumberOfDigi", 0.0,true);
351  if (shotshistomapon) tkmapNApvshots = new TkHistoMap(topFolderName_,"TkHMap_NApvShots", 0.0,true);
352  if (shotsstripshistomapon) tkmapNstripApvshot = new TkHistoMap(topFolderName_,"TkHMap_NStripApvShots", 0.0,true);
353  if (shotschargehistomapon) tkmapMedianChargeApvshots= new TkHistoMap(topFolderName_,"TkHMap_MedianChargeApvShots",0.0,true);
354 
355  std::vector<uint32_t> tibDetIds;
356 
357  // loop over detectors and book MEs
358  edm::LogInfo("SiStripTkDQM|SiStripMonitorDigi")<<"nr. of activeDets: "<<activeDets.size();
359  for(std::vector<uint32_t>::const_iterator detid_iterator = activeDets.begin(); detid_iterator!=activeDets.end(); detid_iterator++){
360 
361  uint32_t detid = (*detid_iterator);
362 
363  ModMEs local_modmes;
364 
365  local_modmes.NumberOfDigis = 0;
366  local_modmes.NumberOfDigisPerStrip = 0;
367  local_modmes.ADCsHottestStrip = 0;
368  local_modmes.ADCsCoolestStrip = 0;
369  local_modmes.DigiADCs = 0;
370  local_modmes.StripOccupancy = 0;
371 
372  if (Mod_On_) {
373 
374  // set appropriate folder using SiStripFolderOrganizer
375  folder_organizer.setDetectorFolder(detid, tTopo); // pass the detid to this method
376  if (reset_each_run) ResetModuleMEs(detid);
377  createModuleMEs(local_modmes, detid);
378 
379  // append to DigiMEs
380  DigiMEs.insert( std::make_pair(detid, local_modmes));
381  }
382 
383  // Create Layer Level MEs if they are not created already
384  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid, tTopo);
385  SiStripHistoId hidmanager;
386  std::string label = hidmanager.getSubdetid(detid,tTopo,false);
387 
388  // get detids for the layer
389  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
390 
391  if(iLayerME==LayerMEsMap.end()) {
392  int32_t lnumber = det_layer_pair.second;
393  std::vector<uint32_t> layerDetIds;
394  if (det_layer_pair.first == "TIB") {
395  substructure.getTIBDetectors(activeDets,layerDetIds,lnumber,0,0,0);
396  } else if (det_layer_pair.first == "TOB") {
397  substructure.getTOBDetectors(activeDets,layerDetIds,lnumber,0,0);
398  } else if (det_layer_pair.first == "TID" && lnumber > 0) {
399  substructure.getTIDDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0);
400  } else if (det_layer_pair.first == "TID" && lnumber < 0) {
401  substructure.getTIDDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0);
402  } else if (det_layer_pair.first == "TEC" && lnumber > 0) {
403  substructure.getTECDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0,0,0);
404  } else if (det_layer_pair.first == "TEC" && lnumber < 0) {
405  substructure.getTECDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0,0,0);
406  }
407 
408  LayerDetMap[label] = layerDetIds;
409 
410  // book Layer plots
411  folder_organizer.setLayerFolder(detid,tTopo,det_layer_pair.second);
412  createLayerMEs(label, layerDetIds.size());
413  }
414 
415  // book sub-detector plots
416  std::pair<std::string,std::string> sdet_pair = folder_organizer.getSubDetFolderAndTag(detid, tTopo);
417  if (SubDetMEsMap.find(sdet_pair.second) == SubDetMEsMap.end()){
418  dqmStore_->setCurrentFolder(sdet_pair.first);
419  createSubDetMEs(sdet_pair.second);
420  }
421 
422  }//end of loop over detectors
423 
424  //book some Summary histograms on APV shots in the MechanicalView
425 
426  dqmStore_->setCurrentFolder(topFolderName_+"/MechanicalView/");
427 
429  const char* HistoName = "Summary Mean Apv shots for SubDets";
430  NApvShotsGlobalProf= dqmStore_->bookProfile(HistoName, HistoName,
431  6,0.5,6.5,
432  100, 0., 0., "" );
439  NApvShotsGlobalProf->setAxisTitle(" mean APV shots # / evt",2);
440  }
441 
442  //cumulative number of APV shots Vs Time
445  const char* HistoName = "NApv_Shots_vs_Time";
446  ShotsVsTimeApvShotsGlobal=dqmStore_->bookProfile(HistoName,HistoName,
447  Parameters.getParameter<int32_t>("Nbins"),
448  Parameters.getParameter<double>("xmin"),
449  Parameters.getParameter<double>("xmax"),
450  200, //that parameter should not be there !?
451  Parameters.getParameter<double>("ymin"),
452  Parameters.getParameter<double>("ymax"),
453  "" );
455  ShotsVsTimeApvShotsGlobal->setAxisTitle("# Apv Shots",2);
457  }
458 
459  //cumulative number of Strips in APV shots
462  const char* HistoName = "Number_of_Strips_in_Apv_Shots";
463  StripMultiplicityApvShotsGlobal=dqmStore_->book1D(HistoName,HistoName,
464  Parameters.getParameter<int32_t>("Nbins"),
465  Parameters.getParameter<double>("xmin"),
466  Parameters.getParameter<double>("xmax"));
467  StripMultiplicityApvShotsGlobal->setAxisTitle("# strips in Apv Shots",1);
468  }
469 
470  //cumulative number of APV shots
473  const char* HistoName = "Number_of_Apv_Shots";
474  NApvShotsGlobal=dqmStore_->book1D(HistoName,HistoName,
475  Parameters.getParameter<int32_t>("Nbins"),
476  Parameters.getParameter<double>("xmin"),
477  Parameters.getParameter<double>("xmax"));
478  NApvShotsGlobal->setAxisTitle("# Apv Shots",1);
479  }
480 
481  //cumulative Median Charge in APV shots
483  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TH1ChargeMedianApvShots");
484  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
485  const char* HistoName = "Apv_Shots_Charge_Median";
486  MedianChargeApvShotsGlobal=dqmStore_->book1D(HistoName,HistoName,
487  Parameters.getParameter<int32_t>("Nbins"),
488  Parameters.getParameter<double>("xmin"),
489  Parameters.getParameter<double>("xmax"));
490  MedianChargeApvShotsGlobal->setAxisTitle("Apv Shots Charge Median (ADC)",1);
491  }
492 
493  //cmulative APV number with shots
496  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
497  const char* HistoName = "Apv_Shots_Apv_Number";
498  NApvApvShotsGlobal=dqmStore_->book1D(HistoName,HistoName,
499  Parameters.getParameter<int32_t>("Nbins"),
500  Parameters.getParameter<double>("xmin"),
501  Parameters.getParameter<double>("xmax"));
502  NApvApvShotsGlobal->setAxisTitle("Apv Number",1);
503  }
504 
505  //
506  // Book new histogram to monitor digi in last LS
507  //
508 
511 
512  std::stringstream ss;
513 
514  folder_organizer.getLayerFolderName(ss, 0, tTopo);
515  dqmStore_->setCurrentFolder(ss.str().c_str());
516 
517  // if (subdetswitchtotdigiproflson) {
519  const char* HistoName = "NumberOfDigisInLastLS";
521  6,0.5,6.5,
522  0., 0., "" );
529  }
530 
532  std::string HistoName = "DataPresentInLS";
533  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TotalNumberOfDigisFailure");
534 
535  digiFailureMEs.SubDetDigiFailures2D = dqmStore_->book2D(HistoName,HistoName,
536  Parameters.getParameter<int32_t>("Nbins"), //bins X
537  1, //xmin
538  Parameters.getParameter<int32_t>("Nbins") + 1, //xmax
539  6, //bins Y
540  0, //ymin
541  6); //ymax
542 
549  digiFailureMEs.SubDetDigiFailures2D->setAxisTitle("Luminosity Section");
550  }
551  }//end of if
552 
553 }//end of method
554 
555 //--------------------------------------------------------------------------------------------
557 
558  // Filter out events if DCS Event if requested
559  if (dcsStatus_ && !dcsStatus_->getStatus(iEvent, iSetup)) return;
560 
561  //Retrieve tracker topology from geometry
562  edm::ESHandle<TrackerTopology> tTopoHandle;
563  iSetup.get<IdealGeometryRecord>().get(tTopoHandle);
564  const TrackerTopology* const tTopo = tTopoHandle.product();
565 
566  TotalNShots=0;
567 
568  runNb = iEvent.id().run();
569  eventNb++;
570 
571  float iOrbitSec = iEvent.orbitNumber()/NORBITS_PER_SECOND;
572 
573  digi_detset_handles.clear();
574  /*
575  for(std::vector<edm::InputTag>::iterator itDigiProducerList = digiProducerList.begin();
576  itDigiProducerList != digiProducerList.end(); ++itDigiProducerList ) {
577 
578  edm::Handle< edm::DetSetVector<SiStripDigi> > digi_handle;
579 
580  iEvent.getByLabel((*itDigiProducerList),digi_handle);
581  */
582  std::vector<edm::EDGetTokenT<edm::DetSetVector<SiStripDigi> > >::const_iterator iToken = digiProducerTokenList.begin();
583  for(std::vector<edm::InputTag>::const_iterator iter = digiProducerList.begin(), iEnd = digiProducerList.end();
584  iter != iEnd; ++iter, ++iToken) {
586  iEvent.getByToken( *iToken, digi_handle );
587  if (digi_handle.isValid()) digi_detset_handles.push_back(digi_handle.product());
588  }
589 
590  // initialise # of clusters to zero
591  for (std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.begin();
592  iSubdet != SubDetMEsMap.end(); iSubdet++) {
593  iSubdet->second.totNDigis = 0;
594  iSubdet->second.SubDetApvShots.clear();
595  }
596 
597  for (std::map<std::string, std::vector< uint32_t > >::const_iterator iterLayer = LayerDetMap.begin();
598  iterLayer != LayerDetMap.end(); iterLayer++) {
599 
600  std::string layer_label = iterLayer->first;
601 
602  std::vector< uint32_t > layer_dets = iterLayer->second;
603  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(layer_label);
604 
605  //get Layer MEs
606  LayerMEs local_layermes;
607 
608  if(iLayerME == LayerMEsMap.end()) continue;
609  else local_layermes = iLayerME->second;
610 
611  int largest_adc_layer= 0;
612  int smallest_adc_layer= 99999;
613 
614  int ndigi_layer = 0;
615 
616  uint16_t iDet = 0;
617 
618  std::string subdet_label = "";
619 
620  // loop over all modules in the layer
621  for (std::vector< uint32_t >::const_iterator iterDets = layer_dets.begin() ;
622  iterDets != layer_dets.end() ; iterDets++) {
623  iDet++;
624 
625  // detid and type of ME
626  uint32_t detid = (*iterDets);
627 
628  // Get SubDet label once
629  if (subdet_label.size() == 0) subdet_label = folder_organizer.getSubDetFolderAndTag(detid, tTopo).second;
630 
631  // DetId and corresponding set of MEs
632 
633  std::map<uint32_t, ModMEs >::iterator pos = DigiMEs.find(detid);
634  ModMEs local_modmes = pos->second;
635 
636  // search digis of detid
637  int loc = getDigiSourceIndex(detid);
638 
639  int ndigi_det = 0;
640 
641  if (loc > -1) {
642  ndigi_det = (*(digi_detset_handles[loc]))[detid].size();
643  APVShotFinder theShotFinder = APVShotFinder((*(digi_detset_handles[loc]))[detid]);
644  const std::vector<APVShot>& shots = theShotFinder.getShots();
645  AddApvShotsToSubDet(shots,SubDetMEsMap[subdet_label].SubDetApvShots);
646  if (shotshistomapon) tkmapNApvshots->fill(detid,shots.size());
649  }
650 
651  if(Mod_On_ && moduleswitchnumdigison && (local_modmes.NumberOfDigis != NULL))
652  (local_modmes.NumberOfDigis)->Fill(ndigi_det);
653 
655  local_layermes.LayerNumberOfDigisProfile->Fill(iDet*1.0,ndigi_det);
656 
657  if (digitkhistomapon) tkmapdigi->fill(detid,ndigi_det);
658 
659  if (ndigi_det == 0) continue; // no digis for this detid => jump to next step of loop
660 
661  const edm::DetSet<SiStripDigi> & digi_detset = (*(digi_detset_handles[loc]))[detid];
662 
663  ndigi_layer += ndigi_det;
664 
665  // ADCs
666  int largest_adc=(digi_detset.data.begin())->adc();
667  int smallest_adc=(digi_detset.data.begin())->adc();
668 
669 
670  // Check if these parameters are really needed
671  float det_occupancy = 0.0;
672 
673  for(edm::DetSet<SiStripDigi>::const_iterator digiIter = digi_detset.data.begin();
674  digiIter!= digi_detset.data.end(); digiIter++ ){
675 
676  int this_adc = digiIter->adc();
677 
678  if (this_adc > 0.0) det_occupancy++;
679 
680  if(this_adc>largest_adc) largest_adc = this_adc;
681  if(this_adc<smallest_adc) smallest_adc = this_adc;
682 
683  if(Mod_On_ && moduleswitchnumdigispstripon && (local_modmes.NumberOfDigisPerStrip != NULL) && (this_adc > 0.0) )
684  (local_modmes.NumberOfDigisPerStrip)->Fill(digiIter->strip());
685 
686  if(Mod_On_ && moduleswitchdigiadcson && (local_modmes.DigiADCs != NULL) )
687  (local_modmes.DigiADCs)->Fill(static_cast<float>(this_adc));
688 
689  //Fill #ADCs for this digi at layer level
691  fillME(local_layermes.LayerDigiADCs , this_adc);
692  if (createTrendMEs) fillTrend(local_layermes.LayerDigiADCsTrend, this_adc, iOrbitSec);
693  }
694 
696  local_layermes.LayerDigiADCProfile->Fill(iDet*1.0,this_adc);
697 
698  }//end of loop over digis in this det
699 
700  // Occupancy
701  short nstrips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128;
702  if (nstrips > 0 && det_occupancy > 0 ) {
703  det_occupancy = det_occupancy/nstrips;
704  if (Mod_On_ && moduleswitchstripoccupancyon && (local_modmes.StripOccupancy != NULL))
705  (local_modmes.StripOccupancy)->Fill(det_occupancy);
707  fillME(local_layermes.LayerStripOccupancy, det_occupancy);
708  if (createTrendMEs) fillTrend(local_layermes.LayerStripOccupancyTrend, det_occupancy, iOrbitSec);
709  }
710  }
711 
712  if (largest_adc > largest_adc_layer) largest_adc_layer = largest_adc;
713  if (smallest_adc < smallest_adc_layer) smallest_adc_layer = smallest_adc;
714 
715  // nr. of adcs for hottest strip
716  if( Mod_On_ && moduleswitchadchotteston && (local_modmes.ADCsHottestStrip != NULL))
717  (local_modmes.ADCsHottestStrip)->Fill(static_cast<float>(largest_adc));
718 
719  // nr. of adcs for coolest strip
720  if(Mod_On_ && moduleswitchadccooleston && (local_modmes.ADCsCoolestStrip != NULL))
721  (local_modmes.ADCsCoolestStrip)->Fill(static_cast<float>(smallest_adc));
722 
723  }//end of loop over DetIds
724 
726  fillME(local_layermes.LayerNumberOfDigis,ndigi_layer);
727  if (createTrendMEs) fillTrend(local_layermes.LayerNumberOfDigisTrend, ndigi_layer, iOrbitSec);
728  }
730  fillME(local_layermes.LayerADCsHottestStrip,largest_adc_layer);
731  if (createTrendMEs) fillTrend(local_layermes.LayerADCsHottestStripTrend, largest_adc_layer, iOrbitSec);
732  }
734  fillME(local_layermes.LayerADCsCoolestStrip ,smallest_adc_layer);
735  if (createTrendMEs) fillTrend(local_layermes.LayerADCsCoolestStripTrend, smallest_adc_layer, iOrbitSec);
736  }
737 
738  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
739  if(iSubdet != SubDetMEsMap.end()) {
740  iSubdet->second.totNDigis += ndigi_layer;
741  //std::cout << " totDigis" << iSubdet->second.totNDigis << " in " << subdet_label << std::endl;
742  }
743  }
744 
746 
747  //check Stable beams bit
749  // iEvent.getByLabel("gtEvmDigis", gtEvm_handle);
750  iEvent.getByToken( gtEvmToken_, gtEvm_handle );
751  L1GlobalTriggerEvmReadoutRecord const* gtevm = gtEvm_handle.product();
752 
753  L1GtfeExtWord gtfeEvmExtWord;
754  if (gtevm)
755  {
756  gtfeEvmExtWord = gtevm->gtfeWord();
757  }
758  else
759  edm::LogInfo("DQMProvInfo") << " gtfeEvmWord inaccessible" ;
760 
761  /* mia: is there not a smarter way !?!?!?!? */
762  if ( gtfeEvmExtWord.beamMode() == 11 )
763  isStableBeams = true;
764  }
765 
766  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
767  it != SubDetMEsMap.end(); it++) {
768 
769  // if (subdetswitchtotdigiproflson) {
771  if (strcmp(it->first.c_str(),"TEC__MINUS")==0){
772  digiFailureMEs.SubDetTotDigiProfLS->Fill(1, it->second.totNDigis);
773  }else if (strcmp(it->first.c_str(),"TEC__PLUS")==0){
774  digiFailureMEs.SubDetTotDigiProfLS->Fill(2, it->second.totNDigis);
775  }else if (strcmp(it->first.c_str(),"TIB")==0){
776  digiFailureMEs.SubDetTotDigiProfLS->Fill(3, it->second.totNDigis);
777  }else if (strcmp(it->first.c_str(),"TID__MINUS")==0){
778  digiFailureMEs.SubDetTotDigiProfLS->Fill(4, it->second.totNDigis);
779  }else if (strcmp(it->first.c_str(),"TID__PLUS")==0){
780  digiFailureMEs.SubDetTotDigiProfLS->Fill(5, it->second.totNDigis);
781  }else if (strcmp(it->first.c_str(),"TOB")==0){
782  digiFailureMEs.SubDetTotDigiProfLS->Fill(6, it->second.totNDigis);
783  }
784  }
785 
787  if (strcmp(it->first.c_str(),"TEC__MINUS")==0){
788  NApvShotsGlobalProf->Fill(1,it->second.SubDetApvShots.size());
789  }else if (strcmp(it->first.c_str(),"TEC__PLUS")==0){
790  NApvShotsGlobalProf->Fill(2,it->second.SubDetApvShots.size());
791  }else if (strcmp(it->first.c_str(),"TIB")==0){
792  NApvShotsGlobalProf->Fill(3,it->second.SubDetApvShots.size());
793  }else if (strcmp(it->first.c_str(),"TID__MINUS")==0){
794  NApvShotsGlobalProf->Fill(4,it->second.SubDetApvShots.size());
795  }else if (strcmp(it->first.c_str(),"TID__PLUS")==0){
796  NApvShotsGlobalProf->Fill(5,it->second.SubDetApvShots.size());
797  }else if (strcmp(it->first.c_str(),"TOB")==0){
798  NApvShotsGlobalProf->Fill(6,it->second.SubDetApvShots.size());
799  }
800  }
801 
802  SubDetMEs subdetmes= it->second;
803  std::string subdet = it->first;
804 
805  // Fill APV shots histograms for SubDet
806 
807  uint ShotsSize=subdetmes.SubDetApvShots.size();
808  TotalNShots+=ShotsSize; //Counter for total Shots in the SiStrip Tracker
809 
810  if (subdetswitchnapvshotson ) subdetmes.SubDetNApvShotsTH1->Fill(ShotsSize);// N shots
811  if (subdetswitchapvshotsonprof) subdetmes.SubDetNApvShotsProf ->Fill(iOrbitSec,ShotsSize); //N shots vs time
812 
813  for (uint i=0; i< ShotsSize; ++i){ // Strip multiplicity, charge median and APV number distributions for APV shots
814 
815  if (subdetswitchapvshotsApvon) subdetmes.SubDetNApvShotsNApvTH1->Fill((subdetmes.SubDetApvShots[i].apvNumber()+1));//APV are defined by 0 to 5 I want 1 to 6
816  if (globalswitchapvshotsApvon) NApvApvShotsGlobal->Fill((subdetmes.SubDetApvShots[i].apvNumber()+1));
817 
818  if (subdetswitchnstripsapvshotson) subdetmes.SubDetNStripsApvShotsTH1->Fill(subdetmes.SubDetApvShots[i].nStrips());
820 
823 
824  }
825 
826  if (subdetswitchtotdigiprofon)subdetmes.SubDetTotDigiProf->Fill(iOrbitSec,subdetmes.totNDigis);
827  }
828 
831 
832  // get EventHistory
833 
834  edm::Handle<EventWithHistory> event_history;
835  // iEvent.getByLabel(historyProducer_,event_history);
836  iEvent.getByToken(historyProducerToken_,event_history);
837 
838  // get Phase of APV
839  edm::Handle<APVCyclePhaseCollection> apv_phase_collection;
840  // iEvent.getByLabel(apvPhaseProducer_,apv_phase_collection);
841  iEvent.getByToken(apvPhaseProducerToken_,apv_phase_collection);
842 
843  if (event_history.isValid()
844  && !event_history.failedToGet()
845  && apv_phase_collection.isValid()
846  && !apv_phase_collection.failedToGet()) {
847 
848 
849  long long tbx = event_history->absoluteBX();
850 
851 
852  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
853  it != SubDetMEsMap.end(); it++) {
854 
855  SubDetMEs subdetmes;
856  std::string subdet = it->first;
857  subdetmes = it->second;
858 
859  int the_phase = APVCyclePhaseCollection::invalid;
860  long long tbx_corr = tbx;
861 
862  if (SubDetPhasePartMap.find(subdet) != SubDetPhasePartMap.end()) the_phase = apv_phase_collection->getPhase(SubDetPhasePartMap[subdet]);
863  if(the_phase==APVCyclePhaseCollection::nopartition ||
865  the_phase==APVCyclePhaseCollection::invalid) the_phase=30;
866  tbx_corr -= the_phase;
867 
868  if (subdetswitchapvcycleprofon)subdetmes.SubDetDigiApvProf->Fill(tbx_corr%70,subdetmes.totNDigis);
869  if (subdetswitchapvcycleth2on) subdetmes.SubDetDigiApvTH2->Fill(tbx_corr%70,subdetmes.totNDigis);
870  }
871  }
872 }//end of method analyze
873 //--------------------------------------------------------------------------------------------
874 
876  bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
878 
879  // save histograms in a file
880  if(outputMEsInRootFile) dqmStore_->save(outputFileName);
881 
882 }//end of method
883 //--------------------------------------------------------------------------------------------
885  std::map<uint32_t, ModMEs >::iterator pos = DigiMEs.find(idet);
886  ModMEs mod_me = pos->second;
887 
892  if(Mod_On_ && moduleswitchdigiadcson) mod_me.DigiADCs->Reset();
894 
895 }
896 //------------------------------------------------------------------------------------------
897 MonitorElement* SiStripMonitorDigi::bookMETrend(const char* ParameterSetLabel, const char* HistoName)
898 {
899  edm::ParameterSet ParametersTrend = conf_.getParameter<edm::ParameterSet>("Trending");
900  MonitorElement* me = dqmStore_->bookProfile(HistoName,HistoName,
901  ParametersTrend.getParameter<int32_t>("Nbins"),
902  // 0,
903  ParametersTrend.getParameter<double>("xmin"),
904  ParametersTrend.getParameter<double>("xmax"),
905  // ParametersTrend.getParameter<int32_t>("Nbins"),
906  100, //that parameter should not be there !?
907  ParametersTrend.getParameter<double>("ymin"),
908  ParametersTrend.getParameter<double>("ymax"),
909  "" );
910  if(!me) return me;
911 
912  me->setAxisTitle("Event Time in Seconds",1);
913  if (me->kind() == MonitorElement::DQM_KIND_TPROFILE) me->getTH1()->SetBit(TH1::kCanRebin);
914  return me;
915 }
916 
917 //------------------------------------------------------------------------------------------
918 MonitorElement* SiStripMonitorDigi::bookME1D(const char* ParameterSetLabel, const char* HistoName)
919 {
921  return dqmStore_->book1D(HistoName,HistoName,
922  Parameters.getParameter<int32_t>("Nbinx"),
923  Parameters.getParameter<double>("xmin"),
924  Parameters.getParameter<double>("xmax")
925  );
926 }
927 
928 //--------------------------------------------------------------------------------
929 void SiStripMonitorDigi::fillTrend(MonitorElement* me ,float value, float timeinorbit)
930 {
931  if(!me) return;
932  me->Fill(timeinorbit,value);
933 }
934 
935 //
936 // -- Create Module Level MEs
937 //
938 void SiStripMonitorDigi::createModuleMEs(ModMEs& mod_single, uint32_t detid) {
939 
940  // use SistripHistoId for producing histogram id (and title)
941  SiStripHistoId hidmanager;
942  std::string hid;
943 
944  //nr. of digis per module
946  hid = hidmanager.createHistoId("NumberOfDigis","det",detid);
947  mod_single.NumberOfDigis = dqmStore_->book1D(hid, hid, 21, -0.5, 20.5);
948  dqmStore_->tag(mod_single.NumberOfDigis, detid);
949  mod_single.NumberOfDigis->setAxisTitle("number of digis in one detector module");
950  mod_single.NumberOfDigis->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
951  }
952 
953  //nr. of digis per strip in module
955  hid = hidmanager.createHistoId("NumberOfDigisPerStrip","det",detid);
956  short nstrips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128;
957  mod_single.NumberOfDigisPerStrip = dqmStore_->book1D(hid, hid, nstrips, -0.5, nstrips+0.5);
958  dqmStore_->tag(mod_single.NumberOfDigisPerStrip, detid);
959  mod_single.NumberOfDigisPerStrip->setAxisTitle("number of (digis > 0) per strip");
960  mod_single.NumberOfDigisPerStrip->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
961  }
962  //#ADCs for hottest strip
964  hid = hidmanager.createHistoId("ADCsHottestStrip","det",detid);
965  mod_single.ADCsHottestStrip = bookME1D("TH1ADCsHottestStrip", hid.c_str());
966  dqmStore_->tag(mod_single.ADCsHottestStrip, detid); // 6 APVs -> 768 strips
967  mod_single.ADCsHottestStrip->setAxisTitle("number of ADCs for hottest strip");
968  }
969 
970  //#ADCs for coolest strip
972  hid = hidmanager.createHistoId("ADCsCoolestStrip","det",detid);
973  mod_single.ADCsCoolestStrip = bookME1D("TH1ADCsCoolestStrip", hid.c_str());
974  dqmStore_->tag(mod_single.ADCsCoolestStrip, detid);
975  mod_single.ADCsCoolestStrip->setAxisTitle("number of ADCs for coolest strip");
976  }
977 
978  //#ADCs for each digi
980  hid = hidmanager.createHistoId("DigiADCs","det",detid);
981  mod_single.DigiADCs = bookME1D("TH1DigiADCs", hid.c_str());
982  dqmStore_->tag(mod_single.DigiADCs, detid);
983  mod_single.DigiADCs->setAxisTitle("number of ADCs for each digi");
984  }
985 
986  //Strip occupancy
988  hid = hidmanager.createHistoId("StripOccupancy","det",detid);
989  mod_single.StripOccupancy = bookME1D("TH1StripOccupancy", hid.c_str());
990  dqmStore_->tag(mod_single.StripOccupancy, detid);
991  mod_single.StripOccupancy->setAxisTitle("strip occupancy");
992  }
993 
994 }
995 
996 //
997 // -- Create Module Level MEs
998 //
999 
1001 
1002  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
1003  if(iLayerME==LayerMEsMap.end()){
1004  SiStripHistoId hidmanager;
1005  LayerMEs layerMEs;
1006  layerMEs.LayerNumberOfDigis = 0;
1007  layerMEs.LayerNumberOfDigisTrend = 0;
1008  layerMEs.LayerADCsHottestStrip = 0;
1009  layerMEs.LayerADCsHottestStripTrend = 0;
1010  layerMEs.LayerADCsCoolestStrip = 0;
1011  layerMEs.LayerADCsCoolestStripTrend = 0;
1012  layerMEs.LayerDigiADCs = 0;
1013  layerMEs.LayerDigiADCsTrend = 0;
1014  layerMEs.LayerStripOccupancy = 0;
1015  layerMEs.LayerStripOccupancyTrend = 0;
1016  layerMEs.LayerNumberOfDigisProfile = 0;
1017  layerMEs.LayerDigiADCProfile = 0;
1018 
1019 
1020  //#Digis
1021  if(layerswitchnumdigison) {
1022  layerMEs.LayerNumberOfDigis=bookME1D("TH1NumberOfDigis", hidmanager.createHistoLayer("Summary_TotalNumberOfDigis","layer",label,"").c_str());
1023  if (createTrendMEs) layerMEs.LayerNumberOfDigisTrend=bookMETrend("TH1NumberOfDigis", hidmanager.createHistoLayer("Trend_NumberOfDigis","layer",label,"").c_str());
1024  }
1025 
1026  //#ADCs for hottest strip
1028  layerMEs.LayerADCsHottestStrip=bookME1D("TH1ADCsHottestStrip", hidmanager.createHistoLayer("Summary_ADCsHottestStrip","layer",label,"").c_str());
1029  if (createTrendMEs) layerMEs.LayerADCsHottestStripTrend=bookMETrend("TH1ADCsHottestStrip", hidmanager.createHistoLayer("Trend_ADCsHottestStrip","layer",label,"").c_str());
1030  }
1031 
1032  //#ADCs for coolest strip
1034  layerMEs.LayerADCsCoolestStrip=bookME1D("TH1ADCsCoolestStrip", hidmanager.createHistoLayer("Summary_ADCsCoolestStrip","layer",label,"").c_str());
1035  if (createTrendMEs) layerMEs.LayerADCsCoolestStripTrend=bookMETrend("TH1ADCsCoolestStrip", hidmanager.createHistoLayer("Trend_ADCsCoolestStrip","layer",label,"").c_str());
1036  }
1037 
1038  //#ADCs for each digi
1039  if(layerswitchdigiadcson) {
1040  layerMEs.LayerDigiADCs=bookME1D("TH1DigiADCs", hidmanager.createHistoLayer("Summary_DigiADCs","layer",label,"").c_str());
1041  if (createTrendMEs) layerMEs.LayerDigiADCsTrend=bookMETrend("TH1DigiADCs", hidmanager.createHistoLayer("Trend_DigiADCs","layer",label,"").c_str());
1042  }
1043 
1044  //Strip Occupancy
1046  layerMEs.LayerStripOccupancy=bookME1D("TH1StripOccupancy", hidmanager.createHistoLayer("Summary_StripOccupancy","layer",label,"").c_str());
1047  if (createTrendMEs) layerMEs.LayerStripOccupancyTrend=bookMETrend("TH1StripOccupancy", hidmanager.createHistoLayer("Trend_StripOccupancy","layer",label,"").c_str());
1048 
1049  }
1050  // # of Digis
1052  std::string hid = hidmanager.createHistoLayer("NumberOfDigiProfile","layer",label,"");
1053  layerMEs.LayerNumberOfDigisProfile = dqmStore_->bookProfile(hid, hid, ndets, 0.5, ndets+0.5,21, -0.5, 200.5);
1054  }
1055 
1056  // # of Digis
1058  std::string hid = hidmanager.createHistoLayer("DigiADCProfile","layer",label,"");
1059  layerMEs.LayerDigiADCProfile = dqmStore_->bookProfile(hid, hid, ndets, 0.5, ndets+0.5, 64, -0.5, 255.5);
1060  }
1061 
1062  LayerMEsMap[label]=layerMEs;
1063  }
1064 }
1065 //
1066 // -- Create SubDetector MEs
1067 //
1069 
1070  SubDetMEs subdetMEs;
1071  subdetMEs.totNDigis = 0;
1072  subdetMEs.SubDetTotDigiProf = 0;
1073  subdetMEs.SubDetDigiApvProf = 0;
1074  subdetMEs.SubDetDigiApvTH2 = 0;
1075 
1076  subdetMEs.SubDetApvShots.clear();
1077  subdetMEs.SubDetNApvShotsTH1 = 0;
1078  subdetMEs.SubDetChargeMedianApvShotsTH1 = 0;
1079  subdetMEs.SubDetNStripsApvShotsTH1 = 0;
1080  subdetMEs.SubDetNApvShotsProf = 0;
1081 
1083 
1084  // Total Number of Digi - Profile
1086  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfDigis");
1087  HistoName = "TotalNumberOfDigiProfile__" + label;
1088  subdetMEs.SubDetTotDigiProf=dqmStore_->bookProfile(HistoName,HistoName,
1089  Parameters.getParameter<int32_t>("Nbins"),
1090  Parameters.getParameter<double>("xmin"),
1091  Parameters.getParameter<double>("xmax"),
1092  100, //that parameter should not be there !?
1093  Parameters.getParameter<double>("ymin"),
1094  Parameters.getParameter<double>("ymax"),
1095  "" );
1096  subdetMEs.SubDetTotDigiProf->setAxisTitle("Event Time in Seconds",1);
1097  if (subdetMEs.SubDetTotDigiProf->kind() == MonitorElement::DQM_KIND_TPROFILE) subdetMEs.SubDetTotDigiProf->getTH1()->SetBit(TH1::kCanRebin);
1098  }
1099 
1100  // Number of Digi vs Bx - Profile
1103  HistoName = "Digi_vs_ApvCycle__" + label;
1104  subdetMEs.SubDetDigiApvProf=dqmStore_->bookProfile(HistoName,HistoName,
1105  Parameters.getParameter<int32_t>("Nbins"),
1106  Parameters.getParameter<double>("xmin"),
1107  Parameters.getParameter<double>("xmax"),
1108  200, //that parameter should not be there !?
1109  Parameters.getParameter<double>("ymin"),
1110  Parameters.getParameter<double>("ymax"),
1111  "" );
1112  subdetMEs.SubDetDigiApvProf->setAxisTitle("ApvCycle (Corrected Absolute Bx % 70)",1);
1113  }
1114 
1115  // Number of Digi vs Bx - TH2
1118  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
1119  HistoName = "Digi_vs_ApvCycle_2D__" + label;
1120  // Adjusting the scale for 2D histogram
1121  double h2ymax = 9999.0;
1122  double yfact = Parameters.getParameter<double>("yfactor");
1123  if(label.find("TIB") != std::string::npos) h2ymax = (6984.*256.)*yfact;
1124  else if (label.find("TID") != std::string::npos) h2ymax = (2208.*256.)*yfact;
1125  else if (label.find("TOB") != std::string::npos) h2ymax = (12906.*256.)*yfact;
1126  else if (label.find("TEC") != std::string::npos) h2ymax = (7552.*2.*256.)*yfact;
1127  subdetMEs.SubDetDigiApvTH2=dqmStore_->book2D(HistoName,HistoName,
1128  Parameters.getParameter<int32_t>("Nbins"),
1129  Parameters.getParameter<double>("xmin"),
1130  Parameters.getParameter<double>("xmax"),
1131  Parameters.getParameter<int32_t>("Nbinsy"), //it was 100 that parameter should not be there !?
1132  Parameters.getParameter<double>("ymin"),
1133  h2ymax);
1134  subdetMEs.SubDetDigiApvTH2->setAxisTitle("absolute Bx mod(70)",1);
1135  }
1136 
1137  //Number of APV Shots
1140  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
1141  HistoName = "Number_of_Apv_Shots_" + label;
1142  subdetMEs.SubDetNApvShotsTH1=dqmStore_->book1D(HistoName,HistoName,
1143  Parameters.getParameter<int32_t>("Nbins"),
1144  Parameters.getParameter<double>("xmin"),
1145  Parameters.getParameter<double>("xmax"));
1146  subdetMEs.SubDetNApvShotsTH1->setAxisTitle("# Apv Shots",1);
1147  }
1148 
1149  //Strip multiplicity of APV Shots
1152  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
1153  HistoName = "Number_of_Strips_in_Apv_Shots_" + label;
1154  subdetMEs.SubDetNStripsApvShotsTH1=dqmStore_->book1D(HistoName,HistoName,
1155  Parameters.getParameter<int32_t>("Nbins"),
1156  Parameters.getParameter<double>("xmin"),
1157  Parameters.getParameter<double>("xmax"));
1158  subdetMEs.SubDetNStripsApvShotsTH1->setAxisTitle("# strips in Apv Shots",1);
1159  }
1160 
1161  //Charge median of APV Shots
1163  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TH1ChargeMedianApvShots");
1164  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
1165  HistoName = "Apv_Shots_Charge_Median_" + label;
1166  subdetMEs.SubDetChargeMedianApvShotsTH1=dqmStore_->book1D(HistoName,HistoName,
1167  Parameters.getParameter<int32_t>("Nbins"),
1168  Parameters.getParameter<double>("xmin"),
1169  Parameters.getParameter<double>("xmax"));
1170  subdetMEs.SubDetChargeMedianApvShotsTH1->setAxisTitle("Apv Shots Charge Median (ADC)",1);
1171  }
1172 
1173 
1176  //dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
1177  HistoName = "Apv_Shots_Apv_Number_" + label;
1178  subdetMEs.SubDetNApvShotsNApvTH1=dqmStore_->book1D(HistoName,HistoName,
1179  Parameters.getParameter<int32_t>("Nbins"),
1180  Parameters.getParameter<double>("xmin"),
1181  Parameters.getParameter<double>("xmax"));
1182  subdetMEs.SubDetNApvShotsNApvTH1->setAxisTitle("Apv Number",1);
1183  }
1184 
1185 
1186 
1187 
1188 
1189  //APV Shots number Vs time
1192  HistoName = "NApv_Shots_vs_Time_" + label;
1193  subdetMEs.SubDetNApvShotsProf=dqmStore_->bookProfile(HistoName,HistoName,
1194  Parameters.getParameter<int32_t>("Nbins"),
1195  Parameters.getParameter<double>("xmin"),
1196  Parameters.getParameter<double>("xmax"),
1197  200, //that parameter should not be there !?
1198  Parameters.getParameter<double>("ymin"),
1199  Parameters.getParameter<double>("ymax"),
1200  "" );
1201  subdetMEs.SubDetNApvShotsProf->setAxisTitle("Time (s)",1);
1202  subdetMEs.SubDetNApvShotsProf->setAxisTitle("# Apv Shots",2);
1203  if (subdetMEs.SubDetNApvShotsProf->kind() == MonitorElement::DQM_KIND_TPROFILE) subdetMEs.SubDetNApvShotsProf->getTH1()->SetBit(TH1::kCanRebin);
1204  }
1205 
1206 
1207 
1208 
1209 
1210 
1211 
1212  SubDetMEsMap[label]=subdetMEs;
1213 }
1214 //
1215 // -- Get DetSet vector for a given Detector
1216 //
1218  int location = -1;
1219  for (unsigned int ival = 0; ival < digi_detset_handles.size(); ++ival){
1221  if(isearch != digi_detset_handles[ival]->end()) {
1222  location = ival;
1223  break;
1224  }
1225  }
1226  return location;
1227 }
1228 
1229 void SiStripMonitorDigi::AddApvShotsToSubDet(const std::vector<APVShot> & moduleShots, std::vector<APVShot> & subdetShots){
1230 
1231  for (uint i=0; i<moduleShots.size(); i++){
1232  subdetShots.push_back(moduleShots[i]);
1233  }
1234 }
1235 
1236 void SiStripMonitorDigi::FillApvShotsMap(TkHistoMap* the_map, const std::vector<APVShot> & shots, uint32_t id ,int mode){
1237 
1238  for (uint i=0; i<shots.size(); i++){
1239  if (mode==1) the_map->fill(id,shots[i].nStrips()); //mode == 1 fill with strip multiplicity
1240  if (mode==2) the_map->fill(id,shots[i].median()); // mode == 2 fill with charge median
1241  }
1242 }
1243 
1244 //define this as a plug-in
int adc(sample_type sample)
get the ADC sample (12 bits)
RunNumber_t run() const
Definition: EventID.h:42
LuminosityBlockID id() const
void ResetModuleMEs(uint32_t idet)
void createSubDetMEs(std::string label)
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
std::map< std::string, LayerMEs > LayerMEsMap
MonitorElement * LayerNumberOfDigisTrend
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:873
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * LayerStripOccupancy
MonitorElement * LayerADCsHottestStrip
edm::InputTag historyProducer_
void createModuleMEs(ModMEs &mod_single, uint32_t detid)
const L1GtfeExtWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
void getLayerFolderName(std::stringstream &ss, uint32_t rawdetid, const TrackerTopology *tTopo, bool ring_flag=0)
MonitorElement * LayerADCsHottestStripTrend
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
MonitorElement * NApvShotsGlobalProf
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
std::map< uint32_t, ModMEs > DigiMEs
#define NULL
Definition: scimark2.h:8
std::map< std::string, std::string > SubDetPhasePartMap
MonitorElement * MedianChargeApvShotsGlobal
MonitorElement * StripMultiplicityApvShotsGlobal
TkHistoMap * tkmapNstripApvshot
MonitorElement * LayerNumberOfDigisProfile
const eventsetup::EventSetupRecord * find(const eventsetup::EventSetupRecordKey &) const
Definition: EventSetup.cc:90
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
void Fill(long long x)
std::vector< APVShot > SubDetApvShots
virtual void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &)
void setDetectorFolder(uint32_t rawdetid, const TrackerTopology *tTopo)
void tag(MonitorElement *me, unsigned int myTag)
Definition: DQMStore.cc:1510
unsigned long long m_cacheID_
MonitorElement * SubDetNApvShotsNApvTH1
bool getStatus(edm::Event const &e, edm::EventSetup const &eSetup)
MonitorElement * NumberOfDigisPerStrip
const std::vector< APVShot > & getShots() const
int iEvent
Definition: GenABIO.cc:243
MonitorElement * ADCsCoolestStrip
vector< ParameterSet > Parameters
SiStripDCSStatus * dcsStatus_
const double NORBITS_PER_SECOND
edm::ESHandle< SiStripDetCabling > SiStripDetCabling_
void getTOBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tobDetRawIds, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t rod=0) const
MonitorElement * bookMETrend(const char *ParameterSetLabel, const char *HistoName)
MonitorElement * LayerADCsCoolestStripTrend
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * SubDetNStripsApvShotsTH1
DigiFailureMEs digiFailureMEs
void fill(uint32_t &detid, float value)
Definition: TkHistoMap.cc:133
edm::EDGetTokenT< EventWithHistory > historyProducerToken_
void fillME(MonitorElement *ME, float value1)
MonitorElement * NApvApvShotsGlobal
std::vector< const edm::DetSetVector< SiStripDigi > * > digi_detset_handles
void createLayerMEs(std::string label, int ndet)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual void analyze(const edm::Event &, const edm::EventSetup &)
TH1 * getTH1(void) const
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:2297
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
Definition: DQMStore.cc:1187
#define end
Definition: vmac.h:37
int orbitNumber() const
Definition: EventBase.h:63
Kind kind(void) const
Get the type of the monitor element.
std::map< std::string, SubDetMEs > SubDetMEsMap
std::string getSubdetid(uint32_t id, const TrackerTopology *tTopo, bool flag_ring)
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1624
MonitorElement * ADCsHottestStrip
bool isValid() const
Definition: HandleBase.h:76
void fillTrend(MonitorElement *me, float value, float timeinorbit)
edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > gtEvmToken_
MonitorElement * NApvShotsGlobal
std::vector< edm::EDGetTokenT< edm::DetSetVector< SiStripDigi > > > digiProducerTokenList
MonitorElement * LayerDigiADCProfile
bool failedToGet() const
Definition: HandleBase.h:80
int getDigiSourceIndex(uint32_t id)
SiStripMonitorDigi(const edm::ParameterSet &)
edm::InputTag apvPhaseProducer_
void setLayerFolder(uint32_t rawdetid, const TrackerTopology *tTopo, int32_t layer=0, bool ring_flag=0)
std::map< std::string, std::vector< uint32_t > > LayerDetMap
std::string createHistoId(std::string description, std::string id_type, uint32_t component_id)
MonitorElement * SubDetChargeMedianApvShotsTH1
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
LuminosityBlockNumber_t luminosityBlock() const
T const * product() const
Definition: Handle.h:81
std::string topFolderName_
edm::ParameterSet conf_
std::pair< std::string, std::string > getSubDetFolderAndTag(const uint32_t &detid, const TrackerTopology *tTopo)
std::string HistoName
void getTECDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tecDetRawIds, uint32_t side=0, uint32_t wheel=0, uint32_t petal_bkw_frw=0, uint32_t petal=0, uint32_t ring=0, uint32_t ster=0) const
std::vector< edm::InputTag > digiProducerList
TkHistoMap * tkmapMedianChargeApvshots
edm::EDGetTokenT< APVCyclePhaseCollection > apvPhaseProducerToken_
double getBinContent(int binx) const
get content of bin (1-D)
edm::EventID id() const
Definition: EventBase.h:56
collection_type data
Definition: DetSet.h:78
TkHistoMap * tkmapNApvshots
MonitorElement * LayerStripOccupancyTrend
void getTIBDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tibDetRawIds, uint32_t layer=0, uint32_t bkw_frw=0, uint32_t int_ext=0, uint32_t string=0) const
virtual void endRun(const edm::Run &, const edm::EventSetup &)
MonitorElement * LayerADCsCoolestStrip
void AddApvShotsToSubDet(const std::vector< APVShot > &, std::vector< APVShot > &)
virtual void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &)
SiStripFolderOrganizer folder_organizer
void getTIDDetectors(const std::vector< uint32_t > &inputDetRawIds, std::vector< uint32_t > &tidDetRawIds, uint32_t side=0, uint32_t wheel=0, uint32_t ring=0, uint32_t ster=0) const
MonitorElement * ShotsVsTimeApvShotsGlobal
void createMEs(const edm::EventSetup &es)
volatile std::atomic< bool > shutdown_flag false
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
collection_type::const_iterator const_iterator
Definition: DetSet.h:33
bool isValid() const
Definition: ESHandle.h:37
virtual void beginRun(const edm::Run &, const edm::EventSetup &)
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1001
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:106
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void Reset(void)
reset ME (ie. contents, errors, etc)
const cms_uint16_t beamMode() const
void FillApvShotsMap(TkHistoMap *, const std::vector< APVShot > &, uint32_t id, int)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:585
Definition: Run.h:41
static HCTypeTag findType(char const *iTypeName)
find a type based on the types name, if not found will return default HCTypeTag
Definition: HCTypeTag.cc:125
MonitorElement * bookME1D(const char *ParameterSetLabel, const char *HistoName)