CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/DQM/EcalEndcapMonitorTasks/src/EEOccupancyTask.cc

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