CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DQM/HcalMonitorTasks/interface/HcalDeadCellMonitor.h

Go to the documentation of this file.
00001 #ifndef DQM_HCALMONITORTASKS_HCALDEADCELLMONITOR_H
00002 #define DQM_HCALMONITORTASKS_HCALDEADCELLMONITOR_H
00003 
00004 #include "DQM/HcalMonitorTasks/interface/HcalBaseDQMonitor.h"
00005 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
00006 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00007 
00008 // Channel status DB stuff
00009 
00010 #include "CondFormats/HcalObjects/interface/HcalChannelStatus.h"
00011 #include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
00012 #include "CondFormats/HcalObjects/interface/HcalCondObjectContainer.h"
00013 #include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h"
00014 
00015 #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h"
00016 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
00017 
00018 #include <cmath>
00019 #include <iostream>
00020 #include <fstream>
00021 
00029 class HcalDeadCellMonitor: public HcalBaseDQMonitor {
00030 
00031  public:
00032   HcalDeadCellMonitor(const edm::ParameterSet& ps);
00033 
00034   ~HcalDeadCellMonitor();
00035 
00036   void setup();
00037   void beginRun(const edm::Run& run, const edm::EventSetup& c);
00038   void analyze(edm::Event const&e, edm::EventSetup const&s);
00039   void endLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
00040                           const edm::EventSetup& c);
00041   void endRun(const edm::Run& run, const edm::EventSetup& c);
00042   void endJob();
00043   void cleanup(); // overrides base class function
00044   void reset();
00045   
00046   void processEvent(const HBHERecHitCollection& hbHits,
00047                     const HORecHitCollection& hoHits,
00048                     const HFRecHitCollection& hfHits,
00049                     const HBHEDigiCollection& hbhedigi,
00050                     const HODigiCollection& hodigi,
00051                     const HFDigiCollection& hfdigi
00052                     );
00053 
00054  private:
00055   void zeroCounters(bool resetpresent=false);
00056 
00057   void processEvent_HBHEdigi(const HBHEDataFrame digi);
00058   template<class T> void process_Digi(T& digi);
00059   template<class T> void process_RecHit(T& rechit);
00060 
00061   bool deadmon_makeDiagnostics_;
00062   int minDeadEventCount_;
00063 
00064   // Booleans to control which of the dead cell checking routines are used
00065   bool deadmon_test_digis_;
00066   bool deadmon_test_rechits_;
00067 
00068   void fillNevents_problemCells(); // problemcells always checks for never-present digis, rechits
00069   void fillNevents_recentdigis();
00070   void fillNevents_recentrechits();
00071 
00072   // specify minimum energy threshold for energy test
00073   double energyThreshold_;
00074   double HBenergyThreshold_;
00075   double HEenergyThreshold_;
00076   double HOenergyThreshold_;
00077   double HFenergyThreshold_;
00078 
00079   EtaPhiHists  RecentMissingDigisByDepth;
00080   EtaPhiHists  DigiPresentByDepth;
00081   EtaPhiHists  RecentMissingRecHitsByDepth;
00082   EtaPhiHists  RecHitPresentByDepth;
00083 
00084   // Problems vs. lumi block
00085   MonitorElement *ProblemsVsLB, *ProblemsVsLB_HB, *ProblemsVsLB_HE, *ProblemsVsLB_HO, *ProblemsVsLB_HF;
00086   MonitorElement *NumberOfNeverPresentDigis, *NumberOfNeverPresentDigisHB, *NumberOfNeverPresentDigisHE, *NumberOfNeverPresentDigisHO, *NumberOfNeverPresentDigisHF;
00087   MonitorElement *NumberOfRecentMissingDigis, *NumberOfRecentMissingDigisHB, *NumberOfRecentMissingDigisHE, *NumberOfRecentMissingDigisHO, *NumberOfRecentMissingDigisHF;
00088   MonitorElement *NumberOfRecentMissingRecHits, *NumberOfRecentMissingRecHitsHB, *NumberOfRecentMissingRecHitsHE, *NumberOfRecentMissingRecHitsHO, *NumberOfRecentMissingRecHitsHF;
00089   MonitorElement *NumberOfNeverPresentRecHits, *NumberOfNeverPresentRecHitsHB, *NumberOfNeverPresentRecHitsHE, *NumberOfNeverPresentRecHitsHO, *NumberOfNeverPresentRecHitsHF;
00090 
00091   MonitorElement *Nevents;
00092 
00093   MonitorElement *HBDeadVsEvent, *HEDeadVsEvent, *HODeadVsEvent, *HFDeadVsEvent;
00094   bool present_digi[85][72][4]; // tests that a good digi was present at least once
00095   bool present_rechit[85][72][4]; // tests that rechit with energy > threshold at least once
00096   unsigned int recentoccupancy_digi[85][72][4]; // tests that cells haven't gone missing for long periods
00097   unsigned int recentoccupancy_rechit[85][72][4]; // tests that cells haven't dropped below threshold for long periods
00098   
00099   int deadevt_; // running count of events processed since last dead cell check
00100   int NumBadHB, NumBadHE, NumBadHO, NumBadHF, NumBadHFLUMI, NumBadHO0, NumBadHO12;
00101   edm::InputTag digiLabel_;
00102   edm::InputTag hbheRechitLabel_, hoRechitLabel_, hfRechitLabel_;
00103 
00104   bool endLumiProcessed_;
00105 
00106   bool excludeHORing2_;
00107 };
00108 
00109 #endif