]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/TTreeStream.h
Including St2 in the new geometry segmentation (Christian)
[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 class TFile;
10 class TObjArray;
11 class TTree;
12 class TDataType;
13
14 class TTreeDataElement: public TNamed {
15   friend class TTreeStream;
16  public:
17   TTreeDataElement(Char_t type);
18   TTreeDataElement(TDataType* type);
19   TTreeDataElement(TClass* cl);
20   void   SetPointer(void* pointer) {fPointer=pointer;} 
21   Char_t GetType() const {return fType;}
22  protected:
23
24   TTreeDataElement(const TTreeDataElement & tde);
25   TTreeDataElement & operator=(const TTreeDataElement & tde);
26
27   TString fName;    // name of the data element
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,1)
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   TTreeStream& Endl();
48   //
49   TTreeStream  &operator<<(Bool_t   &b){CheckIn('B',&b);return *this;}
50   TTreeStream  &operator<<(Char_t   &c){CheckIn('B',&c);return *this;}
51   TTreeStream  &operator<<(UChar_t  &c){CheckIn('b',&c);return *this;}
52   TTreeStream  &operator<<(Short_t  &h){CheckIn('S',&h);return *this;}
53   TTreeStream  &operator<<(UShort_t &h){CheckIn('s',&h);return *this;}
54   TTreeStream  &operator<<(Int_t    &i){CheckIn('I',&i);return *this;}
55   TTreeStream  &operator<<(UInt_t   &i){CheckIn('i',&i);return *this;}
56   TTreeStream  &operator<<(Long_t   &l){CheckIn('L',&l);return *this;}
57   TTreeStream  &operator<<(ULong_t  &l){CheckIn('l',&l);return *this;}
58   TTreeStream  &operator<<(Long64_t &l){CheckIn('L',&l);return *this;}
59   TTreeStream  &operator<<(ULong64_t &l){CheckIn('l',&l);return *this;}
60   TTreeStream  &operator<<(Float_t   &f){CheckIn('F',&f);return *this;}
61   TTreeStream  &operator<<(Double_t  &d){CheckIn('D',&d);return *this;}
62   TTreeStream  &operator<<(TObject*o){CheckIn(o);return *this;} 
63   TTreeStream  &operator<<(Char_t *name);
64  protected:
65   //
66
67   TTreeStream(const TTreeStream & ts);
68   TTreeStream & operator=(const TTreeStream & ts);
69
70   TObjArray *fElements; //array of elements
71   TObjArray *fBranches; //pointers to branches
72   TTree *fTree;         //data storage
73   Int_t fCurrentIndex;  //index of current element
74   Int_t fId;            //identifier of layout
75   TString fNextName;    //name for next entry
76   Int_t   fNextNameCounter; //next name counter
77   Int_t   fStatus;      //status of the layout
78   ClassDef(TTreeStream,1)
79 };
80
81
82
83 class TTreeSRedirector: public TObject { 
84 public:
85   TTreeSRedirector(const char *fname);
86   ~TTreeSRedirector();
87   void Close();
88   static void Test();
89   virtual   TTreeStream  &operator<<(Int_t id);
90   virtual   TTreeStream  &operator<<(const char *name);
91  private:
92
93   TTreeSRedirector(const TTreeSRedirector & tsr);
94   TTreeSRedirector & operator=(const TTreeSRedirector & tsr);
95
96   TFile* fFile;        //file
97   TObjArray *fDataLayouts;   //array of data layouts
98   ClassDef(TTreeSRedirector,1) 
99 };
100
101
102
103
104 #endif