00001 #ifndef ROOTEVTSELECTOR_H
00002 #define ROOTEVTSELECTOR_H 1
00003
00004 #include "GaudiKernel/IEvtSelector.h"
00005 #include "GaudiKernel/ISvcLocator.h"
00006 #include "GaudiKernel/Service.h"
00007
00008
00009 class IAddressCreator;
00010 class IDataProviderSvc;
00011 class RootInterface;
00012 class RootEventContext;
00013 class TagFilterSvc;
00014
00015 static const InterfaceID IID_IRootEvtSelector("IRootEvtSelector", 1, 0);
00016
00029 class RootEvtSelector : virtual public Service,
00030 virtual public IEvtSelector,
00031 virtual public IProperty {
00032 public:
00033
00034 RootEvtSelector( const std::string& name, ISvcLocator* svcloc );
00035 ~RootEvtSelector();
00036
00037
00038 virtual StatusCode initialize();
00039
00040
00041 virtual StatusCode createContext(Context*& it) const;
00042 StatusCode next() const;
00043 virtual StatusCode next(Context& it) const;
00044 virtual StatusCode next(Context& it, int jump) const;
00045 virtual StatusCode previous(Context& it) const;
00046 virtual StatusCode previous(Context& it, int jump) const;
00047
00048 virtual StatusCode last(Context& it) const;
00049 virtual StatusCode rewind(Context& it) const;
00050
00051 virtual StatusCode createAddress(const Context& it,IOpaqueAddress*& iop) const;
00052 virtual StatusCode releaseContext(Context*& it) const;
00053 virtual StatusCode resetCriteria(const std::string& criteria, Context& context) const;
00054
00055 virtual StatusCode setCriteria( const std::string& criteria );
00056
00057
00058 virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvInterface);
00059
00060
00061 int getRecId() const { return (*m_recId); }
00062
00063 void getEntryFromTag() const ;
00064
00065
00066 private:
00067 enum CriteriaType {
00068 ROOT,
00069 NONE
00070 };
00071
00072
00073 StatusCode getMaxEvent();
00074
00075 RootEventContext* p_beginContext;
00076 RootEventContext* p_endContext;
00077
00078 std::string m_criteria;
00079 StringProperty m_jobInput;
00080 CriteriaType m_criteriaType;
00081
00082
00083 RootInterface* m_rootInterface;
00084
00085
00086 IAddressCreator* m_addrCreator;
00087
00088
00089 CLID m_rootCLID;
00090
00092 int m_evtMax;
00093
00095 int* m_recId;
00096
00097 TagFilterSvc* m_tagFilterSvc;
00098 };
00099
00100 #endif // RootEvtSelector_H