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