GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4HStackProxy.cxx
Go to the documentation of this file.
1// $Id$
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 fuer 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 "TList.h"
18#include "TClass.h"
19#include "THStack.h"
20
21#include "TGo4ObjectProxy.h"
22#include "TGo4ObjectManager.h"
23
25 protected:
26 TIterator *fIter{nullptr};
27 TObject *fCurrent{nullptr};
28 public:
29 TGo4HStackLevelIter(THStack *hs) :
31 fIter(nullptr),
32 fCurrent(nullptr)
33 {
34 fIter = hs->GetHists()->MakeIterator();
35 }
36
38 {
39 delete fIter;
40 }
41
42 Bool_t next() override
43 {
44 fCurrent = fIter->Next();
45 return fCurrent != nullptr;
46 }
47
48 Bool_t isfolder() override
49 {
50 return kFALSE;
51 }
52
54 {
55 return nullptr;
56 }
57
58 const char *name() override
59 {
60 return fCurrent->GetName();
61 }
62
63 const char *info() override
64 {
65 return fCurrent->ClassName();
66 }
67
68 Int_t GetKind() override
69 {
71 }
72
73 const char *GetClassName() override
74 {
75 return fCurrent->ClassName();
76 }
77};
78
79// ****************************************************************
80
82 TGo4Proxy(),
83 fHS(nullptr),
84 fOwner(kFALSE)
85{
86}
87
88TGo4HStackProxy::TGo4HStackProxy(THStack *hs, Bool_t owner) :
89 TGo4Proxy(),
90 fHS(hs),
91 fOwner(owner)
92{
93}
94
99
104
106{
107 return fHS ? fHS->ClassName() : nullptr;
108}
109
111{
112 TGo4ObjectManager *om = slot->GetOM();
113 if (om) om->RegisterObjectWith(fHS, slot);
114}
115
117{
118 TGo4ObjectManager *om = slot->GetOM();
119 if (om) om->UnregisterObject(fHS, slot);
120}
121
123{
124 if (obj == fHS) {
125 fHS = nullptr;
126 fOwner = kFALSE;
127 }
128 return kFALSE;
129}
130
131void TGo4HStackProxy::WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs)
132{
133 const char *objname = nullptr;
134 if (fHS)
135 objname = fHS->GetName();
136
137 if (!onlyobjs)
138 slot->SetPar("HStackProxy::StackName", objname);
139
140 if (!dir || !fHS) return;
141
142 dir->cd();
143
144 fHS->Write(objname);
145}
146
147void TGo4HStackProxy::ReadData(TGo4Slot *slot, TDirectory *dir)
148{
149 const char *objname = slot->GetPar("HStackProxy::StackName");
150 if (!objname || !dir) return;
151
152 dir->cd();
153
154 AssignObject(slot, dir->Get(objname), kTRUE);
155}
156
157Bool_t TGo4HStackProxy::IsAcceptObject(TClass *cl) const
158{
159 return cl && cl->InheritsFrom(THStack::Class());
160}
161
162Bool_t TGo4HStackProxy::AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner)
163{
164 Finalize(slot);
165 if (fHS && fOwner) delete fHS;
166
167 fHS = dynamic_cast<THStack*> (obj);
168 fOwner = owner && fHS;
169
170 if (!fHS && obj && owner) delete obj;
171
172 Initialize(slot);
173
175
176 return fHS != nullptr;
177}
178
180{
181 return fHS;
182}
183
184std::unique_ptr<TGo4Access> TGo4HStackProxy::CreateAccess(THStack *hs, const char *name)
185{
186 if (!hs) return nullptr;
187 if (!name || !*name)
188 return std::make_unique<TGo4ObjectAccess>(hs);
189
190 TObject *obj = hs->GetHists()->FindObject(name);
191
192 return obj ? std::make_unique<TGo4ObjectAccess>(obj) : nullptr;
193}
194
196{
197 return new TGo4HStackLevelIter(hs);
198}
Bool_t next() override
const char * name() override
Int_t GetKind() override
const char * GetClassName() override
TGo4LevelIter * subiterator() override
TGo4HStackLevelIter(THStack *hs)
const char * info() override
Bool_t isfolder() override
Bool_t IsAcceptObject(TClass *cl) const override
void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override
TObject * GetAssignedObject() override
const char * GetContainedClassName() const override
void Finalize(TGo4Slot *slot) override
static TGo4LevelIter * ProduceIter(THStack *hs)
static std::unique_ptr< TGo4Access > CreateAccess(THStack *hs, const char *name)
virtual ~TGo4HStackProxy()
Bool_t RemoveRegisteredObject(TObject *obj) override
void ReadData(TGo4Slot *slot, TDirectory *dir) override
void Initialize(TGo4Slot *slot) override
Bool_t AssignObject(TGo4Slot *slot, TObject *obj, Bool_t owner) override
Int_t GetObjectKind() const override
void RegisterObjectWith(TObject *obj, TGo4Slot *slot)
void UnregisterObject(TObject *obj, TGo4Slot *slot)
virtual TGo4ObjectManager * GetOM() const
Definition TGo4Slot.cxx:282
@ evObjAssigned
Definition TGo4Slot.h:47
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=nullptr)
Definition TGo4Slot.cxx:565
void SetPar(const char *name, const char *value)
Definition TGo4Slot.cxx:586
const char * GetPar(const char *name) const
Definition TGo4Slot.cxx:598