CMS 3D CMS Logo

SiStripMonitorCluster.cc
Go to the documentation of this file.
1 
2 // -*- C++ -*-
3 // Package: SiStripMonitorCluster
4 // Class: SiStripMonitorCluster
7 // Original Author: Dorian Kcira
8 // Created: Wed Feb 1 16:42:34 CET 2006
9 #include <vector>
10 #include <numeric>
11 #include <fstream>
12 #include <math.h>
13 #include "TNamed.h"
16 
34 
37 
40 
41 #include "TMath.h"
42 #include <iostream>
43 
44 //--------------------------------------------------------------------------------------------
46  : 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)
47  // , genTriggerEventFlag_(new GenericTriggerEventFlag(iConfig, consumesCollector()))
48 {
49 
50  // initialize
51  passBPTXfilter_ = true;
52 
53  // initialize GenericTriggerEventFlag by specific configuration
54  // in this way, one can set specific selections for different MEs
58 
59  firstEvent = -1;
60  eventNb = 0;
61 
62  // Detector Partitions
63  SubDetPhasePartMap["TIB"] = "TI";
64  SubDetPhasePartMap["TID__MINUS"] = "TI";
65  SubDetPhasePartMap["TID__PLUS"] = "TI";
66  SubDetPhasePartMap["TOB"] = "TO";
67  SubDetPhasePartMap["TEC__MINUS"] = "TM";
68  SubDetPhasePartMap["TEC__PLUS"] = "TP";
69 
70  //get on/off option for every cluster from cfi
71  edm::ParameterSet ParametersnClusters = conf_.getParameter<edm::ParameterSet>("TH1nClusters");
72  layerswitchncluson = ParametersnClusters.getParameter<bool>("layerswitchon");
73  moduleswitchncluson = ParametersnClusters.getParameter<bool>("moduleswitchon");
74 
75  edm::ParameterSet ParametersClusterCharge = conf_.getParameter<edm::ParameterSet>("TH1ClusterCharge");
76  layerswitchcluschargeon = ParametersClusterCharge.getParameter<bool>("layerswitchon");
77  moduleswitchcluschargeon = ParametersClusterCharge.getParameter<bool>("moduleswitchon");
78  subdetswitchcluschargeon = ParametersClusterCharge.getParameter<bool>("subdetswitchon");
79 
80  edm::ParameterSet ParametersClusterStoN = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoN");
81  layerswitchclusstonon = ParametersClusterStoN.getParameter<bool>("layerswitchon");
82  moduleswitchclusstonon = ParametersClusterStoN.getParameter<bool>("moduleswitchon");
83 
84  edm::ParameterSet ParametersClusterStoNVsPos = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoNVsPos");
85  layerswitchclusstonVsposon = ParametersClusterStoNVsPos.getParameter<bool>("layerswitchon");
86  moduleswitchclusstonVsposon = ParametersClusterStoNVsPos.getParameter<bool>("moduleswitchon");
87 
88  edm::ParameterSet ParametersClusterPos = conf_.getParameter<edm::ParameterSet>("TH1ClusterPos");
89  layerswitchclusposon = ParametersClusterPos.getParameter<bool>("layerswitchon");
90  moduleswitchclusposon = ParametersClusterPos.getParameter<bool>("moduleswitchon");
91 
92  edm::ParameterSet ParametersClusterDigiPos = conf_.getParameter<edm::ParameterSet>("TH1ClusterDigiPos");
93  layerswitchclusdigiposon = ParametersClusterDigiPos.getParameter<bool>("layerswitchon");
94  moduleswitchclusdigiposon = ParametersClusterDigiPos.getParameter<bool>("moduleswitchon");
95 
96  edm::ParameterSet ParametersClusterNoise = conf_.getParameter<edm::ParameterSet>("TH1ClusterNoise");
97  layerswitchclusnoiseon = ParametersClusterNoise.getParameter<bool>("layerswitchon");
98  moduleswitchclusnoiseon = ParametersClusterNoise.getParameter<bool>("moduleswitchon");
99 
100  edm::ParameterSet ParametersClusterWidth = conf_.getParameter<edm::ParameterSet>("TH1ClusterWidth");
101  layerswitchcluswidthon = ParametersClusterWidth.getParameter<bool>("layerswitchon");
102  moduleswitchcluswidthon = ParametersClusterWidth.getParameter<bool>("moduleswitchon");
103  subdetswitchcluswidthon = ParametersClusterWidth.getParameter<bool>("subdetswitchon");
104 
105  edm::ParameterSet ParametersModuleLocalOccupancy = conf_.getParameter<edm::ParameterSet>("TH1ModuleLocalOccupancy");
106  layerswitchlocaloccupancy = ParametersModuleLocalOccupancy.getParameter<bool>("layerswitchon");
107  moduleswitchlocaloccupancy = ParametersModuleLocalOccupancy.getParameter<bool>("moduleswitchon");
108 
109  edm::ParameterSet ParametersNrOfClusterizedStrips = conf_.getParameter<edm::ParameterSet>("TH1NrOfClusterizedStrips");
110  layerswitchnrclusterizedstrip = ParametersNrOfClusterizedStrips.getParameter<bool>("layerswitchon");
111  moduleswitchnrclusterizedstrip = ParametersNrOfClusterizedStrips.getParameter<bool>("moduleswitchon");
112 
113  edm::ParameterSet ParametersClusterProf = conf_.getParameter<edm::ParameterSet>("TProfNumberOfCluster");
114  layerswitchnumclusterprofon = ParametersClusterProf.getParameter<bool>("layerswitchon");
115 
116  edm::ParameterSet ParametersClusterWidthProf = conf_.getParameter<edm::ParameterSet>("TProfClusterWidth");
117  layerswitchclusterwidthprofon = ParametersClusterWidthProf.getParameter<bool>("layerswitchon");
118 
119  edm::ParameterSet ParametersTotClusterProf = conf_.getParameter<edm::ParameterSet>("TProfTotalNumberOfClusters");
120  subdetswitchtotclusprofon = ParametersTotClusterProf.getParameter<bool>("subdetswitchon");
121 
122  edm::ParameterSet ParametersTotClusterTH1 = conf_.getParameter<edm::ParameterSet>("TH1TotalNumberOfClusters");
123  subdetswitchtotclusth1on = ParametersTotClusterTH1.getParameter<bool>("subdetswitchon");
124 
125  edm::ParameterSet ParametersClusterApvProf = conf_.getParameter<edm::ParameterSet>("TProfClustersApvCycle");
126  subdetswitchapvcycleprofon = ParametersClusterApvProf.getParameter<bool>("subdetswitchon");
127 
128  edm::ParameterSet ParametersClustersApvTH2 = conf_.getParameter<edm::ParameterSet>("TH2ClustersApvCycle");
129  subdetswitchapvcycleth2on = ParametersClustersApvTH2.getParameter<bool>("subdetswitchon");
130 
131  edm::ParameterSet ParametersApvCycleDBxProf2 = conf_.getParameter<edm::ParameterSet>("TProf2ApvCycleVsDBx");
132  subdetswitchapvcycledbxprof2on = ParametersApvCycleDBxProf2.getParameter<bool>("subdetswitchon");
133 
134  edm::ParameterSet ParametersDBxCycleProf = conf_.getParameter<edm::ParameterSet>("TProfClustersVsDBxCycle");
135  subdetswitchdbxcycleprofon = ParametersDBxCycleProf.getParameter<bool>("subdetswitchon");
136 
137  edm::ParameterSet ParametersCStripVsCPix = conf_.getParameter<edm::ParameterSet>("TH2CStripVsCpixel");
138  globalswitchcstripvscpix = ParametersCStripVsCPix.getParameter<bool>("globalswitchon");
139 
140  edm::ParameterSet ParametersMultiplicityRegionsTH1 = conf_.getParameter<edm::ParameterSet>("TH1MultiplicityRegions");
141  globalswitchMultiRegions = ParametersMultiplicityRegionsTH1.getParameter<bool>("globalswitchon");
142 
143  edm::ParameterSet ParametersApvCycleVsDBxGlobalTH2 = conf_.getParameter<edm::ParameterSet>("TH2ApvCycleVsDBxGlobal");
144  globalswitchapvcycledbxth2on = ParametersApvCycleVsDBxGlobalTH2.getParameter<bool>("globalswitchon");
145 
146  edm::ParameterSet ParametersNoiseStrip2ApvCycle = conf_.getParameter<edm::ParameterSet>("TH1StripNoise2ApvCycle");
147  globalswitchstripnoise2apvcycle = ParametersNoiseStrip2ApvCycle.getParameter<bool>("globalswitchon");
148 
149  edm::ParameterSet ParametersNoiseStrip3ApvCycle = conf_.getParameter<edm::ParameterSet>("TH1StripNoise3ApvCycle");
150  globalswitchstripnoise3apvcycle = ParametersNoiseStrip3ApvCycle.getParameter<bool>("globalswitchon");
151 
152  edm::ParameterSet ParametersMainDiagonalPosition = conf_.getParameter<edm::ParameterSet>("TH1MainDiagonalPosition");
153  globalswitchmaindiagonalposition= ParametersMainDiagonalPosition.getParameter<bool>("globalswitchon");
154 
155  edm::ParameterSet ClusterMultiplicityRegions = conf_.getParameter<edm::ParameterSet>("MultiplicityRegions");
156  k0 = ClusterMultiplicityRegions.getParameter<double>("k0");
157  q0 = ClusterMultiplicityRegions.getParameter<double>("q0");
158  dk0 = ClusterMultiplicityRegions.getParameter<double>("dk0");
159  maxClus = ClusterMultiplicityRegions.getParameter<double>("MaxClus");
160  minPix = ClusterMultiplicityRegions.getParameter<double>("MinPix");
161 
162  edm::ParameterSet ParametersNclusVsCycleTimeProf2D = conf_.getParameter<edm::ParameterSet>("NclusVsCycleTimeProf2D");
163  globalswitchnclusvscycletimeprof2don = ParametersNclusVsCycleTimeProf2D.getParameter<bool>("globalswitchon");
164 
165  edm::ParameterSet ParametersClusWidthVsAmpTH2 = conf_.getParameter<edm::ParameterSet>("ClusWidthVsAmpTH2");
166  clusterWidth_vs_amplitude_on = ParametersClusWidthVsAmpTH2.getParameter<bool>("globalswitchon");
167  layer_clusterWidth_vs_amplitude_on = ParametersClusWidthVsAmpTH2.getParameter<bool>("layerswitchon");
168  subdet_clusterWidth_vs_amplitude_on = ParametersClusWidthVsAmpTH2.getParameter<bool>("subdetswitchon");
169  module_clusterWidth_vs_amplitude_on = ParametersClusWidthVsAmpTH2.getParameter<bool>("moduleswitchon");
170 
171  clustertkhistomapon = conf_.getParameter<bool>("TkHistoMap_On");
172  clusterchtkhistomapon = conf_.getParameter<bool>("ClusterChTkHistoMap_On");
173  createTrendMEs = conf_.getParameter<bool>("CreateTrendMEs");
174  trendVsLs_ = conf_.getParameter<bool>("TrendVsLS");
175  Mod_On_ = conf_.getParameter<bool>("Mod_On");
176  ClusterHisto_ = conf_.getParameter<bool>("ClusterHisto");
177 
178  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
179 
180 
181  // Poducer name of input StripClusterCollection
182  clusterProducerStripToken_ = consumes<edmNew::DetSetVector<SiStripCluster> >(conf_.getParameter<edm::InputTag>("ClusterProducerStrip") );
183  clusterProducerPixToken_ = consumes<edmNew::DetSetVector<SiPixelCluster> >(conf_.getParameter<edm::InputTag>("ClusterProducerPix") );
184  /*
185  clusterProducerStrip_ = conf_.getParameter<edm::InputTag>("ClusterProducerStrip");
186  clusterProducerPix_ = conf_.getParameter<edm::InputTag>("ClusterProducerPix");
187  */
188  // SiStrip Quality Label
189  qualityLabel_ = conf_.getParameter<std::string>("StripQualityLabel");
190  // cluster quality conditions
191  edm::ParameterSet cluster_condition = conf_.getParameter<edm::ParameterSet>("ClusterConditions");
192  applyClusterQuality_ = cluster_condition.getParameter<bool>("On");
193  sToNLowerLimit_ = cluster_condition.getParameter<double>("minStoN");
194  sToNUpperLimit_ = cluster_condition.getParameter<double>("maxStoN");
195  widthLowerLimit_ = cluster_condition.getParameter<double>("minWidth");
196  widthUpperLimit_ = cluster_condition.getParameter<double>("maxWidth");
197 
198  // Event History Producer
199  // historyProducer_ = conf_.getParameter<edm::InputTag>("HistoryProducer");
200  historyProducerToken_ = consumes<EventWithHistory>(conf_.getParameter<edm::InputTag>("HistoryProducer") );
201  // Apv Phase Producer
202  // apvPhaseProducer_ = conf_.getParameter<edm::InputTag>("ApvPhaseProducer");
203  apvPhaseProducerToken_ = consumes<APVCyclePhaseCollection>(conf_.getParameter<edm::InputTag>("ApvPhaseProducer") );
204  // Create DCS Status
205  bool checkDCS = conf_.getParameter<bool>("UseDCSFiltering");
206  if (checkDCS) dcsStatus_ = new SiStripDCSStatus(consumesCollector());
207  else dcsStatus_ = 0;
208 
209 }
210 
212  if (dcsStatus_) delete dcsStatus_;
216 }
217 
218 
219 //--------------------------------------------------------------------------------------------
221 
222  // Initialize the GenericTriggerEventFlag
229 }
230 
231 //--------------------------------------------------------------------------------------------
233 
235 
236  //Retrieve tracker topology from geometry
237  edm::ESHandle<TrackerTopology> tTopoHandle;
238  es.get<TrackerTopologyRcd>().get(tTopoHandle);
239  const TrackerTopology* const tTopo = tTopoHandle.product();
240 
241  // take from eventSetup the SiStripDetCabling object - here will use SiStripDetControl later on
243 
244  // get list of active detectors from SiStripDetCabling
245  std::vector<uint32_t> activeDets;
247 
248  SiStripSubStructure substructure;
249 
250  SiStripFolderOrganizer folder_organizer;
251  folder_organizer.setSiStripFolderName(topFolderName_);
252  folder_organizer.setSiStripFolder();
253 
254 
255  // Create TkHistoMap for Cluster
256  if (clustertkhistomapon) {
257  // std::cout << "[SiStripMonitorCluster::createMEs] topFolderName_: " << topFolderName_ << " ";
258  if ( (topFolderName_ == "SiStrip") or (std::string::npos != topFolderName_.find("HLT")) )
259  tkmapcluster = new TkHistoMap(ibooker , topFolderName_,"TkHMap_NumberOfCluster",0.,true);
260  else tkmapcluster = new TkHistoMap(ibooker , topFolderName_+"/TkHistoMap","TkHMap_NumberOfCluster",0.,false);
261  }
262  if (clusterchtkhistomapon) {
263  if ( (topFolderName_ == "SiStrip") or (std::string::npos != topFolderName_.find("HLT")) )
264  tkmapclusterch = new TkHistoMap(ibooker , topFolderName_,"TkHMap_ClusterCharge",0.,true);
265  else tkmapclusterch = new TkHistoMap(ibooker , topFolderName_+"/TkHistoMap","TkHMap_ClusterCharge",0.,false);
266  }
267 
268  // loop over detectors and book MEs
269  edm::LogInfo("SiStripTkDQM|SiStripMonitorCluster")<<"nr. of activeDets: "<<activeDets.size();
270  for(std::vector<uint32_t>::iterator detid_iterator = activeDets.begin(); detid_iterator!=activeDets.end(); detid_iterator++){
271  uint32_t detid = (*detid_iterator);
272  // remove any eventual zero elements - there should be none, but just in case
273  if(detid == 0) {
274  activeDets.erase(detid_iterator);
275  continue;
276  }
277 
278  if (Mod_On_) {
279  ModMEs mod_single;
280  // set appropriate folder using SiStripFolderOrganizer
281  folder_organizer.setDetectorFolder(detid, tTopo); // pass the detid to this method
282  if (reset_each_run) ResetModuleMEs(detid);
283  createModuleMEs(mod_single, detid , ibooker);
284  // append to ModuleMEsMap
285  ModuleMEsMap.insert( std::make_pair(detid, mod_single));
286  }
287 
288  // Create Layer Level MEs if they are not created already
289  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid, tTopo);
290  SiStripHistoId hidmanager;
291  std::string label = hidmanager.getSubdetid(detid,tTopo,false);
292 
293  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(label);
294  if(iLayerME==LayerMEsMap.end()) {
295 
296  // get detids for the layer
297  int32_t lnumber = det_layer_pair.second;
298  std::vector<uint32_t> layerDetIds;
299  if (det_layer_pair.first == "TIB") {
300  substructure.getTIBDetectors(activeDets,layerDetIds,lnumber,0,0,0);
301  } else if (det_layer_pair.first == "TOB") {
302  substructure.getTOBDetectors(activeDets,layerDetIds,lnumber,0,0);
303  } else if (det_layer_pair.first == "TID" && lnumber > 0) {
304  substructure.getTIDDetectors(activeDets,layerDetIds,2,std::abs(lnumber),0,0);
305  } else if (det_layer_pair.first == "TID" && lnumber < 0) {
306  substructure.getTIDDetectors(activeDets,layerDetIds,1,std::abs(lnumber),0,0);
307  } else if (det_layer_pair.first == "TEC" && lnumber > 0) {
308  substructure.getTECDetectors(activeDets,layerDetIds,2,std::abs(lnumber),0,0,0,0);
309  } else if (det_layer_pair.first == "TEC" && lnumber < 0) {
310  substructure.getTECDetectors(activeDets,layerDetIds,1,std::abs(lnumber),0,0,0,0);
311  }
312  LayerDetMap[label] = layerDetIds;
313 
314  // book Layer MEs
315  folder_organizer.setLayerFolder(detid,tTopo,det_layer_pair.second);
316  createLayerMEs(label, layerDetIds.size() , ibooker );
317  }
318  // book sub-detector plots
319  auto sdet_pair = folder_organizer.getSubDetFolderAndTag(detid, tTopo);
320  if (SubDetMEsMap.find(sdet_pair.second) == SubDetMEsMap.end()){
321  ibooker.setCurrentFolder(sdet_pair.first);
322 
323  createSubDetMEs(sdet_pair.second , ibooker );
324  }
325  }//end of loop over detectors
326 
327  // Create Global Histogram
329  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
330  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH2ApvCycleVsDBxGlobal");
331  std::string HistoName = "DeltaBx_vs_ApvCycle";
332  GlobalApvCycleDBxTH2 = ibooker.book2D(HistoName,HistoName,
333  GlobalTH2Parameters.getParameter<int32_t>("Nbinsx"),
334  GlobalTH2Parameters.getParameter<double>("xmin"),
335  GlobalTH2Parameters.getParameter<double>("xmax"),
336  GlobalTH2Parameters.getParameter<int32_t>("Nbinsy"),
337  GlobalTH2Parameters.getParameter<double>("ymin"),
338  GlobalTH2Parameters.getParameter<double>("ymax"));
339  GlobalApvCycleDBxTH2->setAxisTitle("APV Cycle (Corrected Absolute Bx % 70)",1);
340  GlobalApvCycleDBxTH2->setAxisTitle("Delta Bunch Crossing Cycle",2);
341 
342  // plot DeltaBX ***************************
343  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1DBxGlobal");
344  HistoName = "DeltaBx";
345  GlobalDBxTH1 = ibooker.book1D(HistoName,HistoName,
346  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
347  GlobalTH1Parameters.getParameter<double>("xmin"),
348  GlobalTH1Parameters.getParameter<double>("xmax"));
349  GlobalDBxTH1->setAxisTitle("Delta Bunch Crossing",1);
350 
351 
352 
353  // plot DeltaBXCycle ***************************
354  edm::ParameterSet DBxCycle = conf_.getParameter<edm::ParameterSet>("TH1DBxCycleGlobal");
355  HistoName = "DeltaBxCycle";
356  GlobalDBxCycleTH1 = ibooker.book1D(HistoName,HistoName,
357  DBxCycle.getParameter<int32_t>("Nbinsx"),
358  DBxCycle.getParameter<double>("xmin"),
359  DBxCycle.getParameter<double>("xmax"));
360  GlobalDBxCycleTH1->setAxisTitle("Delta Bunch Crossing Cycle",1);
361 
362 
363  }
364 
366  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
367  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH2CStripVsCpixel");
368  std::string HistoName = "StripClusVsPixClus";
369  GlobalCStripVsCpix = ibooker.book2D(HistoName,HistoName,
370  GlobalTH2Parameters.getParameter<int32_t>("Nbinsx"),
371  GlobalTH2Parameters.getParameter<double>("xmin"),
372  GlobalTH2Parameters.getParameter<double>("xmax"),
373  GlobalTH2Parameters.getParameter<int32_t>("Nbinsy"),
374  GlobalTH2Parameters.getParameter<double>("ymin"),
375  GlobalTH2Parameters.getParameter<double>("ymax"));
376  GlobalCStripVsCpix->setAxisTitle("Strip Clusters",1);
377  GlobalCStripVsCpix->setAxisTitle("Pix Clusters",2);
378 
379  // Absolute Bunch Crossing ***********************
380  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1ABx_CSCP");
381  HistoName = "AbsoluteBx_CStripVsCpixel";
382  GlobalABXTH1_CSCP = ibooker.book1D(HistoName,HistoName,
383  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
384  GlobalTH1Parameters.getParameter<double>("xmin"),
385  GlobalTH1Parameters.getParameter<double>("xmax"));
386  GlobalABXTH1_CSCP->setAxisTitle("Absolute Bunch Crossing",1);
387  }
388 
390  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
391  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH1MultiplicityRegions");
392  std::string HistoName = "ClusterMultiplicityRegions";
393  PixVsStripMultiplicityRegions = ibooker.book1D(HistoName,HistoName,
394  GlobalTH2Parameters.getParameter<int32_t>("Nbinx"),
395  GlobalTH2Parameters.getParameter<double>("xmin"),
396  GlobalTH2Parameters.getParameter<double>("xmax"));
398  PixVsStripMultiplicityRegions->setBinLabel(1,"Main Diagonal");
399  PixVsStripMultiplicityRegions->setBinLabel(2,"Strip Noise");
400  PixVsStripMultiplicityRegions->setBinLabel(3,"High Strip Noise");
401  PixVsStripMultiplicityRegions->setBinLabel(4,"Beam Background");
402  PixVsStripMultiplicityRegions->setBinLabel(5,"No Strip Clusters");
403  }
404 
406  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
407  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1MainDiagonalPosition");
408  std::string HistoName = "MainDiagonal Position";
409  GlobalMainDiagonalPosition = ibooker.book1D(HistoName,HistoName,
410  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
411  GlobalTH1Parameters.getParameter<double>("xmin"),
412  GlobalTH1Parameters.getParameter<double>("xmax"));
413  GlobalMainDiagonalPosition->setAxisTitle("atan(NPix/(k*NStrip))");
414 
415  //PLOT MainDiagonalPosition_vs_BX ***************************
416  edm::ParameterSet GlobalTProfParameters = conf_.getParameter<edm::ParameterSet>("TProfMainDiagonalPosition");
417  HistoName = "MainDiagonalPosition_vs_BX";
418  GlobalMainDiagonalPosition_vs_BX = ibooker.bookProfile(HistoName, HistoName,
419  GlobalTProfParameters.getParameter<int32_t>("Nbinsx"),
420  GlobalTProfParameters.getParameter<double>("xmin"),
421  GlobalTProfParameters.getParameter<double>("xmax"),
422  GlobalTProfParameters.getParameter<int32_t>("Nbinsy"),
423  GlobalTProfParameters.getParameter<double>("ymin"),
424  GlobalTProfParameters.getParameter<double>("ymax"));
425 
427  GlobalMainDiagonalPosition_vs_BX->setAxisTitle("tan^{-1}(NPix/k*NStrip))", 2);
428 
429 
430  edm::ParameterSet GlobalTH2Parameters = conf_.getParameter<edm::ParameterSet>("TH2MainDiagonalPosition");
431  HistoName = "TH2MainDiagonalPosition_vs_BX";
432  GlobalTH2MainDiagonalPosition_vs_BX = ibooker.book2D(HistoName,HistoName,
433  GlobalTH2Parameters.getParameter<int32_t>("Nbinsx"),
434  GlobalTH2Parameters.getParameter<double>("xmin"),
435  GlobalTH2Parameters.getParameter<double>("xmax"),
436  GlobalTH2Parameters.getParameter<int32_t>("Nbinsy"),
437  GlobalTH2Parameters.getParameter<double>("ymin"),
438  GlobalTH2Parameters.getParameter<double>("ymax"));
440  GlobalTH2MainDiagonalPosition_vs_BX->setAxisTitle("tan^{-1}(NPix/k*NStrip))",2);
441 
442 
443 
444  }
445 
446  // TO BE ADDED !!!
447  /*
448  if ( globalswitchapvcycledbxth2on or globalswitchcstripvscpix or globalswitchMultiRegions or ClusterHisto_ ) {
449  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
450  std::string HistoName = "BPTX rate";
451  BPTXrateTrend = ibooker.bookProfile(HistoName,HistoName, LSBin, LSMin, LSMax, 0, 10000.,"");
452  BPTXrateTrend->getTH1()->SetCanExtend(TH1::kAllAxes);
453  BPTXrateTrend->setAxisTitle("#Lumi section",1);
454  BPTXrateTrend->setAxisTitle("Number of BPTX events per LS",2);
455  }
456  */
457 
459  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
460  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1StripNoise2ApvCycle");
461  std::string HistoName = "StripNoise_ApvCycle";
462  StripNoise2Cycle = ibooker.book1D(HistoName,HistoName,
463  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
464  GlobalTH1Parameters.getParameter<double>("xmin"),
465  GlobalTH1Parameters.getParameter<double>("xmax"));
466  StripNoise2Cycle->setAxisTitle("APV Cycle");
467  }
468 
470  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
471  edm::ParameterSet GlobalTH1Parameters = conf_.getParameter<edm::ParameterSet>("TH1StripNoise3ApvCycle");
472  std::string HistoName = "HighStripNoise_ApvCycle";
473  StripNoise3Cycle = ibooker.book1D(HistoName,HistoName,
474  GlobalTH1Parameters.getParameter<int32_t>("Nbinsx"),
475  GlobalTH1Parameters.getParameter<double>("xmin"),
476  GlobalTH1Parameters.getParameter<double>("xmax"));
477  StripNoise3Cycle->setAxisTitle("APV Cycle");
478  }
479 
481  const char* HistoName = "StripClusVsBXandOrbit";
482  const char* HistoTitle = "Strip cluster multiplicity vs BX mod(70) and Orbit;Event 1 BX mod(70);time [Orb#]";
483  edm::ParameterSet ParametersNclusVsCycleTimeProf2D = conf_.getParameter<edm::ParameterSet>("NclusVsCycleTimeProf2D");
484  NclusVsCycleTimeProf2D = ibooker.bookProfile2D ( HistoName , HistoTitle ,
485  ParametersNclusVsCycleTimeProf2D.getParameter<int32_t>("Nbins"),
486  ParametersNclusVsCycleTimeProf2D.getParameter<double>("xmin"),
487  ParametersNclusVsCycleTimeProf2D.getParameter<double>("xmax"),
488  ParametersNclusVsCycleTimeProf2D.getParameter<int32_t>("Nbinsy"),
489  ParametersNclusVsCycleTimeProf2D.getParameter<double>("ymin"),
490  ParametersNclusVsCycleTimeProf2D.getParameter<double>("ymax"),
491  0 , 0 );
492  if (NclusVsCycleTimeProf2D->kind() == MonitorElement::DQM_KIND_TPROFILE2D) NclusVsCycleTimeProf2D->getTH1()->SetCanExtend(TH1::kAllAxes);
493  }
495  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
496  edm::ParameterSet ParametersClusWidthVsAmpTH2 = conf_.getParameter<edm::ParameterSet>("ClusWidthVsAmpTH2");
497  const char* HistoName = "ClusterWidths_vs_Amplitudes";
498  const char* HistoTitle = "Cluster widths vs amplitudes;Amplitudes (integrated ADC counts);Cluster widths";
499  ClusWidthVsAmpTH2 = ibooker.book2D(HistoName,HistoTitle,
500  ParametersClusWidthVsAmpTH2.getParameter<int32_t>("Nbinsx"),
501  ParametersClusWidthVsAmpTH2.getParameter<double>("xmin"),
502  ParametersClusWidthVsAmpTH2.getParameter<double>("xmax"),
503  ParametersClusWidthVsAmpTH2.getParameter<int32_t>("Nbinsy"),
504  ParametersClusWidthVsAmpTH2.getParameter<double>("ymin"),
505  ParametersClusWidthVsAmpTH2.getParameter<double>("ymax"));
506  }
507 
508  if (ClusterHisto_){
509  ibooker.setCurrentFolder(topFolderName_+"/MechanicalView/");
510  edm::ParameterSet PixelCluster = conf_.getParameter<edm::ParameterSet>("TH1NClusPx");
511  std::string HistoName = "NumberOfClustersInPixel";
512  NumberOfPixelClus = ibooker.book1D(HistoName, HistoName,
513  PixelCluster.getParameter<int32_t>("Nbinsx"),
514  PixelCluster.getParameter<double>("xmin"),
515  PixelCluster.getParameter<double>("xmax"));
516  NumberOfPixelClus->setAxisTitle("# of Clusters in Pixel", 1);
517  NumberOfPixelClus->setAxisTitle("Number of Events", 2);
518  //
519  edm::ParameterSet StripCluster = conf_.getParameter<edm::ParameterSet>("TH1NClusStrip");
520  HistoName = "NumberOfClustersInStrip";
521  NumberOfStripClus = ibooker.book1D(HistoName, HistoName,
522  StripCluster.getParameter<int32_t>("Nbinsx"),
523  StripCluster.getParameter<double>("xmin"),
524  StripCluster.getParameter<double>("xmax"));
525  NumberOfStripClus->setAxisTitle("# of Clusters in Strip", 1);
526  NumberOfStripClus->setAxisTitle("Number of Events", 2);
527 
528  // NumberOfClustersinStrip vs BX PLOT ****************************
529  edm::ParameterSet StripClusterBX = conf_.getParameter<edm::ParameterSet>("TProfNClusStrip");
530  HistoName = "NumberOfClustersInStrip_vs_BX";
531  NumberOfStripClus_vs_BX = ibooker.bookProfile(HistoName, HistoName,
532  StripClusterBX.getParameter<int32_t>("Nbinsx"),
533  StripClusterBX.getParameter<double>("xmin"),
534  StripClusterBX.getParameter<double>("xmax"),
535  StripClusterBX.getParameter<int32_t>("Nbinsy"),
536  StripClusterBX.getParameter<double>("ymin"),
537  StripClusterBX.getParameter<double>("ymax"));
538 
539  NumberOfStripClus_vs_BX->setAxisTitle("Absolute BX", 1);
540  NumberOfStripClus_vs_BX->setAxisTitle("# of Clusters in Strip", 2);
541 
542  // NumberOfClustersinStrip vs BX PLOT ****************************
543  edm::ParameterSet PixelClusterBX = conf_.getParameter<edm::ParameterSet>("TProfNClusPixel");
544  HistoName = "NumberOfClustersInPixel_vs_BX";
545  NumberOfPixelClus_vs_BX = ibooker.bookProfile(HistoName, HistoName,
546  PixelClusterBX.getParameter<int32_t>("Nbinsx"),
547  PixelClusterBX.getParameter<double>("xmin"),
548  PixelClusterBX.getParameter<double>("xmax"),
549  PixelClusterBX.getParameter<int32_t>("Nbinsy"),
550  PixelClusterBX.getParameter<double>("ymin"),
551  PixelClusterBX.getParameter<double>("ymax"));
552 
553  NumberOfPixelClus_vs_BX->setAxisTitle("Absolute BX", 1);
554  NumberOfPixelClus_vs_BX->setAxisTitle("# of Clusters in Pixel", 2);
555 
556  }
557 
558  }//end of if
559 }//end of method
560 
561 //--------------------------------------------------------------------------------------------
562 
564 {
566  unsigned long long cacheID = es.get<SiStripDetCablingRcd>().cacheIdentifier();
567  if (m_cacheID_ != cacheID) {
568  m_cacheID_ = cacheID;
569  edm::LogInfo("SiStripMonitorCluster") <<"SiStripMonitorCluster::bookHistograms: "
570  << " Creating MEs for new Cabling ";
571 
572  createMEs(es , ibooker);
573  }
574  } else if (reset_each_run) {
575  edm::LogInfo("SiStripMonitorCluster") <<"SiStripMonitorCluster::bookHistograms: "
576  << " Resetting MEs ";
577  for (std::map<uint32_t, ModMEs >::const_iterator idet = ModuleMEsMap.begin() ; idet!=ModuleMEsMap.end() ; idet++) {
578  ResetModuleMEs(idet->first);
579  }
580  }
581 
582 }
583 
584 //--------------------------------------------------------------------------------------------
586 {
587  //Retrieve tracker topology from geometry
588  edm::ESHandle<TrackerTopology> tTopoHandle;
589  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
590  const TrackerTopology* const tTopo = tTopoHandle.product();
591 
592  // Filter out events if Trigger Filtering is requested
593  passBPTXfilter_ = ( iEvent.isRealData() and genTriggerEventFlagBPTXfilter_->on() ) ? genTriggerEventFlagBPTXfilter_->accept( iEvent, iSetup) : true;
596  // std::cout << "passBPTXfilter_ ? " << passBPTXfilter_ << std::endl;
597 
598  // Filter out events if DCS Event if requested
599  if (dcsStatus_ && !dcsStatus_->getStatus(iEvent,iSetup)) return;
600 
601  runNb = iEvent.id().run();
602  eventNb++;
603  trendVar = trendVsLs_ ? iEvent.orbitNumber()/262144.0 : iEvent.orbitNumber()/11223.0; // lumisection : seconds
604 
605  int NPixClusters=0, NStripClusters=0, MultiplicityRegion=0;
606  bool isPixValid=false;
607 
608  edm::ESHandle<SiStripNoises> noiseHandle;
609  iSetup.get<SiStripNoisesRcd>().get(noiseHandle);
610 
611  edm::ESHandle<SiStripGain> gainHandle;
612  iSetup.get<SiStripGainRcd>().get(gainHandle);
613 
614  edm::ESHandle<SiStripQuality> qualityHandle;
615  iSetup.get<SiStripQualityRcd>().get(qualityLabel_,qualityHandle);
616 
618 
619  // get collection of DetSetVector of clusters from Event
621  iEvent.getByToken(clusterProducerStripToken_, cluster_detsetvektor);
622 
623  //get pixel clusters
624  edm::Handle< edmNew::DetSetVector<SiPixelCluster> > cluster_detsetvektor_pix;
625  iEvent.getByToken(clusterProducerPixToken_, cluster_detsetvektor_pix);
626 
627  if (!cluster_detsetvektor.isValid()) return;
628 
629  const edmNew::DetSetVector<SiStripCluster> * StrC= cluster_detsetvektor.product();
630  NStripClusters= StrC->data().size();
631 
632  if (cluster_detsetvektor_pix.isValid()){
633  const edmNew::DetSetVector<SiPixelCluster> * PixC= cluster_detsetvektor_pix.product();
634  NPixClusters= PixC->data().size();
635  isPixValid=true;
636  MultiplicityRegion=FindRegion(NStripClusters,NPixClusters);
637 
639  if (globalswitchcstripvscpix) GlobalCStripVsCpix->Fill(NStripClusters,NPixClusters);
640  if (globalswitchmaindiagonalposition && NStripClusters > 0) GlobalMainDiagonalPosition->Fill(atan(NPixClusters/(k0*NStripClusters)));
641 
643  }
644 
645  if (ClusterHisto_){
647  NumberOfPixelClus->Fill(NPixClusters);
648  if ( passBPTXfilter_ and passStripDCSfilter_ )
649  NumberOfStripClus->Fill(NStripClusters);
650  }
651  }
652  // initialise # of clusters to zero
653  for (std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.begin();
654  iSubdet != SubDetMEsMap.end(); iSubdet++) {
655  iSubdet->second.totNClusters = 0;
656  }
657 
658  SiStripFolderOrganizer folder_organizer;
659  bool found_layer_me = false;
660  for (std::map<std::string, std::vector< uint32_t > >::const_iterator iterLayer = LayerDetMap.begin();
661  iterLayer != LayerDetMap.end(); iterLayer++) {
662 
663  std::string layer_label = iterLayer->first;
664 
665  int ncluster_layer = 0;
666  std::map<std::string, LayerMEs>::iterator iLayerME = LayerMEsMap.find(layer_label);
667 
668  //get Layer MEs
669  LayerMEs layer_single;
670  if(iLayerME != LayerMEsMap.end()) {
671  layer_single = iLayerME->second;
672  found_layer_me = true;
673  }
674 
675 
676  int ncluster_ring[20] = {0};
677 
678  bool found_module_me = false;
679  uint16_t iDet = 0;
680  std::string subdet_label = "";
681  // loop over all modules in the layer
682  for (std::vector< uint32_t >::const_iterator iterDets = iterLayer->second.begin() ;
683  iterDets != iterLayer->second.end() ; iterDets++) {
684  iDet++;
685  // detid and type of ME
686  uint32_t detid = (*iterDets);
687 
688  // Get SubDet label once
689  if (subdet_label.size() == 0) subdet_label = folder_organizer.getSubDetFolderAndTag(detid, tTopo).second;
690 
691  // DetId and corresponding set of MEs
692  ModMEs mod_single;
693  if (Mod_On_) {
694  std::map<uint32_t, ModMEs >::iterator imodME = ModuleMEsMap.find(detid);
695  if (imodME != ModuleMEsMap.end()) {
696  mod_single = imodME->second;
697  found_module_me = true;
698  }
699  } else found_module_me = false;
700 
701  edmNew::DetSetVector<SiStripCluster>::const_iterator isearch = cluster_detsetvektor->find(detid); // search clusters of detid
702 
703  if(isearch==cluster_detsetvektor->end()){
704  if(found_module_me && moduleswitchncluson && (mod_single.NumberOfClusters)){
705  (mod_single.NumberOfClusters)->Fill(0.); // no clusters for this detector module,fill histogram with 0
706  }
707  if(clustertkhistomapon) tkmapcluster->fill(detid,0.);
709  if (found_layer_me && layerswitchnumclusterprofon) layer_single.LayerNumberOfClusterProfile->Fill(iDet, 0.0);
710  continue; // no clusters for this detid => jump to next step of loop
711  }
712 
713  //cluster_detset is a structure, cluster_detset.data is a std::vector<SiStripCluster>, cluster_detset.id is uint32_t
714  // edmNew::DetSet<SiStripCluster> cluster_detset = (*cluster_detsetvektor)[detid]; // the statement above makes sure there exists an element with 'detid'
715  edmNew::DetSet<SiStripCluster> cluster_detset = (*isearch);
716 
717  // Filling TkHistoMap with number of clusters for each module
718  if(clustertkhistomapon) {
719  tkmapcluster->fill(detid,static_cast<float>(cluster_detset.size()));
720  }
721 
722  if(moduleswitchncluson && found_module_me && (mod_single.NumberOfClusters != NULL)){ // nr. of clusters per module
723  (mod_single.NumberOfClusters)->Fill(static_cast<float>(cluster_detset.size()));
724  }
725 
726  if (found_layer_me && layerswitchnumclusterprofon)
727  layer_single.LayerNumberOfClusterProfile->Fill(iDet, static_cast<float>(cluster_detset.size()));
728  ncluster_layer += cluster_detset.size();
729 
730  short total_clusterized_strips = 0;
731 
732  SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detid);
733  SiStripApvGain::Range detGainRange = gainHandle->getRange(detid);
734  SiStripQuality::Range qualityRange = qualityHandle->getRange(detid);
735 
736  for(edmNew::DetSet<SiStripCluster>::const_iterator clusterIter = cluster_detset.begin(); clusterIter!= cluster_detset.end(); clusterIter++){
737 
738  const auto & ampls = clusterIter->amplitudes();
739  // cluster position
740  float cluster_position = clusterIter->barycenter();
741  // start defined as nr. of first strip beloning to the cluster
742  short cluster_start = clusterIter->firstStrip();
743  // width defined as nr. of strips that belong to cluster
744  short cluster_width = ampls.size();
745  // add nr of strips of this cluster to total nr. of clusterized strips
746  total_clusterized_strips = total_clusterized_strips + cluster_width;
747 
748  if(clusterchtkhistomapon) tkmapclusterch->fill(detid,static_cast<float>(clusterIter->charge()));
749 
750  // cluster signal and noise from the amplitudes
751  float cluster_signal = 0.0;
752  float cluster_noise = 0.0;
753  int nrnonzeroamplitudes = 0;
754  float noise2 = 0.0;
755  float noise = 0.0;
756  for(uint iamp=0; iamp<ampls.size(); iamp++){
757  if(ampls[iamp]>0){ // nonzero amplitude
758  cluster_signal += ampls[iamp];
759  if(!qualityHandle->IsStripBad(qualityRange, clusterIter->firstStrip()+iamp)){
760  noise = noiseHandle->getNoise(clusterIter->firstStrip()+iamp,detNoiseRange)/gainHandle->getStripGain(clusterIter->firstStrip()+iamp, detGainRange);
761  }
762  noise2 += noise*noise;
763  nrnonzeroamplitudes++;
764  }
765  } // End loop over cluster amplitude
766 
767  if (nrnonzeroamplitudes > 0) cluster_noise = sqrt(noise2/nrnonzeroamplitudes);
768 
769  if( applyClusterQuality_ &&
770  (cluster_signal/cluster_noise < sToNLowerLimit_ ||
771  cluster_signal/cluster_noise > sToNUpperLimit_ ||
772  cluster_width < widthLowerLimit_ ||
773  cluster_width > widthUpperLimit_) ) continue;
774 
775  ClusterProperties cluster_properties;
776  cluster_properties.charge = cluster_signal;
777  cluster_properties.position = cluster_position;
778  cluster_properties.start = cluster_start;
779  cluster_properties.width = cluster_width;
780  cluster_properties.noise = cluster_noise;
781 
782  // Fill Module Level MEs
783  if (found_module_me) fillModuleMEs(mod_single, cluster_properties);
784 
785  // Fill Layer Level MEs
786  if (found_layer_me) {
787  fillLayerMEs(layer_single, cluster_properties);
789  layer_single.LayerClusterWidthProfile->Fill(iDet, cluster_width);
790  }
791 
793  {
794  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
795  if(iSubdet != SubDetMEsMap.end())
796  {
797  if (subdetswitchcluschargeon) iSubdet->second.SubDetClusterChargeTH1->Fill(cluster_signal);
798  if (subdetswitchcluswidthon) iSubdet->second.SubDetClusterWidthTH1->Fill(cluster_width);
799  }
800  }
801 
802 
804  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
805  if(iSubdet != SubDetMEsMap.end()) iSubdet->second.SubDetClusWidthVsAmpTH2->Fill(cluster_signal, cluster_width);
806  }
807 
809  ClusWidthVsAmpTH2->Fill(cluster_signal, cluster_width);
810  }
811 
812  if (subdetswitchtotclusprofon && (subdet_label.find("TID")!=std::string::npos || subdet_label.find("TEC")!=std::string::npos)){
813  std::pair<std::string,int32_t> det_ring_pair = folder_organizer.GetSubDetAndLayer(detid,tTopo,true);
814  ncluster_ring[std::abs(det_ring_pair.second)] ++ ;
815  }
816 
817  } // end loop over clusters
818 
820  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
821  std::pair<std::string,int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detid, tTopo);
822  iSubdet->second.SubDetNumberOfClusterPerLayerTrend->Fill(trendVar,std::abs(det_layer_pair.second), ncluster_layer);
823  }
824 
825  if (subdetswitchtotclusprofon && (subdet_label.find("TID")!=std::string::npos || subdet_label.find("TEC")!=std::string::npos)){
826  std::pair<std::string,int32_t> det_ring_pair = folder_organizer.GetSubDetAndLayer(detid,tTopo,true);
827  layer_single.LayerNumberOfClusterPerRingTrend->Fill(trendVar, std::abs(det_ring_pair.second), ncluster_ring[std::abs(det_ring_pair.second)]);
828  }
829 
830  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
831  float local_occupancy = static_cast<float>(total_clusterized_strips)/static_cast<float>(total_nr_strips);
832  if (found_module_me) {
833  if(moduleswitchnrclusterizedstrip && mod_single.NrOfClusterizedStrips ){ // nr of clusterized strips
834  mod_single.NrOfClusterizedStrips->Fill(static_cast<float>(total_clusterized_strips));
835  }
836 
837  if(moduleswitchlocaloccupancy && mod_single.ModuleLocalOccupancy ){ // Occupancy
838  mod_single.ModuleLocalOccupancy->Fill(local_occupancy);
839  }
840  }
841  if (layerswitchlocaloccupancy && found_layer_me && layer_single.LayerLocalOccupancy) {
842  fillME(layer_single.LayerLocalOccupancy,local_occupancy);
843  if (createTrendMEs)
844  fillME(layer_single.LayerLocalOccupancyTrend,trendVar,local_occupancy);
845  }
846  }
847 
849  fillME(layer_single.LayerNumberOfClusterTrend,trendVar,ncluster_layer);
850 
851  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
852  if(iSubdet != SubDetMEsMap.end()) iSubdet->second.totNClusters += ncluster_layer;
853  }
854 
855 
856 
857 
858 
859 
860  // EventHistory
861  edm::Handle<EventWithHistory> event_history;
862  iEvent.getByToken(historyProducerToken_,event_history);
863 
864  // Phase of APV
865  edm::Handle<APVCyclePhaseCollection> apv_phase_collection;
866  iEvent.getByToken(apvPhaseProducerToken_,apv_phase_collection);
867 
868  if (event_history.isValid()
869  && !event_history.failedToGet()
870  && apv_phase_collection.isValid()
871  && !apv_phase_collection.failedToGet()) {
872 
873 
874  long long dbx = event_history->deltaBX();
875  long long tbx = event_history->absoluteBX();
876 
877  bool global_histo_filled = false;
878  bool MultiplicityRegion_Vs_APVcycle_filled=false;
879 
880  // plot n 2
883  }
884  // plot n 2
885 
886  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
887  it != SubDetMEsMap.end(); it++) {
888  std::string sdet = it->first;
889  //std::string sdet = sdet_tag.substr(0,sdet_tag.find_first_of("_"));
890  SubDetMEs sdetmes = it->second;
891 
892  int the_phase = APVCyclePhaseCollection::invalid;
893  long long tbx_corr = tbx;
894 
895 
896  if (SubDetPhasePartMap.find(sdet) != SubDetPhasePartMap.end()) the_phase = apv_phase_collection->getPhase(SubDetPhasePartMap[sdet]);
897  if(the_phase==APVCyclePhaseCollection::nopartition ||
900  the_phase=30;
901  //std::cout << " subdet " << it->first << " not valid" << " MR " << MultiplicityRegion <<std::endl;
902  }
903  tbx_corr -= the_phase;
904 
905  long long dbxincycle = event_history->deltaBXinCycle(the_phase);
906  //std::cout<<"dbx in cycle: " << dbxincycle << std::endl;
907  if (globalswitchapvcycledbxth2on && !global_histo_filled) {
908  GlobalApvCycleDBxTH2->Fill(tbx_corr%70,dbx);
909  GlobalDBxTH1->Fill(dbx);
910  GlobalDBxCycleTH1->Fill(dbxincycle);
911  global_histo_filled = true;
912  }
913 
914 
915  // Fill MainDiagonalPosition plots ***************
916  if (cluster_detsetvektor_pix.isValid()){
917  if (ClusterHisto_){
918  if ( passBPTXfilter_ and passStripDCSfilter_ ){
919  NumberOfStripClus_vs_BX->Fill(tbx%3564,NStripClusters);
920  if(passPixelDCSfilter_ ){
921  NumberOfPixelClus_vs_BX->Fill(tbx%3564,NPixClusters);
922  if (globalswitchmaindiagonalposition && NStripClusters > 0){
923  GlobalMainDiagonalPosition_vs_BX->Fill(tbx%3564,atan(NPixClusters/(k0*NStripClusters)));
924  GlobalTH2MainDiagonalPosition_vs_BX->Fill(tbx%3564,atan(NPixClusters/(k0*NStripClusters)));
925  }
926  }
927 
928  }
929  }
930  }
931 
932  if (isPixValid && !MultiplicityRegion_Vs_APVcycle_filled){
933  if (globalswitchstripnoise2apvcycle && MultiplicityRegion==2) {StripNoise2Cycle->Fill(tbx_corr%70);}
934  if (globalswitchstripnoise3apvcycle && MultiplicityRegion==3) {StripNoise3Cycle->Fill(tbx_corr%70);}
935  MultiplicityRegion_Vs_APVcycle_filled=true;
936  }
937 
939  sdetmes.SubDetTotClusterTH1->Fill(sdetmes.totNClusters);
943  sdetmes.SubDetClusterApvProf->Fill(tbx_corr%70,sdetmes.totNClusters);
945  sdetmes.SubDetClusterApvTH2->Fill(tbx_corr%70,sdetmes.totNClusters);
947  sdetmes.SubDetClusterDBxCycleProf->Fill(dbxincycle,sdetmes.totNClusters);
948  }
950  sdetmes.SubDetApvDBxProf2->Fill(tbx_corr%70,dbx,sdetmes.totNClusters);
951  }
952 
954  {
955  long long tbx_corr = tbx;
956  int the_phase = apv_phase_collection->getPhase("All");
957 
958  if( the_phase == APVCyclePhaseCollection::nopartition ||
960  the_phase == APVCyclePhaseCollection::invalid )
961  the_phase=30;
962 
963  tbx_corr -= the_phase;
964 
965  NclusVsCycleTimeProf2D->Fill( tbx_corr%70 , (int)event_history->_orbit , NStripClusters );
966  }
967  }
968 }
969 //
970 // -- Reset MEs
971 //------------------------------------------------------------------------------
973  std::map<uint32_t, ModMEs >::iterator pos = ModuleMEsMap.find(idet);
974  ModMEs mod_me = pos->second;
975 
987 }
988 //
989 // -- Create Module Level MEs
990 //
991 void SiStripMonitorCluster::createModuleMEs(ModMEs& mod_single, uint32_t detid , DQMStore::IBooker & ibooker) {
992 
993  // use SistripHistoId for producing histogram id (and title)
994  SiStripHistoId hidmanager;
995  std::string hid;
996 
997  //nr. of clusters per module
998  if(moduleswitchncluson) {
999  hid = hidmanager.createHistoId("NumberOfClusters","det",detid);
1000  mod_single.NumberOfClusters = bookME1D("TH1nClusters", hid.c_str() , ibooker);
1001  ibooker.tag(mod_single.NumberOfClusters, detid);
1002  mod_single.NumberOfClusters->setAxisTitle("number of clusters in one detector module");
1003  mod_single.NumberOfClusters->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1004  }
1005 
1006  //ClusterPosition
1007  if(moduleswitchclusposon) {
1008  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
1009  hid = hidmanager.createHistoId("ClusterPosition","det",detid);
1010  mod_single.ClusterPosition = ibooker.book1D(hid, hid, total_nr_strips, 0.5, total_nr_strips+0.5);
1011  ibooker.tag(mod_single.ClusterPosition, detid);
1012  mod_single.ClusterPosition->setAxisTitle("cluster position [strip number +0.5]");
1013  }
1014 
1015  //ClusterDigiPosition
1017  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
1018  hid = hidmanager.createHistoId("ClusterDigiPosition","det",detid);
1019  mod_single.ClusterDigiPosition = ibooker.book1D(hid, hid, total_nr_strips, 0.5, total_nr_strips+0.5);
1020  ibooker.tag(mod_single.ClusterDigiPosition, detid);
1021  mod_single.ClusterDigiPosition->setAxisTitle("digi in cluster position [strip number +0.5]");
1022  }
1023 
1024  //ClusterWidth
1026  hid = hidmanager.createHistoId("ClusterWidth","det",detid);
1027  mod_single.ClusterWidth = bookME1D("TH1ClusterWidth", hid.c_str() , ibooker);
1028  ibooker.tag(mod_single.ClusterWidth, detid);
1029  mod_single.ClusterWidth->setAxisTitle("cluster width [nr strips]");
1030  }
1031 
1032  //ClusterCharge
1034  hid = hidmanager.createHistoId("ClusterCharge","det",detid);
1035  mod_single.ClusterCharge = bookME1D("TH1ClusterCharge", hid.c_str() , ibooker );
1036  ibooker.tag(mod_single.ClusterCharge, detid);
1037  mod_single.ClusterCharge->setAxisTitle("cluster charge [ADC]");
1038  }
1039 
1040  //ClusterNoise
1042  hid = hidmanager.createHistoId("ClusterNoise","det",detid);
1043  mod_single.ClusterNoise = bookME1D("TH1ClusterNoise", hid.c_str() , ibooker );
1044  ibooker.tag(mod_single.ClusterNoise, detid);
1045  mod_single.ClusterNoise->setAxisTitle("cluster noise");
1046  }
1047 
1048  //ClusterSignalOverNoise
1050  hid = hidmanager.createHistoId("ClusterSignalOverNoise","det",detid);
1051  mod_single.ClusterSignalOverNoise = bookME1D("TH1ClusterStoN", hid.c_str() , ibooker);
1052  ibooker.tag(mod_single.ClusterSignalOverNoise, detid);
1053  mod_single.ClusterSignalOverNoise->setAxisTitle("ratio of signal to noise for each cluster");
1054  }
1055 
1056  //ClusterSignalOverNoiseVsPos
1058  hid = hidmanager.createHistoId("ClusterSignalOverNoiseVsPos","det",detid);
1059  Parameters = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoNVsPos");
1060  mod_single.ClusterSignalOverNoiseVsPos= ibooker.bookProfile(hid.c_str(),hid.c_str(),
1061  Parameters.getParameter<int32_t>("Nbinx"),
1062  Parameters.getParameter<double>("xmin"),
1063  Parameters.getParameter<double>("xmax"),
1064  Parameters.getParameter<int32_t>("Nbiny"),
1065  Parameters.getParameter<double>("ymin"),
1066  Parameters.getParameter<double>("ymax")
1067  );
1068  ibooker.tag(mod_single.ClusterSignalOverNoiseVsPos, detid);
1069  mod_single.ClusterSignalOverNoiseVsPos->setAxisTitle("pos");
1070  }
1071 
1072  //ModuleLocalOccupancy
1074  hid = hidmanager.createHistoId("ClusterLocalOccupancy","det",detid);
1075  mod_single.ModuleLocalOccupancy = bookME1D("TH1ModuleLocalOccupancy", hid.c_str() , ibooker);
1076  ibooker.tag(mod_single.ModuleLocalOccupancy, detid);
1077  mod_single.ModuleLocalOccupancy->setAxisTitle("module local occupancy [% of clusterized strips]");
1078  }
1079 
1080  //NrOfClusterizedStrips
1082  hid = hidmanager.createHistoId("NrOfClusterizedStrips","det",detid);
1083  mod_single.NrOfClusterizedStrips = bookME1D("TH1NrOfClusterizedStrips", hid.c_str() , ibooker );
1084  ibooker.tag(mod_single.NrOfClusterizedStrips, detid);
1085  mod_single.NrOfClusterizedStrips->setAxisTitle("number of clusterized strips");
1086  }
1087 
1089  hid = hidmanager.createHistoId("ClusterWidths_vs_Amplitudes","det",detid);
1090  Parameters = conf_.getParameter<edm::ParameterSet>("ClusWidthVsAmpTH2");
1091  int32_t Nbinsx = Parameters.getParameter<int32_t>("Nbinsx");
1092  Nbinsx = Nbinsx/2; //Without this "rebinning" the job is killed on lxplus. We think it's due to the high memory needed to create all those histograms.
1093  mod_single.Module_ClusWidthVsAmpTH2 = ibooker.book2D(hid.c_str() , hid.c_str(),
1094  Nbinsx,
1095  Parameters.getParameter<double>("xmin"),
1096  Parameters.getParameter<double>("xmax"),
1097  Parameters.getParameter<int32_t>("Nbinsy"),
1098  Parameters.getParameter<double>("ymin"),
1099  Parameters.getParameter<double>("ymax")
1100  );
1101  ibooker.tag(mod_single.Module_ClusWidthVsAmpTH2, detid);
1102  mod_single.Module_ClusWidthVsAmpTH2->setAxisTitle("Amplitudes (integrated ADC counts)",1);
1103  mod_single.Module_ClusWidthVsAmpTH2->setAxisTitle("Cluster widths",2);
1104  }
1105 
1106 }
1107 //
1108 // -- Create Module Level MEs
1109 //
1111 
1112  SiStripHistoId hidmanager;
1113 
1114  LayerMEs layerMEs;
1115  layerMEs.LayerClusterStoN = 0;
1116  layerMEs.LayerClusterStoNTrend = 0;
1117  layerMEs.LayerClusterCharge = 0;
1118  layerMEs.LayerClusterChargeTrend = 0;
1119  layerMEs.LayerClusterNoise = 0;
1120  layerMEs.LayerClusterNoiseTrend = 0;
1121  layerMEs.LayerClusterWidth = 0;
1122  layerMEs.LayerClusterWidthTrend = 0;
1123  layerMEs.LayerLocalOccupancy = 0;
1124  layerMEs.LayerLocalOccupancyTrend = 0;
1125  layerMEs.LayerNumberOfClusterProfile = 0;
1126  layerMEs.LayerNumberOfClusterTrend = 0;
1127  layerMEs.LayerNumberOfClusterPerRingTrend = 0;
1128  layerMEs.LayerClusterWidthProfile = 0;
1129  layerMEs.LayerClusWidthVsAmpTH2 = 0;
1130  layerMEs.LayerClusterPosition = 0;
1131 
1132  //Cluster Width
1134  layerMEs.LayerClusterWidth=bookME1D("TH1ClusterWidth", hidmanager.createHistoLayer("Summary_ClusterWidth","layer",label,"").c_str() , ibooker );
1135  if (createTrendMEs)
1136  layerMEs.LayerClusterWidthTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterWidth","layer",label,"").c_str() , ibooker );
1137  }
1138 
1139  //Cluster Noise
1141  layerMEs.LayerClusterNoise=bookME1D("TH1ClusterNoise", hidmanager.createHistoLayer("Summary_ClusterNoise","layer",label,"").c_str() , ibooker );
1142  if (createTrendMEs)
1143  layerMEs.LayerClusterNoiseTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterNoise","layer",label,"").c_str() , ibooker);
1144  }
1145 
1146  //Cluster Charge
1148  layerMEs.LayerClusterCharge=bookME1D("TH1ClusterCharge", hidmanager.createHistoLayer("Summary_ClusterCharge","layer",label,"").c_str() , ibooker );
1149  if (createTrendMEs)
1150  layerMEs.LayerClusterChargeTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterCharge","layer",label,"").c_str(),ibooker);
1151  }
1152 
1153  //Cluster StoN
1154  if(layerswitchclusstonon) {
1155  layerMEs.LayerClusterStoN=bookME1D("TH1ClusterStoN", hidmanager.createHistoLayer("Summary_ClusterSignalOverNoise","layer",label,"").c_str() , ibooker );
1156  if (createTrendMEs)
1157  layerMEs.LayerClusterStoNTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterSignalOverNoise","layer",label,"").c_str(),ibooker);
1158  }
1159 
1160  //Cluster Occupancy
1162  layerMEs.LayerLocalOccupancy=bookME1D("TH1ModuleLocalOccupancy", hidmanager.createHistoLayer("Summary_ClusterLocalOccupancy","layer",label,"").c_str() , ibooker );
1163  if (createTrendMEs)
1164  layerMEs.LayerLocalOccupancyTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterLocalOccupancy","layer",label,"").c_str(),ibooker);
1165  }
1166 
1167  // # of Cluster Profile
1169  std::string hid = hidmanager.createHistoLayer("NumberOfClusterProfile","layer",label,"");
1170  layerMEs.LayerNumberOfClusterProfile = ibooker.bookProfile(hid, hid, ndets, 0.5, ndets+0.5,21, -0.5, 20.5);
1171  }
1172 
1173  // # of Cluster Trend
1175  layerMEs.LayerNumberOfClusterTrend = bookMETrend(hidmanager.createHistoLayer("NumberOfClusterTrend","layer",label,"").c_str(),ibooker);
1176 
1177  if (label.find("TID")!=std::string::npos || label.find("TEC")!=std::string::npos){
1178  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("NumberOfClusterPerRingVsTrendVar");
1179 
1180  layerMEs.LayerNumberOfClusterPerRingTrend = ibooker.bookProfile2D("NumberOfClusterPerRingVsTrendVar", hidmanager.createHistoLayer("NumberOfClusterPerRing_vs_TrendVar","layer",label,"").c_str(),
1181  Parameters.getParameter<int32_t>("Nbinsx"),
1182  Parameters.getParameter<double>("xmin"),
1183  Parameters.getParameter<double>("xmax"),
1184  Parameters.getParameter<int32_t>("Nbinsy"),
1185  Parameters.getParameter<double>("ymin"),
1186  Parameters.getParameter<double>("ymax"), 0, 0, "" );
1187 
1188 
1189  }
1190  }
1191 
1192  // Cluster Width Profile
1194  std::string hid = hidmanager.createHistoLayer("ClusterWidthProfile","layer",label,"");
1195  layerMEs.LayerClusterWidthProfile = ibooker.bookProfile(hid, hid, ndets, 0.5, ndets+0.5, 20, -0.5, 19.5);
1196  }
1197 
1199  layerMEs.LayerClusWidthVsAmpTH2=bookME2D("ClusWidthVsAmpTH2", hidmanager.createHistoLayer("ClusterWidths_vs_Amplitudes","layer",label,"").c_str() , ibooker );
1200  }
1201 
1202  // Cluster Position
1203  if (layerswitchclusposon) {
1204  std::string hid = hidmanager.createHistoLayer("ClusterPosition","layer",label,"");
1205  layerMEs.LayerClusterPosition=ibooker.book1D(hid, hid, 128*6, 0.5, 128*6+0.5);
1206  }
1207 
1208  LayerMEsMap[label]=layerMEs;
1209 }
1210 //
1211 // -- Create SubDetector MEs
1212 //
1214 
1215  SubDetMEs subdetMEs;
1216  subdetMEs.totNClusters = 0;
1217  subdetMEs.SubDetTotClusterTH1 = 0;
1218  subdetMEs.SubDetTotClusterProf = 0;
1219  subdetMEs.SubDetClusterApvProf = 0;
1220  subdetMEs.SubDetClusterApvTH2 = 0;
1221  subdetMEs.SubDetClusterDBxCycleProf = 0;
1222  subdetMEs.SubDetApvDBxProf2 = 0;
1223  subdetMEs.SubDetClusterChargeTH1 = 0;
1224  subdetMEs.SubDetClusterWidthTH1 = 0;
1225  subdetMEs.SubDetClusWidthVsAmpTH2 = 0;
1226  subdetMEs.SubDetNumberOfClusterPerLayerTrend = 0;
1227 
1229  // cluster charge
1231  HistoName = "ClusterCharge__" + label;
1232  subdetMEs.SubDetClusterChargeTH1 = bookME1D("TH1ClusterCharge",HistoName.c_str() , ibooker);
1233  subdetMEs.SubDetClusterChargeTH1->setAxisTitle("Cluster charge [ADC counts]");
1234  subdetMEs.SubDetClusterChargeTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1235  }
1236  // cluster width
1238  HistoName = "ClusterWidth__" + label;
1239  subdetMEs.SubDetClusterWidthTH1 = bookME1D("TH1ClusterWidth",HistoName.c_str() , ibooker);
1240  subdetMEs.SubDetClusterWidthTH1->setAxisTitle("Cluster width [strips]");
1241  subdetMEs.SubDetClusterWidthTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1242  }
1243  // Total Number of Cluster - 1D
1245  HistoName = "TotalNumberOfCluster__" + label;
1246  subdetMEs.SubDetTotClusterTH1 = bookME1D("TH1TotalNumberOfClusters",HistoName.c_str() , ibooker);
1247  subdetMEs.SubDetTotClusterTH1->setAxisTitle("Total number of clusters in subdetector");
1248  subdetMEs.SubDetTotClusterTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1249  }
1250  // Total Number of Cluster vs Time - Profile
1253  HistoName = "TotalNumberOfClusterProfile__" + label;
1254  subdetMEs.SubDetTotClusterProf = ibooker.bookProfile(HistoName,HistoName,
1255  Parameters.getParameter<int32_t>("Nbins"),
1256  Parameters.getParameter<double>("xmin"),
1257  Parameters.getParameter<double>("xmax"),
1258  0 , 0 , "" );
1259  subdetMEs.SubDetTotClusterProf->setAxisTitle(Parameters.getParameter<std::string>("xaxis"),1);
1260  if (subdetMEs.SubDetTotClusterProf->kind() == MonitorElement::DQM_KIND_TPROFILE) subdetMEs.SubDetTotClusterProf->getTH1()->SetCanExtend(TH1::kAllAxes);
1261 
1262  Parameters = conf_.getParameter<edm::ParameterSet>("NumberOfClusterPerLayerTrendVar");
1263  HistoName = "TotalNumberOfClusterPerLayer__" + label;
1264  subdetMEs.SubDetNumberOfClusterPerLayerTrend = ibooker.bookProfile2D("NumberOfClusterPerLayerTrendVar", HistoName.c_str(),
1265  Parameters.getParameter<int32_t>("Nbinsx"),
1266  Parameters.getParameter<double>("xmin"),
1267  Parameters.getParameter<double>("xmax"),
1268  Parameters.getParameter<int32_t>("Nbinsy"),
1269  Parameters.getParameter<double>("ymin"),
1270  Parameters.getParameter<double>("ymax"), 0, 0, "" );
1271  subdetMEs.SubDetNumberOfClusterPerLayerTrend->setAxisTitle("Lumisection",1);
1272  subdetMEs.SubDetNumberOfClusterPerLayerTrend->setAxisTitle("Layer Number",2);
1273  }
1274 
1275  // Total Number of Cluster vs APV cycle - Profile
1277  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfClustersApvCycle");
1278  HistoName = "Cluster_vs_ApvCycle__" + label;
1279  subdetMEs.SubDetClusterApvProf=ibooker.bookProfile(HistoName,HistoName,
1280  Parameters.getParameter<int32_t>("Nbins"),
1281  Parameters.getParameter<double>("xmin"),
1282  Parameters.getParameter<double>("xmax"),
1283  200, //that parameter should not be there !?
1284  Parameters.getParameter<double>("ymin"),
1285  Parameters.getParameter<double>("ymax"),
1286  "" );
1287  subdetMEs.SubDetClusterApvProf->setAxisTitle("Apv Cycle (Corrected Absolute Bx % 70)",1);
1288  }
1289 
1290  // Total Number of Clusters vs ApvCycle - 2D
1293  HistoName = "Cluster_vs_ApvCycle_2D__" + label;
1294  // Adjusting the scale for 2D histogram
1295  double h2ymax = 9999.0;
1296  double yfact = Parameters.getParameter<double>("yfactor");
1297  if(label.find("TIB") != std::string::npos) h2ymax = (6984.*256.)*yfact;
1298  else if (label.find("TID") != std::string::npos) h2ymax = (2208.*256.)*yfact;
1299  else if (label.find("TOB") != std::string::npos) h2ymax = (12906.*256.)*yfact;
1300  else if (label.find("TEC") != std::string::npos) h2ymax = (7552.*2.*256.)*yfact;
1301 
1302  subdetMEs.SubDetClusterApvTH2=ibooker.book2D(HistoName,HistoName,
1303  Parameters.getParameter<int32_t>("Nbinsx"),
1304  Parameters.getParameter<double>("xmin"),
1305  Parameters.getParameter<double>("xmax"),
1306  Parameters.getParameter<int32_t>("Nbinsy"),
1307  Parameters.getParameter<double>("ymin"),
1308  h2ymax);
1309  subdetMEs.SubDetClusterApvTH2->setAxisTitle("Apv Cycle (Corrected Absolute Bx % 70))",1);
1310  subdetMEs.SubDetClusterApvTH2->setAxisTitle("Total # of Clusters",2);
1311 
1312  }
1313 
1314  // Cluster widths vs amplitudes - 2D
1317  HistoName = "ClusterWidths_vs_Amplitudes__" + label;
1318  subdetMEs.SubDetClusWidthVsAmpTH2=ibooker.book2D(HistoName,HistoName,
1319  Parameters.getParameter<int32_t>("Nbinsx"),
1320  Parameters.getParameter<double>("xmin"),
1321  Parameters.getParameter<double>("xmax"),
1322  Parameters.getParameter<int32_t>("Nbinsy"),
1323  Parameters.getParameter<double>("ymin"),
1324  Parameters.getParameter<double>("ymax"));
1325  subdetMEs.SubDetClusWidthVsAmpTH2->setAxisTitle("Amplitudes (integrated ADC counts)",1);
1326  subdetMEs.SubDetClusWidthVsAmpTH2->setAxisTitle("Cluster widths",2);
1327 
1328  }
1329 
1330 
1331 
1332  // Total Number of Cluster vs DeltaBxCycle - Profile
1334  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfClustersVsDBxCycle");
1335  HistoName = "Cluster_vs_DeltaBxCycle__" + label;
1336  subdetMEs.SubDetClusterDBxCycleProf = ibooker.bookProfile(HistoName,HistoName,
1337  Parameters.getParameter<int32_t>("Nbins"),
1338  Parameters.getParameter<double>("xmin"),
1339  Parameters.getParameter<double>("xmax"),
1340  200, //that parameter should not be there !?
1341  Parameters.getParameter<double>("ymin"),
1342  Parameters.getParameter<double>("ymax"),
1343  "" );
1344  subdetMEs.SubDetClusterDBxCycleProf->setAxisTitle("Delta Bunch Crossing Cycle",1);
1345  }
1346  // DeltaBx vs ApvCycle - 2DProfile
1349  HistoName = "DeltaBx_vs_ApvCycle__" + label;
1350  subdetMEs.SubDetApvDBxProf2 = ibooker.bookProfile2D(HistoName,HistoName,
1351  Parameters.getParameter<int32_t>("Nbinsx"),
1352  Parameters.getParameter<double>("xmin"),
1353  Parameters.getParameter<double>("xmax"),
1354  Parameters.getParameter<int32_t>("Nbinsy"),
1355  Parameters.getParameter<double>("ymin"),
1356  Parameters.getParameter<double>("ymax"),
1357  Parameters.getParameter<double>("zmin"),
1358  Parameters.getParameter<double>("zmax"),
1359  "" );
1360  subdetMEs.SubDetApvDBxProf2->setAxisTitle("APV Cycle (Corrected Absolute Bx % 70)",1);
1361  subdetMEs.SubDetApvDBxProf2->setAxisTitle("Delta Bunch Crossing Cycle",2);
1362  }
1363  SubDetMEsMap[label]=subdetMEs;
1364 }
1365 
1366 //
1367 // -- Fill Module Level Histograms
1368 //
1370 
1371  if(moduleswitchclusposon && (mod_mes.ClusterPosition)) // position of cluster
1372  (mod_mes.ClusterPosition)->Fill(cluster.position);
1373 
1374  // position of digis in cluster
1376  for(int ipos=cluster.start+1; ipos<=cluster.start+cluster.width; ipos++){
1377  (mod_mes.ClusterDigiPosition)->Fill(ipos);
1378  }
1379  }
1380 
1381  if(moduleswitchcluswidthon && (mod_mes.ClusterWidth)) // width of cluster
1382  (mod_mes.ClusterWidth)->Fill(static_cast<float>(cluster.width));
1383 
1384  if(moduleswitchclusstonon && (mod_mes.ClusterSignalOverNoise)) {// SignalToNoise
1385  if (cluster.noise > 0)
1386  (mod_mes.ClusterSignalOverNoise)->Fill(cluster.charge/cluster.noise);
1387  }
1388 
1389  if(moduleswitchclusstonVsposon && (mod_mes.ClusterSignalOverNoiseVsPos)) {// SignalToNoise
1390  if (cluster.noise > 0)
1391  (mod_mes.ClusterSignalOverNoiseVsPos)->Fill(cluster.position,cluster.charge/cluster.noise);
1392  }
1393 
1394  if(moduleswitchclusnoiseon && (mod_mes.ClusterNoise)) // Noise
1395  (mod_mes.ClusterNoise)->Fill(cluster.noise);
1396 
1397  if(moduleswitchcluschargeon && (mod_mes.ClusterCharge)) // charge of cluster
1398  (mod_mes.ClusterCharge)->Fill(cluster.charge);
1399 
1401 }
1402 //
1403 // -- Fill Layer Level MEs
1404 //
1406 
1407  if(layerswitchclusstonon) {
1408  fillME(layerMEs.LayerClusterStoN ,cluster.charge/cluster.noise);
1409  if (createTrendMEs) {
1410  fillME(layerMEs.LayerClusterStoNTrend,trendVar,cluster.charge/cluster.noise);
1411  }
1412  }
1413 
1415  fillME(layerMEs.LayerClusterCharge,cluster.charge);
1416  if (createTrendMEs) {
1417  fillME(layerMEs.LayerClusterChargeTrend,trendVar,cluster.charge);
1418  }
1419  }
1420 
1422  fillME(layerMEs.LayerClusterNoise ,cluster.noise);
1423  if (createTrendMEs) {
1424  fillME(layerMEs.LayerClusterNoiseTrend,trendVar,cluster.noise);
1425  }
1426  }
1427 
1429  fillME(layerMEs.LayerClusterWidth ,cluster.width);
1430  if (createTrendMEs) {
1431  fillME(layerMEs.LayerClusterWidthTrend,trendVar,cluster.width);
1432  }
1433  }
1434 
1436  fillME(layerMEs.LayerClusWidthVsAmpTH2, cluster.charge, cluster.width);
1437  }
1438 
1439  if (layerswitchclusposon) {
1440  fillME(layerMEs.LayerClusterPosition,cluster.position);
1441  }
1442 }
1443 //------------------------------------------------------------------------------------------
1445 {
1446  edm::ParameterSet ParametersTrend = trendVsLs_ ? conf_.getParameter<edm::ParameterSet>("TrendingLS") : conf_.getParameter<edm::ParameterSet>("Trending");
1447  MonitorElement* me = ibooker.bookProfile(HistoName,HistoName,
1448  ParametersTrend.getParameter<int32_t>("Nbins"),
1449  ParametersTrend.getParameter<double>("xmin"),
1450  ParametersTrend.getParameter<double>("xmax"),
1451  0 , 0 , "" );
1452  if(!me) return me;
1453  me->setAxisTitle(ParametersTrend.getParameter<std::string>("xaxis"),1);
1454  if (me->kind() == MonitorElement::DQM_KIND_TPROFILE) me->getTH1()->SetCanExtend(TH1::kAllAxes);
1455  return me;
1456 }
1457 
1458 //------------------------------------------------------------------------------------------
1459 MonitorElement* SiStripMonitorCluster::bookME1D(const char* ParameterSetLabel, const char* HistoName , DQMStore::IBooker & ibooker)
1460 {
1461  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
1462  return ibooker.book1D(HistoName,HistoName,
1463  Parameters.getParameter<int32_t>("Nbinx"),
1464  Parameters.getParameter<double>("xmin"),
1465  Parameters.getParameter<double>("xmax")
1466  );
1467 }
1468 
1469 //------------------------------------------------------------------------------------------
1470 MonitorElement* SiStripMonitorCluster::bookME2D(const char* ParameterSetLabel, const char* HistoName , DQMStore::IBooker & ibooker)
1471 {
1472  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
1473  return ibooker.book2D(HistoName,HistoName,
1474  Parameters.getParameter<int32_t>("Nbinsx"),
1475  Parameters.getParameter<double>("xmin"),
1476  Parameters.getParameter<double>("xmax"),
1477  Parameters.getParameter<int32_t>("Nbinsy"),
1478  Parameters.getParameter<double>("ymin"),
1479  Parameters.getParameter<double>("ymax")
1480  );
1481 }
1482 
1483 
1484 int SiStripMonitorCluster::FindRegion(int nstrip,int npix){
1485 
1486  double kplus= k0*(1+dk0/100);
1487  double kminus=k0*(1-dk0/100);
1488  int region=0;
1489 
1490  if (nstrip!=0 && npix >= (nstrip*kminus-q0) && npix <=(nstrip*kplus+q0)) region=1;
1491  else if (nstrip!=0 && npix < (nstrip*kminus-q0) && nstrip <= maxClus) region=2;
1492  else if (nstrip!=0 && npix < (nstrip*kminus-q0) && nstrip > maxClus) region=3;
1493  else if (nstrip!=0 && npix > (nstrip*kplus+q0)) region=4;
1494  else if (npix > minPix && nstrip==0) region=5;
1495  return region;
1496 
1497 }
RunNumber_t run() const
Definition: EventID.h:39
MonitorElement * GlobalABXTH1_CSCP
void ResetModuleMEs(uint32_t idet)
T getParameter(std::string const &) const
MonitorElement * bookME1D(const char *ParameterSetLabel, const char *HistoName, DQMStore::IBooker &ibooker)
int FindRegion(int nstrip, int npixel)
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
MonitorElement * NumberOfPixelClus_vs_BX
void addActiveDetectorsRawIds(std::vector< uint32_t > &) const
void setSiStripFolderName(std::string name)
long long deltaBX(const unsigned int ev2, const unsigned int ev1) const
MonitorElement * PixVsStripMultiplicityRegions
std::pair< const std::string, const char * > getSubDetFolderAndTag(const uint32_t &detid, const TrackerTopology *tTopo)
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
MonitorElement * GlobalTH2MainDiagonalPosition_vs_BX
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
MonitorElement * GlobalCStripVsCpix
bool IsStripBad(const uint32_t &detid, const short &strip) const
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)
long long absoluteBX(const unsigned int ev1) const
edm::ESHandle< SiStripDetCabling > SiStripDetCabling_
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=0)
#define NULL
Definition: scimark2.h:8
MonitorElement * ClusterSignalOverNoiseVsPos
Provides a code based selection for trigger and DCS information in order to have no failing filters i...
MonitorElement * StripNoise2Cycle
data_type const * const_iterator
Definition: DetSetNew.h:30
void createLayerMEs(std::string label, int ndets, DQMStore::IBooker &ibooker)
std::map< std::string, LayerMEs > LayerMEsMap
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
bool isRealData() const
Definition: EventBase.h:64
std::map< std::string, std::vector< uint32_t > > LayerDetMap
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void Fill(long long x)
MonitorElement * NumberOfPixelClus
void setDetectorFolder(uint32_t rawdetid, const TrackerTopology *tTopo)
unsigned long long m_cacheID_
void createSubDetMEs(std::string label, DQMStore::IBooker &ibooker)
std::map< uint32_t, ModMEs > ModuleMEsMap
bool getStatus(edm::Event const &e, edm::EventSetup const &eSetup)
static float getNoise(uint16_t strip, const Range &range)
Definition: SiStripNoises.h:72
int iEvent
Definition: GenABIO.cc:230
void createMEs(const edm::EventSetup &es, DQMStore::IBooker &ibooker)
std::map< std::string, std::string > SubDetPhasePartMap
MonitorElement * GlobalApvCycleDBxTH2
const int getPhase(const std::string partition) const
vector< ParameterSet > Parameters
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
static float getStripGain(const uint16_t &strip, const SiStripApvGain::Range &range)
Definition: SiStripGain.h:68
MonitorElement * bookProfile2D(Args &&...args)
Definition: DQMStore.h:163
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
GenericTriggerEventFlag * genTriggerEventFlagPixelDCSfilter_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
T sqrt(T t)
Definition: SSEVec.h:18
void fill(uint32_t &detid, float value)
Definition: TkHistoMap.cc:180
bool accept(const edm::Event &event, const edm::EventSetup &setup)
To be called from analyze/filter() methods.
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
data_type const * data(size_t cell) const
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
void tag(MonitorElement *, unsigned int)
Definition: DQMStore.cc:289
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::pair< ContainerIterator, ContainerIterator > Range
MonitorElement * bookMETrend(const char *, DQMStore::IBooker &ibooker)
TH1 * getTH1(void) const
int orbitNumber() const
Definition: EventBase.h:67
MonitorElement * NumberOfStripClus
Kind kind(void) const
Get the type of the monitor element.
std::string getSubdetid(uint32_t id, const TrackerTopology *tTopo, bool flag_ring)
MonitorElement * GlobalMainDiagonalPosition_vs_BX
bool isValid() const
Definition: HandleBase.h:74
MonitorElement * NumberOfStripClus_vs_BX
edm::EDGetTokenT< EventWithHistory > historyProducerToken_
MonitorElement * ClusWidthVsAmpTH2
MonitorElement * GlobalMainDiagonalPosition
MonitorElement * bookME2D(const char *ParameterSetLabel, const char *HistoName, DQMStore::IBooker &ibooker)
SiStripDCSStatus * dcsStatus_
bool failedToGet() const
Definition: HandleBase.h:78
GenericTriggerEventFlag * genTriggerEventFlagBPTXfilter_
MonitorElement * LayerNumberOfClusterPerRingTrend
void setLayerFolder(uint32_t rawdetid, const TrackerTopology *tTopo, int32_t layer=0, bool ring_flag=0)
void fillME(MonitorElement *ME, float value1)
SiStripMonitorCluster(const edm::ParameterSet &)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:277
T const * product() const
Definition: Handle.h:81
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
std::string createHistoId(std::string description, std::string id_type, uint32_t component_id)
const T & get() const
Definition: EventSetup.h:56
std::string HistoName
MonitorElement * StripNoise3Cycle
void createModuleMEs(ModMEs &mod_single, uint32_t detid, DQMStore::IBooker &ibooker)
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
long long deltaBXinCycle(const unsigned int ev2, const unsigned int ev1, const int bx0) const
const uint16_t nApvPairs(uint32_t det_id) const
edm::EventID id() const
Definition: EventBase.h:60
const Range getRange(const uint32_t detID) const
iterator end()
Definition: DetSetNew.h:70
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > clusterProducerPixToken_
std::map< std::string, SubDetMEs > SubDetMEsMap
const Range getRange(const uint32_t detID) const
void fillLayerMEs(LayerMEs &, ClusterProperties &cluster)
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
unsigned int _orbit
Definition: TinyEvent.h:88
edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusterProducerStripToken_
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 initRun(const edm::Run &run, const edm::EventSetup &setup)
To be called from beginRun() methods.
std::string createHistoLayer(std::string description, std::string id_type, std::string path, std::string flag)
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:48
size_type size() const
Definition: DetSetNew.h:87
MonitorElement * GlobalDBxCycleTH1
edm::EDGetTokenT< APVCyclePhaseCollection > apvPhaseProducerToken_
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
GenericTriggerEventFlag * genTriggerEventFlagStripDCSfilter_
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)
T const * product() const
Definition: ESHandle.h:86
MonitorElement * NclusVsCycleTimeProf2D
void fillModuleMEs(ModMEs &mod_mes, ClusterProperties &cluster)
MonitorElement * SubDetNumberOfClusterPerLayerTrend
Definition: Run.h:42
const SiStripApvGain::Range getRange(uint32_t detID) const
Definition: SiStripGain.h:66
int size() const
iterator begin()
Definition: DetSetNew.h:67