KaliVeda
Toolkit for HIC analysis
KVINDRADB_e613.cpp
1 //Created by KVClassFactory on Mon Oct 24 14:38:16 2011
2 //Author: bonnet
3 
4 #include "KVINDRADB_e613.h"
5 #include "KVINDRA.h"
6 #include "KVFileReader.h"
7 #include "TObjArray.h"
8 #include "KVDBParameterSet.h"
9 #include "KVDBChIoPressures.h"
10 
11 using namespace std;
12 
14 
15 
16 
20 {
21  // Default constructor
22 }
23 
24 
25 
27 
29 {
30  Info("KVINDRADB_e613", "Hi coquine, tu es sur la manip e613 ...");
31 }
32 
33 
34 
36 
38 {
39  TString runlist_fullpath;
40  KVBase::SearchKVFile(GetDBEnv("Runlist"), runlist_fullpath, fDataSet.Data());
41 
42  //set comment character for current dataset runlist
43  SetRLCommentChar(GetDBEnv("Runlist.Comment")[0]);
44 
45  //set field separator character for current dataset runlist
46  if (!strcmp(GetDBEnv("Runlist.Separator"), "<TAB>"))
47  SetRLSeparatorChar('\t');
48  else
49  SetRLSeparatorChar(GetDBEnv("Runlist.Separator")[0]);
50 
51  //by default we set two keys for both recognising the 'header' lines and deciding
52  //if we have a good run line: the "Run" and "Events" fields must be present
53  GetLineReader()->SetFieldKeys(GetDBEnv("Runlist.Run"),
54  GetDBEnv("Runlist.Events"));
55  GetLineReader()->SetRunKeys(GetDBEnv("Runlist.Run"),
56  GetDBEnv("Runlist.Events"));
57 
58  ReadRunList(runlist_fullpath.Data());
59  //new style runlist
60  if (IsNewRunList()) {
62  };
63 
65 }
66 
67 
68 
70 
72 {
74  ReadGainList();
78  ReadCalibCsI();
82 
83 
84  // read all available mean pulser data and store in tree
87  fPulserData->Build();
88 
90 }
91 
92 
93 
108 
110 {
111  //Read ChIo pressures for different run ranges and enter into database.
112  //Format of file is:
113  //
114  //# some comments
115  //#which start with '#'
116  //RunRange 6001 6018
117  //2_3 50.0
118  //4_5 50.0
119  //6_7 50.0
120  //8_12 30.0
121  //13_17 30.0
122  //
123  //Pressures (of C3F8) are given in mbar).
124 
125  ifstream fin;
126  if (!OpenCalibFile("Pressures", fin)) {
127  Error("ReadChIoPressures()", "Could not open file %s",
128  GetCalibFileName("Pressures").Data());
129  return;
130  }
131  Info("ReadChIoPressures()", "Reading ChIo pressures parameters...");
132 
133  TString sline;
134 
135  Bool_t prev_rr = kFALSE; //was the previous line a run range indication ?
136  Bool_t read_pressure = kFALSE; // have we read any pressures recently ?
137  KVNumberList nl;
138  KVDBChIoPressures* parset = 0;
139  TList* par_list = new TList();
140  TObjArray* toks = 0;
141  //any ChIo not in list is assumed absent (pressure = 0)
142 
143  Float_t pressure[5] = { 0, 0, 0, 0, 0 };
144 
145  while (fin.good()) { // parcours du fichier
146 
147  sline.ReadLine(fin);
148  if (sline.BeginsWith("#")) {
149 
150  }
151  else if (sline.BeginsWith("RunRange")) { // run range found
152  if (!prev_rr) { // New set of run ranges to read
153 
154  //have we just finished reading some pressures ?
155  if (read_pressure) {
156  parset = new KVDBChIoPressures(pressure);
157  GetTable("ChIo Pressures")->AddRecord(parset);
158  par_list->Add(parset);
159  LinkListToRunRange(par_list, nl);
160  par_list->Clear();
161  for (int zz = 0; zz < 5; zz++) pressure[zz] = 0.;
162  read_pressure = kFALSE;
163  }
164  }
165  toks = sline.Tokenize("\t");
166 
167  if (toks->GetEntries() != 2) {
168  Error("ReadChIoPressures", "Pb de format, il faut RunRange\tRun1-Run2 ... ");
169  return;
170  }
171 
172  prev_rr = kTRUE;
173  nl.SetList(((TObjString*)toks->At(1))->GetString().Data());
174  delete toks;
175  } // Run Range found
176  else if (fin.eof()) { //fin du fichier
177  //have we just finished reading some pressures ?
178  if (read_pressure) {
179  parset = new KVDBChIoPressures(pressure);
180  GetTable("ChIo Pressures")->AddRecord(parset);
181  par_list->Add(parset);
182  LinkListToRunRange(par_list, nl);
183  par_list->Clear();
184  for (int zz = 0; zz < 5; zz++) pressure[zz] = 0.;
185  read_pressure = kFALSE;
186  }
187  }
188  else {
189  prev_rr = kFALSE;
190 
191  toks = sline.Tokenize("\t");
192  if (toks->GetEntries() != 2) {
193  Error("ReadChIoPressures", "Pb de format, il faut numero de la chio (ex 2_3)\tpression");
194  return;
195  }
196 
197  TString chio = ((TObjString*)toks->At(0))->String();
198  TString press = ((TObjString*)toks->At(1))->String();
199 
200  printf("%s %lf\n", chio.Data(), press.Atof());
201  delete toks;
202 
203  read_pressure = kTRUE;
204 
205  if (chio == "2_3") pressure[0] = press.Atof();
206  else if (chio == "4_5") pressure[1] = press.Atof();
207  else if (chio == "6_7") pressure[2] = press.Atof();
208  else if (chio == "8_12") pressure[3] = press.Atof();
209  else if (chio == "13_17") pressure[4] = press.Atof();
210  else {
211  printf("#%s# ne correspond a rien\n", chio.Data());
212  read_pressure = kFALSE;
213  }
214  } //line with ChIo pressure data
215  } //parcours du fichier
216  delete par_list;
217  fin.close();
218 }
219 
220 
221 
228 
230 {
231  // Read the file listing any detectors whose gain value changes during experiment
232  // need description of INDRA geometry
233  // information are in [dataset name].INDRADB.Gains: ...
234  //
235 
236  //need description of INDRA geometry
237  if (!gIndra) {
239  }
240  //gIndra exists, but has it been built ?
241  if (!gIndra->IsBuilt())
242  gIndra->Build();
243 
244  KVFileReader flist;
245  TString fp;
246  if (!KVBase::SearchKVFile(GetCalibFileName("Gains"), fp, fDataSet.Data())) {
247  Error("ReadGainList", "Fichier %s, inconnu au bataillon", GetCalibFileName("Gains").Data());
248  return;
249  }
250 
251  if (!flist.OpenFileToRead(fp.Data())) {
252  //Error("ReadGainList","Error opening file named %s",fp.Data());
253  return;
254  }
255  Info("ReadGainList()", "Reading gains ...");
256  //Add table for gains
257  fGains = AddTable("Gains", "Gains of detectors during runs");
258 
259  while (flist.IsOK()) {
260 
261  flist.ReadLine(".");
262  if (! flist.GetCurrentLine().IsNull()) {
263  unique_ptr<TObjArray> toks(flist.GetReadPar(0).Tokenize("_"));
264  Int_t nt = toks->GetEntries();
265  Int_t ring = -1;
266  unique_ptr<KVSeqCollection> sl;
267  TString det_type = "";
268  if (nt <= 1) {
269  Warning("ReadGainList", "format non gere");
270  }
271  else {
272  //format : Gain_[det_type]_R[RingNumber].dat
273  //exemple : Gain_SI_R07.dat
274  det_type = ((TObjString*)toks->At(1))->GetString();
275  //on recupere les detecteurs par type
276  sl.reset(gIndra->GetDetectors()->GetSubListWithType(det_type.Data()));
277  if (nt == 2) {
278  ring = 0;
279  }
280  else if (nt == 3) {
281  sscanf(((TObjString*)toks->At(2))->GetString().Data(), "R%d", &ring);
282  }
283  else {
284  Warning("ReadGainList", "format non gere");
285  }
286  if (ring != 0)
287  sl.reset(sl->GetSubListWithMethod(Form("%d", ring), "GetRingNumber"));
288  }
289 
290  if (sl.get()) {
291  KVDBParameterSet* par(nullptr);
292  TIter it(sl.get());
293  TObject* obj(nullptr);
294  KVNumberList nl;
295  KVFileReader ffile;
296  if (KVBase::SearchKVFile(flist.GetCurrentLine().Data(), fp, fDataSet.Data())) {
297  ffile.OpenFileToRead(fp.Data());
298  //Info("ReadGainList","Lecture de %s",fp.Data());
299  while (ffile.IsOK()) {
300  ffile.ReadLine(":");
301  if (! ffile.GetCurrentLine().IsNull()) {
302 
303  toks.reset(ffile.GetReadPar(0).Tokenize("."));
304  //liste des runs ...
305  nl.SetList(((TObjString*)toks->At(1))->GetString());
306  // ... associee a la valeur de gain
307  Double_t gain = ffile.GetDoubleReadPar(1);
308 
309  printf("%s Ring %d -> Runs=%s Gain=%1.3lf\n", det_type.Data(), ring, nl.AsString(), gain);
310 
311  it.Reset();
312  while ((obj = it.Next())) {
313  par = new KVDBParameterSet(obj->GetName(), "Gains", 1);
314  par->SetParameter(gain);
315  fGains->AddRecord(par);
316  LinkRecordToRunRange(par, nl);
317  }
318  }
319  }
320  }
321  ffile.CloseFile();
322  }
323  }
324  }
325 
326  flist.CloseFile();
327 
328 }
329 
330 
337 
339 {
340  //Read the names of pedestal files to use for each run range, found
341  //in file with name defined by the environment variable:
342  // [dataset name].INDRADB.Pedestals: ...
343  //Actuellement lecture d un seul run de piedestal
344  //et donc valeur unique pour l ensemble des runs
345 
346  KVFileReader flist;
347  TString fp;
348  if (!KVBase::SearchKVFile(gDataSet->GetDataSetEnv("INDRADB.Pedestals", ""), fp, gDataSet->GetName())) {
349  Error("ReadPedestalList", "Fichier %s, inconnu au bataillon", (const char*)gDataSet->GetDataSetEnv("INDRADB.Pedestals", ""));
350  return;
351  }
352  fPedestals->SetTitle("Values of pedestals");
353  if (!flist.OpenFileToRead(fp.Data())) {
354  return;
355  }
356  TEnv* env = 0;
357  TEnvRec* rec = 0;
358  KVDBParameterSet* par = 0;
359 
360  KVNumberList default_run_list = GetRunList();
361  Info("ReadPedestalList", "liste des runs par defaut %s", default_run_list.AsString());
362 
363  while (flist.IsOK()) {
364  flist.ReadLine(NULL);
365  KVString file = flist.GetCurrentLine();
366  KVNumberList nl;
367  if (file != "" && !file.BeginsWith('#')) {
368  if (KVBase::SearchKVFile(file.Data(), fp, gDataSet->GetName())) {
369  Info("ReadPedestalList", "Lecture de %s", fp.Data());
370  env = new TEnv();
371  env->ReadFile(fp.Data(), kEnvAll);
372  TIter it(env->GetTable());
373  while ((rec = (TEnvRec*)it.Next())) {
374  if (!strcmp(rec->GetName(), "RunRange")) {
375  nl.SetList(rec->GetValue());
376  }
377  else {
378  par = new KVDBParameterSet(rec->GetName(), "Piedestal", 1);
379  par->SetParameter(env->GetValue(rec->GetName(), 0.0));
380  fPedestals->AddRecord(par);
381  LinkRecordToRunRange(par, default_run_list);
382  }
383  }
384  delete env;
385 
386  }
387  }
388  }
389  Info("ReadPedestalList", "End of reading");
390 }
391 
392 
393 
399 
401 {
402  //Read the names of pedestal files to use for each run range, found
403  //in file with name defined by the environment variable:
404  // [dataset name].INDRADB.Pedestals: ...
405 
406  //need description of INDRA geometry
407  if (!gIndra) {
409  }
410  //gIndra exists, but has it been built ?
411  if (!gIndra->IsBuilt())
412  gIndra->Build();
413 
414  KVNumberList default_run_list = GetRunList();
415  Info("ReadChannelVolt", "liste des runs par defaut %s", default_run_list.AsString());
416 
417  KVFileReader flist;
418  TString fp;
419  if (!KVBase::SearchKVFile(gDataSet->GetDataSetEnv("INDRADB.ElectronicCalibration", ""), fp, gDataSet->GetName())) {
420  Error("ReadChannelVolt", "Fichier %s, inconnu au bataillon", (const char*)gDataSet->GetDataSetEnv("INDRADB.ElectronicCalibration", ""));
421  return;
422  }
423 
424  if (!flist.OpenFileToRead(fp.Data())) {
425  return;
426  }
427 
428  TEnv* env = 0;
429  TEnvRec* rec = 0;
430  KVDBParameterSet* par = 0;
431  KVDBParameterSet* par_pied = 0;
432  TObjArray* toks = 0;
433  Double_t a0, a1, a2; //parametre du polynome d ordre 2
434  Double_t gain = 0; //valeur du gain de reference
435  Double_t dum2 = -2;
436  Double_t pied = 0; //valeur du piedestal
437 
438  KVINDRADBRun* dbrun = 0;
439  KVINDRADBRun* dbpied = 0;
440  KVNameValueList ring_run;
441  while (flist.IsOK()) {
442  flist.ReadLine(NULL);
443  KVString file = flist.GetCurrentLine();
444  KVNumberList nl;
445  if (file != "" && !file.BeginsWith('#')) {
446  if (KVBase::SearchKVFile(file.Data(), fp, gDataSet->GetName())) {
447  Info("ReadChannelVolt", "Lecture de %s", fp.Data());
448  TString cal_type;
449  TString sgain = "GG";
450  if (fp.Contains("PGtoVolt")) sgain = "PG";
451  cal_type = "Channel-Volt " + sgain;
452 
453  env = new TEnv();
454  env->ReadFile(fp.Data(), kEnvAll);
455  TIter it(env->GetTable());
456  while ((rec = (TEnvRec*)it.Next())) {
457  KVNumberList nring;
458  TString srec(rec->GetName());
459  //On recupere le run reference pour lequel a ete fait la calibration
460  if (srec.BeginsWith("Ring.")) {
461  srec.ReplaceAll("Ring.", "");
462  nring.SetList(srec);
463  nring.Begin();
464  while (!nring.End()) {
465  Int_t rr = nring.Next();
466  ring_run.SetValue(Form("%d", rr), TString(rec->GetValue()).Atoi());
467  Info("ReadChannelVolt", "Couronne %d, run associee %d", rr, TString(rec->GetValue()).Atoi());
468  }
469  }
470  else if (srec.BeginsWith("Pedestal")) {
471  srec.ReplaceAll("Pedestal.", "");
472  dbpied = GetRun(TString(rec->GetValue()).Atoi());
473  }
474  else {
475 
476  TString spar(rec->GetValue());
477  toks = spar.Tokenize(",");
478  if (toks->GetEntries() >= 3) {
479  a0 = ((TObjString*)toks->At(1))->GetString().Atof();
480  a1 = ((TObjString*)toks->At(2))->GetString().Atof();
481  a2 = ((TObjString*)toks->At(3))->GetString().Atof();
482  par_pied = ((KVDBParameterSet*)dbpied->GetLink("Pedestals", Form("%s_%s", rec->GetName(), sgain.Data())));
483  if (par_pied)
484  pied = par_pied->GetParameter();
485  //Fit Canal-Volt realise avec soustraction piedestal
486  //chgmt de variable pour passer de (Canal-piedestal) a Canal brut
487  a0 = a0 - pied * a1 + pied * pied * a2;
488  a1 = a1 - 2 * pied * a2;
489  //a2 inchange
490  //On recupere le run de ref, pour avoir le gain associe a chaque detecteur
491  KVINDRADetector* det = (KVINDRADetector*)gIndra->GetDetector(rec->GetName());
492  if (det) {
493 
494  Int_t runref = ring_run.GetIntValue(Form("%d", det->GetRingNumber()));
495  if (!dbrun) {
496  dbrun = GetRun(runref);
497  }
498  else if (dbrun->GetNumber() != runref) {
499  dbrun = GetRun(runref);
500  }
501  if (!dbrun) {
502  Warning("ReadChannelVolt", "Pas de run reference numero %d", runref);
503  }
504  //le gain est mis comme troisieme parametre
505  KVDBParameterSet* pargain = ((KVDBParameterSet*) dbrun->GetLink("Gains", rec->GetName()));
506  if (pargain) {
507  gain = pargain->GetParameter(0);
508  }
509  else {
510  Info("ReadChannelVolt", "pas de gain defini pour le run %d et le detecteur %s", runref, rec->GetName());
511  }
512 
513  //Si tout est dispo on enregistre la calibration pour ce detecteur
514  //
515  par = new KVDBParameterSet(Form("%s_%s", rec->GetName(), sgain.Data()), cal_type, 5);
516  par->SetParameters({a0, a1, a2, gain, dum2});
517 
518  fChanVolt->AddRecord(par);
519  LinkRecordToRunRange(par, default_run_list);
520  }
521  }
522  else {
523  a0 = a1 = a2 = gain = 0;
524  Warning("ReadChannelVolt", "Pb de format %s", rec->GetValue());
525  }
526  delete toks;
527  }
528  }
529  delete env;
530 
531  }
532  }
533  }
534  Info("ReadChannelVolt", "End of reading");
535 
536 }
537 
538 
539 
544 
546 {
547  //Read Volt-Energy(MeV) calibrations for ChIo and Si detectors.
548  //The parameter filename is taken from the environment variable
549  // [dataset name].INDRADB.ChIoSiVoltMeVCalib:
550 
551  KVFileReader flist;
552  TString fp;
553  if (!KVBase::SearchKVFile(gDataSet->GetDataSetEnv("INDRADB.ChIoSiVoltMeVCalib", ""), fp, gDataSet->GetName())) {
554  Error("ReadVoltEnergyChIoSi", "Fichier %s, inconnu au bataillon", (const char*)gDataSet->GetDataSetEnv("INDRADB.ChIoSiVoltMeVCalib", ""));
555  return;
556  }
557 
558  if (!flist.OpenFileToRead(fp.Data())) {
559  return;
560  }
561  TEnv* env = 0;
562  TEnvRec* rec = 0;
563  KVDBParameterSet* par = 0;
564  TObjArray* toks = 0;
565 
566  KVNumberList default_run_list = GetRunList();
567  Info("ReadVoltEnergyChIoSi", "liste des runs par defaut %s", default_run_list.AsString());
568 
569  while (flist.IsOK()) {
570  flist.ReadLine(NULL);
571  KVString file = flist.GetCurrentLine();
572  KVNumberList nl;
573  if (file != "" && !file.BeginsWith('#')) {
574  if (KVBase::SearchKVFile(file.Data(), fp, gDataSet->GetName())) {
575  Info("ReadPedestalList", "Lecture de %s", fp.Data());
576  env = new TEnv();
577  env->ReadFile(fp.Data(), kEnvAll);
578  TIter it(env->GetTable());
579  while ((rec = (TEnvRec*)it.Next())) {
580 
581  Double_t a0 = 0, a1 = 1, chi = 1;
582  TString spar(rec->GetValue());
583  toks = spar.Tokenize(",");
584  if (toks->GetEntries() >= 2) {
585  a0 = ((TObjString*)toks->At(1))->GetString().Atof();
586  a1 = ((TObjString*)toks->At(2))->GetString().Atof();
587  }
588  delete toks;
589 
590  par = new KVDBParameterSet(rec->GetName(), "Volt-Energy", 3);
591  par->SetParameters({a0, a1, chi});
593  LinkRecordToRunRange(par, default_run_list);
594 
595  }
596  delete env;
597  }
598  }
599  }
600  Info("ReadVoltEnergyChIoSi", "End of reading");
601 
602 }
603 
604 
int Int_t
bool Bool_t
char Char_t
float Float_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
kEnvAll
char name[80]
char * Form(const char *fmt,...)
static Bool_t SearchKVFile(const Char_t *name, TString &fullpath, const Char_t *kvsubdir="")
Definition: KVBase.cpp:541
CHIO pressure parameters.
To store calibration parameters in a database ,.
void SetParameters(const std::vector< Double_t > &pars)
Double_t GetParameter(UShort_t i=0) const
void SetParameter(UShort_t i, Double_t val)
virtual KVDBRecord * GetLink(const Char_t *key, const Char_t *link) const
Returns the record named "link" in the table named "key".
Definition: KVDBRecord.cpp:186
virtual Int_t GetNumber() const
Definition: KVDBRecord.h:73
virtual Bool_t AddRecord(KVDBRecord *add)
Definition: KVDBTable.cpp:74
virtual KVDBTable * GetTable(const Char_t *table) const
Definition: KVDataBase.h:159
virtual Bool_t AddTable(KVDBTable *table)
Definition: KVDataBase.cpp:84
ValType GetDataSetEnv(const Char_t *type, const ValType &defval) const
Definition: KVDataSet.h:269
virtual void ReadSystemList()
Definition: KVExpDB.cpp:423
virtual KVSeqCollection * GetRuns() const
Definition: KVExpDB.h:140
TString GetCalibFileName(const Char_t *type) const
Definition: KVExpDB.h:188
const KVNumberList & GetRunList() const
Definition: KVExpDB.h:156
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:394
virtual void LinkRecordToRunRange(KVDBRecord *rec, UInt_t first_run, UInt_t last_run)
Definition: KVExpDB.cpp:285
virtual TString GetDBEnv(const Char_t *) const
Definition: KVExpDB.cpp:1009
Bool_t OpenCalibFile(const Char_t *type, std::ifstream &fs) const
Definition: KVExpDB.cpp:613
TString fDataSet
the name of the dataset to which this database is associated
Definition: KVExpDB.h:64
Handle reading columns of numeric data in text files.
Definition: KVFileReader.h:121
KVString GetCurrentLine()
Definition: KVFileReader.h:320
void CloseFile()
Definition: KVFileReader.h:237
ReadStatus ReadLine(const KVString &pattern="")
Definition: KVFileReader.h:243
Double_t GetDoubleReadPar(Int_t pos) const
Definition: KVFileReader.h:334
Bool_t IsOK()
Definition: KVFileReader.h:231
KVString GetReadPar(Int_t pos) const
Definition: KVFileReader.h:342
Bool_t OpenFileToRead(const KVString &filename)
Definition: KVFileReader.h:210
const KVSeqCollection * GetDetectors() const
Database entry for each run of an INDRA experiment.
Definition: KVINDRADBRun.h:30
Database for E613 experiment (2011)
void make_minimal_database() override
void extend_minimal_database() override
void ReadChIoPressures() override
void ReadGainList() override
void ReadPedestalList() override
void ReadChannelVolt() override
void ReadVoltEnergyChIoSi() override
KVINDRADB_e613()
Default constructor.
DataBase of parameters for an INDRA campaign.
Definition: KVINDRADB.h:59
KVDBTable * fChanVolt
ChIo/Si channel-volt calibration parameters.
Definition: KVINDRADB.h:74
virtual void ReadOoOACQParams()
Definition: KVINDRADB.cpp:1947
void ReadNewRunList()
Read new-style runlist (written using KVDBRun v.10 or later)
Definition: KVINDRADB.cpp:947
KVINDRAPulserDataTree * fPulserData
mean values of pulsers for all detectors & runs
Definition: KVINDRADB.h:82
virtual void ReadOoODetectors()
Definition: KVINDRADB.cpp:1899
virtual void ReadCsITotalLightGainCorrections()
Definition: KVINDRADB.cpp:1231
KVDBTable * fPedestals
table of pedestal files
Definition: KVINDRADB.h:73
KVDBTable * fVoltMeVChIoSi
ChIo/Si volt-energy calibration.
Definition: KVINDRADB.h:75
KVDBTable * fGains
(optional) table of detector gains, in case they change from run to run
Definition: KVINDRADB.h:70
virtual void ReadAbsentDetectors()
Definition: KVINDRADB.cpp:1852
KVINDRADBRun * GetRun(Int_t run) const
Definition: KVINDRADB.h:136
virtual void ReadCalibCsI()
Definition: KVINDRADB.cpp:1686
Base class for detectors of INDRA array.
UInt_t GetRingNumber() const
Handles TTree with mean pulser data for every run.
void SetRunList(KVSeqCollection *runs)
void SetRLCommentChar(Char_t c)
KVRunListLine * GetLineReader() const
void ReadRunList(const Char_t *name="")
void SetRLSeparatorChar(Char_t c)
void Build(Int_t run=-1) override
Correspondance between CsI detectors and pin lasers is set up if known.
Definition: KVINDRA.cpp:119
KVINDRADetector * GetDetector(const Char_t *name) const override
Definition: KVINDRA.h:277
static KVMultiDetArray * MakeMultiDetector(const Char_t *dataset_name, Int_t run=-1, TString classname="KVMultiDetArray", KVExpDB *db=nullptr)
virtual Bool_t IsBuilt() const
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Int_t GetIntValue(const Char_t *name) const
void SetValue(const Char_t *name, value_type value)
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:85
const Char_t * AsString(Int_t maxchars=0) const
Bool_t End(void) const
Definition: KVNumberList.h:199
void Begin(void) const
void SetList(const TString &)
Int_t Next(void) const
void SetRunKeys()
Definition: KVRunListLine.h:44
void SetFieldKeys()
Definition: KVRunListLine.h:40
KVSeqCollection * GetSubListWithType(const Char_t *retvalue) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
THashList * GetTable() const
virtual const char * GetValue(const char *name, const char *dflt) const
virtual Int_t ReadFile(const char *fname, EEnvLevel level)
TObject * Next()
void Reset()
void Clear(Option_t *option="") override
void Add(TObject *obj) override
virtual void SetTitle(const char *title="")
const char * GetName() const override
Int_t GetEntries() const override
TObject * At(Int_t idx) const override
virtual const char * GetName() 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
Double_t Atof() const
const char * Data() const
TObjArray * Tokenize(const TString &delim) const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Bool_t IsNull() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TString & ReplaceAll(const char *s1, const char *s2)
std::istream & ReadLine(std::istream &str, Bool_t skipWhite=kTRUE)
rec
const char * String
ClassImp(TPyArg)