1 #ifndef ROOT_StTree 2 #define ROOT_StTree 3 4 5 6 #include "TSystem.h" 7 #include "TROOT.h" 8 #include "TFile.h" 9 #include "TList.h" 10 #include "TDataSet.h" 11 #include "St_ObjectSet.h" 12 #include "TDataSetIter.h" 13 #include "StFileI.h" 14 15 16 17 class StIO 18 { 19 20 public: 21 22 static Int_t Write (TFile *file, const StUKey &ukey, TObject *obj); 23 static TObject *Read (TFile *file, const char *name); 24 static TObject *Read (TFile *file, const StUKey &ukey); 25 static Int_t GetNextKey(TFile *file, StUKey &ukey, ULong_t &handle); 26 static TObject *ReadNext (TFile *file, StUKey &ukey, ULong_t &handle); 27 static TString RFIOName (const char *name); 28 static TFile *Open (const char *name, Option_t *option="",const char *title="",Int_t compress=1); 29 static Int_t IfExi(const char *file); 30 static void SetDebug(Int_t dblev=1){fgDebug=dblev;} 31 static Int_t fgDebug; 32 }; 33 34 class StTree; 35 class StBranch : public TDataSet { 36 //friend class StBranch; 37 friend class StTree; 38 public: 39 StBranch(const char *name="", StTree* parent=0,Option_t *opt=0); 40 ~StBranch(); 41 42 virtual void SetIOMode(Option_t *iomode="0"); 43 virtual Option_t *GetIOMode(); 44 virtual void SetOption(Option_t *opt); 45 virtual Option_t *GetOption() const {return fOption;}; 46 virtual Bool_t IsOption(Option_t *opt) const 47 {return fOption.Contains(opt,TString::kIgnoreCase);}; 48 virtual Int_t UpdateFile(const char *file); 49 virtual const char *GetFile(); 50 virtual Int_t SetFile(const char *file,const char *iomode=0,int insist=0); 51 virtual Int_t SetTFile(TFile *tfile); 52 virtual TFile *GetTFile(){return fTFile;}; 53 virtual void SetName(const char *name){fUKey=name;TDataSet::SetName(name);}; 54 virtual void SetUKey(Int_t ukey){fUKey=ukey;}; 55 virtual StUKey GetUKey() const {return fUKey;}; 56 virtual Int_t GetNEvents() const {return fNEvents;}; 57 virtual Int_t GetEvent(Int_t mode); 58 virtual Int_t ReadEvent (const StUKey &ukey); 59 virtual Int_t NextEvent ( StUKey &ukey); 60 virtual Int_t NextEvent (); 61 virtual Int_t WriteEvent(const StUKey &ukey); 62 virtual void Clear(const char *opt=0); 63 virtual void Close(const char *opt=0); 64 virtual Int_t Open(); 65 virtual Int_t GetDebug(){return fDebug;}; 66 virtual void SetDebug(int dbl=1){fDebug=dbl;}; 67 68 protected: 69 virtual void OpenTFile(); 70 void SetParAll(TDataSet *parNew,TDataSet *parOld, TList *savList); 71 void SetParAll(TList *savList); 72 Int_t fNEvents; // Number of written events in file 73 StUKey fUKey; //! Current RunEvent number 74 char fIOMode; //! 1=ReadOnly; 2=WriteOnly; 1+2=Update;0=do nothing 75 TString fFile; // File name 76 TString fOption; // Option string 77 TFile *fTFile; //! Opened TFile 78 Int_t fDebug; //! debug level 79 ULong_t fHandle; //! 80 ClassDef(StBranch,1) 81 }; 82 83 84 class StTree : public StBranch { 85 public: 86 StTree(const char *name=""); 87 ~StTree(); 88 89 virtual void SetIOMode (Option_t *iomode="0"); //Set for all branches 90 virtual Int_t ReadEvent (const StUKey &ukey); 91 virtual Int_t NextEvent ( StUKey &ukey); 92 virtual Int_t NextEvent (); 93 Int_t NextKey(); 94 Int_t Skip(int nskip); 95 virtual Int_t WriteEvent(const StUKey &ukey); 96 virtual void Close(const char *opt=0); 97 virtual Int_t Open(); 98 virtual void Clear(Option_t *opt=""); 99 virtual Int_t SetFile(const char *file,const char *iomode=0,int insist=0); 100 virtual void SetBaseName(const char* basename,const char* dirname=0); 101 virtual const char *GetBaseName() 102 {return (fBaseName.IsNull()) ? 0:(const char*)fBaseName;}; 103 static StTree *GetTree(TFile *file, const char *treeName); 104 virtual Int_t UpdateFile(const char *file); 105 106 protected: 107 TString fBaseName; //base name to construct branch file name 108 // as <basename>.<branchname>.root 109 ClassDef(StTree,1) 110 }; 111 112 // Auxiliary class for StIO only. 113 class StIOEvent : public TObject 114 { 115 public: 116 StIOEvent(); 117 ~StIOEvent(){}; 118 TObject *fObj; // Pointer to full tree 119 virtual void Browse(TBrowser *b); 120 virtual Bool_t IsFolder() const { return kTRUE; } 121 122 ClassDef(StIOEvent,1) 123 }; 124 125 class StFile : public StFileI 126 { 127 public: 128 StFile(const char** fileList=0); 129 virtual ~StFile(); 130 131 virtual void ls(Option_t *opt="") ; 132 virtual void ls(Option_t *opt="") const{ ((StFile*)this)->ls(opt);} 133 virtual Int_t AddFile(const char *file,const char *opt=0); //opt="remove" or "exclude" remove file from list 134 virtual Int_t AddFile(const char **fileList); 135 virtual Int_t AddWild(const char *file,const char *opt=0); 136 virtual Int_t AddEvent(UInt_t r,UInt_t e=0); 137 virtual Int_t GetNBundles(); 138 virtual Int_t GetNFiles(); 139 virtual Int_t GetBundleSize(){return 1;}; 140 virtual StUKey GetNextEvent(); 141 virtual Int_t GetNextEvent(UInt_t *NextEventNumber){return StFileI::GetNextEvent(NextEventNumber);} 142 143 virtual const char *GetFileName(Int_t idx=-1); 144 virtual const char *GetCompName(Int_t idx=0); 145 virtual const char *GetFormat(Int_t idx=0); 146 virtual Int_t GetNextBundle(); 147 virtual void Rewind(){fIter = -1; delete fKeyIter; fKeyIter =0;} 148 149 protected: 150 void lsFull(Option_t *opt="") ; 151 void SetInfo(TDataSet *ds); 152 const char *GetAttr(TDataSet *ds,const char *att); 153 TDataSet *GetFileDS(int idx); 154 TDataSet *fDS; 155 Int_t fIter; 156 TDataSetIter *fKeyIter; 157 ClassDef(StFile,1) 158 }; 159 #endif 160