CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQM/EcalEndcapMonitorTasks/src/EEDataCertificationTask.cc

Go to the documentation of this file.
00001 /*
00002  * \file EEDataCertificationTask.cc
00003  *
00004  * $Date: 2011/06/27 12:16:03 $
00005  * $Revision: 1.26.4.1 $
00006  * \author E. Di Marco
00007  *
00008 */
00009 
00010 #include <iostream>
00011 #include <algorithm>
00012 
00013 #include "FWCore/ServiceRegistry/interface/Service.h"
00014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00015 #include "FWCore/Framework/interface/ESHandle.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 
00018 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00019 
00020 #include "Geometry/EcalMapping/interface/EcalMappingRcd.h"
00021 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
00022 
00023 #include "DQMServices/Core/interface/MonitorElement.h"
00024 #include "DQMServices/Core/interface/DQMStore.h"
00025 
00026 #include "DQM/EcalCommon/interface/Numbers.h"
00027 #include "DQM/EcalCommon/interface/UtilsClient.h"
00028 
00029 #include "DQM/EcalEndcapMonitorTasks/interface/EEDataCertificationTask.h"
00030 
00031 EEDataCertificationTask::EEDataCertificationTask(const edm::ParameterSet& ps) {
00032 
00033   // cloneME switch
00034   cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00035 
00036   dqmStore_ = edm::Service<DQMStore>().operator->();
00037 
00038   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00039 
00040   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00041 
00042   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00043 
00044   meEEDataCertificationSummary_ = 0;
00045   meEEDataCertificationSummaryMap_ = 0;
00046   for (int i = 0; i < 18; i++) {
00047     meEEDataCertification_[i] = 0;
00048   }
00049 
00050   hDQM_ = 0;
00051   hDAQ_ = 0;
00052   hIntegrityByLumi_ = 0;
00053   hFrontendByLumi_ = 0;
00054   hSynchronizationByLumi_ = 0;
00055 
00056 }
00057 
00058 EEDataCertificationTask::~EEDataCertificationTask() {
00059 
00060 }
00061 
00062 void EEDataCertificationTask::beginJob(void){
00063 
00064   char histo[200];
00065 
00066   if ( dqmStore_ ) {
00067 
00068     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00069 
00070     sprintf(histo, "CertificationSummary");
00071     meEEDataCertificationSummary_ = dqmStore_->bookFloat(histo);
00072     meEEDataCertificationSummary_->Fill(-1.0);
00073 
00074     sprintf(histo, "CertificationSummaryMap");
00075     meEEDataCertificationSummaryMap_ = dqmStore_->book2D(histo,histo, 40, 0., 200., 20, 0., 100.);
00076     meEEDataCertificationSummaryMap_->setAxisTitle("ix / ix+100", 1);
00077     meEEDataCertificationSummaryMap_->setAxisTitle("iy", 2);
00078 
00079     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/CertificationContents");
00080 
00081     for (int i = 0; i < 18; i++) {
00082       sprintf(histo, "EcalEndcap_%s", Numbers::sEE(i+1).c_str());
00083       meEEDataCertification_[i] = dqmStore_->bookFloat(histo);
00084       meEEDataCertification_[i]->Fill(-1.0);
00085     }
00086 
00087   }
00088 
00089 }
00090 
00091 void EEDataCertificationTask::endJob(void) {
00092 
00093   if ( enableCleanup_ ) this->cleanup();
00094 
00095 }
00096 
00097 void EEDataCertificationTask::beginLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const  edm::EventSetup& iSetup){
00098 
00099 }
00100 
00101 void EEDataCertificationTask::endLuminosityBlock(const edm::LuminosityBlock&  lumiBlock, const  edm::EventSetup& iSetup) {
00102 
00103   this->reset();
00104 
00105   char histo[200];
00106 
00107   MonitorElement* me;
00108 
00109   // evaluate the DQM quality of observables checked by lumi
00110   float DQMVal[18];
00111   for (int i = 0; i < 18; i++) {
00112     DQMVal[i] = -1.;
00113   }
00114 
00115   edm::ESHandle< EcalElectronicsMapping > handle;
00116   iSetup.get< EcalMappingRcd >().get(handle);
00117   const EcalElectronicsMapping *map = handle.product();
00118   if( ! map ) edm::LogWarning("EEDaqInfoTask") << "EcalElectronicsMapping not available";
00119 
00120   sprintf(histo, (prefixME_ + "/EEIntegrityTask/EEIT weighted integrity errors by lumi").c_str());
00121   me = dqmStore_->get(histo);
00122   hIntegrityByLumi_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, hIntegrityByLumi_ );
00123 
00124   sprintf(histo, (prefixME_ + "/EEStatusFlagsTask/FEStatus/EESFT weighted frontend errors by lumi").c_str());
00125   me = dqmStore_->get(histo);
00126   hFrontendByLumi_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, hFrontendByLumi_ );
00127 
00128   sprintf(histo, (prefixME_ + "/EERawDataTask/EERDT FE synchronization errors by lumi").c_str());
00129   me = dqmStore_->get(histo);
00130   hSynchronizationByLumi_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, hSynchronizationByLumi_ );
00131 
00132   if( hIntegrityByLumi_ && hFrontendByLumi_ && hSynchronizationByLumi_ && map) {
00133 
00134     float integrityErrSum = 0.;
00135     float integrityQual = 1.0;
00136     float frontendErrSum = 0.;
00137     float frontendQual = 1.0;
00138     float synchronizationErrSum = 0.;
00139     float synchronizationQual = 1.0;
00140 
00141     for ( int i=0; i<18; i++) {
00142       float ismIntegrityQual = 1.0;
00143       if( hIntegrityByLumi_->GetBinContent(0) > 0 ) {
00144         float errors = hIntegrityByLumi_->GetBinContent(i+1);
00145         ismIntegrityQual = 1.0 - errors/hIntegrityByLumi_->GetBinContent(0);
00146         integrityErrSum += errors;
00147       }
00148       float ismFrontendQual = 1.0;
00149       if( hFrontendByLumi_->GetBinContent(0) > 0 ) {
00150         float errors = hFrontendByLumi_->GetBinContent(i+1);
00151         ismFrontendQual = 1.0 - errors/hFrontendByLumi_->GetBinContent(0);
00152         frontendErrSum += errors;
00153       }
00154       float ismSynchronizationQual = 1.0;
00155       if( hSynchronizationByLumi_->GetBinContent(0) > 0 ) {
00156         float errors = hSynchronizationByLumi_->GetBinContent(i+1);
00157         ismSynchronizationQual = 1.0 - errors/hSynchronizationByLumi_->GetBinContent(0);
00158         synchronizationErrSum += errors;
00159       }
00160       float minVal= std::min(ismIntegrityQual,ismFrontendQual);
00161       DQMVal[i] = std::min(minVal,ismSynchronizationQual);
00162     }
00163 
00164     if( hIntegrityByLumi_->GetBinContent(0) > 0 ) integrityQual = 1.0 - integrityErrSum/hIntegrityByLumi_->GetBinContent(0)/18.;
00165     if( hFrontendByLumi_->GetBinContent(0) > 0 ) frontendQual = 1.0 - frontendErrSum/hFrontendByLumi_->GetBinContent(0)/18.;
00166     if( hSynchronizationByLumi_->GetBinContent(0) > 0 ) synchronizationQual = 1.0 - synchronizationErrSum/hSynchronizationByLumi_->GetBinContent(0)/36.;
00167     float minVal = std::min(integrityQual,frontendQual);
00168     float totDQMVal = std::min(minVal,synchronizationQual);
00169 
00170     sprintf(histo, (prefixME_ + "/EventInfo/reportSummary").c_str());
00171     me = dqmStore_->get(histo);
00172     if( me ) me->Fill(totDQMVal);
00173 
00174     for ( int i=0; i<18; i++) {
00175       sprintf(histo, "EcalEndcap_%s", Numbers::sEE(i+1).c_str());
00176       me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummaryContents/" + histo);
00177       if( me ) me->Fill(DQMVal[i]);
00178 
00179       sprintf(histo, "reportSummaryMap");
00180       me = dqmStore_->get(prefixME_ + "/EventInfo/" + histo );
00181       if( me ) {
00182         for(int t=1 ; t<=nTowerMax_ ; t++){
00183           if(! map->dccTowerConstituents(DccId_[i], t).size() ) continue;
00184           std::vector<EcalScDetId> scs = map->getEcalScDetId(DccId_[i], t, false);
00185           for(unsigned u=0 ; u<scs.size() ; u++){
00186             int jx = scs[u].ix() + (scs[u].zside()<0 ? 0 : 20);
00187             int jy = scs[u].iy();
00188             me->setBinContent(jx,jy, DQMVal[i]);
00189           }
00190         }
00191       }
00192     }
00193 
00194   }
00195 
00196   // now combine reduced DQM with DCS and DAQ
00197   sprintf(histo, (prefixME_ + "/EventInfo/DAQSummaryMap").c_str());
00198   me = dqmStore_->get(histo);
00199   hDAQ_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDAQ_ );
00200 
00201   sprintf(histo, (prefixME_ + "/EventInfo/DCSSummaryMap").c_str());
00202   me = dqmStore_->get(histo);
00203   hDCS_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDCS_ );
00204 
00205   float sumCert = 0.;
00206   float sumCertEE[18];
00207   int nValidChannels = 0;
00208   int nValidChannelsEE[18];
00209 
00210   if ( meEEDataCertificationSummaryMap_ ){
00211     for(int ix=1 ; ix<=meEEDataCertificationSummaryMap_->getNbinsX() ; ix++){
00212       for(int iy=1 ; iy<=meEEDataCertificationSummaryMap_->getNbinsY() ; iy++){
00213         meEEDataCertificationSummaryMap_->setBinContent( ix, iy, -1.0 );
00214       }
00215     }
00216   }
00217 
00218   for (int i = 0; i < 18; i++) {
00219     sumCertEE[i] = 0;
00220     nValidChannelsEE[i] = 0;
00221 
00222     for(int t=1 ; t<=nTowerMax_ ; t++){
00223 
00224       std::vector<DetId> crystals = map->dccTowerConstituents(DccId_[i], t);
00225       if(!crystals.size()) continue; // getEcalScDetId throws an exception when no crystal is found
00226 
00227       std::vector<EcalScDetId> scs = map->getEcalScDetId(DccId_[i], t, false);
00228       for(unsigned u=0 ; u<scs.size() ; u++){
00229 
00230         int jx = scs[u].ix() + (scs[u].zside()<0 ? 0 : 20);
00231         int jy = scs[u].iy();
00232 
00233         float xvalDQM = DQMVal[i];
00234 
00235         float xvalDAQ, xvalDCS;
00236         xvalDAQ = xvalDCS = -1.;
00237         float xcert = -1.;
00238 
00239         if ( hDAQ_ ) xvalDAQ = hDAQ_->GetBinContent( jx, jy );
00240         if ( hDCS_ ) xvalDCS = hDCS_->GetBinContent( jx, jy );
00241 
00242         if ( xvalDQM == -1 || ( xvalDAQ == -1 && xvalDCS == -1 ) ) {
00243           // problems: DQM empty or DAQ and DCS not available
00244           xcert = 0.0;
00245         } else {
00246           // do not consider the white value of DAQ and DCS (problems with DB)
00247           xcert = std::abs(xvalDQM) * std::abs(xvalDAQ) * std::abs(xvalDCS);
00248         }
00249 
00250         if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->setBinContent( jx, jy, xcert );
00251 
00252         int ncrystals = 0;
00253 
00254         for(std::vector<DetId>::const_iterator it=crystals.begin() ; it!=crystals.end() ; ++it){
00255           EEDetId id(*it);
00256           if( id.zside() == scs[u].zside() && (id.ix()-1)/5+1 == scs[u].ix() && (id.iy()-1)/5+1 == scs[u].iy() ) ncrystals++;
00257         }
00258 
00259         sumCertEE[i] += xcert * ncrystals;
00260         nValidChannelsEE[i] += ncrystals;
00261 
00262         sumCert += xcert * ncrystals;
00263         nValidChannels += ncrystals;
00264 
00265       }
00266     }
00267 
00268     if( meEEDataCertification_[i] ) {
00269       if( nValidChannelsEE[i]>0 ) meEEDataCertification_[i]->Fill( sumCertEE[i]/nValidChannelsEE[i] );
00270       else meEEDataCertification_[i]->Fill( 0.0 );
00271     }
00272   }
00273 
00274   if( meEEDataCertificationSummary_ ) {
00275     if( nValidChannels>0 ) meEEDataCertificationSummary_->Fill( sumCert/nValidChannels );
00276     else meEEDataCertificationSummary_->Fill( 0.0 );
00277   }
00278 
00279 }
00280 
00281 void EEDataCertificationTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00282 
00283   if ( ! mergeRuns_ ) this->reset();
00284 
00285 }
00286 
00287 void EEDataCertificationTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00288 
00289   this->reset();
00290 
00291   edm::ESHandle< EcalElectronicsMapping > handle;
00292   c.get< EcalMappingRcd >().get(handle);
00293   const EcalElectronicsMapping *map = handle.product();
00294   if( ! map ){
00295     edm::LogWarning("EEDaqInfoTask") << "EcalElectronicsMapping not available";
00296     return;
00297   }
00298 
00299   char histo[200];
00300 
00301   MonitorElement* me;
00302 
00303   sprintf(histo, (prefixME_ + "/EventInfo/reportSummaryMap").c_str());
00304   me = dqmStore_->get(histo);
00305   hDQM_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDQM_ );
00306 
00307   sprintf(histo, (prefixME_ + "/EventInfo/DAQSummaryMap").c_str());
00308   me = dqmStore_->get(histo);
00309   hDAQ_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDAQ_ );
00310 
00311   sprintf(histo, (prefixME_ + "/EventInfo/DCSSummaryMap").c_str());
00312   me = dqmStore_->get(histo);
00313   hDCS_ = UtilsClient::getHisto<TH2F*>( me, cloneME_, hDCS_ );
00314 
00315   float sumCert = 0.;
00316   float sumCertEE[18];
00317   int nValidChannels = 0;
00318   int nValidChannelsEE[18];
00319 
00320   if ( meEEDataCertificationSummaryMap_ ){
00321     for(int ix=1 ; ix<=meEEDataCertificationSummaryMap_->getNbinsX() ; ix++){
00322       for(int iy=1 ; iy<=meEEDataCertificationSummaryMap_->getNbinsY() ; iy++){
00323         meEEDataCertificationSummaryMap_->setBinContent( ix, iy, -1.0 );
00324       }
00325     }
00326   }
00327 
00328   for (int i = 0; i < 18; i++) {
00329     sumCertEE[i] = 0;
00330     nValidChannelsEE[i] = 0;
00331 
00332     for(int t=1 ; t<=nTowerMax_ ; t++){
00333 
00334       std::vector<DetId> crystals = map->dccTowerConstituents(DccId_[i], t);
00335       if(!crystals.size()) continue;
00336 
00337       std::vector<EcalScDetId> scs = map->getEcalScDetId(DccId_[i], t, false);
00338       for(unsigned u=0 ; u<scs.size() ; u++){
00339 
00340         int jx = scs[u].ix() + (scs[u].zside()<0 ? 0 : 20);
00341         int jy = scs[u].iy();
00342 
00343         float xvalDQM, xvalDAQ, xvalDCS;
00344         xvalDQM = xvalDAQ = xvalDCS = -1.;
00345         float xcert = -1.;
00346 
00347         if ( hDQM_ ) xvalDQM = hDQM_->GetBinContent( jx, jy );
00348         if ( hDAQ_ ) xvalDAQ = hDAQ_->GetBinContent( jx, jy );
00349         if ( hDCS_ ) xvalDCS = hDCS_->GetBinContent( jx, jy );
00350 
00351         if ( xvalDQM == -1 || ( xvalDAQ == -1 && xvalDCS == -1 ) ) {
00352           // problems: DQM empty or DAQ and DCS not available
00353           xcert = 0.0;
00354         } else {
00355           // do not consider the white value of DAQ and DCS (problems with DB)
00356           xcert = std::abs(xvalDQM) * std::abs(xvalDAQ) * std::abs(xvalDCS);
00357         }
00358 
00359         if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->setBinContent( jx, jy, xcert );
00360 
00361         int ncrystals = 0;
00362 
00363         for(std::vector<DetId>::const_iterator it=crystals.begin() ; it!=crystals.end() ; ++it){
00364           EEDetId id(*it);
00365           if( id.zside() == scs[u].zside() && (id.ix()-1)/5+1 == scs[u].ix() && (id.iy()-1)/5+1 == scs[u].iy() ) ncrystals++;
00366         }
00367 
00368         sumCertEE[i] += xcert * ncrystals;
00369         nValidChannelsEE[i] += ncrystals;
00370 
00371         sumCert += xcert * ncrystals;
00372         nValidChannels += ncrystals;
00373 
00374       }
00375     }
00376 
00377     if( meEEDataCertification_[i] ) {
00378       if( nValidChannelsEE[i]>0 ) meEEDataCertification_[i]->Fill( sumCertEE[i]/nValidChannelsEE[i] );
00379       else meEEDataCertification_[i]->Fill( 0.0 );
00380     }
00381   }
00382 
00383   if( meEEDataCertificationSummary_ ) {
00384     if( nValidChannels>0 ) meEEDataCertificationSummary_->Fill( sumCert/nValidChannels );
00385     else meEEDataCertificationSummary_->Fill( 0.0 );
00386   }
00387 
00388 }
00389 
00390 void EEDataCertificationTask::reset(void) {
00391 
00392   if ( meEEDataCertificationSummary_ ) meEEDataCertificationSummary_->Reset();
00393 
00394   for (int i = 0; i < 18; i++) {
00395     if ( meEEDataCertification_[i] ) meEEDataCertification_[i]->Reset();
00396   }
00397 
00398   if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->Reset();
00399 
00400   if ( meEEDataCertificationSummaryMap_ ) meEEDataCertificationSummaryMap_->Reset();
00401 
00402 }
00403 
00404 
00405 void EEDataCertificationTask::cleanup(void){
00406 
00407   if ( cloneME_ ) {
00408     if( hDQM_ ) delete hDQM_;
00409     if( hDAQ_ ) delete hDAQ_;
00410     if( hDCS_ ) delete hDCS_;
00411     if( hIntegrityByLumi_ ) delete hIntegrityByLumi_;
00412     if( hFrontendByLumi_ ) delete hFrontendByLumi_;
00413     if( hSynchronizationByLumi_ ) delete hSynchronizationByLumi_;
00414   }
00415   hDQM_ = 0;
00416   hDAQ_ = 0;
00417   hDCS_ = 0;
00418   hIntegrityByLumi_ = 0;
00419   hFrontendByLumi_ = 0;
00420   hSynchronizationByLumi_ = 0;
00421 
00422   if ( dqmStore_ ) {
00423     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00424     if ( meEEDataCertificationSummary_ ) dqmStore_->removeElement( meEEDataCertificationSummary_->getName() );
00425     if ( meEEDataCertificationSummaryMap_ ) dqmStore_->removeElement( meEEDataCertificationSummaryMap_->getName() );
00426 
00427     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/CertificationContents");
00428     for (int i = 0; i < 18; i++) {
00429       if ( meEEDataCertification_[i] ) dqmStore_->removeElement( meEEDataCertification_[i]->getName() );
00430     }
00431   }
00432 
00433 }
00434 
00435 void EEDataCertificationTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00436 
00437 }