CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/HLTcore/plugins/HLTPrescaleRecorder.cc

Go to the documentation of this file.
00001 
00012 #include "HLTrigger/HLTcore/interface/HLTPrescaleRecorder.h"
00013 
00014 #include "CondFormats/HLTObjects/interface/HLTPrescaleTableCond.h"
00015 #include "CondFormats/DataRecord/interface/HLTPrescaleTableRcd.h"
00016 
00017 #include "DataFormats/Provenance/interface/ProcessHistory.h"
00018 
00019 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00020 
00021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00022 #include "FWCore/ParameterSet/interface/Registry.h"
00023 
00024 #include <sys/time.h>
00025 #include "DataFormats/Provenance/interface/Timestamp.h"
00026 
00027 #include<string>
00028 #include<ostream>
00029 
00030 using namespace std;
00031 using namespace edm;
00032 using namespace trigger;
00033 
00034 //
00035 // constructors and destructor
00036 //
00037 HLTPrescaleRecorder::HLTPrescaleRecorder(const edm::ParameterSet& ps) : 
00038   src_(ps.getParameter<int>("src")),
00039   run_(ps.getParameter<bool>("run")),
00040   lumi_(ps.getParameter<bool>("lumi")),
00041   event_(ps.getParameter<bool>("event")),
00042   condDB_(ps.getParameter<bool>("condDB")),
00043   psetName_(ps.getParameter<string>("psetName")),
00044   hltInputTag_(ps.getParameter<InputTag>("hltInputTag")),
00045   hltDBTag_(ps.getParameter<string>("hltDBTag")),
00046   ps_(0),
00047   db_(0),
00048   hltHandle_(),
00049   hltESHandle_(),
00050   hlt_()
00051 {
00052 
00053   LogInfo("HLTPrescaleRecorder")
00054     << "src:run-lumi-event-condDB+psetName+tags: "
00055     << src_ << ":" << run_ << "-" << lumi_ << "-" << event_ << "-"
00056     << condDB_ << "+" << psetName_ << "+"
00057     << hltInputTag_.encode() << "+" << hltDBTag_;
00058 
00059   if(edm::Service<edm::service::PrescaleService>().isAvailable()) {
00060     ps_ = edm::Service<edm::service::PrescaleService>().operator->();
00061   } else if (src_==0) {
00062     LogError("HLTPrescaleRecorder")<<"PrescaleService requested as source but unavailable!";
00063   }
00064 
00065   if (edm::Service<cond::service::PoolDBOutputService>().isAvailable()) {
00066     db_ = edm::Service<cond::service::PoolDBOutputService>().operator->();
00067   } else if (condDB_) {
00068     LogError("HLTPrescaleRecorder")<<"PoolDBOutputService requested as destination but unavailable!";
00069   }
00070 
00071   if (run_)   produces<HLTPrescaleTable,edm::InRun>("Run");
00072   if (lumi_)  produces<HLTPrescaleTable,edm::InLumi>("Lumi");
00073   if (event_) produces<HLTPrescaleTable,edm::InEvent>("Event");
00074 
00075 }
00076 
00077 HLTPrescaleRecorder::~HLTPrescaleRecorder()
00078 {
00079 }
00080 
00081 //
00082 // member functions
00083 //
00084 
00085 void HLTPrescaleRecorder::beginRun(edm::Run& iRun, const edm::EventSetup& iSetup) {
00086 
00087   hlt_=HLTPrescaleTable();
00088 
00089   if (src_==-1) {
00091     ParameterSet pPSet(getProcessParameterSet());
00092     ParameterSet iPS(pPSet.getParameter<ParameterSet>(psetName_));
00093 
00094     string defaultLabel(iPS.getUntrackedParameter<std::string>("lvl1DefaultLabel",""));
00095     vector<string> labels(iPS.getParameter<std::vector<std::string> >("lvl1Labels"));
00096     vector<ParameterSet> vpTable(iPS.getParameter<std::vector<ParameterSet> >("prescaleTable"));
00097 
00098     unsigned int set(0);
00099     const unsigned int n(labels.size());
00100     for (unsigned int i=0; i!=n; ++i) {
00101       if (labels[i]==defaultLabel) set=i;
00102     }
00103 
00104     map<string,vector<unsigned int> > table;
00105     const unsigned int m (vpTable.size());
00106     for (unsigned int i=0; i!=m; ++i) {
00107       table[vpTable[i].getParameter<std::string>("pathName")] = 
00108         vpTable[i].getParameter<std::vector<unsigned int> >("prescales");
00109     }
00110     hlt_=HLTPrescaleTable(set,labels,table);
00111 
00112   } else  if (src_==0) {
00115     if (ps_!=0) {
00116       hlt_=HLTPrescaleTable(ps_->getLvl1IndexDefault(), ps_->getLvl1Labels(), ps_->getPrescaleTable());
00117     } else {
00118       hlt_=HLTPrescaleTable();
00119       LogError("HLTPrescaleRecorder")<<"PrescaleService not found!";
00120     }
00121   } else if (src_==1) {
00123     if (iRun.getByLabel(hltInputTag_,hltHandle_)) {
00124       hlt_=*hltHandle_;
00125     } else {
00126       LogError("HLTPrescaleRecorder")<<"HLTPrescaleTable not found in Run!";
00127     }
00128   } else if (src_==4) {
00130     const HLTPrescaleTableRcd& hltRecord(iSetup.get<HLTPrescaleTableRcd>());
00131     hltRecord.get(hltDBTag_,hltESHandle_);
00132     hlt_=hltESHandle_->hltPrescaleTable();
00133   }
00134 
00135   return;
00136 }
00137 
00138 void HLTPrescaleRecorder::beginLuminosityBlock(edm::LuminosityBlock& iLumi, const edm::EventSetup& iSetup) {
00139 
00140   if (src_==0) {
00143     if (ps_!=0) {
00144       hlt_=HLTPrescaleTable(ps_->getLvl1IndexDefault(), ps_->getLvl1Labels(), ps_->getPrescaleTable());
00145     } else {
00146       hlt_=HLTPrescaleTable();
00147       LogError("HLTPrescaleRecorder")<<"PrescaleService not found!";
00148     }
00149   } else if (src_==2) {
00151     if (iLumi.getByLabel(hltInputTag_,hltHandle_)) {
00152       hlt_=*hltHandle_;
00153     } else {
00154       hlt_=HLTPrescaleTable();
00155       LogError("HLTPrescaleRecorder")<<"HLTPrescaleTable not found in LumiBlock!";
00156     }
00157   }
00158 
00159   return;
00160 }
00161 
00162 void HLTPrescaleRecorder::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
00163 
00164   if (src_==3) {
00166     if (iEvent.getByLabel(hltInputTag_,hltHandle_)) {
00167       hlt_=*hltHandle_;
00168     } else {
00169       hlt_=HLTPrescaleTable();
00170       LogError("HLTPrescaleRecorder")<<"HLTPrescaleTable not found in Event!";
00171     }
00172   }
00173 
00174   if (event_) {
00176     auto_ptr<HLTPrescaleTable> product (new HLTPrescaleTable(hlt_));
00177     iEvent.put(product,"Event");
00178   }
00179 
00180   return;
00181 }
00182 
00183 void HLTPrescaleRecorder::endLuminosityBlock(edm::LuminosityBlock& iLumi, const edm::EventSetup& iSetup) {
00184 
00185   if (lumi_) {
00187     auto_ptr<HLTPrescaleTable> product (new HLTPrescaleTable(hlt_));
00188     iLumi.put(product,"Lumi");
00189   }
00190 
00191   return;
00192 }
00193 
00194 void HLTPrescaleRecorder::endRun(edm::Run& iRun, const edm::EventSetup& iSetup) {
00195 
00197   ostringstream oss;
00198   const unsigned int n(hlt_.size());
00199   oss << "PrescaleTable: # of labels = " << n << endl;
00200   const vector<string>& labels(hlt_.labels());
00201   for (unsigned int i=0; i!=n; ++i) {
00202     oss << " " << i << "/'" << labels.at(i) << "'";
00203   }
00204   oss << endl;
00205   const map<string,vector<unsigned int> >& table(hlt_.table());
00206   oss << "PrescaleTable: # of paths = " << table.size() << endl;
00207   const map<string,vector<unsigned int> >::const_iterator tb(table.begin());
00208   const map<string,vector<unsigned int> >::const_iterator te(table.end());
00209   for (map<string,vector<unsigned int> >::const_iterator ti=tb; ti!=te; ++ti) {
00210     for (unsigned int i=0; i!=n; ++i) {
00211       oss << " " << ti->second.at(i);
00212     }
00213     oss << " " << ti->first << endl;
00214   }
00215   LogVerbatim("HLTPrescaleRecorder") << oss.str();
00216 
00217   if (run_) {
00219     auto_ptr<HLTPrescaleTable> product (new HLTPrescaleTable(hlt_));
00220     iRun.put(product,"Run");
00221   }
00222 
00223   if (condDB_) {
00225     if (db_!=0) {
00226       HLTPrescaleTableCond* product (new HLTPrescaleTableCond(hlt_));
00227       const string rcdName("HLTPrescaleTableRcd");
00228       if ( db_->isNewTagRequest(rcdName) ) {
00229         db_->createNewIOV<HLTPrescaleTableCond>(product,
00230               db_->beginOfTime(),db_->endOfTime(),rcdName);
00231       } else {
00232         ::timeval tv;
00233         gettimeofday(&tv,0);
00234         edm::Timestamp tstamp((unsigned long long)tv.tv_sec);
00235         db_->appendSinceTime<HLTPrescaleTableCond>(product,
00236 //            db_->currentTime()
00237               tstamp.value()
00238                 ,rcdName);
00239       }
00240     } else {
00241       LogError("HLTPrescaleRecorder") << "PoolDBOutputService not available!";
00242     }
00243   }
00244 
00245   return;
00246 }