test
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 
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;
246  SiStripDetCabling_->addActiveDetectorsRawIds(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,abs(lnumber),0,0);
305  } else if (det_layer_pair.first == "TID" && lnumber < 0) {
306  substructure.getTIDDetectors(activeDets,layerDetIds,1,abs(lnumber),0,0);
307  } else if (det_layer_pair.first == "TEC" && lnumber > 0) {
308  substructure.getTECDetectors(activeDets,layerDetIds,2,abs(lnumber),0,0,0,0);
309  } else if (det_layer_pair.first == "TEC" && lnumber < 0) {
310  substructure.getTECDetectors(activeDets,layerDetIds,1,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  bool found_module_me = false;
676  uint16_t iDet = 0;
677  std::string subdet_label = "";
678  // loop over all modules in the layer
679  for (std::vector< uint32_t >::const_iterator iterDets = iterLayer->second.begin() ;
680  iterDets != iterLayer->second.end() ; iterDets++) {
681  iDet++;
682  // detid and type of ME
683  uint32_t detid = (*iterDets);
684 
685  // Get SubDet label once
686  if (subdet_label.size() == 0) subdet_label = folder_organizer.getSubDetFolderAndTag(detid, tTopo).second;
687 
688  // DetId and corresponding set of MEs
689  ModMEs mod_single;
690  if (Mod_On_) {
691  std::map<uint32_t, ModMEs >::iterator imodME = ModuleMEsMap.find(detid);
692  if (imodME != ModuleMEsMap.end()) {
693  mod_single = imodME->second;
694  found_module_me = true;
695  }
696  } else found_module_me = false;
697 
698  edmNew::DetSetVector<SiStripCluster>::const_iterator isearch = cluster_detsetvektor->find(detid); // search clusters of detid
699 
700  if(isearch==cluster_detsetvektor->end()){
701  if(found_module_me && moduleswitchncluson && (mod_single.NumberOfClusters)){
702  (mod_single.NumberOfClusters)->Fill(0.); // no clusters for this detector module,fill histogram with 0
703  }
704  if(clustertkhistomapon) tkmapcluster->fill(detid,0.);
706  if (found_layer_me && layerswitchnumclusterprofon) layer_single.LayerNumberOfClusterProfile->Fill(iDet, 0.0);
707  continue; // no clusters for this detid => jump to next step of loop
708  }
709 
710  //cluster_detset is a structure, cluster_detset.data is a std::vector<SiStripCluster>, cluster_detset.id is uint32_t
711  // edmNew::DetSet<SiStripCluster> cluster_detset = (*cluster_detsetvektor)[detid]; // the statement above makes sure there exists an element with 'detid'
712  edmNew::DetSet<SiStripCluster> cluster_detset = (*isearch);
713 
714  // Filling TkHistoMap with number of clusters for each module
715  if(clustertkhistomapon) {
716  tkmapcluster->fill(detid,static_cast<float>(cluster_detset.size()));
717  }
718 
719  if(moduleswitchncluson && found_module_me && (mod_single.NumberOfClusters != NULL)){ // nr. of clusters per module
720  (mod_single.NumberOfClusters)->Fill(static_cast<float>(cluster_detset.size()));
721  }
722 
723  if (found_layer_me && layerswitchnumclusterprofon)
724  layer_single.LayerNumberOfClusterProfile->Fill(iDet, static_cast<float>(cluster_detset.size()));
725  ncluster_layer += cluster_detset.size();
726 
727  short total_clusterized_strips = 0;
728 
729  SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detid);
730  SiStripApvGain::Range detGainRange = gainHandle->getRange(detid);
731  SiStripQuality::Range qualityRange = qualityHandle->getRange(detid);
732 
733  for(edmNew::DetSet<SiStripCluster>::const_iterator clusterIter = cluster_detset.begin(); clusterIter!= cluster_detset.end(); clusterIter++){
734 
735  const auto & ampls = clusterIter->amplitudes();
736  // cluster position
737  float cluster_position = clusterIter->barycenter();
738  // start defined as nr. of first strip beloning to the cluster
739  short cluster_start = clusterIter->firstStrip();
740  // width defined as nr. of strips that belong to cluster
741  short cluster_width = ampls.size();
742  // add nr of strips of this cluster to total nr. of clusterized strips
743  total_clusterized_strips = total_clusterized_strips + cluster_width;
744 
745  if(clusterchtkhistomapon) tkmapclusterch->fill(detid,static_cast<float>(clusterIter->charge()));
746 
747  // cluster signal and noise from the amplitudes
748  float cluster_signal = 0.0;
749  float cluster_noise = 0.0;
750  int nrnonzeroamplitudes = 0;
751  float noise2 = 0.0;
752  float noise = 0.0;
753  for(uint iamp=0; iamp<ampls.size(); iamp++){
754  if(ampls[iamp]>0){ // nonzero amplitude
755  cluster_signal += ampls[iamp];
756  if(!qualityHandle->IsStripBad(qualityRange, clusterIter->firstStrip()+iamp)){
757  noise = noiseHandle->getNoise(clusterIter->firstStrip()+iamp,detNoiseRange)/gainHandle->getStripGain(clusterIter->firstStrip()+iamp, detGainRange);
758  }
759  noise2 += noise*noise;
760  nrnonzeroamplitudes++;
761  }
762  } // End loop over cluster amplitude
763 
764  if (nrnonzeroamplitudes > 0) cluster_noise = sqrt(noise2/nrnonzeroamplitudes);
765 
766  if( applyClusterQuality_ &&
767  (cluster_signal/cluster_noise < sToNLowerLimit_ ||
768  cluster_signal/cluster_noise > sToNUpperLimit_ ||
769  cluster_width < widthLowerLimit_ ||
770  cluster_width > widthUpperLimit_) ) continue;
771 
772  ClusterProperties cluster_properties;
773  cluster_properties.charge = cluster_signal;
774  cluster_properties.position = cluster_position;
775  cluster_properties.start = cluster_start;
776  cluster_properties.width = cluster_width;
777  cluster_properties.noise = cluster_noise;
778 
779  // Fill Module Level MEs
780  if (found_module_me) fillModuleMEs(mod_single, cluster_properties);
781 
782  // Fill Layer Level MEs
783  if (found_layer_me) {
784  fillLayerMEs(layer_single, cluster_properties);
786  layer_single.LayerClusterWidthProfile->Fill(iDet, cluster_width);
787  }
788 
790  {
791  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
792  if(iSubdet != SubDetMEsMap.end())
793  {
794  if (subdetswitchcluschargeon) iSubdet->second.SubDetClusterChargeTH1->Fill(cluster_signal);
795  if (subdetswitchcluswidthon) iSubdet->second.SubDetClusterWidthTH1->Fill(cluster_width);
796  }
797  }
798 
799 
801  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
802  if(iSubdet != SubDetMEsMap.end()) iSubdet->second.SubDetClusWidthVsAmpTH2->Fill(cluster_signal, cluster_width);
803  }
804 
806  ClusWidthVsAmpTH2->Fill(cluster_signal, cluster_width);
807  }
808 
809  } // end loop over clusters
810 
811  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
812  float local_occupancy = static_cast<float>(total_clusterized_strips)/static_cast<float>(total_nr_strips);
813  if (found_module_me) {
814  if(moduleswitchnrclusterizedstrip && mod_single.NrOfClusterizedStrips ){ // nr of clusterized strips
815  mod_single.NrOfClusterizedStrips->Fill(static_cast<float>(total_clusterized_strips));
816  }
817 
818  if(moduleswitchlocaloccupancy && mod_single.ModuleLocalOccupancy ){ // Occupancy
819  mod_single.ModuleLocalOccupancy->Fill(local_occupancy);
820  }
821  }
822  if (layerswitchlocaloccupancy && found_layer_me && layer_single.LayerLocalOccupancy) {
823  fillME(layer_single.LayerLocalOccupancy,local_occupancy);
824  if (createTrendMEs)
825  fillME(layer_single.LayerLocalOccupancyTrend,trendVar,local_occupancy);
826  }
827  }
828  std::map<std::string, SubDetMEs>::iterator iSubdet = SubDetMEsMap.find(subdet_label);
829  if(iSubdet != SubDetMEsMap.end()) iSubdet->second.totNClusters += ncluster_layer;
830  }
831 
832  // EventHistory
833  edm::Handle<EventWithHistory> event_history;
834  iEvent.getByToken(historyProducerToken_,event_history);
835 
836  // Phase of APV
837  edm::Handle<APVCyclePhaseCollection> apv_phase_collection;
838  iEvent.getByToken(apvPhaseProducerToken_,apv_phase_collection);
839 
840  if (event_history.isValid()
841  && !event_history.failedToGet()
842  && apv_phase_collection.isValid()
843  && !apv_phase_collection.failedToGet()) {
844 
845 
846  long long dbx = event_history->deltaBX();
847  long long tbx = event_history->absoluteBX();
848 
849  bool global_histo_filled = false;
850  bool MultiplicityRegion_Vs_APVcycle_filled=false;
851 
852  // plot n 2
855  }
856  // plot n 2
857 
858  for (std::map<std::string, SubDetMEs>::iterator it = SubDetMEsMap.begin();
859  it != SubDetMEsMap.end(); it++) {
860  std::string sdet = it->first;
861  //std::string sdet = sdet_tag.substr(0,sdet_tag.find_first_of("_"));
862  SubDetMEs sdetmes = it->second;
863 
864  int the_phase = APVCyclePhaseCollection::invalid;
865  long long tbx_corr = tbx;
866 
867 
868  if (SubDetPhasePartMap.find(sdet) != SubDetPhasePartMap.end()) the_phase = apv_phase_collection->getPhase(SubDetPhasePartMap[sdet]);
869  if(the_phase==APVCyclePhaseCollection::nopartition ||
872  the_phase=30;
873  //std::cout << " subdet " << it->first << " not valid" << " MR " << MultiplicityRegion <<std::endl;
874  }
875  tbx_corr -= the_phase;
876 
877  long long dbxincycle = event_history->deltaBXinCycle(the_phase);
878  //std::cout<<"dbx in cycle: " << dbxincycle << std::endl;
879  if (globalswitchapvcycledbxth2on && !global_histo_filled) {
880  GlobalApvCycleDBxTH2->Fill(tbx_corr%70,dbx);
881  GlobalDBxTH1->Fill(dbx);
882  GlobalDBxCycleTH1->Fill(dbxincycle);
883  global_histo_filled = true;
884  }
885 
886 
887  // Fill MainDiagonalPosition plots ***************
888  if (cluster_detsetvektor_pix.isValid()){
889  if (ClusterHisto_){
890  if ( passBPTXfilter_ and passStripDCSfilter_ ){
891  NumberOfStripClus_vs_BX->Fill(tbx%3564,NStripClusters);
892  if(passPixelDCSfilter_ ){
893  NumberOfPixelClus_vs_BX->Fill(tbx%3564,NPixClusters);
894  if (globalswitchmaindiagonalposition && NStripClusters > 0){
895  GlobalMainDiagonalPosition_vs_BX->Fill(tbx%3564,atan(NPixClusters/(k0*NStripClusters)));
896  GlobalTH2MainDiagonalPosition_vs_BX->Fill(tbx%3564,atan(NPixClusters/(k0*NStripClusters)));
897  }
898  }
899 
900  }
901  }
902  }
903 
904  if (isPixValid && !MultiplicityRegion_Vs_APVcycle_filled){
905  if (globalswitchstripnoise2apvcycle && MultiplicityRegion==2) {StripNoise2Cycle->Fill(tbx_corr%70);}
906  if (globalswitchstripnoise3apvcycle && MultiplicityRegion==3) {StripNoise3Cycle->Fill(tbx_corr%70);}
907  MultiplicityRegion_Vs_APVcycle_filled=true;
908  }
909 
911  sdetmes.SubDetTotClusterTH1->Fill(sdetmes.totNClusters);
915  sdetmes.SubDetClusterApvProf->Fill(tbx_corr%70,sdetmes.totNClusters);
917  sdetmes.SubDetClusterApvTH2->Fill(tbx_corr%70,sdetmes.totNClusters);
919  sdetmes.SubDetClusterDBxCycleProf->Fill(dbxincycle,sdetmes.totNClusters);
920  }
922  sdetmes.SubDetApvDBxProf2->Fill(tbx_corr%70,dbx,sdetmes.totNClusters);
923  }
924 
926  {
927  long long tbx_corr = tbx;
928  int the_phase = apv_phase_collection->getPhase("All");
929 
930  if( the_phase == APVCyclePhaseCollection::nopartition ||
932  the_phase == APVCyclePhaseCollection::invalid )
933  the_phase=30;
934 
935  tbx_corr -= the_phase;
936 
937  NclusVsCycleTimeProf2D->Fill( tbx_corr%70 , (int)event_history->_orbit , NStripClusters );
938  }
939  }
940 }
941 //
942 // -- Reset MEs
943 //------------------------------------------------------------------------------
945  std::map<uint32_t, ModMEs >::iterator pos = ModuleMEsMap.find(idet);
946  ModMEs mod_me = pos->second;
947 
959 }
960 //
961 // -- Create Module Level MEs
962 //
963 void SiStripMonitorCluster::createModuleMEs(ModMEs& mod_single, uint32_t detid , DQMStore::IBooker & ibooker) {
964 
965  // use SistripHistoId for producing histogram id (and title)
966  SiStripHistoId hidmanager;
967  std::string hid;
968 
969  //nr. of clusters per module
970  if(moduleswitchncluson) {
971  hid = hidmanager.createHistoId("NumberOfClusters","det",detid);
972  mod_single.NumberOfClusters = bookME1D("TH1nClusters", hid.c_str() , ibooker);
973  ibooker.tag(mod_single.NumberOfClusters, detid);
974  mod_single.NumberOfClusters->setAxisTitle("number of clusters in one detector module");
975  mod_single.NumberOfClusters->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
976  }
977 
978  //ClusterPosition
980  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
981  hid = hidmanager.createHistoId("ClusterPosition","det",detid);
982  mod_single.ClusterPosition = ibooker.book1D(hid, hid, total_nr_strips, 0.5, total_nr_strips+0.5);
983  ibooker.tag(mod_single.ClusterPosition, detid);
984  mod_single.ClusterPosition->setAxisTitle("cluster position [strip number +0.5]");
985  }
986 
987  //ClusterDigiPosition
989  short total_nr_strips = SiStripDetCabling_->nApvPairs(detid) * 2 * 128; // get correct # of avp pairs
990  hid = hidmanager.createHistoId("ClusterDigiPosition","det",detid);
991  mod_single.ClusterDigiPosition = ibooker.book1D(hid, hid, total_nr_strips, 0.5, total_nr_strips+0.5);
992  ibooker.tag(mod_single.ClusterDigiPosition, detid);
993  mod_single.ClusterDigiPosition->setAxisTitle("digi in cluster position [strip number +0.5]");
994  }
995 
996  //ClusterWidth
998  hid = hidmanager.createHistoId("ClusterWidth","det",detid);
999  mod_single.ClusterWidth = bookME1D("TH1ClusterWidth", hid.c_str() , ibooker);
1000  ibooker.tag(mod_single.ClusterWidth, detid);
1001  mod_single.ClusterWidth->setAxisTitle("cluster width [nr strips]");
1002  }
1003 
1004  //ClusterCharge
1006  hid = hidmanager.createHistoId("ClusterCharge","det",detid);
1007  mod_single.ClusterCharge = bookME1D("TH1ClusterCharge", hid.c_str() , ibooker );
1008  ibooker.tag(mod_single.ClusterCharge, detid);
1009  mod_single.ClusterCharge->setAxisTitle("cluster charge [ADC]");
1010  }
1011 
1012  //ClusterNoise
1014  hid = hidmanager.createHistoId("ClusterNoise","det",detid);
1015  mod_single.ClusterNoise = bookME1D("TH1ClusterNoise", hid.c_str() , ibooker );
1016  ibooker.tag(mod_single.ClusterNoise, detid);
1017  mod_single.ClusterNoise->setAxisTitle("cluster noise");
1018  }
1019 
1020  //ClusterSignalOverNoise
1022  hid = hidmanager.createHistoId("ClusterSignalOverNoise","det",detid);
1023  mod_single.ClusterSignalOverNoise = bookME1D("TH1ClusterStoN", hid.c_str() , ibooker);
1024  ibooker.tag(mod_single.ClusterSignalOverNoise, detid);
1025  mod_single.ClusterSignalOverNoise->setAxisTitle("ratio of signal to noise for each cluster");
1026  }
1027 
1028  //ClusterSignalOverNoiseVsPos
1030  hid = hidmanager.createHistoId("ClusterSignalOverNoiseVsPos","det",detid);
1031  Parameters = conf_.getParameter<edm::ParameterSet>("TH1ClusterStoNVsPos");
1032  mod_single.ClusterSignalOverNoiseVsPos= ibooker.bookProfile(hid.c_str(),hid.c_str(),
1033  Parameters.getParameter<int32_t>("Nbinx"),
1034  Parameters.getParameter<double>("xmin"),
1035  Parameters.getParameter<double>("xmax"),
1036  Parameters.getParameter<int32_t>("Nbiny"),
1037  Parameters.getParameter<double>("ymin"),
1038  Parameters.getParameter<double>("ymax")
1039  );
1040  ibooker.tag(mod_single.ClusterSignalOverNoiseVsPos, detid);
1041  mod_single.ClusterSignalOverNoiseVsPos->setAxisTitle("pos");
1042  }
1043 
1044  //ModuleLocalOccupancy
1046  hid = hidmanager.createHistoId("ClusterLocalOccupancy","det",detid);
1047  mod_single.ModuleLocalOccupancy = bookME1D("TH1ModuleLocalOccupancy", hid.c_str() , ibooker);
1048  ibooker.tag(mod_single.ModuleLocalOccupancy, detid);
1049  mod_single.ModuleLocalOccupancy->setAxisTitle("module local occupancy [% of clusterized strips]");
1050  }
1051 
1052  //NrOfClusterizedStrips
1054  hid = hidmanager.createHistoId("NrOfClusterizedStrips","det",detid);
1055  mod_single.NrOfClusterizedStrips = bookME1D("TH1NrOfClusterizedStrips", hid.c_str() , ibooker );
1056  ibooker.tag(mod_single.NrOfClusterizedStrips, detid);
1057  mod_single.NrOfClusterizedStrips->setAxisTitle("number of clusterized strips");
1058  }
1059 
1061  hid = hidmanager.createHistoId("ClusterWidths_vs_Amplitudes","det",detid);
1062  Parameters = conf_.getParameter<edm::ParameterSet>("ClusWidthVsAmpTH2");
1063  int32_t Nbinsx = Parameters.getParameter<int32_t>("Nbinsx");
1064  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.
1065  mod_single.Module_ClusWidthVsAmpTH2 = ibooker.book2D(hid.c_str() , hid.c_str(),
1066  Nbinsx,
1067  Parameters.getParameter<double>("xmin"),
1068  Parameters.getParameter<double>("xmax"),
1069  Parameters.getParameter<int32_t>("Nbinsy"),
1070  Parameters.getParameter<double>("ymin"),
1071  Parameters.getParameter<double>("ymax")
1072  );
1073  ibooker.tag(mod_single.Module_ClusWidthVsAmpTH2, detid);
1074  mod_single.Module_ClusWidthVsAmpTH2->setAxisTitle("Amplitudes (integrated ADC counts)",1);
1075  mod_single.Module_ClusWidthVsAmpTH2->setAxisTitle("Cluster widths",2);
1076  }
1077 
1078 }
1079 //
1080 // -- Create Module Level MEs
1081 //
1083 
1084  SiStripHistoId hidmanager;
1085 
1086  LayerMEs layerMEs;
1087  layerMEs.LayerClusterStoN = 0;
1088  layerMEs.LayerClusterStoNTrend = 0;
1089  layerMEs.LayerClusterCharge = 0;
1090  layerMEs.LayerClusterChargeTrend = 0;
1091  layerMEs.LayerClusterNoise = 0;
1092  layerMEs.LayerClusterNoiseTrend = 0;
1093  layerMEs.LayerClusterWidth = 0;
1094  layerMEs.LayerClusterWidthTrend = 0;
1095  layerMEs.LayerLocalOccupancy = 0;
1096  layerMEs.LayerLocalOccupancyTrend = 0;
1097  layerMEs.LayerNumberOfClusterProfile = 0;
1098  layerMEs.LayerClusterWidthProfile = 0;
1099  layerMEs.LayerClusWidthVsAmpTH2 = 0;
1100  layerMEs.LayerClusterPosition = 0;
1101 
1102  //Cluster Width
1104  layerMEs.LayerClusterWidth=bookME1D("TH1ClusterWidth", hidmanager.createHistoLayer("Summary_ClusterWidth","layer",label,"").c_str() , ibooker );
1105  if (createTrendMEs)
1106  layerMEs.LayerClusterWidthTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterWidth","layer",label,"").c_str() , ibooker );
1107  }
1108 
1109  //Cluster Noise
1111  layerMEs.LayerClusterNoise=bookME1D("TH1ClusterNoise", hidmanager.createHistoLayer("Summary_ClusterNoise","layer",label,"").c_str() , ibooker );
1112  if (createTrendMEs)
1113  layerMEs.LayerClusterNoiseTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterNoise","layer",label,"").c_str() , ibooker);
1114  }
1115 
1116  //Cluster Charge
1118  layerMEs.LayerClusterCharge=bookME1D("TH1ClusterCharge", hidmanager.createHistoLayer("Summary_ClusterCharge","layer",label,"").c_str() , ibooker );
1119  if (createTrendMEs)
1120  layerMEs.LayerClusterChargeTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterCharge","layer",label,"").c_str(),ibooker);
1121  }
1122 
1123  //Cluster StoN
1124  if(layerswitchclusstonon) {
1125  layerMEs.LayerClusterStoN=bookME1D("TH1ClusterStoN", hidmanager.createHistoLayer("Summary_ClusterSignalOverNoise","layer",label,"").c_str() , ibooker );
1126  if (createTrendMEs)
1127  layerMEs.LayerClusterStoNTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterSignalOverNoise","layer",label,"").c_str(),ibooker);
1128  }
1129 
1130  //Cluster Occupancy
1132  layerMEs.LayerLocalOccupancy=bookME1D("TH1ModuleLocalOccupancy", hidmanager.createHistoLayer("Summary_ClusterLocalOccupancy","layer",label,"").c_str() , ibooker );
1133  if (createTrendMEs)
1134  layerMEs.LayerLocalOccupancyTrend=bookMETrend(hidmanager.createHistoLayer("Trend_ClusterLocalOccupancy","layer",label,"").c_str(),ibooker);
1135  }
1136 
1137  // # of Cluster Profile
1139  std::string hid = hidmanager.createHistoLayer("NumberOfClusterProfile","layer",label,"");
1140  layerMEs.LayerNumberOfClusterProfile = ibooker.bookProfile(hid, hid, ndets, 0.5, ndets+0.5,21, -0.5, 20.5);
1141  }
1142 
1143  // Cluster Width Profile
1145  std::string hid = hidmanager.createHistoLayer("ClusterWidthProfile","layer",label,"");
1146  layerMEs.LayerClusterWidthProfile = ibooker.bookProfile(hid, hid, ndets, 0.5, ndets+0.5, 20, -0.5, 19.5);
1147  }
1148 
1150  layerMEs.LayerClusWidthVsAmpTH2=bookME2D("ClusWidthVsAmpTH2", hidmanager.createHistoLayer("ClusterWidths_vs_Amplitudes","layer",label,"").c_str() , ibooker );
1151  }
1152 
1153  // Cluster Position
1154  if (layerswitchclusposon) {
1155  std::string hid = hidmanager.createHistoLayer("ClusterPosition","layer",label,"");
1156  layerMEs.LayerClusterPosition=ibooker.book1D(hid, hid, 128*6, 0.5, 128*6+0.5);
1157  }
1158 
1159  LayerMEsMap[label]=layerMEs;
1160 }
1161 //
1162 // -- Create SubDetector MEs
1163 //
1165 
1166  SubDetMEs subdetMEs;
1167  subdetMEs.totNClusters = 0;
1168  subdetMEs.SubDetTotClusterTH1 = 0;
1169  subdetMEs.SubDetTotClusterProf = 0;
1170  subdetMEs.SubDetClusterApvProf = 0;
1171  subdetMEs.SubDetClusterApvTH2 = 0;
1172  subdetMEs.SubDetClusterDBxCycleProf = 0;
1173  subdetMEs.SubDetApvDBxProf2 = 0;
1174  subdetMEs.SubDetClusterChargeTH1 = 0;
1175  subdetMEs.SubDetClusterWidthTH1 = 0;
1176  subdetMEs.SubDetClusWidthVsAmpTH2 = 0;
1177 
1179  // cluster charge
1181  HistoName = "ClusterCharge__" + label;
1182  subdetMEs.SubDetClusterChargeTH1 = bookME1D("TH1ClusterCharge",HistoName.c_str() , ibooker);
1183  subdetMEs.SubDetClusterChargeTH1->setAxisTitle("Cluster charge [ADC counts]");
1184  subdetMEs.SubDetClusterChargeTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1185  }
1186  // cluster width
1188  HistoName = "ClusterWidth__" + label;
1189  subdetMEs.SubDetClusterWidthTH1 = bookME1D("TH1ClusterWidth",HistoName.c_str() , ibooker);
1190  subdetMEs.SubDetClusterWidthTH1->setAxisTitle("Cluster width [strips]");
1191  subdetMEs.SubDetClusterWidthTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1192  }
1193  // Total Number of Cluster - 1D
1195  HistoName = "TotalNumberOfCluster__" + label;
1196  subdetMEs.SubDetTotClusterTH1 = bookME1D("TH1TotalNumberOfClusters",HistoName.c_str() , ibooker);
1197  subdetMEs.SubDetTotClusterTH1->setAxisTitle("Total number of clusters in subdetector");
1198  subdetMEs.SubDetTotClusterTH1->getTH1()->StatOverflows(kTRUE); // over/underflows in Mean calculation
1199  }
1200  // Total Number of Cluster vs Time - Profile
1203  HistoName = "TotalNumberOfClusterProfile__" + label;
1204  subdetMEs.SubDetTotClusterProf = ibooker.bookProfile(HistoName,HistoName,
1205  Parameters.getParameter<int32_t>("Nbins"),
1206  Parameters.getParameter<double>("xmin"),
1207  Parameters.getParameter<double>("xmax"),
1208  0 , 0 , "" );
1209  subdetMEs.SubDetTotClusterProf->setAxisTitle(Parameters.getParameter<std::string>("xaxis"),1);
1210  if (subdetMEs.SubDetTotClusterProf->kind() == MonitorElement::DQM_KIND_TPROFILE) subdetMEs.SubDetTotClusterProf->getTH1()->SetCanExtend(TH1::kAllAxes);
1211  }
1212 
1213  // Total Number of Cluster vs APV cycle - Profile
1215  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfClustersApvCycle");
1216  HistoName = "Cluster_vs_ApvCycle__" + label;
1217  subdetMEs.SubDetClusterApvProf=ibooker.bookProfile(HistoName,HistoName,
1218  Parameters.getParameter<int32_t>("Nbins"),
1219  Parameters.getParameter<double>("xmin"),
1220  Parameters.getParameter<double>("xmax"),
1221  200, //that parameter should not be there !?
1222  Parameters.getParameter<double>("ymin"),
1223  Parameters.getParameter<double>("ymax"),
1224  "" );
1225  subdetMEs.SubDetClusterApvProf->setAxisTitle("Apv Cycle (Corrected Absolute Bx % 70)",1);
1226  }
1227 
1228  // Total Number of Clusters vs ApvCycle - 2D
1231  HistoName = "Cluster_vs_ApvCycle_2D__" + label;
1232  // Adjusting the scale for 2D histogram
1233  double h2ymax = 9999.0;
1234  double yfact = Parameters.getParameter<double>("yfactor");
1235  if(label.find("TIB") != std::string::npos) h2ymax = (6984.*256.)*yfact;
1236  else if (label.find("TID") != std::string::npos) h2ymax = (2208.*256.)*yfact;
1237  else if (label.find("TOB") != std::string::npos) h2ymax = (12906.*256.)*yfact;
1238  else if (label.find("TEC") != std::string::npos) h2ymax = (7552.*2.*256.)*yfact;
1239 
1240  subdetMEs.SubDetClusterApvTH2=ibooker.book2D(HistoName,HistoName,
1241  Parameters.getParameter<int32_t>("Nbinsx"),
1242  Parameters.getParameter<double>("xmin"),
1243  Parameters.getParameter<double>("xmax"),
1244  Parameters.getParameter<int32_t>("Nbinsy"),
1245  Parameters.getParameter<double>("ymin"),
1246  h2ymax);
1247  subdetMEs.SubDetClusterApvTH2->setAxisTitle("Apv Cycle (Corrected Absolute Bx % 70))",1);
1248  subdetMEs.SubDetClusterApvTH2->setAxisTitle("Total # of Clusters",2);
1249 
1250  }
1251 
1252  // Cluster widths vs amplitudes - 2D
1255  HistoName = "ClusterWidths_vs_Amplitudes__" + label;
1256  subdetMEs.SubDetClusWidthVsAmpTH2=ibooker.book2D(HistoName,HistoName,
1257  Parameters.getParameter<int32_t>("Nbinsx"),
1258  Parameters.getParameter<double>("xmin"),
1259  Parameters.getParameter<double>("xmax"),
1260  Parameters.getParameter<int32_t>("Nbinsy"),
1261  Parameters.getParameter<double>("ymin"),
1262  Parameters.getParameter<double>("ymax"));
1263  subdetMEs.SubDetClusWidthVsAmpTH2->setAxisTitle("Amplitudes (integrated ADC counts)",1);
1264  subdetMEs.SubDetClusWidthVsAmpTH2->setAxisTitle("Cluster widths",2);
1265 
1266  }
1267 
1268 
1269 
1270  // Total Number of Cluster vs DeltaBxCycle - Profile
1272  edm::ParameterSet Parameters = conf_.getParameter<edm::ParameterSet>("TProfClustersVsDBxCycle");
1273  HistoName = "Cluster_vs_DeltaBxCycle__" + label;
1274  subdetMEs.SubDetClusterDBxCycleProf = ibooker.bookProfile(HistoName,HistoName,
1275  Parameters.getParameter<int32_t>("Nbins"),
1276  Parameters.getParameter<double>("xmin"),
1277  Parameters.getParameter<double>("xmax"),
1278  200, //that parameter should not be there !?
1279  Parameters.getParameter<double>("ymin"),
1280  Parameters.getParameter<double>("ymax"),
1281  "" );
1282  subdetMEs.SubDetClusterDBxCycleProf->setAxisTitle("Delta Bunch Crossing Cycle",1);
1283  }
1284  // DeltaBx vs ApvCycle - 2DProfile
1287  HistoName = "DeltaBx_vs_ApvCycle__" + label;
1288  subdetMEs.SubDetApvDBxProf2 = ibooker.bookProfile2D(HistoName,HistoName,
1289  Parameters.getParameter<int32_t>("Nbinsx"),
1290  Parameters.getParameter<double>("xmin"),
1291  Parameters.getParameter<double>("xmax"),
1292  Parameters.getParameter<int32_t>("Nbinsy"),
1293  Parameters.getParameter<double>("ymin"),
1294  Parameters.getParameter<double>("ymax"),
1295  Parameters.getParameter<double>("zmin"),
1296  Parameters.getParameter<double>("zmax"),
1297  "" );
1298  subdetMEs.SubDetApvDBxProf2->setAxisTitle("APV Cycle (Corrected Absolute Bx % 70)",1);
1299  subdetMEs.SubDetApvDBxProf2->setAxisTitle("Delta Bunch Crossing Cycle",2);
1300  }
1301  SubDetMEsMap[label]=subdetMEs;
1302 }
1303 
1304 //
1305 // -- Fill Module Level Histograms
1306 //
1308 
1309  if(moduleswitchclusposon && (mod_mes.ClusterPosition)) // position of cluster
1310  (mod_mes.ClusterPosition)->Fill(cluster.position);
1311 
1312  // position of digis in cluster
1314  for(int ipos=cluster.start+1; ipos<=cluster.start+cluster.width; ipos++){
1315  (mod_mes.ClusterDigiPosition)->Fill(ipos);
1316  }
1317  }
1318 
1319  if(moduleswitchcluswidthon && (mod_mes.ClusterWidth)) // width of cluster
1320  (mod_mes.ClusterWidth)->Fill(static_cast<float>(cluster.width));
1321 
1322  if(moduleswitchclusstonon && (mod_mes.ClusterSignalOverNoise)) {// SignalToNoise
1323  if (cluster.noise > 0)
1324  (mod_mes.ClusterSignalOverNoise)->Fill(cluster.charge/cluster.noise);
1325  }
1326 
1327  if(moduleswitchclusstonVsposon && (mod_mes.ClusterSignalOverNoiseVsPos)) {// SignalToNoise
1328  if (cluster.noise > 0)
1329  (mod_mes.ClusterSignalOverNoiseVsPos)->Fill(cluster.position,cluster.charge/cluster.noise);
1330  }
1331 
1332  if(moduleswitchclusnoiseon && (mod_mes.ClusterNoise)) // Noise
1333  (mod_mes.ClusterNoise)->Fill(cluster.noise);
1334 
1335  if(moduleswitchcluschargeon && (mod_mes.ClusterCharge)) // charge of cluster
1336  (mod_mes.ClusterCharge)->Fill(cluster.charge);
1337 
1339 }
1340 //
1341 // -- Fill Layer Level MEs
1342 //
1344 
1345  if(layerswitchclusstonon) {
1346  fillME(layerMEs.LayerClusterStoN ,cluster.charge/cluster.noise);
1347  if (createTrendMEs) {
1348  fillME(layerMEs.LayerClusterStoNTrend,trendVar,cluster.charge/cluster.noise);
1349  }
1350  }
1351 
1353  fillME(layerMEs.LayerClusterCharge,cluster.charge);
1354  if (createTrendMEs) {
1355  fillME(layerMEs.LayerClusterChargeTrend,trendVar,cluster.charge);
1356  }
1357  }
1358 
1360  fillME(layerMEs.LayerClusterNoise ,cluster.noise);
1361  if (createTrendMEs) {
1362  fillME(layerMEs.LayerClusterNoiseTrend,trendVar,cluster.noise);
1363  }
1364  }
1365 
1367  fillME(layerMEs.LayerClusterWidth ,cluster.width);
1368  if (createTrendMEs) {
1369  fillME(layerMEs.LayerClusterWidthTrend,trendVar,cluster.width);
1370  }
1371  }
1372 
1374  fillME(layerMEs.LayerClusWidthVsAmpTH2, cluster.charge, cluster.width);
1375  }
1376 
1377  if (layerswitchclusposon) {
1378  fillME(layerMEs.LayerClusterPosition,cluster.position);
1379  }
1380 
1381 }
1382 //------------------------------------------------------------------------------------------
1384 {
1385  edm::ParameterSet ParametersTrend = trendVsLs_ ? conf_.getParameter<edm::ParameterSet>("TrendingLS") : conf_.getParameter<edm::ParameterSet>("Trending");
1386  MonitorElement* me = ibooker.bookProfile(HistoName,HistoName,
1387  ParametersTrend.getParameter<int32_t>("Nbins"),
1388  ParametersTrend.getParameter<double>("xmin"),
1389  ParametersTrend.getParameter<double>("xmax"),
1390  0 , 0 , "" );
1391  if(!me) return me;
1392  me->setAxisTitle(ParametersTrend.getParameter<std::string>("xaxis"),1);
1393  if (me->kind() == MonitorElement::DQM_KIND_TPROFILE) me->getTH1()->SetCanExtend(TH1::kAllAxes);
1394  return me;
1395 }
1396 
1397 //------------------------------------------------------------------------------------------
1398 MonitorElement* SiStripMonitorCluster::bookME1D(const char* ParameterSetLabel, const char* HistoName , DQMStore::IBooker & ibooker)
1399 {
1400  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
1401  return ibooker.book1D(HistoName,HistoName,
1402  Parameters.getParameter<int32_t>("Nbinx"),
1403  Parameters.getParameter<double>("xmin"),
1404  Parameters.getParameter<double>("xmax")
1405  );
1406 }
1407 
1408 //------------------------------------------------------------------------------------------
1409 MonitorElement* SiStripMonitorCluster::bookME2D(const char* ParameterSetLabel, const char* HistoName , DQMStore::IBooker & ibooker)
1410 {
1411  Parameters = conf_.getParameter<edm::ParameterSet>(ParameterSetLabel);
1412  return ibooker.book2D(HistoName,HistoName,
1413  Parameters.getParameter<int32_t>("Nbinsx"),
1414  Parameters.getParameter<double>("xmin"),
1415  Parameters.getParameter<double>("xmax"),
1416  Parameters.getParameter<int32_t>("Nbinsy"),
1417  Parameters.getParameter<double>("ymin"),
1418  Parameters.getParameter<double>("ymax")
1419  );
1420 }
1421 
1422 
1423 int SiStripMonitorCluster::FindRegion(int nstrip,int npix){
1424 
1425  double kplus= k0*(1+dk0/100);
1426  double kminus=k0*(1-dk0/100);
1427  int region=0;
1428 
1429  if (nstrip!=0 && npix >= (nstrip*kminus-q0) && npix <=(nstrip*kplus+q0)) region=1;
1430  else if (nstrip!=0 && npix < (nstrip*kminus-q0) && nstrip <= maxClus) region=2;
1431  else if (nstrip!=0 && npix < (nstrip*kminus-q0) && nstrip > maxClus) region=3;
1432  else if (nstrip!=0 && npix > (nstrip*kplus+q0)) region=4;
1433  else if (npix > minPix && nstrip==0) region=5;
1434  return region;
1435 
1436 }
RunNumber_t run() const
Definition: EventID.h:39
MonitorElement * GlobalABXTH1_CSCP
void ResetModuleMEs(uint32_t idet)
T getParameter(std::string const &) const
virtual void analyze(const edm::Event &, const edm::EventSetup &)
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 setSiStripFolderName(std::string name)
MonitorElement * PixVsStripMultiplicityRegions
std::pair< const std::string, const char * > getSubDetFolderAndTag(const uint32_t &detid, const TrackerTopology *tTopo)
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::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
MonitorElement * GlobalTH2MainDiagonalPosition_vs_BX
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
MonitorElement * GlobalCStripVsCpix
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)
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
bool isRealData() const
Definition: EventBase.h:63
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)
int iEvent
Definition: GenABIO.cc:230
void createMEs(const edm::EventSetup &es, DQMStore::IBooker &ibooker)
std::map< std::string, std::string > SubDetPhasePartMap
MonitorElement * GlobalApvCycleDBxTH2
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
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.
data_type const * data(size_t cell) const
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
void tag(MonitorElement *, unsigned int)
Definition: DQMStore.cc:288
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:66
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)
void dqmBeginRun(const edm::Run &, const edm::EventSetup &)
MonitorElement * GlobalMainDiagonalPosition_vs_BX
bool isValid() const
Definition: HandleBase.h:75
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:79
GenericTriggerEventFlag * genTriggerEventFlagBPTXfilter_
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:276
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
T const * product() const
Definition: ESHandle.h:86
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
edm::EventID id() const
Definition: EventBase.h:59
iterator end()
Definition: DetSetNew.h:70
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > clusterProducerPixToken_
std::map< std::string, SubDetMEs > SubDetMEsMap
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
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
volatile std::atomic< bool > shutdown_flag false
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_
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)
MonitorElement * NclusVsCycleTimeProf2D
void fillModuleMEs(ModMEs &mod_mes, ClusterProperties &cluster)
Definition: Run.h:43
int size() const
iterator begin()
Definition: DetSetNew.h:67