CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/DQMServices/Components/src/DQMProvInfo.cc

Go to the documentation of this file.
00001 /*
00002  * \file DQMProvInfo.cc
00003  * \author A.Raval / A.Meyer - DESY
00004  * Last Update:
00005  * $Date: 2010/09/20 15:25:20 $
00006  * $Revision: 1.29 $
00007  * $Author: lilopera $
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   // initialize
00034   nameProcess_ = "HLT"; // the process name is not contained in this ps
00035   gotProcessParameterSet_=false;
00036   physDecl_=true; // set true and switch off in case a single event in a given LS does not have it set.
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   // initialize
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     //fetch the real process name
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   // set to previous in case there was a jump or no previous fill
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   // fill dcs vs lumi
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     // set next lumi to -1 for better visibility
00212     if (nlumi < XBINS)
00213       reportSummaryMap_->setBinContent(nlumi+1,i+1,-1.);
00214     dcs25[i]=true;
00215   }
00216 
00217   // fill physics decl. bit in y bin 26
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   // fill 7 TeV bit in y bin 27
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   // fill stable beams bit in y bin 28
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   // reset   
00267   physDecl_=true;  
00268   lastlumi_=nlumi;
00269 
00270   return;
00271   
00272 }
00273 
00274 // run showtag command line
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     // if (dbe_->get("ProvInfo/CMSSW")) return ;
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     //versDataset_   = dbe_->bookString("Dataset",workflow_);
00341     versGlobaltag_ = dbe_->bookString("Globaltag",globalTag_);
00342     versTaglist_   = dbe_->bookString("Taglist",getShowTags()); 
00343 
00344     isComplete_ = dbe_->bookInt("runIsComplete"); 
00345     //isComplete_->Fill((runIsComplete_?1:0));
00346     fileVersion_ = dbe_->bookInt("fileVersion");
00347     //fileVersion_->Fill(version_);
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       // edm::LogInfo("DQMProvInfo") << "DCS status: 0x" << std::hex << dcsStatusItr->ready() << std::dec << std::endl;
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     // edm::LogInfo("DQMProvInfo") << "errorHltConfigExtraction" << std::endl;
00400     hltKey = "error extraction" ;
00401   } 
00402   else if ( hltConfig.size() <= 0 ) 
00403   {
00404    // edm::LogInfo("DQMProvInfo") << "hltConfig" << std::endl;
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   // cout << "phys decl. bit =" << static_cast<int>(fdlWord.physicsDeclared()) << endl;
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 }