KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVGeoDNTrajectory.h
1#ifndef __KVGEODNTRAJECTORY_H
2#define __KVGEODNTRAJECTORY_H
3
4#include "KVBase.h"
5#include "KVUniqueNameList.h"
6#include "TObjArray.h"
7#include "KVGeoDetectorNode.h"
8
42
72
77class KVGeoDNTrajectory : public KVBase {
78
79 friend class KVGroup;
80
81 static KVGeoDNTrajectory* Factory(const char* plugin, const KVGeoDNTrajectory*, const KVGeoDetectorNode*);
82
83 void init();
84
95
96 void rebuild_title();
97
98 void increment_identified_particle_counters(int identified, int unidentified) const;
99
100protected:
102
103public:
107 virtual ~KVGeoDNTrajectory();
108 void Copy(TObject& obj) const;
110
111 void Clear(Option_t* = "");
112
113 void SetAddToNodes(Bool_t yes = kTRUE)
114 {
115 fAddToNodes = yes;
116 }
117
118 KVGeoDetectorNode* GetNode(const Char_t* name) const
119 {
122 }
124 {
126 if (Contains(n) && !EndsAt(n)) {
127 return GetNodeAt(Index(n) + 1);
128 }
129 return nullptr;
130 }
131 Bool_t Contains(const Char_t* name) const
132 {
135 return GetNode(name) != nullptr;
136 }
137
138 Int_t GetN() const
139 {
141 return fNodes.GetEntries();
142 }
143 Int_t Index(const TObject* node) const
144 {
146 return fNodes.IndexOf(node);
147 }
148
150 {
153 if (fAddToNodes) n->AddTrajectory(this);
155 }
156
157 void ReverseOrder();
158 void AddToNodes();
159
160 void ls(Option_t* = "") const
161 {
162 std::cout << GetTrajectoryName() << " : " << GetPathString() << std::endl;
163 }
164
165 Bool_t EndsAt(const Char_t* node_name) const
166 {
169
170 return !strcmp(node_name, fNodes.Last()->GetName());
171 }
172
173 Bool_t BeginsAt(const Char_t* node_name) const
174 {
177
178 return !strcmp(node_name, fNodes.First()->GetName());
179 }
180
182 {
185
186 return (d == (KVGeoDetectorNode*)fNodes.Last());
187 }
188
190 {
193
194 return (d == (KVGeoDetectorNode*)fNodes.First());
195 }
196
198 {
199 return (fNodes.FindObject(n) != NULL);
200 }
202 {
205 TIter next(l);
206 TObject* o;
207 while ((o = next())) {
208 if (!Contains(o->GetName())) return kFALSE;
209 }
210 return kTRUE;
211 }
213 {
216 TIter next(l);
217 TObject* o;
218 while ((o = next())) {
219 if (Contains(o->GetName())) return kTRUE;
220 }
221 return kFALSE;
222 }
223
225 {
229
230 return (KVGeoDetectorNode*)fNodes[i];
231 }
232
250 void IterateFrom(const KVGeoDetectorNode* node0 = nullptr) const
251 {
258
259 fIter_idx = (node0 == nullptr ? 0 : Index(node0));
260 fIter_delta = 1;
261 fIter_limit = GetN() - 1;
262 }
263 void IterateBackFrom(const KVGeoDetectorNode* node0 = nullptr) const
264 {
271
272 fIter_idx = (node0 == nullptr ? GetN() - 1 : Index(node0));
273 fIter_delta = -1;
274 fIter_limit = 0;
275 }
276
278 {
281
282 if (fIter_idx > -1) {
283 if (fIter_delta * (fIter_limit - fIter_idx) > 0) {
284 Int_t idx = fIter_idx;
286 return GetNodeAt(idx);
287 }
288 else {
290 fIter_idx = -1;
291 return GetNodeAt(fIter_limit);
292 }
293 }
294 return nullptr;
295 }
296
298 {
300 return &fIDTelescopes;
301 }
308 {
309 return fIDTelescopes.GetEntries();
310 }
312 {
314 return GetPathString().Contains(other->GetPathString());
315 }
317 {
319 if (fPathInTitle) return GetTitle();
320 return GetName();
321 }
323 {
325 if (fPathInTitle) return GetName();
326 return GetTitle();
327 }
328 void SetPathInTitle(Bool_t intitle = kTRUE)
329 {
334
335 if (intitle != fPathInTitle) {
336 TString s = GetName();
337 SetName(GetTitle());
338 SetTitle(s);
339 fPathInTitle = intitle;
340 }
341 }
343 {
345 return fPathInTitle;
346 }
347 void AddIdentifiedParticle(int modify_unidentified = -1) const
348 {
350 increment_identified_particle_counters(1, modify_unidentified);
351 }
352 void AddUnidentifiedParticle(int modify_identified = -1) const
353 {
355 increment_identified_particle_counters(modify_identified, 1);
356 }
357
358 ClassDef(KVGeoDNTrajectory, 1) //Path taken by particles through multidetector geometry
359};
360
361#endif
int Int_t
#define d(i)
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
constexpr Bool_t kTRUE
const char Option_t
#define ClassDef(name, id)
char name[80]
Base class for KaliVeda framework.
Definition KVBase.h:142
Path taken by particles through multidetector geometry.
void SaveIterationState() const
Bool_t ContainsAll(const TCollection *l) const
Bool_t fAddToNodes
if kTRUE, add trajectory to node's list
KVGeoDetectorNode * GetNodeInFront(const KVGeoDetectorNode *n) const
KVGeoDNTrajectory()
Default constructor.
Int_t fIter_delta_sav
increment/decrement for each iteration
const KVSeqCollection * GetIDTelescopes() const
TString GetPathString() const
Bool_t EndsAt(const Char_t *node_name) const
static Int_t fGDNTrajNumber
const Char_t * GetTrajectoryName() const
Int_t Index(const TObject *node) const
KVGeoDetectorNode * GetNode(const Char_t *name) const
void AddUnidentifiedParticle(int modify_identified=-1) const
void ls(Option_t *="") const
Bool_t Contains(const Char_t *name) const
void increment_identified_particle_counters(int identified, int unidentified) const
increment counters in all detectors on trajectory
KVGeoDetectorNode * GetNodeAt(Int_t i) const
void SetPathInTitle(Bool_t intitle=kTRUE)
Int_t fIter_delta
increment/decrement for each iteration
Bool_t Contains(const KVGeoDetectorNode *n) const
Bool_t BeginsAt(const KVGeoDetectorNode *d) const
void ReverseOrder()
Reverse the order of the nodes in the trajectory.
KVSeqCollection * AccessIDTelescopeList()
void AddLast(KVGeoDetectorNode *n)
void AddToNodes()
Add reference to this trajectory to all nodes on it.
Bool_t EndsAt(const KVGeoDetectorNode *d) const
void IterateFrom(const KVGeoDetectorNode *node0=nullptr) const
Int_t GetNumberOfIdentifications() const
void Clear(Option_t *="")
Clear list of nodes in trajectory.
void AddIdentifiedParticle(int modify_unidentified=-1) const
Bool_t BeginsAt(const Char_t *node_name) const
Bool_t ContainsPath(KVGeoDNTrajectory *other)
Int_t fIter_limit
last index for iteration
Bool_t ContainsAny(const TCollection *l) const
KVUniqueNameList fIDTelescopes
list of id telescopes on this trajectory
Int_t fIter_limit_sav
last index for iteration
Int_t fIter_idx_sav
index for iteration
Int_t fIter_idx
index for iteration
TObjArray fNodes
list of nodes on trajectory
void IterateBackFrom(const KVGeoDetectorNode *node0=nullptr) const
virtual ~KVGeoDNTrajectory()
Destructor.
void Copy(TObject &obj) const
void RestoreIterationState() const
Bool_t IsPathInTitle() const
Bool_t fPathInTitle
true if path is in title, false if path is in name
KVGeoDNTrajectory & operator=(const KVGeoDNTrajectory &)
KVGeoDetectorNode * GetNextNode() const
void SetAddToNodes(Bool_t yes=kTRUE)
Information on relative positions of detectors & particle trajectories.
Group of detectors which can be treated independently of all others in array.
Definition KVGroup.h:20
KaliVeda extensions to ROOT collection classes.
Optimised list in which named objects can only be placed once.
virtual Int_t GetEntries() const
virtual void SetTitle(const char *title="")
const char * GetName() const override
const char * GetTitle() const override
virtual void SetName(const char *name)
Int_t IndexOf(const TObject *obj) const override
TObject * Last() const override
Int_t GetEntries() const override
void AddLast(TObject *obj) override
TObject * First() const override
TObject * FindObject(const char *name) const override
virtual const char * GetName() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
const Int_t n
TLine l