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 // $Id: SiStripMonitorDigi.cc,v 1.63 2011/03/03 08:21:15 borrell Exp $
7 #include<fstream>
8 #include "TNamed.h"
28 
29 #include "TMath.h"
35 
36 #include "iostream"
37 
38 
39 //--------------------------------------------------------------------------------------------
40 SiStripMonitorDigi::SiStripMonitorDigi(const edm::ParameterSet& iConfig) : dqmStore_(edm::Service<DQMStore>().operator->()), conf_(iConfig), show_mechanical_structure_view(true), show_readout_view(false), show_control_view(false), select_all_detectors(true), reset_each_run(false), folder_organizer(), m_cacheID_(0)
41 {
42  firstEvent = -1;
43  eventNb = 0;
44 
45  // Detector Partitions
46  SubDetPhasePartMap["TIB"] = "TI";
47  SubDetPhasePartMap["TID__side__1"] = "TI";
48  SubDetPhasePartMap["TID__side__2"] = "TI";
49  SubDetPhasePartMap["TOB"] = "TO";
50  SubDetPhasePartMap["TEC__side__1"] = "TM";
51  SubDetPhasePartMap["TEC__side__2"] = "TP";
52 
53  // get Digi Producer List
54  digiProducerList = conf_.getParameter<std::vector<edm::InputTag> >("DigiProducersList");
55 
56  //get on/off option for every cluster from cfi
57  edm::ParameterSet ParametersNumberOfDigis = conf_.getParameter<edm::ParameterSet>("TH1NumberOfDigis");
58  layerswitchnumdigison = ParametersNumberOfDigis.getParameter<bool>("layerswitchon");
59  moduleswitchnumdigison = ParametersNumberOfDigis.getParameter<bool>("moduleswitchon");
60 
61  edm::ParameterSet ParametersNumberOfDigisPerStrip = conf_.getParameter<edm::ParameterSet>("TH1NumberOfDigisPerStrip");
62  moduleswitchnumdigispstripon = ParametersNumberOfDigisPerStrip.getParameter<bool>("moduleswitchon");
63 
64  edm::ParameterSet ParametersADCsHottestStrip = conf_.getParameter<edm::ParameterSet>("TH1ADCsHottestStrip");
65  layerswitchadchotteston = ParametersADCsHottestStrip.getParameter<bool>("layerswitchon");
66  moduleswitchadchotteston = ParametersADCsHottestStrip.getParameter<bool>("moduleswitchon");
67 
68  edm::ParameterSet ParametersADCsCoolestStrip = conf_.getParameter<edm::ParameterSet>("TH1ADCsCoolestStrip");
69  layerswitchadccooleston = ParametersADCsCoolestStrip.getParameter<bool>("layerswitchon");
70  moduleswitchadccooleston = ParametersADCsCoolestStrip.getParameter<bool>("moduleswitchon");
71 
72  edm::ParameterSet ParametersDigiADCs = conf_.getParameter<edm::ParameterSet>("TH1DigiADCs");
73  layerswitchdigiadcson = ParametersDigiADCs.getParameter<bool>("layerswitchon");
74  moduleswitchdigiadcson = ParametersDigiADCs.getParameter<bool>("moduleswitchon");
75 
76  edm::ParameterSet ParametersStripOccupancy = conf_.getParameter<edm::ParameterSet>("TH1StripOccupancy");
77  layerswitchstripoccupancyon = ParametersStripOccupancy.getParameter<bool>("layerswitchon");
78  moduleswitchstripoccupancyon = ParametersStripOccupancy.getParameter<bool>("moduleswitchon");
79 
80  edm::ParameterSet ParametersDigiProf = conf_.getParameter<edm::ParameterSet>("TProfNumberOfDigi");
81  layerswitchnumdigisprofon = ParametersDigiProf.getParameter<bool>("layerswitchon");
82  edm::ParameterSet ParametersDigiADC = conf_.getParameter<edm::ParameterSet>("TProfDigiADC");
83  layerswitchdigiadcprofon = ParametersDigiProf.getParameter<bool>("layerswitchon");
84 
85  edm::ParameterSet ParametersTotDigiProf = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfDigis");
86  subdetswitchtotdigiprofon = ParametersTotDigiProf.getParameter<bool>("subdetswitchon");
87 
88  edm::ParameterSet ParametersTotDigisProfVsLS = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfDigisVsLS");
89  subdetswitchtotdigiproflson = ParametersTotDigisProfVsLS.getParameter<bool>("subdetswitchon");
90 
91  edm::ParameterSet ParametersTotDigiFailure = conf_.getParameter<edm::ParameterSet>("TotalNumberOfDigisFailure");
92  subdetswitchtotdigifailureon = ParametersTotDigiFailure.getParameter<bool>("subdetswitchon");
93 
94  edm::ParameterSet ParametersDigiApvProf = conf_.getParameter<edm::ParameterSet>("TProfDigiApvCycle");
95  subdetswitchapvcycleprofon = ParametersDigiApvProf.getParameter<bool>("subdetswitchon");
96 
97  edm::ParameterSet ParametersDigiApvTH2 = conf_.getParameter<edm::ParameterSet>("TH2DigiApvCycle");
98  subdetswitchapvcycleth2on = ParametersDigiApvTH2.getParameter<bool>("subdetswitchon");
99 
100  digitkhistomapon = conf_.getParameter<bool>("TkHistoMap_On");
101 
102  createTrendMEs = conf_.getParameter<bool>("CreateTrendMEs");
103  Mod_On_ = conf_.getParameter<bool>("Mod_On");
104  xLumiProf = conf_.getParameter<int>("xLumiProf");
105 
106  // Event History Producer
107  historyProducer_ = conf_.getParameter<edm::InputTag>("HistoryProducer");
108  // Apv Phase Producer
109  apvPhaseProducer_ = conf_.getParameter<edm::InputTag>("ApvPhaseProducer");
110 
111  // Create DCS Status
112  bool checkDCS = conf_.getParameter<bool>("UseDCSFiltering");
113  if (checkDCS) dcsStatus_ = new SiStripDCSStatus();
114  else dcsStatus_ = 0;
115 }
116 //------------------------------------------------------------------------------------------
118  if (dcsStatus_) delete dcsStatus_;
119 }
120 
121 //--------------------------------------------------------------------------------------------
123 
125  unsigned long long cacheID = es.get<SiStripDetCablingRcd>().cacheIdentifier();
126  if (m_cacheID_ != cacheID) {
127  m_cacheID_ = cacheID;
128  edm::LogInfo("SiStripMonitorDigi") <<"SiStripMonitorDigi::beginRun: "
129  << " Creating MEs for new Cabling ";
130  createMEs(es);
131  }
132  } else if (reset_each_run) {
133  edm::LogInfo("SiStripMonitorDigi") <<"SiStripMonitorDigi::beginRun: "
134  << " Resetting MEs ";
135  for (std::map<uint32_t, ModMEs >::const_iterator idet = DigiMEs.begin() ; idet!=DigiMEs.end() ; idet++) {
136  ResetModuleMEs(idet->first);
137  }
138  }
139 }
140 
141 //--------------------------------------------------------------------------------------------
143 }
144 
145 //--------------------------------------------------------------------------------------------
147  if (lb.id().luminosityBlock() % xLumiProf == 0) {
150  }
151  }
152 }
153 
154 //--------------------------------------------------------------------------------------------
156  if(lb.id().luminosityBlock() % xLumiProf == 0){
159  MonitorElement * me = dqmStore_->get("SiStrip/MechanicalView/NumberOfDigisInLastLS");
160  if (me){
161  for (int ibin = 1; ibin<7;ibin++){
162  float value = me->getBinContent(ibin);
163  if (value < 50.){
165  }else{
167  }
168  }
169  }
170  }
171  }
172 }
173 //--------------------------------------------------------------------------------------------
175 }
176 
177 
178 //--------------------------------------------------------------------------------------------
180 
182  // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on
184 
185  // get list of active detectors from SiStripDetCabling
186  std::vector<uint32_t> activeDets;
187  activeDets.clear(); // just in case
188  SiStripDetCabling_->addActiveDetectorsRawIds(activeDets);
189 
190  SiStripSubStructure substructure;
191 
192  // remove any eventual zero elements - there should be none, but just in case
193  for(std::vector<uint32_t>::iterator idets = activeDets.begin(); idets != activeDets.end(); idets++){
194  if(*idets == 0) activeDets.erase(idets);
195  }
196 
197  // create SiStripFolderOrganizer
199 
200  // Create TkHistoMap for Digi
201  if (digitkhistomapon) tkmapdigi = new TkHistoMap("SiStrip/TkHisto","TkHMap_NumberOfDigi",0.0,1);
202 
203  std::vector<uint32_t> tibDetIds;
204  // loop over detectors and book MEs
205  edm::LogInfo("SiStripTkDQM|SiStripMonitorDigi")<<"nr. of activeDets: "<<activeDets.size();
206  for(std::vector<uint32_t>::const_iterator detid_iterator = activeDets.begin(); detid_iterator!=activeDets.end(); detid_iterator++){
207 
208  uint32_t detid = (*detid_iterator);
209 
210  ModMEs local_modmes;
211  local_modmes.NumberOfDigis = 0;
212  local_modmes.NumberOfDigisPerStrip = 0;
213  local_modmes.ADCsHottestStrip = 0;
214  local_modmes.ADCsCoolestStrip = 0;
215  local_modmes.DigiADCs = 0;
216  local_modmes.StripOccupancy = 0;
217 
218  if (Mod_On_) {
219  // set appropriate folder using SiStripFolderOrganizer
220  folder_organizer.setDetectorFolder(detid); // pass the detid to this method
221  if (reset_each_run) ResetModuleMEs(detid);
222  createModuleMEs(local_modmes, detid);
223  // append to DigiMEs
224  DigiMEs.insert( std::make_pair(detid, local_modmes));
225  }
226 
227  // Create Layer Level MEs if they are not created already
228  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid);
229  SiStripHistoId hidmanager;
230  std::string label = hidmanager.getSubdetid(detid,false);
231 
232  // get detids for the layer
233  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
234  if(iLayerME==LayerMEsMap.end()) {
235  int32_t lnumber = det_layer_pair.second;
236  std::vector<uint32_t> layerDetIds;
237  if (det_layer_pair.first == "TIB") {
238  substructure.getTIBDetectors(activeDets,layerDetIds,lnumber,0,0,0);
239  } else if (det_layer_pair.first == "TOB") {
240  substructure.getTOBDetectors(activeDets,layerDetIds,lnumber,0,0);
241  } else if (det_layer_pair.first == "TID" && lnumber > 0) {
242  substructure.getTIDDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0);
243  } else if (det_layer_pair.first == "TID" && lnumber < 0) {
244  substructure.getTIDDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0);
245  } else if (det_layer_pair.first == "TEC" && lnumber > 0) {
246  substructure.getTECDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0,0,0);
247  } else if (det_layer_pair.first == "TEC" && lnumber < 0) {
248  substructure.getTECDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0,0,0);
249  }
250 
251  LayerDetMap[label] = layerDetIds;
252 
253  // book Layer plots
254  folder_organizer.setLayerFolder(detid,det_layer_pair.second);
255  createLayerMEs(label, layerDetIds.size());
256  }
257 
258  // book sub-detector plots
259  std::pair<std::string,std::string> sdet_pair = folder_organizer.getSubDetFolderAndTag(detid);
260  if (SubDetMEsMap.find(sdet_pair.second) == SubDetMEsMap.end()){
261  dqmStore_->setCurrentFolder(sdet_pair.first);
262  createSubDetMEs(sdet_pair.second);
263  }
264 
265  }//end of loop over detectors
266  //
267  // Book new histogram to monitor digi in last LS
268  //
271  std::stringstream ss;
272  folder_organizer.getLayerFolderName(ss, 0);
273  dqmStore_->setCurrentFolder(ss.str().c_str());
275  const char* HistoName = "NumberOfDigisInLastLS";
277  6,0.5,6.5,
278  100, 0., 10000., "" );
279  digiFailureMEs.SubDetTotDigiProfLS->setBinLabel(1, std::string("TECB"));
280  digiFailureMEs.SubDetTotDigiProfLS->setBinLabel(2, std::string("TECF"));
281  digiFailureMEs.SubDetTotDigiProfLS->setBinLabel(3, std::string("TIB"));
282  digiFailureMEs.SubDetTotDigiProfLS->setBinLabel(4, std::string("TIDB"));
283  digiFailureMEs.SubDetTotDigiProfLS->setBinLabel(5, std::string("TIDF"));
284  digiFailureMEs.SubDetTotDigiProfLS->setBinLabel(6, std::string("TOB"));
285  }
286 
288  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TotalNumberOfDigisFailure");
289  std::string HistoName = "DataPresentInLastLS";
290  digiFailureMEs.SubDetDigiFailures = dqmStore_->book2D(HistoName,HistoName,
291  Parameters.getParameter<int32_t>("Nbins"),
292  Parameters.getParameter<double>("xmin"),
293  Parameters.getParameter<double>("xmax"),
294  Parameters.getParameter<int32_t>("Nbinsy"),
295  Parameters.getParameter<double>("ymin"),
296  Parameters.getParameter<double>("ymax"));
297  digiFailureMEs.SubDetDigiFailures->setBinLabel(1, std::string("TECB"));
298  digiFailureMEs.SubDetDigiFailures->setBinLabel(2, std::string("TECF"));
299  digiFailureMEs.SubDetDigiFailures->setBinLabel(3, std::string("TIB"));
300  digiFailureMEs.SubDetDigiFailures->setBinLabel(4, std::string("TIDB"));
301  digiFailureMEs.SubDetDigiFailures->setBinLabel(5, std::string("TIDF"));
302  digiFailureMEs.SubDetDigiFailures->setBinLabel(6, std::string("TOB"));
303  }
304  }//end of if
305 
306 }//end of method
307 
308 //--------------------------------------------------------------------------------------------
310 
311  // Filter out events if DCS Event if requested
312  if (dcsStatus_ && !dcsStatus_->getStatus(iEvent, iSetup)) return;
313 
314  runNb = iEvent.id().run();
315  eventNb++;
316  float iOrbitSec = iEvent.orbitNumber()/11223.0;
317 
318  digi_detset_handles.clear();
319  for(std::vector<edm::InputTag>::iterator itDigiProducerList = digiProducerList.begin();
320  itDigiProducerList != digiProducerList.end(); ++itDigiProducerList ) {
321 
323 
324  iEvent.getByLabel((*itDigiProducerList),digi_handle);
325  if (digi_handle.isValid()) digi_detset_handles.push_back(digi_handle.product());
326  }
327 
328  // initialise # of clusters to zero
329  for (std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.begin();
330  iSubdet != SubDetMEsMap.end(); iSubdet++) {
331  iSubdet->second.totNDigis = 0;
332  }
333 
334  for (std::map<std::string, std::vector< uint32_t > >::const_iterator iterLayer = LayerDetMap.begin();
335  iterLayer != LayerDetMap.end(); iterLayer++) {
336 
337  std::string layer_label = iterLayer->first;
338  std::vector< uint32_t > layer_dets = iterLayer->second;
339  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(layer_label);
340 
341  //get Layer MEs
342  LayerMEs local_layermes;
343  if(iLayerME == LayerMEsMap.end()) continue;
344  else local_layermes = iLayerME->second;
345  int largest_adc_layer= 0;
346  int smallest_adc_layer= 99999;
347  int ndigi_layer = 0;
348 
349  uint16_t iDet = 0;
350  std::string subdet_label = "";
351  // loop over all modules in the layer
352  for (std::vector< uint32_t >::const_iterator iterDets = layer_dets.begin() ;
353  iterDets != layer_dets.end() ; iterDets++) {
354  iDet++;
355  // detid and type of ME
356  uint32_t detid = (*iterDets);
357 
358  // Get SubDet label once
359  if (subdet_label.size() == 0) subdet_label = folder_organizer.getSubDetFolderAndTag(detid).second;
360 
361  // DetId and corresponding set of MEs
362  std::map<uint32_t, ModMEs >::iterator pos = DigiMEs.find(detid);
363  ModMEs local_modmes = pos->second;
364 
365  // search digis of detid
366  int loc = getDigiSourceIndex(detid);
367 
368  int ndigi_det = 0;
369  if (loc > -1) ndigi_det = (*(digi_detset_handles[loc]))[detid].size();
370 
371 
372  // no digis for this detector module, so fill histogram with 0
373  if(Mod_On_ && moduleswitchnumdigison && (local_modmes.NumberOfDigis != NULL))
374  (local_modmes.NumberOfDigis)->Fill(ndigi_det);
375 
377  local_layermes.LayerNumberOfDigisProfile->Fill(iDet*1.0,ndigi_det);
378 
379  if (digitkhistomapon) tkmapdigi->fill(detid,ndigi_det);
380 
381  if (ndigi_det == 0) continue; // no digis for this detid => jump to next step of loop
382 
383  const edm::DetSet<SiStripDigi> & digi_detset = (*(digi_detset_handles[loc]))[detid];
384 
385  ndigi_layer += ndigi_det;
386  // ADCs
387  int largest_adc=(digi_detset.data.begin())->adc();
388  int smallest_adc=(digi_detset.data.begin())->adc();
389 
390 
391  // Check if these parameters are really needed
392  float det_occupancy = 0.0;
393 
394  for(edm::DetSet<SiStripDigi>::const_iterator digiIter = digi_detset.data.begin();
395  digiIter!= digi_detset.data.end(); digiIter++ ){
396 
397  int this_adc = digiIter->adc();
398  if (this_adc > 0.0) det_occupancy++;
399 
400  if(this_adc>largest_adc) largest_adc = this_adc;
401  if(this_adc<smallest_adc) smallest_adc = this_adc;
402 
403  if(Mod_On_ && moduleswitchnumdigispstripon && (local_modmes.NumberOfDigisPerStrip != NULL) && (this_adc > 0.0) )
404  (local_modmes.NumberOfDigisPerStrip)->Fill(digiIter->strip());
405 
406  if(Mod_On_ && moduleswitchdigiadcson && (local_modmes.DigiADCs != NULL) )
407  (local_modmes.DigiADCs)->Fill(static_cast<float>(this_adc));
408 
409  //Fill #ADCs for this digi at layer level
411  fillME(local_layermes.LayerDigiADCs , this_adc);
412  if (createTrendMEs) fillTrend(local_layermes.LayerDigiADCsTrend, this_adc, iOrbitSec);
413  }
414 
416  local_layermes.LayerDigiADCProfile->Fill(iDet*1.0,this_adc);
417 
418  }//end of loop over digis in this det
419 
420  // Occupancy
421  short nstrips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128;
422  if (nstrips > 0 && det_occupancy > 0 ) {
423  det_occupancy = det_occupancy/nstrips;
424  if (Mod_On_ && moduleswitchstripoccupancyon && (local_modmes.StripOccupancy != NULL))
425  (local_modmes.StripOccupancy)->Fill(det_occupancy);
427  fillME(local_layermes.LayerStripOccupancy, det_occupancy);
428  if (createTrendMEs) fillTrend(local_layermes.LayerStripOccupancyTrend, det_occupancy, iOrbitSec);
429  }
430  }
431 
432  if (largest_adc > largest_adc_layer) largest_adc_layer = largest_adc;
433  if (smallest_adc < smallest_adc_layer) smallest_adc_layer = smallest_adc;
434 
435  // nr. of adcs for hottest strip
436  if( Mod_On_ && moduleswitchadchotteston && (local_modmes.ADCsHottestStrip != NULL))
437  (local_modmes.ADCsHottestStrip)->Fill(static_cast<float>(largest_adc));
438 
439  // nr. of adcs for coolest strip
440  if(Mod_On_ && moduleswitchadccooleston && (local_modmes.ADCsCoolestStrip != NULL))
441  (local_modmes.ADCsCoolestStrip)->Fill(static_cast<float>(smallest_adc));
442 
443  }//end of loop over DetIds
444 
446  fillME(local_layermes.LayerNumberOfDigis,ndigi_layer);
447  if (createTrendMEs) fillTrend(local_layermes.LayerNumberOfDigisTrend, ndigi_layer, iOrbitSec);
448  }
450  fillME(local_layermes.LayerADCsHottestStrip,largest_adc_layer);
451  if (createTrendMEs) fillTrend(local_layermes.LayerADCsHottestStripTrend, largest_adc_layer, iOrbitSec);
452  }
454  fillME(local_layermes.LayerADCsCoolestStrip ,smallest_adc_layer);
455  if (createTrendMEs) fillTrend(local_layermes.LayerADCsCoolestStripTrend, smallest_adc_layer, iOrbitSec);
456  }
457  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
458  if(iSubdet != SubDetMEsMap.end()) iSubdet->second.totNDigis += ndigi_layer;
459  }
460 
461  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
462  it != SubDetMEsMap.end(); it++) {
464  if (strcmp(it->first.c_str(),"TEC__side__1")==0){
465  digiFailureMEs.SubDetTotDigiProfLS->Fill(1, it->second.totNDigis);
466  }else if (strcmp(it->first.c_str(),"TEC__side__2")==0){
467  digiFailureMEs.SubDetTotDigiProfLS->Fill(2, it->second.totNDigis);
468  }else if (strcmp(it->first.c_str(),"TIB")==0){
469  digiFailureMEs.SubDetTotDigiProfLS->Fill(3, it->second.totNDigis);
470  }else if (strcmp(it->first.c_str(),"TID__side__1")==0){
471  digiFailureMEs.SubDetTotDigiProfLS->Fill(4, it->second.totNDigis);
472  }else if (strcmp(it->first.c_str(),"TID__side__2")==0){
473  digiFailureMEs.SubDetTotDigiProfLS->Fill(5, it->second.totNDigis);
474  }else if (strcmp(it->first.c_str(),"TOB")==0){
475  digiFailureMEs.SubDetTotDigiProfLS->Fill(6, it->second.totNDigis);
476  }
477  }
478  }
479 
480  // get EventHistory
481  edm::Handle<EventWithHistory> event_history;
482  iEvent.getByLabel(historyProducer_,event_history);
483 
484  // get Phase of APV
485  edm::Handle<APVCyclePhaseCollection> apv_phase_collection;
486  iEvent.getByLabel(apvPhaseProducer_,apv_phase_collection);
487 
488  if (event_history.isValid()
489  && !event_history.failedToGet()
490  && apv_phase_collection.isValid()
491  && !apv_phase_collection.failedToGet()) {
492 
493 
494  long long tbx = event_history->absoluteBX();
495  float iOrbitSec = iEvent.orbitNumber()/11223.0;
496 
497  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
498  it != SubDetMEsMap.end(); it++) {
499 
500  SubDetMEs subdetmes;
501  std::string subdet = it->first;
502  subdetmes = it->second;
503 
504  int the_phase = APVCyclePhaseCollection::invalid;
505  long long tbx_corr = tbx;
506 
507  if (SubDetPhasePartMap.find(subdet) != SubDetPhasePartMap.end()) the_phase = apv_phase_collection->getPhase(SubDetPhasePartMap[subdet]);
508  if(the_phase==APVCyclePhaseCollection::nopartition ||
510  the_phase==APVCyclePhaseCollection::invalid) the_phase=30;
511  tbx_corr -= the_phase;
512 
513  if (subdetswitchtotdigiprofon)subdetmes.SubDetTotDigiProf->Fill(iOrbitSec,subdetmes.totNDigis);
514  if (subdetswitchapvcycleprofon)subdetmes.SubDetDigiApvProf->Fill(tbx_corr%70,subdetmes.totNDigis);
515  if (subdetswitchapvcycleth2on) subdetmes.SubDetDigiApvTH2->Fill(tbx_corr%70,subdetmes.totNDigis);
516  }
517  }
518 }//end of method analyze
519 //--------------------------------------------------------------------------------------------
521  bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
522  std::string outputFileName = conf_.getParameter<std::string>("OutputFileName");
523 
524  // save histograms in a file
525  if(outputMEsInRootFile) dqmStore_->save(outputFileName);
526 
527 }//end of method
528 //--------------------------------------------------------------------------------------------
530  std::map<uint32_t, ModMEs >::iterator pos = DigiMEs.find(idet);
531  ModMEs mod_me = pos->second;
532 
537  if(Mod_On_ && moduleswitchdigiadcson) mod_me.DigiADCs->Reset();
539 
540 }
541 //------------------------------------------------------------------------------------------
542 MonitorElement* SiStripMonitorDigi::bookMETrend(const char* ParameterSetLabel, const char* HistoName)
543 {
544  edm::ParameterSet ParametersTrend = conf_.getParameter<edm::ParameterSet>("Trending");
545  MonitorElement* me = dqmStore_->bookProfile(HistoName,HistoName,
546  ParametersTrend.getParameter<int32_t>("Nbins"),
547  // 0,
548  ParametersTrend.getParameter<double>("xmin"),
549  ParametersTrend.getParameter<double>("xmax"),
550  // ParametersTrend.getParameter<int32_t>("Nbins"),
551  100, //that parameter should not be there !?
552  ParametersTrend.getParameter<double>("ymin"),
553  ParametersTrend.getParameter<double>("ymax"),
554  "" );
555  if(!me) return me;
556 
557  me->setAxisTitle("Event Time in Seconds",1);
558  if (me->kind() == MonitorElement::DQM_KIND_TPROFILE) me->getTH1()->SetBit(TH1::kCanRebin);
559  return me;
560 }
561 
562 //------------------------------------------------------------------------------------------
563 MonitorElement* SiStripMonitorDigi::bookME1D(const char* ParameterSetLabel, const char* HistoName)
564 {
566  return dqmStore_->book1D(HistoName,HistoName,
567  Parameters.getParameter<int32_t>("Nbinx"),
568  Parameters.getParameter<double>("xmin"),
569  Parameters.getParameter<double>("xmax")
570  );
571 }
572 
573 //--------------------------------------------------------------------------------
574 void SiStripMonitorDigi::fillTrend(MonitorElement* me ,float value, float timeinorbit)
575 {
576  if(!me) return;
577  me->Fill(timeinorbit,value);
578 }
579 
580 //
581 // -- Create Module Level MEs
582 //
583 void SiStripMonitorDigi::createModuleMEs(ModMEs& mod_single, uint32_t detid) {
584 
585  // use SistripHistoId for producing histogram id (and title)
586  SiStripHistoId hidmanager;
587  std::string hid;
588 
589  //nr. of digis per module
591  hid = hidmanager.createHistoId("NumberOfDigis","det",detid);
592  mod_single.NumberOfDigis = dqmStore_->book1D(hid, hid, 21, -0.5, 20.5);
593  dqmStore_->tag(mod_single.NumberOfDigis, detid);
594  mod_single.NumberOfDigis->setAxisTitle("number of digis in one detector module");
595  mod_single.NumberOfDigis->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
596  }
597 
598  //nr. of digis per strip in module
600  hid = hidmanager.createHistoId("NumberOfDigisPerStrip","det",detid);
601  short nstrips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128;
602  mod_single.NumberOfDigisPerStrip = dqmStore_->book1D(hid, hid, nstrips, -0.5, nstrips+0.5);
603  dqmStore_->tag(mod_single.NumberOfDigisPerStrip, detid);
604  mod_single.NumberOfDigisPerStrip->setAxisTitle("number of (digis > 0) per strip");
605  mod_single.NumberOfDigisPerStrip->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
606  }
607  //#ADCs for hottest strip
609  hid = hidmanager.createHistoId("ADCsHottestStrip","det",detid);
610  mod_single.ADCsHottestStrip = bookME1D("TH1ADCsHottestStrip", hid.c_str());
611  dqmStore_->tag(mod_single.ADCsHottestStrip, detid); // 6 APVs -> 768 strips
612  mod_single.ADCsHottestStrip->setAxisTitle("number of ADCs for hottest strip");
613  }
614 
615  //#ADCs for coolest strip
617  hid = hidmanager.createHistoId("ADCsCoolestStrip","det",detid);
618  mod_single.ADCsCoolestStrip = bookME1D("TH1ADCsCoolestStrip", hid.c_str());
619  dqmStore_->tag(mod_single.ADCsCoolestStrip, detid);
620  mod_single.ADCsCoolestStrip->setAxisTitle("number of ADCs for coolest strip");
621  }
622 
623  //#ADCs for each digi
625  hid = hidmanager.createHistoId("DigiADCs","det",detid);
626  mod_single.DigiADCs = bookME1D("TH1DigiADCs", hid.c_str());
627  dqmStore_->tag(mod_single.DigiADCs, detid);
628  mod_single.DigiADCs->setAxisTitle("number of ADCs for each digi");
629  }
630 
631  //Strip occupancy
633  hid = hidmanager.createHistoId("StripOccupancy","det",detid);
634  mod_single.StripOccupancy = bookME1D("TH1StripOccupancy", hid.c_str());
635  dqmStore_->tag(mod_single.StripOccupancy, detid);
636  mod_single.StripOccupancy->setAxisTitle("strip occupancy");
637  }
638 
639 }
640 
641 //
642 // -- Create Module Level MEs
643 //
644 
645 void SiStripMonitorDigi::createLayerMEs(std::string label, int ndets) {
646 
647  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
648  if(iLayerME==LayerMEsMap.end()){
649  SiStripHistoId hidmanager;
650  LayerMEs layerMEs;
651  layerMEs.LayerNumberOfDigis = 0;
652  layerMEs.LayerNumberOfDigisTrend = 0;
653  layerMEs.LayerADCsHottestStrip = 0;
654  layerMEs.LayerADCsHottestStripTrend = 0;
655  layerMEs.LayerADCsCoolestStrip = 0;
656  layerMEs.LayerADCsCoolestStripTrend = 0;
657  layerMEs.LayerDigiADCs = 0;
658  layerMEs.LayerDigiADCsTrend = 0;
659  layerMEs.LayerStripOccupancy = 0;
660  layerMEs.LayerStripOccupancyTrend = 0;
661  layerMEs.LayerNumberOfDigisProfile = 0;
662  layerMEs.LayerDigiADCProfile = 0;
663 
664 
665  //#Digis
667  layerMEs.LayerNumberOfDigis=bookME1D("TH1NumberOfDigis", hidmanager.createHistoLayer("Summary_TotalNumberOfDigis","layer",label,"").c_str());
668  if (createTrendMEs) layerMEs.LayerNumberOfDigisTrend=bookMETrend("TH1NumberOfDigis", hidmanager.createHistoLayer("Trend_NumberOfDigis","layer",label,"").c_str());
669  }
670 
671  //#ADCs for hottest strip
673  layerMEs.LayerADCsHottestStrip=bookME1D("TH1ADCsHottestStrip", hidmanager.createHistoLayer("Summary_ADCsHottestStrip","layer",label,"").c_str());
674  if (createTrendMEs) layerMEs.LayerADCsHottestStripTrend=bookMETrend("TH1ADCsHottestStrip", hidmanager.createHistoLayer("Trend_ADCsHottestStrip","layer",label,"").c_str());
675  }
676 
677  //#ADCs for coolest strip
679  layerMEs.LayerADCsCoolestStrip=bookME1D("TH1ADCsCoolestStrip", hidmanager.createHistoLayer("Summary_ADCsCoolestStrip","layer",label,"").c_str());
680  if (createTrendMEs) layerMEs.LayerADCsCoolestStripTrend=bookMETrend("TH1ADCsCoolestStrip", hidmanager.createHistoLayer("Trend_ADCsCoolestStrip","layer",label,"").c_str());
681  }
682 
683  //#ADCs for each digi
685  layerMEs.LayerDigiADCs=bookME1D("TH1DigiADCs", hidmanager.createHistoLayer("Summary_DigiADCs","layer",label,"").c_str());
686  if (createTrendMEs) layerMEs.LayerDigiADCsTrend=bookMETrend("TH1DigiADCs", hidmanager.createHistoLayer("Trend_DigiADCs","layer",label,"").c_str());
687  }
688 
689  //Strip Occupancy
691  layerMEs.LayerStripOccupancy=bookME1D("TH1StripOccupancy", hidmanager.createHistoLayer("Summary_StripOccupancy","layer",label,"").c_str());
692  if (createTrendMEs) layerMEs.LayerStripOccupancyTrend=bookMETrend("TH1StripOccupancy", hidmanager.createHistoLayer("Trend_StripOccupancy","layer",label,"").c_str());
693 
694  }
695  // # of Digis
697  std::string hid = hidmanager.createHistoLayer("NumberOfDigiProfile","layer",label,"");
698  layerMEs.LayerNumberOfDigisProfile = dqmStore_->bookProfile(hid, hid, ndets, 0.5, ndets+0.5,21, -0.5, 200.5);
699  }
700 
701  // # of Digis
703  std::string hid = hidmanager.createHistoLayer("DigiADCProfile","layer",label,"");
704  layerMEs.LayerDigiADCProfile = dqmStore_->bookProfile(hid, hid, ndets, 0.5, ndets+0.5, 64, -0.5, 255.5);
705  }
706 
707  LayerMEsMap[label]=layerMEs;
708  }
709 }
710 //
711 // -- Create SubDetector MEs
712 //
714 
715  SubDetMEs subdetMEs;
716  subdetMEs.totNDigis = 0;
717  subdetMEs.SubDetTotDigiProf = 0;
718  subdetMEs.SubDetDigiApvProf = 0;
719  subdetMEs.SubDetDigiApvTH2 = 0;
720 
721  std::string HistoName;
722 
723  // Total Number of Digi - Profile
725  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfDigis");
726  HistoName = "TotalNumberOfDigiProfile__" + label;
727  subdetMEs.SubDetTotDigiProf=dqmStore_->bookProfile(HistoName,HistoName,
728  Parameters.getParameter<int32_t>("Nbins"),
729  Parameters.getParameter<double>("xmin"),
730  Parameters.getParameter<double>("xmax"),
731  100, //that parameter should not be there !?
732  Parameters.getParameter<double>("ymin"),
733  Parameters.getParameter<double>("ymax"),
734  "" );
735  subdetMEs.SubDetTotDigiProf->setAxisTitle("Event Time in Seconds",1);
736  if (subdetMEs.SubDetTotDigiProf->kind() == MonitorElement::DQM_KIND_TPROFILE) subdetMEs.SubDetTotDigiProf->getTH1()->SetBit(TH1::kCanRebin);
737  }
738 
739  // Number of Digi vs Bx - Profile
742  HistoName = "Digi_vs_ApvCycle__" + label;
743  subdetMEs.SubDetDigiApvProf=dqmStore_->bookProfile(HistoName,HistoName,
744  Parameters.getParameter<int32_t>("Nbins"),
745  Parameters.getParameter<double>("xmin"),
746  Parameters.getParameter<double>("xmax"),
747  200, //that parameter should not be there !?
748  Parameters.getParameter<double>("ymin"),
749  Parameters.getParameter<double>("ymax"),
750  "" );
751  subdetMEs.SubDetDigiApvProf->setAxisTitle("ApvCycle (Corrected Absolute Bx % 70)",1);
752  }
753 
754  // Number of Digi vs Bx - TH2
757  dqmStore_->setCurrentFolder("SiStrip/MechanicalView/"+label);
758  HistoName = "Digi_vs_ApvCycle_2D__" + label;
759  // Adjusting the scale for 2D histogram
760  double h2ymax = 9999.0;
761  double yfact = Parameters.getParameter<double>("yfactor");
762  if(label.find("TIB") != std::string::npos) h2ymax = (6984.*256.)*yfact;
763  else if (label.find("TID") != std::string::npos) h2ymax = (2208.*256.)*yfact;
764  else if (label.find("TOB") != std::string::npos) h2ymax = (12906.*256.)*yfact;
765  else if (label.find("TEC") != std::string::npos) h2ymax = (7552.*2.*256.)*yfact;
766  subdetMEs.SubDetDigiApvTH2=dqmStore_->book2D(HistoName,HistoName,
767  Parameters.getParameter<int32_t>("Nbins"),
768  Parameters.getParameter<double>("xmin"),
769  Parameters.getParameter<double>("xmax"),
770  Parameters.getParameter<int32_t>("Nbinsy"), //it was 100 that parameter should not be there !?
771  Parameters.getParameter<double>("ymin"),
772  h2ymax);
773  subdetMEs.SubDetDigiApvTH2->setAxisTitle("absolute Bx mod(70)",1);
774  }
775  SubDetMEsMap[label]=subdetMEs;
776 }
777 //
778 // -- Get DetSet vector for a given Detector
779 //
781  int location = -1;
782  for (unsigned int ival = 0; ival < digi_detset_handles.size(); ++ival){
784  if(isearch != digi_detset_handles[ival]->end()) {
785  location = ival;
786  break;
787  }
788  }
789  return location;
790 }
791 //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
std::map< std::string, LayerMEs > LayerMEsMap
const std::string & label
Definition: MVAComputer.cc:186
MonitorElement * LayerNumberOfDigisTrend
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:514
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * LayerStripOccupancy
MonitorElement * LayerADCsHottestStrip
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Definition: DQMStore.cc:1898
edm::InputTag historyProducer_
void createModuleMEs(ModMEs &mod_single, uint32_t detid)
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)
#define abs(x)
Definition: mlp_lapack.h:159
std::map< uint32_t, ModMEs > DigiMEs
#define NULL
Definition: scimark2.h:8
std::map< std::string, std::string > SubDetPhasePartMap
MonitorElement * LayerNumberOfDigisProfile
void Fill(long long x)
virtual void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &)
void tag(MonitorElement *me, unsigned int myTag)
Definition: DQMStore.cc:1151
unsigned long long m_cacheID_
bool getStatus(edm::Event const &e, edm::EventSetup const &eSetup)
MonitorElement * NumberOfDigisPerStrip
int iEvent
Definition: GenABIO.cc:243
std::string getSubdetid(uint32_t id, bool flag_ring)
MonitorElement * ADCsCoolestStrip
std::pair< std::string, std::string > getSubDetFolderAndTag(const uint32_t &detid)
SiStripDCSStatus * dcsStatus_
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)
DigiFailureMEs digiFailureMEs
void fill(uint32_t &detid, float value)
Definition: TkHistoMap.cc:130
void fillME(MonitorElement *ME, float value1)
std::vector< const edm::DetSetVector< SiStripDigi > * > digi_detset_handles
void createLayerMEs(std::string label, int ndet)
void getLayerFolderName(std::stringstream &ss, uint32_t rawdetid, bool ring_flag=0)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
TH1 * getTH1(void) const
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:828
#define end
Definition: vmac.h:38
int orbitNumber() const
Definition: EventBase.h:63
Kind kind(void) const
Get the type of the monitor element.
void setDetectorFolder(uint32_t rawdetid=0)
std::map< std::string, SubDetMEs > SubDetMEsMap
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1265
MonitorElement * ADCsHottestStrip
bool isValid() const
Definition: HandleBase.h:76
vector< ParameterSet > Parameters
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
void fillTrend(MonitorElement *me, float value, float timeinorbit)
MonitorElement * LayerDigiADCProfile
bool failedToGet() const
Definition: HandleBase.h:80
int getDigiSourceIndex(uint32_t id)
SiStripMonitorDigi(const edm::ParameterSet &)
edm::InputTag apvPhaseProducer_
std::map< std::string, std::vector< uint32_t > > LayerDetMap
std::string createHistoId(std::string description, std::string id_type, uint32_t component_id)
const T & get() const
Definition: EventSetup.h:55
LuminosityBlockNumber_t luminosityBlock() const
T const * product() const
Definition: Handle.h:74
edm::ParameterSet conf_
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
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:77
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
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, bool ring_flag=0)
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
void createMEs(const edm::EventSetup &es)
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:32
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:642
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:106
void setLayerFolder(uint32_t rawdetid=0, int32_t layer=0, bool ring_flag=0)
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)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
Definition: Run.h:32
MonitorElement * bookME1D(const char *ParameterSetLabel, const char *HistoName)