00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "DQMProvInfo.h"
00012 #include <TSystem.h>
00013 #include "DataFormats/Scalers/interface/DcsStatus.h"
00014 #include "DataFormats/L1GlobalTrigger/interface/L1GtFdlWord.h"
00015 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00016 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerEvmReadoutRecord.h"
00017 #include "FWCore/Framework/interface/LuminosityBlock.h"
00018 #include "FWCore/Version/interface/GetReleaseVersion.h"
00019 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
00020
00021 const static int XBINS=2500;
00022 const static int YBINS=28;
00023
00024 DQMProvInfo::DQMProvInfo(const edm::ParameterSet& ps){
00025
00026 parameters_ = ps;
00027
00028 dbe_ = edm::Service<DQMStore>().operator->();
00029 globalTag_ = "MODULE::DEFAULT";
00030 provinfofolder_ = parameters_.getUntrackedParameter<std::string>("provInfoFolder", "ProvInfo") ;
00031 subsystemname_ = parameters_.getUntrackedParameter<std::string>("subSystemFolder", "Info") ;
00032
00033
00034 nameProcess_ = "HLT";
00035 gotProcessParameterSet_=false;
00036 physDecl_=true;
00037 for (int i=0;i<25;i++) dcs25[i]=true;
00038 lastlumi_=0;
00039 }
00040
00041 DQMProvInfo::~DQMProvInfo(){
00042 }
00043
00044 void
00045 DQMProvInfo::beginRun(const edm::Run& r, const edm::EventSetup &c ) {
00046
00047 makeProvInfo();
00048 makeHLTKeyInfo(r,c);
00049
00050 dbe_->cd();
00051 dbe_->setCurrentFolder(subsystemname_ +"/EventInfo/");
00052
00053 reportSummary_=dbe_->bookFloat("reportSummary");
00054 reportSummaryMap_ = dbe_->book2D("reportSummaryMap",
00055 "HV and Beam Status vs Lumi", XBINS, 1., XBINS+1, YBINS+1, 0., YBINS+1);
00056 reportSummaryMap_->setBinLabel(1," CSC+",2);
00057 reportSummaryMap_->setBinLabel(2," CSC-",2);
00058 reportSummaryMap_->setBinLabel(3," DT0",2);
00059 reportSummaryMap_->setBinLabel(4," DT+",2);
00060 reportSummaryMap_->setBinLabel(5," DT-",2);
00061 reportSummaryMap_->setBinLabel(6," EB+",2);
00062 reportSummaryMap_->setBinLabel(7," EB-",2);
00063 reportSummaryMap_->setBinLabel(8," EE+",2);
00064 reportSummaryMap_->setBinLabel(9," EE-",2);
00065 reportSummaryMap_->setBinLabel(10,"ES+",2);
00066 reportSummaryMap_->setBinLabel(11,"ES-",2);
00067 reportSummaryMap_->setBinLabel(12,"HBHEa",2);
00068 reportSummaryMap_->setBinLabel(13,"HBHEb",2);
00069 reportSummaryMap_->setBinLabel(14,"HBHEc",2);
00070 reportSummaryMap_->setBinLabel(15,"HF",2);
00071 reportSummaryMap_->setBinLabel(16,"HO",2);
00072 reportSummaryMap_->setBinLabel(17,"BPIX",2);
00073 reportSummaryMap_->setBinLabel(18,"FPIX",2);
00074 reportSummaryMap_->setBinLabel(19,"RPC",2);
00075 reportSummaryMap_->setBinLabel(20,"TIBTID",2);
00076 reportSummaryMap_->setBinLabel(21,"TOB",2);
00077 reportSummaryMap_->setBinLabel(22,"TECp",2);
00078 reportSummaryMap_->setBinLabel(23,"TECm",2);
00079 reportSummaryMap_->setBinLabel(24,"CASTOR",2);
00080 reportSummaryMap_->setBinLabel(25,"ZDC",2);
00081 reportSummaryMap_->setBinLabel(26,"PhysDecl",2);
00082 reportSummaryMap_->setBinLabel(27,"7 TeV",2);
00083 reportSummaryMap_->setBinLabel(28,"Stable B",2);
00084 reportSummaryMap_->setBinLabel(29,"Valid",2);
00085 reportSummaryMap_->setAxisTitle("Luminosity Section");
00086 reportSummaryMap_->getTH2F()->SetBit(TH1::kCanRebin);
00087
00088 dbe_->cd();
00089 dbe_->setCurrentFolder(subsystemname_ +"/LhcInfo/");
00090 hBeamMode_=dbe_->book1D("beamMode","beamMode",XBINS,1.,XBINS+1);
00091 hBeamMode_->getTH1F()->GetYaxis()->Set(21,0.5,21.5);
00092 hBeamMode_->getTH1F()->SetMaximum(21.5);
00093 hBeamMode_->getTH1F()->SetBit(TH1::kCanRebin);
00094
00095 hBeamMode_->setAxisTitle("Luminosity Section",1);
00096 hBeamMode_->setBinLabel(1,"no mode",2);
00097 hBeamMode_->setBinLabel(2,"setup",2);
00098 hBeamMode_->setBinLabel(3,"inj pilot",2);
00099 hBeamMode_->setBinLabel(4,"inj intr",2);
00100 hBeamMode_->setBinLabel(5,"inj nomn",2);
00101 hBeamMode_->setBinLabel(6,"pre ramp",2);
00102 hBeamMode_->setBinLabel(7,"ramp",2);
00103 hBeamMode_->setBinLabel(8,"flat top",2);
00104 hBeamMode_->setBinLabel(9,"squeeze",2);
00105 hBeamMode_->setBinLabel(10,"adjust",2);
00106 hBeamMode_->setBinLabel(11,"stable",2);
00107 hBeamMode_->setBinLabel(12,"unstable",2);
00108 hBeamMode_->setBinLabel(13,"beam dump",2);
00109 hBeamMode_->setBinLabel(14,"ramp down",2);
00110 hBeamMode_->setBinLabel(15,"recovery",2);
00111 hBeamMode_->setBinLabel(16,"inj dump",2);
00112 hBeamMode_->setBinLabel(17,"circ dump",2);
00113 hBeamMode_->setBinLabel(18,"abort",2);
00114 hBeamMode_->setBinLabel(19,"cycling",2);
00115 hBeamMode_->setBinLabel(20,"warn b-dump",2);
00116 hBeamMode_->setBinLabel(21,"no beam",2);
00117 hBeamMode_->setBinContent(0.,22.);
00118
00119
00120 hLhcFill_=dbe_->book1D("lhcFill","LHC Fill Number",XBINS,1.,XBINS+1);
00121 hLhcFill_->setAxisTitle("Luminosity Section",1);
00122 hLhcFill_->getTH1F()->SetBit(TH1::kCanRebin);
00123
00124 hMomentum_=dbe_->book1D("momentum","Beam Energy [GeV]",XBINS,1.,XBINS+1);
00125 hMomentum_->setAxisTitle("Luminosity Section",1);
00126 hMomentum_->getTH1F()->SetBit(TH1::kCanRebin);
00127
00128 hIntensity1_=dbe_->book1D("intensity1","Intensity Beam 1",XBINS,1.,XBINS+1);
00129 hIntensity1_->setAxisTitle("Luminosity Section",1);
00130 hIntensity1_->setAxisTitle("N [E10]",2);
00131 hIntensity1_->getTH1F()->SetBit(TH1::kCanRebin);
00132 hIntensity2_=dbe_->book1D("intensity2","Intensity Beam 2",XBINS,1.,XBINS+1);
00133 hIntensity2_->setAxisTitle("Luminosity Section",1);
00134 hIntensity2_->setAxisTitle("N [E10]",2);
00135 hIntensity2_->getTH1F()->SetBit(TH1::kCanRebin);
00136
00137 dbe_->cd();
00138 dbe_->setCurrentFolder(subsystemname_ +"/ProvInfo/");
00139 hIsCollisionsRun_ = dbe_->bookInt("isCollisionsRun");
00140 hIsCollisionsRun_->Fill(0);
00141
00142
00143 physDecl_=true;
00144 for (int i=0;i<25;i++) dcs25[i]=true;
00145 lastlumi_=0;
00146 }
00147
00148 void DQMProvInfo::analyze(const edm::Event& e, const edm::EventSetup& c){
00149 if(!gotProcessParameterSet_){
00150 gotProcessParameterSet_=true;
00151 edm::ParameterSet ps;
00152
00153 nameProcess_ = e.processHistory()[e.processHistory().size()-1].processName();
00154 e.getProcessParameterSet(nameProcess_,ps);
00155 globalTag_ = ps.getParameterSet("PoolDBESSource@GlobalTag").getParameter<std::string>("globaltag");
00156 versGlobaltag_->Fill(globalTag_);
00157 }
00158
00159 makeDcsInfo(e);
00160 makeGtInfo(e);
00161
00162 return;
00163 }
00164
00165 void
00166 DQMProvInfo::endLuminosityBlock(const edm::LuminosityBlock& l, const edm::EventSetup& c)
00167 {
00168
00169 int nlumi = l.id().luminosityBlock();
00170
00171 edm::LogInfo("DQMProvInfo") << "nlumi: " << nlumi << " / number of bins: " << hBeamMode_->getTH1F()->GetNbinsX() << std::endl;
00172
00173 if (nlumi <= lastlumi_ ) return;
00174
00175 hBeamMode_->setBinContent(nlumi,beamMode_);
00176 hLhcFill_->setBinContent(nlumi,lhcFill_);
00177 hMomentum_->setBinContent(nlumi,momentum_);
00178 hIntensity1_->setBinContent(nlumi,intensity1_);
00179 hIntensity2_->setBinContent(nlumi,intensity2_);
00180
00181
00182 for (int l=lastlumi_+1;l<nlumi;l++)
00183 {
00184 if (lastlumi_ > 0 && reportSummaryMap_->getBinContent(lastlumi_,YBINS+1) == 1)
00185 {
00186 reportSummaryMap_->setBinContent(l,YBINS+1,0.);
00187 for (int i=0;i<YBINS;i++)
00188 {
00189 float lastvalue = reportSummaryMap_->getBinContent(lastlumi_,i+1);
00190 reportSummaryMap_->setBinContent(l,i+1,lastvalue);
00191 }
00192 }
00193 else
00194 {
00195 reportSummaryMap_->setBinContent(l,YBINS+1,0.);
00196 for (int i=0;i<YBINS;i++)
00197 reportSummaryMap_->setBinContent(l,i+1,-1.);
00198 }
00199 }
00200
00201
00202
00203 reportSummaryMap_->setBinContent(nlumi,YBINS+1,1.);
00204 for (int i=0;i<25;i++)
00205 {
00206 if (dcs25[i])
00207 reportSummaryMap_->setBinContent(nlumi,i+1,1.);
00208 else
00209 reportSummaryMap_->setBinContent(nlumi,i+1,0.);
00210
00211
00212 if (nlumi < XBINS)
00213 reportSummaryMap_->setBinContent(nlumi+1,i+1,-1.);
00214 dcs25[i]=true;
00215 }
00216
00217
00218 if (physDecl_)
00219 {
00220 reportSummary_->Fill(1.);
00221 reportSummaryMap_->setBinContent(nlumi,25+1,1.);
00222 if (nlumi < XBINS)
00223 reportSummaryMap_->setBinContent(nlumi+1,25+1,-1.);
00224 }
00225 else
00226 {
00227 reportSummary_->Fill(0.);
00228 reportSummaryMap_->setBinContent(nlumi,25+1,0.);
00229 if (nlumi < XBINS)
00230 reportSummaryMap_->setBinContent(nlumi+1,25+1,-1.);
00231 }
00232
00233
00234 if (momentum_ == 3500)
00235 {
00236 reportSummary_->Fill(1.);
00237 reportSummaryMap_->setBinContent(nlumi,26+1,1.);
00238 if (nlumi < XBINS)
00239 reportSummaryMap_->setBinContent(nlumi+1,26+1,-1.);
00240 }
00241 else
00242 {
00243 reportSummary_->Fill(0.);
00244 reportSummaryMap_->setBinContent(nlumi,26+1,0.);
00245 if (nlumi < XBINS)
00246 reportSummaryMap_->setBinContent(nlumi+1,26+1,-1.);
00247 }
00248
00249
00250 if (beamMode_ == 11)
00251 {
00252 hIsCollisionsRun_->Fill(1);
00253 reportSummary_->Fill(1.);
00254 reportSummaryMap_->setBinContent(nlumi,27+1,1.);
00255 if (nlumi < XBINS)
00256 reportSummaryMap_->setBinContent(nlumi+1,27+1,-1.);
00257 }
00258 else
00259 {
00260 reportSummary_->Fill(0.);
00261 reportSummaryMap_->setBinContent(nlumi,27+1,0.);
00262 if (nlumi < XBINS)
00263 reportSummaryMap_->setBinContent(nlumi+1,27+1,-1.);
00264 }
00265
00266
00267 physDecl_=true;
00268 lastlumi_=nlumi;
00269
00270 return;
00271
00272 }
00273
00274
00275 std::string
00276 DQMProvInfo::getShowTags(void)
00277 {
00278 TString out;
00279 TString cwd;
00280 TString showtagswd;
00281 cwd=gSystem->pwd();
00282 showtagswd=gSystem->ExpandPathName("$CMSSW_BASE/");
00283 gSystem->ChangeDirectory(showtagswd);
00284 FILE *pipe = gSystem->OpenPipe("showtags u -t", "r");
00285
00286 TString line;
00287 while (line.Gets(pipe,true)) {
00288 if (line.Contains("Test Release")) continue;
00289 if (line.Contains("Base Release")) continue;
00290 if (line.Contains("Test release")) continue;
00291 if (line.Contains("--- Tag ---")) continue;
00292 if (line.Contains(" ")) line.Replace(line.First(" "),1,":");
00293 line.ReplaceAll(" ","");
00294 out = out + line + ";";
00295 if (line.Contains("-------------------")) break;
00296 if (out.Length()>XBINS) break;
00297 }
00298 out.ReplaceAll("--","");
00299 out.ReplaceAll(";-",";");
00300 out.ReplaceAll(";;",";");
00301 out.ReplaceAll("\n","");
00302
00303 Int_t r = gSystem->ClosePipe(pipe);
00304 gSystem->ChangeDirectory(cwd);
00305 if (r) {
00306 gSystem->Error("ShowTags","problem running command showtags -u -t");
00307 }
00308
00309 std::string str(out);
00310 if (str.length()>2000) str.resize(2000);
00311
00312 std::string safestr =
00313 "/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-;:";
00314 size_t found=str.find_first_not_of(safestr);
00315 if (found!=std::string::npos)
00316 {
00317 edm::LogWarning("DQMProvInfo::ShowTags") << " Illegal character found: "
00318 << str[found]
00319 << " at position "
00320 << int(found) ;
00321 return "notags";
00322 }
00323 return str;
00324 }
00325
00326
00327 void
00328 DQMProvInfo::makeProvInfo()
00329 {
00330 dbe_->cd() ;
00331 dbe_->setCurrentFolder( subsystemname_ + "/" + provinfofolder_) ;
00332
00333
00334
00335 versCMSSW_ = dbe_->bookString("CMSSW",edm::getReleaseVersion().c_str() );
00336 hostName_ = dbe_->bookString("hostName",gSystem->HostName());
00337 workingDir_ = dbe_->bookString("workingDir",gSystem->pwd());
00338 processId_ = dbe_->bookInt("processID"); processId_->Fill(gSystem->GetPid());
00339
00340
00341 versGlobaltag_ = dbe_->bookString("Globaltag",globalTag_);
00342 versTaglist_ = dbe_->bookString("Taglist",getShowTags());
00343
00344 isComplete_ = dbe_->bookInt("runIsComplete");
00345
00346 fileVersion_ = dbe_->bookInt("fileVersion");
00347
00348
00349 return ;
00350 }
00351 void
00352 DQMProvInfo::makeDcsInfo(const edm::Event& e)
00353 {
00354
00355 edm::Handle<DcsStatusCollection> dcsStatus;
00356 e.getByLabel("scalersRawToDigi", dcsStatus);
00357 for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin();
00358 dcsStatusItr != dcsStatus->end(); ++dcsStatusItr)
00359 {
00360
00361 if (!dcsStatusItr->ready(DcsStatus::CSCp)) dcs25[0]=false;
00362 if (!dcsStatusItr->ready(DcsStatus::CSCm)) dcs25[1]=false;
00363 if (!dcsStatusItr->ready(DcsStatus::DT0)) dcs25[2]=false;
00364 if (!dcsStatusItr->ready(DcsStatus::DTp)) dcs25[3]=false;
00365 if (!dcsStatusItr->ready(DcsStatus::DTm)) dcs25[4]=false;
00366 if (!dcsStatusItr->ready(DcsStatus::EBp)) dcs25[5]=false;
00367 if (!dcsStatusItr->ready(DcsStatus::EBm)) dcs25[6]=false;
00368 if (!dcsStatusItr->ready(DcsStatus::EEp)) dcs25[7]=false;
00369 if (!dcsStatusItr->ready(DcsStatus::EEm)) dcs25[8]=false;
00370 if (!dcsStatusItr->ready(DcsStatus::ESp)) dcs25[9]=false;
00371 if (!dcsStatusItr->ready(DcsStatus::ESm)) dcs25[10]=false;
00372 if (!dcsStatusItr->ready(DcsStatus::HBHEa)) dcs25[11]=false;
00373 if (!dcsStatusItr->ready(DcsStatus::HBHEb)) dcs25[12]=false;
00374 if (!dcsStatusItr->ready(DcsStatus::HBHEc)) dcs25[13]=false;
00375 if (!dcsStatusItr->ready(DcsStatus::HF)) dcs25[14]=false;
00376 if (!dcsStatusItr->ready(DcsStatus::HO)) dcs25[15]=false;
00377 if (!dcsStatusItr->ready(DcsStatus::BPIX)) dcs25[16]=false;
00378 if (!dcsStatusItr->ready(DcsStatus::FPIX)) dcs25[17]=false;
00379 if (!dcsStatusItr->ready(DcsStatus::RPC)) dcs25[18]=false;
00380 if (!dcsStatusItr->ready(DcsStatus::TIBTID)) dcs25[19]=false;
00381 if (!dcsStatusItr->ready(DcsStatus::TOB)) dcs25[20]=false;
00382 if (!dcsStatusItr->ready(DcsStatus::TECp)) dcs25[21]=false;
00383 if (!dcsStatusItr->ready(DcsStatus::TECm)) dcs25[22]=false;
00384 if (!dcsStatusItr->ready(DcsStatus::CASTOR)) dcs25[23]=false;
00385 if (!dcsStatusItr->ready(DcsStatus::ZDC)) dcs25[24]=false;
00386 }
00387
00388 return ;
00389 }
00390 void
00391 DQMProvInfo::makeHLTKeyInfo(const edm::Run& r, const edm::EventSetup &c )
00392 {
00393
00394 std::string hltKey = "";
00395 HLTConfigProvider hltConfig;
00396 bool changed( true );
00397 if ( ! hltConfig.init( r, c, nameProcess_, changed) )
00398 {
00399
00400 hltKey = "error extraction" ;
00401 }
00402 else if ( hltConfig.size() <= 0 )
00403 {
00404
00405 hltKey = "error key of length 0" ;
00406 }
00407 else
00408 {
00409 edm::LogInfo("DQMProvInfo") << "HLT key (run) : " << hltConfig.tableName() << std::endl;
00410 hltKey = hltConfig.tableName() ;
00411 }
00412
00413 dbe_->cd() ;
00414 dbe_->setCurrentFolder( subsystemname_ + "/" + provinfofolder_) ;
00415 hHltKey_= dbe_->bookString("hltKey",hltKey);
00416
00417 return ;
00418
00419 }
00420 void
00421 DQMProvInfo::makeGtInfo(const edm::Event& e)
00422 {
00423
00424 edm::Handle<L1GlobalTriggerReadoutRecord> gtrr_handle;
00425 e.getByLabel("gtDigis", gtrr_handle);
00426 L1GlobalTriggerReadoutRecord const* gtrr = gtrr_handle.product();
00427 L1GtFdlWord fdlWord ;
00428 if (gtrr)
00429 fdlWord = gtrr->gtFdlWord();
00430 else
00431 {
00432 edm::LogWarning("DQMProvInfo") << " phys decl. bit not accessible !!!" ;
00433 physDecl_=false;
00434 return;
00435 }
00436
00437 if (fdlWord.physicsDeclared() !=1) physDecl_=false;
00438
00439
00440
00441 edm::Handle<L1GlobalTriggerEvmReadoutRecord> gtEvm_handle;
00442 e.getByLabel("gtEvmDigis", gtEvm_handle);
00443 L1GlobalTriggerEvmReadoutRecord const* gtevm = gtEvm_handle.product();
00444
00445 L1GtfeWord gtfeEvmWord;
00446 L1GtfeExtWord gtfeEvmExtWord;
00447 if (gtevm)
00448 {
00449 gtfeEvmWord = gtevm->gtfeWord();
00450 gtfeEvmExtWord = gtevm->gtfeWord();
00451 }
00452 else
00453 edm::LogInfo("DQMProvInfo") << " gtfeEvmWord inaccessible" ;
00454
00455 lhcFill_ = gtfeEvmExtWord.lhcFillNumber();
00456 beamMode_ = gtfeEvmExtWord.beamMode();
00457 momentum_ = gtfeEvmExtWord.beamMomentum();
00458 intensity1_ = gtfeEvmExtWord.totalIntensityBeam1();
00459 intensity2_ = gtfeEvmExtWord.totalIntensityBeam2();
00460
00461 edm::LogInfo("DQMProvInfo") << lhcFill_ << " " << beamMode_ << " "
00462 << momentum_ << " "
00463 << intensity1_ << " " << intensity2_
00464 << std::endl;
00465
00466 return;
00467 }