00001
00002
00003
00004
00005
00006
00007
00008 #ifndef GAUDI_NTUPLESVC_H
00009 #define GAUDI_NTUPLESVC_H 1
00010
00011
00012 #include "GaudiKernel/INTupleSvc.h"
00013 #include "GaudiKernel/IDataSourceMgr.h"
00014 #include "GaudiKernel/DataSvc.h"
00015
00016
00017 #include <map>
00018
00019
00020 template <class TYPE> class SvcFactory;
00021
00047 class NTupleSvc : public DataSvc,
00048 virtual public INTupleSvc,
00049 virtual public IDataSourceMgr
00050 {
00051 private:
00052 protected:
00053 friend class SvcFactory<NTupleSvc>;
00054 typedef std::vector< std::string > DBaseEntries;
00055 typedef std::map<std::string, IConversionSvc*> Connections;
00056 typedef std::pair<std::string,std::string> Prop;
00057
00058 private:
00059 public:
00061 virtual StatusCode initialize();
00063 virtual StatusCode finalize();
00065 virtual StatusCode queryInterface(const IID& riid, void** ppvInterface);
00067 virtual StatusCode loadObject(IDataDirectory* pDirectory);
00068
00070 virtual NTuple::Directory* createDirectory (DataObject* pParent, const std::string& title);
00072 virtual NTuple::Directory* createDirectory (DataObject* pParent, long id);
00074 virtual NTuple::Directory* createDirectory (const std::string& dirPath, long id);
00076 virtual NTuple::Directory* createDirectory (const std::string& dirPath, const std::string& title);
00078 virtual NTuple::Directory* createDirectory (const std::string& fullPath);
00079
00081 virtual StatusCode create(const CLID& typ, const std::string& title, NTuple::Tuple*& refpTuple);
00083 virtual NTuple::Tuple* book (const std::string& fullPath, const CLID& type, const std::string& title);
00085 virtual NTuple::Tuple* book (const std::string& dirPath, const std::string& relPath, const CLID& type, const std::string& title);
00087 virtual NTuple::Tuple* book (const std::string& dirPath, long id, const CLID& type, const std::string& title);
00089 virtual NTuple::Tuple* book (DataObject* pParent, const std::string& relPath, const CLID& type, const std::string& title);
00091 virtual NTuple::Tuple* book (DataObject* pParent, long id, const CLID& type, const std::string& title);
00093 virtual NTuple::Tuple* access(const std::string& fullPath, const std::string& filename);
00095 virtual StatusCode save(const std::string& fullPath);
00097 virtual StatusCode save(NTuple::Tuple* tuple);
00099 virtual StatusCode save(DataObject* pParent, const std::string& relPath);
00101 virtual StatusCode writeRecord( NTuple::Tuple* tuple );
00103 virtual StatusCode writeRecord( const std::string& fullPath );
00105 virtual StatusCode writeRecord( DataObject* pParent, const std::string& relPath );
00107 virtual StatusCode readRecord( NTuple::Tuple* tuple );
00109 virtual StatusCode readRecord( const std::string& fullPath );
00111 virtual StatusCode readRecord( DataObject* pParent, const std::string& relPath);
00112
00114 virtual bool isConnected(const std::string& identifier) const;
00116 virtual StatusCode connect(const std::string& ident);
00118 virtual StatusCode connect(const std::string& ident, std::string& logname);
00120 virtual StatusCode disconnect(const std::string& nam);
00122 virtual StatusCode disconnectAll();
00123
00124 protected:
00126 NTupleSvc(const std::string& name, ISvcLocator* svc);
00128 virtual ~NTupleSvc();
00129
00131 StatusCode connectToHistogramPersistency(const std::string& nam, const std::string& svtTyp, const std::vector<Prop>& props, IConversionSvc*& pSvc);
00133 StatusCode createService(const std::string& nam, const std::string& svtTyp, const std::vector<Prop>& props, IConversionSvc*& pSvc);
00135 StatusCode attachTuple(const std::string& filename, const std::string& logname, const char typ, unsigned char t);
00137 StatusCode updateDirectories();
00138
00140 DBaseEntries m_output;
00142 DBaseEntries m_input;
00144 std::string m_storeName;
00146 Connections m_connections;
00147 };
00148
00149 #endif // GAUDI_NTUPLESVC_H