Bug corrected.
[u/mrichter/AliRoot.git] / STEER / TTreeStream.h
1 #ifndef TTREESTREAM_H
2 #define TTREESTREAM_H
3 ///////////////////////////////////////////////////////////////////////////////
4 //                                                                           //
5 //  TTreeSRedirector                                                              //                      
6
7 #include "TObject.h"
8 #include "TString.h"
9 #include "TTree.h"
10 class TFile;
11 class TObjArray;
12 class TTree;
13 class TDataType;
14
15 class TTreeDataElement: public TNamed {
16   friend class TTreeStream;
17  public:
18   TTreeDataElement(Char_t type);
19   TTreeDataElement(TDataType* type);
20   TTreeDataElement(TClass* cl);
21   void   SetPointer(void* pointer) {fPointer=pointer;} 
22   Char_t GetType() const {return fType;}
23  protected:
24
25   TTreeDataElement(const TTreeDataElement & tde);
26   TTreeDataElement & operator=(const TTreeDataElement & tde);
27
28   Char_t  fType;     // type of data element
29   TDataType *fDType; //data type pointer 
30   TClass    *fClass; //data type pointer
31   void * fPointer;  // pointer to element
32   ClassDef(TTreeDataElement,2)
33 };
34
35 class TTreeStream: public TNamed {
36   friend class TTreeSRedirector;
37 public:
38   TTreeStream(const char *treename);
39   ~TTreeStream();
40   void Close();
41   static void Test();
42   Int_t CheckIn(Char_t type, void *pointer);  
43   //Int_t CheckIn(const char *type, void *pointer);
44   Int_t CheckIn(TObject *o);
45   void BuildTree();
46   void Fill();
47   Double_t GetSize(){ return fTree->GetZipBytes();}
48   TTreeStream& Endl();
49   //
50   TTreeStream  &operator<<(Bool_t   &b){CheckIn('B',&b);return *this;}
51   TTreeStream  &operator<<(Char_t   &c){CheckIn('B',&c);return *this;}
52   TTreeStream  &operator<<(UChar_t  &c){CheckIn('b',&c);return *this;}
53   TTreeStream  &operator<<(Short_t  &h){CheckIn('S',&h);return *this;}
54   TTreeStream  &operator<<(UShort_t &h){CheckIn('s',&h);return *this;}
55   TTreeStream  &operator<<(Int_t    &i){CheckIn('I',&i);return *this;}
56   TTreeStream  &operator<<(UInt_t   &i){CheckIn('i',&i);return *this;}
57   TTreeStream  &operator<<(Long_t   &l){CheckIn('L',&l);return *this;}
58   TTreeStream  &operator<<(ULong_t  &l){CheckIn('l',&l);return *this;}
59   TTreeStream  &operator<<(Long64_t &l){CheckIn('L',&l);return *this;}
60   TTreeStream  &operator<<(ULong64_t &l){CheckIn('l',&l);return *this;}
61   TTreeStream  &operator<<(Float_t   &f){CheckIn('F',&f);return *this;}
62   TTreeStream  &operator<<(Double_t  &d){CheckIn('D',&d);return *this;}
63   TTreeStream  &operator<<(TObject*o){CheckIn(o);return *this;} 
64   TTreeStream  &operator<<(const Char_t *name);
65   TTree * GetTree() const { return fTree;}
66  protected:
67   //
68
69   TTreeStream(const TTreeStream & ts);
70   TTreeStream & operator=(const TTreeStream & ts);
71
72   TObjArray *fElements; //array of elements
73   TObjArray *fBranches; //pointers to branches
74   TTree *fTree;         //data storage
75   Int_t fCurrentIndex;  //index of current element
76   Int_t fId;            //identifier of layout
77   TString fNextName;    //name for next entry
78   Int_t   fNextNameCounter; //next name counter
79   Int_t   fStatus;      //status of the layout
80   ClassDef(TTreeStream,1)
81 };
82
83
84
85 class TTreeSRedirector: public TObject { 
86 public:
87   TTreeSRedirector(const char *fname);
88   virtual ~TTreeSRedirector();
89   void Close();
90   static void Test();
91   void StoreObject(TObject* object);
92   TFile * GetFile() {return fFile;};
93   virtual   TTreeStream  &operator<<(Int_t id);
94   virtual   TTreeStream  &operator<<(const char *name);
95  private:
96
97   TTreeSRedirector(const TTreeSRedirector & tsr);
98   TTreeSRedirector & operator=(const TTreeSRedirector & tsr);
99
100   TFile* fFile;        //file
101   TObjArray *fDataLayouts;   //array of data layouts
102   ClassDef(TTreeSRedirector,1) 
103 };
104
105
106
107
108 #endif