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",3000,0.,3000.,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!=3001; 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 int nErrorsBarrel_lastLS_,
00625 int nErrorsEndcap_lastLS_){
00626
00627
00628
00629
00630
00631
00632
00633 if(nFEDs==0) return;
00634
00635
00636 float BarrelRate_LS = 1.;
00637 float EndcapRate_LS = 1.;
00638 float PixelRate_LS = 1.;
00639 MonitorElement * me = bei->get("Pixel/AdditionalPixelErrors/byLumiErrors");
00640 if(me){
00641
00642 double nBarrelErrors_LS = me->getBinContent(1) - nErrorsBarrel_lastLS_;
00643 double nEndcapErrors_LS = me->getBinContent(2) - nErrorsEndcap_lastLS_;
00644 double nEvents_LS = me->getBinContent(0) - nEvents_lastLS_;
00645
00646 if(nBarrelErrors_LS/nEvents_LS>0.5) BarrelRate_LS=0.;
00647 if(nEndcapErrors_LS/nEvents_LS>0.5) EndcapRate_LS=0.;
00648 if((nBarrelErrors_LS + nEndcapErrors_LS)/nEvents_LS>0.5) PixelRate_LS=0.;
00649
00650 }
00651
00652
00653 float BarrelClusterCharge = 1.;
00654 float EndcapClusterCharge = 1.;
00655 float PixelClusterCharge = 1.;
00656 MonitorElement * me1 = bei->get("Pixel/Clusters/OnTrack/charge_siPixelClusters_Barrel");
00657 if(me1 && me1->getMean()<12.) BarrelClusterCharge = 0.;
00658
00659 MonitorElement * me2 = bei->get("Pixel/Clusters/OnTrack/charge_siPixelClusters_Endcap");
00660 if(me2 && me2->getMean()<12.) EndcapClusterCharge = 0.;
00661
00662 MonitorElement * me3 = bei->get("Pixel/Clusters/OnTrack/charge_siPixelClusters");
00663 if(me3 && me3->getMean()<12.) PixelClusterCharge = 0.;
00664
00665
00666
00667 float BarrelOccupancy = 1.;
00668 float EndcapOccupancy = 1.;
00669 float PixelOccupancy = 1.;
00670 MonitorElement * me4 = bei->get("Pixel/averageDigiOccupancy");
00671 if(me4){
00672 double minBarrelOcc = 999999.;
00673 double maxBarrelOcc = -1.;
00674 double meanBarrelOcc = 0.;
00675 double minEndcapOcc = 999999.;
00676 double maxEndcapOcc = -1.;
00677 double meanEndcapOcc = 0.;
00678 for(int i=1; i!=41; i++){
00679 if(i<=32 && me4->getBinContent(i)<minBarrelOcc) minBarrelOcc=me4->getBinContent(i);
00680 if(i<=32 && me4->getBinContent(i)>maxBarrelOcc) maxBarrelOcc=me4->getBinContent(i);
00681 if(i<=32) meanBarrelOcc+=me4->getBinContent(i);
00682 if(i>32 && me4->getBinContent(i)<minEndcapOcc) minEndcapOcc=me4->getBinContent(i);
00683 if(i>32 && me4->getBinContent(i)>maxEndcapOcc) maxEndcapOcc=me4->getBinContent(i);
00684 if(i>32) meanEndcapOcc+=me4->getBinContent(i);
00685
00686 }
00687 meanBarrelOcc = meanBarrelOcc/32.;
00688 meanEndcapOcc = meanEndcapOcc/8.;
00689
00690 if(minBarrelOcc<0.1*meanBarrelOcc || maxBarrelOcc>2.5*meanBarrelOcc) BarrelOccupancy=0.;
00691 if(minEndcapOcc<0.2*meanEndcapOcc || maxEndcapOcc>1.8*meanEndcapOcc) EndcapOccupancy=0.;
00692 PixelOccupancy=BarrelOccupancy*EndcapOccupancy;
00693
00694 }
00695
00696 float pixelFlag = PixelRate_LS * PixelClusterCharge * PixelOccupancy;
00697 float barrelFlag = BarrelRate_LS * BarrelClusterCharge * BarrelOccupancy;
00698 float endcapFlag = EndcapRate_LS * EndcapClusterCharge * EndcapOccupancy;
00699
00700 SummaryPixel = bei->get("Pixel/EventInfo/reportSummary");
00701 if(SummaryPixel) SummaryPixel->Fill(pixelFlag);
00702 SummaryBarrel = bei->get("Pixel/EventInfo/reportSummaryContents/PixelBarrelFraction");
00703 if(SummaryBarrel) SummaryBarrel->Fill(barrelFlag);
00704 SummaryEndcap = bei->get("Pixel/EventInfo/reportSummaryContents/PixelEndcapFraction");
00705 if(SummaryEndcap) SummaryEndcap->Fill(endcapFlag);
00706
00707 }
00708
00709
00710
00711 void SiPixelDataQuality::fillGlobalQualityPlot(DQMStore * bei, bool init, edm::EventSetup const& eSetup, int nFEDs, bool Tier0Flag, int lumisec){
00712
00713
00714
00715 if(init){
00716 count=0; errcount=0;
00717 init=false;
00718 count1=0;
00719 count2=0;
00720 count3=0;
00721 count4=0;
00722 count5=0;
00723 count6=0;
00724 modCounter_=0;
00725 if(!Tier0Flag){
00726
00727
00728
00729
00730 for(int j=1; j!=41; j++){
00731 if(allmodsVec) lastallmods_[j-1] = allmodsVec->GetBinContent(j);
00732 if(errmodsVec) lasterrmods_[j-1] = errmodsVec->GetBinContent(j);
00733 if(allmodsVec) allmodsVec->SetBinContent(j,0.);
00734 if(errmodsVec) errmodsVec->SetBinContent(j,0.);
00735 if(goodmodsVec) goodmodsVec->SetBinContent(j,0.);
00736 }
00737 }
00738 if(Tier0Flag){
00739 for(int i=1; i!=3; i++) for(int j=1; j!=8; j++){
00740 if(allmodsMap) allmodsMap->SetBinContent(i,j,0.);
00741 if(errmodsMap) errmodsMap->SetBinContent(i,j,0.);
00742 if(goodmodsMap) goodmodsMap->SetBinContent(i,j,0.);
00743 }
00744 }
00745 }
00746
00747
00748
00749
00750 if(nFEDs==0) return;
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
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945 if(!Tier0Flag){
00946 eSetup.get<SiPixelFedCablingMapRcd>().get(theCablingMap);
00947 string currDir = bei->pwd();
00948 if(currDir.find("Reference")!=string::npos || currDir.find("Additional")!=string::npos) return;
00949
00950 string dname = currDir.substr(currDir.find_last_of("/")+1);
00951 if(dname.find("Module_")!=string::npos && currDir.find("Reference")==string::npos){
00952 vector<string> meVec = bei->getMEs();
00953 int detId=-1; int fedId=-1;
00954 for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++){
00955
00956 string full_path = currDir + "/" + (*it);
00957 if(detId==-1 && full_path.find("SUMOFF")==string::npos &&
00958 (full_path.find("ndigis")!=string::npos && full_path.find("SUMDIG")==string::npos) &&
00959 (getDetId(bei->get(full_path)) > 100)){
00960 MonitorElement * me = bei->get(full_path);
00961 if (!me) continue;
00962 if((full_path.find("ndigis")!=string::npos)){
00963 modCounter_++;
00964 detId = getDetId(me);
00965 for(int fedid=0; fedid!=40; ++fedid){
00966 SiPixelFrameConverter converter(theCablingMap.product(),fedid);
00967 uint32_t newDetId = detId;
00968 if(converter.hasDetUnit(newDetId)){
00969 fedId=fedid;
00970 break;
00971 }
00972 }
00973 double NDigis = 0;
00974 if(full_path.find("ndigis")!=string::npos) NDigis = me->getEntries();
00975 float weight = (allmodsVec->GetBinContent(fedId+1))+NDigis;
00976
00977 allmodsVec->SetBinContent(fedId+1,weight);
00978
00979 }
00980 }
00981 }
00982 }
00983
00984
00985
00986
00987 vector<string> subDirVec = bei->getSubdirs();
00988 for (vector<string>::const_iterator ic = subDirVec.begin();
00989 ic != subDirVec.end(); ic++) {
00990 bei->cd(*ic);
00991 init=false;
00992 fillGlobalQualityPlot(bei,init,eSetup,nFEDs,Tier0Flag,lumisec);
00993 bei->goUp();
00994 }
00995
00996 if(modCounter_==1440){
00997 bei->cd("Pixel/EventInfo/reportSummaryContents");
00998 if(bei->pwd()=="Pixel/EventInfo/reportSummaryContents"){
00999 for(int i=0; i!=40; i++){
01000 static const char buf[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErrArray_%d";
01001 char fedplot[sizeof(buf)+4];
01002 int NErrors = 0;
01003 for(int j=0; j!=37; j++){
01004 sprintf(fedplot,buf,i,j);
01005 MonitorElement * me = bei->get(fedplot);
01006 if(me) NErrors = NErrors + me->getIntValue();
01007 }
01008
01009
01010 if(NErrors>0){ errmodsVec->SetBinContent(i+1,NErrors); }
01011 }
01012 SummaryReportMap = bei->get("Pixel/EventInfo/reportSummaryMap");
01013 if(SummaryReportMap){
01014 float contents=0.;
01015 for(int i=1; i!=41; i++){
01016
01017
01018 float mydigis = allmodsVec->GetBinContent(i) - lastallmods_[i-1];
01019 float myerrs = errmodsVec->GetBinContent(i) - lasterrmods_[i-1];
01020 if ((mydigis + myerrs) > 0.){
01021 contents = mydigis/(mydigis + myerrs);
01022
01023 }else{
01024
01025
01026 contents = -0.5;
01027 }
01028 SummaryReportMap->setBinContent(lumisec+1,i,contents);
01029 }
01030 }
01031 }
01032 }
01033 }else{
01034 float barrel_errors_temp[1]={-1.}; int barrel_cuts_temp[6]={6*-1};
01035 float endcap_errors_temp[1]={-1.}; int endcap_cuts_temp[6]={6*-1};
01036 int pixel_cuts_temp[1]={-1};
01037
01038 MonitorElement * me;
01039 me = bei->get("Pixel/Barrel/BarrelNErrorsCut");
01040 if(me) barrel_errors_temp[0] = me->getFloatValue();
01041 me = bei->get("Pixel/Endcap/EndcapNErrorsCut");
01042 if(me) endcap_errors_temp[0] = me->getFloatValue();
01043 SummaryReportMap->setBinContent(1,1,barrel_errors_temp[0]);
01044 SummaryReportMap->setBinContent(2,1,endcap_errors_temp[0]);
01045 me = bei->get("Pixel/Barrel/BarrelNDigisCut");
01046 if(me) barrel_cuts_temp[0] = me->getIntValue();
01047 me = bei->get("Pixel/Barrel/BarrelDigiChargeCut");
01048 if(me) barrel_cuts_temp[1] = me->getIntValue();
01049 me = bei->get("Pixel/Barrel/BarrelClusterSizeCut");
01050 if(me) barrel_cuts_temp[2] = me->getIntValue();
01051 me = bei->get("Pixel/Barrel/BarrelNClustersCut");
01052 if(me) barrel_cuts_temp[3] = me->getIntValue();
01053 me = bei->get("Pixel/Barrel/BarrelClusterChargeCut");
01054 if(me) barrel_cuts_temp[4] = me->getIntValue();
01055 me = bei->get("Pixel/Endcap/EndcapNDigisCut");
01056 if(me) endcap_cuts_temp[0] = me->getIntValue();
01057 me = bei->get("Pixel/Endcap/EndcapDigiChargeCut");
01058 if(me) endcap_cuts_temp[1] = me->getIntValue();
01059 me = bei->get("Pixel/Endcap/EndcapClusterSizeCut");
01060 if(me) endcap_cuts_temp[2] = me->getIntValue();
01061 me = bei->get("Pixel/Endcap/EndcapNClustersCut");
01062 if(me) endcap_cuts_temp[3] = me->getIntValue();
01063 me = bei->get("Pixel/Endcap/EndcapClusterChargeCut");
01064 if(me) endcap_cuts_temp[4] = me->getIntValue();
01065 for(int j=2; j!=7; j++){
01066 SummaryReportMap->setBinContent(1,j,barrel_cuts_temp[j-2]);
01067 SummaryReportMap->setBinContent(2,j,endcap_cuts_temp[j-2]);
01068
01069 }
01070 me = bei->get("Pixel/Tracks/PixelTracksCut");
01071 if(me) pixel_cuts_temp[0] = me->getIntValue();
01072 SummaryReportMap->setBinContent(1,7,pixel_cuts_temp[0]);
01073 SummaryReportMap->setBinContent(2,7,pixel_cuts_temp[0]);
01074 }
01075 if(allmodsMap) allmodsMap->Clear();
01076 if(goodmodsMap) goodmodsMap->Clear();
01077 if(errmodsMap) errmodsMap->Clear();
01078 }
01079
01080
01081