39 fRepository =
nullptr;
54 if (!fRepository)
return nullptr;
58 avrf = fRepository->NewAvailableRunsFile(
type,
this);
59 fAvailableRuns.
Add(avrf);
77 if (fDBFileName !=
"")
78 return fDBFileName.Data();
94 return fDBName.Data();
109 fDBase.reset(
new TFile(full_path_to_dbfile,
"READ"));
111 if (fDBase->IsOpen()) {
112 fDataBase =
dynamic_cast<KVExpDB*
>(fDBase->Get(GetDBName()));
114 Error(
"OpenDBFile",
"%s not found in file %s", GetDBName(),
118 fDataBase->ReadObjects(fDBase.get());
134 TString dbfile = GetDBFileName();
135 static TString dbfile_fullpath;
141 TString dataset_alias = GetDataSetEnv(
"DataSet.Directory", GetName());
147 return dbfile_fullpath.
Data();
167 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.UserClass.Base", t->
GetName()));
169 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.Prereq", t->
GetName()));
171 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.UserClass.ExtraACliCIncludes", t->
GetName()));
173 Int_t nev = (
Int_t)GetDataSetEnv(
Form(
"%s.DataAnalysisTask.StatusUpdateInterval", t->
GetName()), 0.0);
203 TString dbfile_fullpath = GetFullPathToDB();
215 Error(
"SaveDataBase",
"Cannot create directory %s required to save database",
222 Error(
"SaveDataBase",
"Cannot create directory %s required to save database, even though %s exists: check disk space ?",
228 Error(
"SaveDataBase",
"Cannot create directory %s required to save database",
241 WriteDBFile(dbfile_fullpath.
Data());
260 Error(
"WriteDBFile",
"Database has not been built");
263 fDBase.reset(
new TFile(full_path_to_dbfile,
"recreate"));
265 fDataBase->Write(GetDBName());
266 fDataBase->WriteObjects(fDBase.get());
300 if (_opt ==
"UPDATE") {
301 OpenDataBase(_opt.
Data());
356 if ((!strcmp(opt,
"UPDATE")) || DataBaseNeedsUpdate()) {
359 Info(
"OpenDataBase",
"Updating database file");
360 is_glob_db = (fDataBase ==
gExpDB);
370 Info(
"OpenDataBase",
"No database defined for dataset");
374 if (fDataBase && is_glob_db) fDataBase->cd();
376 else if (!fDataBase) {
381 if (!LoadPlugin(
"KVExpDB", GetDBName())) {
382 Error(
"GetDataBase",
"Cannot load required plugin library");
386 TString dbfile_fullpath = GetFullPathToDB();
388 OpenDBFile(dbfile_fullpath.
Data());
401 cout <<
"Dataset name=" << GetName() <<
" (" << GetTitle() <<
")";
403 cout <<
" [ AVAILABLE: ";
404 cout << fDatatypes.Data();
408 cout <<
" [UNAVAILABLE]";
429 cout <<
" *** No available analysis tasks ***"
434 for (
int i = 1; i <= GetNtasks(); i++) {
436 cout <<
"\t" << i <<
". " << dat->
GetTitle() << endl;
442 cout <<
"Available data types: " << fDatatypes.Data() << endl;
493 SetAvailable(fRepository->CheckSubdirExists(GetDataPathSubdir()));
497 KVString data_types = GetDataSetEnv(
"KVDataSet.DataTypes",
"");
498 if (data_types ==
"") {
499 Warning(
"CheckAvailable",
"No datatypes defined for this dataset: %s\nCheck value of KVDataSet.DataTypes or %s.KVDataSet.DataTypes",
500 GetName(), GetName());
505 data_types.
Begin(
" ");
506 while (!data_types.
End()) {
509 (fRepository && fRepository->CheckSubdirExists(GetDataPathSubdir(), GetDataTypeSubdir(
type.Data())))
511 AddAvailableDataType(
type.Data());
515 SetAvailable(fDatatypes !=
"");
517 if (!CheckUserCanAccess()) {
529 if (fDatatypes !=
"") fDatatypes +=
" ";
550 TIter nxt(task_list);
557 SetDataSetSpecificTaskParameters(new_task);
558 if (HasDataType(new_task->
GetPrereq())) {
559 fTasks.Add(new_task);
578 return fTasks.GetSize();
629 if (!GetAvailableRunsFile(datatype)) {
630 Error(
"GetListOfAvailableSystems(const Char_t*)",
631 "No available runs file for type %s", datatype);
634 return GetAvailableRunsFile(datatype)->GetListOfAvailableSystems(systol);
668 return GetListOfAvailableSystems(datan->
GetPrereq(), systol);
702 TString path = GetDataSetEnv(
"DataSet.Directory", name);
707 fCalibDir = GetDATADIRFilePath(path);
723 return fCalibDir.Data();
744 if (fRepository) fRepository->
cd();
862 if (!strcmp(
type,
"raw") && !strcmp(GetDataSetEnv(
"MFM.WithEbyedat",
""),
"yes")) {
863 TString ebydir = GetDataSetDir();
864 ebydir +=
"/ebyedat";
865 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory", ebydir);
866 if (strcmp(GetDataSetEnv(
"MFM.EbyedatActionsExpName",
""),
""))
867 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName", GetDataSetEnv(
"MFM.EbyedatActionsExpName",
""));
868 TObject*
f = GetRepository()->OpenDataSetRunFile(
this,
type, run, GetName());
870 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory",
"");
871 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName",
"");
874 return GetRepository()->OpenDataSetRunFile(
this,
type, run, GetName());
897 if (fRepository)
file = GetRunfileName(
type, run);
900 return fRepository->GetFullPathToOpenFile(
this,
type,
file.Data());
921 if (!HasDataType(
type)) {
922 Error(
"GetRunfileName",
923 "No data of type \"%s\" available for dataset %s",
type,
928 return GetAvailableRunsFile(
type)->GetFileName(run);
950 date.
Set(1995, 1, 1, 0, 0, 0);
952 if (!HasDataType(
type)) {
953 Error(
"GetRunfileDate",
954 "No data of type \"%s\" available for dataset %s",
type,
960 if (!GetAvailableRunsFile(
type)->GetRunInfo(run, date, filename)) {
961 Error(
"GetRunfileDate",
962 "Runfile not found for run %d (data type: %s)", run,
type);
981 if (!HasDataType(
type)) {
982 Error(
"CheckRunfileAvailable",
983 "No data of type \"%s\" available for dataset %s",
type,
987 return GetAvailableRunsFile(
type)->CheckAvailable(run);
1040 if (!HasDataType(
type)) {
1041 Error(
"UpdateAvailableRuns",
1042 "No data of type \"%s\" available for dataset %s",
type,
1046 a->Update(!
a->FileExists());
1063 if (!fRepository)
return nullptr;
1067 return fRepository->CreateNewFile(
this,
type, tmp.
Data());
1092 if (!fRepository)
return;
1095 TString filename = GetAvailableRunsFile(
type)->GetFileName(run);
1096 if (filename ==
"") {
1097 Error(
"DeleteRunfile",
"Run %d of type %s does not exist.", run,
type);
1102 KVString doNotDelete = GetDataSetEnv(
"DataSet.RunFile.DoNotDelete",
"all");
1103 if (doNotDelete ==
"all" || doNotDelete.
Contains(
type)) {
1104 Error(
"DeleteRunFile",
"%s files cannot be deleted",
type);
1107 fRepository->DeleteFile(
this,
type, filename.
Data(), confirm);
1109 if (!fRepository->CheckFileStatus(
this,
type, filename.
Data()))
1110 GetAvailableRunsFile(
type)->Remove(run);
1141 DeleteRunfile(
type, nl.
Next(), confirm);
1163 if (!min && !max)
return 0;
1165 if (min) printf(
"date minimum %s\n", min->
AsString());
1166 if (max) printf(
"date maximum %s\n", max->
AsString());
1170 unique_ptr<TList> ll(GetListOfAvailableSystems(
type));
1173 unique_ptr<TList> lrun;
1174 for (
Int_t nl = 0; nl < ll->GetEntries(); nl += 1) {
1176 lrun.reset(GetListOfAvailableSystems(
type, sys));
1178 for (
Int_t nr = 0; nr < lrun->GetEntries(); nr += 1) {
1182 if (*min < run->GetRun()->GetDatime() && run->
GetRun()->
GetDatime() < *max) {
1187 if (*min < run->GetRun()->GetDatime()) {
1221 TList* ll = GetListOfAvailableSystems(ref_type);
1224 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type);
1229 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\" for system %s", ref_type, system->
GetName());
1234 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type,
type);
1243 if (system && sys != system)
continue;
1245 nsys = GetRunList(
type, sys);
1246 nsys_ref = GetRunList(ref_type, sys);
1251 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1257 manquant.
Add(nsys_ref);
1277 unique_ptr<TList> lrun(GetListOfAvailableSystems(
type, sys));
1278 TIter next(lrun.get());
1285 unique_ptr<TList> ll(GetListOfAvailableSystems(
type));
1286 if (!ll.get() || !ll->GetEntries()) {
1288 Info(
"GetRunList_VersionSelection",
"No data available of type \"%s\"",
type);
1292 for (
Int_t nl = 0; nl < nsys; nl += 1) {
1294 unique_ptr<TList> lrun(GetListOfAvailableSystems(
type, sys));
1295 TIter next(lrun.get());
1317 if (!fRepository)
return;
1322 fRepository->CommitFile(
file,
type,
this);
1331 TString oldfile = GetAvailableRunsFile(
type)->GetFileName(run);
1332 if (oldfile !=
"" && oldfile != newfile) {
1334 fRepository->DeleteFile(
this,
type, oldfile.
Data(),
1337 if (!fRepository->CheckFileStatus(
this,
type, oldfile.
Data()))
1338 GetAvailableRunsFile(
type)->Remove(run);
1340 if (oldfile != newfile) {
1342 GetAvailableRunsFile(
type)->Add(run, newfile.
Data());
1362 if (fUserGroups ==
"")
1366 unique_ptr<TObjArray> toks(fUserGroups.Tokenize(
' '));
1368 TIter next_name(toks.get());
1369 while ((group_name = (
TObjString*) next_name())) {
1371 if (!fRepository || (fRepository && fRepository->GetDataSetManager()->
1419 GetAvailableRunsFile(data_type)->CheckMultiRunfiles();
1421 cout <<
"OK. No runs appear more than once." << endl;
1424 cout <<
"Runs which appear more than once: " << doubles.
1425 AsString() << endl << endl;
1430 while (!doubles.
End()) {
1435 GetAvailableRunsFile(data_type)->GetRunInfos(rr, &dates, &filenames);
1437 cout <<
"Run " << rr <<
" : " << dates.
1438 GetEntries() <<
" files >>>>>>" << endl;
1439 for (
int i = 0; i < dates.
GetEntries(); i++) {
1472 if (!fRepository)
return;
1477 cout <<
"OK. No runs appear more than once." << endl;
1480 cout <<
"Runs which appear more than once: " << doubles.
1481 AsString() << endl << endl;
1486 while (!doubles.
End()) {
1493 TDatime most_recent(
"1998-12-25 00:00:00");
1494 Int_t i_most_recent = 0;
1495 cout <<
"Run " << rr <<
" : " << dates.
1496 GetEntries() <<
" files >>>>>>" << endl;
1497 for (
int i = 0; i < dates.
GetEntries(); i++) {
1501 if (rundate > most_recent) {
1503 most_recent = rundate;
1510 for (
int i = 0; i < dates.
GetEntries(); i++) {
1512 if (i == i_most_recent) {
1516 cout <<
"DELETE : ";
1521 if (i != i_most_recent) {
1523 fRepository->DeleteFile(
this, data_type,
1525 String().Data(), confirm);
1558 Error(
"CheckRunfileUpToDate",
1559 "Dataset \"%s\" not found in repository \"%s\"", GetName(),
1564 if (GetRunfileDate(data_type, run) < ds->
GetRunfileDate(data_type, run))
1580 const Char_t* other_repos)
1591 return CheckRunfileUpToDate(data_type, run, _or);
1592 Error(
"CheckRunfileUpToDate",
1593 "No data repository known with this name : %s", other_repos);
1605 const Char_t* other_repos)
1610 if (!fRepository)
return;
1615 Error(
"CheckUpToDate",
1616 "No data repository known with this name : %s", other_repos);
1619 KVNumberList runlist = GetAvailableRunsFile(data_type)->GetRunList();
1621 Int_t need_update = 0;
1622 while (!runlist.
End()) {
1625 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1626 cout <<
" *** run " << rr <<
" needs update ***" <<
1628 cout <<
"\t\tREPOSITORY: " << fRepository->
1629 GetName() <<
"\tDATE: " << GetRunfileDate(data_type,
1632 cout <<
"\t\tREPOSITORY: " << other_repos <<
"\tDATE: " << _or->
1633 GetDataSetManager()->GetDataSet(GetName())->
1634 GetRunfileDate(data_type,
1635 rr).AsString() << endl;
1640 cout <<
" *** All runfiles are up to date for data type " <<
1653 const Char_t* other_repos)
1659 if (!fRepository)
return updates;
1664 Error(
"CheckUpToDate",
1665 "No data repository known with this name : %s", other_repos);
1668 KVNumberList runlist = GetAvailableRunsFile(data_type)->GetRunList();
1670 while (!runlist.
End()) {
1673 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1696 if (!fRepository || !HasDataType(data_type)) {
1698 "No data of type %s available. Runlist will be empty.",
1702 list = GetAvailableRunsFile(data_type)->GetRunList(system);
1805 _task +=
" analysis";
1808 auto dat = GetAnalysisTaskAny(_task.
Data());
1810 Error(
"MakeAnalysisClass",
1811 "called for unknown or unavailable analysis task : %s", _task.
Data());
1814 if (!dat->WithUserClass()) {
1815 Error(
"MakeAnalysisClass",
1816 "no user analysis class for analysis task : %s", dat->GetTitle());
1825 if (dat->CheckUserBaseClassIsLoaded())
cl =
TClass::GetClass(dat->GetUserBaseClass());
1830 unique_ptr<TMethodCall> methcall(
new TMethodCall(
cl,
"Make",
Form(
"\"%s\"", classname)));
1832 if (!methcall->IsValid()) {
1833 Error(
"MakeAnalysisClass",
"static Make(const Char_t*) method for class %s is not valid",
1839 methcall->Execute();
1854 return OpenDataSetFile(GetName(), filename,
file);
1873 abspath.
Form(
"%s/%s", datasetdir.
Data(), filename);
1874 return SearchAndOpenKVFile(abspath,
file);
1877 return SearchAndOpenKVFile(filename,
file, datasetdir);
1891 return GetFullPathToDataSetFile(GetName(), filename);
1907 if (!SearchKVFile(filename, fullpath, datasetdir)) {
1908 ::Warning(
"KVDataSet::GetFullPathToDataSetFile",
"File %s not found in dataset subdirectory %s", filename, datasetdir.
Data());
1927 return SearchKVFile(filename, fullpath, datasetdir);
1941 return FindDataSetFile(GetName(), filename);
1967 Error(
"GetAnalysisTaskAny",
"No task found with the following keywords in its title : %s",
1972 #ifdef __cpp_lib_make_unique
1975 auto new_task = std::make_unique<KVDataAnalysisTask>(*tsk);
1980 SetDataSetSpecificTaskParameters(new_task.get());
2003 if (!SearchKVFile(GetDataSetDir(), path)) {
2005 Info(
"DataBaseNeedsUpdate",
"%s: Creating new dataset directory %s",
2006 GetName(), GetDataSetDir());
2009 Error(
"DataBaseNeedsUpdate",
2010 "%s: Dataset directory %s does not exist and cannot be created ?",
2011 GetName(), GetDataSetDir());
2015 SearchKVFile(GetDataSetDir(), path);
2017 TString filename = path +
"Makefile";
2018 ofstream of1(filename.
Data());
2019 of1 <<
"$(KV_WORK_DIR)/db/" << GetName() <<
"/DataBase.root : Runlist.csv Systems.dat" << endl;
2020 of1 <<
"\t@echo Database needs update" << endl;
2022 filename = path +
"Runlist.csv";
2023 ofstream of2(filename.
Data());
2024 of2 <<
"# Automatically generated dummy Runlist.csv file" << endl;
2026 filename = path +
"Systems.dat";
2027 ofstream of3(filename.
Data());
2028 of3 <<
"# Automatically generated dummy Systems.dat file" << endl;
2075 if (
gEnv->
Defined(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName())))
2076 return TString(
gEnv->
GetValue(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName()),
""));
2077 TString orep = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.OutputRepository", taskname), GetRepository()->GetName());
2095 while (!runs.
End()) {
2096 int run = runs.
Next();
2122 Error(
"CopyRunfilesToRepository",
"Unknown destination repository : %s", destrepo);
2130 while (!runs.
End()) {
2131 int run = runs.
Next();
void AssignAndDelete(TString &target, char *tobedeleted)
KVDataRepositoryManager * gDataRepositoryManager
KVDataSetManager * gDataSetManager
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
char * Form(const char *fmt,...)
R__EXTERN TSystem * gSystem
Handles lists of available runs for different datasets and types of data.
virtual void Add(Int_t run, const Char_t *filename)
KVNumberList CheckMultiRunfiles()
Returns a list with all runs which occur more than once in the available runs file.
virtual void Remove(Int_t run, const Char_t *filename="")
virtual void GetRunInfos(Int_t run, KVList *dates, KVList *names)
static const Char_t * GetDataSetEnv(const Char_t *dataset, const Char_t *type, const Char_t *defval)
const TDatime & GetDatime() const
Database class used to store information on different colliding systems studied during an experiment.
Bool_t IsCollision() const
retourne kTRUE, si le systeme est une collision ie projectile+cible
Define and manage data analysis tasks.
virtual void SetDataAnalyser(const Char_t *d)
virtual void SetPrereq(const Char_t *p)
virtual void SetStatusUpdateInterval(Long64_t n)
void SetExtraAClicIncludes(const KVString &list)
virtual const Char_t * GetPrereq() const
virtual void SetUserBaseClass(const Char_t *d)
KVDataRepository * GetRepository(const Char_t *name) const
void Print(Option_t *opt="") const
Base class for managing repositories of experimental data.
virtual KVDataSetManager * GetDataSetManager() const
Return pointer to data set manager for this repository.
virtual void CopyFileFromRepository(const KVDataSet *dataset, const Char_t *datatype, const Char_t *filename, const Char_t *destination)
void CreateAllNeededSubdirectories(const KVDataSet *DataSet, const Char_t *DataType)
virtual const Char_t * GetFullPathToTransferFile(const KVDataSet *dataset, const Char_t *datatype, const Char_t *runfile)
const KVSeqCollection * GetAnalysisTaskList() const
KVDataSet * GetDataSet(Int_t) const
Return pointer to DataSet using index in list of all datasets, index>=0.
Manage an experimental dataset corresponding to a given experiment or campaign.
TString GetOutputRepository(const Char_t *taskname) const
virtual void OpenDBFile(const Char_t *full_path_to_dbfile) const
Open the database from a file on disk.
KVNumberList GetRunList_VersionSelection(const Char_t *type, const Char_t *version, KVDBSystem *sys=0)
void CheckMultiRunfiles(const Char_t *data_type)
KVNumberList GetRunList_StageSelection(const Char_t *other_type, const Char_t *base_type, KVDBSystem *sys=0, Bool_t OnlyCol=kFALSE)
void CheckUpToDate(const Char_t *data_type, const Char_t *other_repos)
const Char_t * GetDBName() const
KVDataRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
void CopyRunfilesToRepository(const Char_t *type, KVNumberList runs, const Char_t *destrepo)
const Char_t * GetDBFileName() const
const Char_t * GetDataSetDir() const
void DeleteRunfiles(const Char_t *type, KVNumberList lrun="", Bool_t confirm=kTRUE)
KVNumberList GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
virtual void ls(Option_t *opt="") const
Print dataset information.
void DeleteRunfile(const Char_t *type, Int_t run, Bool_t confirm=kTRUE)
KVAvailableRunsFile * GetAvailableRunsFile(const Char_t *type) const
virtual void AddAvailableDataType(const Char_t *)
virtual TList * GetListOfAvailableSystems(const Char_t *datatype, KVDBSystem *systol=0)
Bool_t CheckRunfileUpToDate(const Char_t *data_type, Int_t run, KVDataRepository *other_repos)
void SetName(const char *name)
virtual KVDataAnalysisTask * GetAnalysisTask(Int_t) const
virtual const Char_t * GetBaseFileName(const Char_t *type, Int_t run) const
virtual void SaveDataBase() const
virtual void SetAnalysisTasks(const KVSeqCollection *)
KVNumberList GetRunList_DateSelection(const Char_t *type, TDatime *min=0, TDatime *max=0)
virtual void CheckAvailable()
const Char_t * GetRunfileName(const Char_t *type, Int_t run) const
TDatime GetRunfileDate(const Char_t *type, Int_t run)
const Char_t * GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
virtual Int_t GetNtasks() const
KVNumberList GetRunList(const Char_t *data_type, const KVDBSystem *sys=0) const
TString GetFullPathToDataSetFile(const Char_t *filename)
TString GetFullPathToRunfile(const Char_t *type, Int_t run) const
void CopyRunfilesFromRepository(const Char_t *type, KVNumberList runs, const Char_t *destdir)
void UpdateAvailableRuns(const Char_t *type)
virtual void MakeAnalysisClass(const Char_t *task, const Char_t *classname)
TObject * open_runfile(const Char_t *type, Int_t run)
void CommitRunfile(const Char_t *type, Int_t run, TFile *file)
KVExpDB * GetDataBase(Option_t *opt="") const
virtual Bool_t DataBaseNeedsUpdate() const
Bool_t OpenDataSetFile(const Char_t *filename, std::ifstream &file)
void SetDataSetSpecificTaskParameters(KVDataAnalysisTask *) const
virtual void WriteDBFile(const Char_t *full_path_to_dbfile) const
const Char_t * GetFullPathToDB() const
Returns full path to file where database is written on disk.
TFile * NewRunfile(const Char_t *type, Int_t run)
virtual Bool_t CheckUserCanAccess()
void SetRepository(KVDataRepository *)
Set pointer to data repository in which dataset is stored.
virtual std::unique_ptr< KVDataAnalysisTask > GetAnalysisTaskAny(const Char_t *keywords) const
void CleanMultiRunfiles(const Char_t *data_type, Bool_t confirm=kTRUE)
virtual void OpenDataBase(Option_t *opt="") const
virtual void Print(Option_t *opt="") const
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
Bool_t CheckRunfileAvailable(const Char_t *type, Int_t run)
Extension of TDatime to handle various useful date formats.
Base class to describe database of an experiment ,.
static KVExpDB * MakeDataBase(const Char_t *name, const Char_t *datasetdir)
Extended TList class which owns its objects by default.
Strings used to represent a set of ranges of values.
const Char_t * AsString(Int_t maxchars=0) const
void Remove(Int_t)
Remove value 'n' from the list.
void Add(Int_t)
Add value 'n' to the list.
Description of an individual run file in an experimental dataset.
Int_t GetRunNumber() const
const Char_t * GetVersion() const
const KVDBRun * GetRun() const
KaliVeda extensions to ROOT collection classes.
virtual TObject * At(Int_t idx) const
virtual TObject * FindObjectAny(const Char_t *att, const Char_t *keys, Bool_t contains_all=kFALSE, Bool_t case_sensitive=kTRUE) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
static TClass * GetClass(Bool_t load=kTRUE, Bool_t silent=kFALSE)
virtual Int_t GetEntries() const
const char * AsSQLString() const
const char * AsString() const
virtual Bool_t cd(const char *path=nullptr)
virtual const char * GetValue(const char *name, const char *dflt) const
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
Bool_t Defined(const char *name) const
virtual TObject * FindObject(const char *name) const
virtual TObject * At(Int_t idx) const
virtual const char * GetName() const
virtual const char * GetTitle() const
virtual void SetName(const char *name)
const char * Data() const
void Form(const char *fmt,...)
TString & Remove(EStripType s, char c)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TString & ReplaceAll(const char *s1, const char *s2)
Bool_t cd(const char *path)
virtual int Chmod(const char *file, UInt_t mode)
virtual const char * DirName(const char *pathname)
virtual char * ConcatFileName(const char *dir, const char *name)
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
virtual Int_t Exec(const char *shellcmd)
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
virtual const char * BaseName(const char *pathname)
virtual Bool_t IsAbsoluteFileName(const char *dir)