CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/DQM/EcalEndcapMonitorTasks/src/EEOccupancyTask.cc

Go to the documentation of this file.
00001 /*
00002  * \file EEOccupancyTask.cc
00003  *
00004  * $Date: 2011/08/30 09:28:42 $
00005  * $Revision: 1.89 $
00006  * \author G. Della Ricca
00007  * \author G. Franzoni
00008  *
00009 */
00010 
00011 #include <iostream>
00012 #include <fstream>
00013 #include <vector>
00014 
00015 #include "FWCore/ServiceRegistry/interface/Service.h"
00016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00017 #include "FWCore/Framework/interface/ESHandle.h"
00018 
00019 #include "DQMServices/Core/interface/MonitorElement.h"
00020 
00021 #include "DQMServices/Core/interface/DQMStore.h"
00022 
00023 #include "DataFormats/EcalRawData/interface/EcalRawDataCollections.h"
00024 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00025 #include "DataFormats/EcalDigi/interface/EEDataFrame.h"
00026 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00027 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
00028 #include "DataFormats/EcalRecHit/interface/EcalRecHit.h"
00029 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00030 
00031 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h"
00032 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h"
00033 
00034 #include "DQM/EcalCommon/interface/Numbers.h"
00035 
00036 #include "DQM/EcalEndcapMonitorTasks/interface/EEOccupancyTask.h"
00037 
00038 EEOccupancyTask::EEOccupancyTask(const edm::ParameterSet& ps){
00039 
00040   init_ = false;
00041 
00042   initCaloGeometry_ = false;
00043 
00044   dqmStore_ = edm::Service<DQMStore>().operator->();
00045 
00046   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00047 
00048   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00049 
00050   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00051 
00052   EcalRawDataCollection_ = ps.getParameter<edm::InputTag>("EcalRawDataCollection");
00053   EEDigiCollection_ = ps.getParameter<edm::InputTag>("EEDigiCollection");
00054   EcalPnDiodeDigiCollection_ = ps.getParameter<edm::InputTag>("EcalPnDiodeDigiCollection");
00055   EcalRecHitCollection_ = ps.getParameter<edm::InputTag>("EcalRecHitCollection");
00056   EcalTrigPrimDigiCollection_ = ps.getParameter<edm::InputTag>("EcalTrigPrimDigiCollection");
00057 
00058   for (int i = 0; i < 18; i++) {
00059     meOccupancy_[i]    = 0;
00060     meOccupancyMem_[i] = 0;
00061     meEERecHitEnergy_[i] = 0;
00062     meSpectrum_[i] = 0;
00063   }
00064 
00065   meEERecHitSpectrum_[0] = 0;
00066   meEERecHitSpectrum_[1] = 0;
00067 
00068   meEEDigiOccupancy_[0] = 0;
00069   meEEDigiOccupancyProEta_[0] = 0;
00070   meEEDigiOccupancyProPhi_[0] = 0;
00071   meEEDigiOccupancy_[1] = 0;
00072   meEEDigiOccupancyProEta_[1] = 0;
00073   meEEDigiOccupancyProPhi_[1] = 0;
00074 
00075   meEERecHitOccupancy_[0] = 0;
00076   meEERecHitOccupancyProEta_[0] = 0;
00077   meEERecHitOccupancyProPhi_[0] = 0;
00078   meEERecHitOccupancy_[1] = 0;
00079   meEERecHitOccupancyProEta_[1] = 0;
00080   meEERecHitOccupancyProPhi_[1] = 0;
00081 
00082   meEERecHitOccupancyThr_[0] = 0;
00083   meEERecHitOccupancyProEtaThr_[0] = 0;
00084   meEERecHitOccupancyProPhiThr_[0] = 0;
00085   meEERecHitOccupancyThr_[1] = 0;
00086   meEERecHitOccupancyProEtaThr_[1] = 0;
00087   meEERecHitOccupancyProPhiThr_[1] = 0;
00088 
00089   meEETrigPrimDigiOccupancy_[0] = 0;
00090   meEETrigPrimDigiOccupancyProEta_[0] = 0;
00091   meEETrigPrimDigiOccupancyProPhi_[0] = 0;
00092   meEETrigPrimDigiOccupancy_[1] = 0;
00093   meEETrigPrimDigiOccupancyProEta_[1] = 0;
00094   meEETrigPrimDigiOccupancyProPhi_[1] = 0;
00095 
00096   meEETrigPrimDigiOccupancyThr_[0] = 0;
00097   meEETrigPrimDigiOccupancyProEtaThr_[0] = 0;
00098   meEETrigPrimDigiOccupancyProPhiThr_[0] = 0;
00099   meEETrigPrimDigiOccupancyThr_[1] = 0;
00100   meEETrigPrimDigiOccupancyProEtaThr_[1] = 0;
00101   meEETrigPrimDigiOccupancyProPhiThr_[1] = 0;
00102 
00103   meEETestPulseDigiOccupancy_[0] = 0;
00104   meEETestPulseDigiOccupancy_[1] = 0;
00105 
00106   meEELaserDigiOccupancy_[0] = 0;
00107   meEELaserDigiOccupancy_[1] = 0;
00108 
00109   meEELedDigiOccupancy_[0] = 0;
00110   meEELedDigiOccupancy_[1] = 0;
00111 
00112   meEEPedestalDigiOccupancy_[0] = 0;
00113   meEEPedestalDigiOccupancy_[1] = 0;
00114 
00115   recHitEnergyMin_ = 0.500; // GeV
00116   trigPrimEtMin_ = 4.; // 4 ADCs == 1 GeV
00117 
00118   for (int i = 0; i < EEDetId::kSizeForDenseIndexing; i++) {
00119     geometryEE[i][0] = 0;
00120     geometryEE[i][1] = 0;
00121   }
00122 
00123 }
00124 
00125 EEOccupancyTask::~EEOccupancyTask(){
00126 
00127 }
00128 
00129 void EEOccupancyTask::beginJob(void){
00130 
00131   ievt_ = 0;
00132 
00133   if ( dqmStore_ ) {
00134     dqmStore_->setCurrentFolder(prefixME_ + "/EEOccupancyTask");
00135     dqmStore_->rmdir(prefixME_ + "/EEOccupancyTask");
00136   }
00137 
00138 }
00139 
00140 void EEOccupancyTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00141 
00142   Numbers::initGeometry(c, false);
00143 
00144   if( !initCaloGeometry_ ) {
00145     c.get<CaloGeometryRecord>().get(pGeometry_);
00146     initCaloGeometry_ = true;
00147   }
00148 
00149   if ( ! mergeRuns_ ) this->reset();
00150 
00151 }
00152 
00153 void EEOccupancyTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00154 
00155 }
00156 
00157 void EEOccupancyTask::reset(void) {
00158 
00159   for (int i = 0; i < 18; i++) {
00160     if ( meOccupancy_[i] ) meOccupancy_[i]->Reset();
00161     if ( meOccupancyMem_[i] ) meOccupancyMem_[i]->Reset();
00162     if ( meEERecHitEnergy_[i] ) meEERecHitEnergy_[i]->Reset();
00163     if ( meSpectrum_[i] ) meSpectrum_[i]->Reset();
00164   }
00165 
00166   if ( meEERecHitSpectrum_[0] ) meEERecHitSpectrum_[0]->Reset();
00167   if ( meEERecHitSpectrum_[1] ) meEERecHitSpectrum_[1]->Reset();
00168 
00169   if ( meEEDigiOccupancy_[0] ) meEEDigiOccupancy_[0]->Reset();
00170   if ( meEEDigiOccupancyProEta_[0] ) meEEDigiOccupancyProEta_[0]->Reset();
00171   if ( meEEDigiOccupancyProPhi_[0] ) meEEDigiOccupancyProPhi_[0]->Reset();
00172   if ( meEEDigiOccupancy_[1] ) meEEDigiOccupancy_[1]->Reset();
00173   if ( meEEDigiOccupancyProEta_[1] ) meEEDigiOccupancyProEta_[1]->Reset();
00174   if ( meEEDigiOccupancyProPhi_[1] ) meEEDigiOccupancyProPhi_[1]->Reset();
00175 
00176   if ( meEERecHitOccupancy_[0] ) meEERecHitOccupancy_[0]->Reset();
00177   if ( meEERecHitOccupancyProEta_[0] ) meEERecHitOccupancyProEta_[0]->Reset();
00178   if ( meEERecHitOccupancyProPhi_[0] ) meEERecHitOccupancyProPhi_[0]->Reset();
00179   if ( meEERecHitOccupancy_[1] ) meEERecHitOccupancy_[1]->Reset();
00180   if ( meEERecHitOccupancyProEta_[1] ) meEERecHitOccupancyProEta_[1]->Reset();
00181   if ( meEERecHitOccupancyProPhi_[1] ) meEERecHitOccupancyProPhi_[1]->Reset();
00182 
00183   if ( meEERecHitOccupancyThr_[0] ) meEERecHitOccupancyThr_[0]->Reset();
00184   if ( meEERecHitOccupancyProEtaThr_[0] ) meEERecHitOccupancyProEtaThr_[0]->Reset();
00185   if ( meEERecHitOccupancyProPhiThr_[0] ) meEERecHitOccupancyProPhiThr_[0]->Reset();
00186   if ( meEERecHitOccupancyThr_[1] ) meEERecHitOccupancyThr_[1]->Reset();
00187   if ( meEERecHitOccupancyProEtaThr_[1] ) meEERecHitOccupancyProEtaThr_[1]->Reset();
00188   if ( meEERecHitOccupancyProPhiThr_[1] ) meEERecHitOccupancyProPhiThr_[1]->Reset();
00189 
00190   if ( meEETrigPrimDigiOccupancy_[0] ) meEETrigPrimDigiOccupancy_[0]->Reset();
00191   if ( meEETrigPrimDigiOccupancyProEta_[0] ) meEETrigPrimDigiOccupancyProEta_[0]->Reset();
00192   if ( meEETrigPrimDigiOccupancyProPhi_[0] ) meEETrigPrimDigiOccupancyProPhi_[0]->Reset();
00193   if ( meEETrigPrimDigiOccupancy_[1] ) meEETrigPrimDigiOccupancy_[1]->Reset();
00194   if ( meEETrigPrimDigiOccupancyProEta_[1] ) meEETrigPrimDigiOccupancyProEta_[1]->Reset();
00195   if ( meEETrigPrimDigiOccupancyProPhi_[1] ) meEETrigPrimDigiOccupancyProPhi_[1]->Reset();
00196 
00197   if ( meEETrigPrimDigiOccupancyThr_[0] ) meEETrigPrimDigiOccupancyThr_[0]->Reset();
00198   if ( meEETrigPrimDigiOccupancyProEtaThr_[0] ) meEETrigPrimDigiOccupancyProEtaThr_[0]->Reset();
00199   if ( meEETrigPrimDigiOccupancyProPhiThr_[0] ) meEETrigPrimDigiOccupancyProPhiThr_[0]->Reset();
00200   if ( meEETrigPrimDigiOccupancyThr_[1] ) meEETrigPrimDigiOccupancyThr_[1]->Reset();
00201   if ( meEETrigPrimDigiOccupancyProEtaThr_[1] ) meEETrigPrimDigiOccupancyProEtaThr_[1]->Reset();
00202   if ( meEETrigPrimDigiOccupancyProPhiThr_[1] ) meEETrigPrimDigiOccupancyProPhiThr_[1]->Reset();
00203 
00204   if ( meEETestPulseDigiOccupancy_[0] ) meEETestPulseDigiOccupancy_[0]->Reset();
00205   if ( meEETestPulseDigiOccupancy_[1] ) meEETestPulseDigiOccupancy_[1]->Reset();
00206 
00207   if ( meEELaserDigiOccupancy_[0] ) meEELaserDigiOccupancy_[0]->Reset();
00208   if ( meEELaserDigiOccupancy_[1] ) meEELaserDigiOccupancy_[1]->Reset();
00209 
00210   if ( meEELedDigiOccupancy_[0] ) meEELedDigiOccupancy_[0]->Reset();
00211   if ( meEELedDigiOccupancy_[1] ) meEELedDigiOccupancy_[1]->Reset();
00212 
00213   if ( meEEPedestalDigiOccupancy_[0] ) meEEPedestalDigiOccupancy_[0]->Reset();
00214   if ( meEEPedestalDigiOccupancy_[1] ) meEEPedestalDigiOccupancy_[1]->Reset();
00215 
00216 }
00217 
00218 void EEOccupancyTask::setup(void){
00219 
00220   init_ = true;
00221 
00222   std::string name;
00223 
00224   if ( dqmStore_ ) {
00225     dqmStore_->setCurrentFolder(prefixME_ + "/EEOccupancyTask");
00226 
00227     for (int i = 0; i < 18; i++) {
00228       name = "EEOT digi occupancy " + Numbers::sEE(i+1);
00229       meOccupancy_[i] = dqmStore_->book2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50.);
00230       meOccupancy_[i]->setAxisTitle("ix", 1);
00231       if ( i+1 >= 1 && i+1 <= 9 ) meOccupancy_[i]->setAxisTitle("101-ix", 1);
00232       meOccupancy_[i]->setAxisTitle("iy", 2);
00233       dqmStore_->tag(meOccupancy_[i], i+1);
00234 
00235       name = "EEOT MEM digi occupancy " + Numbers::sEE(i+1);
00236       meOccupancyMem_[i] = dqmStore_->book2D(name, name, 10, 0., 10., 5, 0., 5.);
00237       meOccupancyMem_[i]->setAxisTitle("pseudo-strip", 1);
00238       meOccupancyMem_[i]->setAxisTitle("channel", 2);
00239       dqmStore_->tag(meOccupancyMem_[i], i+1);
00240 
00241       name = "EEOT rec hit energy " + Numbers::sEE(i+1);
00242       meEERecHitEnergy_[i] = dqmStore_->bookProfile2D(name, name, 50, Numbers::ix0EE(i+1)+0., Numbers::ix0EE(i+1)+50., 50, Numbers::iy0EE(i+1)+0., Numbers::iy0EE(i+1)+50., 4096, 0., 4096., "s");
00243       meEERecHitEnergy_[i]->setAxisTitle("ix", 1);
00244       if ( i+1 >= 1 && i+1 <= 9 ) meEERecHitEnergy_[i]->setAxisTitle("101-ix", 1);
00245       meEERecHitEnergy_[i]->setAxisTitle("iy", 2);
00246       meEERecHitEnergy_[i]->setAxisTitle("energy (GeV)", 3);
00247       dqmStore_->tag(meEERecHitEnergy_[i], i+1);
00248 
00249       name = "EEOT energy spectrum " + Numbers::sEE(i+1);
00250       meSpectrum_[i] = dqmStore_->book1D(name, name, 100, 0., 1.5);
00251       meSpectrum_[i]->setAxisTitle("energy (GeV)", 1);
00252       dqmStore_->tag(meSpectrum_[i], i+1);
00253     }
00254 
00255     name = "EEOT rec hit spectrum EE -";
00256     meEERecHitSpectrum_[0] = dqmStore_->book1D(name, name, 100, 0., 10.);
00257     meEERecHitSpectrum_[0]->setAxisTitle("energy (GeV)", 1);
00258 
00259     name = "EEOT rec hit spectrum EE +";
00260     meEERecHitSpectrum_[1] = dqmStore_->book1D(name, name, 100, 0., 10.);
00261     meEERecHitSpectrum_[1]->setAxisTitle("energy (GeV)", 1);
00262 
00263     name = "EEOT digi occupancy EE -";
00264     meEEDigiOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00265     meEEDigiOccupancy_[0]->setAxisTitle("jx", 1);
00266     meEEDigiOccupancy_[0]->setAxisTitle("jy", 2);
00267     name = "EEOT digi occupancy EE - projection eta";
00268     meEEDigiOccupancyProEta_[0] = dqmStore_->book1DD(name, name, 22, -3.0, -1.479);
00269     meEEDigiOccupancyProEta_[0]->setAxisTitle("eta", 1);
00270     meEEDigiOccupancyProEta_[0]->setAxisTitle("number of digis", 2);
00271     name = "EEOT digi occupancy EE - projection phi";
00272     meEEDigiOccupancyProPhi_[0] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00273     meEEDigiOccupancyProPhi_[0]->setAxisTitle("phi", 1);
00274     meEEDigiOccupancyProPhi_[0]->setAxisTitle("number of digis", 2);
00275 
00276     name = "EEOT digi occupancy EE +";
00277     meEEDigiOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00278     meEEDigiOccupancy_[1]->setAxisTitle("jx", 1);
00279     meEEDigiOccupancy_[1]->setAxisTitle("jy", 2);
00280     name = "EEOT digi occupancy EE + projection eta";
00281     meEEDigiOccupancyProEta_[1] = dqmStore_->book1DD(name, name, 22, 1.479, 3.0);
00282     meEEDigiOccupancyProEta_[1]->setAxisTitle("eta", 1);
00283     meEEDigiOccupancyProEta_[1]->setAxisTitle("number of digis", 2);
00284     name = "EEOT digi occupancy EE + projection phi";
00285     meEEDigiOccupancyProPhi_[1] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00286     meEEDigiOccupancyProPhi_[1]->setAxisTitle("phi", 1);
00287     meEEDigiOccupancyProPhi_[1]->setAxisTitle("number of digis", 2);
00288 
00289     name = "EEOT rec hit occupancy EE -";
00290     meEERecHitOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00291     meEERecHitOccupancy_[0]->setAxisTitle("jx", 1);
00292     meEERecHitOccupancy_[0]->setAxisTitle("jy", 2);
00293     name = "EEOT rec hit occupancy EE - projection eta";
00294     meEERecHitOccupancyProEta_[0] = dqmStore_->book1DD(name, name, 22, -3.0, -1.479);
00295     meEERecHitOccupancyProEta_[0]->setAxisTitle("eta", 1);
00296     meEERecHitOccupancyProEta_[0]->setAxisTitle("number of hits", 2);
00297     name = "EEOT rec hit occupancy EE - projection phi";
00298     meEERecHitOccupancyProPhi_[0] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00299     meEERecHitOccupancyProPhi_[0]->setAxisTitle("phi", 1);
00300     meEERecHitOccupancyProPhi_[0]->setAxisTitle("number of hits", 2);
00301 
00302     name = "EEOT rec hit occupancy EE +";
00303     meEERecHitOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00304     meEERecHitOccupancy_[1]->setAxisTitle("jx", 1);
00305     meEERecHitOccupancy_[1]->setAxisTitle("jy", 2);
00306     name = "EEOT rec hit occupancy EE + projection eta";
00307     meEERecHitOccupancyProEta_[1] = dqmStore_->book1DD(name, name, 22, 1.479, 3.0);
00308     meEERecHitOccupancyProEta_[1]->setAxisTitle("eta", 1);
00309     meEERecHitOccupancyProEta_[1]->setAxisTitle("number of hits", 2);
00310     name = "EEOT rec hit occupancy EE + projection phi";
00311     meEERecHitOccupancyProPhi_[1] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00312     meEERecHitOccupancyProPhi_[1]->setAxisTitle("phi", 1);
00313     meEERecHitOccupancyProPhi_[1]->setAxisTitle("number of hits", 2);
00314 
00315     name = "EEOT rec hit thr occupancy EE -";
00316     meEERecHitOccupancyThr_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00317     meEERecHitOccupancyThr_[0]->setAxisTitle("jx", 1);
00318     meEERecHitOccupancyThr_[0]->setAxisTitle("jy", 2);
00319     name = "EEOT rec hit thr occupancy EE - projection eta";
00320     meEERecHitOccupancyProEtaThr_[0] = dqmStore_->book1DD(name, name, 22, -3.0, -1.479);
00321     meEERecHitOccupancyProEtaThr_[0]->setAxisTitle("eta", 1);
00322     meEERecHitOccupancyProEtaThr_[0]->setAxisTitle("number of hits", 2);
00323     name = "EEOT rec hit thr occupancy EE - projection phi";
00324     meEERecHitOccupancyProPhiThr_[0] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00325     meEERecHitOccupancyProPhiThr_[0]->setAxisTitle("phi", 1);
00326     meEERecHitOccupancyProPhiThr_[0]->setAxisTitle("number of hits", 2);
00327 
00328     name = "EEOT rec hit thr occupancy EE +";
00329     meEERecHitOccupancyThr_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00330     meEERecHitOccupancyThr_[1]->setAxisTitle("jx", 1);
00331     meEERecHitOccupancyThr_[1]->setAxisTitle("jy", 2);
00332     name = "EEOT rec hit thr occupancy EE + projection eta";
00333     meEERecHitOccupancyProEtaThr_[1] = dqmStore_->book1DD(name, name, 22, 1.479, 3.0);
00334     meEERecHitOccupancyProEtaThr_[1]->setAxisTitle("eta", 1);
00335     meEERecHitOccupancyProEtaThr_[1]->setAxisTitle("number of hits", 2);
00336     name = "EEOT rec hit thr occupancy EE + projection phi";
00337     meEERecHitOccupancyProPhiThr_[1] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00338     meEERecHitOccupancyProPhiThr_[1]->setAxisTitle("phi", 1);
00339     meEERecHitOccupancyProPhiThr_[1]->setAxisTitle("number of hits", 2);
00340 
00341     name = "EEOT TP digi occupancy EE -";
00342     meEETrigPrimDigiOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00343     meEETrigPrimDigiOccupancy_[0]->setAxisTitle("jx", 1);
00344     meEETrigPrimDigiOccupancy_[0]->setAxisTitle("jy", 2);
00345     name = "EEOT TP digi occupancy EE - projection eta";
00346     meEETrigPrimDigiOccupancyProEta_[0] = dqmStore_->book1DD(name, name, 22, -3.0, -1.479);
00347     meEETrigPrimDigiOccupancyProEta_[0]->setAxisTitle("eta", 1);
00348     meEETrigPrimDigiOccupancyProEta_[0]->setAxisTitle("number of TP digis", 2);
00349     name = "EEOT TP digi occupancy EE - projection phi";
00350     meEETrigPrimDigiOccupancyProPhi_[0] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00351     meEETrigPrimDigiOccupancyProPhi_[0]->setAxisTitle("phi", 1);
00352     meEETrigPrimDigiOccupancyProPhi_[0]->setAxisTitle("number of TP digis", 2);
00353 
00354     name = "EEOT TP digi occupancy EE +";
00355     meEETrigPrimDigiOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00356     meEETrigPrimDigiOccupancy_[1]->setAxisTitle("jx", 1);
00357     meEETrigPrimDigiOccupancy_[1]->setAxisTitle("jy", 2);
00358     name = "EEOT TP digi occupancy EE + projection eta";
00359     meEETrigPrimDigiOccupancyProEta_[1] = dqmStore_->book1DD(name, name, 22, 1.479, 3.0);
00360     meEETrigPrimDigiOccupancyProEta_[1]->setAxisTitle("eta", 1);
00361     meEETrigPrimDigiOccupancyProEta_[1]->setAxisTitle("number of TP digis", 2);
00362     name = "EEOT TP digi occupancy EE + projection phi";
00363     meEETrigPrimDigiOccupancyProPhi_[1] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00364     meEETrigPrimDigiOccupancyProPhi_[1]->setAxisTitle("phi", 1);
00365     meEETrigPrimDigiOccupancyProPhi_[1]->setAxisTitle("number of TP digis", 2);
00366 
00367     name = "EEOT TP digi thr occupancy EE -";
00368     meEETrigPrimDigiOccupancyThr_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00369     meEETrigPrimDigiOccupancyThr_[0]->setAxisTitle("jx", 1);
00370     meEETrigPrimDigiOccupancyThr_[0]->setAxisTitle("jy", 2);
00371     name = "EEOT TP digi thr occupancy EE - projection eta";
00372     meEETrigPrimDigiOccupancyProEtaThr_[0] = dqmStore_->book1DD(name, name, 22, -3.0, -1.479);
00373     meEETrigPrimDigiOccupancyProEtaThr_[0]->setAxisTitle("eta", 1);
00374     meEETrigPrimDigiOccupancyProEtaThr_[0]->setAxisTitle("number of TP digis", 2);
00375     name = "EEOT TP digi thr occupancy EE - projection phi";
00376     meEETrigPrimDigiOccupancyProPhiThr_[0] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00377     meEETrigPrimDigiOccupancyProPhiThr_[0]->setAxisTitle("phi", 1);
00378     meEETrigPrimDigiOccupancyProPhiThr_[0]->setAxisTitle("number of TP digis", 2);
00379 
00380     name = "EEOT TP digi thr occupancy EE +";
00381     meEETrigPrimDigiOccupancyThr_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00382     meEETrigPrimDigiOccupancyThr_[1]->setAxisTitle("jx", 1);
00383     meEETrigPrimDigiOccupancyThr_[1]->setAxisTitle("jy", 2);
00384     name = "EEOT TP digi thr occupancy EE + projection eta";
00385     meEETrigPrimDigiOccupancyProEtaThr_[1] = dqmStore_->book1DD(name, name, 22, 1.479, 3.0);
00386     meEETrigPrimDigiOccupancyProEtaThr_[1]->setAxisTitle("eta", 1);
00387     meEETrigPrimDigiOccupancyProEtaThr_[1]->setAxisTitle("number of TP digis", 2);
00388     name = "EEOT TP digi thr occupancy EE + projection phi";
00389     meEETrigPrimDigiOccupancyProPhiThr_[1] = dqmStore_->book1DD(name, name, 50, -M_PI, M_PI);
00390     meEETrigPrimDigiOccupancyProPhiThr_[1]->setAxisTitle("phi", 1);
00391     meEETrigPrimDigiOccupancyProPhiThr_[1]->setAxisTitle("number of TP digis", 2);
00392 
00393     name = "EEOT test pulse digi occupancy EE -";
00394     meEETestPulseDigiOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00395     meEETestPulseDigiOccupancy_[0]->setAxisTitle("jx", 1);
00396     meEETestPulseDigiOccupancy_[0]->setAxisTitle("jy", 2);
00397 
00398     name = "EEOT test pulse digi occupancy EE +";
00399     meEETestPulseDigiOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00400     meEETestPulseDigiOccupancy_[1]->setAxisTitle("jx", 1);
00401     meEETestPulseDigiOccupancy_[1]->setAxisTitle("jy", 2);
00402 
00403     name = "EEOT led digi occupancy EE -";
00404     meEELedDigiOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00405     meEELedDigiOccupancy_[0]->setAxisTitle("jx", 1);
00406     meEELedDigiOccupancy_[0]->setAxisTitle("jy", 2);
00407 
00408     name = "EEOT led digi occupancy EE +";
00409     meEELedDigiOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00410     meEELedDigiOccupancy_[1]->setAxisTitle("jx", 1);
00411     meEELedDigiOccupancy_[1]->setAxisTitle("jy", 2);
00412 
00413     name = "EEOT laser digi occupancy EE -";
00414     meEELaserDigiOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00415     meEELaserDigiOccupancy_[0]->setAxisTitle("jx", 1);
00416     meEELaserDigiOccupancy_[0]->setAxisTitle("jy", 2);
00417 
00418     name = "EEOT laser digi occupancy EE +";
00419     meEELaserDigiOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00420     meEELaserDigiOccupancy_[1]->setAxisTitle("jx", 1);
00421     meEELaserDigiOccupancy_[1]->setAxisTitle("jy", 2);
00422 
00423     name = "EEOT pedestal digi occupancy EE -";
00424     meEEPedestalDigiOccupancy_[0] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00425     meEEPedestalDigiOccupancy_[0]->setAxisTitle("jx", 1);
00426     meEEPedestalDigiOccupancy_[0]->setAxisTitle("jy", 2);
00427 
00428     name = "EEOT pedestal digi occupancy EE +";
00429     meEEPedestalDigiOccupancy_[1] = dqmStore_->book2D(name, name, 100, 0., 100., 100, 0., 100.);
00430     meEEPedestalDigiOccupancy_[1]->setAxisTitle("jx", 1);
00431     meEEPedestalDigiOccupancy_[1]->setAxisTitle("jy", 2);
00432 
00433   }
00434 
00435 }
00436 
00437 void EEOccupancyTask::cleanup(void){
00438 
00439   if ( ! init_ ) return;
00440 
00441   if ( dqmStore_ ) {
00442     dqmStore_->setCurrentFolder(prefixME_ + "/EEOccupancyTask");
00443 
00444     for (int i = 0; i < 18; i++) {
00445       if ( meOccupancy_[i] ) dqmStore_->removeElement( meOccupancy_[i]->getName() );
00446       meOccupancy_[i] = 0;
00447       if ( meOccupancyMem_[i] ) dqmStore_->removeElement( meOccupancyMem_[i]->getName() );
00448       meOccupancyMem_[i] = 0;
00449       if ( meEERecHitEnergy_[i] ) dqmStore_->removeElement( meEERecHitEnergy_[i]->getName() );
00450       meEERecHitEnergy_[i] = 0;
00451       if ( meSpectrum_[i] ) dqmStore_->removeElement( meSpectrum_[i]->getName() );
00452       meSpectrum_[i] = 0;
00453     }
00454 
00455     if ( meEERecHitSpectrum_[0] ) dqmStore_->removeElement( meEERecHitSpectrum_[0]->getName() );
00456     meEERecHitSpectrum_[0] = 0;
00457     if ( meEERecHitSpectrum_[1] ) dqmStore_->removeElement( meEERecHitSpectrum_[1]->getName() );
00458     meEERecHitSpectrum_[1] = 0;
00459 
00460     if ( meEEDigiOccupancy_[0] ) dqmStore_->removeElement( meEEDigiOccupancy_[0]->getName() );
00461     meEEDigiOccupancy_[0] = 0;
00462     if ( meEEDigiOccupancyProEta_[0] ) dqmStore_->removeElement( meEEDigiOccupancyProEta_[0]->getName() );
00463     meEEDigiOccupancyProEta_[0] = 0;
00464     if ( meEEDigiOccupancyProPhi_[0] ) dqmStore_->removeElement( meEEDigiOccupancyProPhi_[0]->getName() );
00465     meEEDigiOccupancyProPhi_[0] = 0;
00466 
00467     if ( meEEDigiOccupancy_[1] ) dqmStore_->removeElement( meEEDigiOccupancy_[1]->getName() );
00468     meEEDigiOccupancy_[1] = 0;
00469     if ( meEEDigiOccupancyProEta_[1] ) dqmStore_->removeElement( meEEDigiOccupancyProEta_[1]->getName() );
00470     meEEDigiOccupancyProEta_[1] = 0;
00471     if ( meEEDigiOccupancyProPhi_[1] ) dqmStore_->removeElement( meEEDigiOccupancyProPhi_[1]->getName() );
00472     meEEDigiOccupancyProPhi_[1] = 0;
00473 
00474     if ( meEERecHitOccupancy_[0] ) dqmStore_->removeElement( meEERecHitOccupancy_[0]->getName() );
00475     meEERecHitOccupancy_[0] = 0;
00476     if ( meEERecHitOccupancyProEta_[0] ) dqmStore_->removeElement( meEERecHitOccupancyProEta_[0]->getName() );
00477     meEERecHitOccupancyProEta_[0] = 0;
00478     if ( meEERecHitOccupancyProPhi_[0] ) dqmStore_->removeElement( meEERecHitOccupancyProPhi_[0]->getName() );
00479     meEERecHitOccupancyProPhi_[0] = 0;
00480 
00481     if ( meEERecHitOccupancy_[1] ) dqmStore_->removeElement( meEERecHitOccupancy_[1]->getName() );
00482     meEERecHitOccupancy_[1] = 0;
00483     if ( meEERecHitOccupancyProEta_[1] ) dqmStore_->removeElement( meEERecHitOccupancyProEta_[1]->getName() );
00484     meEERecHitOccupancyProEta_[1] = 0;
00485     if ( meEERecHitOccupancyProPhi_[1] ) dqmStore_->removeElement( meEERecHitOccupancyProPhi_[1]->getName() );
00486     meEERecHitOccupancyProPhi_[1] = 0;
00487 
00488     if ( meEERecHitOccupancyThr_[0] ) dqmStore_->removeElement( meEERecHitOccupancyThr_[0]->getName() );
00489     meEERecHitOccupancyThr_[0] = 0;
00490     if ( meEERecHitOccupancyProEtaThr_[0] ) dqmStore_->removeElement( meEERecHitOccupancyProEtaThr_[0]->getName() );
00491     meEERecHitOccupancyProEtaThr_[0] = 0;
00492     if ( meEERecHitOccupancyProPhiThr_[0] ) dqmStore_->removeElement( meEERecHitOccupancyProPhiThr_[0]->getName() );
00493     meEERecHitOccupancyProPhiThr_[0] = 0;
00494 
00495     if ( meEERecHitOccupancyThr_[1] ) dqmStore_->removeElement( meEERecHitOccupancyThr_[1]->getName() );
00496     meEERecHitOccupancyThr_[1] = 0;
00497     if ( meEERecHitOccupancyProEtaThr_[1] ) dqmStore_->removeElement( meEERecHitOccupancyProEtaThr_[1]->getName() );
00498     meEERecHitOccupancyProEtaThr_[1] = 0;
00499     if ( meEERecHitOccupancyProPhiThr_[1] ) dqmStore_->removeElement( meEERecHitOccupancyProPhiThr_[1]->getName() );
00500     meEERecHitOccupancyProPhiThr_[1] = 0;
00501 
00502     if ( meEETrigPrimDigiOccupancy_[0] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancy_[0]->getName() );
00503     meEETrigPrimDigiOccupancy_[0] = 0;
00504     if ( meEETrigPrimDigiOccupancyProEta_[0] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProEta_[0]->getName() );
00505     meEETrigPrimDigiOccupancyProEta_[0] = 0;
00506     if ( meEETrigPrimDigiOccupancyProPhi_[0] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProPhi_[0]->getName() );
00507     meEETrigPrimDigiOccupancyProPhi_[0] = 0;
00508 
00509     if ( meEETrigPrimDigiOccupancy_[1] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancy_[1]->getName() );
00510     meEETrigPrimDigiOccupancy_[1] = 0;
00511     if ( meEETrigPrimDigiOccupancyProEta_[1] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProEta_[1]->getName() );
00512     meEETrigPrimDigiOccupancyProEta_[1] = 0;
00513     if ( meEETrigPrimDigiOccupancyProPhi_[1] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProPhi_[1]->getName() );
00514     meEETrigPrimDigiOccupancyProPhi_[1] = 0;
00515 
00516     if ( meEETrigPrimDigiOccupancyThr_[0] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyThr_[0]->getName() );
00517     meEETrigPrimDigiOccupancyThr_[0] = 0;
00518     if ( meEETrigPrimDigiOccupancyProEtaThr_[0] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProEtaThr_[0]->getName() );
00519     meEETrigPrimDigiOccupancyProEtaThr_[0] = 0;
00520     if ( meEETrigPrimDigiOccupancyProPhiThr_[0] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProPhiThr_[0]->getName() );
00521     meEETrigPrimDigiOccupancyProPhiThr_[0] = 0;
00522 
00523     if ( meEETrigPrimDigiOccupancyThr_[1] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyThr_[1]->getName() );
00524     meEETrigPrimDigiOccupancyThr_[1] = 0;
00525     if ( meEETrigPrimDigiOccupancyProEtaThr_[1] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProEtaThr_[1]->getName() );
00526     meEETrigPrimDigiOccupancyProEtaThr_[1] = 0;
00527     if ( meEETrigPrimDigiOccupancyProPhiThr_[1] ) dqmStore_->removeElement( meEETrigPrimDigiOccupancyProPhiThr_[1]->getName() );
00528     meEETrigPrimDigiOccupancyProPhiThr_[1] = 0;
00529 
00530     if ( meEETestPulseDigiOccupancy_[0] ) dqmStore_->removeElement( meEETestPulseDigiOccupancy_[0]->getName() );
00531     meEETestPulseDigiOccupancy_[0] = 0;
00532     if ( meEETestPulseDigiOccupancy_[1] ) dqmStore_->removeElement( meEETestPulseDigiOccupancy_[1]->getName() );
00533     meEETestPulseDigiOccupancy_[1] = 0;
00534 
00535     if ( meEELaserDigiOccupancy_[0] ) dqmStore_->removeElement( meEELaserDigiOccupancy_[0]->getName() );
00536     meEELaserDigiOccupancy_[0] = 0;
00537     if ( meEELaserDigiOccupancy_[1] ) dqmStore_->removeElement( meEELaserDigiOccupancy_[1]->getName() );
00538     meEELaserDigiOccupancy_[1] = 0;
00539 
00540     if ( meEELedDigiOccupancy_[0] ) dqmStore_->removeElement( meEELedDigiOccupancy_[0]->getName() );
00541     meEELedDigiOccupancy_[0] = 0;
00542     if ( meEELedDigiOccupancy_[1] ) dqmStore_->removeElement( meEELedDigiOccupancy_[1]->getName() );
00543     meEELedDigiOccupancy_[1] = 0;
00544 
00545     if ( meEEPedestalDigiOccupancy_[0] ) dqmStore_->removeElement( meEEPedestalDigiOccupancy_[0]->getName() );
00546     meEEPedestalDigiOccupancy_[0] = 0;
00547     if ( meEEPedestalDigiOccupancy_[1] ) dqmStore_->removeElement( meEEPedestalDigiOccupancy_[1]->getName() );
00548     meEEPedestalDigiOccupancy_[1] = 0;
00549 
00550   }
00551 
00552   init_ = false;
00553 
00554 }
00555 
00556 void EEOccupancyTask::endJob(void) {
00557 
00558   edm::LogInfo("EEOccupancyTask") << "analyzed " << ievt_ << " events";
00559 
00560   if ( enableCleanup_ ) this->cleanup();
00561 
00562 }
00563 
00564 void EEOccupancyTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00565 
00566   if ( ! init_ ) this->setup();
00567 
00568   ievt_++;
00569 
00570   int runType[18] = { notdata };
00571 
00572   edm::Handle<EcalRawDataCollection> dcchs;
00573 
00574   if ( e.getByLabel(EcalRawDataCollection_, dcchs) ) {
00575 
00576     for ( EcalRawDataCollection::const_iterator dcchItr = dcchs->begin(); dcchItr != dcchs->end(); ++dcchItr ) {
00577 
00578       if ( Numbers::subDet( *dcchItr ) != EcalEndcap ) continue;
00579 
00580       int ism = Numbers::iSM( *dcchItr, EcalEndcap );
00581 
00582       int runtype = dcchItr->getRunType();
00583 
00584       if ( runtype == EcalDCCHeaderBlock::COSMIC ||
00585            runtype == EcalDCCHeaderBlock::MTCC ||
00586            runtype == EcalDCCHeaderBlock::COSMICS_GLOBAL ||
00587            runtype == EcalDCCHeaderBlock::PHYSICS_GLOBAL ||
00588            runtype == EcalDCCHeaderBlock::COSMICS_LOCAL ||
00589            runtype == EcalDCCHeaderBlock::PHYSICS_LOCAL ) runType[ism-1] = physics;
00590       if ( runtype == EcalDCCHeaderBlock::TESTPULSE_MGPA ||
00591            runtype == EcalDCCHeaderBlock::TESTPULSE_GAP ) runType[ism-1] = testpulse;
00592       if ( runtype == EcalDCCHeaderBlock::LASER_STD ||
00593            runtype == EcalDCCHeaderBlock::LASER_GAP ) runType[ism-1] = laser;
00594       if ( runtype == EcalDCCHeaderBlock::LED_STD ||
00595            runtype == EcalDCCHeaderBlock::LED_GAP ) runType[ism-1] = led;
00596       if ( runtype == EcalDCCHeaderBlock::PEDESTAL_STD ||
00597            runtype == EcalDCCHeaderBlock::PEDESTAL_GAP ) runType[ism-1] = pedestal;
00598 
00599     }
00600 
00601   } else {
00602     edm::LogWarning("EEOccupancyTask") << EcalRawDataCollection_ << " not available";
00603   }
00604 
00605   edm::Handle<EEDigiCollection> digis;
00606 
00607   if ( e.getByLabel(EEDigiCollection_, digis) ) {
00608 
00609     int need = digis->size();
00610     LogDebug("EEOccupancyTask") << "event " << ievt_ << " digi collection size " << need;
00611 
00612     for ( EEDigiCollection::const_iterator digiItr = digis->begin(); digiItr != digis->end(); ++digiItr ) {
00613 
00614       EEDetId id = digiItr->id();
00615 
00616       int ix = id.ix();
00617       int iy = id.iy();
00618 
00619       int hi = id.hashedIndex();
00620 
00621       if ( geometryEE[hi][0] == 0 ) {
00622         const GlobalPoint& pos = pGeometry_->getGeometry(id)->getPosition();
00623         geometryEE[hi][0] = pos.eta();
00624         geometryEE[hi][1] = pos.phi();
00625       }
00626 
00627       float eta = geometryEE[hi][0];
00628       float phi = geometryEE[hi][1];
00629 
00630       int ism = Numbers::iSM( id );
00631 
00632       if ( ism >= 1 && ism <= 9 ) ix = 101 - ix;
00633 
00634       float xix = ix - 0.5;
00635       float xiy = iy - 0.5;
00636 
00637       if ( xix <= 0. || xix >= 100. || xiy <= 0. || xiy >= 100. ) {
00638         edm::LogWarning("EEOccupancyTask") << " det id = " << id;
00639         edm::LogWarning("EEOccupancyTask") << " sm, ix, iw " << ism << " " << ix << " " << iy;
00640         edm::LogWarning("EEOccupancyTask") << " xix, xiy " << xix << " " << xiy;
00641       }
00642 
00643       if ( meOccupancy_[ism-1] ) meOccupancy_[ism-1]->Fill( xix, xiy );
00644 
00645       int eex = id.ix();
00646       int eey = id.iy();
00647 
00648       float xeex = eex - 0.5;
00649       float xeey = eey - 0.5;
00650 
00651       if ( runType[ism-1] == physics || runType[ism-1] == notdata ) {
00652 
00653         if ( ism >=1 && ism <= 9 ) {
00654           if ( meEEDigiOccupancy_[0] ) meEEDigiOccupancy_[0]->Fill( xeex, xeey );
00655           if ( meEEDigiOccupancyProEta_[0] ) meEEDigiOccupancyProEta_[0]->Fill( eta );
00656           if ( meEEDigiOccupancyProPhi_[0] ) meEEDigiOccupancyProPhi_[0]->Fill( phi );
00657         } else {
00658           if ( meEEDigiOccupancy_[1] ) meEEDigiOccupancy_[1]->Fill( xeex, xeey );
00659           if ( meEEDigiOccupancyProEta_[1] ) meEEDigiOccupancyProEta_[1]->Fill( eta );
00660           if ( meEEDigiOccupancyProPhi_[1] ) meEEDigiOccupancyProPhi_[1]->Fill( phi );
00661         }
00662 
00663       }
00664 
00665       if ( runType[ism-1] == testpulse ) {
00666 
00667         if ( ism >=1 && ism <= 9 ) {
00668           if ( meEETestPulseDigiOccupancy_[0] ) meEETestPulseDigiOccupancy_[0]->Fill( xeex, xeey );
00669         } else {
00670           if ( meEETestPulseDigiOccupancy_[1] ) meEETestPulseDigiOccupancy_[1]->Fill( xeex, xeey );
00671         }
00672 
00673       }
00674 
00675       if ( runType[ism-1] == laser ) {
00676 
00677         if ( ism >=1 && ism <= 9 ) {
00678           if ( meEELaserDigiOccupancy_[0] ) meEELaserDigiOccupancy_[0]->Fill( xeex, xeey );
00679         } else {
00680           if ( meEELaserDigiOccupancy_[1] ) meEELaserDigiOccupancy_[1]->Fill( xeex, xeey );
00681         }
00682 
00683       }
00684 
00685       if ( runType[ism-1] == led ) {
00686 
00687         if ( ism >=1 && ism <= 9 ) {
00688           if ( meEELedDigiOccupancy_[0] ) meEELedDigiOccupancy_[0]->Fill( xeex, xeey );
00689         } else {
00690           if ( meEELedDigiOccupancy_[1] ) meEELedDigiOccupancy_[1]->Fill( xeex, xeey );
00691         }
00692 
00693       }
00694 
00695       if ( runType[ism-1] == pedestal ) {
00696 
00697         if ( ism >=1 && ism <= 9 ) {
00698           if ( meEEPedestalDigiOccupancy_[0] ) meEEPedestalDigiOccupancy_[0]->Fill( xeex, xeey );
00699         } else {
00700           if ( meEEPedestalDigiOccupancy_[1] ) meEEPedestalDigiOccupancy_[1]->Fill( xeex, xeey );
00701         }
00702 
00703       }
00704 
00705     }
00706 
00707   } else {
00708 
00709     edm::LogWarning("EEOccupancyTask") << EEDigiCollection_ << " not available";
00710 
00711   }
00712 
00713   edm::Handle<EcalPnDiodeDigiCollection> PNs;
00714 
00715   if ( e.getByLabel(EcalPnDiodeDigiCollection_, PNs) ) {
00716 
00717     // filling mem occupancy only for the 5 channels belonging
00718     // to a fully reconstructed PN's
00719 
00720     for ( EcalPnDiodeDigiCollection::const_iterator pnItr = PNs->begin(); pnItr != PNs->end(); ++pnItr ) {
00721 
00722       if ( Numbers::subDet( pnItr->id() ) != EcalEndcap ) continue;
00723 
00724       int   ism   = Numbers::iSM( pnItr->id() );
00725 
00726       float PnId  = pnItr->id().iPnId();
00727 
00728       PnId        = PnId - 0.5;
00729       float st    = 0.0;
00730 
00731       for (int chInStrip = 1; chInStrip <= 5; chInStrip++){
00732         if ( meOccupancyMem_[ism-1] ) {
00733           st = chInStrip - 0.5;
00734           meOccupancyMem_[ism-1]->Fill(PnId, st);
00735         }
00736       }
00737 
00738     }
00739 
00740   } else {
00741 
00742     edm::LogWarning("EEOccupancyTask") << EcalPnDiodeDigiCollection_ << " not available";
00743 
00744   }
00745 
00746   edm::ESHandle<EcalSeverityLevelAlgo> sevlv;
00747   c.get<EcalSeverityLevelAlgoRcd>().get(sevlv);
00748 
00749   edm::Handle<EcalRecHitCollection> rechits;
00750 
00751   if ( e.getByLabel(EcalRecHitCollection_, rechits) ) {
00752 
00753     int nebrh = rechits->size();
00754     LogDebug("EEOccupancyTask") << "event " << ievt_ << " rec hits collection size " << nebrh;
00755 
00756     for ( EcalRecHitCollection::const_iterator rechitItr = rechits->begin(); rechitItr != rechits->end(); ++rechitItr ) {
00757 
00758       EEDetId id = rechitItr->id();
00759 
00760       int eex = id.ix();
00761       int eey = id.iy();
00762 
00763       int hi = id.hashedIndex();
00764 
00765       if ( geometryEE[hi][0] == 0 ) {
00766         const GlobalPoint& pos = pGeometry_->getGeometry(id)->getPosition();
00767         geometryEE[hi][0] = pos.eta();
00768         geometryEE[hi][1] = pos.phi();
00769       }
00770 
00771       float eta = geometryEE[hi][0];
00772       float phi = geometryEE[hi][1];
00773 
00774       int ism = Numbers::iSM( id );
00775 
00776       // sector view (from electronics)
00777       float xix = ( ism >= 1 && ism <= 9 ) ? 101 - eex - 0.5 : eex - 0.5;
00778       float xiy = eey - 0.5;
00779 
00780       // physics view (from IP)
00781       float xeex = eex - 0.5;
00782       float xeey = eey - 0.5;
00783 
00784       if ( runType[ism-1] == physics || runType[ism-1] == notdata ) {
00785 
00786         if ( ism >= 1 && ism <= 9 ) {
00787           if ( meEERecHitOccupancy_[0] ) meEERecHitOccupancy_[0]->Fill( xeex, xeey );
00788           if ( meEERecHitOccupancyProEta_[0] ) meEERecHitOccupancyProEta_[0]->Fill( eta );
00789           if ( meEERecHitOccupancyProPhi_[0] ) meEERecHitOccupancyProPhi_[0]->Fill( phi );
00790         } else {
00791           if ( meEERecHitOccupancy_[1] ) meEERecHitOccupancy_[1]->Fill( xeex, xeey );
00792           if ( meEERecHitOccupancyProEta_[1] ) meEERecHitOccupancyProEta_[1]->Fill( eta );
00793           if ( meEERecHitOccupancyProPhi_[1] ) meEERecHitOccupancyProPhi_[1]->Fill( phi );
00794         }
00795 
00796         uint32_t flag = rechitItr->recoFlag();
00797 
00798         uint32_t sev = sevlv->severityLevel(id, *rechits);
00799 
00800         if ( rechitItr->energy() > recHitEnergyMin_ && flag == EcalRecHit::kGood && sev == EcalSeverityLevel::kGood ) {
00801 
00802           if ( ism >= 1 && ism <= 9 ) {
00803             if ( meEERecHitOccupancyThr_[0] ) meEERecHitOccupancyThr_[0]->Fill( xeex, xeey );
00804             if ( meEERecHitOccupancyProEtaThr_[0] ) meEERecHitOccupancyProEtaThr_[0]->Fill( eta );
00805             if ( meEERecHitOccupancyProPhiThr_[0] ) meEERecHitOccupancyProPhiThr_[0]->Fill( phi );
00806           } else {
00807             if ( meEERecHitOccupancyThr_[1] ) meEERecHitOccupancyThr_[1]->Fill( xeex, xeey );
00808             if ( meEERecHitOccupancyProEtaThr_[1] ) meEERecHitOccupancyProEtaThr_[1]->Fill( eta );
00809             if ( meEERecHitOccupancyProPhiThr_[1] ) meEERecHitOccupancyProPhiThr_[1]->Fill( phi );
00810           }
00811 
00812         }
00813 
00814         if ( flag == EcalRecHit::kGood && sev == EcalSeverityLevel::kGood ) {
00815           if ( meEERecHitEnergy_[ism-1] ) meEERecHitEnergy_[ism-1]->Fill( xix, xiy, rechitItr->energy() );
00816           if ( meSpectrum_[ism-1] ) meSpectrum_[ism-1]->Fill( rechitItr->energy() );
00817           if (  ism >= 1 && ism <= 9  ) meEERecHitSpectrum_[0]->Fill( rechitItr->energy() );
00818           else meEERecHitSpectrum_[1]->Fill( rechitItr->energy() );
00819         }
00820 
00821       }
00822     }
00823 
00824   } else {
00825 
00826     edm::LogWarning("EEOccupancyTask") << EcalRecHitCollection_ << " not available";
00827 
00828   }
00829 
00830   edm::Handle<EcalTrigPrimDigiCollection> trigPrimDigis;
00831 
00832   if ( e.getByLabel(EcalTrigPrimDigiCollection_, trigPrimDigis) ) {
00833 
00834     int nebtpg = trigPrimDigis->size();
00835     LogDebug("EEOccupancyTask") << "event " << ievt_ << " trigger primitives digis collection size " << nebtpg;
00836 
00837     for ( EcalTrigPrimDigiCollection::const_iterator tpdigiItr = trigPrimDigis->begin(); tpdigiItr != trigPrimDigis->end(); ++tpdigiItr ) {
00838 
00839       if ( Numbers::subDet( tpdigiItr->id() ) != EcalEndcap ) continue;
00840 
00841       int ism = Numbers::iSM( tpdigiItr->id() );
00842 
00843       std::vector<DetId>* crystals = Numbers::crystals( tpdigiItr->id() );
00844 
00845       for ( unsigned int i=0; i<crystals->size(); i++ ) {
00846 
00847         EEDetId id = (*crystals)[i];
00848 
00849         int eex = id.ix();
00850         int eey = id.iy();
00851 
00852         int hi = id.hashedIndex();
00853 
00854         if ( geometryEE[hi][0] == 0 ) {
00855           const GlobalPoint& pos = pGeometry_->getGeometry(id)->getPosition();
00856           geometryEE[hi][0] = pos.eta();
00857           geometryEE[hi][1] = pos.phi();
00858         }
00859 
00860         float eta = geometryEE[hi][0];
00861         float phi = geometryEE[hi][1];
00862 
00863         float xeex = eex - 0.5;
00864         float xeey = eey - 0.5;
00865 
00866         if ( runType[ism-1] == physics || runType[ism-1] == notdata ) {
00867 
00868           if ( ism >= 1 && ism <= 9 ) {
00869             if ( meEETrigPrimDigiOccupancy_[0] ) meEETrigPrimDigiOccupancy_[0]->Fill( xeex, xeey );
00870             if ( meEETrigPrimDigiOccupancyProEta_[0] ) meEETrigPrimDigiOccupancyProEta_[0]->Fill( eta );
00871             if ( meEETrigPrimDigiOccupancyProPhi_[0] ) meEETrigPrimDigiOccupancyProPhi_[0]->Fill( phi );
00872           } else {
00873             if ( meEETrigPrimDigiOccupancy_[1] ) meEETrigPrimDigiOccupancy_[1]->Fill( xeex, xeey );
00874             if ( meEETrigPrimDigiOccupancyProEta_[1] ) meEETrigPrimDigiOccupancyProEta_[1]->Fill( eta );
00875             if ( meEETrigPrimDigiOccupancyProPhi_[1] ) meEETrigPrimDigiOccupancyProPhi_[1]->Fill( phi );
00876           }
00877 
00878           if ( tpdigiItr->compressedEt() > trigPrimEtMin_ ) {
00879 
00880             if ( ism >= 1 && ism <= 9 ) {
00881               if ( meEETrigPrimDigiOccupancyThr_[0] ) meEETrigPrimDigiOccupancyThr_[0]->Fill( xeex, xeey );
00882               if ( meEETrigPrimDigiOccupancyProEtaThr_[0] ) meEETrigPrimDigiOccupancyProEtaThr_[0]->Fill( eta );
00883               if ( meEETrigPrimDigiOccupancyProPhiThr_[0] ) meEETrigPrimDigiOccupancyProPhiThr_[0]->Fill( phi );
00884             } else {
00885               if ( meEETrigPrimDigiOccupancyThr_[1] ) meEETrigPrimDigiOccupancyThr_[1]->Fill( xeex, xeey );
00886               if ( meEETrigPrimDigiOccupancyProEtaThr_[1] ) meEETrigPrimDigiOccupancyProEtaThr_[1]->Fill( eta );
00887               if ( meEETrigPrimDigiOccupancyProPhiThr_[1] ) meEETrigPrimDigiOccupancyProPhiThr_[1]->Fill( phi );
00888             }
00889 
00890           }
00891 
00892         }
00893       }
00894     }
00895 
00896   } else {
00897 
00898     edm::LogWarning("EEOccupancyTask") << EcalTrigPrimDigiCollection_ << " not available";
00899 
00900   }
00901 
00902 }
00903