CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQM/SiPixelMonitorClient/src/SiPixelDataQuality.cc

Go to the documentation of this file.
00001 
00007 #include "DQM/SiPixelMonitorClient/interface/SiPixelDataQuality.h"
00008 #include "DQM/SiPixelMonitorClient/interface/SiPixelUtility.h"
00009 #include "DQM/SiPixelMonitorClient/interface/SiPixelEDAClient.h"
00010 #include "DQM/SiPixelMonitorClient/interface/ANSIColors.h"
00011 #include "DQM/SiPixelMonitorClient/interface/SiPixelHistoPlotter.h"
00012 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
00013 
00014 #include "DQMServices/Core/interface/DQMStore.h"
00015 #include "DQMServices/Core/interface/MonitorElement.h"
00016 #include "DQM/TrackerCommon/interface/CgiReader.h"
00017 
00018 #include "FWCore/ParameterSet/interface/FileInPath.h"
00019 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00020 
00021 #include "DataFormats/DetId/interface/DetId.h"
00022 #include "DataFormats/GeometrySurface/interface/Surface.h"
00023 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00024 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00025 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00026 
00027 #include "CondFormats/SiPixelObjects/interface/DetectorIndex.h"
00028 #include "CondFormats/SiPixelObjects/interface/SiPixelFrameConverter.h"
00029 
00030 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
00031 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00032 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00033 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00034 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
00035 
00036 #include "TClass.h"
00037 #include "TText.h"
00038 #include "TROOT.h"
00039 #include "TPad.h"
00040 #include "TStyle.h"
00041 #include "TSystem.h"
00042 #include "TString.h"
00043 #include "TImage.h"
00044 #include "TPaveText.h"
00045 #include "TImageDump.h"
00046 #include "TRandom.h"
00047 #include "TStopwatch.h"
00048 #include "TAxis.h"
00049 #include "TPaveLabel.h"
00050 #include "Rtypes.h"
00051 #include "TH1F.h"
00052 #include "TH2F.h"
00053 #include "TProfile.h"
00054 
00055 #include <iostream>
00056 #include <math.h>
00057 #include <map>
00058 
00059 #include <fstream>
00060 #include <cstdlib> // for free() - Root can allocate with malloc() - sigh...
00061  
00062 using namespace std;
00063 using namespace edm;
00064 
00065 //------------------------------------------------------------------------------
00069 SiPixelDataQuality::SiPixelDataQuality(bool offlineXMLfile) : offlineXMLfile_(offlineXMLfile) {
00070   edm::LogInfo("SiPixelDataQuality") << 
00071     " Creating SiPixelDataQuality " << "\n" ;
00072   
00073   allMods_=0;
00074   errorMods_=0;
00075   qflag_=1.;
00076 
00077   allmodsMap=0;
00078   errmodsMap=0;
00079   goodmodsMap=0;
00080   allmodsVec=0;
00081   errmodsVec=0;
00082   goodmodsVec=0;
00083   for (int i = 0; i < 40; ++i)
00084     {lastallmods_[i] = 0; lasterrmods_[i] = 0;}
00085   timeoutCounter_=0;
00086   lastLS_=-1;
00087 }
00088 
00089 //------------------------------------------------------------------------------
00093 SiPixelDataQuality::~SiPixelDataQuality() {
00094   edm::LogInfo("SiPixelDataQuality") << 
00095     " Deleting SiPixelDataQuality " << "\n" ;
00096   if(allmodsMap) delete allmodsMap;
00097   if(errmodsMap) delete errmodsMap;
00098   if(goodmodsMap) delete goodmodsMap;
00099   if(allmodsVec) delete allmodsVec;
00100   if(errmodsVec) delete errmodsVec;
00101   if(goodmodsVec) delete goodmodsVec;
00102 }
00103 
00104 
00105 //------------------------------------------------------------------------------
00110 int SiPixelDataQuality::getDetId(MonitorElement * mE) 
00111 {
00112  string mEName = mE->getName() ;
00113 
00114  int detId = 0;
00115  
00116  if( mEName.find("_3") != string::npos )
00117  {
00118   string detIdString = mEName.substr((mEName.find_last_of("_"))+1,9);
00119   std::istringstream isst;
00120   isst.str(detIdString);
00121   isst>>detId;
00122 // } else {
00123 //  cout << ACYellow << ACBold
00124 //       << "[SiPixelInformationExtractor::getDetId()] "
00125 //       << ACPlain
00126 //       << "Could not extract detId from "
00127 //       << mEName
00128 //       << endl ;
00129  }
00130       
00131   return detId ;
00132   
00133 }
00134 
00136 
00137 void SiPixelDataQuality::bookGlobalQualityFlag(DQMStore * bei, bool Tier0Flag, int nFEDs) {
00138 //std::cout<<"BOOK GLOBAL QUALITY FLAG MEs!"<<std::endl;
00139   bei->cd();
00140   
00141   bei->setCurrentFolder("Pixel/EventInfo");
00142   if(!Tier0Flag){
00143     /*SummaryReportMap = bei->book2D("reportSummaryMap","Pixel Summary Map",40,0.,40.,36,1.,37.);
00144     SummaryReportMap->setAxisTitle("Pixel FED #",1);
00145     SummaryReportMap->setAxisTitle("Pixel FED Channel #",2);
00146     allmodsMap = new TH2F("allmodsMap","allmodsMap",40,0.,40.,36,1.,37.);
00147     errmodsMap = new TH2F("errmodsMap","errmodsMap",40,0.,40.,36,1.,37.);
00148     goodmodsMap = new TH2F("goodmodsMap","goodmodsMap",40,0.,40.,36,1.,37.);
00149     */
00150     SummaryReportMap = bei->book2D("reportSummaryMap","Pixel Summary Map",2000,0.,2000.,40,0.,40.);
00151     SummaryReportMap->setAxisTitle("Lumi Section",1);
00152     SummaryReportMap->setAxisTitle("Pixel FED #",2);
00153     allmodsVec = new TH1D("allmodsVec","allmodsVec",40,0.,40.);
00154     errmodsVec = new TH1D("errmodsVec","errmodsVec",40,0.,40.);
00155     goodmodsVec = new TH1D("goodmodsVec","goodmodsVec",40,0.,40.);
00156   }else{
00157     SummaryReportMap = bei->book2D("reportSummaryMap","Pixel Summary Map",2,0.,2.,7,0.,7.);
00158     SummaryReportMap->setBinLabel(1,"Barrel",1);
00159     SummaryReportMap->setBinLabel(2,"Endcaps",1);
00160     SummaryReportMap->setBinLabel(1,"Errors",2);
00161     SummaryReportMap->setBinLabel(2,"NDigis",2);
00162     SummaryReportMap->setBinLabel(3,"DigiCharge",2);
00163     SummaryReportMap->setBinLabel(4,"ClusterSize",2);
00164     SummaryReportMap->setBinLabel(5,"NClusters",2);
00165     SummaryReportMap->setBinLabel(6,"ClusterCharge",2);
00166     SummaryReportMap->setBinLabel(7,"HitEff",2);
00167     allmodsMap = new TH2F("allmodsMap","allmodsMap",2,0.,2.,7,0.,7.);
00168     errmodsMap = new TH2F("errmodsMap","errmodsMap",2,0.,2.,7,0.,7.);
00169     goodmodsMap = new TH2F("goodmodsMap","goodmodsMap",2,0.,2.,7,0.,7.);
00170   }  
00171     SummaryPixel = bei->bookFloat("reportSummary");
00172   bei->setCurrentFolder("Pixel/EventInfo/reportSummaryContents");
00173     SummaryBarrel = bei->bookFloat("PixelBarrelFraction");
00174     SummaryEndcap = bei->bookFloat("PixelEndcapFraction");
00175   // book the data certification cuts:
00176   bei->setCurrentFolder("Pixel/AdditionalPixelErrors");
00177     NErrorsFEDs = bei->bookFloat("FEDsNErrorsCut");
00178   bei->setCurrentFolder("Pixel/Barrel");
00179     NErrorsBarrel = bei->bookFloat("BarrelNErrorsCut");
00180     NDigisBarrel = bei->bookInt("BarrelNDigisCut");
00181     DigiChargeBarrel = bei->bookInt("BarrelDigiChargeCut");
00182     ClusterSizeBarrel = bei->bookInt("BarrelClusterSizeCut");
00183     NClustersBarrel = bei->bookInt("BarrelNClustersCut");
00184     ClusterChargeBarrel = bei->bookInt("BarrelClusterChargeCut");
00185   bei->setCurrentFolder("Pixel/Endcap");
00186     NErrorsEndcap = bei->bookFloat("EndcapNErrorsCut");
00187     NDigisEndcap = bei->bookInt("EndcapNDigisCut");
00188     DigiChargeEndcap = bei->bookInt("EndcapDigiChargeCut");
00189     ClusterSizeEndcap = bei->bookInt("EndcapClusterSizeCut");
00190     NClustersEndcap = bei->bookInt("EndcapNClustersCut");
00191     ClusterChargeEndcap = bei->bookInt("EndcapClusterChargeCut");
00192   if(Tier0Flag){
00193     bei->setCurrentFolder("Pixel/Tracks");
00194       NPixelTracks = bei->bookInt("PixelTracksCut");
00195   }
00196     
00197     // Init MonitoringElements:
00198     if(nFEDs>0){
00199       SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
00200       if(SummaryPixel) SummaryPixel->Fill(1.);
00201       SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
00202       if(SummaryBarrel) SummaryBarrel->Fill(1.);
00203       SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
00204       if(SummaryEndcap) SummaryEndcap->Fill(1.);
00205     }else{
00206       SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
00207       if(SummaryPixel) SummaryPixel->Fill(-1.);
00208       SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
00209       if(SummaryBarrel) SummaryBarrel->Fill(-1.);
00210       SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
00211       if(SummaryEndcap) SummaryEndcap->Fill(-1.);
00212     }
00213     NErrorsBarrel = bei->get("Pixel/Barrel/BarrelNErrorsCut");
00214     if(NErrorsBarrel) NErrorsBarrel->Fill(1.);
00215     NErrorsEndcap = bei->get("Pixel/Endcap/EndcapNErrorsCut");
00216     if(NErrorsEndcap) NErrorsEndcap->Fill(1.);
00217     NErrorsFEDs = bei->get("Pixel/AdditionalPixelErrors/FEDsNErrorsCut");
00218     if(NErrorsFEDs) NErrorsFEDs->Fill(1.);
00219     NDigisBarrel = bei->get("Pixel/Barrel/BarrelNDigisCut");
00220     if(NDigisBarrel) NDigisBarrel->Fill(1);
00221     NDigisEndcap = bei->get("Pixel/Endcap/EndcapNDigisCut");
00222     if(NDigisEndcap) NDigisEndcap->Fill(1);
00223     DigiChargeBarrel = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
00224     if(DigiChargeBarrel) DigiChargeBarrel->Fill(1);
00225     DigiChargeEndcap = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
00226     if(DigiChargeEndcap) DigiChargeEndcap->Fill(1);
00227     ClusterSizeBarrel = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
00228     if(ClusterSizeBarrel) ClusterSizeBarrel->Fill(1);
00229     ClusterSizeEndcap = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
00230     if(ClusterSizeEndcap) ClusterSizeEndcap->Fill(1);
00231     ClusterChargeBarrel = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
00232     if(ClusterChargeBarrel) ClusterChargeBarrel->Fill(1);
00233     ClusterChargeEndcap = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
00234     if(ClusterChargeEndcap) ClusterChargeEndcap->Fill(1);
00235     NClustersBarrel = bei->get("Pixel/Barrel/BarrelNClustersCut");
00236     if(NClustersBarrel) NClustersBarrel->Fill(1);
00237     NClustersEndcap = bei->get("Pixel/Endcap/EndcapNClustersCut");
00238     if(NClustersEndcap) NClustersEndcap->Fill(1);
00239     if(Tier0Flag){
00240       NPixelTracks = bei->get("Pixel/Tracks/PixelTracksCut");
00241       if(NPixelTracks) NPixelTracks->Fill(1);
00242     }
00243    
00244     SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
00245     if(SummaryReportMap){
00246       if(!Tier0Flag) for(int i=1; i!=2001; i++) for(int j=1; j!=41; j++) SummaryReportMap->setBinContent(i,j,-1.);
00247       if(Tier0Flag) for(int i=1; i!=3; i++) for(int j=1; j!=8; j++) SummaryReportMap->setBinContent(i,j,-1.);
00248     }
00249     if(!Tier0Flag){
00250       for(int j=1; j!=41; j++){
00251         if(allmodsVec) allmodsVec->SetBinContent(j,0.);
00252         if(errmodsVec) errmodsVec->SetBinContent(j,0.);
00253         if(goodmodsVec) goodmodsVec->SetBinContent(j,0.);
00254       }
00255     }
00256     if(Tier0Flag){
00257       for(int i=1; i!=3; i++) for(int j=1; j!=8; j++){
00258         if(allmodsMap) allmodsMap->SetBinContent(i,j,0.);
00259         if(errmodsMap) errmodsMap->SetBinContent(i,j,0.);
00260         if(goodmodsMap) goodmodsMap->SetBinContent(i,j,0.);
00261       }
00262     }
00263     
00264   bei->cd();  
00265 }
00266 
00267 //**********************************************************************************************
00268 
00269 void SiPixelDataQuality::computeGlobalQualityFlag(DQMStore * bei, 
00270                                                            bool init,
00271                                                            int nFEDs,
00272                                                            bool Tier0Flag){
00273 //cout<<"entering SiPixelDataQuality::ComputeGlobalQualityFlag"<<endl;
00274 //   cout << ACRed << ACBold
00275 //        << "[SiPixelDataQuality::ComputeGlobalQualityFlag]"
00276 //        << ACPlain
00277 //        << " Enter" 
00278 //        << endl ;
00279   if(init){
00280 //cout<<"Entering SiPixelDataQuality::computeGlobalQualityFlag for the first time"<<endl;
00281     allMods_=0; errorMods_=0; qflag_=0.; 
00282     barrelMods_=0; endcapMods_=0;
00283     objectCount_=0;
00284     DONE_ = false;
00285     
00286     //Error counters and flags:
00287     n_errors_barrel_=0; barrel_error_flag_=0.;
00288     n_errors_endcap_=0; endcap_error_flag_=0.;
00289     n_errors_pixel_=0; pixel_error_flag_=0.;
00290     digiStatsBarrel = false, clusterStatsBarrel = false, trackStatsBarrel = false;
00291     digiCounterBarrel = 0, clusterCounterBarrel = 0, trackCounterBarrel = 0;
00292     digiStatsEndcap = false, clusterStatsEndcap = false, trackStatsEndcap = false;
00293     digiCounterEndcap = 0, clusterCounterEndcap = 0, trackCounterEndcap = 0;
00294     init=false;
00295   }
00296   if(nFEDs==0) return;  
00297   
00298   string currDir = bei->pwd();
00299   string dname = currDir.substr(currDir.find_last_of("/")+1);
00300 //cout<<"currDir="<<currDir<<endl;
00301   
00302   if((!Tier0Flag && dname.find("Module_")!=string::npos) || 
00303      (Tier0Flag && (dname.find("Ladder_")!=string::npos || dname.find("Blade_")!=string::npos))){
00304 
00305     objectCount_++;
00306 
00307     if(currDir.find("Pixel")!=string::npos) allMods_++;
00308     if(currDir.find("Barrel")!=string::npos) barrelMods_++;
00309     if(currDir.find("Endcap")!=string::npos) endcapMods_++;
00310     vector<string> meVec = bei->getMEs();
00311     for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
00312       string full_path = currDir + "/" + (*it);
00313       //cout<<"full_path:"<<full_path<<endl;
00314       if(full_path.find("ndigis_")!=string::npos){
00315       //cout<<"found an ndigi histo now"<<endl;
00316         MonitorElement * me = bei->get(full_path);
00317         if(!me) continue;
00318         //cout<<"got the histo now"<<endl;
00319         if(me->getEntries()>25){
00320         //cout<<"histo has more than 50 entries"<<endl;
00321           if(full_path.find("Barrel")!=string::npos) digiCounterBarrel++;
00322           if(full_path.find("Endcap")!=string::npos) digiCounterEndcap++;
00323           //cout<<"counter are now: "<<digiCounterBarrel<<","<<digiCounterBarrelL1<<endl;
00324         }
00325       }else if(Tier0Flag && full_path.find("nclusters_OnTrack_")!=string::npos){
00326         MonitorElement * me = bei->get(full_path);
00327         if(!me) continue;
00328         if(me->getEntries()>25){
00329           if(full_path.find("Barrel")!=string::npos) clusterCounterBarrel++;
00330           if(full_path.find("Endcap")!=string::npos) clusterCounterEndcap++;
00331         }
00332       }else if(!Tier0Flag && full_path.find("nclusters_")!=string::npos){
00333         MonitorElement * me = bei->get(full_path);
00334         if(!me) continue;
00335         if(me->getEntries()>25){
00336           if(full_path.find("Barrel")!=string::npos) clusterCounterBarrel++;
00337           if(full_path.find("Endcap")!=string::npos) clusterCounterEndcap++;
00338         }
00339       }
00340     }
00341   }
00342   vector<string> subDirVec = bei->getSubdirs();  
00343   for (vector<string>::const_iterator ic = subDirVec.begin();
00344        ic != subDirVec.end(); ic++) {
00345     bei->cd(*ic);
00346     init=false;
00347     computeGlobalQualityFlag(bei,init,nFEDs,Tier0Flag);
00348     bei->goUp();
00349   }
00350   
00351   // Make sure I have finished looping over all Modules/Ladders/Blades:
00352   if(!Tier0Flag){ // online case
00353     if(objectCount_ == 1440) DONE_ = true;
00354   }else{ // offline case
00355     if(objectCount_ == 288) DONE_ = true;
00356   } 
00357   
00358   if(DONE_ && currDir=="Pixel/EventInfo/reportSummaryContents"){ 
00359 
00360   // Evaluate error flag now, only stored in AdditionalPixelErrors:
00361   MonitorElement * me_err = bei->get("Pixel/AdditionalPixelErrors/FedETypeNErrArray");
00362   MonitorElement * me_evt = bei->get("Pixel/EventInfo/processedEvents");
00363   if(me_err && me_evt){
00364     for(int i=1; i!=41; i++)for(int j=1; j!=22; j++)
00365       if(me_err->getBinContent(i,j)>0){
00366         n_errors_pixel_=n_errors_pixel_+int(me_err->getBinContent(i,j));
00367         if(i<33) n_errors_barrel_=n_errors_barrel_+int(me_err->getBinContent(i,j));
00368         if(i>32) n_errors_endcap_=n_errors_endcap_+int(me_err->getBinContent(i,j));
00369       }
00370     int NProcEvts = me_evt->getIntValue();
00371     if(NProcEvts>0){
00372       barrel_error_flag_ = (float(NProcEvts)-float(n_errors_barrel_))/float(NProcEvts);
00373       endcap_error_flag_ = (float(NProcEvts)-float(n_errors_endcap_))/float(NProcEvts);
00374       pixel_error_flag_ = (float(NProcEvts)-float(n_errors_barrel_)-float(n_errors_endcap_))/float(NProcEvts);
00375     }
00376   }
00377   NErrorsBarrel = bei->get("Pixel/Barrel/BarrelNErrorsCut");
00378   if(NErrorsBarrel) NErrorsBarrel->Fill(barrel_error_flag_);
00379   NErrorsEndcap = bei->get("Pixel/Endcap/EndcapNErrorsCut");
00380   if(NErrorsEndcap)   NErrorsEndcap->Fill(endcap_error_flag_);
00381   
00382   string meName0;
00383   MonitorElement * me;
00384   
00385   // Fill the Digi flags:
00386   if(!Tier0Flag){
00387     meName0 = "Pixel/Barrel/SUMDIG_ndigis_Barrel";
00388     if(digiCounterBarrel/768 > 0.5) digiStatsBarrel = true;
00389     if(digiCounterEndcap/672 > 0.5) digiStatsEndcap = true;
00390     //cout<<"digiStatsBarrel="<<digiStatsBarrel<<" , digiStatsEndcap="<<digiStatsEndcap<<endl;
00391   }else{
00392     meName0 = "Pixel/Barrel/SUMOFF_ndigis_Barrel"; 
00393     if(digiCounterBarrel/192 > 0.5) digiStatsBarrel = true;
00394     if(digiCounterEndcap/96 > 0.5) digiStatsEndcap = true;
00395   }
00396   me = bei->get(meName0);
00397   if(me){
00398     NDigisBarrel = bei->get("Pixel/Barrel/BarrelNDigisCut");
00399    // cout<<"NDigis: "<<NDigisBarrel<<" , "<<digiStatsBarrel<<" , "<<me->hasError()<<endl;
00400     if(NDigisBarrel && digiStatsBarrel){
00401       if(me->hasError()) NDigisBarrel->Fill(0);
00402       else NDigisBarrel->Fill(1); 
00403     }
00404   }
00405   if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMDIG_ndigis_Endcap";
00406   else meName0 = "Pixel/Endcap/SUMOFF_ndigis_Endcap"; 
00407   me = bei->get(meName0);
00408   if(me){
00409     NDigisEndcap = bei->get("Pixel/Endcap/EndcapNDigisCut");
00410     if(NDigisEndcap && digiStatsEndcap){
00411       if(me->hasError()) NDigisEndcap->Fill(0);
00412       else NDigisEndcap->Fill(1);
00413     }
00414   }
00415   if(!Tier0Flag) meName0 = "Pixel/Barrel/SUMDIG_adc_Barrel";
00416   else meName0 = "Pixel/Barrel/SUMOFF_adc_Barrel"; 
00417   me = bei->get(meName0);
00418   if(me){
00419     DigiChargeBarrel = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
00420     if(DigiChargeBarrel && digiStatsBarrel){
00421       if(me->hasError()) DigiChargeBarrel->Fill(0);
00422       else DigiChargeBarrel->Fill(1);
00423     }
00424   }
00425   if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMDIG_adc_Endcap";
00426   else meName0 = "Pixel/Endcap/SUMOFF_adc_Endcap"; 
00427   me = bei->get(meName0);
00428   if(me){
00429     DigiChargeEndcap = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
00430     if(DigiChargeEndcap && digiStatsEndcap){
00431       if(me->hasError()) DigiChargeEndcap->Fill(0);
00432       else DigiChargeEndcap->Fill(1);
00433     }
00434   }
00435      
00436      
00437     // Fill the Cluster flags:
00438   if(!Tier0Flag){
00439     meName0 = "Pixel/Barrel/SUMCLU_size_Barrel";
00440     if(clusterCounterBarrel/768 > 0.5) clusterStatsBarrel = true;
00441     if(clusterCounterEndcap/672 > 0.5) clusterStatsEndcap = true;
00442   }else{
00443     meName0 = "Pixel/Barrel/SUMOFF_size_OnTrack_Barrel"; 
00444     if(clusterCounterBarrel/192 > 0.5) clusterStatsBarrel = true;
00445     if(clusterCounterEndcap/96 > 0.5) clusterStatsEndcap = true;
00446   }
00447   me = bei->get(meName0);
00448   if(me){
00449     ClusterSizeBarrel = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
00450     if(ClusterSizeBarrel && clusterStatsBarrel){
00451       if(me->hasError()) ClusterSizeBarrel->Fill(0);
00452       else ClusterSizeBarrel->Fill(1);
00453     }
00454   }
00455   if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMCLU_size_Endcap";
00456   else meName0 = "Pixel/Endcap/SUMOFF_size_OnTrack_Endcap"; 
00457   me = bei->get(meName0);
00458   if(me){
00459     ClusterSizeEndcap = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
00460     if(ClusterSizeEndcap && clusterStatsEndcap){
00461       if(me->hasError()) ClusterSizeEndcap->Fill(0);
00462       else ClusterSizeEndcap->Fill(1);
00463     }
00464   }
00465   if(!Tier0Flag) meName0 = "Pixel/Barrel/SUMCLU_charge_Barrel";
00466   else meName0 = "Pixel/Barrel/SUMOFF_charge_OnTrack_Barrel"; 
00467   me = bei->get(meName0);
00468   if(me){
00469     ClusterChargeBarrel = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
00470     if(ClusterChargeBarrel && clusterStatsBarrel){
00471       if(me->hasError()) ClusterChargeBarrel->Fill(0);
00472       else ClusterChargeBarrel->Fill(1);
00473     }
00474   }
00475   if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMCLU_charge_Endcap";
00476   else meName0 = "Pixel/Endcap/SUMOFF_charge_OnTrack_Endcap"; 
00477   me = bei->get(meName0);
00478   if(me){
00479     ClusterChargeEndcap = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
00480     if(ClusterChargeEndcap && clusterStatsEndcap){
00481       if(me->hasError()) ClusterChargeEndcap->Fill(0);
00482       else ClusterChargeEndcap->Fill(1);
00483     }
00484   }
00485   if(!Tier0Flag) meName0 = "Pixel/Barrel/SUMCLU_nclusters_Barrel";
00486   else meName0 = "Pixel/Barrel/SUMOFF_nclusters_OnTrack_Barrel"; 
00487   me = bei->get(meName0);
00488   if(me){
00489     NClustersBarrel = bei->get("Pixel/Barrel/BarrelNClustersCut");
00490     if(NClustersBarrel && clusterStatsBarrel){
00491       if(me->hasError()) NClustersBarrel->Fill(0);
00492       else NClustersBarrel->Fill(1);
00493     }
00494   }
00495   if(!Tier0Flag) meName0 = "Pixel/Endcap/SUMCLU_nclusters_Endcap";
00496   else meName0 = "Pixel/Endcap/SUMOFF_nclusters_OnTrack_Endcap"; 
00497   me = bei->get(meName0);
00498   if(me){
00499     NClustersEndcap = bei->get("Pixel/Endcap/EndcapNClustersCut");
00500     if(NClustersEndcap && clusterStatsEndcap){
00501       if(me->hasError()) NClustersEndcap->Fill(0);
00502       else NClustersEndcap->Fill(1);
00503     }
00504   }
00505   // Pixel Track multiplicity / Pixel hit efficiency
00506   meName0 = "Pixel/Tracks/ntracks_generalTracks";
00507   me = bei->get(meName0);
00508   if(me){
00509     NPixelTracks = bei->get("Pixel/Tracks/PixelTracksCut");
00510     if(NPixelTracks && me->getBinContent(1)>1000){
00511       if((float)me->getBinContent(2)/(float)me->getBinContent(1)<0.01){
00512         NPixelTracks->Fill(0);
00513       }else{ 
00514         NPixelTracks->Fill(1);
00515       }
00516     }
00517   }
00518   
00519   
00520 //********************************************************************************************************  
00521   
00522   // Final combination of all Data Quality results:
00523   float pixelFlag = -1., barrelFlag = -1., endcapFlag = -1.;
00524   float barrel_errors_temp[1]={-1.}; int barrel_cuts_temp[5]={5*-1}; 
00525   float endcap_errors_temp[1]={-1.}; int endcap_cuts_temp[5]={5*-1}; 
00526   int pixel_cuts_temp[1]={-1};
00527   float combinedCuts = 1.; int numerator = 0, denominator = 0;
00528 
00529   // Barrel results:
00530   me = bei->get("Pixel/Barrel/BarrelNErrorsCut");
00531   if(me) barrel_errors_temp[0] = me->getFloatValue();
00532   me = bei->get("Pixel/Barrel/BarrelNDigisCut");
00533   if(me) barrel_cuts_temp[0] = me->getIntValue();
00534   me = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
00535   if(me) barrel_cuts_temp[1] = me->getIntValue();
00536   me = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
00537   if(me) barrel_cuts_temp[2] = me->getIntValue();
00538   me = bei->get("Pixel/Barrel/BarrelNClustersCut");
00539   if(me) barrel_cuts_temp[3] = me->getIntValue();
00540   me = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
00541   if(me) barrel_cuts_temp[4] = me->getIntValue();
00542   for(int k=0; k!=5; k++){
00543     if(barrel_cuts_temp[k]>=0){
00544       numerator = numerator + barrel_cuts_temp[k];
00545       denominator++;
00546       //cout<<"cut flag, Barrel: "<<k<<","<<barrel_cuts_temp[k]<<","<<numerator<<","<<denominator<<endl;
00547     }
00548   } 
00549   if(denominator!=0) combinedCuts = float(numerator)/float(denominator);  
00550   barrelFlag = barrel_errors_temp[0] * combinedCuts;
00551   
00552   
00553   //cout<<" the resulting barrel flag is: "<<barrel_errors_temp[0]<<"*"<<combinedCuts<<"="<<barrelFlag<<endl;
00554   
00555   // Endcap results:
00556   combinedCuts = 1.; numerator = 0; denominator = 0;
00557   me = bei->get("Pixel/Endcap/EndcapNErrorsCut");
00558   if(me) endcap_errors_temp[0] = me->getFloatValue();
00559   me = bei->get("Pixel/Endcap/EndcapNDigisCut");
00560   if(me) endcap_cuts_temp[0] = me->getIntValue();
00561   me = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
00562   if(me) endcap_cuts_temp[1] = me->getIntValue();
00563   me = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
00564   if(me) endcap_cuts_temp[2] = me->getIntValue();
00565   me = bei->get("Pixel/Endcap/EndcapNClustersCut");
00566   if(me) endcap_cuts_temp[3] = me->getIntValue();
00567   me = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
00568   if(me) endcap_cuts_temp[4] = me->getIntValue();
00569   for(int k=0; k!=5; k++){
00570     if(endcap_cuts_temp[k]>=0){
00571       numerator = numerator + endcap_cuts_temp[k];
00572       denominator++;
00573       //cout<<"cut flag, Endcap: "<<k<<","<<endcap_cuts_temp[k]<<","<<numerator<<","<<denominator<<endl;
00574     }
00575   } 
00576   if(denominator!=0) combinedCuts = float(numerator)/float(denominator);  
00577   endcapFlag = endcap_errors_temp[0] * combinedCuts;
00578   //cout<<" the resulting endcap flag is: "<<endcap_errors_temp[0]<<"*"<<combinedCuts<<"="<<endcapFlag<<endl;
00579   
00580   // Track results:
00581   combinedCuts = 1.; numerator = 0; denominator = 0;
00582   me = bei->get("Pixel/Tracks/PixelTracksCut");
00583   if(me) pixel_cuts_temp[0] = me->getIntValue();
00584 
00585   //Combination of all:
00586   combinedCuts = 1.; numerator = 0; denominator = 0;
00587   for(int k=0; k!=5; k++){
00588     if(barrel_cuts_temp[k]>=0){
00589       numerator = numerator + barrel_cuts_temp[k];
00590       denominator++;
00591     }
00592     //cout<<"after barrel: num="<<numerator<<" , den="<<denominator<<endl;
00593     if(endcap_cuts_temp[k]>=0){
00594       numerator = numerator + endcap_cuts_temp[k];
00595       denominator++;
00596     }
00597     if(k<1 && pixel_cuts_temp[k]>=0){
00598       numerator = numerator + pixel_cuts_temp[k];
00599       denominator++;
00600     }
00601     //cout<<"after both: num="<<numerator<<" , den="<<denominator<<endl;
00602   } 
00603   if(denominator!=0) combinedCuts = float(numerator)/float(denominator); 
00604   pixelFlag = float(pixel_error_flag_) * float(combinedCuts);
00605   
00606   
00607   //cout<<"barrel, endcap, pixel flags: "<<barrelFlag<<","<<endcapFlag<<","<<pixelFlag<<endl;
00608   SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
00609   if(SummaryPixel) SummaryPixel->Fill(pixelFlag);
00610   SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
00611   if(SummaryBarrel) SummaryBarrel->Fill(barrelFlag);
00612   SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
00613   if(SummaryEndcap)   SummaryEndcap->Fill(endcapFlag);
00614   }
00615 }
00616 
00617 //**********************************************************************************************
00618 
00619 void SiPixelDataQuality::computeGlobalQualityFlagByLumi(DQMStore * bei, 
00620                                                            bool init,
00621                                                            int nFEDs,
00622                                                            bool Tier0Flag,
00623                                                            int nEvents_lastLS_){
00624 //cout<<"entering SiPixelDataQuality::ComputeGlobalQualityFlagByLumi"<<endl;
00625 //   cout << ACRed << ACBold
00626 //        << "[SiPixelDataQuality::ComputeGlobalQualityFlag]"
00627 //        << ACPlain
00628 //        << " Enter" 
00629 //        << endl ;
00630 
00631   if(nFEDs==0) return;  
00632   
00633   float BarrelRate_LS = 0.;
00634   float EndcapRate_LS = 0.;
00635   float PixelRate_LS = 0.;
00636   MonitorElement * me = bei->get("Pixel/AdditionalPixelErrors/byLumiErrors");
00637   if(me){
00638     double nEvents_LS = me->getBinContent(0) - nEvents_lastLS_;
00639     double nBarrelErrors_LS = me->getBinContent(1);
00640     double nEndcapErrors_LS = me->getBinContent(2);
00641     BarrelRate_LS = nBarrelErrors_LS / nEvents_LS / 32.; // normalize to nevents and nFEDchannels
00642     EndcapRate_LS = nEndcapErrors_LS / nEvents_LS / 8.;
00643     PixelRate_LS = (nBarrelErrors_LS + nEndcapErrors_LS) / nEvents_LS / 40.;
00644     //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;
00645   }
00646   
00647   float pixelFlag = 1.-PixelRate_LS;
00648   float barrelFlag = 1.-BarrelRate_LS;
00649   float endcapFlag = 1.-EndcapRate_LS;
00650   
00651   //cout<<"barrel, endcap, pixel flags: "<<barrelFlag<<","<<endcapFlag<<","<<pixelFlag<<endl;
00652   SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
00653   if(SummaryPixel) SummaryPixel->Fill(pixelFlag);
00654   SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
00655   if(SummaryBarrel) SummaryBarrel->Fill(barrelFlag);
00656   SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
00657   if(SummaryEndcap)   SummaryEndcap->Fill(endcapFlag);
00658   
00659 }
00660 
00661 //**********************************************************************************************
00662 
00663 void SiPixelDataQuality::fillGlobalQualityPlot(DQMStore * bei, bool init, edm::EventSetup const& eSetup, int nFEDs, bool Tier0Flag, int lumisec){
00664 //std::cout<<"Entering SiPixelDataQuality::fillGlobalQualityPlot: "<<nFEDs<<std::endl;
00665   //calculate eta and phi of the modules and fill a 2D plot:
00666   if(lastLS_<lumisec){ cout<<"lastLS_="<<lastLS_<<" ,lumisec="<<lumisec<<endl; lastLS_=lumisec; init=true; cout<<"init="<<init<<endl; }
00667   if(init){
00668     count=0; errcount=0;
00669     init=false;
00670     count1=0;
00671     count2=0;
00672     count3=0;
00673     count4=0;
00674     count5=0;
00675     count6=0;
00676     modCounter_=0;
00677   if(!Tier0Flag){
00678     cout<<"RESETS"<<endl;
00679     //The plots that these Vecs are integrated throughout a run
00680     //So at each lumi section I save their last values (lastmods)
00681     //And then subtract them out later when filling the SummaryMap
00682     for(int j=1; j!=41; j++){
00683       if(allmodsVec) lastallmods_[j-1] = allmodsVec->GetBinContent(j);
00684       if(errmodsVec) lasterrmods_[j-1] = errmodsVec->GetBinContent(j);
00685       if(allmodsVec) allmodsVec->SetBinContent(j,0.);
00686       if(errmodsVec) errmodsVec->SetBinContent(j,0.);
00687       if(goodmodsVec) goodmodsVec->SetBinContent(j,0.);
00688     }
00689   }
00690   if(Tier0Flag){
00691     for(int i=1; i!=3; i++) for(int j=1; j!=8; j++){
00692       if(allmodsMap) allmodsMap->SetBinContent(i,j,0.);
00693       if(errmodsMap) errmodsMap->SetBinContent(i,j,0.);
00694       if(goodmodsMap) goodmodsMap->SetBinContent(i,j,0.);
00695     }
00696   }
00697   }
00698   
00699 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
00700 // Fill Maps:
00701   // Online:    
00702   if(nFEDs==0) return;
00703 /*  if(!Tier0Flag){
00704     eSetup.get<SiPixelFedCablingMapRcd>().get(theCablingMap);
00705     string currDir = bei->pwd();
00706     if(currDir.find("Reference")!=string::npos) return;
00707     //cout<<"currDir="<<currDir<<endl;
00708     string dname = currDir.substr(currDir.find_last_of("/")+1);
00709     // find a detId for Blades and Ladders (first of the contained Modules!):
00710     ifstream infile(edm::FileInPath("DQM/SiPixelMonitorClient/test/detId.dat").fullPath().c_str(),ios::in);
00711     string I_name[1440];
00712     int I_detId[1440];
00713     int I_fedId[1440];
00714     int I_linkId[1440];
00715     int nModsInFile=0;
00716     while(!infile.eof()) {
00717       infile >> I_name[nModsInFile] >> I_detId[nModsInFile] >> I_fedId[nModsInFile] >> I_linkId[nModsInFile] ;
00718       //cout<<I_name<<" "<<I_detId<<" "<<I_fedId<<" "<<I_linkId ;
00719       //getline(infile,dummys); //necessary to reach end of record
00720       infile.close();
00721       nModsInFile++;
00722     }
00723     if(dname.find("Module_")!=string::npos && currDir.find("Reference")==string::npos){
00724       vector<string> meVec = bei->getMEs();
00725       int detId=-1; int fedId=-1; int linkId=-1;
00726       for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
00727         //checking for any digis or FED errors to decide if this module is in DAQ:  
00728         string full_path = currDir + "/" + (*it);
00729         //cout<<"path: "<<full_path<<" , detId= "<<detId<<endl;
00730         if(detId==-1 && full_path.find("SUMOFF")==string::npos &&
00731            (full_path.find("ndigis")!=string::npos && full_path.find("SUMDIG")==string::npos) && 
00732            (getDetId(bei->get(full_path)) > 100)){
00733           //cout<<"Got into the first ndigis or NErrors histogram!"<<endl;
00734           MonitorElement * me = bei->get(full_path);
00735           if (!me) continue;
00736           if((full_path.find("ndigis")!=string::npos)){ 
00737             modCounter_++;
00738             detId = getDetId(me);
00739             for(int fedid=0; fedid!=40; ++fedid){
00740               SiPixelFrameConverter converter(theCablingMap.product(),fedid);
00741               uint32_t newDetId = detId;
00742               if(converter.hasDetUnit(newDetId)){
00743                 fedId=fedid;
00744                 break;   
00745               }
00746             }
00747             if(fedId==-1) continue; 
00748             sipixelobjects::ElectronicIndex cabling; 
00749             SiPixelFrameConverter formatter(theCablingMap.product(),fedId);
00750             sipixelobjects::DetectorIndex detector = {detId, 1, 1};      
00751             formatter.toCabling(cabling,detector);
00752             linkId = cabling.link;
00753             //cout<<"it has this FED ID and channel ID: "<<fedId<<" , "<<linkId<<endl;
00754             int NDigis = 0;
00755             if(full_path.find("ndigis")!=string::npos) NDigis = me->getEntries(); 
00756             float weight = (allmodsMap->GetBinContent(fedId+1,linkId))+NDigis;
00757             allmodsMap->Fill(fedId,linkId,weight);
00758             static const char buf[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErrArray_%d";
00759             char fedplot[sizeof(buf)+4]; 
00760             sprintf(fedplot,buf,fedId,linkId);
00761             me = bei->get(fedplot);
00762             int NErrors = 0;
00763             if(me) NErrors = me->getIntValue();
00764             //if(fedId==37&&linkId==5) std::cout<<"THIS CHANNEL: "<<fedplot<<" , "<<NErrors<<" , "<<bei->pwd()<<std::endl;
00765             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;}
00766           }
00767         }
00768       }//end loop over MEs
00769     }//end of module dir's
00770     vector<string> subDirVec = bei->getSubdirs();  
00771     for (vector<string>::const_iterator ic = subDirVec.begin();
00772          ic != subDirVec.end(); ic++) {
00773       bei->cd(*ic);
00774       init=false;
00775       fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag);
00776       bei->goUp();
00777     }
00778     if(modCounter_==1440){
00779       bei->cd("Pixel/EventInfo/reportSummaryContents");
00780       //cout<<"B: Loop over all modules is done, now I am in    "<<bei->pwd()<<"     and currDir is    "<<currDir<<endl;
00781       if(bei->pwd()=="Pixel/EventInfo/reportSummaryContents"){
00782         SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
00783         if(SummaryReportMap){ 
00784           float contents=0.;
00785           for(int i=0; i!=40; i++)for(int j=1; j!=37; j++){
00786             //cout<<"bin: "<<i<<","<<j<<endl;
00787             if((allmodsMap->GetBinContent(i+1,j)) + (errmodsMap->GetBinContent(i+1,j)) > 0){
00788               contents = (allmodsMap->GetBinContent(i+1,j))/((allmodsMap->GetBinContent(i+1,j))+(errmodsMap->GetBinContent(i+1,j)));
00789             }else{
00790               contents = -1.;
00791             }
00792             //if(contents>=0.&&contents<0.8) std::cout<<"HERE: "<<i<<" , "<<j<<" , "<<allmodsMap->GetBinContent(i+1,j)<<" , "<<errmodsMap->GetBinContent(i+1,j)<<std::endl;
00793             if(i==13&&j==17&&contents>0) count1++;
00794             if(i==13&&j==18&&contents>0) count2++;
00795             if(i==15&&j==5&&contents>0) count3++;
00796             if(i==15&&j==6&&contents>0) count4++;
00797             //cout<<"\t\t MAP: "<<i<<","<<j<<","<<contents<<endl;
00798             if(((i==0||i==2||i==3||i==5||i==11||i==8)&&(j==1||j==8||j==13||j==17||j==20))||
00799                ((i==1||i==9||i==10||i==13)&&(j==1||j==5||j==8||j==20||j==22))||
00800                ((i==4||i==12)&&(j==5||j==10||j==13||j==17||j==22))||
00801                ((i==2||i==5||i==6||i==7||i==14)&&(j==5||j==10||j==22))||
00802                ((i==7||i==10)&&(j==13||j==17))||
00803                ((i==6||i==14)&&(j==1||j==20))||
00804                ((i==10||i==13)&&(j==10))||
00805                ((i==4||i==12)&&(j==2))||
00806                ((i==14)&&(j==15))){
00807               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+1));
00808             }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))||
00809                ((i==17||i==18||i==25)&&(j==2||j==6||j==9||j==21||j==23))||
00810                ((i==20||i==23||i==28||i==31)&&(j==6||j==11||j==14||j==18||j==23))||
00811                ((i==21||i==22||i==26||i==29||i==30)&&(j==6||j==11||j==23))||
00812                ((i==18)&&(j==14||j==18))||
00813                ((i==22||i==30)&&(j==2||j==21))||
00814                ((i==18)&&(j==11))||
00815                ((i==17||i==25)&&(j==16))||
00816                ((i==19||i==27)&&(j==5))){
00817               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-1));
00818             }else if(i==6&&(j==14||j==15)){
00819               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+2));
00820             }else if((i==14)&&j==14){
00821               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+3));
00822             }else if((i==17||i==25)&&j==17){
00823               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-3));
00824             }else if(((i==0||i==2||i==3||i==5||i==8||i==10||i==11||i==13)&&(j==3||j==15))||
00825                      ((i==1||i==9)&&j==3)||
00826                      ((i==7||i==12||i==15)&&j==15)){
00827               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+4));
00828             }else if(((i==16||i==18||i==19||i==21||i==24||i==26||i==27||i==29)&&(j==7||j==19))||
00829                      ((i==17||i==25)&&j==7)||
00830                      ((i==20||i==23||i==28||i==31)&&j==19)){
00831               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-4));
00832             }else if((i==6||i==14)&&(j==13||j==19)){
00833               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+5));
00834             }else if((i==17||i==25)&&(j==18||j==24)){
00835               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-5));
00836             }else if(((i==4||i==12)&&j==1)||
00837                      ((i==3||i==11)&&j==6)){
00838               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+6));
00839             }else if((i==9||i==1)&&j==4){
00840               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+8));
00841             }else if((i==17||i==25)&&j==12){
00842               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-8));
00843             }else if(((i==20||i==28)&&j==20)||
00844                      ((i==19||i==27)&&j==22)){
00845               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-11));
00846             }else if(((i==20||i==28)&&j==21)||
00847                      ((i==19||i==27)&&j==23)){
00848               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-13));
00849             }else{
00850               SummaryReportMap->setBinContent(i+1,j,contents);
00851             }
00852           }//end for loop over summaryReportMap bins
00853           for(int i=0; i!=40; i++)for(int j=1; j!=37; j++){ // catch the last few holes...
00854             if(((i==2||i==4||i==5||i==6||i==7||i==10||i==12||i==13||i==14||i==15)&&j==12)||
00855                ((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)){
00856               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-8));
00857             }else if(((i==18||i==20||i==21||i==22||i==23||i==26||i==28||i==29||i==30||i==31)&&j==4)||
00858                ((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)){
00859               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+8));
00860             }else if(((i==6||i==14)&&j==9)||
00861                      ((i==3||i==11)&&j==5)||
00862                      ((i==1||i==9)&&(j==11||j==16))){
00863               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-1));
00864             }else if(((i==17||i==25)&&j==10)||
00865                      ((i==22||i==30)&&(j==8||j==15))||
00866                      ((i==20||i==28)&&(j==2))){
00867               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+1));
00868             }else if((i==1||i==9)&&j==17){
00869               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-3));
00870             }else if((i==22||i==30)&&j==14){
00871               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+3));
00872             }else if((i==6||i==14)&&j==7){
00873               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-4));
00874             }else if((i==22||i==30)&&j==3){
00875               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+4));
00876             }else if((i==1||i==9)&&(j==18||j==24)){
00877               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-5));
00878             }else if((i==22||i==30)&&(j==13||j==19)){
00879               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+5));
00880             }else if(((i==20||i==28)&&j==1)||
00881                      ((i==19||i==27)&&j==6)){
00882               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j+6));
00883             }else if(((i==4||i==12)&&j==20)||
00884                      ((i==3||i==11)&&j==22)){
00885               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-11));
00886             }else if(((i==4||i==12)&&j==21)||
00887                      ((i==3||i==11)&&j==23)){
00888               SummaryReportMap->setBinContent(i+1,j,SummaryReportMap->getBinContent(i+1,j-13));
00889             }
00890           }//end of loop over bins
00891           //std::cout<<"COUNTERS: "<<count1<<" , "<<count2<<" , "<<count3<<" , "<<count4<<" , "<<count5<<" , "<<count6<<std::endl;
00892         }//end if reportSummaryMap ME exists
00893       }//end if in summary directory
00894     }//end if modCounter_  
00895 */
00896 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
00897   if(!Tier0Flag){
00898     eSetup.get<SiPixelFedCablingMapRcd>().get(theCablingMap);
00899     string currDir = bei->pwd();
00900     if(currDir.find("Reference")!=string::npos || currDir.find("Additional")!=string::npos) return;
00901     //cout<<"currDir="<<currDir<<endl;
00902     string dname = currDir.substr(currDir.find_last_of("/")+1);
00903     if(dname.find("Module_")!=string::npos && currDir.find("Reference")==string::npos){
00904       vector<string> meVec = bei->getMEs();
00905       int detId=-1; int fedId=-1;
00906       for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++){//loop over all modules and fill ndigis into allmodsMap
00907         //checking for any digis or FED errors to decide if this module is in DAQ:  
00908         string full_path = currDir + "/" + (*it);
00909         if(detId==-1 && full_path.find("SUMOFF")==string::npos &&
00910            (full_path.find("ndigis")!=string::npos && full_path.find("SUMDIG")==string::npos) && 
00911            (getDetId(bei->get(full_path)) > 100)){
00912           MonitorElement * me = bei->get(full_path);
00913           if (!me) continue;
00914           if((full_path.find("ndigis")!=string::npos)){ 
00915             modCounter_++;
00916             detId = getDetId(me);
00917             for(int fedid=0; fedid!=40; ++fedid){
00918               SiPixelFrameConverter converter(theCablingMap.product(),fedid);
00919               uint32_t newDetId = detId;
00920               if(converter.hasDetUnit(newDetId)){
00921                 fedId=fedid;
00922                 break;   
00923               }
00924             }
00925             double NDigis = 0;
00926             if(full_path.find("ndigis")!=string::npos) NDigis = me->getEntries(); 
00927             float weight = (allmodsVec->GetBinContent(fedId+1))+NDigis;
00928             //cout<<"DIGIS: "<<currDir<<" , "<<fedId<<" , "<<weight<<" , "<<NDigis<<endl;
00929             allmodsVec->SetBinContent(fedId+1,weight);
00930             //cout<<"\t filled: "<<allmodsVec->GetBinContent(fedId+1,weight)<<endl;
00931           }
00932         }
00933       }//end loop over MEs
00934     }//end of module dir's
00935     //if(currDir.find("FED_")!=std::string::npos){
00936       //fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag,lumisec);
00937       //bei->goUp();
00938     //}
00939     vector<string> subDirVec = bei->getSubdirs();  
00940     for (vector<string>::const_iterator ic = subDirVec.begin();
00941          ic != subDirVec.end(); ic++) {
00942       bei->cd(*ic);
00943       init=false;
00944       fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag,lumisec);
00945       bei->goUp();
00946     }
00947     //cout<<"modCounter_: "<<modCounter_<<" , "<<bei->pwd()<<endl;
00948     if(modCounter_==1440){
00949       bei->cd("Pixel/EventInfo/reportSummaryContents");
00950       if(bei->pwd()=="Pixel/EventInfo/reportSummaryContents"){
00951         for(int i=0; i!=40; i++){//loop over FEDs to fetch the errors
00952           static const char buf[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErrArray_%d";
00953           char fedplot[sizeof(buf)+4]; 
00954           int NErrors = 0;
00955           for(int j=0; j!=37; j++){//loop over FED channels within a FED
00956             sprintf(fedplot,buf,i,j);
00957             MonitorElement * me = bei->get(fedplot);
00958             if(me) NErrors = NErrors + me->getIntValue();
00959           }
00960           //If I fill, then I end up majorly overcounting the numbers of errors...
00961           //if(NErrors>0){ errmodsVec->Fill(i,NErrors); } 
00962           if(NErrors>0){ errmodsVec->SetBinContent(i,NErrors); } 
00963         }
00964         SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
00965         if(SummaryReportMap){ 
00966           MonitorElement * me = bei->get("Pixel/EventInfo/processedEvents");
00967           int nevents = 0;
00968           if(me) nevents = me->getIntValue();
00969           float contents=0.;
00970           for(int i=1; i!=41; i++){
00971             //Dynamically subtracting previous (integrated) lumi section values
00972             //in order to only show current lumi section's numbers
00973             float mydigis = allmodsVec->GetBinContent(i) - lastallmods_[i-1];
00974             float myerrs  = errmodsVec->GetBinContent(i) - lasterrmods_[i-1];
00975             if ((mydigis + myerrs) > 0.){
00976               contents = mydigis/(mydigis + myerrs);
00977               //std::cout<<"Fed: "<<i-1<<" , nevents: "<<nevents<<" , ndigis: "<< mydigis <<" , nerrors: "<< myerrs << " , contents: " << contents << std::endl;
00978             }else{
00979               //Changed so that dynamic zooming will still
00980               //advance over these bins(in renderplugins)
00981               contents = -0.5;
00982             }
00983             SummaryReportMap->setBinContent(lumisec+1,i,contents);
00984           }//end for loop over summaryReportMap bins
00985         }//end if reportSummaryMap ME exists
00986       }//end if in summary directory
00987     }//end if modCounter_  
00988   }else{ // Offline
00989     float barrel_errors_temp[1]={-1.}; int barrel_cuts_temp[6]={6*-1}; 
00990     float endcap_errors_temp[1]={-1.}; int endcap_cuts_temp[6]={6*-1}; 
00991     int pixel_cuts_temp[1]={-1};
00992     // Barrel results:
00993     MonitorElement * me;
00994     me = bei->get("Pixel/Barrel/BarrelNErrorsCut");
00995     if(me) barrel_errors_temp[0] = me->getFloatValue();
00996     me = bei->get("Pixel/Endcap/EndcapNErrorsCut");
00997     if(me) endcap_errors_temp[0] = me->getFloatValue();
00998     SummaryReportMap->setBinContent(1,1,barrel_errors_temp[0]);
00999     SummaryReportMap->setBinContent(2,1,endcap_errors_temp[0]);
01000     me = bei->get("Pixel/Barrel/BarrelNDigisCut");
01001     if(me) barrel_cuts_temp[0] = me->getIntValue();
01002     me = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
01003     if(me) barrel_cuts_temp[1] = me->getIntValue();
01004     me = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
01005     if(me) barrel_cuts_temp[2] = me->getIntValue();
01006     me = bei->get("Pixel/Barrel/BarrelNClustersCut");
01007     if(me) barrel_cuts_temp[3] = me->getIntValue();
01008     me = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
01009     if(me) barrel_cuts_temp[4] = me->getIntValue();  
01010     me = bei->get("Pixel/Endcap/EndcapNDigisCut");
01011     if(me) endcap_cuts_temp[0] = me->getIntValue();
01012     me = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
01013     if(me) endcap_cuts_temp[1] = me->getIntValue();
01014     me = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
01015     if(me) endcap_cuts_temp[2] = me->getIntValue();
01016     me = bei->get("Pixel/Endcap/EndcapNClustersCut");
01017     if(me) endcap_cuts_temp[3] = me->getIntValue();
01018     me = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
01019     if(me) endcap_cuts_temp[4] = me->getIntValue();  
01020     for(int j=2; j!=7; j++){
01021       SummaryReportMap->setBinContent(1,j,barrel_cuts_temp[j-2]);
01022       SummaryReportMap->setBinContent(2,j,endcap_cuts_temp[j-2]);
01023       //cout<<"error cut values: "<<j<<" , "<<barrel_cuts_temp[j-2]<<" , "<<endcap_cuts_temp[j-2]<<endl;
01024     }
01025     me = bei->get("Pixel/Tracks/PixelTracksCut");
01026     if(me) pixel_cuts_temp[0] = me->getIntValue();  
01027     SummaryReportMap->setBinContent(1,7,pixel_cuts_temp[0]);
01028     SummaryReportMap->setBinContent(2,7,pixel_cuts_temp[0]);
01029   }//end of offline map
01030   if(allmodsMap) allmodsMap->Clear();
01031   if(goodmodsMap) goodmodsMap->Clear();
01032   if(errmodsMap) errmodsMap->Clear();
01033 }
01034 
01035 //**********************************************************************************************
01036