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