00001 #ifndef ROOTHISTCNV_RNTUPLECNV_H
00002 #define ROOTHISTCNV_RNTUPLECNV_H 1
00003
00004
00005 #include "RConverter.h"
00006
00007
00008 class ISvcLocator;
00009 class NTUPLEINFO;
00010 class INTupleItem;
00011 class INTupleSvc;
00012 class INTuple;
00013 class TTree;
00014
00015 namespace RootHistCnv {
00016
00024 class RNTupleCnv : public RConverter {
00025 public:
00027 virtual StatusCode initialize();
00029 virtual StatusCode finalize();
00030
00032 virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& refpObj);
00034 virtual StatusCode updateObj( IOpaqueAddress* pAddr, DataObject* refpObj);
00036 virtual StatusCode createRep( DataObject* pObj, IOpaqueAddress*& refpAddr);
00038 virtual StatusCode updateRep( IOpaqueAddress* pAddr, DataObject* pObj);
00039
00040 protected:
00042 RNTupleCnv( ISvcLocator* svc, const CLID& clid );
00043
00045 virtual ~RNTupleCnv();
00046
00048 virtual StatusCode load(TTree* tree, INTuple*& refpObj ) = 0;
00050 virtual StatusCode book(const std::string& desc, INTuple* pObj, TTree*& tree) = 0;
00052 virtual StatusCode writeData(TTree* rtree, INTuple* pObj) = 0;
00054 virtual StatusCode readData(TTree* rtree, INTuple* pObj, long ievt) = 0;
00055
00056 protected:
00058 INTupleSvc* m_ntupleSvc;
00059
00060 virtual std::string rootVarType(int);
00061 };
00062
00064 template<class TYP>
00065 INTupleItem* createNTupleItem(NTUPLEINFO& tags, long i, INTuple* tuple, TYP minimum, TYP maximum, long& size);
00066
00067 template<class TYP>
00068 INTupleItem* createNTupleItem(std::string itemName, std::string blockName,
00069 std::string indexName,
00070 int indexRange, int arraySize,
00071 TYP minimum, TYP maximum,
00072 INTuple* tuple);
00073
00074 bool parseName(std::string full, std::string &blk, std::string &var);
00075
00076 }
00077
00078 #endif // RootHistCnv_RNTupleCnv_H