GSI Object Oriented Online Offline (Go4)  GO4-5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
TGo4HStackProxy.cxx
Go to the documentation of this file.
1 // $Id: TGo4HStackProxy.cxx 1352 2015-01-27 10:03:25Z linev $
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum für Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #include "TGo4HStackProxy.h"
15 
16 #include "TROOT.h"
17 #include "TObjArray.h"
18 #include "TClass.h"
19 #include "TFrame.h"
20 #include "TPaveText.h"
21 #include "TObjString.h"
22 #include "THStack.h"
23 #include "TH1.h"
24 
25 #include "TGo4Slot.h"
26 #include "TGo4ObjectProxy.h"
27 #include "TGo4ObjectManager.h"
28 
30  protected:
31  TIterator* fIter;
32  TObject* fCurrent;
33  public:
34  TGo4HStackLevelIter(THStack* hs) :
35  TGo4LevelIter(),
36  fIter(0),
37  fCurrent(0)
38  {
39  fIter = hs->GetHists()->MakeIterator();
40  }
41 
43  {
44  delete fIter;
45  }
46 
47  virtual Bool_t next()
48  {
49  fCurrent = fIter->Next();
50  return (fCurrent!=0);
51  }
52 
53  virtual Bool_t isfolder()
54  {
55  return kFALSE;
56  }
57 
59  {
60  return 0;
61  }
62 
63  virtual const char* name()
64  {
65  return fCurrent->GetName();
66  }
67 
68  virtual const char* info()
69  {
70  return fCurrent->ClassName();
71  }
72 
73  virtual Int_t GetKind()
74  {
75  return TGo4Access::kndObject;
76  }
77 
78  virtual const char* GetClassName()
79  {
80  return fCurrent->ClassName();
81  }
82 };
83 
84 // ****************************************************************
85 
87  TGo4Proxy(),
88  fHS(0),
89  fOwner(kFALSE)
90 {
91 }
92 
93 TGo4HStackProxy::TGo4HStackProxy(THStack* hs, Bool_t owner) :
94  TGo4Proxy(),
95  fHS(hs),
96  fOwner(owner)
97 {
98 }
99 
101 {
102  if (fOwner) delete fHS;
103 }
104 
106 {
108 }
109 
111 {
112  return fHS ? fHS->ClassName() : 0;
113 }
114 
116 {
117  TGo4ObjectManager* om = slot->GetOM();
118  if (om!=0) om->RegisterObjectWith(fHS, slot);
119 }
120 
122 {
123  TGo4ObjectManager* om = slot->GetOM();
124  if (om!=0) om->UnregisterObject(fHS, slot);
125 }
126 
128 {
129  if (obj==fHS) {
130  fHS = 0;
131  fOwner = kFALSE;
132  }
133  return kFALSE;
134 }
135 
136 void TGo4HStackProxy::WriteData(TGo4Slot* slot, TDirectory* dir, Bool_t onlyobjs)
137 {
138  const char* objname = 0;
139  if (fHS!=0)
140  objname = fHS->GetName();
141 
142  if (!onlyobjs)
143  slot->SetPar("HStackProxy::StackName", objname);
144 
145  if ((dir==0) || (fHS==0)) return;
146 
147  dir->cd();
148 
149  fHS->Write(objname);
150 }
151 
152 void TGo4HStackProxy::ReadData(TGo4Slot* slot, TDirectory* dir)
153 {
154  const char* objname = slot->GetPar("HStackProxy::StackName");
155  if ((objname==0) || (dir==0)) return;
156 
157  dir->cd();
158 
159  AssignObject(slot, dir->Get(objname), kTRUE);
160 }
161 
163 {
164  return (cl!=0) && cl->InheritsFrom(THStack::Class());
165 }
166 
167 Bool_t TGo4HStackProxy::AssignObject(TGo4Slot* slot, TObject* obj, Bool_t owner)
168 {
169  Finalize(slot);
170  if ((fHS!=0) && fOwner) delete fHS;
171 
172  fHS = dynamic_cast<THStack*> (obj);
173  fOwner = owner && (fHS!=0);
174 
175  if ((fHS==0) && (obj!=0) && owner) delete obj;
176 
177  Initialize(slot);
178 
180 
181  return fHS!=0;
182 }
183 
185 {
186  return fHS;
187 }
188 
189 TGo4Access* TGo4HStackProxy::CreateAccess(THStack* hs, const char* name)
190 {
191  if (hs==0) return 0;
192  if ((name==0) || (*name==0)) return new TGo4ObjectAccess(hs);
193 
194  TObject* obj = hs->GetHists()->FindObject(name);
195 
196  return obj ? new TGo4ObjectAccess(obj) : 0;
197 }
198 
200 {
201  return new TGo4HStackLevelIter(hs);
202 }
virtual const char * name()
virtual void Finalize(TGo4Slot *slot)
virtual Int_t GetKind()
TGo4HStackLevelIter(THStack *hs)
void UnregisterObject(TObject *obj, TGo4Slot *slot)
virtual TObject * GetAssignedObject()
virtual void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs)
virtual const char * GetContainedClassName()
virtual ~TGo4HStackProxy()
static TGo4LevelIter * ProduceIter(THStack *canv)
const char * GetPar(const char *name) const
Definition: TGo4Slot.cxx:621
virtual Bool_t isfolder()
void RegisterObjectWith(TObject *obj, TGo4Slot *slot)
virtual Bool_t RemoveRegisteredObject(TObject *obj)
virtual const char * GetClassName()
virtual void Initialize(TGo4Slot *slot)
virtual Bool_t next()
virtual TGo4LevelIter * subiterator()
virtual const char * info()
static TGo4Access * CreateAccess(THStack *canv, const char *name)
virtual void ReadData(TGo4Slot *slot, TDirectory *dir)
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=0)
Definition: TGo4Slot.cxx:585
virtual Bool_t IsAcceptObject(TClass *cl)
virtual Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner)
virtual ~TGo4HStackLevelIter()
virtual TGo4ObjectManager * GetOM() const
Definition: TGo4Slot.cxx:298
void SetPar(const char *name, const char *value)
Definition: TGo4Slot.cxx:609
virtual Int_t GetObjectKind()