10 #include "KVDataRepository.h"
11 #include "KVDataRepositoryManager.h"
12 #include "KVDataSetManager.h"
16 #include "KVDBSystem.h"
19 #include "KVAvailableRunsFile.h"
20 #include "KVNumberList.h"
23 #include "KVRunFile.h"
38 fRepository =
nullptr;
40 fAllTasks.SetOwner(
kTRUE);
56 if (!fRepository)
return nullptr;
60 avrf = fRepository->NewAvailableRunsFile(
type,
this);
61 fAvailableRuns.
Add(avrf);
102 n.Append(
Form(
".%d.%d.%d", GetKVMajorVersion(),
103 GetKVMinorVersion(), GetKVPatchVersion()));
120 return (fDBName !=
"" ? fDBName.Data() : GetName());
134 fDBase.reset(
new TFile(full_path_to_dbfile,
"READ"));
136 if (fDBase->IsOpen()) {
137 fDataBase =
dynamic_cast<KVExpDB*
>(fDBase->Get(GetDBName()));
139 Error(
"OpenDBFile",
"%s not found in file %s", GetDBName().Data(),
140 GetDBFileName().Data());
143 fDataBase->ReadObjects(fDBase.get());
159 TString dbfile = GetDBFileName();
166 TString dataset_alias = GetDataSetEnv(
"DataSet.Directory", GetName());
172 return dbfile_fullpath;
184 auto envar = GetDataSetEnv<KVString>(
Form(
"%s.DataAnalysisTask.Title", t->
GetName()));
185 if (envar !=
"") t->
SetTitle(envar);
186 envar = GetDataSetEnv<KVString>(
Form(
"%s.DataAnalysisTask.Analyser", t->
GetName()));
188 envar = GetDataSetEnv<KVString>(
Form(
"%s.DataAnalysisTask.UserClass.Base", t->
GetName()));
190 envar = GetDataSetEnv<KVString>(
Form(
"%s.DataAnalysisTask.Prereq", t->
GetName()));
192 envar = GetDataSetEnv<KVString>(
Form(
"%s.DataAnalysisTask.UserClass.ExtraACliCIncludes", t->
GetName()));
194 auto nev = GetDataSetEnv<int>(
Form(
"%s.DataAnalysisTask.StatusUpdateInterval", t->
GetName()));
210 TString dbfile_fullpath = GetFullPathToDB();
222 Error(
"SaveDataBase",
"Cannot create directory %s required to save database",
229 Error(
"SaveDataBase",
"Cannot create directory %s required to save database, even though %s exists: check disk space ?",
235 Error(
"SaveDataBase",
"Cannot create directory %s required to save database",
248 WriteDBFile(dbfile_fullpath.
Data());
263 Error(
"WriteDBFile",
"Database has not been built");
266 fDBase.reset(
new TFile(full_path_to_dbfile,
"recreate"));
268 fDataBase->Write(GetDBName());
269 fDataBase->WriteObjects(fDBase.get());
337 auto minimal = (_opt.
Contains(
"MINIMAL"));
339 auto rebuild_database = [&](
bool start_from_minimal =
false) {
340 if(start_from_minimal)
341 Info(
"OpenDataBase",
"Updating existing minimal database...");
345 Info(
"OpenDataBase",
"Creating a new minimal database...");
347 Info(
"OpenDataBase",
"Creating a new full database...");
350 fDataBaseUpdateInProgress =
true;
353 auto is_glob_db = (fDataBase == gExpDB);
354 if(!start_from_minimal)
363 Info(
"OpenDataBase",
"No database defined for dataset");
364 fDataBaseUpdateInProgress =
false;
369 fDataBase->CompleteDataBase();
371 if (fDataBase && is_glob_db) fDataBase->cd();
372 fDataBaseUpdateInProgress =
false;
375 if (
update || DataBaseNeedsUpdate()) {
379 else if (!fDataBase) {
384 if (!LoadPlugin(
"KVExpDB", GetDBName())) {
385 Error(
"GetDataBase",
"Cannot load required plugin library");
389 TString dbfile_fullpath = GetFullPathToDB();
391 OpenDBFile(dbfile_fullpath.
Data());
395 if (fDataBase && fDataBase->IsMinimal() && !minimal)
396 rebuild_database(
true);
398 else if (fDataBase && fDataBase->IsMinimal() && !minimal) {
401 rebuild_database(
true);
414 cout <<
"Dataset name=" << GetName() <<
" (" << GetTitle() <<
")";
416 cout <<
" [ AVAILABLE: ";
417 cout << fDatatypes.Data();
421 cout <<
" [UNAVAILABLE]";
446 cout <<
" *** No available analysis tasks ***"
451 for (
int i = 1; i <= GetNtasks(); i++) {
453 cout <<
"\t" << i <<
". " << dat->
GetTitle() << endl;
459 cout <<
"Available data types: " << fDatatypes.Data() << endl;
490 SetAvailable(fRepository->CheckSubdirExists(GetDataPathSubdir()));
494 auto data_types = GetDataSetEnv<KVString>(
"KVDataSet.DataTypes");
495 if (data_types ==
"") {
496 Warning(
"CheckAvailable",
"No datatypes defined for this dataset: %s\nCheck value of KVDataSet.DataTypes or %s.KVDataSet.DataTypes",
497 GetName(), GetName());
502 data_types.Begin(
" ");
503 while (!data_types.End()) {
506 (fRepository && fRepository->CheckSubdirExists(GetDataPathSubdir(), GetDataTypeSubdir(
type.Data())))
508 AddAvailableDataType(
type.Data());
512 SetAvailable(fDatatypes !=
"");
514 if (!CheckUserCanAccess()) {
526 if (fDatatypes !=
"") fDatatypes +=
" ";
552 TIter nxt(task_list);
559 SetDataSetSpecificTaskParameters(new_task);
560 fAllTasks.Add(new_task);
562 if (HasDataType(new_task->
GetPrereq())) {
563 fTasks.Add(new_task);
580 return fTasks.GetSize();
611 if (!GetAvailableRunsFile(datatype)) {
612 Error(
"GetListOfAvailableSystems(const Char_t*)",
613 "No available runs file for type %s", datatype.
Data());
616 return GetAvailableRunsFile(datatype)->GetListOfAvailableSystems();
632 return GetListOfAvailableSystems(datan->
GetPrereq());
654 if (!GetAvailableRunsFile(datatype)) {
655 Error(
"GetListOfAvailableSystems(const Char_t*)",
656 "No available runs file for type %s", datatype.
Data());
659 return GetAvailableRunsFile(datatype)->GetListOfAvailableRunFilesForSystem(systol);
681 return GetListOfAvailableRunFilesForSystem(datan->
GetPrereq(), systol);
693 if (!GetAvailableRunsFile(datatype)) {
694 Error(
"GetSystemsForRunFiles",
695 "No available runs file for type %s", datatype.
Data());
698 return GetAvailableRunsFile(datatype)->GetSystemsForRunFiles(rl);
746 TString path = GetDataSetEnv(
"DataSet.Directory",
name);
751 fCalibDir = GetDATADIRFilePath(path);
766 return fCalibDir.Data();
799 if (fRepository) fRepository->
cd();
864 if (
type==
"raw" && GetDataSetEnv<KVString>(
"MFM.WithEbyedat")==
"yes") {
865 TString ebydir = GetDataSetDir();
866 ebydir +=
"/ebyedat";
867 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory", ebydir);
868 if (GetDataSetEnv<KVString>(
"MFM.EbyedatActionsExpName")!=
"")
869 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName", GetDataSetEnv<KVString>(
"MFM.EbyedatActionsExpName"));
870 TObject*
f = GetRepository()->OpenDataSetRunFile(
this,
type, run, GetName());
872 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory",
"");
873 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName",
"");
876 return GetRepository()->OpenDataSetRunFile(
this,
type, run, GetName());
893 if (fRepository)
file = GetRunfileName(
type, run);
896 return fRepository->GetFullPathToOpenFile(
this,
type,
file.Data());
911 if (!HasDataType(
type)) {
912 Error(
"GetRunfileName",
913 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
918 return GetAvailableRunsFile(
type)->GetFileName(run);
937 if (!HasDataType(
type)) {
938 Error(
"GetRunfileDate",
939 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
946 if (!GetAvailableRunsFile(
type)->GetRunInfo(run, date,
filename)) {
947 Error(
"GetRunfileDate",
948 "Runfile not found for run %d index %d (data type: %s)", run.
run(), run.
index(), (
const char*)
type);
1003 auto arf = GetAvailableRunsFile(datatype);
1007 if (
v.value().has_index())
return v;
1008 int r =
v.value().run();
1010 auto db = GetDataBase(
"minimal");
1011 if (db->HasIndexMultiplier() &&
r > db->GetIndexMultiplier()) {
1012 r /= db->GetIndexMultiplier();
1013 int i =
v.value().run() % db->GetIndexMultiplier();
1033 if (!HasDataType(
type)) {
1034 Error(
"CheckRunfileAvailable",
1035 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
1039 return GetAvailableRunsFile(
type)->CheckAvailable(run);
1078 auto fmt = GetDataSetEnv<TString>(
Form(
"DataSet.RunFileName.%s",
type));
1084 if (fmt.Contains(
"%D")) {
1115 if (!HasDataType(
type)) {
1116 Error(
"UpdateAvailableRuns",
1117 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
1122 CleanRunfileDataBase(
type);
1139 if (!fRepository)
return nullptr;
1143 return fRepository->CreateNewFile(
this,
type, tmp.
Data());
1168 if (!fRepository)
return;
1173 Error(
"DeleteRunfile",
"Run %s of type %s does not exist.",
1179 auto doNotDelete = GetDataSetEnv<KVString>(
"DataSet.RunFile.DoNotDelete",
"all");
1180 if (doNotDelete ==
"all" || doNotDelete.Contains(
type)) {
1181 Error(
"DeleteRunFile",
"%s files cannot be deleted", (
const char*)
type);
1184 fRepository->DeleteFile(
this,
type,
filename.Data(), confirm);
1186 if (!fRepository->CheckFileStatus(
this,
type,
filename.Data()))
1187 GetAvailableRunsFile(
type)->Remove(run);
1219 if (NL.IsEmpty()) NL = GetRunList(
type);
1220 if (NL.IsEmpty())
return;
1222 DeleteRunfile(
type,
r, confirm);
1245 if (!min_date && !max_date)
return {};
1247 if (min_date) printf(
"date minimum %s\n", min_date.value().AsString());
1248 if (max_date) printf(
"date maximum %s\n", max_date.value().AsString());
1252 for (
auto _sys : systems) {
1254 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1256 for (
auto _run : lrun) {
1259 if (min_date && max_date) {
1260 if (min_date.value() < run->GetFileWrittenDatime() && run->GetFileWrittenDatime() < max_date.value()) {
1261 numb.
Add(run->GetRunIndex());
1264 else if (min_date) {
1265 if (min_date.value() < run->GetFileWrittenDatime()) {
1266 numb.
Add(run->GetRunIndex());
1269 else if (max_date) {
1270 if (run->GetFileWrittenDatime() < max_date.value()) {
1271 numb.
Add(run->GetRunIndex());
1299 auto ll = GetListOfAvailableSystems(ref_type);
1302 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type.
Data());
1306 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\" for system %s", ref_type.
Data(), system->
GetName());
1310 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type.
Data(),
type.Data());
1314 for (
Int_t nl = 0; nl < ll.GetEntries(); nl += 1) {
1317 if (system && sys != system)
continue;
1319 auto nsys = GetRunList(
type, sys);
1320 auto nsys_ref = GetRunList(ref_type, sys);
1321 Int_t nref = nsys_ref.GetNValues();
1323 nsys_ref.Remove(nsys);
1325 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1327 nsys_ref.GetNValues(),
1329 nsys_ref.AsString().Data()
1331 manquant.
Add(nsys_ref);
1352 auto ll = GetListOfAvailableSystems(ref_type);
1355 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type.
Data());
1359 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type.
Data(),
type.Data());
1363 for (
Int_t nl = 0; nl < ll.GetEntries(); nl += 1) {
1366 if (!systems.
Contains(sys))
continue;
1368 auto nsys = GetRunList(
type, sys);
1369 auto nsys_ref = GetRunList(ref_type, sys);
1370 Int_t nref = nsys_ref.GetNValues();
1372 nsys_ref.Remove(nsys);
1374 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1376 nsys_ref.GetNValues(),
1378 nsys_ref.AsString().Data()
1380 manquant.
Add(nsys_ref);
1400 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1408 auto ll = GetListOfAvailableSystems(
type);
1411 Info(
"GetRunList_VersionSelection",
"No data available of type \"%s\"",
type.Data());
1415 for (
Int_t nl = 0; nl < nsys; nl += 1) {
1417 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1440 if (!fRepository)
return;
1445 fRepository->CommitFile(
file,
type,
this);
1454 TString oldfile = GetAvailableRunsFile(
type)->GetFileName(run);
1455 if (oldfile !=
"" && oldfile != newfile) {
1457 fRepository->DeleteFile(
this,
type, oldfile.
Data(),
1460 if (!fRepository->CheckFileStatus(
this,
type, oldfile.
Data()))
1461 GetAvailableRunsFile(
type)->Remove(run);
1463 if (oldfile != newfile) {
1465 GetAvailableRunsFile(
type)->Add(run, newfile.
Data());
1485 if (fUserGroups ==
"")
1489 unique_ptr<TObjArray> toks(fUserGroups.Tokenize(
' '));
1491 TIter next_name(toks.get());
1492 while ((group_name = (
TObjString*) next_name())) {
1494 if (!fRepository || (fRepository && fRepository->GetDataSetManager()->
1541 auto doubles = GetAvailableRunsFile(data_type)->CheckMultiRunfiles();
1542 if (doubles.empty()) {
1543 cout <<
"OK. No runs appear more than once." << endl;
1546 cout <<
"Runs which appear more than once: " << endl << endl;
1549 for (
auto& rr : doubles) {
1553 GetAvailableRunsFile(data_type)->GetRunInfos(rr, dates, filenames);
1555 cout <<
"Run " << rr <<
" : " << dates.
GetEntries() <<
" files >>>>>>" << endl;
1556 for (
int i = 0; i < dates.
GetEntries(); i++) {
1593 if (!fRepository)
return;
1597 if (doubles.empty()) {
1598 cout <<
"OK. No runs appear more than once." << endl;
1601 cout <<
"Runs which appear more than once: " << endl << endl;
1605 for (
auto& rr : doubles) {
1608 TDatime most_recent(
"1998-12-25 00:00:00");
1609 Int_t i_most_recent = 0;
1610 cout <<
"Run " << rr <<
" : " << dates.
GetEntries() <<
" files >>>>>>" << endl;
1611 for (
int i = 0; i < dates.
GetEntries(); i++) {
1614 if (rundate > most_recent) {
1615 most_recent = rundate;
1621 for (
int i = 0; i < dates.
GetEntries(); i++) {
1622 if (i == i_most_recent) {
1626 cout <<
"DELETE : ";
1631 if (i != i_most_recent) {
1633 fRepository->DeleteFile(
this, data_type,
1635 String().Data(), confirm);
1658 if (!fRepository)
return;
1660 Info(
"CleanRunfileDataBase",
"Checking for spurious duplicates (non-existent files)...");
1665 if (!doubles.empty()) {
1666 for (
auto& ri : doubles) {
1671 for (
auto f : files) {
1673 if (!fRepository->CheckFileStatus(
this, data_type, fname)) {
1674 Info(
"CleanRunfileDataBase",
"File %s does not exist : remove from database...", fname.
Data());
1681 Info(
"CleanRunfileDataBase",
"Database is apparently consistent");
1708 Error(
"CheckRunfileUpToDate",
1709 "Dataset \"%s\" not found in repository \"%s\"", GetName(),
1714 if (GetRunfileDate(data_type, run) < ds->
GetRunfileDate(data_type, run))
1741 return CheckRunfileUpToDate(data_type, run, _or);
1742 Error(
"CheckRunfileUpToDate",
1743 "No data repository known with this name : %s", (
const char*) other_repos);
1755 const Char_t* other_repos)
1760 if (!fRepository)
return;
1765 Error(
"CheckUpToDate",
1766 "No data repository known with this name : %s", other_repos);
1769 auto runlist = GetAvailableRunsFile(data_type)->GetRunList();
1770 Int_t need_update = 0;
1771 for (
auto& rr : runlist) {
1773 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1774 cout <<
" *** run " << rr <<
" needs update ***" <<
1776 cout <<
"\t\tREPOSITORY: " << fRepository->
1777 GetName() <<
"\tDATE: " << GetRunfileDate(data_type, rr).value().AsString() << endl;
1778 cout <<
"\t\tREPOSITORY: " << other_repos <<
"\tDATE: " << _or->
1779 GetDataSetManager()->GetDataSet(GetName())->
1780 GetRunfileDate(data_type, rr).value().AsString() << endl;
1785 cout <<
" *** All runfiles are up to date for data type " <<
1798 const Char_t* other_repos)
1804 if (!fRepository)
return updates;
1809 Error(
"CheckUpToDate",
1810 "No data repository known with this name : %s", other_repos);
1813 auto runlist = GetAvailableRunsFile(data_type)->GetRunList();
1814 for (
auto& rr : runlist) {
1816 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1839 if (!fRepository || !HasDataType(data_type)) {
1841 "No data of type %s available. Runlist will be empty.",
1846 return GetAvailableRunsFile(data_type)->GetRunList(system);
1926 Error(
"MakeAnalysisClass",
1927 "No user class required for analysis task \"%s\"", dat->
GetTitle());
1941 unique_ptr<TMethodCall> methcall(
new TMethodCall(cl,
"Make",
Form(
"\"%s\"", classname)));
1943 if (!methcall->IsValid()) {
1944 Error(
"MakeAnalysisClass",
"static Make(const Char_t*) method for class %s is not valid",
1950 methcall->Execute();
1985 if (!_task.
Contains(
"nalysis")) _task +=
" analysis";
1988 auto dat = GetAnalysisTaskAny(_task.
Data());
1990 Error(
"MakeAnalysisClass",
1991 "called for unknown or unavailable analysis task : %s", _task.
Data());
1994 return make_analysis_class(dat, classname);
2014 auto dat = GetAnalysisTask(task);
2016 Error(
"MakeAnalysisClass",
2017 "called for unknown or unavailable analysis task index : %d", task);
2020 return make_analysis_class(dat, classname);
2035 return OpenDataSetFile(GetName(), filename,
file);
2054 abspath.
Form(
"%s/%s", datasetdir.
Data(), filename);
2055 return SearchAndOpenKVFile(abspath,
file);
2058 return SearchAndOpenKVFile(filename,
file, datasetdir);
2072 return GetFullPathToDataSetFile(GetName(),
filename);
2088 if (!SearchKVFile(
filename, fullpath, datasetdir)) {
2089 ::Warning(
"KVDataSet::GetFullPathToDataSetFile",
"File %s not found in dataset subdirectory %s",
filename, datasetdir.
Data());
2108 return SearchKVFile(
filename, fullpath, datasetdir);
2122 return FindDataSetFile(GetName(),
filename);
2149 Error(
"GetAnalysisTaskAny",
"No task found with the following keywords in its title : %s", keywords);
2175 if (!SearchKVFile(GetDataSetDir(), path)) {
2177 Info(
"DataBaseNeedsUpdate",
"%s: Creating new dataset directory %s",
2178 GetName(), GetDataSetDir());
2181 Error(
"DataBaseNeedsUpdate",
2182 "%s: Dataset directory %s does not exist and cannot be created ?",
2183 GetName(), GetDataSetDir());
2187 SearchKVFile(GetDataSetDir(), path);
2191 of1 <<
"$(KV_WORK_DIR)/db/" << GetName() <<
"/DataBase.root : Runlist.csv Systems.dat" << endl;
2192 of1 <<
"\t@echo Database needs update" << endl;
2196 of2 <<
"# Automatically generated dummy Runlist.csv file" << endl;
2200 of3 <<
"# Automatically generated dummy Systems.dat file" << endl;
2247 if (
gEnv->
Defined(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName())))
2248 return TString(
gEnv->
GetValue(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName()),
""));
2249 TString orep = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.OutputRepository", taskname), GetRepository()->GetName());
2264 for (
auto& run : runs) {
2288 Error(
"CopyRunfilesToRepository",
"Unknown destination repository : %s", destrepo);
2289 gDataRepositoryManager->
Print();
2295 for (
auto& run : runs) {
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 filename
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 * Form(const char *fmt,...)
void AssignAndDelete(TString &target, char *tobedeleted)
R__EXTERN TSystem * gSystem
Handles lists of available runs for different datasets and types of data.
void GetRunInfos(const run_index_t &run, KVList &dates, KVList &names)
virtual void Remove(const run_index_t &run, const KVString &filename="")
Remove from the db ALL entries corresponding to the given run/index (and filename if given)
std::forward_list< run_index_t > CheckMultiRunfiles()
Returns a list with all run/indexes for which more than one file is in the available runs db.
virtual void Add(const run_index_t &run, const KVString &filename)
static ValType GetDataSetEnv(const KVString &dataset, const KVString &type, const ValType &defval={})
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 Bool_t WithUserClass() const
virtual void SetPrereq(const Char_t *p)
virtual void SetStatusUpdateInterval(Long64_t n)
virtual const Char_t * GetUserBaseClass() const
virtual Bool_t CheckUserBaseClassIsLoaded() const
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)
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.
std::optional< TDatime > GetRunfileDate(const KVString &type, const run_index_t &run)
TString GetFullPathToRunfile(const KVString &type, const run_index_t &run) const
TString GetFullPathToDB() const
void ls(Option_t *opt="") const override
Print dataset information.
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.
TString GetDBName() const
void CheckMultiRunfiles(const Char_t *data_type)
Bool_t CheckRunfileAvailable(const KVString &type, const run_index_t &run)
void CleanRunfileDataBase(const Char_t *data_type)
void CheckUpToDate(const Char_t *data_type, const Char_t *other_repos)
run_index_list GetRunList(const Char_t *data_type, const KVDBSystem *sys=0) const
virtual void OpenDataBase(const TString &="") const
TString GetFullPathToDataSetFile(const Char_t *filename) const
void CopyRunfilesFromRepository(const Char_t *type, const run_index_list &runs, const Char_t *destdir)
Copies the runfiles of given "type" into the local directory "destdir".
KVDataRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
run_index_list GetRunList_DateSelection(const TString &type, const KVUnownedList &systems, std::optional< KVDatime > min_date=std::nullopt, std::optional< KVDatime > max_date=std::nullopt)
const Char_t * GetDataSetDir() const
void CommitRunfile(const KVString &type, const run_index_t &run, TFile *file)
virtual void AddAvailableDataType(const Char_t *)
KVUniqueNameList GetSystemsForRunFiles(const TString &datatype, const run_index_list &) const
bool make_analysis_class(const KVDataAnalysisTask *, const Char_t *classname)
KVDataAnalysisTask * GetAnalysisTask(Int_t) const
KVAvailableRunsFile * GetAvailableRunsFile(const TString &type) const
virtual void SaveDataBase() const
virtual KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
virtual TString GetBaseFileName(const Char_t *type, const run_index_t &run) const
virtual void SetAnalysisTasks(const KVSeqCollection *)
TFile * NewRunfile(const KVString &type, const run_index_t &run)
KVList GetListOfAvailableRunFilesForSystem(const TString &datatype, KVDBSystem *systol)
Bool_t CheckRunfileUpToDate(const KVString &data_type, const run_index_t &run, KVDataRepository *other_repos)
virtual void CheckAvailable()
void DeleteRunfile(const KVString &type, const run_index_t &run, Bool_t confirm=kTRUE)
virtual Int_t GetNtasks() const
run_index_list GetRunList_VersionSelection(const TString &type, const TString &version, KVDBSystem *sys=0)
KVExpDB * GetDataBase(const TString &opt="") const
void DeleteRunfiles(const Char_t *type, const run_index_list &lrun={}, Bool_t confirm=kTRUE)
TObject * open_runfile(const KVString &type, const run_index_t &run)
void CopyRunfilesToRepository(const Char_t *type, const run_index_list &runs, const Char_t *destrepo)
KVString GetRunfileName(const KVString &type, const run_index_t &run) const
virtual Bool_t DataBaseNeedsUpdate() const
Bool_t OpenDataSetFile(const Char_t *filename, std::ifstream &file)
void SetDataSetSpecificTaskParameters(KVDataAnalysisTask *) const
Check configuration variables to see if the task parameters have been "tweaked" for the dataset.
run_index_list GetRunList_StageSelection(const TString &other_type, const TString &base_type, KVDBSystem *sys=0, Bool_t OnlyCol=kFALSE)
virtual void WriteDBFile(const Char_t *full_path_to_dbfile) const
Write the database to disk.
void Print(Option_t *opt="") const override
void SetName(const char *name) override
virtual Bool_t CheckUserCanAccess()
void UpdateAvailableRuns(const KVString &type)
run_index_list GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
void SetRepository(KVDataRepository *)
Set pointer to data repository in which dataset is stored.
bool MakeAnalysisClass(const Char_t *task, const Char_t *classname)
KVDataSet()
Default constructor.
std::optional< run_index_t > GetRunNumberFromFileName(const TString &datatype, const TString &filename)
void CleanMultiRunfiles(const Char_t *data_type, Bool_t confirm=kTRUE)
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
KVUnownedList GetListOfAvailableSystems(const TString &datatype)
TString GetDBFileName() const
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, Bool_t minimal=false)
Extended TList class which owns its objects by default.
Description of an individual data file in an experimental dataset.
const Char_t * GetVersion() const
const run_index_t & GetRunIndex() const
KaliVeda extensions to ROOT collection classes.
TObject * At(Int_t idx) const override
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Optimised list in which named objects can only be placed once.
Extended TList class which does not own its objects by default.
static TClass * GetClass(Bool_t load=kTRUE, Bool_t silent=kFALSE)
virtual Int_t GetEntries() const
Bool_t Contains(const char *name) const
const char * AsSQLString() const
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
TObject * FindObject(const char *name) const override
virtual void SetTitle(const char *title="")
const char * GetName() const override
const char * GetTitle() const override
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)
List of runfiles specified by run number and file index ,.
void Add(const run_index_t &r)
Specifies a runfile according to run number and file index ,.
TString as_string() const
int index(int no_index=-1) const
void update(const LAYERDATA &prevLayerData, LAYERDATA &currLayerData, double factorWeightDecay, EnumRegularization regularization)