KaliVeda
Toolkit for HIC analysis
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"
11 using namespace std;
12 
13 KVExpDB* gExpDB = nullptr;
14 
16 
17 
18 
21 void 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 
60 KVExpDB::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++) {
96  LinkRecordToRun(rec, 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);
180  KVDBRecord* rec;
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);
215  KVDBRecord* rec;
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 
281  TString line;
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 
362 void 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 
433 Bool_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 
487 Bool_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 
599 KVExpDB* 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 
633 ULong64_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 
680 TString KVExpDB::GetDBEnv(const Char_t* type) const
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
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
const Char_t * GetComments() const
Definition: KVDBRun.h:147
Database class used to store information on different colliding systems studied during an experiment....
Definition: KVDBSystem.h:52
virtual void Save(std::ostream &) const
Definition: KVDBSystem.cpp:259
void AddRun(KVDBRecord *)
Definition: KVDBSystem.cpp:434
virtual void Load(std::istream &)
Definition: KVDBSystem.cpp:302
void Rehash(void)
Definition: KVDBTable.cpp:172
virtual KVDBRecord * GetRecord(const Char_t *rec_name) const
Definition: KVDBTable.h:58
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 KVDBSystem * GetSystem(const Char_t *system) const
Definition: KVExpDB.h:85
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 void LinkRecordToRun(KVDBRecord *rec, Int_t run)
Definition: KVExpDB.cpp:125
KVDBRun * GetDBRun(Int_t number) const
Definition: KVExpDB.h:76
virtual KVSeqCollection * GetRuns() const
Definition: KVExpDB.h:72
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 KVSeqCollection * GetSystems() const
Definition: KVExpDB.h:89
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
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
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
Handle reading columns of numeric data in text files.
Definition: KVFileReader.h:120
KVString GetCurrentLine()
Definition: KVFileReader.h:319
ReadStatus ReadLine(const KVString &pattern="")
Definition: KVFileReader.h:242
Int_t GetNparRead() const
Definition: KVFileReader.h:324
Bool_t IsOK()
Definition: KVFileReader.h:230
KVString GetReadPar(Int_t pos) const
Definition: KVFileReader.h:341
Bool_t OpenFileToRead(const KVString &filename)
Definition: KVFileReader.h:209
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:85
Bool_t End(void) const
Definition: KVNumberList.h:199
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)