KaliVeda
Toolkit for HIC analysis
KVGVList.h
1 #ifndef KVGVList_h
2 #define KVGVList_h
3 #include "KVVarGlob.h"
4 #include "KVUniqueNameList.h"
5 #include "KVParticleCondition.h"
6 #include "TTree.h"
7 #include "KVEventClassifier.h"
8 
9 #include <KVUnownedList.h>
10 
26 
48 
56 
101 
138 
143 
178 
225 class KVGVList: public KVUniqueNameList {
226 
228  std::vector<Double_t> fBranchVar;
229  std::vector<Int_t> fIBranchVar;
233 
235  TString NameSanitizer(const Char_t* s) const
236  {
237  TString _s(s);
238  _s.ReplaceAll("+", "_");
239  _s.ReplaceAll("*", "_");
240  _s.ReplaceAll("-", "_");
241  _s.ReplaceAll("/", "_");
242  _s.ReplaceAll("=", "_");
243  return _s;
244  }
245  KVVarGlob* prepareGVforAdding(const Char_t* class_name, const Char_t* name);
246 #ifdef KVGVLIST_OPTIMIZE_GVLIST
247  KVList fOptimList;
248  struct optigvlist : public TObject {
249  KVUnownedList one_body;
250  KVUnownedList two_body;
251  KVUnownedList N_body;
252  bool has_two_body = false;
253  bool has_N_body = false;
254  void ls(Option_t* option = "") const
255  {
256  one_body.ls(option);
257  two_body.ls(option);
258  N_body.ls(option);
259  }
260  template<typename call_func>
261  void iterate(KVUnownedList* l, call_func F)
262  {
263  KVVarGlob* vg;
264  TIter it(l);
265  while ((vg = (KVVarGlob*)it())) {
266  F(vg);
267  }
268  }
269  template<typename call_func>
270  void iterate_with_test(KVUnownedList* l, call_func F)
271  {
272  KVVarGlob* vg;
273  TIter it(l);
274  while ((vg = (KVVarGlob*)it())) {
275  if (!F(vg)) break;
276  }
277  }
278  template<typename call_func>
279  void iterate_one_body(call_func F)
280  {
281  iterate(&one_body, F);
282  }
283  template<typename call_func>
284  void iterate_two_body(call_func F)
285  {
286  iterate(&two_body, F);
287  }
288  template<typename call_func>
289  void iterate_N_body(call_func F)
290  {
291  iterate(&N_body, F);
292  }
293  template<typename call_func>
294  void iterate_one_body_with_test(call_func F)
295  {
296  iterate_with_test(&one_body, F);
297  }
298  template<typename call_func>
299  void iterate_two_body_with_test(call_func F)
300  {
301  iterate_with_test(&two_body, F);
302  }
303  template<typename call_func>
304  void iterate_N_body_with_test(call_func F)
305  {
306  iterate_with_test(&N_body, F);
307  }
308  };
309  void optimise_variable_lists();
310 #endif
311 protected:
312  void init_KVGVList(void);
316  void Fill(const KVNucleus* c);
317  void Fill2(const KVNucleus* c1, const KVNucleus* c2);
318  void FillN(const KVEvent* e);
319  void Calculate();
320  void Calculate2();
321  void CalculateN();
322 
323 public:
324  KVGVList(const KVString& name = "default", const KVParticleCondition& selection
325  = KVParticleCondition{"OK", [](const KVNucleus * n)
326  {
327  return n->IsOK();
328  }});
329  KVGVList(const KVGVList& a);
330 
331  KVVarGlob* AddGV(const Char_t* class_name, const Char_t* name);
332  KVVarGlob* AddGVFirst(const Char_t* class_name, const Char_t* name);
333 
334  void Init(void);
335  void Reset(void);
336 
338 
339  KVVarGlob* GetGV(const Char_t* nom) const; //find global variable with name 'nom'
340 
342  KVVarGlob* GetGVType(const Char_t* class_name)
343  {
344  return (KVVarGlob*)FindObjectByClass(class_name);
345  }
346  void Add(TObject* obj) override ;
347  void AddFirst(TObject* obj) override ;
348 
351  {
352  return (fVG1.GetEntries() > 0);
353  }
354 
357  {
358  return (fVG2.GetEntries() > 0);
359  }
360 
363  {
364  return (fVGN.GetEntries() > 0);
365  }
366 
367  void MakeBranches(TTree*);
368  void FillBranches();
369 
370  bool AbortEventAnalysis() const
371  {
372  return fAbortEventAnalysis;
373  }
374  KVEventClassifier* AddEventClassifier(const TString& varname, const TString& value = "");
375 
376  ClassDefOverride(KVGVList, 3) // List of global variables
377 };
378 #endif
int Int_t
bool Bool_t
char Char_t
const char Option_t
#define ClassDefOverride(name, id)
Simple class for sorting events according to global variables.
Abstract base class container for multi-particle events.
Definition: KVEvent.h:67
Manage a list of global variables.
Definition: KVGVList.h:225
Bool_t Has1BodyVariables()
returns kTRUE if list contains 1-body variables
Definition: KVGVList.h:350
void FillBranches()
Definition: KVGVList.cpp:516
KVParticleCondition fSelection
used to select particles to iterate over in event
Definition: KVGVList.h:227
KVVarGlob * AddGVFirst(const Char_t *class_name, const Char_t *name)
Definition: KVGVList.cpp:843
Int_t fNbIBranch
Definition: KVGVList.h:231
void Reset(void)
Reset all variables before treating an event.
Definition: KVGVList.cpp:83
void Init(void)
Definition: KVGVList.cpp:66
std::vector< Double_t > fBranchVar
used for automatic creation & filling of TTree branches
Definition: KVGVList.h:228
Bool_t HasNBodyVariables()
returns kTRUE if list contains N-body variables
Definition: KVGVList.h:362
TList fVG2
two-body variables
Definition: KVGVList.h:314
void Add(TObject *obj) override
Definition: KVGVList.cpp:336
void AddFirst(TObject *obj) override
Definition: KVGVList.cpp:373
TString NameSanitizer(const Char_t *s) const
Definition: KVGVList.h:235
Int_t fNbBranch
Definition: KVGVList.h:230
void Calculate2()
Calculate all 2-body observables after filling.
Definition: KVGVList.cpp:158
void CalculateN()
Calculate all N-body observables after filling.
Definition: KVGVList.cpp:177
void CalculateGlobalVariables(KVEvent *e)
Definition: KVGVList.cpp:206
KVGVList(const KVString &name="default", const KVParticleCondition &selection=KVParticleCondition{"OK", [](const KVNucleus *n) { return n->IsOK();}})
Definition: KVGVList.cpp:33
bool fAbortEventAnalysis
set to false if a global variable fails its own event selection criterion
Definition: KVGVList.h:232
void FillN(const KVEvent *e)
Calls KVVarGlob::FillN(KVEvent*) method of all N-body variables in the list.
Definition: KVGVList.cpp:128
std::vector< Int_t > fIBranchVar
used for automatic creation & filling of TTree branches
Definition: KVGVList.h:229
KVEventClassifier * AddEventClassifier(const TString &varname, const TString &value="")
Definition: KVGVList.cpp:612
TList fVGN
N-body variables.
Definition: KVGVList.h:315
void Calculate()
Calculate all 1-body observables after filling.
Definition: KVGVList.cpp:139
KVVarGlob * prepareGVforAdding(const Char_t *class_name, const Char_t *name)
Definition: KVGVList.cpp:747
TList fVG1
one-body variables
Definition: KVGVList.h:313
KVVarGlob * AddGV(const Char_t *class_name, const Char_t *name)
Definition: KVGVList.cpp:705
void Fill(const KVNucleus *c)
Definition: KVGVList.cpp:97
void init_KVGVList(void)
Definition: KVGVList.cpp:16
KVVarGlob * GetGVType(const Char_t *class_name)
Returns first global variable in list with given class.
Definition: KVGVList.h:342
void MakeBranches(TTree *)
Definition: KVGVList.cpp:418
KVVarGlob * GetGV(const Char_t *nom) const
Return pointer to global variable in list with name 'nom'.
Definition: KVGVList.cpp:319
Bool_t Has2BodyVariables()
returns kTRUE if list contains 2-body variables
Definition: KVGVList.h:356
bool AbortEventAnalysis() const
Definition: KVGVList.h:370
void Fill2(const KVNucleus *c1, const KVNucleus *c2)
Definition: KVGVList.cpp:114
Extended TList class which owns its objects by default.
Definition: KVList.h:22
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
Implement selections for KVNucleus objects.
TObject * FindObjectByClass(const Char_t *) const
Return (first) object in embedded list with given class.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
Optimised list in which named objects can only be placed once.
Extended TList class which does not own its objects by default.
Definition: KVUnownedList.h:20
Base class for all global variable implementations.
Definition: KVVarGlob.h:233
void ls(Option_t *option="") const override
virtual Int_t GetEntries() const
TString & ReplaceAll(const char *s1, const char *s2)
const Int_t n
#define F(x, y, z)
int iterate(rng_state_t *X)