KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVRTGIDManager.cpp
1//Created by KVClassFactory on Thu Oct 11 11:51:14 2012
2//Author: Dijon Aurore
3
4#include "KVRTGIDManager.h"
5#include "KVTGIDZ.h"
6#include "KVTGIDGrid.h"
7#include "KVIDGridManager.h"
8#include "KVMultiDetArray.h"
9#include "KVIDTelescope.h"
10using namespace std;
11
13
14
15
16
18
19
26
28{
29 // Default constructor
30 // The list fIDList is not owner anymore.
31 // Now the identification function belong to fIDGlobalList,
32 // the list return by GetListOfIDFunctions() is not the owner
33 // of identification functions anymore.
34
36
37}
38
39
40
45
47{
48 // Destructor
49 // Remove the global list of identification functions if
50 // it is empty.
51
53}
54
55
56
61
63{
64 // Add an identification object to the global list (fIDGlobalList).
65 // The identification object is not added to the local list (fIDList) in this method anymore. To do that, see SetIDFunctionInTelescopes)
66 // This method just calls AddTGIDToGlobalList(KVTGID *);
67
69}
70
71
72
83
85 const Char_t* id_type,
86 const Char_t* grid_type)
87{
88 //Overrides the same method of KVTGIDManager. This method
89 //Retrieve the identification object using:
90 // id_type = type of identification ("Z", "A", "A_for_Z=3", etc.)
91 // grid_type = type of identification grid ("GG", "PG1", etc.)
92 // but the name of ID telescope is not used anymore because identification
93 // object can be associated to several ID telescopes.
94 // If any object is found then it returns the first:
95 // - KVTGIDZA object if id_type contains "A"
96 // - KVTGIDZ object else.
97
98 Char_t cname[9] = "KVTGIDZ";
99 TString buff = id_type;
100
101 if (buff.Contains("A")) strcpy(cname, "KVTGIDZA");
102
103 buff.Form("_%s_%s", id_type, grid_type);
104
105 TIter next(&fIDList);
106 KVTGID* tgid = NULL;
107 KVTGID* tgid2 = NULL;
109
110 while ((tgid = (KVTGID*)next())) {
111 name = tgid->GetName();
112 if (name.Contains(buff)) return tgid;
113 if (!tgid2 && !strcmp(tgid->ClassName(), cname)) tgid2 = tgid;
114 }
115
116 return tgid2;
117}
118
119
121
122
123
125
126{
127 // Add an identification object to the local list (fIDList).
129}
130
131
132
135
137{
138 //Remove the identification object with name from the local list.
139
140 KVTGID* tgid = 0;
141 // Remove the function from the current list
142 if (!(tgid = (KVTGID*)fIDList.FindObject(tgid))) return;
143 fIDList.Remove(tgid);
144 //recalculate fID_max if needed
145 if (tgid->GetIDmax() == fID_max) {
146 fID_max = 0.;
147 TIter n(&fIDList);
148 KVTGID* t;
149 while ((t = (KVTGID*)n())) fID_max = TMath::Max(fID_max, t->GetIDmax());
150 }
151}
152
153
154
156
158{
159 if (!fIDGlobalList) return;
160
161 //Delete the identification object with name from the global list.
162 KVTGID* tgid = 0;
163
164 // Delete the function from the global list
165 if (!(tgid = (KVTGID*)fIDGlobalList->FindObject(name))) return;
166 fIDGlobalList->Remove(tgid);
167 delete tgid;
169}
170
171
172
177
179{
180 // Fill a sublist of TGID found in object inheriting
181 // from KVTGIDGrid in gIDGridManager.
182 // Return kFALSE if gIDGridManager is not defined.
183
184 if (!gIDGridManager) return kFALSE;
185
186 tgid_list->SetOwner(kFALSE);
187 KVList* grid_list = NULL;
188 KVIDGridManager* gm = gIDGridManager;
189 grid_list = gm->GetGrids();
190 TIter next_g(grid_list);
191 TObject* obj = NULL;
192 KVTGID* tgid = NULL;
193 while ((obj = next_g())) {
194 if (obj->InheritsFrom("KVTGIDGrid")) {
195 tgid = const_cast <KVTGID*>(((KVTGIDGrid*)obj)->GetTGID());
196 if (tgid)
197 tgid_list->Add(tgid);
198 }
199 }
200 return kTRUE;
201}
202
203
204
208
210{
211
212 //Read file, create KVTGID fits corresponding to information in file.
213 //Comment line beginning by '#' is skipped.
214
215 ifstream fitfile(filename);
216 if (!fitfile.good()) {
217 Error("KVRTGIDManager::ReadAsciiFile", "File %s cannot be opened", filename);
218 return kFALSE;
219 }
220 KVString s, cname;
221 while (fitfile.good()) {
222 //read a line
223 s.ReadLine(fitfile);
224
225 if (s.BeginsWith("#")) continue;
226 if (s.BeginsWith("++")) {
227 //New fit
228 //Get name of class by stripping off the '+' at the start of the line
229 s.Remove(0, 2);
230 cname = s;
231 cname.Remove(s.Index("::"));
232 TClass* cl = TClass::GetClass(cname.Data());
233 if (cl && cl->InheritsFrom("KVTGID")) {
234
235 s.Remove(0, s.Index("::") + 2);
236
237 // Make new identification function
238 KVTGID* fit = NULL;
239 fit = KVTGID::ReadFromAsciiFile(s.Data(), fitfile);
241
242 // when mass identification is possible, make a copy
243 // for Z identification
244 if (!fit->GetZorA()) {
245 KVTGIDZ* fitz = new KVTGIDZ(*fit);
246 fitz->SetTitle(Form("COPY from %p", fit));
248 }
249 }
250 }
251 }
252 fitfile.close();
253 return kTRUE;
254}
255
256
257
260
262{
263 //Remove all identification objects of the local list.
264 fIDList.Clear();
265 fID_max = 0.;
266}
267
268
269
272
274{
275// Add an identification object to the global list (fIDGlobalList).
276
277 if (!tgid) return;
278 if (!fIDGlobalList) {
279 fIDGlobalList = new KVList;
281 }
282 fIDGlobalList->Add(tgid);
283}
284
285
286
305
306void KVRTGIDManager::BuildGridForAllTGID(const Char_t* idtype, Double_t xmin, Double_t xmax, Int_t ID_min, Int_t ID_max, Int_t npoints, Bool_t logscale)
307{
308 // Build a grid (KVTGIDGrid) for all the identification functions
309 // of the global list. The new grids are automatically loaded in
310 // gIDGridManager and are visible in the Grid Manager GUI.
311 // If a function is already associated to a grid then a new grid
312 // is not built. No grid is built for copies of KVTGID's made in
313 // the method ReadAsciiFile(...).
314 //
315 // Inputs: idtype - type of the identification for which the
316 // grids will be built (CI-SI, SI-CSI, CI-CSI,
317 // SI75-SILI, ...). By default, all grids are
318 // built
319 // xmin
320 // xmax
321 // ID_min
322 // ID_max
323 // npoints
324 // logscale - see KVTGIDGrid::Generate(...)
325
326 if (!fIDGlobalList) return;
327
328 // First make a sublist of TGID found in object inheriting
329 // from KVTGIDGrid in gIDGridManager
330 TList tgid_list;
331 GetTGIDfromIDGridManager(&tgid_list);
332 KVIDGridManager* gm = gIDGridManager;
333 KVList* grid_list = NULL;
334 if (gm) {
335 grid_list = gm->GetGrids();
336 grid_list->Disconnect("Modified()", gm, "Modified()");
337 }
338 // If the TGID of the global list is not in the sublist then
339 // build grid
340 TIter next(fIDGlobalList);
341 Bool_t IDtypeOK = strcmp(idtype, "");
342 KVTGID* tgid = NULL;
343 while ((tgid = (KVTGID*)next())) {
344 if (tgid_list.FindObject(tgid)) continue;
345
346 if (IDtypeOK) {
347 KVBase* idt = NULL;
349 if (!idt_list) continue;
350 if (!(idt = (KVBase*)idt_list->First())) continue;
351 SafeDelete(idt_list);
352 if (strcmp(idtype, idt->GetLabel())) continue;
353 }
354 // Not built grid for a KVTGID copy
355 TString tmp = tgid->GetTitle();
356 if (tmp.Contains("COPY")) {
357 tmp.Remove(0, tmp.Index("0x"));
358 KVTGID* tmp_tgid = reinterpret_cast<KVTGID*>((Int_t)tmp.Atof());
359 Warning("KVRTGIDManager::BuildGridForAllTGID", "No grid built for %s (%s, %p) because it is a copy of %s (%s, %p)"
360 , tgid->GetName(), tgid->ClassName(), tgid
361 , tmp_tgid->GetName(), tmp_tgid->ClassName(), tmp_tgid);
362 continue;
363 }
364 KVTGIDGrid* grid = new KVTGIDGrid(tgid);
365 grid->SetOnlyZId((Bool_t)tgid->GetZorA());
366 if (tgid->GetZorA()) grid->SetMassFormula(tgid->GetMassFormula());
367 grid->Generate(xmax, xmin, ID_min, ID_max, npoints, logscale);
368 Info("KVRTGIDManager::BuildGridForAllTGID", "grid built from its TGID function %s (%s, %p)"
369 , tgid->GetName(), tgid->ClassName(), tgid);
370 }
371 if (grid_list) grid_list->Connect("Modified()", "KVIDGridManager", gm, "Modified()");
372 gm->Modified();
373}
374
375
376
380
382{
383 //Delete the global list of identification objects. Since this
384 //list is owner then all listed identification objects are deleted.
385
387}
388
389
390
394
396{
397 // For each identification function of the global list which is valid for this run, we add it in the associated telescope which
398 // have to inherits from KVTGIDManager and from a KVIDTelescope.
399
400 TIter next(fIDGlobalList);
401 KVTGID* tgid = NULL;
402
403 while ((tgid = (KVTGID*)next())) {
404
405 if (!tgid->IsValidForRun(run)) continue;
406
407 // this list have to be deleted after use
408 TCollection* lidtel = GetIDTelescopesForTGID(tgid);
409 TIter nextidt(lidtel);
410 TObject* idt = NULL;
411 KVRTGIDManager* tgidm = NULL;
412
413 while ((idt = nextidt())) {
414 if (!idt->InheritsFrom("KVRTGIDManager")) {
415 Error("KVRTGIDManager::SetIDFuncInTelescopes", "The IDtelescope %s does not inherit from KVRTGIDManager", idt->GetName());
416 continue;
417 }
418 tgidm = (KVRTGIDManager*)idt->IsA()->DynamicCast(KVRTGIDManager::Class(), idt);
419 tgidm->SetTGID(tgid);
420 }
421 delete lidtel;
422 }
423}
424
425
426
431
433{
434 // Returns the number of identification functions found
435 // in grids of gIDGridManager which were missing in the
436 // the global list and updates this list.
437
438 TList tgid_list;
439 if (!GetTGIDfromIDGridManager(&tgid_list)) return 0;
440
441 // If the TGID of tgid_list is not in the global list then
442 // add it
443 TIter next(&tgid_list);
444 KVTGID* tgid = NULL;
445 Int_t ntgid = 0;
446 while ((tgid = (KVTGID*)next())) {
447 if (!fIDGlobalList) {
449 ntgid++;
450 continue;
451 }
452 if (fIDGlobalList->FindObject(tgid)) continue;
454 ntgid++;
455 }
456 return ntgid;
457}
458
459
460
467
468Int_t KVRTGIDManager::WriteAsciiFile(const Char_t* filename, const TCollection* selection, Bool_t update)
469{
470 // Write identification functions in file 'filename'.
471 // If selection=0 (default), write all grids.
472 // If update=true, call UpdateListFromIDGridManager() before writing
473 // If selection!=0, write only grids in list.
474 // Returns number of functions written in file.
475
477 if (!fIDGlobalList) {
478 Warning("KVRTGIDManager::WriteAsciiFile", "No listed identification functions to write");
479 return 0;
480 }
481
482 ofstream tgidfile(filename);
483 if (!tgidfile.is_open()) {
484 Error("KVRTGIDManager::WriteAsciiFile", "No write permission for file %s", filename);
485 return 0;
486 }
487
488 const TCollection* list_tgid = (selection ? selection : fIDGlobalList);
489 TIter next(list_tgid);
490 KVTGID* tgid = NULL;
491 Int_t n_saved = 0;
492
493 while ((tgid = (KVTGID*)next())) {
494
495 // Not write a KVTGID copy
496 TString tmp = tgid->GetTitle();
497 if (tmp.Contains("COPY")) {
498 tmp.Remove(0, tmp.Index("0x"));
499 KVTGID* tmp_tgid = reinterpret_cast<KVTGID*>((Int_t)tmp.Atof());
500 Warning("KVRTGIDManager::WriteAsciiFile", "The function %s (%s, %p) is not written because it is a copy of %s (%s, %p)"
501 , tgid->GetName(), tgid->ClassName(), tgid
502 , tmp_tgid->GetName(), tmp_tgid->ClassName(), tmp_tgid);
503 continue;
504 }
505 tgid->WriteToAsciiFile(tgidfile);
506 Info("KVRTGIDManager::WriteAsciiFile", "%s (%s, %p) saved", tgid->GetName(), tgid->ClassName(), tgid);
507 n_saved++;
508 }
509
510 tgidfile.close();
511 return n_saved;
512}
513
514
515
521
523{
524 // Return TList of all ID telescopes for which fit is valid.
525 // Returns 0 if no telescopes are defined, or if gMultiDetArray object is not defined
526 // (we search for the telescopes using their name and gMultiDetArray->GetIDTelescope()).
527 // WARNING: DELETE this list after use !!!
528 if (tgid->GetIDTelescopes() == "/" || !gMultiDetArray) return 0;
529 TList* list = new TList;
530 tgid->GetIDTelescopes().Begin("/");
531 while (!tgid->GetIDTelescopes().End()) {
532 list->Add(gMultiDetArray->GetIDTelescope(tgid->GetIDTelescopes().Next()));
533 }
534 return list;
535}
536
537
int Int_t
unsigned int UInt_t
#define SafeDelete(p)
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char cname
char name[80]
float xmin
float xmax
char * Form(const char *fmt,...)
Base class for KaliVeda framework.
Definition KVBase.h:142
const Char_t * GetLabel() const
Definition KVBase.h:199
void SetMassFormula(Int_t)
virtual void SetOnlyZId(Bool_t yes=kTRUE)
Handles a stock of identification grids to be used by one or more identification telescopes.
KVList * GetGrids()
Extended TList class which owns its objects by default.
Definition KVList.h:28
KVIDTelescope * GetIDTelescope(const Char_t *name) const
Return pointer to DeltaE-E ID Telescope with "name".
Run-dependant KVTGIDManager.
static void BuildGridForAllTGID(const Char_t *idtype="", Double_t xmin=0., Double_t xmax=4096., Int_t ID_min=0, Int_t ID_max=0, Int_t npoints=50, Bool_t logscale=kTRUE)
static void SetIDFuncInTelescopes(UInt_t run)
virtual ~KVRTGIDManager()
static Int_t WriteAsciiFile(const Char_t *filename, const TCollection *selection=0, Bool_t update=kTRUE)
static Int_t UpdateListFromIDGridManager()
virtual KVTGID * GetTGID(const Char_t *idt_name, const Char_t *id_type, const Char_t *grid_type)
static TCollection * GetIDTelescopesForTGID(KVTGID *)
static Bool_t ReadAsciiFile(const Char_t *filename)
virtual void SetTGID(KVTGID *)
Add an identification object to the local list (fIDList).
virtual void RemoveTGID(const Char_t *name)
Remove the identification object with name from the local list.
static void Clear()
virtual void AddTGID(KVTGID *)
static Bool_t GetTGIDfromIDGridManager(TList *tgid_list)
virtual void RemoveAllTGID()
Remove all identification objects of the local list.
static void DeleteTGID(const Char_t *name)
static KVList * fIDGlobalList
Global list of TGID of all the KVRTGIDManager.
static void AddTGIDToGlobalList(KVTGID *)
----— static methods -----------------------—//
virtual TObject * FindObject(const char *name) const
virtual void SetOwner(Bool_t enable=kTRUE)
virtual void Clear(Option_t *option="")
virtual void SetCleanup(Bool_t enable=kTRUE)
virtual void Add(TObject *obj)
virtual TObject * Remove(TObject *obj)
Remove object from list.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition KVString.h:73
void Begin(TString delim) const
Definition KVString.cpp:565
Bool_t End() const
Definition KVString.cpp:634
KVString Next(Bool_t strip_whitespace=kFALSE) const
Definition KVString.cpp:695
Grid representing result of fit.
Definition KVTGIDGrid.h:24
virtual void Generate(Double_t xmax, Double_t xmin, Int_t ID_min=0, Int_t ID_max=0, Int_t npoints=50, Bool_t logscale=kTRUE)
Double_t fID_max
maximum ID of all TGID objects
KVList fIDList
KVTGID objects for identifications.
virtual void AddTGID(KVTGID *)
Abstract base class for charged particle Z identfication using functionals developed by L....
Definition KVTGIDZ.h:33
Abstract base class for particle identfication using functionals developed by L. Tassan-Got (IPN Orsa...
Definition KVTGID.h:44
const KVString & GetIDTelescopes() const
Definition KVTGID.h:296
Bool_t IsValidForRun(Int_t run) const
Definition KVTGID.h:257
Double_t GetIDmax() const
Definition KVTGID.h:121
void WriteToAsciiFile(std::ofstream &) const
Write parameters of LTG fit in file.
Definition KVTGID.cpp:758
Int_t GetZorA() const
Definition KVTGID.h:89
static KVTGID * ReadFromAsciiFile(const Char_t *name, std::ifstream &)
Definition KVTGID.cpp:813
Int_t GetMassFormula() const
Definition KVTGID.h:240
const void * DynamicCast(const TClass *base, const void *obj, Bool_t up=kTRUE)
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
void SetTitle(const char *title="") override
TObject * FindObject(const char *name) const override
void Add(TObject *obj) override
const char * GetName() const override
const char * GetTitle() const override
virtual const char * GetName() const
virtual const char * ClassName() const
virtual Bool_t InheritsFrom(const char *classname) const
virtual TClass * IsA() const
virtual TObject * First() const=0
Double_t Atof() const
void Form(const char *fmt,...)
TString & Remove(EStripType s, char c)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
const Int_t n
fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, criterion, save_best, scheduler)
void Error(const char *location, const char *fmt,...)
void Info(const char *location, const char *fmt,...)
void Warning(const char *location, const char *fmt,...)
void update(const LAYERDATA &prevLayerData, LAYERDATA &currLayerData, double factorWeightDecay, EnumRegularization regularization)
Double_t Max(Double_t a, Double_t b)
ClassImp(TPyArg)