00001 #include "Event/rTreeBase.h"
00002
00003 #include "TFile.h"
00004 #include "TTree.h"
00005
00006
00007 template<class rCore> void rTreeBase<rCore>::open()
00008
00009 {
00010 rTFileBase::open();
00011 if (!isOpen()) return;
00012
00013 m_core->Create();
00014 getFile()->cd();
00015
00016 if (getMode() == IOBase::READ) {
00017 m_RTree = (TTree*) gDirectory->Get("T");
00018 m_RTree->SetBranchAddress(className(),&m_core);
00019 setNumEvents(m_RTree->GetEntries());
00020 } else if (getMode() == IOBase::WRITE) {
00021 m_RTree = new TTree("T", "TreeBase");
00022 TBranch* branch = m_RTree->Branch(className(),className(),&m_core, bufsize, split);
00023 }
00024 }
00025
00026 template<class rCore> void rTreeBase<rCore>::readEvent()
00027
00028 {
00029
00030 if (m_RTree == 0) return;
00031 if (!isOpen()) return;
00032 if (getMode() != IOBase::READ) return;
00033
00034 IOfileVI::readEvent();
00035
00036 m_core->Clean();
00037 m_RFile->cd();
00038
00039 Int_t nb = 0,nbytes = 0;
00040 nb = m_RTree->GetEvent((Int_t) eventNumber());
00041 nbytes += nb;
00042
00043
00044 }
00045
00046 template<class rCore> void rTreeBase<rCore>::writeEvent()
00047
00048 {
00049
00050 if (m_RTree == 0) return;
00051 if (!isOpen()) return;
00052 if (getMode() != IOBase::WRITE) return;
00053
00054 IOfileVI::writeEvent();
00055
00056 m_RFile->cd();
00057 m_RTree->Fill();
00058
00059 m_core->Clean();
00060 m_core->Create();
00061
00062 }
00063
00064
00065 template<class rCore> void rTreeBase<rCore>::clear()
00066
00067 {
00068 if (m_RTree !=0) delete m_RTree;
00069
00070 m_RTree = 0;
00071
00072 bufsize = 64000;
00073 split = 1;
00074
00075 rTFileBase::clear();
00076 }
00077
00078
00079