CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/DQM/EcalPreshowerMonitorModule/src/ESOccupancyTask.cc

Go to the documentation of this file.
00001 #include <memory>
00002 #include <fstream>
00003 #include <iostream>
00004 
00005 #include "FWCore/ServiceRegistry/interface/Service.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "FWCore/Framework/interface/MakerMacros.h"
00008 #include "FWCore/Framework/interface/Frameworkfwd.h"
00009 #include "FWCore/ParameterSet/interface/FileInPath.h"
00010 #include "DataFormats/DetId/interface/DetId.h"
00011 #include "DataFormats/EcalDetId/interface/ESDetId.h"
00012 #include "DataFormats/EcalDigi/interface/ESDataFrame.h"
00013 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00014 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00015 #include "DQMServices/Core/interface/MonitorElement.h"
00016 #include "DQMServices/Core/interface/DQMStore.h"
00017 #include "DQM/EcalPreshowerMonitorModule/interface/ESOccupancyTask.h"
00018 
00019 #include "TStyle.h"
00020 #include "TH2F.h"
00021 
00022 using namespace cms;
00023 using namespace edm;
00024 using namespace std;
00025 
00026 ESOccupancyTask::ESOccupancyTask(const edm::ParameterSet& ps) {
00027 
00028   rechitlabel_ = ps.getParameter<InputTag>("RecHitLabel");
00029   digilabel_   = ps.getParameter<InputTag>("DigiLabel");
00030   prefixME_     = ps.getUntrackedParameter<string>("prefixME", "EcalPreshower"); 
00031   
00032   dqmStore_     = Service<DQMStore>().operator->();
00033   eCount_ = 0;
00034   
00035   //Histogram init  
00036   for (int i = 0; i < 2; ++i)
00037     for (int j = 0; j < 2; ++j) {
00038       hRecOCC_[i][j] = 0;
00039       hRecNHit_[i][j] = 0;
00040       hEng_[i][j] = 0;
00041       hEvEng_[i][j] = 0;
00042       hEnDensity_[i][i] = 0;
00043       hDigiNHit_[i][j] = 0;
00044 
00045       hSelEng_[i][j] = 0;
00046       hSelOCC_[i][j] = 0;
00047       hSelEnDensity_[i][j] = 0;
00048     }
00049   
00050   for (int i = 0; i<2; ++i) 
00051     hE1E2_[i]=0;
00052   
00053   dqmStore_->setCurrentFolder(prefixME_ + "/ESOccupancyTask");
00054   
00055   //Booking Histograms
00056   //Notice: Change ESRenderPlugin under DQM/RenderPlugins/src if you change this histogram name.
00057   char histo[200];
00058   for (int i=0 ; i<2; ++i) 
00059     for (int j=0 ; j<2; ++j) {
00060       int iz = (i==0)? 1:-1;
00061       sprintf(histo, "ES RecHit 2D Occupancy Z %d P %d", iz, j+1);
00062       hRecOCC_[i][j] = dqmStore_->book2D(histo, histo, 40, 0.5, 40.5, 40, 0.5, 40.5);
00063       hRecOCC_[i][j]->setAxisTitle("Si X", 1);
00064       hRecOCC_[i][j]->setAxisTitle("Si Y", 2);
00065       
00066       //Bin 40,40 is used to save eumber of event for scaling.
00067       sprintf(histo, "ES Energy Density Z %d P %d", iz, j+1);
00068       hEnDensity_[i][j] = dqmStore_->book2D(histo, histo, 40, 0.5, 40.5, 40, 0.5, 40.5);
00069       hEnDensity_[i][j]->setAxisTitle("Si X", 1);
00070       hEnDensity_[i][j]->setAxisTitle("Si Y", 2);
00071       
00072       sprintf(histo, "ES Num of RecHits Z %d P %d", iz, j+1);
00073       hRecNHit_[i][j] = dqmStore_->book1DD(histo, histo, 60, 0, 1920);
00074       hRecNHit_[i][j]->setAxisTitle("# of RecHits", 1);
00075       hRecNHit_[i][j]->setAxisTitle("Num of Events", 2);
00076       
00077       sprintf(histo, "ES Num of Good RecHits Z %d P %d", iz, j+1);
00078       hDigiNHit_[i][j] = dqmStore_->book1DD(histo, histo, 60, 0, 1920);
00079       hDigiNHit_[i][j]->setAxisTitle("# of good RecHits", 1);
00080       hDigiNHit_[i][j]->setAxisTitle("Num of Events", 2);
00081       
00082       sprintf(histo, "ES RecHit Energy Z %d P %d", iz, j+1);
00083       hEng_[i][j] = dqmStore_->book1DD(histo, histo, 50, 0, 0.001);
00084       hEng_[i][j]->setAxisTitle("RecHit Energy", 1);
00085       hEng_[i][j]->setAxisTitle("Num of ReHits", 2);
00086       
00087       sprintf(histo, "ES Event Energy Z %d P %d", iz, j+1);
00088       hEvEng_[i][j] = dqmStore_->book1DD(histo, histo, 50, 0, 0.1);
00089       hEvEng_[i][j]->setAxisTitle("Event Energy", 1);
00090       hEvEng_[i][j]->setAxisTitle("Num of Events", 2);
00091 
00092       // histograms with selected hits
00093       sprintf(histo, "ES RecHit Energy with selected hits Z %d P %d", iz, j+1);
00094       hSelEng_[i][j] = dqmStore_->book1DD(histo, histo, 50, 0, 0.001);
00095       hSelEng_[i][j]->setAxisTitle("RecHit Energy", 1);
00096       hSelEng_[i][j]->setAxisTitle("Num of ReHits", 2);
00097 
00098       sprintf(histo, "ES Occupancy with selected hits Z %d P %d", iz, j+1);
00099       hSelOCC_[i][j] = dqmStore_->book2D(histo, histo, 40, 0.5, 40.5, 40, 0.5, 40.5);
00100       hSelOCC_[i][j]->setAxisTitle("Si X", 1);
00101       hSelOCC_[i][j]->setAxisTitle("Si Y", 2);
00102 
00103       sprintf(histo, "ES Energy Density with selected hits Z %d P %d", iz, j+1);
00104       hSelEnDensity_[i][j] = dqmStore_->book2D(histo, histo, 40, 0.5, 40.5, 40, 0.5, 40.5);
00105       hSelEnDensity_[i][j]->setAxisTitle("Si X", 1);
00106       hSelEnDensity_[i][j]->setAxisTitle("Si Y", 2);
00107     }
00108 
00109    hE1E2_[0] = dqmStore_->book2D("ES+ EP1 vs EP2", "ES+ EP1 vs EP2", 50, 0, 0.1, 50, 0, 0.1);
00110    hE1E2_[1] = dqmStore_->book2D("ES- EP1 vs EP2", "ES- EP1 vs EP2", 50, 0, 0.1, 50, 0, 0.1);
00111 
00112 }
00113 
00114 ESOccupancyTask::~ESOccupancyTask() {
00115 }
00116 
00117 void ESOccupancyTask::beginJob(void) {
00118 }
00119 
00120 void ESOccupancyTask::endJob() {
00121 }
00122 
00123 void ESOccupancyTask::analyze(const edm::Event& e, const edm::EventSetup& iSetup) {
00124 
00125    runNum_ = e.id().run();
00126    eCount_++;
00127 
00128    // RecHits
00129    int zside, plane, ix, iy;
00130    int sum_RecHits[2][2], sum_DigiHits[2][2];
00131    float sum_Energy[2][2];
00132 
00133    for (int i = 0; i < 2; ++i) 
00134      for (int j = 0; j < 2; ++j) {
00135        sum_RecHits[i][j] = 0;
00136        sum_DigiHits[i][j] = 0;
00137        sum_Energy[i][j] = 0;
00138      }
00139    
00140    Handle<ESRecHitCollection> ESRecHit;
00141    if ( e.getByLabel(rechitlabel_, ESRecHit) ) {
00142      
00143      for (ESRecHitCollection::const_iterator hitItr = ESRecHit->begin(); hitItr != ESRecHit->end(); ++hitItr) {
00144        
00145        ESDetId id = ESDetId(hitItr->id());
00146        
00147        zside = id.zside();
00148        plane = id.plane();
00149        ix    = id.six();
00150        iy    = id.siy();
00151  
00152        int i = (zside==1)? 0:1;
00153        int j = plane-1;
00154        
00155        sum_RecHits[i][j]++;
00156        sum_Energy[i][j] += hitItr->energy();
00157        hRecOCC_[i][j]->Fill(ix, iy);
00158        if (hitItr->energy() != 0) {
00159          hEng_[i][j]->Fill(hitItr->energy());
00160          hEnDensity_[i][j]->Fill(ix, iy, hitItr->energy());
00161 
00162          if (hitItr->recoFlag()==14 || hitItr->recoFlag()==1 || (hitItr->recoFlag()<=10 && hitItr->recoFlag()>=5)) continue;
00163          hSelEng_[i][j]->Fill(hitItr->energy());
00164          hSelEnDensity_[i][j]->Fill(ix, iy, hitItr->energy());
00165          hSelOCC_[i][j]->Fill(ix, iy);
00166        }
00167        
00168      }
00169    } else {
00170      LogWarning("ESOccupancyTask") << rechitlabel_ << " not available";
00171    }
00172 
00173    //Fill histograms after a event
00174    for (int i = 0; i < 2; ++i) 
00175      for (int j = 0; j < 2; ++j) {
00176 
00177        hRecNHit_[i][j]->Fill(sum_RecHits[i][j]);
00178        hDigiNHit_[i][j]->Fill(sum_DigiHits[i][j]);
00179        hEvEng_[i][j]->Fill(sum_Energy[i][j]);
00180        
00181        //Save eCount_ for Scaling
00182        hRecOCC_[i][j]->setBinContent(40,40,eCount_);
00183        hEnDensity_[i][j]->setBinContent(40,40,eCount_);
00184 
00185        hSelOCC_[i][j]->setBinContent(40,40,eCount_);
00186        hSelEnDensity_[i][j]->setBinContent(40,40,eCount_);
00187      }
00188 
00189    hE1E2_[0]->Fill(sum_Energy[0][0], sum_Energy[0][1]);
00190    hE1E2_[1]->Fill(sum_Energy[1][0], sum_Energy[1][1]);
00191 
00192 }
00193 
00194 //define this as a plug-in
00195 DEFINE_FWK_MODULE(ESOccupancyTask);