CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy.cc
Go to the documentation of this file.
2 
11 
12 
14  lowoccupancy_(0),
15  highoccupancy_(100),
16  absolutelow_(0),
17  numberiterations_(2),
18  Nevents_(0),
19  absolute_occupancy_(0),
20  OutFileName_("Occupancy.root"),
21  DQMOutfileName_("DQMOutput"),
22  UseInputDB_(iConfig.getUntrackedParameter<bool>("UseInputDB",false)),
23  tTopo(theTopo)
24  {
26  }
27 
29  LogTrace("SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy")<<"[SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::~SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy] "<<std::endl;
30 }
31 
33 
34  LogTrace("SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy")<<"[SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::extractBadAPVs] "<<std::endl;
35 
36  if (WriteOutputFile_== true)
37  {
38  f = new TFile(OutFileName_.c_str(),"RECREATE");
39  f->cd();
40 
41  apvtree = new TTree("moduleOccupancy","tree");
42 
43  apvtree->Branch("DetRawId", &detrawid, "DetRawId/I");
44  apvtree->Branch("SubDetId", &subdetid, "SubDetId/I");
45  apvtree->Branch("Layer_Ring", &layer_ring, "Layer_Ring/I");
46  apvtree->Branch("Disc", &disc, "Disc/I");
47  apvtree->Branch("IsBack", &isback, "IsBack/I");
48  apvtree->Branch("IsExternalString", &isexternalstring, "IsExternalString/I");
49  apvtree->Branch("IsZMinusSide", &iszminusside, "IsZMinusSide/I");
50  apvtree->Branch("RodStringPetal", &rodstringpetal, "RodStringPetal/I");
51  apvtree->Branch("IsStereo", &isstereo, "IsStereo/I");
52  apvtree->Branch("ModuleNumber", &module_number, "ModuleNumber/I");
53  apvtree->Branch("NumberOfStrips", &number_strips, "NumberOfStrips/I");
54  apvtree->Branch("APVGlobalPositionX", &global_position_x, "APVGlobalPositionX/F");
55  apvtree->Branch("APVGlobalPositionY", &global_position_y, "APVGlobalPositionY/F");
56  apvtree->Branch("APVGlobalPositionZ", &global_position_z, "APVGlobalPositionZ/F");
57  apvtree->Branch("APVNumber", &apv_number, "APVNumber/I");
58  apvtree->Branch("APVAbsoluteOccupancy", &apvAbsoluteOccupancy, "apvAbsoluteOccupancy/I");
59  apvtree->Branch("APVMedianOccupancy", &apvMedianOccupancy, "apvMedianOccupancy/D");
60  apvtree->Branch("IsBad", &isBad, "IsBad/I");
61 
62  striptree = new TTree("stripOccupancy","tree");
63 
64  striptree->Branch("DetRawId", &detrawid, "DetRawId/I");
65  striptree->Branch("SubDetId", &subdetid, "SubDetId/I");
66  striptree->Branch("Layer_Ring", &layer_ring, "Layer_Ring/I");
67  striptree->Branch("Disc", &disc, "Disc/I");
68  striptree->Branch("IsBack", &isback, "IsBack/I");
69  striptree->Branch("IsExternalString", &isexternalstring, "IsExternalString/I");
70  striptree->Branch("IsZMinusSide", &iszminusside, "IsZMinusSide/I");
71  striptree->Branch("RodStringPetal", &rodstringpetal, "RodStringPetal/I");
72  striptree->Branch("IsStereo", &isstereo, "IsStereo/I");
73  striptree->Branch("ModulePosition", &module_number, "ModulePosition/I");
74  striptree->Branch("NumberOfStrips", &number_strips, "NumberOfStrips/I");
75  striptree->Branch("StripNumber", &strip_number, "StripNumber/I");
76  striptree->Branch("APVChannel", &apv_channel, "APVChannel/I");
77  striptree->Branch("StripGlobalPositionX", &strip_global_position_x, "StripGlobalPositionX/F");
78  striptree->Branch("StripGlobalPositionY", &strip_global_position_y, "StripGlobalPositionY/F");
79  striptree->Branch("StripGlobalPositionZ", &strip_global_position_z, "StripGlobalPositionZ/F");
80  striptree->Branch("IsHot", &isHot, "IsHot/I");
81  striptree->Branch("HotStripsPerAPV", &hotStripsPerAPV, "HotStripsPerAPV/I");
82  striptree->Branch("HotStripsPerModule", &hotStripsPerModule,"HotStripsPerModule/I");
83  striptree->Branch("StripOccupancy", &singleStripOccupancy, "StripOccupancy/D");
84  striptree->Branch("StripHits", &stripHits, "StripHits/I");
85  striptree->Branch("PoissonProb", &poissonProb, "PoissonProb/D");
86  }
87 
88  HistoMap::iterator it=DM.begin();
89  HistoMap::iterator itEnd=DM.end();
90  std::vector<unsigned int> badStripList;
91  uint32_t detid;
92  for (;it!=itEnd;++it){
93 
94  Apv APV;
95 
96  for (int apv=0; apv<6; apv++)
97  {
98  APV.apvMedian[apv] = 0;
99  APV.apvabsoluteOccupancy[apv] = 0;
100  APV.NEntries[apv] = 0;
101  APV.NEmptyBins[apv] = 0;
102 
103  for (int strip=0; strip<128; strip++)
104  {
105  stripOccupancy[apv][strip] = 0;
106  stripWeight[apv][strip] = 0;
107  }
108  }
109 
110  number_strips = (int)((it->second.get())->GetNbinsX());
112  APV.numberApvs = number_apvs;
113 
114  for (int apv=0; apv<number_apvs; apv++)
115  {
116  APV.th1f[apv] = new TH1F("tmp","tmp",128,0.5,128.5);
117  int NumberEntriesPerAPV=0;
118 
119  for (int strip=0; strip<128; strip++)
120  {
121  stripOccupancy[apv][strip] = (it->second.get())->GetBinContent((apv*128)+strip+1); // Remember: Bin=0 is underflow bin!
122  stripWeight[apv][strip] = 1;
123  APV.apvabsoluteOccupancy[apv] += (it->second.get())->GetBinContent((apv*128)+strip+1); // Remember: Bin=0 is underflow bin!
124  APV.th1f[apv]->SetBinContent(strip+1,(it->second.get())->GetBinContent((apv*128)+strip+1));
125  NumberEntriesPerAPV += (int)(it->second.get())->GetBinContent((apv*128)+strip+1);
126  }
127 
128  APV.th1f[apv]->SetEntries(NumberEntriesPerAPV);
129  APV.NEntries[apv]=(int)APV.th1f[apv]->GetEntries();
130  }
131 
132  for (int apv=0; apv<number_apvs; apv++)
133  {
134  APV.apvMedian[apv] = TMath::Median(128,stripOccupancy[apv],stripWeight[apv]);
135  }
136 
137  detid=it->first;
138  DetId detectorId=DetId(detid);
139 
140  if (edm::isDebugEnabled())
141  LogTrace("SiStripBadAPV") << "Analyzing detid " << detid<< std::endl;
142 
143  detrawid = detid;
144  APV.detrawId = detrawid;
145  subdetid = detectorId.subdetId();
146 
147  switch (detectorId.subdetId())
148  {
149  case StripSubdetector::TIB :
153 
154  if (layer_ring == 1) medianValues_TIB_Layer1.push_back(APV);
155  else if (layer_ring == 2) medianValues_TIB_Layer2.push_back(APV);
156  else if (layer_ring == 3) medianValues_TIB_Layer3.push_back(APV);
157  else if (layer_ring == 4) medianValues_TIB_Layer4.push_back(APV);
158  break;
159 
160  case StripSubdetector::TID :
164 
166  else iszminusside = 0;
167 
168  if (iszminusside==0)
169  {
170  if (disc==1) medianValues_TIDPlus_Disc1.push_back(APV);
171  else if (disc==2) medianValues_TIDPlus_Disc2.push_back(APV);
172  else if (disc==3) medianValues_TIDPlus_Disc3.push_back(APV);
173  }
174  else if (iszminusside==1)
175  {
176  if (disc==1) medianValues_TIDMinus_Disc1.push_back(APV);
177  else if (disc==2) medianValues_TIDMinus_Disc2.push_back(APV);
178  else if (disc==3) medianValues_TIDMinus_Disc3.push_back(APV);
179  }
180  break;
181 
182  case StripSubdetector::TOB :
186 
187  if (layer_ring == 1) medianValues_TOB_Layer1.push_back(APV);
188  else if (layer_ring == 2) medianValues_TOB_Layer2.push_back(APV);
189  else if (layer_ring == 3) medianValues_TOB_Layer3.push_back(APV);
190  else if (layer_ring == 4) medianValues_TOB_Layer4.push_back(APV);
191  else if (layer_ring == 5) medianValues_TOB_Layer5.push_back(APV);
192  else if (layer_ring == 6) medianValues_TOB_Layer6.push_back(APV);
193  break;
194 
195  case StripSubdetector::TEC :
199 
201  else iszminusside = 0;
202 
203  if (iszminusside==0)
204  {
205  if (disc==1) medianValues_TECPlus_Disc1.push_back(APV);
206  else if (disc==2) medianValues_TECPlus_Disc2.push_back(APV);
207  else if (disc==3) medianValues_TECPlus_Disc3.push_back(APV);
208  else if (disc==4) medianValues_TECPlus_Disc4.push_back(APV);
209  else if (disc==5) medianValues_TECPlus_Disc5.push_back(APV);
210  else if (disc==6) medianValues_TECPlus_Disc6.push_back(APV);
211  else if (disc==7) medianValues_TECPlus_Disc7.push_back(APV);
212  else if (disc==8) medianValues_TECPlus_Disc8.push_back(APV);
213  else if (disc==9) medianValues_TECPlus_Disc9.push_back(APV);
214  }
215  else if (iszminusside==1)
216  {
217  if (disc==1) medianValues_TECMinus_Disc1.push_back(APV);
218  else if (disc==2) medianValues_TECMinus_Disc2.push_back(APV);
219  else if (disc==3) medianValues_TECMinus_Disc3.push_back(APV);
220  else if (disc==4) medianValues_TECMinus_Disc4.push_back(APV);
221  else if (disc==5) medianValues_TECMinus_Disc5.push_back(APV);
222  else if (disc==6) medianValues_TECMinus_Disc6.push_back(APV);
223  else if (disc==7) medianValues_TECMinus_Disc7.push_back(APV);
224  else if (disc==8) medianValues_TECMinus_Disc8.push_back(APV);
225  else if (disc==9) medianValues_TECMinus_Disc9.push_back(APV);
226  }
227  break;
228 
229  default :
230  std::cout << "### Detector does not belong to TIB, TID, TOB or TEC !? ###" << std::endl;
231  std::cout << "### DetRawId: " << detrawid << " ###" << std::endl;
232  }
233 
234  } // end loop on modules
235 
236  // Calculate Mean and RMS for each Layer
241 
248 
255 
265 
275 
276  pQuality=siStripQuality;
277  badStripList.clear();
278 
279  // Initialize the DQM output histograms
281 
282  // Analyze the Occupancy for both APVs and Strips
283  AnalyzeOccupancy(siStripQuality,medianValues_TIB_Layer1,MeanAndRms_TIB_Layer1,badStripList,inSiStripQuality);
284  AnalyzeOccupancy(siStripQuality,medianValues_TIB_Layer2,MeanAndRms_TIB_Layer2,badStripList,inSiStripQuality);
285  AnalyzeOccupancy(siStripQuality,medianValues_TIB_Layer3,MeanAndRms_TIB_Layer3,badStripList,inSiStripQuality);
286  AnalyzeOccupancy(siStripQuality,medianValues_TIB_Layer4,MeanAndRms_TIB_Layer4,badStripList,inSiStripQuality);
287 
288  AnalyzeOccupancy(siStripQuality,medianValues_TOB_Layer1,MeanAndRms_TOB_Layer1,badStripList,inSiStripQuality);
289  AnalyzeOccupancy(siStripQuality,medianValues_TOB_Layer2,MeanAndRms_TOB_Layer2,badStripList,inSiStripQuality);
290  AnalyzeOccupancy(siStripQuality,medianValues_TOB_Layer3,MeanAndRms_TOB_Layer3,badStripList,inSiStripQuality);
291  AnalyzeOccupancy(siStripQuality,medianValues_TOB_Layer4,MeanAndRms_TOB_Layer4,badStripList,inSiStripQuality);
292  AnalyzeOccupancy(siStripQuality,medianValues_TOB_Layer5,MeanAndRms_TOB_Layer5,badStripList,inSiStripQuality);
293  AnalyzeOccupancy(siStripQuality,medianValues_TOB_Layer6,MeanAndRms_TOB_Layer6,badStripList,inSiStripQuality);
294 
295  AnalyzeOccupancy(siStripQuality,medianValues_TIDPlus_Disc1,MeanAndRms_TIDPlus_Disc1,badStripList,inSiStripQuality);
296  AnalyzeOccupancy(siStripQuality,medianValues_TIDPlus_Disc2,MeanAndRms_TIDPlus_Disc2,badStripList,inSiStripQuality);
297  AnalyzeOccupancy(siStripQuality,medianValues_TIDPlus_Disc3,MeanAndRms_TIDPlus_Disc3,badStripList,inSiStripQuality);
298  AnalyzeOccupancy(siStripQuality,medianValues_TIDMinus_Disc1,MeanAndRms_TIDMinus_Disc1,badStripList,inSiStripQuality);
299  AnalyzeOccupancy(siStripQuality,medianValues_TIDMinus_Disc2,MeanAndRms_TIDMinus_Disc2,badStripList,inSiStripQuality);
300  AnalyzeOccupancy(siStripQuality,medianValues_TIDMinus_Disc3,MeanAndRms_TIDMinus_Disc3,badStripList,inSiStripQuality);
301 
302  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc1,MeanAndRms_TECPlus_Disc1,badStripList,inSiStripQuality);
303  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc2,MeanAndRms_TECPlus_Disc2,badStripList,inSiStripQuality);
304  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc3,MeanAndRms_TECPlus_Disc3,badStripList,inSiStripQuality);
305  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc4,MeanAndRms_TECPlus_Disc4,badStripList,inSiStripQuality);
306  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc5,MeanAndRms_TECPlus_Disc5,badStripList,inSiStripQuality);
307  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc6,MeanAndRms_TECPlus_Disc6,badStripList,inSiStripQuality);
308  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc7,MeanAndRms_TECPlus_Disc7,badStripList,inSiStripQuality);
309  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc8,MeanAndRms_TECPlus_Disc8,badStripList,inSiStripQuality);
310  AnalyzeOccupancy(siStripQuality,medianValues_TECPlus_Disc9,MeanAndRms_TECPlus_Disc9,badStripList,inSiStripQuality);
311 
312  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc1,MeanAndRms_TECMinus_Disc1,badStripList,inSiStripQuality);
313  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc2,MeanAndRms_TECMinus_Disc2,badStripList,inSiStripQuality);
314  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc3,MeanAndRms_TECMinus_Disc3,badStripList,inSiStripQuality);
315  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc4,MeanAndRms_TECMinus_Disc4,badStripList,inSiStripQuality);
316  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc5,MeanAndRms_TECMinus_Disc5,badStripList,inSiStripQuality);
317  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc6,MeanAndRms_TECMinus_Disc6,badStripList,inSiStripQuality);
318  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc7,MeanAndRms_TECMinus_Disc7,badStripList,inSiStripQuality);
319  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc8,MeanAndRms_TECMinus_Disc8,badStripList,inSiStripQuality);
320  AnalyzeOccupancy(siStripQuality,medianValues_TECMinus_Disc9,MeanAndRms_TECMinus_Disc9,badStripList,inSiStripQuality);
321 
322  siStripQuality->fillBadComponents();
323 
324  // Fill DQM histograms
325  for(unsigned int i = 0; i < subDetName.size(); i++)
326  {
327  projYDistanceVsStripNumber[i]->Add((TH1F*)distanceVsStripNumber[i]->ProjectionY());
328  pfxDistanceVsStripNumber[i]->Add(distanceVsStripNumber[i]->ProfileX(pfxDistanceVsStripNumber[i]->GetName(),1,998));
329  projYNHitsVsStripNumber[i]->Add(nHitsVsStripNumber[i]->ProjectionY());
332  projYOccupancyVsStripNumber[i]->Add(occupancyVsStripNumber[i]->ProjectionY());
335  pfxOccupancyVsStripNumber[i]->Add(occupancyVsStripNumber[i]->ProfileX(pfxOccupancyVsStripNumber[i]->GetName(),-8.,0.));
344  projXDistanceVsStripNumber[i]->Add(distanceVsStripNumber[i]->ProjectionX(projXDistanceVsStripNumber[i]->GetName(),1,998));
345 
346  }
347 
348  // Save output files
349 
350  if (WriteOutputFile_==true){
351  f->cd();
352  apvtree->Write();
353  striptree->Write();
354  f->Close();
355  }
356 
357  if (WriteDQMHistograms_==true){
358  dqmStore->cd();
359  dqmStore->save(DQMOutfileName_.c_str());
360  }
361 
362  LogTrace("SiStripBadAPV") << ss.str() << std::endl;
363 }
364 
365 
366 void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::CalculateMeanAndRMS(const std::vector<Apv>& a, std::pair<double,double>* MeanRMS, int number_iterations)
367 {
368  Double_t tot[7], tot2[7];
369  Double_t n[7];
370 
371  Double_t Mean[7] = {0};
372  Double_t Rms[7] = {1000,1000,1000,1000,1000,1000,1000};
373 
374  int Moduleposition;
375 
376  for (int i=0; i<number_iterations; i++)
377  {
378  for (int j=0; j<7; j++)
379  {
380  n[j] = 0;
381  tot[j] = 0;
382  tot2[j] = 0;
383  }
384 
385  for (uint32_t it=0; it<a.size(); it++)
386  {
387  Moduleposition = (a[it].modulePosition)-1;
388 
389  for (int apv=0; apv<a[it].numberApvs; apv++)
390  {
391  if (i>0)
392  {
393  if (a[it].apvMedian[apv]<(Mean[Moduleposition]-3*Rms[Moduleposition]) || (a[it].apvMedian[apv]>(Mean[Moduleposition]+5*Rms[Moduleposition])))
394  {
395  continue;
396  }
397  }
398  tot[Moduleposition] += a[it].apvMedian[apv];
399  tot2[Moduleposition] += (a[it].apvMedian[apv])*(a[it].apvMedian[apv]);
400  n[Moduleposition]++;
401  }
402  }
403 
404  for (int j=0; j<7; j++)
405  {
406  if (n[j]!=0)
407  {
408  Mean[j] = tot[j]/n[j];
409  Rms[j] = TMath::Sqrt(TMath::Abs(tot2[j]/n[j] -Mean[j]*Mean[j]));
410  }
411  }
412  }
413 
414  for (int j=0; j<7; j++)
415  {
416  MeanRMS[j] = std::make_pair(Mean[j],Rms[j]);
417  }
418 
419 }
420 
421 void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::AnalyzeOccupancy(SiStripQuality* quality, std::vector<Apv>& medianValues, std::pair<double,double>* MeanAndRms, std::vector<unsigned int>& BadStripList, edm::ESHandle<SiStripQuality>& InSiStripQuality)
422 {
423  int Moduleposition;
424  uint32_t Detid;
425 
426  for (uint32_t it=0; it<medianValues.size(); it++)
427  {
428  Moduleposition = (medianValues[it].modulePosition)-1;
429  Detid = medianValues[it].detrawId;
430 
431  setBasicTreeParameters(Detid);
432 
433  DetId DetectorId=DetId(Detid);
434  const StripGeomDetUnit* TheStripDet = dynamic_cast<const StripGeomDetUnit*>( (TkGeom->idToDet(DetectorId)) );
435  const StripTopology* TheStripTopol = dynamic_cast<const StripTopology*>( &(TheStripDet->specificTopology()) );
436 
437  //Analyze the occupancies
438  hotstripspermodule = 0;
439  vHotStripsInModule.clear();
440 
441  for (int apv=0; apv<medianValues[it].numberApvs; apv++)
442  {
443  double logMedianOccupancy = -1;
444  double logAbsoluteOccupancy = -1;
445 
446  for (int i=0; i<128; i++)
447  {
448  ishot[i] = 0;
449  stripoccupancy[i] = 0;
450  striphits[i] = 0;
451  poissonprob[i] = 0;
452  }
453 
454  number_strips = (medianValues[it].numberApvs)*128;
455  apv_number = apv+1;
456  apvMedianOccupancy = medianValues[it].apvMedian[apv];
457  apvAbsoluteOccupancy = medianValues[it].apvabsoluteOccupancy[apv];
458  isBad = 0;
459  hotstripsperapv[apv] = 0;
460 
461  LocalPoint pos_apv_local = TheStripTopol->localPosition((apv*128));
462  GlobalPoint pos_apv_global = (TkGeom->idToDet(DetectorId))->surface().toGlobal(pos_apv_local);
463 
464  global_position_x = pos_apv_global.x();
465  global_position_y = pos_apv_global.y();
466  global_position_z = pos_apv_global.z();
467 
468  if (apvMedianOccupancy>0) logMedianOccupancy = log10(apvMedianOccupancy);
469  if (apvAbsoluteOccupancy>0) logAbsoluteOccupancy = log10(apvAbsoluteOccupancy);
470 
471  //Fill the DQM histograms
472  unsigned int layer = 0;
473  if(subdetid==3 || subdetid==5)
474  layer=layer_ring;
475  else
476  layer=disc;
477 
478  // Fill histograms for all the tracker
479  medianVsAbsoluteOccupancy[0][0]->Fill(logAbsoluteOccupancy,logMedianOccupancy);
480  medianOccupancy[0][0]->Fill(logMedianOccupancy);
481  absoluteOccupancy[0][0]->Fill(logAbsoluteOccupancy);
482  // Fill summary histograms for each subdetector
483  medianVsAbsoluteOccupancy[subdetid-2][0]->Fill(logAbsoluteOccupancy,logMedianOccupancy);
484  medianOccupancy[subdetid-2][0]->Fill(logMedianOccupancy);
485  absoluteOccupancy[subdetid-2][0]->Fill(logAbsoluteOccupancy);
486  // Fill histograms for each layer/disk
487  medianVsAbsoluteOccupancy[subdetid-2][layer]->Fill(logAbsoluteOccupancy,logMedianOccupancy);
488  medianOccupancy[subdetid-2][layer]->Fill(logMedianOccupancy);
489  absoluteOccupancy[subdetid-2][layer]->Fill(logAbsoluteOccupancy);
490 
491  if(UseInputDB_)
492  {
493  if(InSiStripQuality->IsApvBad(Detid,apv) )
494  {
495  if (WriteOutputFile_==true)
496  {
497  apvtree->Fill();
498  for (int strip=0; strip<128; strip++)
499  {
500  strip_number = (apv*128)+strip+1;
501  apv_channel = apv+1;
502  isHot = ishot[strip];
504  stripHits = striphits[strip];
505  poissonProb = poissonprob[strip];
506 
509 
510  LocalPoint pos_strip_local = TheStripTopol->localPosition(strip);
511  GlobalPoint pos_strip_global = (TkGeom->idToDet(DetectorId))->surface().toGlobal(pos_strip_local);
512 
513  strip_global_position_x = pos_strip_global.x();
514  strip_global_position_y = pos_strip_global.y();
515  strip_global_position_z = pos_strip_global.z();
516  striptree->Fill();
517 
518  // Fill the strip DQM Plots
520  }
521 
522  if(vHotStripsInModule.size()==1)
523  {
524  distance = 999;
527  }
528  else if(vHotStripsInModule.size()>1)
529  {
530  for(unsigned int iVec = 0; iVec != vHotStripsInModule.size(); iVec++)
531  {
532  if(iVec==0)
534  else if(iVec==vHotStripsInModule.size()-1)
535  {
536  distance = vHotStripsInModule[vHotStripsInModule.size()-1] - vHotStripsInModule[vHotStripsInModule.size() -2];
537  }
538  else if(vHotStripsInModule.size()>2)
539  {
540  distanceR = vHotStripsInModule[iVec + 1] - vHotStripsInModule[iVec];
541  distanceL = vHotStripsInModule[iVec] - vHotStripsInModule[iVec - 1];
543  }
544  else
545  {
546  std::cout << "ERROR! distance is never computed!!!\n";
547  }
548  distanceVsStripNumber[0]->Fill(vHotStripsInModule[iVec], distance);
549  distanceVsStripNumber[subdetid-2]->Fill(vHotStripsInModule[iVec], distance);
550  }
551  }
552 
553  }
554  continue;//if the apv is already flagged as bad, continue.
555  }
556  }
557 
558  if (medianValues[it].apvMedian[apv] > minNevents_)
559  {
560  if ((medianValues[it].apvMedian[apv]>(MeanAndRms[Moduleposition].first+highoccupancy_*MeanAndRms[Moduleposition].second)) && (medianValues[it].apvMedian[apv]>absolutelow_))
561  {
562  BadStripList.push_back(pQuality->encode((apv*128),128,0));
563  isBad = 1;
564  }
565  }
566  else if (medianValues[it].apvMedian[apv]<(MeanAndRms[Moduleposition].first-lowoccupancy_*MeanAndRms[Moduleposition].second) && (MeanAndRms[Moduleposition].first>2 || medianValues[it].apvabsoluteOccupancy[apv]==0))
567  {
568  BadStripList.push_back(pQuality->encode((apv*128),128,0));
569  isBad = 1;
570  }
571 
572  if (isBad!=1)
573  {
574  iterativeSearch(medianValues[it],BadStripList,apv);
575  }
576 
577  if (WriteOutputFile_==true)
578  {
579  apvtree->Fill();
580  for (int strip=0; strip<128; strip++)
581  {
582  strip_number = (apv*128)+strip+1;
583  apv_channel = apv+1;
584  isHot = ishot[strip];
586  stripHits = striphits[strip];
587  poissonProb = poissonprob[strip];
588 
591 
592  LocalPoint pos_strip_local = TheStripTopol->localPosition(strip);
593  GlobalPoint pos_strip_global = (TkGeom->idToDet(DetectorId))->surface().toGlobal(pos_strip_local);
594 
595  strip_global_position_x = pos_strip_global.x();
596  strip_global_position_y = pos_strip_global.y();
597  strip_global_position_z = pos_strip_global.z();
598  striptree->Fill();
599 
600  // Fill the strip DQM Plots
602  }
603  if(vHotStripsInModule.size()==1)
604  {
605  distance = 999;
608  }
609  else if(vHotStripsInModule.size()>1)
610  {
611  for(unsigned int iVec = 0; iVec != vHotStripsInModule.size(); iVec++)
612  {
613  if(iVec==0)
615  else if(iVec==vHotStripsInModule.size()-1)
616  {
617  distance = vHotStripsInModule[vHotStripsInModule.size()-1] - vHotStripsInModule[vHotStripsInModule.size() -2];
618  }
619  else if(vHotStripsInModule.size()>2)
620  {
621  distanceR = vHotStripsInModule[iVec + 1] - vHotStripsInModule[iVec];
622  distanceL = vHotStripsInModule[iVec] - vHotStripsInModule[iVec - 1];
624  }
625  else
626  {
627  std::cout << "ERROR! distance is never computed!!!\n";
628  }
629  distanceVsStripNumber[0]->Fill(vHotStripsInModule[iVec], distance);
630  distanceVsStripNumber[subdetid-2]->Fill(vHotStripsInModule[iVec], distance);
631  }
632  }
633  }
634  }
635 
636  if (BadStripList.begin()!=BadStripList.end())
637  {
638  quality->compact(Detid,BadStripList);
639  SiStripQuality::Range range(BadStripList.begin(),BadStripList.end());
640  quality->put(Detid,range);
641  }
642  BadStripList.clear();
643  }
644 }
645 
647  if (!histo.NEntries[apv] || histo.NEntries[apv] <=MinNumEntries_ || histo.NEntries[apv] <= minNevents_)
648  return;
649 
650  size_t startingSize=vect.size();
651  long double diff=1.-prob_;
652 
653  size_t Nbins = histo.th1f[apv]->GetNbinsX();
654  size_t ibinStart = 1;
655  size_t ibinStop = Nbins+1;
656  int MaxEntry = (int)histo.th1f[apv]->GetMaximum();
657 
658  std::vector<long double> vPoissonProbs(MaxEntry+1,0);
659  long double meanVal=1.*histo.NEntries[apv]/(1.*Nbins-histo.NEmptyBins[apv]);
660  evaluatePoissonian(vPoissonProbs,meanVal);
661 
662  for (size_t i=ibinStart; i<ibinStop; ++i){
663  unsigned int entries= (unsigned int)histo.th1f[apv]->GetBinContent(i);
664 
665  if (ishot[i-1]==0){
666  stripoccupancy[i-1] = entries/(double) Nevents_;
667  striphits[i-1] = entries;
668  poissonprob[i-1] = 1-vPoissonProbs[entries];
669  }
670 
671  if (entries<=MinNumEntriesPerStrip_ || entries <= minNevents_)
672  continue;
673 
674  if(diff<vPoissonProbs[entries]){
675  ishot[i-1] = 1;
677  hotstripsperapv[apv]++;
678  histo.th1f[apv]->SetBinContent(i,0.);
679  histo.NEntries[apv]-=entries;
680  histo.NEmptyBins[apv]++;
681  if (edm::isDebugEnabled())
682  LogTrace("SiStripHotStrip")<< " rejecting strip " << (apv*128)+i-1 << " value " << entries << " diff " << diff << " prob " << vPoissonProbs[entries]<< std::endl;
683  vect.push_back(pQuality->encode((apv*128)+i-1,1,0));
684  }
685 
686  }
687  if (edm::isDebugEnabled())
688  LogTrace("SiStripHotStrip") << " [SiStripHotStripAlgorithmFromClusterOccupancy::iterativeSearch] Nbins="<< Nbins << " MaxEntry="<<MaxEntry << " meanVal=" << meanVal << " NEmptyBins="<<histo.NEmptyBins[apv]<< " NEntries=" << histo.NEntries[apv] << " thEntries " << histo.th1f[apv]->GetEntries()<< " startingSize " << startingSize << " vector.size " << vect.size() << std::endl;
689 
690  if (vect.size()!=startingSize)
691  iterativeSearch(histo,vect,apv);
692 }
693 
694 void SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy::evaluatePoissonian(std::vector<long double>& vPoissonProbs, long double& meanVal){
695  for(size_t i=0;i<vPoissonProbs.size();++i){
696  vPoissonProbs[i]= (i==0)?TMath::Poisson(i,meanVal):vPoissonProbs[i-1]+TMath::Poisson(i,meanVal);
697  }
698 }
699 
701  DetId DetectorID=DetId(detid);
702 
703  detrawid = detid;
704  subdetid = DetectorID.subdetId();
705 
706  switch (DetectorID.subdetId())
707  {
708  case StripSubdetector::TIB :
709  layer_ring = tTopo->tibLayer(detid);
710  disc = -1;
711  isstereo = tTopo->tibIsStereo(detid);
712  isback = -1;
713  if (tTopo->tibIsExternalString(detid)) isexternalstring = 1;
714  else isexternalstring = 0;
715  if (tTopo->tibIsZMinusSide(detid)) iszminusside = 1;
716  else iszminusside = 0;
717  rodstringpetal = tTopo->tibString(detid);
718  module_number = tTopo->tibModule(detid);
719 
720  break;
721 
722  case StripSubdetector::TID :
723  layer_ring = tTopo->tidRing(detid);
724  disc = tTopo->tidWheel(detid);
725  isstereo = tTopo->tidIsStereo(detid);
726  if (tTopo->tidIsBackRing(detid)) isback = 1;
727  else isback = 0;
728  if (tTopo->tidIsZMinusSide(detid)) iszminusside = 1;
729  else iszminusside = 0;
730  isexternalstring = -1;
731  rodstringpetal = -1;
732  module_number = tTopo->tidModule(detid);
733 
734  break;
735 
736  case StripSubdetector::TOB :
737  layer_ring = tTopo->tobLayer(detid);
738  disc = -1;
739  isstereo = tTopo->tobIsStereo(detid);
740  isback = -1;
741  if (tTopo->tobIsZMinusSide(detid)) iszminusside = 1;
742  else iszminusside = 0;
743  isexternalstring = -1;
744  rodstringpetal = tTopo->tobRod(detid);
745  module_number = tTopo->tobModule(detid);
746 
747  break;
748 
749  case StripSubdetector::TEC :
750  layer_ring = tTopo->tecRing(detid);
751  disc = tTopo->tecWheel(detid);
752  isstereo = tTopo->tecIsStereo(detid);
753  if (tTopo->tecIsBackPetal(detid)) isback = 1;
754  else isback = 0;
755  if (tTopo->tecIsZMinusSide(detid)) iszminusside = 1;
756  else iszminusside = 0;
757  isexternalstring = -1;
759  module_number = tTopo->tecModule(detid);
760 
761  break;
762 
763  default :
764  std::cout << "### Detector does not belong to TIB, TID, TOB or TEC !? ###" << std::endl;
765  std::cout << "### DetRawId: " << detid << " ###" << std::endl;
766  }
767 }
768 
770 {
772 }
773 
775 {
776  oss.str("");
777  oss << 1; //runNumber
778 
780  dqmStore->setCurrentFolder("ChannelStatusPlots");
781 
782  // Initialize histograms
783  subDetName.push_back(""); subDetName.push_back("TIB"); subDetName.push_back("TID"); subDetName.push_back("TOB"); subDetName.push_back("TEC");
784  nLayers.push_back(0); nLayers.push_back(4); nLayers.push_back(3); nLayers.push_back(6); nLayers.push_back(9);
785  layerName.push_back(""); layerName.push_back("Layer"); layerName.push_back("Disk"); layerName.push_back("Layer"); layerName.push_back("Disk");
786 
788  std::string histoTitle;
789 
790  for(unsigned int i = 0; i < subDetName.size(); i++)
791  {
792  histoName = "distanceVsStripNumber" + subDetName[i];
793  histoTitle = "Distance between hot strips vs. strip number";
794  if(i!=0)
795  histoTitle += " in " + subDetName[i];
796  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 999, 0.5, 999.5);
797  distanceVsStripNumber.push_back(tmp->getTH2F());
798 
799  histoName = "pfxDistanceVsStripNumber" + subDetName[i];
800  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
801  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
803  pfxDistanceVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
804  pfxDistanceVsStripNumber[i]->GetYaxis()->SetTitle("Distance");
805 
806  histoName = "projXDistanceVsStripNumber" + subDetName[i];
807  histoTitle = "Number of hot strips vs. strip number";
808  if(i!=0)
809  histoTitle += " in " + subDetName[i];
810  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
811  projXDistanceVsStripNumber.push_back(tmp->getTH1F());
812  projXDistanceVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
813  projXDistanceVsStripNumber[i]->GetYaxis()->SetTitle("N_{hot}");
814 
815  histoName = "projYDistanceVsStripNumber" + subDetName[i];
816  histoTitle = "Distribution of distance between hot strips";
817  if(i!=0)
818  histoTitle += " in " + subDetName[i];
819  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 999, 0.5, 999.5);
820  projYDistanceVsStripNumber.push_back(tmp->getTH1F());
821  projYDistanceVsStripNumber[i]->GetXaxis()->SetTitle("Distance");
822  projYDistanceVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
823 
824  //
825  histoName = "occupancyVsStripNumber" + subDetName[i];
826  histoTitle = "Occupancy of strips vs. strip number";
827  if(i!=0)
828  histoTitle += " in " + subDetName[i];
829  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 1000, -8.,0.);
830  occupancyVsStripNumber.push_back(tmp->getTH2F());
831 
832  histoName = "pfxOccupancyVsStripNumber" + subDetName[i];
833  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
834  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
836  pfxOccupancyVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
837  pfxOccupancyVsStripNumber[i]->GetYaxis()->SetTitle("log_{10}(Occupancy)");
838 
839  histoName = "projYOccupancyVsStripNumber" + subDetName[i];
840  histoTitle = "Distribution of strip occupancy";
841  if(i!=0)
842  histoTitle += " in " + subDetName[i];
843  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -8., 0.);
845  projYOccupancyVsStripNumber[i]->GetXaxis()->SetTitle("log_{10}(Occupancy)");
846  projYOccupancyVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
847 
848  //
849  histoName = "occupancyHotStripsVsStripNumber" + subDetName[i];
850  histoTitle = "Occupancy of hot strips vs. strip number";
851  if(i!=0)
852  histoTitle += " in " + subDetName[i];
853  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 1000, -8., 0.);
855 
856  histoName = "pfxOccupancyHotStripsVsStripNumber" + subDetName[i];
857  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
858  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
860  pfxOccupancyHotStripsVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
861  pfxOccupancyHotStripsVsStripNumber[i]->GetYaxis()->SetTitle("log_{10}(Occupancy)");
862 
863  histoName = "projYOccupancyHotStripsVsStripNumber" + subDetName[i];
864  histoTitle = "Distribution of hot strip occupancy";
865  if(i!=0)
866  histoTitle += " in " + subDetName[i];
867  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -8., 0.);
869  projYOccupancyHotStripsVsStripNumber[i]->GetXaxis()->SetTitle("log_{10}(Occupancy)");
870  projYOccupancyHotStripsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
871 
872  //
873  histoName = "occupancyGoodStripsVsStripNumber" + subDetName[i];
874  histoTitle = "Occupancy of good strips vs. strip number";
875  if(i!=0)
876  histoTitle += " in " + subDetName[i];
877  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 1000, -8., 0.);
879 
880  histoName = "pfxOccupancyGoodStripsVsStripNumber" + subDetName[i];
881  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
882  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
884  pfxOccupancyGoodStripsVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
885  pfxOccupancyGoodStripsVsStripNumber[i]->GetYaxis()->SetTitle("log_{10}(Occupancy)");
886 
887  histoName = "projYOccupancyGoodStripsVsStripNumber" + subDetName[i];
888  histoTitle = "Distribution of good strip occupancy";
889  if(i!=0)
890  histoTitle += " in " + subDetName[i];
891  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -8., 0.);
893  projYOccupancyGoodStripsVsStripNumber[i]->GetXaxis()->SetTitle("log_{10}(Occupancy)");
894  projYOccupancyGoodStripsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
895 
896  //
897  histoName = "poissonProbVsStripNumber" + subDetName[i];
898  histoTitle = "Poisson probability of strips vs. strip number";
899  if(i!=0)
900  histoTitle += " in " + subDetName[i];
901  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 1000, -18., 0.);
902  poissonProbVsStripNumber.push_back(tmp->getTH2F());
903 
904  histoName = "pfxPoissonProbVsStripNumber" + subDetName[i];
905  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
906  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
908  pfxPoissonProbVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
909  pfxPoissonProbVsStripNumber[i]->GetYaxis()->SetTitle("log_{10}(Probability)");
910 
911  histoName = "projYPoissonProbVsStripNumber" + subDetName[i];
912  histoTitle = "Distribution of strip Poisson probability";
913  if(i!=0)
914  histoTitle += " in " + subDetName[i];
915  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -18., 0.);
917  projYPoissonProbVsStripNumber[i]->GetXaxis()->SetTitle("log_{10}(Probability)");
918  projYPoissonProbVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
919 
920  //
921  histoName = "poissonProbHotStripsVsStripNumber" + subDetName[i];
922  histoTitle = "Poisson probability of hot strips vs. strip number";
923  if(i!=0)
924  histoTitle += " in " + subDetName[i];
925  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 1000, -18., 0.);
927 
928  histoName = "pfxPoissonProbHotStripsVsStripNumber" + subDetName[i];
929  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
930  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
932  pfxPoissonProbHotStripsVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
933  pfxPoissonProbHotStripsVsStripNumber[i]->GetYaxis()->SetTitle("log_{10}(Probability)");
934 
935  histoName = "projYPoissonProbHotStripsVsStripNumber" + subDetName[i];
936  histoTitle = "Distribution of hot strip Poisson probability";
937  if(i!=0)
938  histoTitle += " in " + subDetName[i];
939  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -18., 0.);
941  projYPoissonProbHotStripsVsStripNumber[i]->GetXaxis()->SetTitle("log_{10}(Probability)");
942  projYPoissonProbHotStripsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
943 
944  //
945  histoName = "poissonProbGoodStripsVsStripNumber" + subDetName[i];
946  histoTitle = "Poisson probability of good strips vs. strip number";
947  if(i!=0)
948  histoTitle += " in " + subDetName[i];
949  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 1000, -18., 0.);
951 
952  histoName = "pfxPoissonProbGoodStripsVsStripNumber" + subDetName[i];
953  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
954  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
956  pfxPoissonProbGoodStripsVsStripNumber[i]->GetXaxis()->SetTitle("Strip");
957  pfxPoissonProbGoodStripsVsStripNumber[i]->GetYaxis()->SetTitle("log_{10}(Probability)");
958 
959  histoName = "projYPoissonProbGoodStripsVsStripNumber" + subDetName[i];
960  histoTitle = "Distribution of good strip Poisson probability";
961  if(i!=0)
962  histoTitle += " in " + subDetName[i];
963  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -18., 0.);
965  projYPoissonProbGoodStripsVsStripNumber[i]->GetXaxis()->SetTitle("log_{10}(Probability)");
966  projYPoissonProbGoodStripsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
967 
968  //
969  histoName = "nHitsVsStripNumber" + subDetName[i];
970  histoTitle = "NHits in strips vs. strip number";
971  if(i!=0)
972  histoTitle += " in " + subDetName[i];
973  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 10000, -0.5, 9999.5);
974  nHitsVsStripNumber.push_back(tmp->getTH2F());
975 
976  histoName = "pfxNHitsVsStripNumber" + subDetName[i];
977  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
978  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
979  pfxNHitsVsStripNumber.push_back(tmp->getTProfile());
980 
981  histoName = "projXNHitsVsStripNumber" + subDetName[i];
982  histoTitle = "Cumulative nHits in strips vs. strip number";
983  if(i!=0)
984  histoTitle += " in " + subDetName[i];
985  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
986  projXNHitsVsStripNumber.push_back(tmp->getTH1F());
987 
988  histoName = "projYNHitsVsStripNumber" + subDetName[i];
989  histoTitle = "Distribution of nHits for all strips";
990  if(i!=0)
991  histoTitle += " in " + subDetName[i];
992  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 10000, -0.5, 9999.5);
993  projYNHitsVsStripNumber.push_back(tmp->getTH1F());
994  projYNHitsVsStripNumber[i]->GetXaxis()->SetTitle("N_{hits}");
995  projYNHitsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
996 
997  //
998  histoName = "nHitsHotStripsVsStripNumber" + subDetName[i];
999  histoTitle = "NHits in hot strips vs. strip number";
1000  if(i!=0)
1001  histoTitle += " in " + subDetName[i];
1002  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 10000, -0.5, 9999.5);
1003  nHitsHotStripsVsStripNumber.push_back(tmp->getTH2F());
1004 
1005  histoName = "pfxNHitsHotStripsVsStripNumber" + subDetName[i];
1006  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
1007  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
1009 
1010  histoName = "projXNHitsHotStripsVsStripNumber" + subDetName[i];
1011  histoTitle = "Cumulative nHits in hot strips vs. strip number";
1012  if(i!=0)
1013  histoTitle += " in " + subDetName[i];
1014  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
1016 
1017  histoName = "projYNHitsHotStripsVsStripNumber" + subDetName[i];
1018  histoTitle = "Distribution of nHits for hot strips";
1019  if(i!=0)
1020  histoTitle += " in " + subDetName[i];
1021  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 10000, -0.5, 9999.5);
1023  projYNHitsHotStripsVsStripNumber[i]->GetXaxis()->SetTitle("N_{hits}");
1024  projYNHitsHotStripsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
1025 
1026  //
1027  histoName = "nHitsGoodStripsVsStripNumber" + subDetName[i];
1028  histoTitle = "NHits in good strips vs. strip number";
1029  if(i!=0)
1030  histoTitle += " in " + subDetName[i];
1031  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5, 10000, -0.5, 9999.5);
1033 
1034  histoName = "pfxNHitsGoodStripsVsStripNumber" + subDetName[i];
1035  tmp_prof = new TProfile(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
1036  tmp = dqmStore->bookProfile(histoName.c_str(), tmp_prof);
1038 
1039  histoName = "projXNHitsGoodStripsVsStripNumber" + subDetName[i];
1040  histoTitle = "Cumulative nHits in good strips vs. strip number";
1041  if(i!=0)
1042  histoTitle += " in " + subDetName[i];
1043  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 768, 0.5, 768.5);
1045 
1046  histoName = "projYNHitsGoodStripsVsStripNumber" + subDetName[i];
1047  histoTitle = "Distribution of nHits for good strips";
1048  if(i!=0)
1049  histoTitle += " in " + subDetName[i];
1050  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 10000, -0.5, 9999.5);
1052  projYNHitsGoodStripsVsStripNumber[i]->GetXaxis()->SetTitle("N_{hits}");
1053  projYNHitsGoodStripsVsStripNumber[i]->GetYaxis()->SetTitle("N_{strips}");
1054 
1055  for(unsigned int j = 0; j <= nLayers[i]; j++)
1056  {
1057  histoName = "medianVsAbsoluteOccupancy" + subDetName[i];
1058  if(j!=0)
1059  {
1060  oss.str("");
1061  oss << j;
1062  histoName += layerName[i] + oss.str();
1063  }
1064  histoTitle = "Median APV occupancy vs. absolute APV occupancy";
1065  if(i!=0)
1066  histoTitle += " in " + subDetName[i];
1067  if(j!=0)
1068  {
1069  histoTitle += " " + layerName[i] + " " + oss.str();
1070  }
1071  tmp = dqmStore->book2D(histoName.c_str(), histoTitle.c_str(), 1000, 0., 6., 1000, -1., 3.);
1073  medianVsAbsoluteOccupancy[i][j]->Rebin2D(10,10);
1074  medianVsAbsoluteOccupancy[i][j]->GetXaxis()->SetTitle("log_{10}(Abs. Occupancy)");
1075  medianVsAbsoluteOccupancy[i][j]->GetYaxis()->SetTitle("log_{10}(Median Occupancy)");
1076  //
1077  histoName = "medianOccupancy" + subDetName[i];
1078  if(j!=0)
1079  {
1080  oss.str("");
1081  oss << j;
1082  histoName += layerName[i] + oss.str();
1083  }
1084  histoTitle = "Median APV occupancy";
1085  if(i!=0)
1086  histoTitle += " in " + subDetName[i];
1087  if(j!=0)
1088  {
1089  histoTitle += " " + layerName[i] + " " + oss.str();
1090  }
1091  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, -1., 3.);
1092  medianOccupancy[i][j] = tmp->getTH1F();
1093  medianOccupancy[i][j]->GetXaxis()->SetTitle("log_{10}(Occupancy)");
1094  medianOccupancy[i][j]->GetYaxis()->SetTitle("APVs");
1095  //
1096  histoName = "absoluteOccupancy" + subDetName[i];
1097  if(j!=0)
1098  {
1099  oss.str("");
1100  oss << j;
1101  histoName += layerName[i] + oss.str();
1102  }
1103  histoTitle = "Absolute APV occupancy";
1104  if(i!=0)
1105  histoTitle += " in " + subDetName[i];
1106  if(j!=0)
1107  {
1108  histoTitle += " " + layerName[i] + " " + oss.str();
1109  }
1110  tmp = dqmStore->book1D(histoName.c_str(), histoTitle.c_str(), 1000, 0., 6.);
1111  absoluteOccupancy[i][j] = tmp->getTH1F();
1112  absoluteOccupancy[i][j]->GetXaxis()->SetTitle("log_{10}(Occupancy)");
1113  absoluteOccupancy[i][j]->GetYaxis()->SetTitle("APVs");
1114  }
1115  }
1116 }
1117 
1119 {
1120  double logStripOccupancy = -1;
1121  double logPoissonProb = -1;
1122 
1123  if (singleStripOccupancy>0) logStripOccupancy = log10(singleStripOccupancy);
1124  if (poissonProb>0) logPoissonProb = log10(fabs(poissonProb));
1125 
1126  occupancyVsStripNumber[0]->Fill(strip_number,logStripOccupancy);
1127  occupancyVsStripNumber[subdetid-2]->Fill(strip_number,logStripOccupancy);
1128  poissonProbVsStripNumber[0]->Fill(strip_number,logPoissonProb);
1129  poissonProbVsStripNumber[subdetid-2]->Fill(strip_number,logPoissonProb);
1132 
1133  if(isHot)
1134  {
1135  vHotStripsInModule.push_back(strip_number);
1136  occupancyHotStripsVsStripNumber[0]->Fill(strip_number,logStripOccupancy);
1137  occupancyHotStripsVsStripNumber[subdetid-2]->Fill(strip_number,logStripOccupancy);
1138  poissonProbHotStripsVsStripNumber[0]->Fill(strip_number,logPoissonProb);
1139  poissonProbHotStripsVsStripNumber[subdetid-2]->Fill(strip_number,logPoissonProb);
1142  }
1143  else
1144  {
1145  occupancyGoodStripsVsStripNumber[0]->Fill(strip_number,logStripOccupancy);
1146  occupancyGoodStripsVsStripNumber[subdetid-2]->Fill(strip_number,logStripOccupancy);
1147  poissonProbGoodStripsVsStripNumber[0]->Fill(strip_number,logPoissonProb);
1148  poissonProbGoodStripsVsStripNumber[subdetid-2]->Fill(strip_number,logPoissonProb);
1151  }
1152 }
bool isDebugEnabled()
int i
Definition: DBlmapReader.cc:9
unsigned int tibLayer(const DetId &id) const
unsigned int tibString(const DetId &id) const
unsigned int tidRing(const DetId &id) const
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:975
bool tobIsStereo(const DetId &id) const
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:665
unsigned int tecRing(const DetId &id) const
ring id
T y() const
Definition: PV3DBase.h:63
unsigned int tidWheel(const DetId &id) const
void CalculateMeanAndRMS(const std::vector< Apv > &, std::pair< double, double > *, int)
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
bool tecIsZMinusSide(const DetId &id) const
bool tidIsStereo(const DetId &id) const
bool tidIsZMinusSide(const DetId &id) const
U second(std::pair< T, U > const &p)
bool tecIsStereo(const DetId &id) const
bool tibIsExternalString(const DetId &id) const
bool tibIsZMinusSide(const DetId &id) const
unsigned int tidModule(const DetId &id) const
bool tidIsBackRing(const DetId &id) const
T z() const
Definition: PV3DBase.h:64
void compact(unsigned int &, std::vector< unsigned int > &)
T Abs(T a)
Definition: MathUtil.h:49
bool tobIsZMinusSide(const DetId &id) const
int j
Definition: DBlmapReader.cc:9
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
Definition: DQMStore.cc:1289
SiStripBadAPVandHotStripAlgorithmFromClusterOccupancy(const edm::ParameterSet &, const TrackerTopology *)
void fillBadComponents()
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
#define LogTrace(id)
unsigned int tibModule(const DetId &id) const
unsigned int tecModule(const DetId &id) const
bool tecIsBackPetal(const DetId &id) const
Definition: DetId.h:18
bool tibIsStereo(const DetId &id) const
TH1F * getTH1F(void) const
void AnalyzeOccupancy(SiStripQuality *, std::vector< Apv > &, std::pair< double, double > *, std::vector< unsigned int > &, edm::ESHandle< SiStripQuality > &)
unsigned int tobModule(const DetId &id) const
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, const uint32_t lumi=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE", const bool resetMEsAfterWriting=false)
Definition: DQMStore.cc:2566
double a
Definition: hdecay.h:121
TProfile * getTProfile(void) const
std::pair< ContainerIterator, ContainerIterator > Range
virtual LocalPoint localPosition(float strip) const =0
unsigned int tecPetalNumber(const DetId &id) const
tuple cout
Definition: gather_cfg.py:121
void extractBadAPVSandStrips(SiStripQuality *, HistoMap &, edm::ESHandle< SiStripQuality > &)
volatile std::atomic< bool > shutdown_flag false
unsigned int tobRod(const DetId &id) const
TH2F * getTH2F(void) const
bool put(const uint32_t &detID, const InputVector &vect)
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1103
T x() const
Definition: PV3DBase.h:62
unsigned int tecWheel(const DetId &id) const
unsigned int encode(const unsigned short &first, const unsigned short &NconsecutiveBadStrips, const unsigned short &flag=0)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:688
unsigned int tobLayer(const DetId &id) const
virtual const TrackerGeomDet * idToDet(DetId) const