![]() |
![]() |
00001 #ifndef FWCore_Common_EventBase_h 00002 #define FWCore_Common_EventBase_h 00003 // -*- C++ -*- 00004 // 00005 // Package: FWCore/Common 00006 // Class : EventBase 00007 // 00018 // 00019 // Original Author: Chris Jones 00020 // Created: Thu Aug 27 11:01:06 CDT 2009 00021 // 00022 #if !defined(__CINT__) && !defined(__MAKECINT__) 00023 00024 // system include files 00025 #include <typeinfo> 00026 #include <string> 00027 00028 // user include files 00029 #include "FWCore/Utilities/interface/InputTag.h" 00030 #include "DataFormats/Common/interface/BasicHandle.h" 00031 #include "DataFormats/Common/interface/Handle.h" 00032 #include "DataFormats/Common/interface/ConvertHandle.h" 00033 #include "DataFormats/Common/interface/Wrapper.h" 00034 00035 #include "DataFormats/Provenance/interface/EventAuxiliary.h" 00036 #include "DataFormats/Provenance/interface/EventID.h" 00037 #include "DataFormats/Provenance/interface/Timestamp.h" 00038 #include "FWCore/Common/interface/TriggerResultsByName.h" 00039 00040 namespace edm { 00041 00042 class TriggerResults; 00043 class TriggerNames; 00044 00045 class EventBase { 00046 00047 public: 00048 EventBase(); 00049 virtual ~EventBase(); 00050 00051 // ---------- const member functions --------------------- 00052 template <class T> 00053 bool getByLabel(const InputTag&, Handle<T>&) const; 00054 00055 // AUX functions. 00056 edm::EventID id() const {return eventAuxiliary().id();} 00057 edm::Timestamp time() const {return eventAuxiliary().time();} 00058 edm::LuminosityBlockNumber_t 00059 luminosityBlock() const {return eventAuxiliary().luminosityBlock();} 00060 bool isRealData() const {return eventAuxiliary().isRealData();} 00061 edm::EventAuxiliary::ExperimentType experimentType() const {return eventAuxiliary().experimentType();} 00062 int bunchCrossing() const {return eventAuxiliary().bunchCrossing();} 00063 int orbitNumber() const {return eventAuxiliary().orbitNumber();} 00064 virtual edm::EventAuxiliary const& eventAuxiliary() const =0; 00065 00066 virtual TriggerNames const& triggerNames(edm::TriggerResults const& triggerResults) const = 0; 00067 virtual TriggerResultsByName triggerResultsByName(std::string const& process) const = 0; 00068 virtual ProcessHistory const& processHistory() const = 0; 00069 00070 protected: 00071 00072 static TriggerNames const* triggerNames_(edm::TriggerResults const& triggerResults); 00073 00074 private: 00075 //EventBase(const EventBase&); // allow default 00076 00077 //const EventBase& operator=(const EventBase&); // allow default 00078 00079 virtual BasicHandle getByLabelImpl(const std::type_info& iWrapperType, const std::type_info& iProductType, const InputTag& iTag) const = 0; 00080 // ---------- member data -------------------------------- 00081 00082 }; 00083 00084 template <class T> 00085 bool 00086 EventBase::getByLabel(const InputTag& tag, Handle<T>& result) const { 00087 result.clear(); 00088 BasicHandle bh = this->getByLabelImpl(typeid(edm::Wrapper<T>), typeid(T), tag); 00089 convert_handle(bh, result); // throws on conversion error 00090 if (bh.failedToGet()) { 00091 return false; 00092 } 00093 return true; 00094 } 00095 00096 } 00097 #endif 00099 #endif