00001 #ifndef _RootEventBaseCnv_H 00002 #define _RootEventBaseCnv_H 1 00003 00004 #include <vector> 00005 #include <string> 00006 #include <map> 00007 #include "TArrayS.h" 00008 #include "GaudiKernel/Converter.h" 00009 #include "GaudiKernel/CnvFactory.h" 00010 #include "GaudiKernel/IDataProviderSvc.h" 00011 00012 #include "RootInterface.h" 00013 #include "RootCnvSvc.h" 00014 00015 #include <iostream> 00016 00017 class RootAddress; 00018 class DataObject; 00019 class TObject; 00020 class RootEvtSelector; 00021 00022 extern const long int ROOT_StorageType; 00023 00036 class RootEventBaseCnv : public Converter { 00037 protected: 00038 00039 RootCnvSvc* m_cnvSvc; 00040 std::vector<RootCnvSvc::Leaf> m_leaves; 00041 00043 RootInterface* m_rootInterface; 00044 00046 IDataProviderSvc* m_eds; 00047 00049 int m_branchNr; 00050 int m_branchNrDst; 00051 int m_branchNrMc; 00052 int m_branchNrRecon; 00053 int m_branchNrEvtRec; 00054 int m_branchNrEvtHeader; 00055 int m_branchNrEvtNavigator; 00056 00058 TObject *m_objRead; 00059 00061 CLID CLID_top; 00062 00064 TArrayS *m_branchNumbers; 00065 00067 std::string m_rootBranchname; 00069 std::string m_rootTreename; 00070 00071 std::string m_currentFileName; 00073 std::vector<void *> m_adresses; 00074 00075 RootEvtSelector* m_evtsel; 00076 00077 public: 00078 00079 RootEventBaseCnv(const CLID& clid, ISvcLocator* svc); 00080 00081 virtual ~RootEventBaseCnv() { }; 00082 00084 static const unsigned char storageType() { 00085 return ROOT_StorageType; 00086 } 00087 00088 virtual long repSvcType() const { 00089 return ROOT_StorageType; 00090 } 00091 00092 virtual StatusCode initialize(); 00093 00094 virtual StatusCode finalize(); 00095 00097 void declareObject(const std::string& fullPath, const CLID& clid, 00098 const std::string& treename, 00099 const std::string& branchname ); 00100 00102 virtual StatusCode createObj(IOpaqueAddress* addr, 00103 DataObject*& dat ); 00104 00106 virtual StatusCode createRep(DataObject* pObject, 00107 IOpaqueAddress*& refpAddress); 00108 00110 virtual StatusCode fillRepRefs(IOpaqueAddress* pAddress, 00111 DataObject* pObject); 00112 00114 virtual StatusCode fillObjRefs(IOpaqueAddress* pAddress, 00115 DataObject* pObject); 00116 00118 virtual StatusCode DataObjectToTObject(DataObject* dat, 00119 RootAddress* addr) =0; 00120 00122 virtual StatusCode TObjectToDataObject(DataObject*& dat) =0; 00123 00125 TObject* getReadObject() const { return m_objRead;} 00126 00127 }; 00128 00129 00130 #endif // _RootEventBaseCnv_H 00131 00132 00133 00134