KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
KVExpDB.cpp
1//Created by KVClassFactory on Tue Jul 12 11:43:52 2016
2//Author: bonnet,,,
3
4#include "KVExpDB.h"
5#include "KVDBSystem.h"
6#include "KVNumberList.h"
7#include "TSystem.h"
8#include <KVFileReader.h>
9#include <iostream>
10#include "KVUnownedList.h"
11using namespace std;
12
13KVExpDB* gExpDB = nullptr;
14
16
17
18
20
21void KVExpDB::init()
22{
23 //default initialisations
24
25 fRuns = AddTable("Runs", "List of available runs");
26 fRuns->SetDefaultFormat("Run %d"); // default format for run names
27 fSystems = AddTable("Systems", "List of available systems");
28}
29
30
31
34
36 : KVDataBase()
37{
38 // Default constructor
39}
40
41
42
43
46
48 : KVDataBase(name), fDataSet(name)
49{
50 // Constructor inherited from KVDataBase
51 init();
52}
53
54
55
56
59
60KVExpDB::KVExpDB(const Char_t* name, const Char_t* title)
61 : KVDataBase(name, title), fDataSet(name)
62{
63 // Constructor inherited from KVDataBase
64 init();
65}
66
67
68
69
72
74{
75 // Destructor
76 if (gExpDB == this) gExpDB = nullptr;
77}
78
79
80
86
88 UInt_t last_run)
89{
90 //If the KVDBRecord 'rec' (i.e. set of calibration parameters, reaction system, etc.) is
91 //associated to, or valid for, a range of runs, we use this method in order to link the record
92 //and the runs. The list of associated runs will be kept with the record, and each of the runs
93 //will have a link to the record.
94
95 for (UInt_t ii = first_run; ii <= last_run; ii++) {
97 }
98}
99
100
106
108{
109 //If the KVDBRecord 'rec' (i.e. set of calibration parameters, reaction system, etc.) is
110 //associated to, or valid for, a range of runs, we use this method in order to link the record
111 //and the runs. The list of associated runs will be kept with the record, and each of the runs
112 //will have a link to the record.
113 nl.Begin();
114 while (!nl.End()) {
115 Int_t rr = nl.Next();
116 //Info("LinkRecordToRunRange","run number %d",rr);
117 LinkRecordToRun(rec, rr);
118 }
119}
120
121
122
124
126{
127
128 KVDBRecord* run = 0;
129 if ((run = fRuns->GetRecord(rnumber)))
130 rec->AddLink("Runs", run);
131
132}
133
134
135
143
145 UInt_t run_ranges[][2])
146{
147 //Call LinkRecordToRunRange for a set of run ranges stored in the two-dimensional array
148 //in the following way:
149 // run_ranges[0][0] = first run of first run range
150 // run_ranges[0][1] = last run of first run range
151 // run_ranges[1][0] = first run of second run range etc. etc.
152 //rr_number is the number of run ranges in the array
153
154 for (UInt_t i = 0; i < rr_number; i++) {
155 LinkRecordToRunRange(rec, run_ranges[i][0], run_ranges[i][1]);
156 }
157}
158
159
160
163
165 UInt_t run_ranges[][2])
166{
167 //Link the records contained in the list to the set of runs (see LinkRecordToRunRanges).
168
169 if (!list) {
170 Error("LinkListToRunRanges",
171 "NULL pointer passed for parameter TList");
172 return;
173 }
174 if (list->GetSize() == 0) {
175 Error("LinkListToRunRanges(TList*,UInt_t,UInt_t*)",
176 "The list is empty");
177 return;
178 }
179 TIter next(list);
181
182 for (UInt_t ru_ra = 0; ru_ra < rr_number; ru_ra++) {
183 UInt_t first_run = run_ranges[ru_ra][0];
184 UInt_t last_run = run_ranges[ru_ra][1];
185 for (UInt_t i = first_run; i <= last_run; i++) {
186 KVDBRecord* run = GetDBRun(i);
187 while ((rec = (KVDBRecord*) next())) {
188 if (run)
189 rec->AddLink("Runs", run);
190 }
191 next.Reset();
192 }
193 }
194}
195
196
199
201{
202 //Link the records contained in the list to the set of runs (see LinkRecordToRunRanges).
203
204 if (!list) {
205 Error("LinkListToRunRange",
206 "NULL pointer passed for parameter TList");
207 return;
208 }
209 if (list->GetSize() == 0) {
210 Error("LinkListToRunRange(TList*,KVNumberList)",
211 "The list is empty");
212 return;
213 }
214 TIter next(list);
216 while ((rec = (KVDBRecord*) next())) {
218 }
219}
220
221
222
248
250{
251 //Reads list of systems with associated run ranges, creates KVDBSystem
252 //records for these systems, and links them to the appropriate KVDBRun
253 //records using LinkListToRunRanges.
254 //
255 //There are 2 formats for the description of systems:
256 //
257 //+129Xe + natSn 25 MeV/A '+' indicates beginning of system description
258 //129 54 119 50 0.1 25.0 A,Z of projectile and target, target thickness (mg/cm2), beam energy (MeV/A)
259 //Run Range : 614 636 runs associated with system
260 //Run Range : 638 647 runs associated with system
261 //
262 //This is sufficient in the simple case where the experiment has a single
263 //layer target oriented perpendicular to the beam. However, for more
264 //complicated targets we can specify as follows :
265 //
266 //+155Gd + 238U 36 MeV/A
267 //155 64 238 92 0.1 36.0
268 //Target : 3 0.0 target with 3 layers, angle 0 degrees
269 //C 0.02 1st layer : carbon, 20 g/cm2
270 //238U 0.1 2nd layer : uranium-238, 100 g/cm2
271 //C 0.023 3rd layer : carbon, 23 g/cm2
272 //Run Range : 770 804
273 //
274 //Lines beginning '#' are comments.
275
276
277 std::ifstream fin;
278 if (OpenCalibFile("Systems", fin)) {
279 Info("ReadSystemList()", "Reading Systems parameters ...");
280
282
283 char next_char = fin.peek();
284 while (next_char != '+' && fin.good()) {
285 line.ReadLine(fin, kFALSE);
286 next_char = fin.peek();
287 }
288
289 while (fin.good() && !fin.eof() && next_char == '+') {
290 KVDBSystem* sys = new KVDBSystem("NEW SYSTEM");
291 AddSystem(sys);
292 sys->Load(fin);
293 next_char = fin.peek();
294 }
295 fin.close();
296 }
297 else {
298 Error("ReadSystemList()", "Could not open file %s",
299 GetCalibFileName("Systems").Data());
300 }
301 // if any runs are not associated with any system
302 // we create an 'unknown' system and associate it to all runs
303 KVDBSystem* sys = 0;
304 TIter nextRun(GetRuns());
305 KVDBRun* run;
306 while ((run = (KVDBRun*)nextRun())) {
307 if (!run->GetSystem()) {
308 if (!sys) {
309 sys = new KVDBSystem("[unknown]");
310 AddSystem(sys);
311 }
312 sys->AddRun(run);
313 }
314 }
315
316 // rehash the record table now that all names are set
317 fSystems->Rehash();
318}
319
320
321
328
330{
331 //Write the 'Systems.dat' file for this database.
332 //The actual name of the file is given by the value of the environment variable
333 //[dataset_name].INDRADB.Systems (if it exists), otherwise the value of
334 //INDRADB.Systems is used. The file is written in the
335 //$KVROOT/[dataset_directory] directory.
336
337 ofstream sysfile;
338 KVBase::SearchAndOpenKVFile(GetDBEnv("Systems"), sysfile, fDataSet.Data());
339 TIter next(GetSystems());
340 KVDBSystem* sys;
341 TDatime now;
342 sysfile << "# " << GetDBEnv("Systems") << " file written by "
343 << ClassName() << "::WriteSystemsFile on " << now.AsString() << endl;
344 cout << GetDBEnv("Systems") << " file written by "
345 << ClassName() << "::WriteSystemsFile on " << now.AsString() << endl;
346 while ((sys = (KVDBSystem*)next())) {
347 if (strcmp(sys->GetName(), "[unknown]")) { //do not write dummy 'unknown' system
348 sys->Save(sysfile);
349 sysfile << endl;
350 }
351 }
352 sysfile.close();
353}
354
355
356
361
362void KVExpDB::Save(const Char_t* what)
363{
364 //Save (in the appropriate text file) the informations on:
365 // what = "Systems" : write Systems.dat file
366 // what = "Runlist" : write Runlist.csv
367 if (!strcmp(what, "Systems")) WriteSystemsFile();
368 else if (!strcmp(what, "Runlist")) WriteRunListFile();
369}
370
371
372
373
381
383{
384 //Write a file containing a line describing each run in the database.
385 //The delimiter symbol used in each line is '|' by default.
386 //The first line of the file will be a header description, given by calling
387 //KVDBRun::WriteRunListHeader() for the first run in the database.
388 //Then we call KVDBRun::WriteRunListLine() for each run.
389 //These are virtual methods redefined by child classes of KVDBRun.
390
391 ofstream rlistf;
392 KVBase::SearchAndOpenKVFile(GetDBEnv("Runlist"), rlistf, fDataSet.Data());
393 TDatime now;
394 rlistf << "# " << GetDBEnv("Runlist") << " file written by "
395 << ClassName() << "::WriteRunListFile on " << now.AsString() << endl;
396 cout << GetDBEnv("Runlist") << " file written by "
397 << ClassName() << "::WriteRunListFile on " << now.AsString() << endl;
398 if (GetRuns() && GetRuns()->GetEntries() > 0) {
399 TIter next_run(GetRuns());
400 //write header in file
401 ((KVDBRun*) GetRuns()->At(0))->WriteRunListHeader(rlistf, GetDBEnv("Runlist.Separator")[0]);
402 KVDBRun* run;
403 while ((run = (KVDBRun*) next_run())) {
404
405 run->WriteRunListLine(rlistf, GetDBEnv("Runlist.Separator")[0]);
406
407 }
408 }
409 else {
410 Warning("WriteRunListFile()", "run list is empty !!!");
411 }
412 rlistf.close();
413}
414
415
416
432
433Bool_t KVExpDB::OpenCalibFile(const Char_t* type, ifstream& fs) const
434{
435 //Find and open calibration parameter file of given type. Return kTRUE if all OK.
436 //types are defined in $KVROOT/KVFiles/.kvrootrc by lines such as (use INDRA as example)
437 //
438 //# Default name for file describing systems for each dataset.
439 //INDRADB.Systems: Systems.dat
440 //
441 //A file with the given name will be looked for in the dataset calibration file
442 //directory given by GetDataSetDir()
443 //
444 //Filenames specific to a given dataset may also be defined:
445 //
446 //INDRA_camp5.INDRADB.Pedestals: Pedestals5.dat
447 //
448 //where 'INDRA_camp5' is the name of the dataset in question.
449
451}
452
453
454
486
487Bool_t KVExpDB::FindCalibFile(const Char_t* type, TString& fullpath, const TString& array_name) const
488{
489 //Find calibration parameter file of given type. Return kTRUE if all OK.
490 //In this case fullpath contains the full path to the file.
491 //
492 //Types are defined in $KVROOT/KVFiles/.kvrootrc by lines such as (use INDRA as example)
493 //
494 //~~~~
495 //# Default name for file describing systems for each dataset.
496 //INDRADB.Systems: Systems.dat
497 //~~~~
498 //
499 //A file with the given name will be looked for in the dataset calibration file
500 //directory given by GetDataSetDir()
501 //
502 //Filenames specific to a given dataset may also be defined:
503 //
504 //~~~~
505 //INDRA_camp5.INDRADB.Pedestals: Pedestals5.dat
506 //~~~~
507 //
508 //where 'INDRA_camp5' is the name of the dataset in question.
509 //
510 //If 'array_name' is given and no file is found with this filename,
511 //we try looking for a file called 'array_name.filename', i.e. if a filename
512 //
513 //~~~~
514 //INDRADB.Pressures: ChIoPressures.dat
515 //~~~~
516 //
517 //is defined, but no ChIoPressures.dat file exists for the dataset, if array_name="INDRA"
518 //then we look for a file called INDRA.ChIoPressures.dat
519
520 auto cal_file_name = GetCalibFileName(type);
521 if (cal_file_name.IsNull()) return kFALSE;
522 if (KVBase::SearchKVFile(cal_file_name, fullpath, GetDataSetDir()))
523 return kTRUE;
524 if (!array_name.IsNull()) {
525 cal_file_name.Prepend(Form("%s.", array_name.Data()));
526 return KVBase::SearchKVFile(cal_file_name, fullpath, GetDataSetDir());
527 }
528 return kFALSE;
529}
530
531
532
533
546
548{
549 // Print compact listing of runs in the number list like this:
550 //
551 // root [9] gIndraDB->PrintRuns("8100-8120")
552 // RUN SYSTEM TRIGGER EVENTS COMMENTS
553 // ------------------------------------------------------------------------------------------------------------------
554 // 8100 129Xe + 58Ni 8 MeV/A M>=2 968673
555 // 8101 129Xe + 58Ni 8 MeV/A M>=2 969166
556 // 8102 129Xe + 58Ni 8 MeV/A M>=2 960772
557 // 8103 129Xe + 58Ni 8 MeV/A M>=2 970029
558 // 8104 129Xe + 58Ni 8 MeV/A M>=2 502992 disjonction ht chassis 1
559 // 8105 129Xe + 58Ni 8 MeV/A M>=2 957015 intensite augmentee a 200 pA
560
561 printf("RUN\tSYSTEM\t\t\t\tTRIGGER\t\tEVENTS\t\tCOMMENTS\n");
562 printf("------------------------------------------------------------------------------------------------------------------\n");
563 nl.Begin();
564 while (!nl.End()) {
565 KVDBRun* run = GetDBRun(nl.Next());
566 if (!run) continue;
567 printf("%4d\t%-30s\t%s\t\t%llu\t\t%s\n",
568 run->GetNumber(), (run->GetSystem() ? run->GetSystem()->GetName() : " "), run->GetTriggerString(),
569 run->GetEvents(), run->GetComments());
570 }
571}
572
573
574
576
578{
579 gExpDB = this;
580}
581
582
583
584
598
599KVExpDB* KVExpDB::MakeDataBase(const Char_t* name, const Char_t* datasetdir)
600{
601 //Static function which will create and 'Build' the database object corresponding to 'name'
602 //These are defined as 'Plugin' objects in the file $KVROOT/KVFiles/.kvrootrc :
603 //
604 // Plugin.KVExpDB: INDRA_camp1 KVDataBase1 KVIndra "KVDataBase1()"
605 // +Plugin.KVExpDB: INDRA_camp2 KVDataBase2 KVIndra "KVDataBase2()"
606 // +Plugin.KVExpDB: INDRA_camp4 KVDataBase4 KVIndra "KVDataBase4()"
607 // +Plugin.KVExpDB: INDRA_camp5 KVDataBase5 KVIndra5 "KVDataBase5()"
608 //
609 //The 'name' ("INDRA_camp1" etc.) corresponds to the name of a dataset in $KVROOT/KVFiles/manip.list
610 //This name is stored in member variable fDataSet.
611 //The constructors/macros used have arguments (const Char_t* name)
612
613 //does plugin exist for given name ?
614 TPluginHandler* ph;
615 if (!(ph = KVBase::LoadPlugin("KVExpDB", name))) {
616 return 0;
617 }
618 //execute constructor/macro for database
619 KVExpDB* mda = (KVExpDB*) ph->ExecPlugin(1, name);
620 mda->SetDataSetDir(datasetdir);
621
622 mda->Build();
623
624 return mda;
625}
626
627
628
632
633ULong64_t KVExpDB::GetTotalEvents(int first_run, int last_run) const
634{
635 // Return total number of events in range [first_run,last_run]
636 // (if last_run=-1, go to last known run)
637
638 ULong64_t total = 0;
639 TIter next(GetRuns());
640 KVDBRun* dbr;
641 while ((dbr = (KVDBRun*)next())) {
642 if (dbr->GetNumber() >= first_run) {
643 if ((last_run > 0 && dbr->GetNumber() <= last_run)
644 || last_run == -1) total += dbr->GetEvents();
645 }
646 }
647 return total;
648}
649
650
651
654
656{
657 // Return total number of events for given system
658
659 if (!GetSystem(system)) {
660 Error("GetTotalEvents", "No system with name : %s", system.Data());
661 return 0;
662 }
663 TIter it(GetSystem(system)->GetRuns());
664 ULong64_t total = 0;
665 KVDBRun* dbr;
666 while ((dbr = (KVDBRun*)it())) {
667 total += dbr->GetEvents();
668 }
669 return total;
670}
671
672
673
674
679
681{
682 //Will look for gEnv->GetValue name "name_of_dataset.fDBType.type",
683 //then "fDBType.type" if no dataset-specific value is found,
684 //then "EXPDB.type" if no database-specific value is found
685
686 if (fDataSet == "") return "";
688 if (!p.Length()) return KVBase::GetDataSetEnv(fDataSet, Form("EXPDB.%s", type), "");
689 return p;
690}
691
692
693
705
707{
708 // Looks for file with name given by one of the following variables:
709 //
710 // [DBtype].Comments
711 // [dataset].[DBtype].Comments
712 //
713 // and opens it to read and add comments on runs.
714 // Format of file is:
715 //
716 // run=3830-3836 | really amazing data in these runs
717 //
718
719 TString comments_file = GetCalibFileName("Comments");
720 if (comments_file == "") return;
721 TString fullpath;
722 if (!FindCalibFile("Comments", fullpath)) return;
723 Info("ReadComments", "Reading run comments in file %s...", fullpath.Data());
724
725 KVFileReader fr;
726 if (!fr.OpenFileToRead(fullpath)) {
727 Error("ReadComments", "Problem opening file %s", fullpath.Data());
728 return;
729 }
730
731 while (fr.IsOK()) {
732 fr.ReadLine("|");
733 if (fr.GetCurrentLine().BeginsWith("#")) {
734
735 }
736 else if (fr.GetCurrentLine() == "") {
737
738 }
739 else {
740 if (fr.GetNparRead() == 2) {
741 KVString srun(fr.GetReadPar(0));
742 srun.Begin("=");
743 srun.Next();
744 KVNumberList lruns(srun.Next());
745 KVString comments(fr.GetReadPar(1));
746 lruns.Begin();
747 while (!lruns.End()) {
748 Int_t run = lruns.Next();
749 KVDBRun* dbrun = GetDBRun(run);
750 if (dbrun)
751 dbrun->SetComments(comments.Data());
752 }
753 }
754 }
755 }
756}
757
758
759
int Int_t
unsigned int UInt_t
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
constexpr Bool_t kTRUE
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
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 Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char name[80]
char * Form(const char *fmt,...)
static const Char_t * GetDataSetEnv(const Char_t *dataset, const Char_t *type, const Char_t *defval)
Definition KVBase.cpp:1619
static Bool_t SearchKVFile(const Char_t *name, TString &fullpath, const Char_t *kvsubdir="")
Definition KVBase.cpp:538
static Bool_t SearchAndOpenKVFile(const Char_t *name, KVSQLite::database &dbfile, const Char_t *kvsubdir="")
Definition KVBase.cpp:649
static TPluginHandler * LoadPlugin(const Char_t *base, const Char_t *uri="0")
Definition KVBase.cpp:793
Record folder for the database.
Definition KVDBRecord.h:43
virtual Int_t GetNumber() const
Definition KVDBRecord.h:73
Description of an experimental run in database ,,.
Definition KVDBRun.h:36
const Char_t * GetComments() const
Definition KVDBRun.h:147
ULong64_t GetEvents() const
Definition KVDBRun.h:134
void SetComments(const KVString &comments)
Definition KVDBRun.h:182
KVDBSystem * GetSystem() const
Definition KVDBRun.cpp:242
virtual void WriteRunListLine(std::ostream &, Char_t delim='|') const
Definition KVDBRun.cpp:96
const Char_t * GetTriggerString() const
Definition KVDBRun.h:108
Database class used to store information on different colliding systems studied during an experiment....
Definition KVDBSystem.h:52
virtual void Save(std::ostream &) const
void AddRun(KVDBRecord *)
virtual void Load(std::istream &)
virtual KVDBRecord * GetRecord(const Char_t *rec_name) const
Definition KVDBTable.h:58
void Rehash(void)
Simple cross-referenced database structure.
Definition KVDataBase.h:137
Base class to describe database of an experiment ,,.
Definition KVExpDB.h:20
void AddSystem(KVDBSystem *r)
Definition KVExpDB.h:94
virtual void Build()
Definition KVExpDB.h:144
virtual ~KVExpDB()
Destructor.
Definition KVExpDB.cpp:73
virtual void ReadComments()
Definition KVExpDB.cpp:706
virtual void ReadSystemList()
Definition KVExpDB.cpp:249
virtual void cd()
Definition KVExpDB.cpp:577
KVDBTable * fRuns
table of runs
Definition KVExpDB.h:28
virtual KVSeqCollection * GetSystems() const
Definition KVExpDB.h:89
virtual void LinkRecordToRun(KVDBRecord *rec, Int_t run)
Definition KVExpDB.cpp:125
TString GetCalibFileName(const Char_t *type) const
Definition KVExpDB.h:109
virtual void LinkListToRunRanges(TList *list, UInt_t rr_number, UInt_t run_ranges[][2])
Link the records contained in the list to the set of runs (see LinkRecordToRunRanges).
Definition KVExpDB.cpp:164
KVDBTable * fSystems
table of systems
Definition KVExpDB.h:29
virtual void PrintRuns(KVNumberList &) const
Definition KVExpDB.cpp:547
ULong64_t GetTotalEvents(int first_run, int last_run=-1) const
Definition KVExpDB.cpp:633
virtual void Save(const Char_t *)
Definition KVExpDB.cpp:362
TString fDBType
used by GetDBEnv
Definition KVExpDB.h:25
virtual void LinkRecordToRunRanges(KVDBRecord *rec, UInt_t rr_number, UInt_t run_ranges[][2])
Definition KVExpDB.cpp:144
virtual void LinkListToRunRange(TList *list, const KVNumberList &nl)
Link the records contained in the list to the set of runs (see LinkRecordToRunRanges).
Definition KVExpDB.cpp:200
void WriteSystemsFile() const
Definition KVExpDB.cpp:329
KVExpDB()
Default constructor.
Definition KVExpDB.cpp:35
const Char_t * GetDataSetDir() const
Definition KVExpDB.h:136
void init()
default initialisations
Definition KVExpDB.cpp:21
virtual void LinkRecordToRunRange(KVDBRecord *rec, UInt_t first_run, UInt_t last_run)
Definition KVExpDB.cpp:87
virtual KVDBSystem * GetSystem(const Char_t *system) const
Definition KVExpDB.h:85
void SetDataSetDir(const Char_t *d)
Definition KVExpDB.h:140
static KVExpDB * MakeDataBase(const Char_t *name, const Char_t *datasetdir)
Definition KVExpDB.cpp:599
KVDBRun * GetDBRun(Int_t number) const
Definition KVExpDB.h:76
void WriteRunListFile() const
Definition KVExpDB.cpp:382
virtual TString GetDBEnv(const Char_t *) const
Definition KVExpDB.cpp:680
Bool_t OpenCalibFile(const Char_t *type, std::ifstream &fs) const
Definition KVExpDB.cpp:433
TString fDataSet
the name of the dataset to which this database is associated
Definition KVExpDB.h:23
Bool_t FindCalibFile(const Char_t *type, TString &fullpath, const TString &array_name="") const
Definition KVExpDB.cpp:487
virtual KVSeqCollection * GetRuns() const
Definition KVExpDB.h:72
Handle reading columns of numeric data in text files.
KVString GetCurrentLine()
ReadStatus ReadLine(const KVString &pattern="")
Int_t GetNparRead() const
Bool_t IsOK()
KVString GetReadPar(Int_t pos) const
Bool_t OpenFileToRead(const KVString &filename)
Strings used to represent a set of ranges of values.
Bool_t End(void) const
void Begin(void) const
Int_t Next(void) const
virtual TObject * At(Int_t idx) const
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
KVString Next(Bool_t strip_whitespace=kFALSE) const
Definition KVString.cpp:695
virtual Int_t GetSize() const
const char * AsString() const
void Reset()
const char * GetName() const override
virtual const char * ClassName() const
virtual void Warning(const char *method, const char *msgfmt,...) const
virtual void Error(const char *method, const char *msgfmt,...) const
virtual void Info(const char *method, const char *msgfmt,...) const
Longptr_t ExecPlugin(int nargs)
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Bool_t IsNull() const
unsigned long long ULong64_t
TLine * line
rec
ClassImp(TPyArg)