#include <HcalDetDiagTimingClient.h>
Public Member Functions | |
void | analyze (void) |
void | beginJob (void) |
void | beginRun (void) |
void | calculateProblems (void) |
void | cleanup (void) |
void | endJob (void) |
void | endRun (void) |
bool | hasErrors_Temp (void) |
bool | hasOther_Temp (void) |
bool | hasWarnings_Temp (void) |
HcalDetDiagTimingClient (std::string myname) | |
HcalDetDiagTimingClient () | |
Constructors. | |
HcalDetDiagTimingClient (std::string myname, const edm::ParameterSet &ps) | |
void | setup (void) |
bool | test_enabled (void) |
void | updateChannelStatus (std::map< HcalDetId, unsigned int > &myqual) |
~HcalDetDiagTimingClient () | |
Destructor. | |
Private Attributes | |
int | nevts_ |
Definition at line 8 of file HcalDetDiagTimingClient.h.
HcalDetDiagTimingClient::HcalDetDiagTimingClient | ( | ) | [inline] |
Constructors.
Definition at line 13 of file HcalDetDiagTimingClient.h.
References HcalBaseDQClient::name_.
{name_="";};
HcalDetDiagTimingClient::HcalDetDiagTimingClient | ( | std::string | myname | ) |
Definition at line 20 of file HcalDetDiagTimingClient.cc.
References HcalBaseDQClient::name_.
{ name_=myname; }
HcalDetDiagTimingClient::HcalDetDiagTimingClient | ( | std::string | myname, |
const edm::ParameterSet & | ps | ||
) |
Definition at line 25 of file HcalDetDiagTimingClient.cc.
References HcalBaseDQClient::badChannelStatusMask_, HcalBaseDQClient::cloneME_, HcalBaseDQClient::debug_, HcalBaseDQClient::enableCleanup_, edm::ParameterSet::getUntrackedParameter(), HcalBaseDQClient::minerrorrate_, HcalBaseDQClient::minevents_, HcalBaseDQClient::name_, HcalBaseDQClient::Online_, HcalBaseDQClient::prefixME_, HcalBaseDQClient::ProblemCells, HcalBaseDQClient::ProblemCellsByDepth, HcalBaseDQClient::subdir_, and HcalBaseDQClient::validHtmlOutput_.
{ name_=myname; enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup",false); debug_ = ps.getUntrackedParameter<int>("debug",0); prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder","Hcal/"); if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/") prefixME_.append("/"); subdir_ = ps.getUntrackedParameter<std::string>("DetDiagTimingFolder","DetDiagTimingMonitor_Hcal/"); // DetDiagTiming_Hcal/ if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/") subdir_.append("/"); subdir_=prefixME_+subdir_; validHtmlOutput_ = ps.getUntrackedParameter<bool>("DetDiagTiming_validHtmlOutput",true); cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true); badChannelStatusMask_ = ps.getUntrackedParameter<int>("DetDiagTiming_BadChannelStatusMask", ps.getUntrackedParameter<int>("BadChannelStatusMask",0)); minerrorrate_ = ps.getUntrackedParameter<double>("DetDiagTiming_minerrorrate", ps.getUntrackedParameter<double>("minerrorrate",0.05)); minevents_ = ps.getUntrackedParameter<int>("DetDiagTiming_minevents", ps.getUntrackedParameter<int>("minevents",1)); Online_ = ps.getUntrackedParameter<bool>("online",false); ProblemCells=0; ProblemCellsByDepth=0; }
HcalDetDiagTimingClient::~HcalDetDiagTimingClient | ( | ) |
Destructor.
void HcalDetDiagTimingClient::analyze | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 53 of file HcalDetDiagTimingClient.cc.
References calculateProblems(), gather_cfg::cout, and HcalBaseDQClient::debug_.
Referenced by endRun().
{ if (debug_>2) std::cout <<"\tHcalDetDiagTimingClient::analyze()"<<std::endl; calculateProblems(); }
void HcalDetDiagTimingClient::beginJob | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 189 of file HcalDetDiagTimingClient.cc.
References gather_cfg::cout, HcalBaseDQClient::debug_, HcalBaseDQClient::dqmStore_, cppFunctionSkipper::operator, and DQMStore::showDirStructure().
{ dqmStore_ = edm::Service<DQMStore>().operator->(); if (debug_>0) { std::cout <<"<HcalDetDiagTimingClient::beginJob()> Displaying dqmStore directory structure:"<<std::endl; dqmStore_->showDirStructure(); } }
void HcalDetDiagTimingClient::beginRun | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 200 of file HcalDetDiagTimingClient.cc.
References DQMStore::book2D(), gather_cfg::cout, HcalBaseDQClient::debug_, EtaPhiHists::depth, HcalBaseDQClient::dqmStore_, HcalBaseDQClient::enoughevents_, MonitorElement::getName(), i, nevts_, HcalBaseDQClient::ProblemCells, HcalBaseDQClient::ProblemCellsByDepth, HcalBaseDQClient::problemnames_, DQMStore::setCurrentFolder(), EtaPhiHists::setup(), and HcalBaseDQClient::subdir_.
{ enoughevents_=false; if (!dqmStore_) { if (debug_>0) std::cout <<"<HcalDetDiagTimingClient::beginRun> dqmStore does not exist!"<<std::endl; return; } dqmStore_->setCurrentFolder(subdir_); problemnames_.clear(); // Put the appropriate name of your problem summary here ProblemCells=dqmStore_->book2D(" ProblemDetDiagTiming", " Problem DetDiagTiming Rate for all HCAL;ieta;iphi", 85,-42.5,42.5, 72,0.5,72.5); problemnames_.push_back(ProblemCells->getName()); if (debug_>1) std::cout << "Tried to create ProblemCells Monitor Element in directory "<<subdir_<<" \t Failed? "<<(ProblemCells==0)<<std::endl; dqmStore_->setCurrentFolder(subdir_+"problem_DetDiagTiming"); ProblemCellsByDepth = new EtaPhiHists(); ProblemCellsByDepth->setup(dqmStore_," Problem DetDiagTiming Rate"); for (unsigned int i=0; i<ProblemCellsByDepth->depth.size();++i) problemnames_.push_back(ProblemCellsByDepth->depth[i]->getName()); nevts_=0; }
void HcalDetDiagTimingClient::calculateProblems | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 59 of file HcalDetDiagTimingClient.cc.
References HcalBaseDQClient::badstatusmap, HcalObjRepresent::CalcIeta(), gather_cfg::cout, HcalBaseDQClient::debug_, EtaPhiHists::depth, HcalBaseDQClient::dqmStore_, HcalBaseDQClient::enoughevents_, eta(), MonitorElement::Fill(), HcalObjRepresent::FillUnphysicalHEHFBins(), MonitorElement::getBinContent(), MonitorElement::getTH2F(), HcalBarrel, HcalEmpty, HcalEndcap, HcalEtaPhiHistNames(), HcalForward, HcalOuter, isHB(), isHE(), isHF(), isHO(), min, HcalBaseDQClient::minerrorrate_, HcalBaseDQClient::name(), phi, HcalBaseDQClient::ProblemCells, HcalBaseDQClient::ProblemCellsByDepth, MonitorElement::Reset(), and MonitorElement::setBinContent().
Referenced by analyze().
{ if (debug_>2) std::cout <<"\t\tHcalDetDiagTimingClient::calculateProblems()"<<std::endl; if(!dqmStore_) return; //double totalevents=0; int etabins=0, phibins=0, zside=0; double problemvalue=0; // Clear away old problems if (ProblemCells!=0) { ProblemCells->Reset(); (ProblemCells->getTH2F())->SetMaximum(1.05); (ProblemCells->getTH2F())->SetMinimum(0.); } for (unsigned int d=0;d<ProblemCellsByDepth->depth.size();++d) { if (ProblemCellsByDepth->depth[d]!=0) { ProblemCellsByDepth->depth[d]->Reset(); (ProblemCellsByDepth->depth[d]->getTH2F())->SetMaximum(1.05); (ProblemCellsByDepth->depth[d]->getTH2F())->SetMinimum(0.); } } enoughevents_=true; // Get histograms that are used in testing // currently none used, std::vector<std::string> name = HcalEtaPhiHistNames(); // This is a sample of how to get a histogram from the task that can then be used for evaluation purposes /* TH2F* BadTiming[4]; TH2F* BadEnergy[4]; MonitorElement* me; for (int i=0;i<4;++i) { std::string s=subdir_+name[i]+" Problem Bad Laser Timing"; me=dqmStore_->get(s.c_str()); if (me!=0) BadTiming[i]=HcalUtilsClient::getHisto<TH2F*>(me, cloneME_, BadTiming[i], debug_); else if (debug_>0) std::cout <<"<HcalDetDiagTimingClient::analyze> could not get histogram '"<<s<<"'"<<std::endl; s=subdir_+name[i]+" Problem Bad Laser Energy"; me=dqmStore_->get(s.c_str()); if (me!=0) BadEnergy[i]=HcalUtilsClient::getHisto<TH2F*>(me, cloneME_, BadEnergy[i], debug_); else if (debug_>0) std::cout <<"<HcalDetDiagTimingClient::analyze> could not get histogram '"<<s<<"'"<<std::endl; } */ // Because we're clearing and re-forming the problem cell histogram here, we don't need to do any cute // setting of the underflow bin to 0, and we can plot results as a raw rate between 0-1. for (unsigned int d=0;d<ProblemCellsByDepth->depth.size();++d) { if (ProblemCellsByDepth->depth[d]==0) continue; //totalevents=DigiPresentByDepth[d]->GetBinContent(0); //totalevents=0; // Check underflow bins for events processed /* if (BadTiming[d]!=0) totalevents = BadTiming[d]->GetBinContent(0); else if (BadEnergy[d]!=0) totalevents = BadEnergy[d]->GetBinContent(0); */ //if (totalevents==0 || totalevents<minevents_) continue; //totalevents=1; // temporary value pending removal of histogram normalization from tasks etabins=(ProblemCellsByDepth->depth[d]->getTH2F())->GetNbinsX(); phibins=(ProblemCellsByDepth->depth[d]->getTH2F())->GetNbinsY(); for (int eta=0;eta<etabins;++eta) { int ieta=CalcIeta(eta,d+1); if (ieta==-9999) continue; for (int phi=0;phi<phibins;++phi) { problemvalue=0; /* if (BadTiming[d]!=0) problemvalue += BadTiming[d]->GetBinContent(eta+1,phi+1)*1./totalevents; else if (BadEnergy[d]!=0) problemvalue += BadEnergy[d]->GetBinContent(eta+1,phi+1)*1./totalevents; */ if (problemvalue==0) continue; // problem value is a rate; we can normalize it here problemvalue = std::min(1.,problemvalue); zside=0; if (isHF(eta,d+1)) // shift ieta by 1 for HF ieta<0 ? zside = -1 : zside = 1; // For problem cells that exceed our allowed rate, // set the values to -1 if the cells are already marked in the status database if (problemvalue>minerrorrate_) { HcalSubdetector subdet=HcalEmpty; if (isHB(eta,d+1))subdet=HcalBarrel; else if (isHE(eta,d+1)) subdet=HcalEndcap; else if (isHF(eta,d+1)) subdet=HcalForward; else if (isHO(eta,d+1)) subdet=HcalOuter; HcalDetId hcalid(subdet, ieta, phi+1, (int)(d+1)); if (badstatusmap.find(hcalid)!=badstatusmap.end()) problemvalue=999; } ProblemCellsByDepth->depth[d]->setBinContent(eta+1,phi+1,problemvalue); if (ProblemCells!=0) ProblemCells->Fill(ieta+zside,phi+1,problemvalue); } // loop on phi } // loop on eta } // loop on depth if (ProblemCells==0) { if (debug_>0) std::cout <<"<HcalDetDiagTimingClient::analyze> ProblemCells histogram does not exist!"<<std::endl; return; } // Normalization of ProblemCell plot, in the case where there are errors in multiple depths etabins=(ProblemCells->getTH2F())->GetNbinsX(); phibins=(ProblemCells->getTH2F())->GetNbinsY(); for (int eta=0;eta<etabins;++eta) { for (int phi=0;phi<phibins;++phi) { if (ProblemCells->getBinContent(eta+1,phi+1)>1. && ProblemCells->getBinContent(eta+1,phi+1)<999) ProblemCells->setBinContent(eta+1,phi+1,1.); } } FillUnphysicalHEHFBins(*ProblemCellsByDepth); FillUnphysicalHEHFBins(ProblemCells); return; }
void HcalDetDiagTimingClient::cleanup | ( | void | ) | [virtual] |
void HcalDetDiagTimingClient::endJob | ( | void | ) | [virtual] |
void HcalDetDiagTimingClient::endRun | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 227 of file HcalDetDiagTimingClient.cc.
References analyze().
{analyze();}
bool HcalDetDiagTimingClient::hasErrors_Temp | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 232 of file HcalDetDiagTimingClient.cc.
References HcalObjRepresent::CalcIeta(), gather_cfg::cout, HcalBaseDQClient::debug_, EtaPhiHists::depth, MonitorElement::getTH2F(), HcalBaseDQClient::minerrorrate_, HcalBaseDQClient::ProblemCells, and HcalBaseDQClient::ProblemCellsByDepth.
{ if (!ProblemCells) { if (debug_>1) std::cout <<"<HcalDetDiagTimingClient::hasErrors_Temp> ProblemCells histogram does not exist!"<<std::endl; return false; } int problemcount=0; int ieta=-9999; for (int depth=0;depth<4; ++depth) { int etabins = (ProblemCells->getTH2F())->GetNbinsX(); int phibins = (ProblemCells->getTH2F())->GetNbinsY(); for (int hist_eta=0;hist_eta<etabins;++hist_eta) { for (int hist_phi=0; hist_phi<phibins;++hist_phi) { ieta=CalcIeta(hist_eta,depth+1); if (ieta==-9999) continue; if (ProblemCellsByDepth->depth[depth]==0) continue; if (ProblemCellsByDepth->depth[depth]->getBinContent(hist_eta,hist_phi)>minerrorrate_) ++problemcount; } // for (int hist_phi=1;...) } // for (int hist_eta=1;...) } // for (int depth=0;...) if (problemcount>0) return true; return false; }
bool HcalDetDiagTimingClient::hasOther_Temp | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 266 of file HcalDetDiagTimingClient.cc.
{return false;}
bool HcalDetDiagTimingClient::hasWarnings_Temp | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 265 of file HcalDetDiagTimingClient.cc.
{return false;}
void HcalDetDiagTimingClient::setup | ( | void | ) | [virtual] |
bool HcalDetDiagTimingClient::test_enabled | ( | void | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 267 of file HcalDetDiagTimingClient.cc.
{return true;}
void HcalDetDiagTimingClient::updateChannelStatus | ( | std::map< HcalDetId, unsigned int > & | myqual | ) | [virtual] |
Reimplemented from HcalBaseDQClient.
Definition at line 270 of file HcalDetDiagTimingClient.cc.
{ // This gets called by HcalMonitorClient // trigger primitives don't yet contribute to channel status (though they could...) // see dead or hot cell code for an example } //void HcalDetDiagTimingClient::updateChannelStatus
int HcalDetDiagTimingClient::nevts_ [private] |
Definition at line 36 of file HcalDetDiagTimingClient.h.
Referenced by beginRun().