CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/FWCore/Common/interface/EventBase.h

Go to the documentation of this file.
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