Go to the documentation of this file.00001 #include "DQM/HcalMonitorTasks/interface/HcalLSbyLSMonitor.h"
00002 #include "FWCore/Framework/interface/LuminosityBlock.h"
00003
00004
00005
00006
00007
00008
00009
00010 HcalLSbyLSMonitor::HcalLSbyLSMonitor(const edm::ParameterSet& ps)
00011 {
00012 Online_ = ps.getUntrackedParameter<bool>("online",false);
00013 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns",false);
00014 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup",false);
00015 debug_ = ps.getUntrackedParameter<int>("debug",0);
00016 prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder","Hcal/");
00017 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
00018 prefixME_.append("/");
00019 subdir_ = ps.getUntrackedParameter<std::string>("TaskFolder","LSbyLSMonitor_Hcal");
00020 if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/")
00021 subdir_.append("/");
00022 subdir_=prefixME_+subdir_;
00023 AllowedCalibTypes_ = ps.getUntrackedParameter<std::vector<int> > ("AllowedCalibTypes");
00024 skipOutOfOrderLS_ = ps.getUntrackedParameter<bool>("skipOutOfOrderLS",true);
00025 NLumiBlocks_ = ps.getUntrackedParameter<int>("NLumiBlocks",4000);
00026 makeDiagnostics_ = ps.getUntrackedParameter<bool>("makeDiagnostics",false);
00027
00028
00029 TaskList_ = ps.getUntrackedParameter<std::vector<std::string> >("TaskDirectories");
00030
00031 minEvents_ = ps.getUntrackedParameter<int>("minEvents",500);
00032 }
00033
00034 HcalLSbyLSMonitor::~HcalLSbyLSMonitor()
00035 {
00036 }
00037
00038 void HcalLSbyLSMonitor::setup()
00039 {
00040
00041 HcalBaseDQMonitor::setup();
00042
00043 if (debug_>1)
00044 std::cout <<"<HcalLSbyLSMonitor::setup> Setting up histograms"<<std::endl;
00045
00046 dbe_->setCurrentFolder(subdir_);
00047
00048 if (ProblemsCurrentLB)
00049 ProblemsCurrentLB->setLumiFlag();
00050 this->reset();
00051 }
00052 void HcalLSbyLSMonitor::beginRun(const edm::Run& run, const edm::EventSetup& c)
00053 {
00054 if (debug_>1) std::cout <<"HcalLSbyLSMonitor::beginRun"<<std::endl;
00055 HcalBaseDQMonitor::beginRun(run,c);
00056
00057 if (tevt_==0) this->setup();
00058 if (mergeRuns_==false)
00059 this->reset();
00060
00061 return;
00062 }
00063
00064
00065 void HcalLSbyLSMonitor::reset()
00066 {
00067 HcalBaseDQMonitor::reset();
00068 ProblemsCurrentLB->Reset();
00069 }
00070
00071 void HcalLSbyLSMonitor::beginLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
00072 const edm::EventSetup& c)
00073 {
00074 if (LumiInOrder(lumiSeg.luminosityBlock())==false) return;
00075 HcalBaseDQMonitor::beginLuminosityBlock(lumiSeg,c);
00076 ProblemsCurrentLB->Reset();
00077 return;
00078 }
00079
00080 void HcalLSbyLSMonitor::endLuminosityBlock(const edm::LuminosityBlock& lumiSeg,
00081 const edm::EventSetup& c)
00082 {
00083
00084 if (!dbe_) return;
00085 bool enoughEvents=true;
00086 int Nevents=0;
00087 int TotalEvents=0;
00088 int badHB=0;
00089 int badHE=0;
00090 int badHO=0;
00091 int badHF=0;
00092 int badHO0=0;
00093 int badHO12=0;
00094 int badHFLUMI=0;
00095
00096 for (unsigned int i=0;i<TaskList_.size();++i)
00097 {
00098 std::string name=prefixME_+TaskList_[i]+"LSvalues/";
00099 dbe_->setCurrentFolder(name.c_str());
00100
00101 MonitorElement *me=dbe_->get(name+"ProblemsThisLS");
00102 if (me==0)
00103 {
00104 if (debug_>0) std::cout <<"<HcalLSbyLSMonitor> Error! Could not get histogram "<<name.c_str()<<std::endl;
00105 enoughEvents=false;
00106 break;
00107 }
00108
00109 Nevents=(int)me->getBinContent(-1);
00110 if (Nevents<minEvents_)
00111 {
00112 if (debug_>0)
00113 std::cout <<"<HcalLSbyLSMonitor> Error! Number of events "<<Nevents<<" for histogram "<<name.c_str()<<" is less than the required minimum of "<<minEvents_<<std::endl;
00114 enoughEvents=false;
00115 break;
00116 }
00117
00118 TotalEvents=std::max(TotalEvents,Nevents);
00119
00120 badHB+=(int)me->getBinContent(1,1);
00121 badHE+=(int)me->getBinContent(2,1);
00122 badHO+=(int)me->getBinContent(3,1);
00123 badHF+=(int)me->getBinContent(4,1);
00124 badHO0+=(int)me->getBinContent(5,1);
00125 badHO12+=(int)me->getBinContent(6,1);
00126 badHFLUMI+=(int)me->getBinContent(7,1);
00127 }
00128 if (enoughEvents==false)
00129 {
00130 return;
00131 }
00132 ProblemsCurrentLB->setBinContent(-1,-1,TotalEvents);
00133 ProblemsCurrentLB->setBinContent(1,1,badHB);
00134 ProblemsCurrentLB->setBinContent(2,1,badHE);
00135 ProblemsCurrentLB->setBinContent(3,1,badHO);
00136 ProblemsCurrentLB->setBinContent(4,1,badHF);
00137 ProblemsCurrentLB->setBinContent(5,1,badHO0);
00138 ProblemsCurrentLB->setBinContent(6,1,badHO12);
00139 ProblemsCurrentLB->setBinContent(7,1,badHFLUMI);
00140 return;
00141 }
00142
00143
00144 void HcalLSbyLSMonitor::done()
00145 {
00146
00147 return;
00148
00149 }
00150
00151
00152 void HcalLSbyLSMonitor::endJob()
00153 {
00154 if (debug_>0) std::cout <<"HcalLSbyLSMonitor::endJob()"<<std::endl;
00155 if (enableCleanup_) cleanup();
00156 }
00157
00158
00159 void HcalLSbyLSMonitor::cleanup()
00160 {
00161 if (!enableCleanup_) return;
00162 if (dbe_)
00163 {
00164 dbe_->setCurrentFolder(subdir_);
00165 dbe_->removeContents();
00166 dbe_->setCurrentFolder(subdir_+"LSvalues");
00167 dbe_->removeContents();
00168 }
00169 }
00170
00171 DEFINE_FWK_MODULE(HcalLSbyLSMonitor);