00001 #include "DQM/HcalMonitorTasks/interface/HcalCoarsePedestalMonitor.h"
00002 #include "EventFilter/HcalRawToDigi/interface/HcalDCCHeader.h"
00003 #include <cmath>
00004
00005 #include "FWCore/Common/interface/TriggerNames.h"
00006 #include "DataFormats/Common/interface/TriggerResults.h"
00007 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00008 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
00009 #include "Geometry/HcalTowerAlgo/src/HcalHardcodeGeometryData.h"
00010 #include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
00011 #include "FWCore/Framework/interface/LuminosityBlock.h"
00012
00013
00014 HcalCoarsePedestalMonitor::HcalCoarsePedestalMonitor(const edm::ParameterSet& ps)
00015 {
00016 Online_ = ps.getUntrackedParameter<bool>("online",false);
00017 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns",false);
00018 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup",false);
00019 debug_ = ps.getUntrackedParameter<int>("debug",0);
00020 prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder","Hcal/");
00021 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
00022 prefixME_.append("/");
00023 subdir_ = ps.getUntrackedParameter<std::string>("TaskFolder","CoarsePedestalMonitor_Hcal");
00024 if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/")
00025 subdir_.append("/");
00026 subdir_=prefixME_+subdir_;
00027 AllowedCalibTypes_ = ps.getUntrackedParameter<std::vector<int> > ("AllowedCalibTypes");
00028 skipOutOfOrderLS_ = ps.getUntrackedParameter<bool>("skipOutOfOrderLS",true);
00029 NLumiBlocks_ = ps.getUntrackedParameter<int>("NLumiBlocks",4000);
00030 makeDiagnostics_ = ps.getUntrackedParameter<bool>("makeDiagnostics",false);
00031 digiLabel_ = ps.getUntrackedParameter<edm::InputTag>("digiLabel");
00032 ADCDiffThresh_ = ps.getUntrackedParameter<double>("ADCDiffThresh",1.);
00033 minEvents_ = ps.getUntrackedParameter<int>("minEvents",100);
00034 excludeHORing2_ = ps.getUntrackedParameter<bool>("excludeHORing2",false);
00035
00036 }
00037
00038
00039
00040 HcalCoarsePedestalMonitor::~HcalCoarsePedestalMonitor() {}
00041
00042
00043
00044 void HcalCoarsePedestalMonitor::cleanup()
00045 {
00046
00047 if (debug_>0) std::cout <<"HcalCoarsePedestalMonitor::cleanup()"<<std::endl;
00048 if (!enableCleanup_) return;
00049 if (dbe_)
00050 {
00051
00052 dbe_->setCurrentFolder(subdir_);
00053 dbe_->removeContents();
00054 dbe_->setCurrentFolder(subdir_+"CoarsePedestal_parameters");
00055 dbe_->removeContents();
00056 dbe_->setCurrentFolder(subdir_+"LSvalues");
00057 dbe_->removeContents();
00058 }
00059
00060 }
00061
00062
00063 void HcalCoarsePedestalMonitor::endRun(const edm::Run& run, const edm::EventSetup& c)
00064 {
00065
00066 }
00067
00068 void HcalCoarsePedestalMonitor::endJob()
00069 {
00070 if (debug_>0) std::cout <<"HcalCoarsePedestalMonitor::endJob()"<<std::endl;
00071 if (enableCleanup_) cleanup();
00072 }
00073
00074
00075 void HcalCoarsePedestalMonitor::setup()
00076 {
00077
00078 HcalBaseDQMonitor::setup();
00079 if (!dbe_) return;
00080
00081
00082 if (debug_>1)
00083 std::cout <<"<HcalCoarsePedestalMonitor::beginRun> Setting up histograms"<<std::endl;
00084
00085 std::ostringstream name;
00086 dbe_->setCurrentFolder(subdir_ +"CoarsePedestalSumPlots");
00087 SetupEtaPhiHists(CoarsePedestalsSumByDepth,"Coarse Pedestal Summed Map","");
00088 SetupEtaPhiHists(CoarsePedestalsOccByDepth,"Coarse Pedestal Occupancy Map","");
00089 for (unsigned int i=0;i<CoarsePedestalsSumByDepth.depth.size();++i)
00090 (CoarsePedestalsSumByDepth.depth[i]->getTH2F())->SetOption("colz");
00091 for (unsigned int i=0;i<CoarsePedestalsOccByDepth.depth.size();++i)
00092 (CoarsePedestalsOccByDepth.depth[i]->getTH2F())->SetOption("colz");
00093
00094
00095 dbe_->setCurrentFolder(subdir_+"CoarsePedestal_parameters");
00096 MonitorElement* ADCDiffThresh = dbe_->bookFloat("ADCdiff_Problem_Threshold");
00097 ADCDiffThresh->Fill(ADCDiffThresh_);
00098 MonitorElement* minevents = dbe_->bookInt("minEventsNeededForPedestalCalculation");
00099 minevents->Fill(minEvents_);
00100 MonitorElement* excludeHORing2 = dbe_->bookInt("excludeHORing2");
00101 if (excludeHORing2_==true)
00102 excludeHORing2->Fill(1);
00103 else
00104 excludeHORing2->Fill(0);
00105
00106 this->reset();
00107 return;
00108 }
00109
00110 void HcalCoarsePedestalMonitor::beginRun(const edm::Run& run, const edm::EventSetup& c)
00111 {
00112 HcalBaseDQMonitor::beginRun(run,c);
00113 if (mergeRuns_ && tevt_>0) return;
00114
00115 if (tevt_==0) this->setup();
00116 if (mergeRuns_==false) this->reset();
00117 }
00118
00119
00120 void HcalCoarsePedestalMonitor::analyze(edm::Event const&e, edm::EventSetup const&s)
00121 {
00122 if (!IsAllowedCalibType()) return;
00123 if (LumiInOrder(e.luminosityBlock())==false) return;
00124
00125
00126
00127 edm::Handle<HBHEDigiCollection> hbhe_digi;
00128 edm::Handle<HODigiCollection> ho_digi;
00129 edm::Handle<HFDigiCollection> hf_digi;
00130 edm::Handle<HcalUnpackerReport> report;
00131
00132 if (!(e.getByLabel(digiLabel_,hbhe_digi)))
00133 {
00134 edm::LogWarning("HcalCoarsePedestalMonitor")<< digiLabel_<<" hbhe_digi not available";
00135 return;
00136 }
00137
00138 if (!(e.getByLabel(digiLabel_,hf_digi)))
00139 {
00140 edm::LogWarning("HcalCoarsePedestalMonitor")<< digiLabel_<<" hf_digi not available";
00141 return;
00142 }
00143 if (!(e.getByLabel(digiLabel_,ho_digi)))
00144 {
00145 edm::LogWarning("HcalCoarsePedestalMonitor")<< digiLabel_<<" ho_digi not available";
00146 return;
00147 }
00148 if (!(e.getByLabel(digiLabel_,report)))
00149 {
00150 edm::LogWarning("HcalCoarsePedestalMonitor")<< digiLabel_<<" unpacker report not available";
00151 return;
00152 }
00153
00154
00155 if (debug_>1) std::cout <<"\t<HcalCoarsePedestalMonitor::analyze> Processing good event! event # = "<<ievt_<<std::endl;
00156
00157 HcalBaseDQMonitor::analyze(e,s);
00158
00159
00160 processEvent(*hbhe_digi, *ho_digi, *hf_digi, *report);
00161
00162 }
00163
00164
00165 void HcalCoarsePedestalMonitor::processEvent(const HBHEDigiCollection& hbhe,
00166 const HODigiCollection& ho,
00167 const HFDigiCollection& hf,
00168 const HcalUnpackerReport& report)
00169 {
00170 if(!dbe_)
00171 {
00172 if(debug_)
00173 std::cout <<"HcalCoarsePedestalMonitor::processEvent DQMStore not instantiated!!!"<<std::endl;
00174 return;
00175 }
00176
00177
00178
00179 unsigned int allgooddigis= hbhe.size()+ho.size()+hf.size();
00180
00181
00182 if ((allgooddigis==0) ||
00183 (1.*report.badQualityDigis()>100*allgooddigis))
00184 {
00185 return;
00186 }
00187
00189
00190 unsigned int digisize=0;
00191 int depth=0, iphi=0, ieta=0, binEta=-9999;
00192
00193 double value=0;
00194
00195 for (HBHEDigiCollection::const_iterator j=hbhe.begin(); j!=hbhe.end(); ++j)
00196 {
00197 const HBHEDataFrame digi = (const HBHEDataFrame)(*j);
00198 if (digi.id().subdet()==HcalBarrel)
00199 {if (!HBpresent_) continue;}
00200 else if (digi.id().subdet()==HcalEndcap)
00201 {if (!HEpresent_) continue;}
00202 else continue;
00203 digisize=digi.size();
00204 if (digisize<8)
00205 continue;
00206
00207 depth=digi.id().depth();
00208 iphi=digi.id().iphi();
00209 ieta=digi.id().ieta();
00210
00211 digi.id().subdet()==HcalBarrel ?
00212 binEta=CalcEtaBin(HcalBarrel, ieta, depth) :
00213 binEta=CalcEtaBin(HcalEndcap, ieta, depth);
00214
00215
00216
00217
00218 value=0;
00219 for (unsigned int i=0;i<8;++i)
00220 value+=digi.sample(i).adc()/8.;
00221 pedestalsum_[binEta][iphi-1][depth-1]+=value;
00222 ++pedestalocc_[binEta][iphi-1][depth-1];
00223 }
00224
00225
00227 if (HOpresent_)
00228 {
00229 for (HODigiCollection::const_iterator j=ho.begin(); j!=ho.end(); ++j)
00230 {
00231 const HODataFrame digi = (const HODataFrame)(*j);
00232 digisize=digi.size();
00233 if (digisize<8)
00234 continue;
00235
00236 depth=digi.id().depth();
00237 iphi=digi.id().iphi();
00238 ieta=digi.id().ieta();
00239 binEta=CalcEtaBin(HcalOuter, ieta, depth);
00240
00241
00242 if (excludeHORing2_==true && abs(ieta)>10 && isSiPM(ieta,iphi,4)==false)
00243 continue;
00244
00245
00246
00247
00248 value=0;
00249 for (unsigned int i=0;i<8;++i)
00250 value+=digi.sample(i).adc()/8.;
00251 pedestalsum_[binEta][iphi-1][depth-1]+=value;
00252 ++pedestalocc_[binEta][iphi-1][depth-1];
00253 }
00254 }
00255
00257 if (HFpresent_)
00258 {
00259 for (HFDigiCollection::const_iterator j=hf.begin(); j!=hf.end(); ++j)
00260 {
00261 const HFDataFrame digi = (const HFDataFrame)(*j);
00262 digisize=digi.size();
00263 if (digisize<8)
00264 continue;
00265 digisize=digi.size();
00266 if (digisize<8)
00267 continue;
00268
00269 depth=digi.id().depth();
00270 iphi=digi.id().iphi();
00271 ieta=digi.id().ieta();
00272 binEta=CalcEtaBin(HcalForward, ieta, depth);
00273
00274
00275
00276 value=0;
00277 for (unsigned int i=0;i<8;++i)
00278 value+=digi.sample(i).adc()/8.;
00279 pedestalsum_[binEta][iphi-1][depth-1]+=value;
00280 ++pedestalocc_[binEta][iphi-1][depth-1];
00281 }
00282 }
00283
00284 return;
00285 }
00286
00287
00288 void HcalCoarsePedestalMonitor::beginLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
00289 const edm::EventSetup& c)
00290 {
00291 HcalBaseDQMonitor::beginLuminosityBlock(lumiSeg,c);
00292 ProblemsCurrentLB->Reset();
00293 }
00294
00295 void HcalCoarsePedestalMonitor::endLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
00296 const edm::EventSetup& c)
00297 {
00298 if (LumiInOrder(lumiSeg.luminosityBlock())==false) return;
00299 fill_Nevents();
00300 return;
00301 }
00302 void HcalCoarsePedestalMonitor::fill_Nevents()
00303 {
00304
00305
00306 if (ievt_<minEvents_)
00307 return;
00308
00309
00310
00311
00312 for (unsigned int i=0;i<CoarsePedestalsSumByDepth.depth.size();++i)
00313 CoarsePedestalsSumByDepth.depth[i]->setBinContent(0,0,ievt_);
00314 for (unsigned int i=0;i<CoarsePedestalsOccByDepth.depth.size();++i)
00315 CoarsePedestalsOccByDepth.depth[i]->setBinContent(0,0,ievt_);
00316
00317
00318 int iphi=-1, ieta=-99, idepth=0, calcEta=-99;
00319
00320 for (int d=0;d<4;++d)
00321 {
00322 idepth=d+1;
00323 for (int phi=0;phi<72;++phi)
00324 {
00325 iphi=phi+1;
00326 for (int eta=0;eta<83;++eta)
00327 {
00328 ieta=eta-41;
00329 if (validDetId(HcalBarrel, ieta, iphi, idepth))
00330 {
00331 calcEta = CalcEtaBin(HcalBarrel,ieta,idepth);
00332 CoarsePedestalsSumByDepth.depth[d]->Fill(ieta,iphi,pedestalsum_[calcEta][phi][d]);
00333 CoarsePedestalsOccByDepth.depth[d]->Fill(ieta,iphi,pedestalocc_[calcEta][phi][d]);
00334 }
00335 if (validDetId(HcalEndcap, ieta, iphi, idepth))
00336 {
00337 calcEta = CalcEtaBin(HcalEndcap,ieta,idepth);
00338 CoarsePedestalsSumByDepth.depth[d]->Fill(ieta,iphi,pedestalsum_[calcEta][phi][d]);
00339 CoarsePedestalsOccByDepth.depth[d]->Fill(ieta,iphi,pedestalocc_[calcEta][phi][d]);
00340 }
00341 if (validDetId(HcalOuter, ieta, iphi, idepth))
00342 {
00343 calcEta = CalcEtaBin(HcalOuter,ieta,idepth);
00344 CoarsePedestalsSumByDepth.depth[d]->Fill(ieta,iphi,pedestalsum_[calcEta][phi][d]);
00345 CoarsePedestalsOccByDepth.depth[d]->Fill(ieta,iphi,pedestalocc_[calcEta][phi][d]);
00346 }
00347 if (validDetId(HcalForward, ieta, iphi, idepth))
00348 {
00349 calcEta = CalcEtaBin(HcalBarrel,ieta,idepth);
00350 int zside=ieta/abs(ieta);
00351 CoarsePedestalsSumByDepth.depth[d]->Fill(ieta+zside,iphi,pedestalsum_[calcEta][phi][d]);
00352 CoarsePedestalsOccByDepth.depth[d]->Fill(ieta+zside,iphi,pedestalocc_[calcEta][phi][d]);
00353 }
00354 }
00355 }
00356 }
00357
00358 FillUnphysicalHEHFBins(CoarsePedestalsSumByDepth);
00359 FillUnphysicalHEHFBins(CoarsePedestalsOccByDepth);
00360
00361 return;
00362 }
00363
00364
00365 void HcalCoarsePedestalMonitor::reset()
00366 {
00367
00368 zeroCounters();
00369 CoarsePedestalsSumByDepth.Reset();
00370 CoarsePedestalsOccByDepth.Reset();
00371 return;
00372 }
00373
00374 void HcalCoarsePedestalMonitor::zeroCounters()
00375 {
00376 for (int i=0;i<85;++i)
00377 for (int j=0;j<72;++j)
00378 for (int k=0;k<4;++k)
00379 {
00380 pedestalsum_[i][j][k]=0;
00381 pedestalocc_[i][j][k]=0;
00382 }
00383 }
00384 DEFINE_FWK_MODULE(HcalCoarsePedestalMonitor);
00385