ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/TAM/interface/TAMOutput.h
Revision: 1.5
Committed: Fri Mar 30 01:08:38 2012 UTC (13 years, 1 month ago) by paus
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_028, Mit_027a, Mit_027, Mit_026, HEAD
Changes since 1.4: +3 -3 lines
Log Message:
Initial 5 version.

File Contents

# User Rev Content
1 loizides 1.1 //
2 paus 1.5 // $Id: TAMOutput.h,v 1.4 2009/07/17 19:18:04 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 paus 1.5 Long64_t MergeOutput(TCollection* list);
91 loizides 1.1 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 paus 1.5 virtual Long64_t Merge(TCollection* list);
114 loizides 1.1 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