CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/DQM/EcalBarrelMonitorTasks/src/EBPedestalOnlineTask.cc

Go to the documentation of this file.
00001 /*
00002  * \file EBPedestalOnlineTask.cc
00003  *
00004  * $Date: 2010/08/08 08:46:05 $
00005  * $Revision: 1.46 $
00006  * \author G. Della Ricca
00007  *
00008 */
00009 
00010 #include <iostream>
00011 #include <fstream>
00012 
00013 #include "FWCore/ServiceRegistry/interface/Service.h"
00014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00015 
00016 #include "DQMServices/Core/interface/MonitorElement.h"
00017 
00018 #include "DQMServices/Core/interface/DQMStore.h"
00019 
00020 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00021 #include "DataFormats/EcalDigi/interface/EBDataFrame.h"
00022 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00023 
00024 #include "DQM/EcalCommon/interface/Numbers.h"
00025 
00026 #include "DQM/EcalBarrelMonitorTasks/interface/EBPedestalOnlineTask.h"
00027 
00028 EBPedestalOnlineTask::EBPedestalOnlineTask(const edm::ParameterSet& ps){
00029 
00030   init_ = false;
00031 
00032   dqmStore_ = edm::Service<DQMStore>().operator->();
00033 
00034   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00035 
00036   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00037 
00038   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00039 
00040   EBDigiCollection_ = ps.getParameter<edm::InputTag>("EBDigiCollection");
00041 
00042   for (int i = 0; i < 36; i++) {
00043     mePedMapG12_[i] = 0;
00044   }
00045 
00046 }
00047 
00048 EBPedestalOnlineTask::~EBPedestalOnlineTask(){
00049 
00050 }
00051 
00052 void EBPedestalOnlineTask::beginJob(void){
00053 
00054   ievt_ = 0;
00055 
00056   if ( dqmStore_ ) {
00057     dqmStore_->setCurrentFolder(prefixME_ + "/EBPedestalOnlineTask");
00058     dqmStore_->rmdir(prefixME_ + "/EBPedestalOnlineTask");
00059   }
00060 
00061 }
00062 
00063 void EBPedestalOnlineTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00064 
00065   Numbers::initGeometry(c, false);
00066 
00067   if ( ! mergeRuns_ ) this->reset();
00068 
00069 }
00070 
00071 void EBPedestalOnlineTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00072 
00073 }
00074 
00075 void EBPedestalOnlineTask::reset(void) {
00076 
00077   for (int i = 0; i < 36; i++) {
00078     if ( mePedMapG12_[i] ) mePedMapG12_[i]->Reset();
00079   }
00080 
00081 }
00082 
00083 void EBPedestalOnlineTask::setup(void){
00084 
00085   init_ = true;
00086 
00087   char histo[200];
00088 
00089   if ( dqmStore_ ) {
00090     dqmStore_->setCurrentFolder(prefixME_ + "/EBPedestalOnlineTask");
00091 
00092     dqmStore_->setCurrentFolder(prefixME_ + "/EBPedestalOnlineTask/Gain12");
00093     for (int i = 0; i < 36; i++) {
00094       sprintf(histo, "EBPOT pedestal %s G12", Numbers::sEB(i+1).c_str());
00095       mePedMapG12_[i] = dqmStore_->bookProfile2D(histo, histo, 85, 0., 85., 20, 0., 20., 4096, 0., 4096., "s");
00096       mePedMapG12_[i]->setAxisTitle("ieta", 1);
00097       mePedMapG12_[i]->setAxisTitle("iphi", 2);
00098       dqmStore_->tag(mePedMapG12_[i], i+1);
00099     }
00100 
00101   }
00102 
00103 }
00104 
00105 void EBPedestalOnlineTask::cleanup(void){
00106 
00107   if ( ! init_ ) return;
00108 
00109   if ( dqmStore_ ) {
00110     dqmStore_->setCurrentFolder(prefixME_ + "/EBPedestalOnlineTask");
00111 
00112     dqmStore_->setCurrentFolder(prefixME_ + "/EBPedestalOnlineTask/Gain12");
00113     for ( int i = 0; i < 36; i++ ) {
00114       if ( mePedMapG12_[i] ) dqmStore_->removeElement( mePedMapG12_[i]->getName() );
00115       mePedMapG12_[i] = 0;
00116     }
00117 
00118   }
00119 
00120   init_ = false;
00121 
00122 }
00123 
00124 void EBPedestalOnlineTask::endJob(void){
00125 
00126   edm::LogInfo("EBPedestalOnlineTask") << "analyzed " << ievt_ << " events";
00127 
00128   if ( enableCleanup_ ) this->cleanup();
00129 
00130 }
00131 
00132 void EBPedestalOnlineTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00133 
00134   if ( ! init_ ) this->setup();
00135 
00136   ievt_++;
00137 
00138   edm::Handle<EBDigiCollection> digis;
00139 
00140   if ( e.getByLabel(EBDigiCollection_, digis) ) {
00141 
00142     int nebd = digis->size();
00143     LogDebug("EBPedestalOnlineTask") << "event " << ievt_ << " digi collection size " << nebd;
00144 
00145     for ( EBDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr ) {
00146 
00147       EBDetId id = digiItr->id();
00148 
00149       int ic = id.ic();
00150       int ie = (ic-1)/20 + 1;
00151       int ip = (ic-1)%20 + 1;
00152 
00153       int ism = Numbers::iSM( id );
00154 
00155       float xie = ie - 0.5;
00156       float xip = ip - 0.5;
00157 
00158       EBDataFrame dataframe = (*digiItr);
00159 
00160       for (int i = 0; i < 3; i++) {
00161 
00162         int adc = dataframe.sample(i).adc();
00163 
00164         MonitorElement* mePedMap = 0;
00165 
00166         if ( dataframe.sample(i).gainId() == 1 ) mePedMap = mePedMapG12_[ism-1];
00167         if ( dataframe.sample(i).gainId() == 2 ) mePedMap = 0;
00168         if ( dataframe.sample(i).gainId() == 3 ) mePedMap = 0;
00169 
00170         float xval = float(adc);
00171 
00172         if ( mePedMap ) mePedMap->Fill(xie, xip, xval);
00173 
00174       }
00175 
00176     }
00177 
00178   } else {
00179 
00180     edm::LogWarning("EBPedestalOnlineTask") << EBDigiCollection_ << " not available";
00181 
00182   }
00183 
00184 }
00185