CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/DQM/EcalEndcapMonitorTasks/src/EEDaqInfoTask.cc

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