00001
00016 #ifndef DYBINPUTLOADTOOL
00017 #define DYBINPUTLOADTOOL
00018
00019 #include "GaudiAlg/GaudiTool.h"
00020 #include "DybIO/IDybInputLoadTool.h"
00021
00022 #include <string>
00023 #include <map>
00024
00025 class IRootIOSvc;
00026 class IConversionSvc;
00027 class RootInputStream;
00028 class PerHeaderObject;
00029 class DataObject;
00030
00031 class DybInputLoadTool : public GaudiTool,
00032 virtual public IDybInputLoadTool
00033 {
00034 public:
00035 DybInputLoadTool(const std::string& type,
00036 const std::string& name,
00037 const IInterface* parent);
00038
00039 virtual ~DybInputLoadTool();
00040
00041 StatusCode queryInterface( const InterfaceID& riid, void** ppvIf );
00042
00043 virtual StatusCode initialize();
00044 virtual StatusCode finalize();
00045
00046
00047
00048
00049 DayaBay::HeaderObject*
00050 get_header(int entry, const std::string& path,
00051 bool input_headers = true, int fileNumber = -1);
00052
00053 IDybInputLoadTool::ExecutionFrame
00054 get_frame(int entry, const std::string& path =
00055 DayaBay::RegistrationSequenceLocation::Default,
00056 bool input_headers = true);
00057
00058 int get_entries(const std::string& path);
00059
00060 private:
00061
00062 RootInputStream* get_stream(const std::string& path);
00063
00064 template<class PerType>
00065 PerType* get_pobj(int entry, const std::string& path, int fileNumber = -1);
00066
00067 DataObject* get_dataobject(int clID, const std::string& path);
00068
00069 std::string m_rioSvcName, m_convSvcName;
00070 IRootIOSvc* m_rioSvc;
00071 IConversionSvc* m_convSvc;
00072
00073 typedef std::pair<int,std::string> HoID;
00074 typedef std::map<HoID,DayaBay::HeaderObject*> HoCache;
00075 HoCache m_hocache;
00076 bool m_cache_hos;
00077
00078 };
00079
00080 #endif // DYBINPUTLOADTOOL