KaliVeda
Toolkit for HIC analysis
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 
77 class 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 
87  mutable Int_t fIter_idx;
88  mutable Int_t fIter_limit;
89  mutable Int_t fIter_delta;
95 
96  void rebuild_title();
97 
98  void increment_identified_particle_counters(int identified, int unidentified) const;
99 
100 protected:
102 
103 public:
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  {
152  fNodes.AddLast(n);
153  if (fAddToNodes) n->AddTrajectory(this);
154  rebuild_title();
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 
233  void SaveIterationState() const
234  {
241  }
243  {
245 
249  }
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  }
303  {
305  return &fIDTelescopes;
306  }
308  {
309  return fIDTelescopes.GetEntries();
310  }
312  {
314  return GetPathString().Contains(other->GetPathString());
315  }
317  {
319  if (fPathInTitle) return GetTitle();
320  return GetName();
321  }
322  const Char_t* GetTrajectoryName() const
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
const Char_t * GetTrajectoryName() const
KVGeoDNTrajectory()
Default constructor.
Int_t fIter_delta_sav
increment/decrement for each iteration
KVGeoDetectorNode * GetNextNode() const
TString GetPathString() const
KVSeqCollection * AccessIDTelescopeList()
Bool_t EndsAt(const Char_t *node_name) const
static Int_t fGDNTrajNumber
Int_t Index(const TObject *node) 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
static KVGeoDNTrajectory * Factory(const char *plugin, const KVGeoDNTrajectory *, const KVGeoDetectorNode *)
Instantiate & return object of class corresponding to plugin.
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.
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
const KVSeqCollection * GetIDTelescopes() 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
KVGeoDetectorNode * GetNodeInFront(const KVGeoDetectorNode *n) const
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
KVGeoDetectorNode * GetNode(const Char_t *name) const
KVGeoDNTrajectory & operator=(const KVGeoDNTrajectory &)
void SetAddToNodes(Bool_t yes=kTRUE)
KVGeoDetectorNode * GetNodeAt(Int_t i) const
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