ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TAM/interface/TAMOutput.h
Revision: 1.4
Committed: Fri Jul 17 19:18:04 2009 UTC (15 years, 9 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025c_branch2, Mit_025c_branch1, Mit_025c_branch0, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, Mit_013pre1, Mit_012i, Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a, Mit_011, Mit_010a, Mit_010
Branch point for: Mit_025c_branch
Changes since 1.3: +5 -6 lines
Log Message:
Docu.

File Contents

# User Rev Content
1 loizides 1.1 //
2 loizides 1.4 // $Id: TAMOutput.h,v 1.3 2009/07/13 19:19:44 loizides Exp $
3 loizides 1.1 //
4    
5     #ifndef ROOT_TAMOutput
6     #define ROOT_TAMOutput
7    
8     // keep this for compatibility
9     #define TAM_TAMOutput
10    
11    
12     #include <vector>
13     using std::vector;
14    
15    
16     #ifndef ROOT_TList
17     #include "TList.h"
18     #endif
19     #ifndef ROOT_TObject
20     #include "TObject.h"
21     #endif
22     #ifndef ROOT_TMemberInspector
23     #include "TMemberInspector.h"
24     #endif
25     #ifndef ROOT_TNamed
26     #include "TNamed.h"
27     #endif
28     #ifndef ROOT_THashTable
29     #include "THashTable.h"
30     #endif
31     #ifndef ROOT_TClass
32     #include "TClass.h"
33     #endif
34    
35    
36     class TBrowser;
37     class TAModule;
38    
39    
40     class TAMOutput : public TList {
41     private:
42     static const UInt_t kParentStrLen = 1028;
43    
44     public:
45     struct TAMModInspector : public TMemberInspector {
46     struct TAMModMember : public TNamed {
47     // name = name of output object itself (in the output list)
48     // title = name of member storing the output object
49     void *fAddr; //!address of member
50     TClass *fMClass; //module class
51    
52     TAMModMember(const Char_t* objectname=0,
53     const Char_t* membername=0,
54     void* addr=0,
55     TClass* cl=0) :
56     TNamed(objectname, membername),
57     fAddr(addr),
58     fMClass(cl) {}
59     virtual ~TAMModMember() {}
60 loizides 1.4 ClassDef(TAMModMember,1) // TAM module member class
61 loizides 1.1 };
62    
63 loizides 1.4 THashTable fOutputMembers; //stores members pointing to output objects
64 loizides 1.1
65     TAMModInspector();
66     virtual ~TAMModInspector();
67    
68     void AddOutput(TObject* obj, const void* adr);
69     virtual void Inspect(TClass* cl, const Char_t* parent,
70     const Char_t* name, const void* addr);
71     TAMModMember *FindModMemberWithAddr(const void* addr);
72     TAMModMember *FindModMemberWithMemberName(const Char_t* mn);
73     void RemoveOutput(TObject* obj);
74     void SetMemberAddrFor(TObject* obj, const UInt_t verbose);
75    
76 loizides 1.4 ClassDef(TAMModInspector,1) // TAM inspector class
77 loizides 1.1 };
78    
79     private:
80 loizides 1.3 TAMModInspector fInspector; //stores info about module's output members
81     TList fOutput; //list of this module's output (NOT owner)
82     mutable TList fCurOutput; //list of this module's output objects
83     // moved to fOutput after Merge (NOT owner)
84 loizides 1.1 TAModule *fMod; //!pointer to the module whose output this is
85    
86     void CallMerge(TObject* obj, TList& list);
87     void DeleteIterators(vector<TIterator*>& iters);
88     TList *GetCurOutputList() { return &fCurOutput; }
89     using TList::FindObject;
90     void MergeOutput(TCollection* list);
91     void NullObjInAddOutput() const;
92     void NullClassFor(void* adr, const Char_t* tid) const;
93     void WarnNameDuplicate(const TObject* obj) const;
94    
95     public:
96     TAMOutput();
97     TAMOutput(TAModule* mod);
98     virtual ~TAMOutput();
99    
100     template <class OC>
101     void AddOutput(OC* const & obj);
102     virtual void Browse(TBrowser* b);
103     static void CheckHistDir(TObject* obj);
104     TAMOutput *FindModOutput(const TAModule* mod);
105     TAMOutput *FindModOutput(const Char_t* name);
106     TObject *FindOutput(const Char_t* obj);
107     TObject *FindOutput(const TObject* obj);
108     TObject *FindOutput(const Char_t* module, const Char_t* obj);
109     const TAModule *GetMod() const { return fMod; }
110     TAModule *GetMod() { return fMod; }
111     const TList *GetOutputList() const { return &fOutput; }
112     TList *GetOutputList() { return &fOutput; }
113     virtual void Merge(TCollection* list);
114     virtual void ls(Option_t* option="") const;
115 loizides 1.2 using TCollection::Print;
116 loizides 1.1 virtual void Print(Option_t* wildcard="") const;
117     void RemoveOutput(TObject* obj);
118     void SetAllOutputMembers(const Bool_t setAddresses);
119     void SetMod(TAModule* mod) { fMod = mod; }
120     void SetOutputMembers(const Bool_t setAddresses);
121     void StoreAllOutputObjs();
122     void StoreOutputObjs();
123 loizides 1.3 virtual Int_t Write(const char* name=0, Int_t option=0, Int_t bsize=0);
124     virtual Int_t Write(const char* name=0, Int_t option=0,
125 loizides 1.1 Int_t bsize=0) const;
126 loizides 1.3 Int_t WriteCol(const TCollection *col, const char* name=0,
127     Int_t option=0, Int_t bsize=0) const;
128    
129 loizides 1.4 ClassDef(TAMOutput, 2) // Tree analysis module output class
130 loizides 1.1 };
131    
132    
133     //______________________________________________________________________________
134     template <class OC>
135     inline void TAMOutput::AddOutput(OC* const & obj)
136     {
137     // Adds the object to the list of output objects of this module.
138     // Stores the address of the pointer, for automatic module member pointer
139     // setting.
140    
141     if (obj!=0) {
142     TClass* cl = TClass::GetClass(typeid(OC));
143     if (cl!=0) {
144     if (cl->InheritsFrom(TObject::Class())) {
145     TObject* o = dynamic_cast<TObject*>(obj);
146     CheckHistDir(o);
147     fInspector.AddOutput(o, &obj);
148     if (fCurOutput.FindObject(o->GetName())!=0) WarnNameDuplicate(o);
149     fCurOutput.Add(o);
150     }
151     } else NullClassFor(obj, typeid(OC).name());
152     } else NullObjInAddOutput();
153     }
154    
155     #endif //ROOT_TAMOutput