00001 #include <DQM/HcalMonitorClient/interface/ZDCMonitorClient.h>
00002 #include "FWCore/ServiceRegistry/interface/Service.h"
00003 #include "FWCore/Framework/interface/MakerMacros.h"
00004 #include "DQMServices/Core/interface/MonitorElement.h"
00005 #include "DataFormats/DetId/interface/DetId.h"
00006
00007 #include "TROOT.h"
00008 #include "TTree.h"
00009 #include "TGaxis.h"
00010 #include "TH1F.h"
00011 #include "TH2F.h"
00012 #include "TFile.h"
00013
00014 #include <memory>
00015 #include <iostream>
00016 #include <fstream>
00017 #include <vector>
00018 #include <string>
00019 #include <sys/time.h>
00020
00021 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
00022 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
00023
00024 #include <DQM/HcalMonitorClient/interface/HcalDQMDbInterface.h>
00025
00026 #include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
00027 #include "CondFormats/HcalObjects/interface/HcalCondObjectContainer.h"
00028 #include "CalibCalorimetry/HcalAlgos/interface/HcalDbASCIIIO.h"
00029 #include "CondFormats/HcalObjects/interface/HcalChannelStatus.h"
00030
00031 #include <DQM/HcalMonitorClient/interface/HcalClientUtils.h>
00032 #include "DQM/HcalMonitorClient/interface/HcalHistoUtils.h"
00033 #include "DQM/HcalMonitorTasks/interface/HcalEtaPhiHists.h"
00034
00035
00036
00037 ZDCMonitorClient::ZDCMonitorClient(const edm::ParameterSet& ps){
00038 initialize(ps);
00039 }
00040
00041 ZDCMonitorClient::ZDCMonitorClient(){}
00042
00043
00044 ZDCMonitorClient::~ZDCMonitorClient(){
00045
00046 if (debug_>0) std::cout << "ZDCMonitorClient: Exit ..." << std::endl;
00047 }
00048
00049
00050 void ZDCMonitorClient::initialize(const edm::ParameterSet& ps){
00051
00052 irun_=0; ilumisec_=0; ievent_=0; itime_=0;
00053
00054 maxlumisec_=0; minlumisec_=0;
00055
00056
00057 debug_ = ps.getUntrackedParameter<int>("debug", 0);
00058 if (debug_>0)
00059 std::cout << std::endl<<" *** ZDC Monitor Client ***" << std::endl<<std::endl;
00060
00061 if(debug_>1) std::cout << "ZDCMonitorClient: constructor...." << std::endl;
00062
00063 Online_ = ps.getUntrackedParameter<bool>("Online",false);
00064
00065 showTiming_ = ps.getUntrackedParameter<bool>("showTiming",false);
00066
00067
00068 enableMonitorDaemon_ = ps.getUntrackedParameter<bool>("enableMonitorDaemon", true);
00069 if (debug_>0)
00070 {
00071 if ( enableMonitorDaemon_ ) std::cout << "-->enableMonitorDaemon switch is ON" << std::endl;
00072 else std::cout << "-->enableMonitorDaemon switch is OFF" << std::endl;
00073 }
00074
00075
00076 dbe_ = edm::Service<DQMStore>().operator->();
00077 if (debug_>1) dbe_->showDirStructure();
00078
00079
00080 inputFile_ = ps.getUntrackedParameter<std::string>("inputFile", "");
00081 if(inputFile_.size()!=0 && debug_>0) std::cout << "-->reading DQM input from " << inputFile_ << std::endl;
00082
00083 if( ! enableMonitorDaemon_ ) {
00084 if( inputFile_.size() != 0 && dbe_!=NULL){
00085 dbe_->open(inputFile_);
00086 dbe_->showDirStructure();
00087 }
00088 }
00089
00090
00091 resetEvents_ = ps.getUntrackedParameter<int>("resetFreqEvents",-1);
00092 if(resetEvents_!=-1 && debug_>0) std::cout << "-->Will reset histograms every " << resetEvents_ <<" events." << std::endl;
00093 resetLS_ = ps.getUntrackedParameter<int>("resetFreqLS",-1);
00094 if(resetLS_!=-1 && debug_>0) std::cout << "-->Will reset histograms every " << resetLS_ <<" lumi sections." << std::endl;
00095
00096
00097 baseHtmlDir_ = ps.getUntrackedParameter<std::string>("baseHtmlDir", "");
00098 if (debug_>0)
00099 {
00100 if( baseHtmlDir_.size() != 0)
00101 std::cout << "-->HTML output will go to baseHtmlDir = '" << baseHtmlDir_ << "'" << std::endl;
00102 else std::cout << "-->HTML output is disabled" << std::endl;
00103 }
00104
00105 runningStandalone_ = ps.getUntrackedParameter<bool>("runningStandalone", false);
00106 if (debug_>1)
00107 {
00108 if( runningStandalone_ ) std::cout << "-->standAlone switch is ON" << std::endl;
00109 else std::cout << "-->standAlone switch is OFF" << std::endl;
00110 }
00111
00112
00113 prescaleEvt_ = ps.getUntrackedParameter<int>("diagnosticPrescaleEvt", -1);
00114 if (debug_>0)
00115 std::cout << "===>DQM event prescale = " << prescaleEvt_ << " event(s)"<< std::endl;
00116
00117 prescaleLS_ = ps.getUntrackedParameter<int>("diagnosticPrescaleLS", -1);
00118 if (debug_>0) std::cout << "===>DQM lumi section prescale = " << prescaleLS_ << " lumi section(s)"<< std::endl;
00119
00120
00121 std::string subsystemname = ps.getUntrackedParameter<std::string>("subSystemFolder", "ZDC") ;
00122 if (debug_>0) std::cout << "===>ZDCMonitor name = " << subsystemname << std::endl;
00123 rootFolder_ = subsystemname + "/";
00124
00125 return;
00126 }
00127
00128
00129
00130 void ZDCMonitorClient::removeAllME(){
00131 if (debug_>0) std::cout <<"<ZDCMonitorClient>removeAllME()"<<std::endl;
00132 if(dbe_==NULL) return;
00133
00134
00135 dbe_->cd();
00136
00137 dbe_->removeContents();
00138
00139 if(dbe_->dirExists("Collector"))
00140 dbe_->rmdir("Collector");
00141 if(dbe_->dirExists("Summary"))
00142 dbe_->rmdir("Summary");
00143 return;
00144 }
00145
00146
00148 void ZDCMonitorClient::resetAllME() {
00149 if (debug_>0) std::cout <<"<ZDCMonitorClient> resetAllME()"<<std::endl;
00150 return;
00151 }
00152
00153
00154 void ZDCMonitorClient::beginJob(){
00155
00156 if( debug_>0 ) std::cout << "ZDCMonitorClient: beginJob" << std::endl;
00157
00158 ievt_ = 0;
00159
00160 return;
00161 }
00162
00163
00164 void ZDCMonitorClient::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00165
00166 if (debug_>0)
00167 std::cout << std::endl<<"ZDCMonitorClient: Standard beginRun() for run " << r.id().run() << std::endl<<std::endl;
00168
00169
00170
00171
00172
00173
00174
00175
00176 std::string eventinfo="EventInfo";
00177 if (rootFolder_!="ZDC")
00178 eventinfo+="DUMMY";
00179
00180
00181 MonitorElement* me;
00182 dbe_->setCurrentFolder(rootFolder_+eventinfo.c_str()+"/");
00183 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/reportSummary");
00184 if (me)
00185 dbe_->removeElement(me->getName());
00186 me = dbe_->bookFloat("reportSummary");
00187 me->Fill(-1);
00188 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/reportSummaryMap");
00189 if (me)
00190 dbe_->removeElement(me->getName());
00191 me = dbe_->book2D("reportSummaryMap","ZDC Report Summary Map",4,0,4,1,0,1);
00192 TH2F* myhist=me->getTH2F();
00193 myhist->GetXaxis()->SetBinLabel(1,"HAD-");
00194 myhist->GetXaxis()->SetBinLabel(2,"EM-");
00195 myhist->GetXaxis()->SetBinLabel(3,"EM+");
00196 myhist->GetXaxis()->SetBinLabel(4,"HAD+");
00197
00198 myhist->SetBinContent(1,1,-1);
00199 myhist->SetBinContent(2,1,-1);
00200 myhist->SetBinContent(3,1,-1);
00201 myhist->SetBinContent(4,1,-1);
00202
00203
00204 dbe_->setCurrentFolder(rootFolder_+eventinfo.c_str()+"/reportSummaryContents/");
00205 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/reportSummary/reportSummaryContents/ZDC_HADMinus");
00206 if (me)
00207 dbe_->removeElement(me->getName());
00208 me = dbe_->bookFloat("ZDC_HADMinus");
00209 me->Fill(-1);
00210 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/reportSummary/reportSummaryContents/ZDC_EMMinus");
00211 if (me)
00212 dbe_->removeElement(me->getName());
00213 me = dbe_->bookFloat("ZDC_EMMinus");
00214 me->Fill(-1);
00215 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/reportSummary/reportSummaryContents/ZDC_EMPlus");
00216 if (me)
00217 dbe_->removeElement(me->getName());
00218 me = dbe_->bookFloat("ZDC_EMPlus");
00219 me->Fill(-1);
00220 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/reportSummary/reportSummaryContents/ZDC_HADPlus");
00221 if (me)
00222 dbe_->removeElement(me->getName());
00223 me = dbe_->bookFloat("ZDC_HADPlus");
00224 me->Fill(-1);
00225
00226
00227 dbe_->setCurrentFolder(rootFolder_+eventinfo.c_str());
00228 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DAQSummary");
00229 if (me)
00230 dbe_->removeElement(me->getName());
00231 me = dbe_->bookFloat("DAQSummary");
00232 me->Fill(-1);
00233
00234 dbe_->setCurrentFolder(rootFolder_+eventinfo.c_str()+"/DAQContents");
00235 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DAQSummary/DAQContents/ZDC_HADPlus");
00236 if (me)
00237 dbe_->removeElement(me->getName());
00238 me = dbe_->bookFloat("ZDC_HADPlus");
00239 me->Fill(-1);
00240
00241 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DAQSummary/DAQContents/ZDC_HADMinus");
00242 if (me)
00243 dbe_->removeElement(me->getName());
00244 me = dbe_->bookFloat("ZDC_HADMinus");
00245 me->Fill(-1);
00246
00247 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DAQSummary/DAQContents/ZDC_EMPlus");
00248 if (me)
00249 dbe_->removeElement(me->getName());
00250 me = dbe_->bookFloat("ZDC_EMPlus");
00251 me->Fill(-1);
00252
00253 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DAQSummary/DAQContents/ZDC_EMMinus");
00254 if (me)
00255 dbe_->removeElement(me->getName());
00256 me = dbe_->bookFloat("ZDC_EMMinus");
00257 me->Fill(-1);
00258
00259
00260 dbe_->setCurrentFolder(rootFolder_+eventinfo.c_str());
00261 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DCSSummary");
00262 if (me)
00263 dbe_->removeElement(me->getName());
00264 me = dbe_->bookFloat("DCSSummary");
00265 me->Fill(-1);
00266
00267 dbe_->setCurrentFolder(rootFolder_+eventinfo.c_str()+"/DCSContents");
00268 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DCSSummary/DCSContents/ZDC_HADPlus");
00269 if (me)
00270 dbe_->removeElement(me->getName());
00271 me = dbe_->bookFloat("ZDC_HADPlus");
00272 me->Fill(-1);
00273
00274 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DCSSummary/DCSContents/ZDC_HADMinus");
00275 if (me)
00276 dbe_->removeElement(me->getName());
00277 me = dbe_->bookFloat("ZDC_HADMinus");
00278 me->Fill(-1);
00279
00280 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DCSSummary/DCSContents/ZDC_EMPlus");
00281 if (me)
00282 dbe_->removeElement(me->getName());
00283 me = dbe_->bookFloat("ZDC_EMPlus");
00284 me->Fill(-1);
00285
00286 me=dbe_->get(rootFolder_+eventinfo.c_str()+"/DCSSummary/DCSContents/ZDC_EMMinus");
00287 if (me)
00288 dbe_->removeElement(me->getName());
00289 me = dbe_->bookFloat("ZDC_EMMinus");
00290 me->Fill(-1);
00291
00292 }
00293
00294
00295
00296 void ZDCMonitorClient::endJob(void) {
00297
00298 if( debug_>0 )
00299 std::cout << "ZDCMonitorClient: endJob, ievt = " << ievt_ << std::endl;
00300
00301 return;
00302 }
00303
00304
00305 void ZDCMonitorClient::endRun(const edm::Run& r, const edm::EventSetup& c) {
00306
00307 if (debug_>0)
00308 std::cout << std::endl<<"<ZDCMonitorClient> Standard endRun() for run " << r.id().run() << std::endl<<std::endl;
00309
00310 if (!Online_)
00311 analyze();
00312
00313 if( debug_ >0) std::cout <<"ZDCMonitorClient: processed events: "<<ievt_<<std::endl;
00314
00315 if (debug_>0) std::cout <<"==>Creating report after run end condition"<<std::endl;
00316 if(irun_>1){
00317 if(inputFile_.size()!=0) report(true);
00318 else report(false);
00319 }
00320
00321
00322
00323
00324
00325 return;
00326 }
00327
00328 void ZDCMonitorClient::writeDBfile()
00329
00330 {
00331 return;
00332
00333 }
00334
00335
00336 void ZDCMonitorClient::beginLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &c)
00337 {
00338
00339
00340
00341 if (debug_>0) std::cout <<"Entered Monitor Client beginLuminosityBlock for LS = "<<l.luminosityBlock()<<std::endl;
00342 ilumisec_ = l.luminosityBlock();
00343 if( debug_>0 ) std::cout << "ZDCMonitorClient: beginLuminosityBlock" << std::endl;
00344 }
00345
00346
00347 void ZDCMonitorClient::endLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &c) {
00348
00349
00350
00351 if( debug_>0 ) std::cout << "ZDCMonitorClient: std::endluminosityBlock" << std::endl;
00352 if(prescaleLS_>0 && !prescale()){
00353
00354 if (Online_)
00355 analyze();
00356 }
00357
00358 return;
00359 }
00360
00361
00362 void ZDCMonitorClient::analyze(const edm::Event& e, const edm::EventSetup& eventSetup){
00363
00364 if (debug_>1)
00365 std::cout <<"Entered ZDCMonitorClient::analyze(const Evt...)"<<std::endl;
00366
00367 if(resetEvents_>0 && (ievt_%resetEvents_)==0) resetAllME();
00368 if(resetLS_>0 && (ilumisec_%resetLS_)==0) resetAllME();
00369
00370
00371
00372
00373
00374 irun_ = e.id().run();
00375 ilumisec_ = e.luminosityBlock();
00376 ievent_ = e.id().event();
00377 itime_ = e.time().value();
00378 mytime_ = (e.time().value())>>32;
00379
00380 if (minlumisec_==0)
00381 minlumisec_=ilumisec_;
00382 minlumisec_=std::min(minlumisec_,ilumisec_);
00383 maxlumisec_=std::max(maxlumisec_,ilumisec_);
00384
00385 if (debug_>1)
00386 std::cout << "ZDCMonitorClient: evts: "<< ievt_ << ", run: " << irun_ << ", LS: " << ilumisec_ << ", evt: " << ievent_ << ", time: " << itime_ << std::endl;
00387
00388 ievt_++;
00389
00390 if ( runningStandalone_) return;
00391
00392
00393 if (prescaleEvt_>0 && !prescale())
00394 analyze();
00395 }
00396
00397
00398
00399 void ZDCMonitorClient::analyze(){
00400 if (debug_>0)
00401 std::cout <<"<ZDCMonitorClient> Entered ZDCMonitorClient::analyze()"<<std::endl;
00402 if(debug_>1) std::cout<<"\nZDC Monitor Client heartbeat...."<<std::endl;
00403
00404 createTests();
00405
00406 dbe_->runQTests();
00407 errorSummary();
00408
00409
00410 return;
00411 }
00412
00413
00414 void ZDCMonitorClient::createTests(void){
00415
00416 if( debug_>0 ) std::cout << "ZDCMonitorClient: creating all tests" << std::endl;
00417 return;
00418 }
00419
00420
00421 void ZDCMonitorClient::report(bool doUpdate) {
00422
00423 if( debug_>0 )
00424 std::cout << "ZDCMonitorClient: creating report, ievt = " << ievt_ << std::endl;
00425
00426 if(doUpdate){
00427 createTests();
00428 dbe_->runQTests();
00429 }
00430 errorSummary();
00431
00432
00433 if( baseHtmlDir_.size() != 0 && ievt_>0)
00434 htmlOutput();
00435 return;
00436 }
00437
00438 void ZDCMonitorClient::errorSummary(){
00439
00440
00441 float errorSummary = 1.0;
00442
00443 char meTitle[256];
00444 sprintf(meTitle,"%sEventInfo/errorSummary",rootFolder_.c_str() );
00445 MonitorElement* me = dbe_->get(meTitle);
00446 if(me) me->Fill(errorSummary);
00447
00448 return;
00449 }
00450
00451
00452 void ZDCMonitorClient::htmlOutput(void){
00453 return;
00454 }
00455
00456 void ZDCMonitorClient::offlineSetup(){
00457
00458
00459
00460 return;
00461 }
00462
00463 void ZDCMonitorClient::loadHistograms(TFile* infile, const char* fname)
00464 {
00465 if(!infile){
00466 throw cms::Exception("Incomplete configuration") <<
00467 "ZDCMonitorClient: this histogram file is bad! " <<std::endl;
00468 return;
00469 }
00470 return;
00471 }
00472
00473
00474 void ZDCMonitorClient::dumpHistograms(int& runNum, std::vector<TH1F*> &hist1d,std::vector<TH2F*> &hist2d)
00475 {
00476 hist1d.clear();
00477 hist2d.clear();
00478 return;
00479 }
00480
00481
00482 bool ZDCMonitorClient::prescale(){
00484
00486 if (debug_>1) std::cout <<"ZDCMonitorClient::prescale"<<std::endl;
00487
00488
00489 if(prescaleEvt_<=0 && prescaleLS_<=0) return false;
00490
00491
00492
00493 bool keepEvent=false;
00494
00495
00496 if(prescaleLS_>0 && (ilumisec_%prescaleLS_)==0) keepEvent = true;
00497 if (prescaleEvt_>0 && (ievt_%prescaleEvt_)==0) keepEvent = true;
00498
00499
00500 if (keepEvent) return false;
00501 return true;
00502 }
00503
00504
00505 DEFINE_FWK_MODULE(ZDCMonitorClient);