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

# Content
1 //
2 // $Id: TAMOutput.h,v 1.3 2009/07/13 19:19:44 loizides Exp $
3 //
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 ClassDef(TAMModMember,1) // TAM module member class
61 };
62
63 THashTable fOutputMembers; //stores members pointing to output objects
64
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 ClassDef(TAMModInspector,1) // TAM inspector class
77 };
78
79 private:
80 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 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 using TCollection::Print;
116 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 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 Int_t bsize=0) const;
126 Int_t WriteCol(const TCollection *col, const char* name=0,
127 Int_t option=0, Int_t bsize=0) const;
128
129 ClassDef(TAMOutput, 2) // Tree analysis module output class
130 };
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