00001 #ifndef ROOT_StTree
00002 #define ROOT_StTree
00003
00004
00005
00006 #include "TSystem.h"
00007 #include "TROOT.h"
00008 #include "TFile.h"
00009 #include "TList.h"
00010 #include "TDataSet.h"
00011 #include "St_ObjectSet.h"
00012 #include "TDataSetIter.h"
00013 #include "StFileI.h"
00014
00015
00016
00017 class StIO
00018 {
00019
00020 public:
00021
00022 static Int_t Write (TFile *file, const StUKey &ukey, TObject *obj);
00023 static TObject *Read (TFile *file, const char *name);
00024 static TObject *Read (TFile *file, const StUKey &ukey);
00025 static Int_t GetNextKey(TFile *file, StUKey &ukey, ULong_t &handle);
00026 static TObject *ReadNext (TFile *file, StUKey &ukey, ULong_t &handle);
00027 static TString RFIOName (const char *name);
00028 static TFile *Open (const char *name, Option_t *option="",const char *title="",Int_t compress=1);
00029 static Int_t IfExi(const char *file);
00030 static void SetDebug(Int_t dblev=1){fgDebug=dblev;}
00031 static Int_t fgDebug;
00032 };
00033
00034 class StTree;
00035 class StBranch : public TDataSet {
00036
00037 friend class StTree;
00038 public:
00039 StBranch(const char *name="", StTree* parent=0,Option_t *opt=0);
00040 ~StBranch();
00041
00042 virtual void SetIOMode(Option_t *iomode="0");
00043 virtual Option_t *GetIOMode();
00044 virtual void SetOption(Option_t *opt);
00045 virtual Option_t *GetOption() const {return fOption;};
00046 virtual Bool_t IsOption(Option_t *opt) const
00047 {return fOption.Contains(opt,TString::kIgnoreCase);};
00048 virtual Int_t UpdateFile(const char *file);
00049 virtual const char *GetFile();
00050 virtual Int_t SetFile(const char *file,const char *iomode=0,int insist=0);
00051 virtual Int_t SetTFile(TFile *tfile);
00052 virtual TFile *GetTFile(){return fTFile;};
00053 virtual void SetName(const char *name){fUKey=name;TDataSet::SetName(name);};
00054 virtual void SetUKey(Int_t ukey){fUKey=ukey;};
00055 virtual StUKey GetUKey() const {return fUKey;};
00056 virtual Int_t GetNEvents() const {return fNEvents;};
00057 virtual Int_t GetEvent(Int_t mode);
00058 virtual Int_t ReadEvent (const StUKey &ukey);
00059 virtual Int_t NextEvent ( StUKey &ukey);
00060 virtual Int_t NextEvent ();
00061 virtual Int_t WriteEvent(const StUKey &ukey);
00062 virtual void Clear(const char *opt=0);
00063 virtual void Close(const char *opt=0);
00064 virtual Int_t Open();
00065 virtual Int_t GetDebug(){return fDebug;};
00066 virtual void SetDebug(int dbl=1){fDebug=dbl;};
00067
00068 protected:
00069 virtual void OpenTFile();
00070 void SetParAll(TDataSet *parNew,TDataSet *parOld, TList *savList);
00071 void SetParAll(TList *savList);
00072 Int_t fNEvents;
00073 StUKey fUKey;
00074 char fIOMode;
00075 TString fFile;
00076 TString fOption;
00077 TFile *fTFile;
00078 Int_t fDebug;
00079 ULong_t fHandle;
00080 ClassDef(StBranch,1)
00081 };
00082
00083
00084 class StTree : public StBranch {
00085 public:
00086 StTree(const char *name="");
00087 ~StTree();
00088
00089 virtual void SetIOMode (Option_t *iomode="0");
00090 virtual Int_t ReadEvent (const StUKey &ukey);
00091 virtual Int_t NextEvent ( StUKey &ukey);
00092 virtual Int_t NextEvent ();
00093 Int_t NextKey();
00094 Int_t Skip(int nskip);
00095 virtual Int_t WriteEvent(const StUKey &ukey);
00096 virtual void Close(const char *opt=0);
00097 virtual Int_t Open();
00098 virtual void Clear(Option_t *opt="");
00099 virtual Int_t SetFile(const char *file,const char *iomode=0,int insist=0);
00100 virtual void SetBaseName(const char* basename,const char* dirname=0);
00101 virtual const char *GetBaseName()
00102 {return (fBaseName.IsNull()) ? 0:(const char*)fBaseName;};
00103 static StTree *GetTree(TFile *file, const char *treeName);
00104 virtual Int_t UpdateFile(const char *file);
00105
00106 protected:
00107 TString fBaseName;
00108
00109 ClassDef(StTree,1)
00110 };
00111
00112
00113 class StIOEvent : public TObject
00114 {
00115 public:
00116 StIOEvent();
00117 ~StIOEvent(){};
00118 TObject *fObj;
00119 virtual void Browse(TBrowser *b);
00120 virtual Bool_t IsFolder() const { return kTRUE; }
00121
00122 ClassDef(StIOEvent,1)
00123 };
00124
00125 class StFile : public StFileI
00126 {
00127 public:
00128 StFile(const char** fileList=0);
00129 virtual ~StFile();
00130
00131 virtual void ls(Option_t *opt="") ;
00132 virtual void ls(Option_t *opt="") const{ ((StFile*)this)->ls(opt);}
00133 virtual Int_t AddFile(const char *file,const char *opt=0);
00134 virtual Int_t AddFile(const char **fileList);
00135 virtual Int_t AddWild(const char *file,const char *opt=0);
00136 virtual Int_t AddEvent(UInt_t r,UInt_t e=0);
00137 virtual Int_t GetNBundles();
00138 virtual Int_t GetNFiles();
00139 virtual Int_t GetBundleSize(){return 1;};
00140 virtual StUKey GetNextEvent();
00141 virtual Int_t GetNextEvent(UInt_t *NextEventNumber){return StFileI::GetNextEvent(NextEventNumber);}
00142
00143 virtual const char *GetFileName(Int_t idx=-1);
00144 virtual const char *GetCompName(Int_t idx=0);
00145 virtual const char *GetFormat(Int_t idx=0);
00146 virtual Int_t GetNextBundle();
00147 virtual void Rewind(){fIter = -1; delete fKeyIter; fKeyIter =0;}
00148
00149 protected:
00150 void lsFull(Option_t *opt="") ;
00151 void SetInfo(TDataSet *ds);
00152 const char *GetAttr(TDataSet *ds,const char *att);
00153 TDataSet *GetFileDS(int idx);
00154 TDataSet *fDS;
00155 Int_t fIter;
00156 TDataSetIter *fKeyIter;
00157 ClassDef(StFile,1)
00158 };
00159 #endif