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