ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TAM/interface/TAMOutput.h
Revision: 1.1
Committed: Tue May 27 19:13:21 2008 UTC (16 years, 11 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_009, Mit_008, Mit_008pre2, Mit_008pre1, Mit_006b, Mit_006a, Mit_006, Mit_005, Mit_004, MITHEP_2_0_x
Log Message:
TAM trunk 5120

File Contents

# Content
1 //
2 // $Id: TAMOutput.h 3024 2006-07-13 22:51:14Z loizides $
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)
61 };
62
63 THashTable fOutputMembers; // stores the 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)
77 };
78
79 private:
80 TAMModInspector fInspector; //stores info about the module's output members
81 TList fOutput; //list of this module's output objects (NOT owner)
82 mutable TList fCurOutput; //list of this module's output objects moved to fOutput after Merge (NOT owner)
83 TAModule *fMod; //!pointer to the module whose output this is
84
85 void CallMerge(TObject* obj, TList& list);
86 void DeleteIterators(vector<TIterator*>& iters);
87 TList *GetCurOutputList() { return &fCurOutput; }
88 using TList::FindObject;
89 void MergeOutput(TCollection* list);
90 void NullObjInAddOutput() const;
91 void NullClassFor(void* adr, const Char_t* tid) const;
92 void WarnNameDuplicate(const TObject* obj) const;
93
94 public:
95 TAMOutput();
96 TAMOutput(TAModule* mod);
97 virtual ~TAMOutput();
98
99 template <class OC>
100 void AddOutput(OC* const & obj);
101 virtual void Browse(TBrowser* b);
102 static void CheckHistDir(TObject* obj);
103 TAMOutput *FindModOutput(const TAModule* mod);
104 TAMOutput *FindModOutput(const Char_t* name);
105 TObject *FindOutput(const Char_t* obj);
106 TObject *FindOutput(const TObject* obj);
107 TObject *FindOutput(const Char_t* module, const Char_t* obj);
108 const TAModule *GetMod() const { return fMod; }
109 TAModule *GetMod() { return fMod; }
110 const TList *GetOutputList() const { return &fOutput; }
111 TList *GetOutputList() { return &fOutput; }
112 virtual void Merge(TCollection* list);
113 virtual void ls(Option_t* option="") const;
114 virtual void Print(Option_t* wildcard="") const;
115 virtual void Print(Option_t* wildcard, Option_t* option) const;
116 void RemoveOutput(TObject* obj);
117 void SetAllOutputMembers(const Bool_t setAddresses);
118 void SetMod(TAModule* mod) { fMod = mod; }
119 void SetOutputMembers(const Bool_t setAddresses);
120 void StoreAllOutputObjs();
121 void StoreOutputObjs();
122 virtual Int_t Write(const char* name="0", Int_t option=0, Int_t bsize=0);
123 virtual Int_t Write(const char* name="0", Int_t option=0,
124 Int_t bsize=0) const;
125 ClassDef(TAMOutput, 2)
126 };
127
128
129 //______________________________________________________________________________
130 template <class OC>
131 inline void TAMOutput::AddOutput(OC* const & obj)
132 {
133 // Adds the object to the list of output objects of this module.
134 // Stores the address of the pointer, for automatic module member pointer
135 // setting.
136
137 if (obj!=0) {
138 TClass* cl = TClass::GetClass(typeid(OC));
139 if (cl!=0) {
140 if (cl->InheritsFrom(TObject::Class())) {
141 TObject* o = dynamic_cast<TObject*>(obj);
142 CheckHistDir(o);
143 fInspector.AddOutput(o, &obj);
144 if (fCurOutput.FindObject(o->GetName())!=0) WarnNameDuplicate(o);
145 fCurOutput.Add(o);
146 }
147 } else NullClassFor(obj, typeid(OC).name());
148 } else NullObjInAddOutput();
149 }
150
151 #endif //ROOT_TAMOutput