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

# User Rev Content
1 loizides 1.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