CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DQM/EcalEndcapMonitorTasks/src/EEDcsInfoTask.cc

Go to the documentation of this file.
00001 /*
00002  * \file EEDcsInfoTask.cc
00003  *
00004  * $Date: 2010/12/14 13:10:12 $
00005  * $Revision: 1.18 $
00006  * \author E. Di Marco
00007  *
00008 */
00009 
00010 #include <iostream>
00011 
00012 #include "FWCore/ServiceRegistry/interface/Service.h"
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014 #include "FWCore/Framework/interface/ESHandle.h"
00015 #include "FWCore/Framework/interface/EventSetup.h"
00016 
00017 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00018 
00019 #include "CondFormats/EcalObjects/interface/EcalDCSTowerStatus.h"
00020 #include "CondFormats/DataRecord/interface/EcalDCSTowerStatusRcd.h"
00021 
00022 #include "DQMServices/Core/interface/MonitorElement.h"
00023 #include "DQMServices/Core/interface/DQMStore.h"
00024 
00025 #include "DQM/EcalCommon/interface/Numbers.h"
00026 
00027 #include "DQM/EcalEndcapMonitorTasks/interface/EEDcsInfoTask.h"
00028 
00029 EEDcsInfoTask::EEDcsInfoTask(const edm::ParameterSet& ps) {
00030 
00031   dqmStore_ = edm::Service<DQMStore>().operator->();
00032 
00033   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00034 
00035   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00036 
00037   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00038 
00039   meEEDcsFraction_ = 0;
00040   meEEDcsActiveMap_ = 0;
00041   for (int i = 0; i < 18; i++) {
00042     meEEDcsActive_[i] = 0;
00043   }
00044 
00045 }
00046 
00047 EEDcsInfoTask::~EEDcsInfoTask() {
00048 
00049 }
00050 
00051 void EEDcsInfoTask::beginJob(void){
00052 
00053   char histo[200];
00054 
00055   if ( dqmStore_ ) {
00056 
00057     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00058 
00059     sprintf(histo, "DCSSummary");
00060     meEEDcsFraction_ = dqmStore_->bookFloat(histo);
00061     meEEDcsFraction_->Fill(0.0);
00062 
00063     sprintf(histo, "DCSSummaryMap");
00064     meEEDcsActiveMap_ = dqmStore_->book2D(histo,histo, 200, 0., 200., 100, 0., 100.);
00065     meEEDcsActiveMap_->setAxisTitle("jx", 1);
00066     meEEDcsActiveMap_->setAxisTitle("jy", 2);
00067 
00068     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/DCSContents");
00069 
00070     for (int i = 0; i < 18; i++) {
00071       sprintf(histo, "EcalEndcap_%s", Numbers::sEE(i+1).c_str());
00072       meEEDcsActive_[i] = dqmStore_->bookFloat(histo);
00073       meEEDcsActive_[i]->Fill(-1.0);
00074     }
00075 
00076   }
00077 
00078 }
00079 
00080 void EEDcsInfoTask::endJob(void) {
00081 
00082   if ( enableCleanup_ ) this->cleanup();
00083 
00084 }
00085 
00086 void EEDcsInfoTask::beginLuminosityBlock(const edm::LuminosityBlock& lumiBlock, const  edm::EventSetup& iSetup){
00087 
00088   // information is by run, so fill the same for the run and for every lumi section
00089   for ( int itx = 0; itx < 40; itx++ ) {
00090     for ( int ity = 0; ity < 20; ity++ ) {
00091       readyLumi[itx][ity] = 1;
00092     }
00093   }
00094 
00095   if ( !iSetup.find( edm::eventsetup::EventSetupRecordKey::makeKey<EcalDCSTowerStatusRcd>() ) ) {
00096     edm::LogWarning("EEDcsInfoTask") << "EcalDCSTowerStatus record not found";
00097     return;
00098   }
00099 
00100   edm::ESHandle<EcalDCSTowerStatus> pDCSStatus;
00101   iSetup.get<EcalDCSTowerStatusRcd>().get(pDCSStatus);
00102   if ( !pDCSStatus.isValid() ) {
00103     edm::LogWarning("EEDcsInfoTask") << "EcalDCSTowerStatus record not valid";
00104     return;
00105   }
00106   const EcalDCSTowerStatus* dcsStatus = pDCSStatus.product();
00107 
00108   for(int iz=-1; iz<=1; iz+=2) {
00109     for(int itx=0 ; itx<20; itx++) {
00110       for(int ity=0 ; ity<20; ity++) {
00111         if (EcalScDetId::validDetId(itx+1,ity+1,iz )){
00112 
00113           EcalScDetId eeid(itx+1,ity+1,iz);
00114 
00115           uint16_t dbStatus = 0; // 0 = good
00116           EcalDCSTowerStatus::const_iterator dcsStatusIt = dcsStatus->find( eeid.rawId() );
00117           if ( dcsStatusIt != dcsStatus->end() ) dbStatus = dcsStatusIt->getStatusCode();
00118 
00119           if ( dbStatus > 0 ) {
00120             int offsetSC = (iz > 0) ? 0 : 20;
00121             readyRun[offsetSC+itx][ity] = 0;
00122             readyLumi[offsetSC+itx][ity] = 0;
00123           }
00124 
00125         }
00126       }
00127     }
00128   }
00129 
00130 }
00131 
00132 void EEDcsInfoTask::endLuminosityBlock(const edm::LuminosityBlock&  lumiBlock, const  edm::EventSetup& iSetup) {
00133 
00134   this->fillMonitorElements(readyLumi);
00135 
00136 }
00137 
00138 void EEDcsInfoTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00139 
00140   if ( ! mergeRuns_ ) this->reset();
00141 
00142   for ( int itx = 0; itx < 40; itx++ ) {
00143     for ( int ity = 0; ity < 20; ity++ ) {
00144       readyRun[itx][ity] = 1;
00145     }
00146   }
00147 
00148 }
00149 
00150 void EEDcsInfoTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00151 
00152   this->fillMonitorElements(readyRun);
00153 
00154 }
00155 
00156 void EEDcsInfoTask::reset(void) {
00157 
00158   if ( meEEDcsFraction_ ) meEEDcsFraction_->Reset();
00159 
00160   for (int i = 0; i < 18; i++) {
00161     if ( meEEDcsActive_[i] ) meEEDcsActive_[i]->Reset();
00162   }
00163 
00164   if ( meEEDcsActiveMap_ ) meEEDcsActiveMap_->Reset();
00165 
00166 }
00167 
00168 
00169 void EEDcsInfoTask::cleanup(void){
00170 
00171   if ( dqmStore_ ) {
00172 
00173     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo");
00174 
00175     if ( meEEDcsFraction_ ) dqmStore_->removeElement( meEEDcsFraction_->getName() );
00176 
00177     if ( meEEDcsActiveMap_ ) dqmStore_->removeElement( meEEDcsActiveMap_->getName() );
00178 
00179     dqmStore_->setCurrentFolder(prefixME_ + "/EventInfo/DCSContents");
00180 
00181     for (int i = 0; i < 18; i++) {
00182       if ( meEEDcsActive_[i] ) dqmStore_->removeElement( meEEDcsActive_[i]->getName() );
00183     }
00184 
00185   }
00186 
00187 }
00188 
00189 void EEDcsInfoTask::fillMonitorElements(int ready[40][20]) {
00190 
00191   float readySum[18];
00192   int nValidChannels[18];
00193   for ( int ism = 0; ism < 18; ism++ ) {
00194     readySum[ism] = 0;
00195     nValidChannels[ism] = 0;
00196   }
00197   float readySumTot = 0.;
00198   int nValidChannelsTot = 0;
00199 
00200   for ( int iz = -1; iz < 2; iz+=2 ) {
00201     for ( int itx = 0; itx < 20; itx++ ) {
00202       for ( int ity = 0; ity < 20; ity++ ) {
00203         for ( int h = 0; h < 5; h++ ) {
00204           for ( int k = 0; k < 5; k++ ) {
00205 
00206             int ix = 5*itx + h;
00207             int iy = 5*ity + k;
00208 
00209             int offsetSC = (iz > 0) ? 0 : 20;
00210             int offset = (iz > 0) ? 0 : 100;
00211 
00212             if( EEDetId::validDetId(ix+1, iy+1, iz) ) {
00213 
00214               if(meEEDcsActiveMap_) meEEDcsActiveMap_->setBinContent( offset+ix+1, iy+1, ready[offsetSC+itx][ity] );
00215 
00216               EEDetId id = EEDetId(ix+1, iy+1, iz, EEDetId::XYMODE);
00217 
00218               int ism = Numbers::iSM(id);
00219               if(ready[offsetSC+itx][ity]) {
00220                 readySum[ism-1]++;
00221                 readySumTot++;
00222               }
00223 
00224               nValidChannels[ism-1]++;
00225               nValidChannelsTot++;
00226 
00227             } else {
00228               if(meEEDcsActiveMap_) meEEDcsActiveMap_->setBinContent( offset+ix+1, iy+1, -1.0 );
00229             }
00230 
00231           }
00232         }
00233       }
00234     }
00235   }
00236 
00237   for ( int ism = 0; ism < 18; ism++ ) {
00238     if( meEEDcsActive_[ism] ) meEEDcsActive_[ism]->Fill( readySum[ism]/float(nValidChannels[ism]) );
00239   }
00240 
00241   if( meEEDcsFraction_ ) meEEDcsFraction_->Fill( readySumTot/float(nValidChannelsTot) );
00242 
00243 }
00244 
00245 void EEDcsInfoTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00246 
00247 }