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>
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
00123
00124
00125
00126
00127
00128
00129 }
00130
00131 return detId ;
00132
00133 }
00134
00136
00137 void SiPixelDataQuality::bookGlobalQualityFlag(DQMStore * bei, bool Tier0Flag, int nFEDs) {
00138
00139 bei->cd();
00140
00141 bei->setCurrentFolder("Pixel/EventInfo");
00142 if(!Tier0Flag){
00143
00144
00145
00146
00147
00148
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
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
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
00274
00275
00276
00277
00278
00279 if(init){
00280
00281 allMods_=0; errorMods_=0; qflag_=0.;
00282 barrelMods_=0; endcapMods_=0;
00283 objectCount_=0;
00284 DONE_ = false;
00285
00286
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
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
00314 if(full_path.find("ndigis_")!=string::npos){
00315
00316 MonitorElement * me = bei->get(full_path);
00317 if(!me) continue;
00318
00319 if(me->getEntries()>25){
00320
00321 if(full_path.find("Barrel")!=string::npos) digiCounterBarrel++;
00322 if(full_path.find("Endcap")!=string::npos) digiCounterEndcap++;
00323
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
00352 if(!Tier0Flag){
00353 if(objectCount_ == 1440) DONE_ = true;
00354 }else{
00355 if(objectCount_ == 288) DONE_ = true;
00356 }
00357
00358 if(DONE_ && currDir=="Pixel/EventInfo/reportSummaryContents"){
00359
00360
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
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
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
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
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
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
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
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
00547 }
00548 }
00549 if(denominator!=0) combinedCuts = float(numerator)/float(denominator);
00550 barrelFlag = barrel_errors_temp[0] * combinedCuts;
00551
00552
00553
00554
00555
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
00574 }
00575 }
00576 if(denominator!=0) combinedCuts = float(numerator)/float(denominator);
00577 endcapFlag = endcap_errors_temp[0] * combinedCuts;
00578
00579
00580
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
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
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
00602 }
00603 if(denominator!=0) combinedCuts = float(numerator)/float(denominator);
00604 pixelFlag = float(pixel_error_flag_) * float(combinedCuts);
00605
00606
00607
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
00625
00626
00627
00628
00629
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.;
00642 EndcapRate_LS = nEndcapErrors_LS / nEvents_LS / 8.;
00643 PixelRate_LS = (nBarrelErrors_LS + nEndcapErrors_LS) / nEvents_LS / 40.;
00644
00645 }
00646
00647 float pixelFlag = 1.-PixelRate_LS;
00648 float barrelFlag = 1.-BarrelRate_LS;
00649 float endcapFlag = 1.-EndcapRate_LS;
00650
00651
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
00665
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
00680
00681
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
00701
00702 if(nFEDs==0) return;
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
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
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++){
00907
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
00929 allmodsVec->SetBinContent(fedId+1,weight);
00930
00931 }
00932 }
00933 }
00934 }
00935
00936
00937
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
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++){
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++){
00956 sprintf(fedplot,buf,i,j);
00957 MonitorElement * me = bei->get(fedplot);
00958 if(me) NErrors = NErrors + me->getIntValue();
00959 }
00960
00961
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
00972
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
00978 }else{
00979
00980
00981 contents = -0.5;
00982 }
00983 SummaryReportMap->setBinContent(lumisec+1,i,contents);
00984 }
00985 }
00986 }
00987 }
00988 }else{
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
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
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 }
01030 if(allmodsMap) allmodsMap->Clear();
01031 if(goodmodsMap) goodmodsMap->Clear();
01032 if(errmodsMap) errmodsMap->Clear();
01033 }
01034
01035
01036