00001 #ifndef DQM_HCALMONITORTASKS_HCALRECHITMONITOR_H 00002 #define DQM_HCALMONITORTASKS_HCALRECHITMONITOR_H 00003 00004 #include "DQM/HcalMonitorTasks/interface/HcalBaseMonitor.h" 00005 #include "DQMServices/Core/interface/DQMStore.h" 00006 #include "DQMServices/Core/interface/MonitorElement.h" 00007 #include "CondFormats/HcalObjects/interface/HcalChannelStatus.h" 00008 #include "CondFormats/HcalObjects/interface/HcalChannelQuality.h" 00009 00010 #include <cmath> 00011 #include <iostream> 00012 #include <fstream> 00013 00022 class HcalRecHitMonitor: public HcalBaseMonitor { 00023 00024 public: 00025 HcalRecHitMonitor(); 00026 00027 ~HcalRecHitMonitor(); 00028 00029 void setup(const edm::ParameterSet& ps, DQMStore* dbe); 00030 void done(); 00031 void clearME(); // overrides base class function 00032 void reset(); 00033 00034 00035 void processEvent(const HBHERecHitCollection& hbHits, 00036 const HORecHitCollection& hoHits, 00037 const HFRecHitCollection& hfHits 00038 //const ZDCRecHitCollection& zdcHits, 00039 ); 00040 00041 void processEvent_rechit( const HBHERecHitCollection& hbheHits, 00042 const HORecHitCollection& hoHits, 00043 const HFRecHitCollection& hfHits); 00044 00045 void fillRecHitHistosAtEndRun(); 00046 private: 00047 00048 00049 void fillNevents(); 00050 00051 bool rechit_makeDiagnostics_; 00052 00053 int rechit_checkNevents_; // specify how often to fill histograms 00054 00055 double energyThreshold_; 00056 double HBenergyThreshold_; 00057 double HEenergyThreshold_; 00058 double HOenergyThreshold_; 00059 double HFenergyThreshold_; 00060 double ZDCenergyThreshold_; 00061 00062 MonitorElement* meEVT_; 00063 int ievt_; 00064 00065 double rechit_minErrorFlag_; // minimum error rate needed to dump out bad bin info 00066 // Problem Histograms 00067 MonitorElement* ProblemRecHits; 00068 std::vector<MonitorElement*> ProblemRecHitsByDepth; 00069 00070 // Basic Histograms 00071 std::vector<MonitorElement*> OccupancyByDepth; 00072 std::vector<MonitorElement*> OccupancyThreshByDepth; 00073 std::vector<MonitorElement*> EnergyByDepth; 00074 std::vector<MonitorElement*> EnergyThreshByDepth; 00075 std::vector<MonitorElement*> TimeByDepth; 00076 std::vector<MonitorElement*> TimeThreshByDepth; 00077 00078 00079 00080 00081 unsigned int occupancy_[ETABINS][PHIBINS][6]; // will get filled when rechit found 00082 unsigned int occupancy_thresh_[ETABINS][PHIBINS][6]; // filled when above given energy 00083 double energy_[ETABINS][PHIBINS][6]; // will get filled when rechit found 00084 double energy_thresh_[ETABINS][PHIBINS][6]; // filled when above given 00085 double time_[ETABINS][PHIBINS][6]; // will get filled when rechit found 00086 double time_thresh_[ETABINS][PHIBINS][6]; // filled when above given energy 00087 00088 double HBenergy_[200]; 00089 double HBenergy_thresh_[200]; 00090 double HBtime_[300]; 00091 double HBtime_thresh_[300]; 00092 double HB_occupancy_[2593]; 00093 double HB_occupancy_thresh_[2593]; 00094 double HEenergy_[200]; 00095 double HEenergy_thresh_[200]; 00096 double HEtime_[300]; 00097 double HEtime_thresh_[300]; 00098 double HE_occupancy_[2593]; 00099 double HE_occupancy_thresh_[2593]; 00100 double HOenergy_[200]; 00101 double HOenergy_thresh_[200]; 00102 double HOtime_[300]; 00103 double HOtime_thresh_[300]; 00104 double HO_occupancy_[2161]; 00105 double HO_occupancy_thresh_[2161]; 00106 double HFenergy_[200]; 00107 double HFenergy_thresh_[200]; 00108 double HFtime_[300]; 00109 double HFtime_thresh_[300]; 00110 double HFenergyLong_[200]; 00111 double HFenergyLong_thresh_[200]; 00112 double HFtimeLong_[300]; 00113 double HFtimeLong_thresh_[300]; 00114 double HFenergyShort_[200]; 00115 double HFenergyShort_thresh_[200]; 00116 double HFtimeShort_[300]; 00117 double HFtimeShort_thresh_[300]; 00118 double HF_occupancy_[1729]; 00119 double HF_occupancy_thresh_[1729]; 00120 double HFlong_occupancy_[865]; 00121 double HFlong_occupancy_thresh_[865]; 00122 double HFshort_occupancy_[865]; 00123 double HFshort_occupancy_thresh_[865]; 00124 00125 // Diagnostic plots 00126 MonitorElement* h_HBEnergy; 00127 MonitorElement* h_HBThreshEnergy; 00128 MonitorElement* h_HBTotalEnergy; 00129 MonitorElement* h_HBThreshTotalEnergy; 00130 MonitorElement* h_HBTime; 00131 MonitorElement* h_HBThreshTime; 00132 MonitorElement* h_HBOccupancy; 00133 MonitorElement* h_HBThreshOccupancy; 00134 00135 MonitorElement* h_HEEnergy; 00136 MonitorElement* h_HEThreshEnergy; 00137 MonitorElement* h_HETotalEnergy; 00138 MonitorElement* h_HEThreshTotalEnergy; 00139 MonitorElement* h_HETime; 00140 MonitorElement* h_HEThreshTime; 00141 MonitorElement* h_HEOccupancy; 00142 MonitorElement* h_HEThreshOccupancy; 00143 00144 MonitorElement* h_HOEnergy; 00145 MonitorElement* h_HOThreshEnergy; 00146 MonitorElement* h_HOTotalEnergy; 00147 MonitorElement* h_HOThreshTotalEnergy; 00148 MonitorElement* h_HOTime; 00149 MonitorElement* h_HOThreshTime; 00150 MonitorElement* h_HOOccupancy; 00151 MonitorElement* h_HOThreshOccupancy; 00152 00153 MonitorElement* h_HFEnergy; 00154 MonitorElement* h_HFThreshEnergy; 00155 MonitorElement* h_HFTotalEnergy; 00156 MonitorElement* h_HFThreshTotalEnergy; 00157 MonitorElement* h_HFTime; 00158 MonitorElement* h_HFThreshTime; 00159 MonitorElement* h_HFOccupancy; 00160 MonitorElement* h_HFThreshOccupancy; 00161 00162 bool HBpresent_, HEpresent_, HOpresent_, HFpresent_; 00163 }; 00164 00165 #endif