CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripMonitorCluster.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // Package: SiStripMonitorCluster
3 // Class: SiStripMonitorCluster
6 // Original Author: Dorian Kcira
7 // Created: Wed Feb 1 16:42:34 CET 2006
8 // $Id: SiStripMonitorCluster.cc,v 1.76 2011/05/22 17:40:22 borrell Exp $
9 #include <vector>
10 #include <numeric>
11 #include <fstream>
12 #include <math.h>
13 #include "TNamed.h"
16 
40 
43 
44 
45 #include "TMath.h"
46 #include <iostream>
47 
48 //--------------------------------------------------------------------------------------------
49 SiStripMonitorCluster::SiStripMonitorCluster(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(false), reset_each_run(false), m_cacheID_(0)
50 {
51 
52  firstEvent = -1;
53  eventNb = 0;
54 
55  // Detector Partitions
56  SubDetPhasePartMap["TIB"] = "TI";
57  SubDetPhasePartMap["TID__side__1"] = "TI";
58  SubDetPhasePartMap["TID__side__2"] = "TI";
59  SubDetPhasePartMap["TOB"] = "TO";
60  SubDetPhasePartMap["TEC__side__1"] = "TM";
61  SubDetPhasePartMap["TEC__side__2"] = "TP";
62 
63  //get on/off option for every cluster from cfi
64  edm::ParameterSet ParametersnClusters = conf_.getParameter<edm::ParameterSet>("TH1nClusters");
65  layerswitchncluson = ParametersnClusters.getParameter<bool>("layerswitchon");
66  moduleswitchncluson = ParametersnClusters.getParameter<bool>("moduleswitchon");
67 
68  edm::ParameterSet ParametersClusterCharge = conf_.getParameter<edm::ParameterSet>("TH1ClusterCharge");
69  layerswitchcluschargeon = ParametersClusterCharge.getParameter<bool>("layerswitchon");
70  moduleswitchcluschargeon = ParametersClusterCharge.getParameter<bool>("moduleswitchon");
71 
72  edm::ParameterSet ParametersClusterStoN = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoN");
73  layerswitchclusstonon = ParametersClusterStoN.getParameter<bool>("layerswitchon");
74  moduleswitchclusstonon = ParametersClusterStoN.getParameter<bool>("moduleswitchon");
75 
76  edm::ParameterSet ParametersClusterStoNVsPos = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoNVsPos");
77  layerswitchclusstonVsposon = ParametersClusterStoNVsPos.getParameter<bool>("layerswitchon");
78  moduleswitchclusstonVsposon = ParametersClusterStoNVsPos.getParameter<bool>("moduleswitchon");
79 
80  edm::ParameterSet ParametersClusterPos = conf_.getParameter<edm::ParameterSet>("TH1ClusterPos");
81  layerswitchclusposon = ParametersClusterPos.getParameter<bool>("layerswitchon");
82  moduleswitchclusposon = ParametersClusterPos.getParameter<bool>("moduleswitchon");
83 
84  edm::ParameterSet ParametersClusterDigiPos = conf_.getParameter<edm::ParameterSet>("TH1ClusterDigiPos");
85  layerswitchclusdigiposon = ParametersClusterDigiPos.getParameter<bool>("layerswitchon");
86  moduleswitchclusdigiposon = ParametersClusterDigiPos.getParameter<bool>("moduleswitchon");
87 
88  edm::ParameterSet ParametersClusterNoise = conf_.getParameter<edm::ParameterSet>("TH1ClusterNoise");
89  layerswitchclusnoiseon = ParametersClusterNoise.getParameter<bool>("layerswitchon");
90  moduleswitchclusnoiseon = ParametersClusterNoise.getParameter<bool>("moduleswitchon");
91 
92  edm::ParameterSet ParametersClusterWidth = conf_.getParameter<edm::ParameterSet>("TH1ClusterWidth");
93  layerswitchcluswidthon = ParametersClusterWidth.getParameter<bool>("layerswitchon");
94  moduleswitchcluswidthon = ParametersClusterWidth.getParameter<bool>("moduleswitchon");
95 
96  edm::ParameterSet ParametersModuleLocalOccupancy = conf_.getParameter<edm::ParameterSet>("TH1ModuleLocalOccupancy");
97  layerswitchlocaloccupancy = ParametersModuleLocalOccupancy.getParameter<bool>("layerswitchon");
98  moduleswitchlocaloccupancy = ParametersModuleLocalOccupancy.getParameter<bool>("moduleswitchon");
99 
100  edm::ParameterSet ParametersNrOfClusterizedStrips = conf_.getParameter<edm::ParameterSet>("TH1NrOfClusterizedStrips");
101  layerswitchnrclusterizedstrip = ParametersNrOfClusterizedStrips.getParameter<bool>("layerswitchon");
102  moduleswitchnrclusterizedstrip = ParametersNrOfClusterizedStrips.getParameter<bool>("moduleswitchon");
103 
104  edm::ParameterSet ParametersClusterProf = conf_.getParameter<edm::ParameterSet>("TProfNumberOfCluster");
105  layerswitchnumclusterprofon = ParametersClusterProf.getParameter<bool>("layerswitchon");
106 
107  edm::ParameterSet ParametersClusterWidthProf = conf_.getParameter<edm::ParameterSet>("TProfClusterWidth");
108  layerswitchclusterwidthprofon = ParametersClusterWidthProf.getParameter<bool>("layerswitchon");
109 
110  edm::ParameterSet ParametersTotClusterProf = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfClusters");
111  subdetswitchtotclusprofon = ParametersTotClusterProf.getParameter<bool>("subdetswitchon");
112 
113  edm::ParameterSet ParametersTotClusterTH1 = conf_.getParameter<edm::ParameterSet>("TH1TotalNumberOfClusters");
114  subdetswitchtotclusth1on = ParametersTotClusterTH1.getParameter<bool>("subdetswitchon");
115 
116  edm::ParameterSet ParametersClusterApvProf = conf_.getParameter<edm::ParameterSet>("TProfClustersApvCycle");
117  subdetswitchapvcycleprofon = ParametersClusterApvProf.getParameter<bool>("subdetswitchon");
118 
119  edm::ParameterSet ParametersClustersApvTH2 = conf_.getParameter<edm::ParameterSet>("TH2ClustersApvCycle");
120  subdetswitchapvcycleth2on = ParametersClustersApvTH2.getParameter<bool>("subdetswitchon");
121 
122  edm::ParameterSet ParametersApvCycleDBxProf2 = conf_.getParameter<edm::ParameterSet>("TProf2ApvCycleVsDBx");
123  subdetswitchapvcycledbxprof2on = ParametersApvCycleDBxProf2.getParameter<bool>("subdetswitchon");
124 
125  edm::ParameterSet ParametersDBxCycleProf = conf_.getParameter<edm::ParameterSet>("TProfClustersVsDBxCycle");
126  subdetswitchdbxcycleprofon = ParametersDBxCycleProf.getParameter<bool>("subdetswitchon");
127 
128  edm::ParameterSet ParametersCStripVsCPix = conf_.getParameter<edm::ParameterSet>("TH2CStripVsCpixel");
129  globalswitchcstripvscpix = ParametersCStripVsCPix.getParameter<bool>("globalswitchon");
130 
131  edm::ParameterSet ParametersMultiplicityRegionsTH1 = conf_.getParameter<edm::ParameterSet>("TH1MultiplicityRegions");
132  globalswitchMultiRegions = ParametersMultiplicityRegionsTH1.getParameter<bool>("globalswitchon");
133 
134  edm::ParameterSet ParametersApvCycleVsDBxGlobalTH2 = conf_.getParameter<edm::ParameterSet>("TH2ApvCycleVsDBxGlobal");
135  globalswitchapvcycledbxth2on = ParametersApvCycleVsDBxGlobalTH2.getParameter<bool>("globalswitchon");
136 
137  edm::ParameterSet ParametersNoiseStrip2ApvCycle = conf_.getParameter<edm::ParameterSet>("TH1StripNoise2ApvCycle");
138  globalswitchstripnoise2apvcycle = ParametersNoiseStrip2ApvCycle.getParameter<bool>("globalswitchon");
139 
140  edm::ParameterSet ParametersNoiseStrip3ApvCycle = conf_.getParameter<edm::ParameterSet>("TH1StripNoise3ApvCycle");
141  globalswitchstripnoise3apvcycle = ParametersNoiseStrip3ApvCycle.getParameter<bool>("globalswitchon");
142 
143  edm::ParameterSet ClusterMultiplicityRegions = conf_.getParameter<edm::ParameterSet>("MultiplicityRegions");
144  k0 = ClusterMultiplicityRegions.getParameter<double>("k0");
145  q0 = ClusterMultiplicityRegions.getParameter<double>("q0");
146  dk0 = ClusterMultiplicityRegions.getParameter<double>("dk0");
147  maxClus = ClusterMultiplicityRegions.getParameter<double>("MaxClus");
148  minPix = ClusterMultiplicityRegions.getParameter<double>("MinPix");
149 
150  clustertkhistomapon = conf_.getParameter<bool>("TkHistoMap_On");
151  createTrendMEs = conf_.getParameter<bool>("CreateTrendMEs");
152  Mod_On_ = conf_.getParameter<bool>("Mod_On");
153 
154  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
155 
156 
157  // Poducer name of input StripClusterCollection
158  clusterProducerStrip_ = conf_.getParameter<edm::InputTag>("ClusterProducerStrip");
159  clusterProducerPix_ = conf_.getParameter<edm::InputTag>("ClusterProducerPix");
160  // SiStrip Quality Label
161  qualityLabel_ = conf_.getParameter<std::string>("StripQualityLabel");
162  // cluster quality conditions
163  edm::ParameterSet cluster_condition = conf_.getParameter<edm::ParameterSet>("ClusterConditions");
164  applyClusterQuality_ = cluster_condition.getParameter<bool>("On");
165  sToNLowerLimit_ = cluster_condition.getParameter<double>("minStoN");
166  sToNUpperLimit_ = cluster_condition.getParameter<double>("maxStoN");
167  widthLowerLimit_ = cluster_condition.getParameter<double>("minWidth");
168  widthUpperLimit_ = cluster_condition.getParameter<double>("maxWidth");
169 
170  // Event History Producer
171  historyProducer_ = conf_.getParameter<edm::InputTag>("HistoryProducer");
172  // Apv Phase Producer
173  apvPhaseProducer_ = conf_.getParameter<edm::InputTag>("ApvPhaseProducer");
174 
175  // Create DCS Status
176  bool checkDCS = conf_.getParameter<bool>("UseDCSFiltering");
177  if (checkDCS) dcsStatus_ = new SiStripDCSStatus();
178  else dcsStatus_ = 0;
179 
180 }
181 
183  if (dcsStatus_) delete dcsStatus_;
184 }
185 
186 //--------------------------------------------------------------------------------------------
188 
190  unsigned long long cacheID = es.get<SiStripDetCablingRcd>().cacheIdentifier();
191  if (m_cacheID_ != cacheID) {
192  m_cacheID_ = cacheID;
193  edm::LogInfo("SiStripMonitorCluster") <<"SiStripMonitorCluster::beginRun: "
194  << " Creating MEs for new Cabling ";
195 
196  createMEs(es);
197  }
198  } else if (reset_each_run) {
199  edm::LogInfo("SiStripMonitorCluster") <<"SiStripMonitorCluster::beginRun: "
200  << " Resetting MEs ";
201  for (std::map<uint32_t, ModMEs >::const_iterator idet = ModuleMEsMap.begin() ; idet!=ModuleMEsMap.end() ; idet++) {
202  ResetModuleMEs(idet->first);
203  }
204  }
205 }
206 
207 //--------------------------------------------------------------------------------------------
209 
211  // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on
213 
214  // get list of active detectors from SiStripDetCabling
215  std::vector<uint32_t> activeDets;
216  SiStripDetCabling_->addActiveDetectorsRawIds(activeDets);
217 
218  SiStripSubStructure substructure;
219 
220  SiStripFolderOrganizer folder_organizer;
221  folder_organizer.setSiStripFolderName(topFolderName_);
222  folder_organizer.setSiStripFolder();
223 
224 
225  // Create TkHistoMap for Cluster
226  if (clustertkhistomapon) {
227  if (topFolderName_ == "SiStrip") tkmapcluster = new TkHistoMap("SiStrip/TkHistoMap","TkHMap_NumberOfCluster",0.,1);
228  else tkmapcluster = new TkHistoMap(topFolderName_+"/TkHistoMap","TkHMap_NumberOfCluster",0.,0);
229  }
230 
231  // loop over detectors and book MEs
232  edm::LogInfo("SiStripTkDQM|SiStripMonitorCluster")<<"nr. of activeDets: "<<activeDets.size();
233  for(std::vector<uint32_t>::iterator detid_iterator = activeDets.begin(); detid_iterator!=activeDets.end(); detid_iterator++){
234  uint32_t detid = (*detid_iterator);
235  // remove any eventual zero elements - there should be none, but just in case
236  if(detid == 0) {
237  activeDets.erase(detid_iterator);
238  continue;
239  }
240 
241  if (Mod_On_) {
242  ModMEs mod_single;
243  mod_single.NumberOfClusters = 0;
244  mod_single.ClusterPosition = 0;
245  mod_single.ClusterDigiPosition = 0;
246  mod_single.ClusterWidth = 0;
247  mod_single.ClusterCharge = 0;
248  mod_single.ClusterNoise = 0;
249  mod_single.ClusterSignalOverNoise = 0;
250  mod_single.ClusterSignalOverNoiseVsPos = 0;
251  mod_single.ModuleLocalOccupancy = 0;
252  mod_single.NrOfClusterizedStrips = 0;
253 
254  // set appropriate folder using SiStripFolderOrganizer
255  folder_organizer.setDetectorFolder(detid); // pass the detid to this method
256  if (reset_each_run) ResetModuleMEs(detid);
257  createModuleMEs(mod_single, detid);
258  // append to ModuleMEsMap
259  ModuleMEsMap.insert( std::make_pair(detid, mod_single));
260  }
261 
262  // Create Layer Level MEs if they are not created already
263  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid);
264  SiStripHistoId hidmanager;
265  std::string label = hidmanager.getSubdetid(detid,false);
266 
267  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
268  if(iLayerME==LayerMEsMap.end()) {
269 
270  // get detids for the layer
271  int32_t lnumber = det_layer_pair.second;
272  std::vector<uint32_t> layerDetIds;
273  if (det_layer_pair.first == "TIB") {
274  substructure.getTIBDetectors(activeDets,layerDetIds,lnumber,0,0,0);
275  } else if (det_layer_pair.first == "TOB") {
276  substructure.getTOBDetectors(activeDets,layerDetIds,lnumber,0,0);
277  } else if (det_layer_pair.first == "TID" && lnumber > 0) {
278  substructure.getTIDDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0);
279  } else if (det_layer_pair.first == "TID" && lnumber < 0) {
280  substructure.getTIDDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0);
281  } else if (det_layer_pair.first == "TEC" && lnumber > 0) {
282  substructure.getTECDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0,0,0);
283  } else if (det_layer_pair.first == "TEC" && lnumber < 0) {
284  substructure.getTECDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0,0,0);
285  }
286  LayerDetMap[label] = layerDetIds;
287 
288  // book Layer MEs
289  folder_organizer.setLayerFolder(detid,det_layer_pair.second);
290  createLayerMEs(label, layerDetIds.size());
291  }
292  // book sub-detector plots
293  std::pair<std::string,std::string> sdet_pair = folder_organizer.getSubDetFolderAndTag(detid);
294  if (SubDetMEsMap.find(sdet_pair.second) == SubDetMEsMap.end()){
295  dqmStore_->setCurrentFolder(sdet_pair.first);
296  createSubDetMEs(sdet_pair.second);
297  }
298  }//end of loop over detectors
299 
300  // Create Global Histogram
302  dqmStore_->setCurrentFolder(topFolderName_+"/MechanicalView/");
303  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH2ApvCycleVsDBxGlobal");
304  std::string HistoName = "DeltaBx_vs_ApvCycle";
305  GlobalApvCycleDBxTH2 = dqmStore_->book2D(HistoName,HistoName,
306  GlobalTH2Parameters.getParameter<int32_t>("Nbinsx"),
307  GlobalTH2Parameters.getParameter<double>("xmin"),
308  GlobalTH2Parameters.getParameter<double>("xmax"),
309  GlobalTH2Parameters.getParameter<int32_t>("Nbinsy"),
310  GlobalTH2Parameters.getParameter<double>("ymin"),
311  GlobalTH2Parameters.getParameter<double>("ymax"));
312  GlobalApvCycleDBxTH2->setAxisTitle("APV Cycle (Corrected Absolute Bx % 70)",1);
313  GlobalApvCycleDBxTH2->setAxisTitle("Delta Bunch Crossing Cycle",2);
314  }
315 
317  dqmStore_->setCurrentFolder(topFolderName_+"/MechanicalView/");
318  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH2CStripVsCpixel");
319  std::string HistoName = "StripClusVsPixClus";
320  GlobalCStripVsCpix = dqmStore_->book2D(HistoName,HistoName,
321  GlobalTH2Parameters.getParameter<int32_t>("Nbinsx"),
322  GlobalTH2Parameters.getParameter<double>("xmin"),
323  GlobalTH2Parameters.getParameter<double>("xmax"),
324  GlobalTH2Parameters.getParameter<int32_t>("Nbinsy"),
325  GlobalTH2Parameters.getParameter<double>("ymin"),
326  GlobalTH2Parameters.getParameter<double>("ymax"));
327  GlobalCStripVsCpix->setAxisTitle("Strip Clusters",1);
328  GlobalCStripVsCpix->setAxisTitle("Pix Clusters",2);
329  }
330 
332  dqmStore_->setCurrentFolder(topFolderName_+"/MechanicalView/");
333  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH1MultiplicityRegions");
334  std::string HistoName = "ClusterMultiplicityRegions";
335  PixVsStripMultiplicityRegions = dqmStore_->book1D(HistoName,HistoName,
336  GlobalTH2Parameters.getParameter<int32_t>("Nbinx"),
337  GlobalTH2Parameters.getParameter<double>("xmin"),
338  GlobalTH2Parameters.getParameter<double>("xmax"));
340  PixVsStripMultiplicityRegions->setBinLabel(1,"Main Diagonal");
341  PixVsStripMultiplicityRegions->setBinLabel(2,"Strip Noise");
342  PixVsStripMultiplicityRegions->setBinLabel(3,"High Strip Noise");
343  PixVsStripMultiplicityRegions->setBinLabel(4,"Beam Background");
344  PixVsStripMultiplicityRegions->setBinLabel(5,"No Strip Clusters");
345 
346  }
347 
349  dqmStore_->setCurrentFolder(topFolderName_+"/MechanicalView/");
350  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1StripNoise2ApvCycle");
351  std::string HistoName = "StripNoise_ApvCycle";
352  StripNoise2Cycle = dqmStore_->book1D(HistoName,HistoName,
353  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
354  GlobalTH1Parameters.getParameter<double>("xmin"),
355  GlobalTH1Parameters.getParameter<double>("xmax"));
356  StripNoise2Cycle->setAxisTitle("APV Cycle");
357  }
359  dqmStore_->setCurrentFolder(topFolderName_+"/MechanicalView/");
360  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1StripNoise3ApvCycle");
361  std::string HistoName = "HighStripNoise_ApvCycle";
362  StripNoise3Cycle = dqmStore_->book1D(HistoName,HistoName,
363  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
364  GlobalTH1Parameters.getParameter<double>("xmin"),
365  GlobalTH1Parameters.getParameter<double>("xmax"));
366  StripNoise3Cycle->setAxisTitle("APV Cycle");
367  }
368 
369 
370  }//end of if
371 }//end of method
372 
373 //--------------------------------------------------------------------------------------------
375 {
376  // Filter out events if DCS Event if requested
377  if (dcsStatus_ && !dcsStatus_->getStatus(iEvent,iSetup)) return;
378 
379  runNb = iEvent.id().run();
380  eventNb++;
381  float iOrbitSec = iEvent.orbitNumber()/11223.0;
382 
383  int NPixClusters=0, NStripClusters=0, MultiplicityRegion=0;
384  bool isPixValid=false;
385 
386  edm::ESHandle<SiStripNoises> noiseHandle;
387  iSetup.get<SiStripNoisesRcd>().get(noiseHandle);
388 
389  edm::ESHandle<SiStripGain> gainHandle;
390  iSetup.get<SiStripGainRcd>().get(gainHandle);
391 
392  edm::ESHandle<SiStripQuality> qualityHandle;
393  iSetup.get<SiStripQualityRcd>().get(qualityLabel_,qualityHandle);
394 
396 
397  // get collection of DetSetVector of clusters from Event
399  iEvent.getByLabel(clusterProducerStrip_, cluster_detsetvektor);
400 
401  //get pixel clusters
402  edm::Handle< edmNew::DetSetVector<SiPixelCluster> > cluster_detsetvektor_pix;
403  iEvent.getByLabel(clusterProducerPix_, cluster_detsetvektor_pix);
404 
405  if (!cluster_detsetvektor.isValid()) return;
406 
407  const edmNew::DetSetVector<SiStripCluster> * StrC= cluster_detsetvektor.product();
408  NStripClusters= StrC->data().size();
409 
410 
411  if (cluster_detsetvektor_pix.isValid()){
412  const edmNew::DetSetVector<SiPixelCluster> * PixC= cluster_detsetvektor_pix.product();
413  NPixClusters= PixC->data().size();
414  isPixValid=true;
415  MultiplicityRegion=FindRegion(NStripClusters,NPixClusters);
416  if (globalswitchcstripvscpix) GlobalCStripVsCpix->Fill(NStripClusters,NPixClusters);
418 
419  }
420 
421  // initialise # of clusters to zero
422  for (std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.begin();
423  iSubdet != SubDetMEsMap.end(); iSubdet++) {
424  iSubdet->second.totNClusters = 0;
425  }
426 
427  SiStripFolderOrganizer folder_organizer;
428  bool found_layer_me = false;
429  for (std::map<std::string, std::vector< uint32_t > >::const_iterator iterLayer = LayerDetMap.begin();
430  iterLayer != LayerDetMap.end(); iterLayer++) {
431 
432  std::string layer_label = iterLayer->first;
433 
434  int ncluster_layer = 0;
435  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(layer_label);
436 
437  //get Layer MEs
438  LayerMEs layer_single;
439  if(iLayerME != LayerMEsMap.end()) {
440  layer_single = iLayerME->second;
441  found_layer_me = true;
442  }
443 
444  bool found_module_me = false;
445  uint16_t iDet = 0;
446  std::string subdet_label = "";
447  // loop over all modules in the layer
448  for (std::vector< uint32_t >::const_iterator iterDets = iterLayer->second.begin() ;
449  iterDets != iterLayer->second.end() ; iterDets++) {
450  iDet++;
451  // detid and type of ME
452  uint32_t detid = (*iterDets);
453 
454  // Get SubDet label once
455  if (subdet_label.size() == 0) subdet_label = folder_organizer.getSubDetFolderAndTag(detid).second;
456 
457  // DetId and corresponding set of MEs
458  ModMEs mod_single;
459  if (Mod_On_) {
460  std::map<uint32_t, ModMEs >::iterator imodME = ModuleMEsMap.find(detid);
461  if (imodME != ModuleMEsMap.end()) {
462  mod_single = imodME->second;
463  found_module_me = true;
464  }
465  } else found_module_me = false;
466 
467  edmNew::DetSetVector<SiStripCluster>::const_iterator isearch = cluster_detsetvektor->find(detid); // search clusters of detid
468 
469  if(isearch==cluster_detsetvektor->end()){
470  if(found_module_me && moduleswitchncluson && (mod_single.NumberOfClusters)){
471  (mod_single.NumberOfClusters)->Fill(0.); // no clusters for this detector module,fill histogram with 0
472  }
473  if(clustertkhistomapon) tkmapcluster->fill(detid,0.);
474  if (found_layer_me && layerswitchnumclusterprofon) layer_single.LayerNumberOfClusterProfile->Fill(iDet, 0.0);
475  continue; // no clusters for this detid => jump to next step of loop
476  }
477 
478  //cluster_detset is a structure, cluster_detset.data is a std::vector<SiStripCluster>, cluster_detset.id is uint32_t
479  edmNew::DetSet<SiStripCluster> cluster_detset = (*cluster_detsetvektor)[detid]; // the statement above makes sure there exists an element with 'detid'
480 
481  // Filling TkHistoMap with number of clusters for each module
482  if(clustertkhistomapon) {
483  tkmapcluster->fill(detid,static_cast<float>(cluster_detset.size()));
484  }
485 
486  if(moduleswitchncluson && found_module_me && (mod_single.NumberOfClusters != NULL)){ // nr. of clusters per module
487  (mod_single.NumberOfClusters)->Fill(static_cast<float>(cluster_detset.size()));
488  }
489 
490  if (found_layer_me && layerswitchnumclusterprofon)
491  layer_single.LayerNumberOfClusterProfile->Fill(iDet, static_cast<float>(cluster_detset.size()));
492  ncluster_layer += cluster_detset.size();
493 
494  short total_clusterized_strips = 0;
495 
496  SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detid);
497  SiStripApvGain::Range detGainRange = gainHandle->getRange(detid);
498  SiStripQuality::Range qualityRange = qualityHandle->getRange(detid);
499 
500  for(edmNew::DetSet<SiStripCluster>::const_iterator clusterIter = cluster_detset.begin(); clusterIter!= cluster_detset.end(); clusterIter++){
501 
502  const std::vector<uint8_t>& ampls = clusterIter->amplitudes();
503  // cluster position
504  float cluster_position = clusterIter->barycenter();
505  // start defined as nr. of first strip beloning to the cluster
506  short cluster_start = clusterIter->firstStrip();
507  // width defined as nr. of strips that belong to cluster
508  short cluster_width = ampls.size();
509  // add nr of strips of this cluster to total nr. of clusterized strips
510  total_clusterized_strips = total_clusterized_strips + cluster_width;
511 
512  // cluster signal and noise from the amplitudes
513  float cluster_signal = 0.0;
514  float cluster_noise = 0.0;
515  int nrnonzeroamplitudes = 0;
516  float noise2 = 0.0;
517  float noise = 0.0;
518  for(uint iamp=0; iamp<ampls.size(); iamp++){
519  if(ampls[iamp]>0){ // nonzero amplitude
520  cluster_signal += ampls[iamp];
521  if(!qualityHandle->IsStripBad(qualityRange, clusterIter->firstStrip()+iamp)){
522  noise = noiseHandle->getNoise(clusterIter->firstStrip()+iamp,detNoiseRange)/gainHandle->getStripGain(clusterIter->firstStrip()+iamp, detGainRange);
523  }
524  noise2 += noise*noise;
525  nrnonzeroamplitudes++;
526  }
527  } // End loop over cluster amplitude
528 
529  if (nrnonzeroamplitudes > 0) cluster_noise = sqrt(noise2/nrnonzeroamplitudes);
530 
531  if( applyClusterQuality_ &&
532  (cluster_signal/cluster_noise < sToNLowerLimit_ ||
533  cluster_signal/cluster_noise > sToNUpperLimit_ ||
534  cluster_width < widthLowerLimit_ ||
535  cluster_width > widthUpperLimit_) ) continue;
536 
537  ClusterProperties cluster_properties;
538  cluster_properties.charge = cluster_signal;
539  cluster_properties.position = cluster_position;
540  cluster_properties.start = cluster_start;
541  cluster_properties.width = cluster_width;
542  cluster_properties.noise = cluster_noise;
543 
544  // Fill Module Level MEs
545  if (found_module_me) fillModuleMEs(mod_single, cluster_properties);
546 
547  // Fill Layer Level MEs
548  if (found_layer_me) {
549  fillLayerMEs(layer_single, cluster_properties, iOrbitSec);
551  layer_single.LayerClusterWidthProfile->Fill(iDet, cluster_width);
552  }
553  } // end loop over clusters
554 
555  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
556  float local_occupancy = static_cast<float>(total_clusterized_strips)/static_cast<float>(total_nr_strips);
557  if (found_module_me) {
558  if(moduleswitchnrclusterizedstrip && mod_single.NrOfClusterizedStrips ){ // nr of clusterized strips
559  mod_single.NrOfClusterizedStrips->Fill(static_cast<float>(total_clusterized_strips));
560  }
561 
562  if(moduleswitchlocaloccupancy && mod_single.ModuleLocalOccupancy ){ // Occupancy
563  mod_single.ModuleLocalOccupancy->Fill(local_occupancy);
564  }
565  }
566  if (layerswitchlocaloccupancy && found_layer_me && layer_single.LayerLocalOccupancy) {
567  fillME(layer_single.LayerLocalOccupancy,local_occupancy);
568  if (createTrendMEs) fillME(layer_single.LayerLocalOccupancyTrend,iOrbitSec,local_occupancy);
569  }
570  }
571  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
572  if(iSubdet != SubDetMEsMap.end()) iSubdet->second.totNClusters += ncluster_layer;
573  }
574 
575  // EventHistory
576  edm::Handle<EventWithHistory> event_history;
577  iEvent.getByLabel(historyProducer_,event_history);
578 
579  // Phase of APV
580  edm::Handle<APVCyclePhaseCollection> apv_phase_collection;
581  iEvent.getByLabel(apvPhaseProducer_,apv_phase_collection);
582 
583  if (event_history.isValid()
584  && !event_history.failedToGet()
585  && apv_phase_collection.isValid()
586  && !apv_phase_collection.failedToGet()) {
587 
588 
589  long long dbx = event_history->deltaBX();
590  long long tbx = event_history->absoluteBX();
591 
592  bool global_histo_filled = false;
593  bool MultiplicityRegion_Vs_APVcycle_filled=false;
594 
595  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
596  it != SubDetMEsMap.end(); it++) {
597  std::string sdet = it->first;
598  //std::string sdet = sdet_tag.substr(0,sdet_tag.find_first_of("_"));
599  SubDetMEs sdetmes = it->second;
600 
601  int the_phase = APVCyclePhaseCollection::invalid;
602  long long tbx_corr = tbx;
603 
604  if (SubDetPhasePartMap.find(sdet) != SubDetPhasePartMap.end()) the_phase = apv_phase_collection->getPhase(SubDetPhasePartMap[sdet]);
605  if(the_phase==APVCyclePhaseCollection::nopartition ||
608  the_phase=30;
609  //std::cout << " subdet " << it->first << " not valid" << " MR " << MultiplicityRegion <<std::endl;
610  }
611  tbx_corr -= the_phase;
612  long long dbxincycle = event_history->deltaBXinCycle(the_phase);
613  if (globalswitchapvcycledbxth2on && !global_histo_filled) {
614  GlobalApvCycleDBxTH2->Fill(tbx_corr%70,dbx);
615  global_histo_filled = true;
616  }
617 
618  if (isPixValid && !MultiplicityRegion_Vs_APVcycle_filled){
619  if (globalswitchstripnoise2apvcycle && MultiplicityRegion==2) {StripNoise2Cycle->Fill(tbx_corr%70);}
620  if (globalswitchstripnoise3apvcycle && MultiplicityRegion==3) {StripNoise3Cycle->Fill(tbx_corr%70);}
621  MultiplicityRegion_Vs_APVcycle_filled=true;
622  }
623 
625  if (subdetswitchtotclusprofon) sdetmes.SubDetTotClusterProf->Fill(iOrbitSec,sdetmes.totNClusters);
626  if (subdetswitchapvcycleprofon) sdetmes.SubDetClusterApvProf->Fill(tbx_corr%70,sdetmes.totNClusters);
627  if (subdetswitchapvcycleth2on) sdetmes.SubDetClusterApvTH2->Fill(tbx_corr%70,sdetmes.totNClusters);
628  if (subdetswitchdbxcycleprofon) sdetmes.SubDetClusterDBxCycleProf->Fill(dbxincycle,sdetmes.totNClusters);
629  if (subdetswitchapvcycledbxprof2on) sdetmes.SubDetApvDBxProf2->Fill(tbx_corr%70,dbx,sdetmes.totNClusters);
630  }
631  }
632 }
633 //
634 // -- EndJob
635 //
637  bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
638  std::string outputFileName = conf_.getParameter<std::string>("OutputFileName");
639 
640  // save histos in a file
641  if(outputMEsInRootFile) dqmStore_->save(outputFileName);
642 }
643 //
644 // -- Reset MEs
645 //------------------------------------------------------------------------------
647  std::map<uint32_t, ModMEs >::iterator pos = ModuleMEsMap.find(idet);
648  ModMEs mod_me = pos->second;
649 
660 }
661 //
662 // -- Create Module Level MEs
663 //
665 
666  // use SistripHistoId for producing histogram id (and title)
667  SiStripHistoId hidmanager;
668  std::string hid;
669 
670  //nr. of clusters per module
671  if(moduleswitchncluson) {
672  hid = hidmanager.createHistoId("NumberOfClusters","det",detid);
673  mod_single.NumberOfClusters = bookME1D("TH1nClusters", hid.c_str());
674  dqmStore_->tag(mod_single.NumberOfClusters, detid);
675  mod_single.NumberOfClusters->setAxisTitle("number of clusters in one detector module");
676  mod_single.NumberOfClusters->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
677  }
678 
679  //ClusterPosition
681  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
682  hid = hidmanager.createHistoId("ClusterPosition","det",detid);
683  mod_single.ClusterPosition = dqmStore_->book1D(hid, hid, total_nr_strips, 0.5, total_nr_strips+0.5);
684  dqmStore_->tag(mod_single.ClusterPosition, detid);
685  mod_single.ClusterPosition->setAxisTitle("cluster position [strip number +0.5]");
686  }
687 
688  //ClusterDigiPosition
690  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
691  hid = hidmanager.createHistoId("ClusterDigiPosition","det",detid);
692  mod_single.ClusterDigiPosition = dqmStore_->book1D(hid, hid, total_nr_strips, 0.5, total_nr_strips+0.5);
693  dqmStore_->tag(mod_single.ClusterDigiPosition, detid);
694  mod_single.ClusterDigiPosition->setAxisTitle("digi in cluster position [strip number +0.5]");
695  }
696 
697  //ClusterWidth
699  hid = hidmanager.createHistoId("ClusterWidth","det",detid);
700  mod_single.ClusterWidth = bookME1D("TH1ClusterWidth", hid.c_str());
701  dqmStore_->tag(mod_single.ClusterWidth, detid);
702  mod_single.ClusterWidth->setAxisTitle("cluster width [nr strips]");
703  }
704 
705  //ClusterCharge
707  hid = hidmanager.createHistoId("ClusterCharge","det",detid);
708  mod_single.ClusterCharge = bookME1D("TH1ClusterCharge", hid.c_str());
709  dqmStore_->tag(mod_single.ClusterCharge, detid);
710  mod_single.ClusterCharge->setAxisTitle("cluster charge [ADC]");
711  }
712 
713  //ClusterNoise
715  hid = hidmanager.createHistoId("ClusterNoise","det",detid);
716  mod_single.ClusterNoise = bookME1D("TH1ClusterNoise", hid.c_str());
717  dqmStore_->tag(mod_single.ClusterNoise, detid);
718  mod_single.ClusterNoise->setAxisTitle("cluster noise");
719  }
720 
721  //ClusterSignalOverNoise
723  hid = hidmanager.createHistoId("ClusterSignalOverNoise","det",detid);
724  mod_single.ClusterSignalOverNoise = bookME1D("TH1ClusterStoN", hid.c_str());
725  dqmStore_->tag(mod_single.ClusterSignalOverNoise, detid);
726  mod_single.ClusterSignalOverNoise->setAxisTitle("ratio of signal to noise for each cluster");
727  }
728 
729  //ClusterSignalOverNoiseVsPos
731  hid = hidmanager.createHistoId("ClusterSignalOverNoiseVsPos","det",detid);
732  Parameters = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoNVsPos");
733  mod_single.ClusterSignalOverNoiseVsPos= dqmStore_->bookProfile(hid.c_str(),hid.c_str(),
734  Parameters.getParameter<int32_t>("Nbinx"),
735  Parameters.getParameter<double>("xmin"),
736  Parameters.getParameter<double>("xmax"),
737  Parameters.getParameter<int32_t>("Nbiny"),
738  Parameters.getParameter<double>("ymin"),
739  Parameters.getParameter<double>("ymax")
740  );
741  dqmStore_->tag(mod_single.ClusterSignalOverNoiseVsPos, detid);
742  mod_single.ClusterSignalOverNoiseVsPos->setAxisTitle("pos");
743  }
744 
745  //ModuleLocalOccupancy
747  hid = hidmanager.createHistoId("ClusterLocalOccupancy","det",detid);
748  mod_single.ModuleLocalOccupancy = bookME1D("TH1ModuleLocalOccupancy", hid.c_str());
749  dqmStore_->tag(mod_single.ModuleLocalOccupancy, detid);
750  mod_single.ModuleLocalOccupancy->setAxisTitle("module local occupancy [% of clusterized strips]");
751  }
752 
753  //NrOfClusterizedStrips
755  hid = hidmanager.createHistoId("NrOfClusterizedStrips","det",detid);
756  mod_single.NrOfClusterizedStrips = bookME1D("TH1NrOfClusterizedStrips", hid.c_str());
757  dqmStore_->tag(mod_single.NrOfClusterizedStrips, detid);
758  mod_single.NrOfClusterizedStrips->setAxisTitle("number of clusterized strips");
759  }
760 }
761 //
762 // -- Create Module Level MEs
763 //
764 void SiStripMonitorCluster::createLayerMEs(std::string label, int ndets) {
765 
766  SiStripHistoId hidmanager;
767 
768  LayerMEs layerMEs;
769  layerMEs.LayerClusterStoN = 0;
770  layerMEs.LayerClusterStoNTrend = 0;
771  layerMEs.LayerClusterCharge = 0;
772  layerMEs.LayerClusterChargeTrend = 0;
773  layerMEs.LayerClusterNoise = 0;
774  layerMEs.LayerClusterNoiseTrend = 0;
775  layerMEs.LayerClusterWidth = 0;
776  layerMEs.LayerClusterWidthTrend = 0;
777  layerMEs.LayerLocalOccupancy = 0;
778  layerMEs.LayerLocalOccupancyTrend = 0;
779  layerMEs.LayerNumberOfClusterProfile = 0;
780  layerMEs.LayerClusterWidthProfile = 0;
781 
782  //Cluster Width
784  layerMEs.LayerClusterWidth=bookME1D("TH1ClusterWidth", hidmanager.createHistoLayer("Summary_ClusterWidth","layer",label,"").c_str());
785  if (createTrendMEs) layerMEs.LayerClusterWidthTrend=bookMETrend("TH1ClusterWidth", hidmanager.createHistoLayer("Trend_ClusterWidth","layer",label,"").c_str());
786  }
787 
788  //Cluster Noise
790  layerMEs.LayerClusterNoise=bookME1D("TH1ClusterNoise", hidmanager.createHistoLayer("Summary_ClusterNoise","layer",label,"").c_str());
791  if (createTrendMEs) layerMEs.LayerClusterNoiseTrend=bookMETrend("TH1ClusterNoise", hidmanager.createHistoLayer("Trend_ClusterNoise","layer",label,"").c_str());
792  }
793 
794  //Cluster Charge
796  layerMEs.LayerClusterCharge=bookME1D("TH1ClusterCharge", hidmanager.createHistoLayer("Summary_ClusterCharge","layer",label,"").c_str());
797  if (createTrendMEs) layerMEs.LayerClusterChargeTrend=bookMETrend("TH1ClusterCharge", hidmanager.createHistoLayer("Trend_ClusterCharge","layer",label,"").c_str());
798  }
799 
800  //Cluster StoN
802  layerMEs.LayerClusterStoN=bookME1D("TH1ClusterStoN", hidmanager.createHistoLayer("Summary_ClusterSignalOverNoise","layer",label,"").c_str());
803  if (createTrendMEs) layerMEs.LayerClusterStoNTrend=bookMETrend("TH1ClusterStoN", hidmanager.createHistoLayer("Trend_ClusterSignalOverNoise","layer",label,"").c_str());
804  }
805 
806  //Cluster Occupancy
808  layerMEs.LayerLocalOccupancy=bookME1D("TH1ModuleLocalOccupancy", hidmanager.createHistoLayer("Summary_ClusterLocalOccupancy","layer",label,"").c_str());
809  if (createTrendMEs) layerMEs.LayerLocalOccupancyTrend=bookMETrend("TH1ModuleLocalOccupancy", hidmanager.createHistoLayer("Trend_ClusterLocalOccupancy","layer",label,"").c_str());
810 
811  }
812 
813  // # of Cluster Profile
815  std::string hid = hidmanager.createHistoLayer("NumberOfClusterProfile","layer",label,"");
816  layerMEs.LayerNumberOfClusterProfile = dqmStore_->bookProfile(hid, hid, ndets, 0.5, ndets+0.5,21, -0.5, 20.5);
817  }
818 
819  // Cluster Width Profile
821  std::string hid = hidmanager.createHistoLayer("ClusterWidthProfile","layer",label,"");
822  layerMEs.LayerClusterWidthProfile = dqmStore_->bookProfile(hid, hid, ndets, 0.5, ndets+0.5, 20, -0.5, 19.5);
823  }
824 
825  LayerMEsMap[label]=layerMEs;
826 }
827 //
828 // -- Create SubDetector MEs
829 //
831 
832  SubDetMEs subdetMEs;
833  subdetMEs.totNClusters = 0;
834  subdetMEs.SubDetTotClusterTH1 = 0;
835  subdetMEs.SubDetTotClusterProf = 0;
836  subdetMEs.SubDetClusterApvProf = 0;
837  subdetMEs.SubDetClusterApvTH2 = 0;
838  subdetMEs.SubDetClusterDBxCycleProf = 0;
839  subdetMEs.SubDetApvDBxProf2 = 0;
840 
841  std::string HistoName;
842  // Total Number of Cluster - 1D
844  HistoName = "TotalNumberOfCluster__" + label;
845  subdetMEs.SubDetTotClusterTH1 = bookME1D("TH1TotalNumberOfClusters",HistoName.c_str());
846  subdetMEs.SubDetTotClusterTH1->setAxisTitle("Total number of clusters in subdetector");
847  subdetMEs.SubDetTotClusterTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
848  }
849  // Total Number of Cluster vs Time - Profile
851  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfClusters");
852  HistoName = "TotalNumberOfClusterProfile__" + label;
853  subdetMEs.SubDetTotClusterProf = dqmStore_->bookProfile(HistoName,HistoName,
854  Parameters.getParameter<int32_t>("Nbins"),
855  Parameters.getParameter<double>("xmin"),
856  Parameters.getParameter<double>("xmax"),
857  100, //that parameter should not be there !?
858  Parameters.getParameter<double>("ymin"),
859  Parameters.getParameter<double>("ymax"),
860  "" );
861  subdetMEs.SubDetTotClusterProf->setAxisTitle("Event Time (Seconds)",1);
862  if (subdetMEs.SubDetTotClusterProf->kind() == MonitorElement::DQM_KIND_TPROFILE) subdetMEs.SubDetTotClusterProf->getTH1()->SetBit(TH1::kCanRebin);
863  }
864  // Total Number of Cluster vs APV cycle - Profile
867  HistoName = "Cluster_vs_ApvCycle__" + label;
868  subdetMEs.SubDetClusterApvProf=dqmStore_->bookProfile(HistoName,HistoName,
869  Parameters.getParameter<int32_t>("Nbins"),
870  Parameters.getParameter<double>("xmin"),
871  Parameters.getParameter<double>("xmax"),
872  200, //that parameter should not be there !?
873  Parameters.getParameter<double>("ymin"),
874  Parameters.getParameter<double>("ymax"),
875  "" );
876  subdetMEs.SubDetClusterApvProf->setAxisTitle("Apv Cycle (Corrected Absolute Bx % 70)",1);
877  }
878 
879  // Total Number of Clusters vs ApvCycle - 2D
882  HistoName = "Cluster_vs_ApvCycle_2D__" + label;
883  // Adjusting the scale for 2D histogram
884  double h2ymax = 9999.0;
885  double yfact = Parameters.getParameter<double>("yfactor");
886  if(label.find("TIB") != std::string::npos) h2ymax = (6984.*256.)*yfact;
887  else if (label.find("TID") != std::string::npos) h2ymax = (2208.*256.)*yfact;
888  else if (label.find("TOB") != std::string::npos) h2ymax = (12906.*256.)*yfact;
889  else if (label.find("TEC") != std::string::npos) h2ymax = (7552.*2.*256.)*yfact;
890 
891  subdetMEs.SubDetClusterApvTH2=dqmStore_->book2D(HistoName,HistoName,
892  Parameters.getParameter<int32_t>("Nbinsx"),
893  Parameters.getParameter<double>("xmin"),
894  Parameters.getParameter<double>("xmax"),
895  Parameters.getParameter<int32_t>("Nbinsy"),
896  Parameters.getParameter<double>("ymin"),
897  h2ymax);
898  subdetMEs.SubDetClusterApvTH2->setAxisTitle("Apv Cycle (Corrected Absolute Bx % 70))",1);
899  subdetMEs.SubDetClusterApvTH2->setAxisTitle("Total # of Clusters",2);
900 
901  }
902  // Total Number of Cluster vs DeltaBxCycle - Profile
904  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfClustersVsDBxCycle");
905  HistoName = "Cluster_vs_DeltaBxCycle__" + label;
906  subdetMEs.SubDetClusterDBxCycleProf = dqmStore_->bookProfile(HistoName,HistoName,
907  Parameters.getParameter<int32_t>("Nbins"),
908  Parameters.getParameter<double>("xmin"),
909  Parameters.getParameter<double>("xmax"),
910  200, //that parameter should not be there !?
911  Parameters.getParameter<double>("ymin"),
912  Parameters.getParameter<double>("ymax"),
913  "" );
914  subdetMEs.SubDetClusterDBxCycleProf->setAxisTitle("Delta Bunch Crossing Cycle",1);
915  }
916  // DeltaBx vs ApvCycle - 2DProfile
919  HistoName = "DeltaBx_vs_ApvCycle__" + label;
920  subdetMEs.SubDetApvDBxProf2 = dqmStore_->bookProfile2D(HistoName,HistoName,
921  Parameters.getParameter<int32_t>("Nbinsx"),
922  Parameters.getParameter<double>("xmin"),
923  Parameters.getParameter<double>("xmax"),
924  Parameters.getParameter<int32_t>("Nbinsy"),
925  Parameters.getParameter<double>("ymin"),
926  Parameters.getParameter<double>("ymax"),
927  Parameters.getParameter<double>("zmin"),
928  Parameters.getParameter<double>("zmax"),
929  "" );
930  subdetMEs.SubDetApvDBxProf2->setAxisTitle("APV Cycle (Corrected Absolute Bx % 70)",1);
931  subdetMEs.SubDetApvDBxProf2->setAxisTitle("Delta Bunch Crossing Cycle",2);
932  }
933  SubDetMEsMap[label]=subdetMEs;
934 }
935 
936 //
937 // -- Fill Module Level Histograms
938 //
940 
941  if(moduleswitchclusposon && (mod_mes.ClusterPosition)) // position of cluster
942  (mod_mes.ClusterPosition)->Fill(cluster.position);
943 
944  // position of digis in cluster
946  for(int ipos=cluster.start+1; ipos<=cluster.start+cluster.width; ipos++){
947  (mod_mes.ClusterDigiPosition)->Fill(ipos);
948  }
949  }
950 
951  if(moduleswitchcluswidthon && (mod_mes.ClusterWidth)) // width of cluster
952  (mod_mes.ClusterWidth)->Fill(static_cast<float>(cluster.width));
953 
954  if(moduleswitchclusstonon && (mod_mes.ClusterSignalOverNoise)) {// SignalToNoise
955  if (cluster.noise > 0)
956  (mod_mes.ClusterSignalOverNoise)->Fill(cluster.charge/cluster.noise);
957  }
958 
959  if(moduleswitchclusstonVsposon && (mod_mes.ClusterSignalOverNoiseVsPos)) {// SignalToNoise
960  if (cluster.noise > 0)
961  (mod_mes.ClusterSignalOverNoiseVsPos)->Fill(cluster.position,cluster.charge/cluster.noise);
962  }
963 
964  if(moduleswitchclusnoiseon && (mod_mes.ClusterNoise)) // Noise
965  (mod_mes.ClusterNoise)->Fill(cluster.noise);
966 
967  if(moduleswitchcluschargeon && (mod_mes.ClusterCharge)) // charge of cluster
968  (mod_mes.ClusterCharge)->Fill(cluster.charge);
969 
970 }
971 //
972 // -- Fill Layer Level MEs
973 //
974 void SiStripMonitorCluster::fillLayerMEs(LayerMEs& layerMEs, ClusterProperties& cluster, float timeinorbit) {
976  fillME(layerMEs.LayerClusterStoN ,cluster.charge/cluster.noise);
977  if (createTrendMEs) fillME(layerMEs.LayerClusterStoNTrend,timeinorbit,cluster.charge/cluster.noise);
978  }
979 
981  fillME(layerMEs.LayerClusterCharge,cluster.charge);
982  if (createTrendMEs) fillME(layerMEs.LayerClusterChargeTrend,timeinorbit,cluster.charge);
983  }
984 
986  fillME(layerMEs.LayerClusterNoise ,cluster.noise);
987  if (createTrendMEs) fillME(layerMEs.LayerClusterNoiseTrend,timeinorbit,cluster.noise);
988  }
989 
991  fillME(layerMEs.LayerClusterWidth ,cluster.width);
992  if (createTrendMEs) fillME(layerMEs.LayerClusterWidthTrend,timeinorbit,cluster.width);
993  }
994 
995 }
996 //------------------------------------------------------------------------------------------
997 MonitorElement* SiStripMonitorCluster::bookMETrend(const char* ParameterSetLabel, const char* HistoName)
998 {
999  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
1000  edm::ParameterSet ParametersTrend = conf_.getParameter<edm::ParameterSet>("Trending");
1001  MonitorElement* me = dqmStore_->bookProfile(HistoName,HistoName,
1002  ParametersTrend.getParameter<int32_t>("Nbins"),
1003  // 0,
1004  ParametersTrend.getParameter<double>("xmin"),
1005  ParametersTrend.getParameter<double>("xmax"),
1006  // ParametersTrend.getParameter<int32_t>("Nbins"),
1007  100, //that parameter should not be there !?
1008  ParametersTrend.getParameter<double>("ymin"),
1009  ParametersTrend.getParameter<double>("ymax"),
1010  "" );
1011  if(!me) return me;
1012  me->setAxisTitle("Event Time in Seconds",1);
1013  if (me->kind() == MonitorElement::DQM_KIND_TPROFILE) me->getTH1()->SetBit(TH1::kCanRebin);
1014  return me;
1015 }
1016 
1017 //------------------------------------------------------------------------------------------
1018 MonitorElement* SiStripMonitorCluster::bookME1D(const char* ParameterSetLabel, const char* HistoName)
1019 {
1020  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
1021  return dqmStore_->book1D(HistoName,HistoName,
1022  Parameters.getParameter<int32_t>("Nbinx"),
1023  Parameters.getParameter<double>("xmin"),
1024  Parameters.getParameter<double>("xmax")
1025  );
1026 }
1027 
1028 int SiStripMonitorCluster::FindRegion(int nstrip,int npix){
1029 
1030  double kplus= k0*(1+dk0/100);
1031  double kminus=k0*(1-dk0/100);
1032  int region=0;
1033 
1034  if (nstrip!=0 && npix >= (nstrip*kminus-q0) && npix <=(nstrip*kplus+q0)) region=1;
1035  else if (nstrip!=0 && npix < (nstrip*kminus-q0) && nstrip <= maxClus) region=2;
1036  else if (nstrip!=0 && npix < (nstrip*kminus-q0) && nstrip > maxClus) region=3;
1037  else if (nstrip!=0 && npix > (nstrip*kplus+q0)) region=4;
1038  else if (npix > minPix && nstrip==0) region=5;
1039  return region;
1040 
1041 }
1042 
1043 
1044 
RunNumber_t run() const
Definition: EventID.h:42
void ResetModuleMEs(uint32_t idet)
T getParameter(std::string const &) const
virtual void analyze(const edm::Event &, const edm::EventSetup &)
int FindRegion(int nstrip, int npixel)
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
MonitorElement * bookME1D(const char *ParameterSetLabel, const char *HistoName)
void setSiStripFolderName(std::string name)
const std::string & label
Definition: MVAComputer.cc:186
MonitorElement * PixVsStripMultiplicityRegions
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:514
MonitorElement * GlobalCStripVsCpix
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
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
edm::ESHandle< SiStripDetCabling > SiStripDetCabling_
#define NULL
Definition: scimark2.h:8
MonitorElement * ClusterSignalOverNoiseVsPos
MonitorElement * StripNoise2Cycle
data_type const * const_iterator
Definition: DetSetNew.h:25
std::map< std::string, LayerMEs > LayerMEsMap
void createMEs(const edm::EventSetup &es)
std::map< std::string, std::vector< uint32_t > > LayerDetMap
void Fill(long long x)
unsigned long long m_cacheID_
void tag(MonitorElement *me, unsigned int myTag)
Definition: DQMStore.cc:1151
std::map< uint32_t, ModMEs > ModuleMEsMap
bool getStatus(edm::Event const &e, edm::EventSetup const &eSetup)
void createSubDetMEs(std::string label)
int iEvent
Definition: GenABIO.cc:243
std::string getSubdetid(uint32_t id, bool flag_ring)
std::map< std::string, std::string > SubDetPhasePartMap
MonitorElement * GlobalApvCycleDBxTH2
std::pair< std::string, std::string > getSubDetFolderAndTag(const uint32_t &detid)
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
void createModuleMEs(ModMEs &mod_single, uint32_t detid)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T sqrt(T t)
Definition: SSEVec.h:28
MonitorElement * bookMETrend(const char *, const char *)
void fill(uint32_t &detid, float value)
Definition: TkHistoMap.cc:130
void fillLayerMEs(LayerMEs &, ClusterProperties &cluster, float timeinorbit)
data_type const * data(size_t cell) const
std::pair< ContainerIterator, ContainerIterator > Range
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
int orbitNumber() const
Definition: EventBase.h:63
Kind kind(void) const
Get the type of the monitor element.
void setDetectorFolder(uint32_t rawdetid=0)
bool isValid() const
Definition: HandleBase.h:76
vector< ParameterSet > Parameters
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
SiStripDCSStatus * dcsStatus_
bool failedToGet() const
Definition: HandleBase.h:80
void fillME(MonitorElement *ME, float value1)
SiStripMonitorCluster(const edm::ParameterSet &)
std::string createHistoId(std::string description, std::string id_type, uint32_t component_id)
const T & get() const
Definition: EventSetup.h:55
virtual void beginRun(const edm::Run &, const edm::EventSetup &)
T const * product() const
Definition: Handle.h:74
std::string HistoName
MonitorElement * StripNoise3Cycle
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
edm::EventID id() const
Definition: EventBase.h:56
void createLayerMEs(std::string label, int ndets)
iterator end()
Definition: DetSetNew.h:59
std::map< std::string, SubDetMEs > SubDetMEsMap
std::pair< ContainerIterator, ContainerIterator > Range
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
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, bool ring_flag=0)
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
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:41
size_type size() const
Definition: DetSetNew.h:75
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
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
void fillModuleMEs(ModMEs &mod_mes, ClusterProperties &cluster)
Definition: Run.h:32
int size() const
MonitorElement * bookProfile2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, int nchZ, double lowZ, double highZ, const char *option="s")
Definition: DQMStore.cc:972
iterator begin()
Definition: DetSetNew.h:56