![]() |
![]() |
00001 // -*- C++ -*- 00002 // 00003 // Package: BTagPerformaceRootProducerFromSQLITE 00004 // Class: BTagPerformaceRootProducerFromSQLITE 00005 // 00013 // 00014 // Original Author: "Salvatore Rappoccio" 00015 // Created: Thu Feb 11 14:21:59 CST 2010 00016 // $Id: BTagPerformaceRootProducerFromSQLITE.cc,v 1.3 2010/06/04 18:04:31 srappocc Exp $ 00017 // 00018 // 00019 00020 00021 // system include files 00022 #include <memory> 00023 00024 // user include files 00025 #include "FWCore/Framework/interface/Frameworkfwd.h" 00026 #include "FWCore/Framework/interface/EDAnalyzer.h" 00027 #include "FWCore/Framework/interface/ESHandle.h" 00028 #include "FWCore/Framework/interface/ESWatcher.h" 00029 00030 #include "FWCore/Framework/interface/Event.h" 00031 #include "FWCore/Framework/interface/MakerMacros.h" 00032 00033 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00034 00035 #include "FWCore/ServiceRegistry/interface/Service.h" 00036 #include "CommonTools/UtilAlgos/interface/TFileService.h" 00037 00038 #include "PhysicsTools/CondLiteIO/interface/RecordWriter.h" 00039 #include "DataFormats/Provenance/interface/ESRecordAuxiliary.h" 00040 #include "DataFormats/FWLite/interface/format_type_name.h" 00041 00042 #include "RecoBTag/Records/interface/BTagPerformanceRecord.h" 00043 #include "RecoBTag/PerformanceDB/interface/BtagPerformance.h" 00044 00045 #include "CondFormats/PhysicsToolsObjects/interface/BinningPointByMap.h" 00046 00047 00048 00049 // 00050 // class declaration 00051 // 00052 00053 class BTagPerformaceRootProducerFromSQLITE : public edm::EDAnalyzer { 00054 public: 00055 explicit BTagPerformaceRootProducerFromSQLITE(const edm::ParameterSet&); 00056 ~BTagPerformaceRootProducerFromSQLITE(); 00057 00058 00059 private: 00060 virtual void beginJob() ; 00061 virtual void analyze(const edm::Event&, const edm::EventSetup&); 00062 virtual void endJob() ; 00063 00064 // ----------member data --------------------------- 00065 std::vector<std::string> names_; 00066 edm::ESWatcher<BTagPerformanceRecord> recWatcher_; 00067 std::auto_ptr<fwlite::RecordWriter> writer_; 00068 edm::IOVSyncValue lastValue_; 00069 }; 00070 00071 // 00072 // constants, enums and typedefs 00073 // 00074 00075 // 00076 // static data member definitions 00077 // 00078 00079 // 00080 // constructors and destructor 00081 // 00082 BTagPerformaceRootProducerFromSQLITE::BTagPerformaceRootProducerFromSQLITE(const edm::ParameterSet& iConfig) : 00083 names_(iConfig.getParameter< std::vector<std::string> >("names")) 00084 { 00085 } 00086 00087 00088 BTagPerformaceRootProducerFromSQLITE::~BTagPerformaceRootProducerFromSQLITE() 00089 { 00090 } 00091 00092 00093 // 00094 // member functions 00095 // 00096 00097 // ------------ method called to for each event ------------ 00098 void 00099 BTagPerformaceRootProducerFromSQLITE::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) 00100 { 00101 00102 std::cout << "Hello from BTagPerformaceRootProducerFromSQLITE!" << std::endl; 00103 if(recWatcher_.check(iSetup)) { 00104 const BTagPerformanceRecord& r = iSetup.get<BTagPerformanceRecord>(); 00105 00106 if(! writer_.get()) { 00107 edm::Service<TFileService> fs ; 00108 TFile * f = &(fs->file()); 00109 writer_ = std::auto_ptr<fwlite::RecordWriter>(new fwlite::RecordWriter(r.key().name(), f )); 00110 } 00111 lastValue_ = r.validityInterval().last(); 00112 00113 for( size_t i=0; i<names_.size(); i++ ) 00114 { 00115 edm::ESHandle<BtagPerformance> perfH; 00116 std::cout <<" Studying performance with label " << names_.at(i) <<std::endl; 00117 r.get( names_.at(i), perfH ); 00118 const BtagPerformance & perf = *(perfH.product()); 00119 00120 writer_->update(&(perf.payload()), typeid(PerformancePayload),names_.at(i).c_str()); 00121 writer_->update(&(perf.workingPoint()), typeid(PerformanceWorkingPoint),names_.at(i).c_str()); 00122 } 00123 writer_->fill(edm::ESRecordAuxiliary(r.validityInterval().first().eventID(), 00124 r.validityInterval().first().time())); 00125 } 00126 } 00127 00128 00129 // ------------ method called once each job just before starting event loop ------------ 00130 void 00131 BTagPerformaceRootProducerFromSQLITE::beginJob() 00132 { 00133 } 00134 00135 // ------------ method called once each job just after ending the event loop ------------ 00136 void 00137 BTagPerformaceRootProducerFromSQLITE::endJob() { 00138 /*if(writer_.get()) { 00139 writer_->fill(edm::ESRecordAuxiliary(lastValue_.eventID(), 00140 lastValue_.time())); 00141 writer_->write(); 00142 } */ 00143 } 00144 00145 //define this as a plug-in 00146 DEFINE_FWK_MODULE(BTagPerformaceRootProducerFromSQLITE);