CMS 3D CMS Logo

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

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