CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelDataQuality.cc
Go to the documentation of this file.
1 
13 
17 
20 
26 
29 
35 
36 #include "TClass.h"
37 #include "TText.h"
38 #include "TROOT.h"
39 #include "TPad.h"
40 #include "TStyle.h"
41 #include "TSystem.h"
42 #include "TString.h"
43 #include "TImage.h"
44 #include "TPaveText.h"
45 #include "TImageDump.h"
46 #include "TRandom.h"
47 #include "TStopwatch.h"
48 #include "TAxis.h"
49 #include "TPaveLabel.h"
50 #include "Rtypes.h"
51 #include "TH1F.h"
52 #include "TH2F.h"
53 #include "TProfile.h"
54 
55 #include <iostream>
56 #include <math.h>
57 #include <map>
58 
59 #include <fstream>
60 #include <cstdlib> // for free() - Root can allocate with malloc() - sigh...
61 
62 using namespace std;
63 using namespace edm;
64 
65 //------------------------------------------------------------------------------
69 SiPixelDataQuality::SiPixelDataQuality(bool offlineXMLfile) : offlineXMLfile_(offlineXMLfile) {
70  edm::LogInfo("SiPixelDataQuality") <<
71  " Creating SiPixelDataQuality " << "\n" ;
72 
73  allMods_=0;
74  errorMods_=0;
75  qflag_=1.;
76 
77  allmodsMap=0;
78  errmodsMap=0;
79  goodmodsMap=0;
80  allmodsVec=0;
81  errmodsVec=0;
82  goodmodsVec=0;
83  for (int i = 0; i < 40; ++i)
84  {lastallmods_[i] = 0; lasterrmods_[i] = 0;}
86  lastLS_=-1;
87 }
88 
89 //------------------------------------------------------------------------------
94  edm::LogInfo("SiPixelDataQuality") <<
95  " Deleting SiPixelDataQuality " << "\n" ;
96  if(allmodsMap) delete allmodsMap;
97  if(errmodsMap) delete errmodsMap;
98  if(goodmodsMap) delete goodmodsMap;
99  if(allmodsVec) delete allmodsVec;
100  if(errmodsVec) delete errmodsVec;
101  if(goodmodsVec) delete goodmodsVec;
102 }
103 
104 
105 //------------------------------------------------------------------------------
111 {
112  string mEName = mE->getName() ;
113 
114  int detId = 0;
115 
116  if( mEName.find("_3") != string::npos )
117  {
118  string detIdString = mEName.substr((mEName.find_last_of("_"))+1,9);
119  std::istringstream isst;
120  isst.str(detIdString);
121  isst>>detId;
122 // } else {
123 // cout << ACYellow << ACBold
124 // << "[SiPixelInformationExtractor::getDetId()] "
125 // << ACPlain
126 // << "Could not extract detId from "
127 // << mEName
128 // << endl ;
129  }
130 
131  return detId ;
132 
133 }
134 
136 
137 void SiPixelDataQuality::bookGlobalQualityFlag(DQMStore * bei, bool Tier0Flag, int nFEDs) {
138 //std::cout<<"BOOK GLOBAL QUALITY FLAG MEs!"<<std::endl;
139  bei->cd();
140 
141  bei->setCurrentFolder("Pixel/EventInfo");
142  if(!Tier0Flag){
143  /*SummaryReportMap = bei->book2D("reportSummaryMap","Pixel Summary Map",40,0.,40.,36,1.,37.);
144  SummaryReportMap->setAxisTitle("Pixel FED #",1);
145  SummaryReportMap->setAxisTitle("Pixel FED Channel #",2);
146  allmodsMap = new TH2F("allmodsMap","allmodsMap",40,0.,40.,36,1.,37.);
147  errmodsMap = new TH2F("errmodsMap","errmodsMap",40,0.,40.,36,1.,37.);
148  goodmodsMap = new TH2F("goodmodsMap","goodmodsMap",40,0.,40.,36,1.,37.);
149  */
150  SummaryReportMap = bei->book2D("reportSummaryMap","Pixel Summary Map",2000,0.,2000.,40,0.,40.);
151  SummaryReportMap->setAxisTitle("Lumi Section",1);
152  SummaryReportMap->setAxisTitle("Pixel FED #",2);
153  allmodsVec = new TH1D("allmodsVec","allmodsVec",40,0.,40.);
154  errmodsVec = new TH1D("errmodsVec","errmodsVec",40,0.,40.);
155  goodmodsVec = new TH1D("goodmodsVec","goodmodsVec",40,0.,40.);
156  }else{
157  SummaryReportMap = bei->book2D("reportSummaryMap","Pixel Summary Map",2,0.,2.,7,0.,7.);
158  SummaryReportMap->setBinLabel(1,"Barrel",1);
159  SummaryReportMap->setBinLabel(2,"Endcaps",1);
160  SummaryReportMap->setBinLabel(1,"Errors",2);
161  SummaryReportMap->setBinLabel(2,"NDigis",2);
162  SummaryReportMap->setBinLabel(3,"DigiCharge",2);
163  SummaryReportMap->setBinLabel(4,"ClusterSize",2);
164  SummaryReportMap->setBinLabel(5,"NClusters",2);
165  SummaryReportMap->setBinLabel(6,"ClusterCharge",2);
166  SummaryReportMap->setBinLabel(7,"HitEff",2);
167  allmodsMap = new TH2F("allmodsMap","allmodsMap",2,0.,2.,7,0.,7.);
168  errmodsMap = new TH2F("errmodsMap","errmodsMap",2,0.,2.,7,0.,7.);
169  goodmodsMap = new TH2F("goodmodsMap","goodmodsMap",2,0.,2.,7,0.,7.);
170  }
171  SummaryPixel = bei->bookFloat("reportSummary");
172  bei->setCurrentFolder("Pixel/EventInfo/reportSummaryContents");
173  SummaryBarrel = bei->bookFloat("PixelBarrelFraction");
174  SummaryEndcap = bei->bookFloat("PixelEndcapFraction");
175  // book the data certification cuts:
176  bei->setCurrentFolder("Pixel/AdditionalPixelErrors");
177  NErrorsFEDs = bei->bookFloat("FEDsNErrorsCut");
178  bei->setCurrentFolder("Pixel/Barrel");
179  NErrorsBarrel = bei->bookFloat("BarrelNErrorsCut");
180  NDigisBarrel = bei->bookInt("BarrelNDigisCut");
181  DigiChargeBarrel = bei->bookInt("BarrelDigiChargeCut");
182  ClusterSizeBarrel = bei->bookInt("BarrelClusterSizeCut");
183  NClustersBarrel = bei->bookInt("BarrelNClustersCut");
184  ClusterChargeBarrel = bei->bookInt("BarrelClusterChargeCut");
185  bei->setCurrentFolder("Pixel/Endcap");
186  NErrorsEndcap = bei->bookFloat("EndcapNErrorsCut");
187  NDigisEndcap = bei->bookInt("EndcapNDigisCut");
188  DigiChargeEndcap = bei->bookInt("EndcapDigiChargeCut");
189  ClusterSizeEndcap = bei->bookInt("EndcapClusterSizeCut");
190  NClustersEndcap = bei->bookInt("EndcapNClustersCut");
191  ClusterChargeEndcap = bei->bookInt("EndcapClusterChargeCut");
192  if(Tier0Flag){
193  bei->setCurrentFolder("Pixel/Tracks");
194  NPixelTracks = bei->bookInt("PixelTracksCut");
195  }
196 
197  // Init MonitoringElements:
198  if(nFEDs>0){
199  SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
200  if(SummaryPixel) SummaryPixel->Fill(1.);
201  SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
203  SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
205  }else{
206  SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
207  if(SummaryPixel) SummaryPixel->Fill(-1.);
208  SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
209  if(SummaryBarrel) SummaryBarrel->Fill(-1.);
210  SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
211  if(SummaryEndcap) SummaryEndcap->Fill(-1.);
212  }
213  NErrorsBarrel = bei->get("Pixel/Barrel/BarrelNErrorsCut");
215  NErrorsEndcap = bei->get("Pixel/Endcap/EndcapNErrorsCut");
217  NErrorsFEDs = bei->get("Pixel/AdditionalPixelErrors/FEDsNErrorsCut");
218  if(NErrorsFEDs) NErrorsFEDs->Fill(1.);
219  NDigisBarrel = bei->get("Pixel/Barrel/BarrelNDigisCut");
221  NDigisEndcap = bei->get("Pixel/Endcap/EndcapNDigisCut");
223  DigiChargeBarrel = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
225  DigiChargeEndcap = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
227  ClusterSizeBarrel = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
229  ClusterSizeEndcap = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
231  ClusterChargeBarrel = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
233  ClusterChargeEndcap = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
235  NClustersBarrel = bei->get("Pixel/Barrel/BarrelNClustersCut");
237  NClustersEndcap = bei->get("Pixel/Endcap/EndcapNClustersCut");
239  if(Tier0Flag){
240  NPixelTracks = bei->get("Pixel/Tracks/PixelTracksCut");
242  }
243 
244  SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
245  if(SummaryReportMap){
246  if(!Tier0Flag) for(int i=1; i!=2001; i++) for(int j=1; j!=41; j++) SummaryReportMap->setBinContent(i,j,-1.);
247  if(Tier0Flag) for(int i=1; i!=3; i++) for(int j=1; j!=8; j++) SummaryReportMap->setBinContent(i,j,-1.);
248  }
249  if(!Tier0Flag){
250  for(int j=1; j!=41; j++){
251  if(allmodsVec) allmodsVec->SetBinContent(j,0.);
252  if(errmodsVec) errmodsVec->SetBinContent(j,0.);
253  if(goodmodsVec) goodmodsVec->SetBinContent(j,0.);
254  }
255  }
256  if(Tier0Flag){
257  for(int i=1; i!=3; i++) for(int j=1; j!=8; j++){
258  if(allmodsMap) allmodsMap->SetBinContent(i,j,0.);
259  if(errmodsMap) errmodsMap->SetBinContent(i,j,0.);
260  if(goodmodsMap) goodmodsMap->SetBinContent(i,j,0.);
261  }
262  }
263 
264  bei->cd();
265 }
266 
267 //**********************************************************************************************
268 
270  bool init,
271  int nFEDs,
272  bool Tier0Flag){
273 //cout<<"entering SiPixelDataQuality::ComputeGlobalQualityFlag"<<endl;
274 // cout << ACRed << ACBold
275 // << "[SiPixelDataQuality::ComputeGlobalQualityFlag]"
276 // << ACPlain
277 // << " Enter"
278 // << endl ;
279  if(init){
280 //cout<<"Entering SiPixelDataQuality::computeGlobalQualityFlag for the first time"<<endl;
281  allMods_=0; errorMods_=0; qflag_=0.;
283  objectCount_=0;
284  DONE_ = false;
285 
286  //Error counters and flags:
290  digiStatsBarrel = false, clusterStatsBarrel = false, trackStatsBarrel = false;
292  digiStatsEndcap = false, clusterStatsEndcap = false, trackStatsEndcap = false;
294  init=false;
295  }
296  if(nFEDs==0) return;
297 
298  string currDir = bei->pwd();
299  string dname = currDir.substr(currDir.find_last_of("/")+1);
300 //cout<<"currDir="<<currDir<<endl;
301 
302  if((!Tier0Flag && dname.find("Module_")!=string::npos) ||
303  (Tier0Flag && (dname.find("Ladder_")!=string::npos || dname.find("Blade_")!=string::npos))){
304 
305  objectCount_++;
306 
307  if(currDir.find("Pixel")!=string::npos) allMods_++;
308  if(currDir.find("Barrel")!=string::npos) barrelMods_++;
309  if(currDir.find("Endcap")!=string::npos) endcapMods_++;
310  vector<string> meVec = bei->getMEs();
311  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
312  string full_path = currDir + "/" + (*it);
313  //cout<<"full_path:"<<full_path<<endl;
314  if(full_path.find("ndigis_")!=string::npos){
315  //cout<<"found an ndigi histo now"<<endl;
316  MonitorElement * me = bei->get(full_path);
317  if(!me) continue;
318  //cout<<"got the histo now"<<endl;
319  if(me->getEntries()>25){
320  //cout<<"histo has more than 50 entries"<<endl;
321  if(full_path.find("Barrel")!=string::npos) digiCounterBarrel++;
322  if(full_path.find("Endcap")!=string::npos) digiCounterEndcap++;
323  //cout<<"counter are now: "<<digiCounterBarrel<<","<<digiCounterBarrelL1<<endl;
324  }
325  }else if(Tier0Flag && full_path.find("nclusters_OnTrack_")!=string::npos){
326  MonitorElement * me = bei->get(full_path);
327  if(!me) continue;
328  if(me->getEntries()>25){
329  if(full_path.find("Barrel")!=string::npos) clusterCounterBarrel++;
330  if(full_path.find("Endcap")!=string::npos) clusterCounterEndcap++;
331  }
332  }else if(!Tier0Flag && full_path.find("nclusters_")!=string::npos){
333  MonitorElement * me = bei->get(full_path);
334  if(!me) continue;
335  if(me->getEntries()>25){
336  if(full_path.find("Barrel")!=string::npos) clusterCounterBarrel++;
337  if(full_path.find("Endcap")!=string::npos) clusterCounterEndcap++;
338  }
339  }
340  }
341  }
342  vector<string> subDirVec = bei->getSubdirs();
343  for (vector<string>::const_iterator ic = subDirVec.begin();
344  ic != subDirVec.end(); ic++) {
345  bei->cd(*ic);
346  init=false;
347  computeGlobalQualityFlag(bei,init,nFEDs,Tier0Flag);
348  bei->goUp();
349  }
350 
351  // Make sure I have finished looping over all Modules/Ladders/Blades:
352  if(!Tier0Flag){ // online case
353  if(objectCount_ == 1440) DONE_ = true;
354  }else{ // offline case
355  if(objectCount_ == 288) DONE_ = true;
356  }
357 
358  if(DONE_ && currDir=="Pixel/EventInfo/reportSummaryContents"){
359 
360  // Evaluate error flag now, only stored in AdditionalPixelErrors:
361  MonitorElement * me_err = bei->get("Pixel/AdditionalPixelErrors/FedETypeNErrArray");
362  MonitorElement * me_evt = bei->get("Pixel/EventInfo/processedEvents");
363  if(me_err && me_evt){
364  for(int i=1; i!=41; i++)for(int j=1; j!=22; j++)
365  if(me_err->getBinContent(i,j)>0){
367  if(i<33) n_errors_barrel_=n_errors_barrel_+int(me_err->getBinContent(i,j));
368  if(i>32) n_errors_endcap_=n_errors_endcap_+int(me_err->getBinContent(i,j));
369  }
370  int NProcEvts = me_evt->getIntValue();
371  if(NProcEvts>0){
372  barrel_error_flag_ = (float(NProcEvts)-float(n_errors_barrel_))/float(NProcEvts);
373  endcap_error_flag_ = (float(NProcEvts)-float(n_errors_endcap_))/float(NProcEvts);
374  pixel_error_flag_ = (float(NProcEvts)-float(n_errors_barrel_)-float(n_errors_endcap_))/float(NProcEvts);
375  }
376  }
377  NErrorsBarrel = bei->get("Pixel/Barrel/BarrelNErrorsCut");
379  NErrorsEndcap = bei->get("Pixel/Endcap/EndcapNErrorsCut");
381 
382  string meName0;
383  MonitorElement * me;
384 
385  // Fill the Digi flags:
386  if(!Tier0Flag){
387  meName0 = "Pixel/Barrel/SUMDIG_ndigis_Barrel";
388  if(digiCounterBarrel/768 > 0.5) digiStatsBarrel = true;
389  if(digiCounterEndcap/672 > 0.5) digiStatsEndcap = true;
390  //cout<<"digiStatsBarrel="<<digiStatsBarrel<<" , digiStatsEndcap="<<digiStatsEndcap<<endl;
391  }else{
392  meName0 = "Pixel/Barrel/SUMOFF_ndigis_Barrel";
393  if(digiCounterBarrel/192 > 0.5) digiStatsBarrel = true;
394  if(digiCounterEndcap/96 > 0.5) digiStatsEndcap = true;
395  }
396  me = bei->get(meName0);
397  if(me){
398  NDigisBarrel = bei->get("Pixel/Barrel/BarrelNDigisCut");
399  // cout<<"NDigis: "<<NDigisBarrel<<" , "<<digiStatsBarrel<<" , "<<me->hasError()<<endl;
401  if(me->hasError()) NDigisBarrel->Fill(0);
402  else NDigisBarrel->Fill(1);
403  }
404  }
405  if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMDIG_ndigis_Endcap";
406  else meName0 = "Pixel/Endcap/SUMOFF_ndigis_Endcap";
407  me = bei->get(meName0);
408  if(me){
409  NDigisEndcap = bei->get("Pixel/Endcap/EndcapNDigisCut");
411  if(me->hasError()) NDigisEndcap->Fill(0);
412  else NDigisEndcap->Fill(1);
413  }
414  }
415  if(!Tier0Flag) meName0 = "Pixel/Barrel/SUMDIG_adc_Barrel";
416  else meName0 = "Pixel/Barrel/SUMOFF_adc_Barrel";
417  me = bei->get(meName0);
418  if(me){
419  DigiChargeBarrel = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
421  if(me->hasError()) DigiChargeBarrel->Fill(0);
422  else DigiChargeBarrel->Fill(1);
423  }
424  }
425  if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMDIG_adc_Endcap";
426  else meName0 = "Pixel/Endcap/SUMOFF_adc_Endcap";
427  me = bei->get(meName0);
428  if(me){
429  DigiChargeEndcap = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
431  if(me->hasError()) DigiChargeEndcap->Fill(0);
432  else DigiChargeEndcap->Fill(1);
433  }
434  }
435 
436 
437  // Fill the Cluster flags:
438  if(!Tier0Flag){
439  meName0 = "Pixel/Barrel/SUMCLU_size_Barrel";
440  if(clusterCounterBarrel/768 > 0.5) clusterStatsBarrel = true;
441  if(clusterCounterEndcap/672 > 0.5) clusterStatsEndcap = true;
442  }else{
443  meName0 = "Pixel/Barrel/SUMOFF_size_OnTrack_Barrel";
444  if(clusterCounterBarrel/192 > 0.5) clusterStatsBarrel = true;
445  if(clusterCounterEndcap/96 > 0.5) clusterStatsEndcap = true;
446  }
447  me = bei->get(meName0);
448  if(me){
449  ClusterSizeBarrel = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
451  if(me->hasError()) ClusterSizeBarrel->Fill(0);
452  else ClusterSizeBarrel->Fill(1);
453  }
454  }
455  if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMCLU_size_Endcap";
456  else meName0 = "Pixel/Endcap/SUMOFF_size_OnTrack_Endcap";
457  me = bei->get(meName0);
458  if(me){
459  ClusterSizeEndcap = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
461  if(me->hasError()) ClusterSizeEndcap->Fill(0);
462  else ClusterSizeEndcap->Fill(1);
463  }
464  }
465  if(!Tier0Flag) meName0 = "Pixel/Barrel/SUMCLU_charge_Barrel";
466  else meName0 = "Pixel/Barrel/SUMOFF_charge_OnTrack_Barrel";
467  me = bei->get(meName0);
468  if(me){
469  ClusterChargeBarrel = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
471  if(me->hasError()) ClusterChargeBarrel->Fill(0);
472  else ClusterChargeBarrel->Fill(1);
473  }
474  }
475  if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMCLU_charge_Endcap";
476  else meName0 = "Pixel/Endcap/SUMOFF_charge_OnTrack_Endcap";
477  me = bei->get(meName0);
478  if(me){
479  ClusterChargeEndcap = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
481  if(me->hasError()) ClusterChargeEndcap->Fill(0);
482  else ClusterChargeEndcap->Fill(1);
483  }
484  }
485  if(!Tier0Flag) meName0 = "Pixel/Barrel/SUMCLU_nclusters_Barrel";
486  else meName0 = "Pixel/Barrel/SUMOFF_nclusters_OnTrack_Barrel";
487  me = bei->get(meName0);
488  if(me){
489  NClustersBarrel = bei->get("Pixel/Barrel/BarrelNClustersCut");
491  if(me->hasError()) NClustersBarrel->Fill(0);
492  else NClustersBarrel->Fill(1);
493  }
494  }
495  if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMCLU_nclusters_Endcap";
496  else meName0 = "Pixel/Endcap/SUMOFF_nclusters_OnTrack_Endcap";
497  me = bei->get(meName0);
498  if(me){
499  NClustersEndcap = bei->get("Pixel/Endcap/EndcapNClustersCut");
501  if(me->hasError()) NClustersEndcap->Fill(0);
502  else NClustersEndcap->Fill(1);
503  }
504  }
505  // Pixel Track multiplicity / Pixel hit efficiency
506  meName0 = "Pixel/Tracks/ntracks_generalTracks";
507  me = bei->get(meName0);
508  if(me){
509  NPixelTracks = bei->get("Pixel/Tracks/PixelTracksCut");
510  if(NPixelTracks && me->getBinContent(1)>1000){
511  if((float)me->getBinContent(2)/(float)me->getBinContent(1)<0.01){
512  NPixelTracks->Fill(0);
513  }else{
514  NPixelTracks->Fill(1);
515  }
516  }
517  }
518 
519 
520 //********************************************************************************************************
521 
522  // Final combination of all Data Quality results:
523  float pixelFlag = -1., barrelFlag = -1., endcapFlag = -1.;
524  float barrel_errors_temp[1]={-1.}; int barrel_cuts_temp[5]={5*-1};
525  float endcap_errors_temp[1]={-1.}; int endcap_cuts_temp[5]={5*-1};
526  int pixel_cuts_temp[1]={-1};
527  float combinedCuts = 1.; int numerator = 0, denominator = 0;
528 
529  // Barrel results:
530  me = bei->get("Pixel/Barrel/BarrelNErrorsCut");
531  if(me) barrel_errors_temp[0] = me->getFloatValue();
532  me = bei->get("Pixel/Barrel/BarrelNDigisCut");
533  if(me) barrel_cuts_temp[0] = me->getIntValue();
534  me = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
535  if(me) barrel_cuts_temp[1] = me->getIntValue();
536  me = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
537  if(me) barrel_cuts_temp[2] = me->getIntValue();
538  me = bei->get("Pixel/Barrel/BarrelNClustersCut");
539  if(me) barrel_cuts_temp[3] = me->getIntValue();
540  me = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
541  if(me) barrel_cuts_temp[4] = me->getIntValue();
542  for(int k=0; k!=5; k++){
543  if(barrel_cuts_temp[k]>=0){
544  numerator = numerator + barrel_cuts_temp[k];
545  denominator++;
546  //cout<<"cut flag, Barrel: "<<k<<","<<barrel_cuts_temp[k]<<","<<numerator<<","<<denominator<<endl;
547  }
548  }
549  if(denominator!=0) combinedCuts = float(numerator)/float(denominator);
550  barrelFlag = barrel_errors_temp[0] * combinedCuts;
551 
552 
553  //cout<<" the resulting barrel flag is: "<<barrel_errors_temp[0]<<"*"<<combinedCuts<<"="<<barrelFlag<<endl;
554 
555  // Endcap results:
556  combinedCuts = 1.; numerator = 0; denominator = 0;
557  me = bei->get("Pixel/Endcap/EndcapNErrorsCut");
558  if(me) endcap_errors_temp[0] = me->getFloatValue();
559  me = bei->get("Pixel/Endcap/EndcapNDigisCut");
560  if(me) endcap_cuts_temp[0] = me->getIntValue();
561  me = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
562  if(me) endcap_cuts_temp[1] = me->getIntValue();
563  me = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
564  if(me) endcap_cuts_temp[2] = me->getIntValue();
565  me = bei->get("Pixel/Endcap/EndcapNClustersCut");
566  if(me) endcap_cuts_temp[3] = me->getIntValue();
567  me = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
568  if(me) endcap_cuts_temp[4] = me->getIntValue();
569  for(int k=0; k!=5; k++){
570  if(endcap_cuts_temp[k]>=0){
571  numerator = numerator + endcap_cuts_temp[k];
572  denominator++;
573  //cout<<"cut flag, Endcap: "<<k<<","<<endcap_cuts_temp[k]<<","<<numerator<<","<<denominator<<endl;
574  }
575  }
576  if(denominator!=0) combinedCuts = float(numerator)/float(denominator);
577  endcapFlag = endcap_errors_temp[0] * combinedCuts;
578  //cout<<" the resulting endcap flag is: "<<endcap_errors_temp[0]<<"*"<<combinedCuts<<"="<<endcapFlag<<endl;
579 
580  // Track results:
581  combinedCuts = 1.; numerator = 0; denominator = 0;
582  me = bei->get("Pixel/Tracks/PixelTracksCut");
583  if(me) pixel_cuts_temp[0] = me->getIntValue();
584 
585  //Combination of all:
586  combinedCuts = 1.; numerator = 0; denominator = 0;
587  for(int k=0; k!=5; k++){
588  if(barrel_cuts_temp[k]>=0){
589  numerator = numerator + barrel_cuts_temp[k];
590  denominator++;
591  }
592  //cout<<"after barrel: num="<<numerator<<" , den="<<denominator<<endl;
593  if(endcap_cuts_temp[k]>=0){
594  numerator = numerator + endcap_cuts_temp[k];
595  denominator++;
596  }
597  if(k<1 && pixel_cuts_temp[k]>=0){
598  numerator = numerator + pixel_cuts_temp[k];
599  denominator++;
600  }
601  //cout<<"after both: num="<<numerator<<" , den="<<denominator<<endl;
602  }
603  if(denominator!=0) combinedCuts = float(numerator)/float(denominator);
604  pixelFlag = float(pixel_error_flag_) * float(combinedCuts);
605 
606 
607  //cout<<"barrel, endcap, pixel flags: "<<barrelFlag<<","<<endcapFlag<<","<<pixelFlag<<endl;
608  SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
609  if(SummaryPixel) SummaryPixel->Fill(pixelFlag);
610  SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
611  if(SummaryBarrel) SummaryBarrel->Fill(barrelFlag);
612  SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
613  if(SummaryEndcap) SummaryEndcap->Fill(endcapFlag);
614  }
615 }
616 
617 //**********************************************************************************************
618 
620  bool init,
621  int nFEDs,
622  bool Tier0Flag,
623  int nEvents_lastLS_){
624 //cout<<"entering SiPixelDataQuality::ComputeGlobalQualityFlagByLumi"<<endl;
625 // cout << ACRed << ACBold
626 // << "[SiPixelDataQuality::ComputeGlobalQualityFlag]"
627 // << ACPlain
628 // << " Enter"
629 // << endl ;
630 
631  if(nFEDs==0) return;
632 
633  float BarrelRate_LS = 0.;
634  float EndcapRate_LS = 0.;
635  float PixelRate_LS = 0.;
636  MonitorElement * me = bei->get("Pixel/AdditionalPixelErrors/byLumiErrors");
637  if(me){
638  double nEvents_LS = me->getBinContent(0) - nEvents_lastLS_;
639  double nBarrelErrors_LS = me->getBinContent(1);
640  double nEndcapErrors_LS = me->getBinContent(2);
641  BarrelRate_LS = nBarrelErrors_LS / nEvents_LS / 32.; // normalize to nevents and nFEDchannels
642  EndcapRate_LS = nEndcapErrors_LS / nEvents_LS / 8.;
643  PixelRate_LS = (nBarrelErrors_LS + nEndcapErrors_LS) / nEvents_LS / 40.;
644  //std::cout<<"nEvents_LS: "<<nEvents_LS<<" , nBarrelErrors_LS: "<<nBarrelErrors_LS<<" , nEndcapErrors_LS: "<<nEndcapErrors_LS<<" , BarrelRate_LS: "<<BarrelRate_LS<<" , EndcapRate_LS: "<<EndcapRate_LS<<" , PixelRate_LS: "<<PixelRate_LS<<std::endl;
645  }
646 
647  float pixelFlag = 1.-PixelRate_LS;
648  float barrelFlag = 1.-BarrelRate_LS;
649  float endcapFlag = 1.-EndcapRate_LS;
650 
651  //cout<<"barrel, endcap, pixel flags: "<<barrelFlag<<","<<endcapFlag<<","<<pixelFlag<<endl;
652  SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
653  if(SummaryPixel) SummaryPixel->Fill(pixelFlag);
654  SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
655  if(SummaryBarrel) SummaryBarrel->Fill(barrelFlag);
656  SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
657  if(SummaryEndcap) SummaryEndcap->Fill(endcapFlag);
658 
659 }
660 
661 //**********************************************************************************************
662 
663 void SiPixelDataQuality::fillGlobalQualityPlot(DQMStore * bei, bool init, edm::EventSetup const& eSetup, int nFEDs, bool Tier0Flag, int lumisec){
664 //std::cout<<"Entering SiPixelDataQuality::fillGlobalQualityPlot: "<<nFEDs<<std::endl;
665  //calculate eta and phi of the modules and fill a 2D plot:
666  if(lastLS_<lumisec){ cout<<"lastLS_="<<lastLS_<<" ,lumisec="<<lumisec<<endl; lastLS_=lumisec; init=true; cout<<"init="<<init<<endl; }
667  if(init){
668  count=0; errcount=0;
669  init=false;
670  count1=0;
671  count2=0;
672  count3=0;
673  count4=0;
674  count5=0;
675  count6=0;
676  modCounter_=0;
677  if(!Tier0Flag){
678  cout<<"RESETS"<<endl;
679  //The plots that these Vecs are integrated throughout a run
680  //So at each lumi section I save their last values (lastmods)
681  //And then subtract them out later when filling the SummaryMap
682  for(int j=1; j!=41; j++){
683  if(allmodsVec) lastallmods_[j-1] = allmodsVec->GetBinContent(j);
684  if(errmodsVec) lasterrmods_[j-1] = errmodsVec->GetBinContent(j);
685  if(allmodsVec) allmodsVec->SetBinContent(j,0.);
686  if(errmodsVec) errmodsVec->SetBinContent(j,0.);
687  if(goodmodsVec) goodmodsVec->SetBinContent(j,0.);
688  }
689  }
690  if(Tier0Flag){
691  for(int i=1; i!=3; i++) for(int j=1; j!=8; j++){
692  if(allmodsMap) allmodsMap->SetBinContent(i,j,0.);
693  if(errmodsMap) errmodsMap->SetBinContent(i,j,0.);
694  if(goodmodsMap) goodmodsMap->SetBinContent(i,j,0.);
695  }
696  }
697  }
698 
699 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
700 // Fill Maps:
701  // Online:
702  if(nFEDs==0) return;
703 /* if(!Tier0Flag){
704  eSetup.get<SiPixelFedCablingMapRcd>().get(theCablingMap);
705  string currDir = bei->pwd();
706  if(currDir.find("Reference")!=string::npos) return;
707  //cout<<"currDir="<<currDir<<endl;
708  string dname = currDir.substr(currDir.find_last_of("/")+1);
709  // find a detId for Blades and Ladders (first of the contained Modules!):
710  ifstream infile(edm::FileInPath("DQM/SiPixelMonitorClient/test/detId.dat").fullPath().c_str(),ios::in);
711  string I_name[1440];
712  int I_detId[1440];
713  int I_fedId[1440];
714  int I_linkId[1440];
715  int nModsInFile=0;
716  while(!infile.eof()) {
717  infile >> I_name[nModsInFile] >> I_detId[nModsInFile] >> I_fedId[nModsInFile] >> I_linkId[nModsInFile] ;
718  //cout<<I_name<<" "<<I_detId<<" "<<I_fedId<<" "<<I_linkId ;
719  //getline(infile,dummys); //necessary to reach end of record
720  infile.close();
721  nModsInFile++;
722  }
723  if(dname.find("Module_")!=string::npos && currDir.find("Reference")==string::npos){
724  vector<string> meVec = bei->getMEs();
725  int detId=-1; int fedId=-1; int linkId=-1;
726  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
727  //checking for any digis or FED errors to decide if this module is in DAQ:
728  string full_path = currDir + "/" + (*it);
729  //cout<<"path: "<<full_path<<" , detId= "<<detId<<endl;
730  if(detId==-1 && full_path.find("SUMOFF")==string::npos &&
731  (full_path.find("ndigis")!=string::npos && full_path.find("SUMDIG")==string::npos) &&
732  (getDetId(bei->get(full_path)) > 100)){
733  //cout<<"Got into the first ndigis or NErrors histogram!"<<endl;
734  MonitorElement * me = bei->get(full_path);
735  if (!me) continue;
736  if((full_path.find("ndigis")!=string::npos)){
737  modCounter_++;
738  detId = getDetId(me);
739  for(int fedid=0; fedid!=40; ++fedid){
740  SiPixelFrameConverter converter(theCablingMap.product(),fedid);
741  uint32_t newDetId = detId;
742  if(converter.hasDetUnit(newDetId)){
743  fedId=fedid;
744  break;
745  }
746  }
747  if(fedId==-1) continue;
748  sipixelobjects::ElectronicIndex cabling;
749  SiPixelFrameConverter formatter(theCablingMap.product(),fedId);
750  sipixelobjects::DetectorIndex detector = {detId, 1, 1};
751  formatter.toCabling(cabling,detector);
752  linkId = cabling.link;
753  //cout<<"it has this FED ID and channel ID: "<<fedId<<" , "<<linkId<<endl;
754  int NDigis = 0;
755  if(full_path.find("ndigis")!=string::npos) NDigis = me->getEntries();
756  float weight = (allmodsMap->GetBinContent(fedId+1,linkId))+NDigis;
757  allmodsMap->Fill(fedId,linkId,weight);
758  static const char buf[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErrArray_%d";
759  char fedplot[sizeof(buf)+4];
760  sprintf(fedplot,buf,fedId,linkId);
761  me = bei->get(fedplot);
762  int NErrors = 0;
763  if(me) NErrors = me->getIntValue();
764  //if(fedId==37&&linkId==5) std::cout<<"THIS CHANNEL: "<<fedplot<<" , "<<NErrors<<" , "<<bei->pwd()<<std::endl;
765  if(NErrors>0) {errmodsMap->Fill(fedId,linkId,NErrors);} //if(fedId==37&&linkId==5) std::cout<<"filling errmodsMap now : "<<errmodsMap->GetBinContent(fedId+1,linkId)<<" , and: "<<NErrors<<std::endl;}
766  }
767  }
768  }//end loop over MEs
769  }//end of module dir's
770  vector<string> subDirVec = bei->getSubdirs();
771  for (vector<string>::const_iterator ic = subDirVec.begin();
772  ic != subDirVec.end(); ic++) {
773  bei->cd(*ic);
774  init=false;
775  fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag);
776  bei->goUp();
777  }
778  if(modCounter_==1440){
779  bei->cd("Pixel/EventInfo/reportSummaryContents");
780  //cout<<"B: Loop over all modules is done, now I am in "<<bei->pwd()<<" and currDir is "<<currDir<<endl;
781  if(bei->pwd()=="Pixel/EventInfo/reportSummaryContents"){
782  SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
783  if(SummaryReportMap){
784  float contents=0.;
785  for(int i=0; i!=40; i++)for(int j=1; j!=37; j++){
786  //cout<<"bin: "<<i<<","<<j<<endl;
787  if((allmodsMap->GetBinContent(i+1,j)) + (errmodsMap->GetBinContent(i+1,j)) > 0){
788  contents = (allmodsMap->GetBinContent(i+1,j))/((allmodsMap->GetBinContent(i+1,j))+(errmodsMap->GetBinContent(i+1,j)));
789  }else{
790  contents = -1.;
791  }
792  //if(contents>=0.&&contents<0.8) std::cout<<"HERE: "<<i<<" , "<<j<<" , "<<allmodsMap->GetBinContent(i+1,j)<<" , "<<errmodsMap->GetBinContent(i+1,j)<<std::endl;
793  if(i==13&&j==17&&contents>0) count1++;
794  if(i==13&&j==18&&contents>0) count2++;
795  if(i==15&&j==5&&contents>0) count3++;
796  if(i==15&&j==6&&contents>0) count4++;
797  //cout<<"\t\t MAP: "<<i<<","<<j<<","<<contents<<endl;
798  if(((i==0||i==2||i==3||i==5||i==11||i==8)&&(j==1||j==8||j==13||j==17||j==20))||
799  ((i==1||i==9||i==10||i==13)&&(j==1||j==5||j==8||j==20||j==22))||
800  ((i==4||i==12)&&(j==5||j==10||j==13||j==17||j==22))||
801  ((i==2||i==5||i==6||i==7||i==14)&&(j==5||j==10||j==22))||
802  ((i==7||i==10)&&(j==13||j==17))||
803  ((i==6||i==14)&&(j==1||j==20))||
804  ((i==10||i==13)&&(j==10))||
805  ((i==4||i==12)&&(j==2))||
806  ((i==14)&&(j==15))){
807  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+1));
808  }else if(((i==16||i==19||i==21||i==24||i==26||i==27||i==29)&&(j==2||j==9||j==14||j==18||j==21))||
809  ((i==17||i==18||i==25)&&(j==2||j==6||j==9||j==21||j==23))||
810  ((i==20||i==23||i==28||i==31)&&(j==6||j==11||j==14||j==18||j==23))||
811  ((i==21||i==22||i==26||i==29||i==30)&&(j==6||j==11||j==23))||
812  ((i==18)&&(j==14||j==18))||
813  ((i==22||i==30)&&(j==2||j==21))||
814  ((i==18)&&(j==11))||
815  ((i==17||i==25)&&(j==16))||
816  ((i==19||i==27)&&(j==5))){
817  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-1));
818  }else if(i==6&&(j==14||j==15)){
819  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+2));
820  }else if((i==14)&&j==14){
821  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+3));
822  }else if((i==17||i==25)&&j==17){
823  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-3));
824  }else if(((i==0||i==2||i==3||i==5||i==8||i==10||i==11||i==13)&&(j==3||j==15))||
825  ((i==1||i==9)&&j==3)||
826  ((i==7||i==12||i==15)&&j==15)){
827  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+4));
828  }else if(((i==16||i==18||i==19||i==21||i==24||i==26||i==27||i==29)&&(j==7||j==19))||
829  ((i==17||i==25)&&j==7)||
830  ((i==20||i==23||i==28||i==31)&&j==19)){
831  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-4));
832  }else if((i==6||i==14)&&(j==13||j==19)){
833  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+5));
834  }else if((i==17||i==25)&&(j==18||j==24)){
835  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-5));
836  }else if(((i==4||i==12)&&j==1)||
837  ((i==3||i==11)&&j==6)){
838  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+6));
839  }else if((i==9||i==1)&&j==4){
840  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+8));
841  }else if((i==17||i==25)&&j==12){
842  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-8));
843  }else if(((i==20||i==28)&&j==20)||
844  ((i==19||i==27)&&j==22)){
845  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-11));
846  }else if(((i==20||i==28)&&j==21)||
847  ((i==19||i==27)&&j==23)){
848  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-13));
849  }else{
850  SummaryReportMap->setBinContent(i+1,j,contents);
851  }
852  }//end for loop over summaryReportMap bins
853  for(int i=0; i!=40; i++)for(int j=1; j!=37; j++){ // catch the last few holes...
854  if(((i==2||i==4||i==5||i==6||i==7||i==10||i==12||i==13||i==14||i==15)&&j==12)||
855  ((i==0||i==2||i==3||i==4||i==5||i==7||i==8||i==10||i==11||i==12||i==13||i==15)&&j==24)){
856  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-8));
857  }else if(((i==18||i==20||i==21||i==22||i==23||i==26||i==28||i==29||i==30||i==31)&&j==4)||
858  ((i==16||i==18||i==19||i==20||i==21||i==23||i==24||i==26||i==27||i==28||i==29||i==31)&&j==16)){
859  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+8));
860  }else if(((i==6||i==14)&&j==9)||
861  ((i==3||i==11)&&j==5)||
862  ((i==1||i==9)&&(j==11||j==16))){
863  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-1));
864  }else if(((i==17||i==25)&&j==10)||
865  ((i==22||i==30)&&(j==8||j==15))||
866  ((i==20||i==28)&&(j==2))){
867  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+1));
868  }else if((i==1||i==9)&&j==17){
869  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-3));
870  }else if((i==22||i==30)&&j==14){
871  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+3));
872  }else if((i==6||i==14)&&j==7){
873  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-4));
874  }else if((i==22||i==30)&&j==3){
875  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+4));
876  }else if((i==1||i==9)&&(j==18||j==24)){
877  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-5));
878  }else if((i==22||i==30)&&(j==13||j==19)){
879  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+5));
880  }else if(((i==20||i==28)&&j==1)||
881  ((i==19||i==27)&&j==6)){
882  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+6));
883  }else if(((i==4||i==12)&&j==20)||
884  ((i==3||i==11)&&j==22)){
885  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-11));
886  }else if(((i==4||i==12)&&j==21)||
887  ((i==3||i==11)&&j==23)){
888  SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-13));
889  }
890  }//end of loop over bins
891  //std::cout<<"COUNTERS: "<<count1<<" , "<<count2<<" , "<<count3<<" , "<<count4<<" , "<<count5<<" , "<<count6<<std::endl;
892  }//end if reportSummaryMap ME exists
893  }//end if in summary directory
894  }//end if modCounter_
895 */
896 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
897  if(!Tier0Flag){
899  string currDir = bei->pwd();
900  if(currDir.find("Reference")!=string::npos || currDir.find("Additional")!=string::npos) return;
901  //cout<<"currDir="<<currDir<<endl;
902  string dname = currDir.substr(currDir.find_last_of("/")+1);
903  if(dname.find("Module_")!=string::npos && currDir.find("Reference")==string::npos){
904  vector<string> meVec = bei->getMEs();
905  int detId=-1; int fedId=-1;
906  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++){//loop over all modules and fill ndigis into allmodsMap
907  //checking for any digis or FED errors to decide if this module is in DAQ:
908  string full_path = currDir + "/" + (*it);
909  if(detId==-1 && full_path.find("SUMOFF")==string::npos &&
910  (full_path.find("ndigis")!=string::npos && full_path.find("SUMDIG")==string::npos) &&
911  (getDetId(bei->get(full_path)) > 100)){
912  MonitorElement * me = bei->get(full_path);
913  if (!me) continue;
914  if((full_path.find("ndigis")!=string::npos)){
915  modCounter_++;
916  detId = getDetId(me);
917  for(int fedid=0; fedid!=40; ++fedid){
918  SiPixelFrameConverter converter(theCablingMap.product(),fedid);
919  uint32_t newDetId = detId;
920  if(converter.hasDetUnit(newDetId)){
921  fedId=fedid;
922  break;
923  }
924  }
925  double NDigis = 0;
926  if(full_path.find("ndigis")!=string::npos) NDigis = me->getEntries();
927  float weight = (allmodsVec->GetBinContent(fedId+1))+NDigis;
928  //cout<<"DIGIS: "<<currDir<<" , "<<fedId<<" , "<<weight<<" , "<<NDigis<<endl;
929  allmodsVec->SetBinContent(fedId+1,weight);
930  //cout<<"\t filled: "<<allmodsVec->GetBinContent(fedId+1,weight)<<endl;
931  }
932  }
933  }//end loop over MEs
934  }//end of module dir's
935  //if(currDir.find("FED_")!=std::string::npos){
936  //fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag,lumisec);
937  //bei->goUp();
938  //}
939  vector<string> subDirVec = bei->getSubdirs();
940  for (vector<string>::const_iterator ic = subDirVec.begin();
941  ic != subDirVec.end(); ic++) {
942  bei->cd(*ic);
943  init=false;
944  fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag,lumisec);
945  bei->goUp();
946  }
947  //cout<<"modCounter_: "<<modCounter_<<" , "<<bei->pwd()<<endl;
948  if(modCounter_==1440){
949  bei->cd("Pixel/EventInfo/reportSummaryContents");
950  if(bei->pwd()=="Pixel/EventInfo/reportSummaryContents"){
951  for(int i=0; i!=40; i++){//loop over FEDs to fetch the errors
952  static const char buf[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErrArray_%d";
953  char fedplot[sizeof(buf)+4];
954  int NErrors = 0;
955  for(int j=0; j!=37; j++){//loop over FED channels within a FED
956  sprintf(fedplot,buf,i,j);
957  MonitorElement * me = bei->get(fedplot);
958  if(me) NErrors = NErrors + me->getIntValue();
959  }
960  //If I fill, then I end up majorly overcounting the numbers of errors...
961  //if(NErrors>0){ errmodsVec->Fill(i,NErrors); }
962  if(NErrors>0){ errmodsVec->SetBinContent(i,NErrors); }
963  }
964  SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
965  if(SummaryReportMap){
966  MonitorElement * me = bei->get("Pixel/EventInfo/processedEvents");
967  int nevents = 0;
968  if(me) nevents = me->getIntValue();
969  float contents=0.;
970  for(int i=1; i!=41; i++){
971  //Dynamically subtracting previous (integrated) lumi section values
972  //in order to only show current lumi section's numbers
973  float mydigis = allmodsVec->GetBinContent(i) - lastallmods_[i-1];
974  float myerrs = errmodsVec->GetBinContent(i) - lasterrmods_[i-1];
975  if ((mydigis + myerrs) > 0.){
976  contents = mydigis/(mydigis + myerrs);
977  //std::cout<<"Fed: "<<i-1<<" , nevents: "<<nevents<<" , ndigis: "<< mydigis <<" , nerrors: "<< myerrs << " , contents: " << contents << std::endl;
978  }else{
979  //Changed so that dynamic zooming will still
980  //advance over these bins(in renderplugins)
981  contents = -0.5;
982  }
983  SummaryReportMap->setBinContent(lumisec+1,i,contents);
984  }//end for loop over summaryReportMap bins
985  }//end if reportSummaryMap ME exists
986  }//end if in summary directory
987  }//end if modCounter_
988  }else{ // Offline
989  float barrel_errors_temp[1]={-1.}; int barrel_cuts_temp[6]={6*-1};
990  float endcap_errors_temp[1]={-1.}; int endcap_cuts_temp[6]={6*-1};
991  int pixel_cuts_temp[1]={-1};
992  // Barrel results:
993  MonitorElement * me;
994  me = bei->get("Pixel/Barrel/BarrelNErrorsCut");
995  if(me) barrel_errors_temp[0] = me->getFloatValue();
996  me = bei->get("Pixel/Endcap/EndcapNErrorsCut");
997  if(me) endcap_errors_temp[0] = me->getFloatValue();
998  SummaryReportMap->setBinContent(1,1,barrel_errors_temp[0]);
999  SummaryReportMap->setBinContent(2,1,endcap_errors_temp[0]);
1000  me = bei->get("Pixel/Barrel/BarrelNDigisCut");
1001  if(me) barrel_cuts_temp[0] = me->getIntValue();
1002  me = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
1003  if(me) barrel_cuts_temp[1] = me->getIntValue();
1004  me = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
1005  if(me) barrel_cuts_temp[2] = me->getIntValue();
1006  me = bei->get("Pixel/Barrel/BarrelNClustersCut");
1007  if(me) barrel_cuts_temp[3] = me->getIntValue();
1008  me = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
1009  if(me) barrel_cuts_temp[4] = me->getIntValue();
1010  me = bei->get("Pixel/Endcap/EndcapNDigisCut");
1011  if(me) endcap_cuts_temp[0] = me->getIntValue();
1012  me = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
1013  if(me) endcap_cuts_temp[1] = me->getIntValue();
1014  me = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
1015  if(me) endcap_cuts_temp[2] = me->getIntValue();
1016  me = bei->get("Pixel/Endcap/EndcapNClustersCut");
1017  if(me) endcap_cuts_temp[3] = me->getIntValue();
1018  me = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
1019  if(me) endcap_cuts_temp[4] = me->getIntValue();
1020  for(int j=2; j!=7; j++){
1021  SummaryReportMap->setBinContent(1,j,barrel_cuts_temp[j-2]);
1022  SummaryReportMap->setBinContent(2,j,endcap_cuts_temp[j-2]);
1023  //cout<<"error cut values: "<<j<<" , "<<barrel_cuts_temp[j-2]<<" , "<<endcap_cuts_temp[j-2]<<endl;
1024  }
1025  me = bei->get("Pixel/Tracks/PixelTracksCut");
1026  if(me) pixel_cuts_temp[0] = me->getIntValue();
1027  SummaryReportMap->setBinContent(1,7,pixel_cuts_temp[0]);
1028  SummaryReportMap->setBinContent(2,7,pixel_cuts_temp[0]);
1029  }//end of offline map
1030  if(allmodsMap) allmodsMap->Clear();
1031  if(goodmodsMap) goodmodsMap->Clear();
1032  if(errmodsMap) errmodsMap->Clear();
1033 }
1034 
1035 //**********************************************************************************************
1036 
const std::string & getName(void) const
get name of ME
int i
Definition: DBlmapReader.cc:9
void computeGlobalQualityFlagByLumi(DQMStore *bei, bool init, int nFEDs, bool Tier0Flag, int nEvents_lastLS_)
void setBinContent(int binx, double content)
set content of bin (1-D)
std::vector< std::string > getSubdirs(void) const
Definition: DQMStore.cc:1216
void fillGlobalQualityPlot(DQMStore *bei, bool init, edm::EventSetup const &eSetup, int nFEDs, bool Tier0Flag, int lumisec)
MonitorElement * ClusterChargeBarrel
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:209
void computeGlobalQualityFlag(DQMStore *bei, bool init, int nFEDs, bool Tier0Flag)
int init
Definition: HydjetWrapper.h:63
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
bool hasError(void) const
true if at least of one of the quality tests returned an error
MonitorElement * SummaryBarrel
MonitorElement * ClusterSizeEndcap
double getEntries(void) const
get # of entries
int getDetId(MonitorElement *mE)
(Documentation under construction).
MonitorElement * NPixelTracks
MonitorElement * bookFloat(const char *name)
Book float.
Definition: DQMStore.cc:451
MonitorElement * NErrorsFEDs
void Fill(long long x)
MonitorElement * NDigisEndcap
MonitorElement * SummaryPixel
MonitorElement * NErrorsEndcap
double getFloatValue(void) const
MonitorElement * NErrorsBarrel
MonitorElement * NClustersEndcap
int j
Definition: DBlmapReader.cc:9
int nevents
void bookGlobalQualityFlag(DQMStore *bei, bool Tier0Flag, int nFEDs)
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1265
MonitorElement * ClusterSizeBarrel
int k[5][pyjets_maxn]
MonitorElement * SummaryReportMap
~SiPixelDataQuality()
Destructor of the SiPixelDataQuality class.
int64_t getIntValue(void) const
edm::ESHandle< SiPixelFedCablingMap > theCablingMap
MonitorElement * DigiChargeEndcap
const T & get() const
Definition: EventSetup.h:55
MonitorElement * SummaryEndcap
T const * product() const
Definition: ESHandle.h:62
std::vector< std::string > getMEs(void) const
get list of (non-dir) MEs of current directory
Definition: DQMStore.cc:1239
double getBinContent(int binx) const
get content of bin (1-D)
void goUp(void)
equivalent to &quot;cd ..&quot;
Definition: DQMStore.cc:243
MonitorElement * NDigisBarrel
tuple cout
Definition: gather_cfg.py:41
MonitorElement * bookInt(const char *name)
Book int.
Definition: DQMStore.cc:421
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:642
MonitorElement * ClusterChargeEndcap
MonitorElement * DigiChargeBarrel
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * NClustersBarrel
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:232
SiPixelDataQuality(bool offlineXMLfile)
Constructor of the SiPixelInformationExtractor class.
const std::string & pwd(void) const
Definition: DQMStore.cc:204