CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/DQMServices/Components/src/DQMDcsInfo.cc

Go to the documentation of this file.
00001 /*
00002  * \file DQMDcsInfo.cc
00003  * \author A.Meyer - DESY
00004  * Last Update:
00005  * $Date: 2010/03/29 18:34:06 $
00006  * $Revision: 1.2 $
00007  * $Author: ameyer $
00008  *
00009  */
00010 
00011 #include "DQMDcsInfo.h"
00012 #include "DataFormats/Scalers/interface/DcsStatus.h"
00013 #include "DataFormats/Common/interface/Handle.h"
00014 #include "DataFormats/L1GlobalTrigger/interface/L1GtFdlWord.h"
00015 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00016 
00017 // Framework
00018 
00019 const static int XBINS=2000;
00020 
00021 DQMDcsInfo::DQMDcsInfo(const edm::ParameterSet& ps)
00022 {
00023   
00024   parameters_ = ps;
00025 
00026   dbe_ = edm::Service<DQMStore>().operator->();
00027 
00028   subsystemname_ = parameters_.getUntrackedParameter<std::string>("subSystemFolder", "Info") ;
00029   dcsinfofolder_ = parameters_.getUntrackedParameter<std::string>("dcsInfoFolder", "DcsInfo") ;
00030   
00031   // initialize
00032   for (int i=0;i<25;i++) dcs[i]=true;
00033 }
00034 
00035 DQMDcsInfo::~DQMDcsInfo(){
00036 }
00037 
00038 void 
00039 DQMDcsInfo::beginRun(const edm::Run& r, const edm::EventSetup &c ) {
00040 
00041   dbe_->cd();  
00042   dbe_->setCurrentFolder(subsystemname_ + "/" + dcsinfofolder_);
00043 
00044   DCSbyLS_=dbe_->book1D("DCSbyLS","DCS",25,0.,25.);
00045   DCSbyLS_->setLumiFlag();
00046 
00047   // initialize
00048   for (int i=0;i<25;i++) dcs[i]=true;
00049 } 
00050 
00051 void DQMDcsInfo::analyze(const edm::Event& e, const edm::EventSetup& c){
00052  
00053   makeDcsInfo(e);
00054   makeGtInfo(e);
00055 
00056   return;
00057 }
00058 
00059 void
00060 DQMDcsInfo::endLuminosityBlock(const edm::LuminosityBlock& l, const edm::EventSetup& c)
00061 {
00062   // int nlumi = l.id().luminosityBlock();
00063 
00064   // fill dcs vs lumi 
00065   /* set those bins 0 for which bits are ON 
00066      needed for merge off lumi histograms across files */
00067   for (int i=0;i<25;i++)
00068   {
00069     if (dcs[i])
00070       DCSbyLS_->setBinContent(i+1,0.);
00071     else
00072       DCSbyLS_->setBinContent(i+1,1.);
00073 
00074     dcs[i]=true;
00075   }
00076 
00077   return;
00078 }
00079 
00080 void 
00081 DQMDcsInfo::makeDcsInfo(const edm::Event& e)
00082 {
00083 
00084   edm::Handle<DcsStatusCollection> dcsStatus;
00085   if ( ! e.getByLabel("scalersRawToDigi", dcsStatus) )
00086   {
00087     for (int i=0;i<24;i++) dcs[i]=false;
00088     return;
00089   }
00090   
00091   if ( ! dcsStatus.isValid() ) 
00092   {
00093     edm::LogWarning("DQMDcsInfo") << "scalersRawToDigi not found" ;
00094     for (int i=0;i<24;i++) dcs[i]=false; // info not available: set to false
00095     return;
00096   }
00097     
00098   for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin(); 
00099                             dcsStatusItr != dcsStatus->end(); ++dcsStatusItr) 
00100   {
00101       if (!dcsStatusItr->ready(DcsStatus::CSCp))   dcs[0]=false;
00102       if (!dcsStatusItr->ready(DcsStatus::CSCm))   dcs[1]=false;   
00103       if (!dcsStatusItr->ready(DcsStatus::DT0))    dcs[2]=false;
00104       if (!dcsStatusItr->ready(DcsStatus::DTp))    dcs[3]=false;
00105       if (!dcsStatusItr->ready(DcsStatus::DTm))    dcs[4]=false;
00106       if (!dcsStatusItr->ready(DcsStatus::EBp))    dcs[5]=false;
00107       if (!dcsStatusItr->ready(DcsStatus::EBm))    dcs[6]=false;
00108       if (!dcsStatusItr->ready(DcsStatus::EEp))    dcs[7]=false;
00109       if (!dcsStatusItr->ready(DcsStatus::EEm))    dcs[8]=false;
00110       if (!dcsStatusItr->ready(DcsStatus::ESp))    dcs[9]=false;
00111       if (!dcsStatusItr->ready(DcsStatus::ESm))    dcs[10]=false; 
00112       if (!dcsStatusItr->ready(DcsStatus::HBHEa))  dcs[11]=false;
00113       if (!dcsStatusItr->ready(DcsStatus::HBHEb))  dcs[12]=false;
00114       if (!dcsStatusItr->ready(DcsStatus::HBHEc))  dcs[13]=false; 
00115       if (!dcsStatusItr->ready(DcsStatus::HF))     dcs[14]=false;
00116       if (!dcsStatusItr->ready(DcsStatus::HO))     dcs[15]=false;
00117       if (!dcsStatusItr->ready(DcsStatus::BPIX))   dcs[16]=false;
00118       if (!dcsStatusItr->ready(DcsStatus::FPIX))   dcs[17]=false;
00119       if (!dcsStatusItr->ready(DcsStatus::RPC))    dcs[18]=false;
00120       if (!dcsStatusItr->ready(DcsStatus::TIBTID)) dcs[19]=false;
00121       if (!dcsStatusItr->ready(DcsStatus::TOB))    dcs[20]=false;
00122       if (!dcsStatusItr->ready(DcsStatus::TECp))   dcs[21]=false;
00123       if (!dcsStatusItr->ready(DcsStatus::TECm))   dcs[22]=false;
00124       if (!dcsStatusItr->ready(DcsStatus::CASTOR)) dcs[23]=false;
00125   }
00126       
00127   return ;
00128 }
00129 
00130 void 
00131 DQMDcsInfo::makeGtInfo(const edm::Event& e)
00132 {
00133 
00134   edm::Handle<L1GlobalTriggerReadoutRecord> gtrr_handle;
00135   if ( ! e.getByLabel("gtDigis", gtrr_handle) ) 
00136   {
00137     dcs[24]=false; // info not available: set to false
00138     return;
00139   }
00140   
00141   if ( ! gtrr_handle.isValid() ) 
00142   {
00143     edm::LogWarning("DQMDcsInfo") << " gtDigis not found" ;
00144     dcs[24]=false; // info not available: set to false
00145     return;
00146   }
00147   
00148   L1GlobalTriggerReadoutRecord const* gtrr = gtrr_handle.product();
00149   L1GtFdlWord fdlWord ; 
00150   if (gtrr)
00151     fdlWord = gtrr->gtFdlWord();
00152   else
00153   {
00154     edm::LogWarning ("DQMDcsInfo") << " phys decl. bit not accessible !!!";
00155     dcs[24]=false; // info not available: set to false
00156     return;
00157   }
00158 
00159   if (fdlWord.physicsDeclared() !=1) dcs[24]=false;
00160 
00161   return;
00162 }