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