10 #include "KVDataSetRepository.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 fAllTasks.SetOwner(
kTRUE);
54 if (!fRepository)
return nullptr;
58 avrf = fRepository->NewAvailableRunsFile(
type,
this);
59 fAvailableRuns.
Add(avrf);
100 n.Append(
Form(
".%d.%d.%d", GetKVMajorVersion(),
101 GetKVMinorVersion(), GetKVPatchVersion()));
118 return (fDBName !=
"" ? fDBName.Data() : GetName());
132 fDBase.reset(
new TFile(full_path_to_dbfile,
"READ"));
134 if (fDBase->IsOpen()) {
135 fDataBase =
dynamic_cast<KVExpDB*
>(fDBase->Get(GetDBName()));
137 Error(
"OpenDBFile",
"%s not found in file %s", GetDBName().Data(),
138 GetDBFileName().Data());
141 fDataBase->ReadObjects(fDBase.get());
157 TString dbfile = GetDBFileName();
164 TString dataset_alias = GetDataSetEnv(
"DataSet.Directory", GetName());
170 return dbfile_fullpath;
183 if (envar !=
"") t->
SetTitle(envar);
184 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.Analyser", t->
GetName()));
186 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.UserClass.Base", t->
GetName()));
188 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.Prereq", t->
GetName()));
190 envar = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.UserClass.ExtraACliCIncludes", t->
GetName()));
192 Int_t nev = (
Int_t)GetDataSetEnv(
Form(
"%s.DataAnalysisTask.StatusUpdateInterval", t->
GetName()), 0.0);
208 TString dbfile_fullpath = GetFullPathToDB();
220 Error(
"SaveDataBase",
"Cannot create directory %s required to save database",
227 Error(
"SaveDataBase",
"Cannot create directory %s required to save database, even though %s exists: check disk space ?",
233 Error(
"SaveDataBase",
"Cannot create directory %s required to save database",
246 WriteDBFile(dbfile_fullpath.
Data());
261 Error(
"WriteDBFile",
"Database has not been built");
264 fDBase.reset(
new TFile(full_path_to_dbfile,
"recreate"));
266 fDataBase->Write(GetDBName());
267 fDataBase->WriteObjects(fDBase.get());
335 auto minimal = (_opt.
Contains(
"MINIMAL"));
337 auto rebuild_database = [&](
bool start_from_minimal =
false) {
338 if (start_from_minimal)
339 Info(
"OpenDataBase",
"Updating existing minimal database...");
342 Info(
"OpenDataBase",
"Creating a new minimal database...");
344 Info(
"OpenDataBase",
"Creating a new full database...");
347 fDataBaseUpdateInProgress =
true;
350 auto is_glob_db = (fDataBase == gExpDB);
351 if (!start_from_minimal) {
359 Info(
"OpenDataBase",
"No database defined for dataset");
360 fDataBaseUpdateInProgress =
false;
365 fDataBase->CompleteDataBase();
367 if (fDataBase && is_glob_db) fDataBase->cd();
368 fDataBaseUpdateInProgress =
false;
371 if (
update || DataBaseNeedsUpdate()) {
375 else if (!fDataBase) {
380 if (!LoadPlugin(
"KVExpDB", GetDBName())) {
381 Error(
"GetDataBase",
"Cannot load required plugin library");
385 TString dbfile_fullpath = GetFullPathToDB();
387 OpenDBFile(dbfile_fullpath.
Data());
391 if (fDataBase && fDataBase->IsMinimal() && !minimal)
392 rebuild_database(
true);
394 else if (fDataBase && fDataBase->IsMinimal() && !minimal) {
397 rebuild_database(
true);
410 cout <<
"Dataset name=" << GetName() <<
" (" << GetTitle() <<
")";
412 cout <<
" [ AVAILABLE: ";
413 cout << fDatatypes.Data();
417 cout <<
" [UNAVAILABLE]";
442 cout <<
" *** No available analysis tasks ***"
447 for (
int i = 1; i <= GetNtasks(); i++) {
449 cout <<
"\t" << i <<
". " << dat->
GetTitle() << endl;
455 cout <<
"Available data types: " << fDatatypes.Data() << endl;
486 SetAvailable(fRepository->CheckSubdirExists(GetDataPathSubdir()));
490 KVString data_types = GetDataSetEnv(
"KVDataSet.DataTypes",
"");
491 if (data_types ==
"") {
492 Warning(
"CheckAvailable",
"No datatypes defined for this dataset: %s\nCheck value of KVDataSet.DataTypes or %s.KVDataSet.DataTypes",
493 GetName(), GetName());
498 data_types.
Begin(
" ");
499 while (!data_types.
End()) {
502 (fRepository && fRepository->CheckSubdirExists(GetDataPathSubdir(), GetDataTypeSubdir(
type.Data())))
504 AddAvailableDataType(
type.Data());
508 SetAvailable(fDatatypes !=
"");
517 if (fDatatypes !=
"") fDatatypes +=
" ";
543 TIter nxt(task_list);
550 SetDataSetSpecificTaskParameters(new_task);
551 fAllTasks.Add(new_task);
553 if (HasDataType(new_task->
GetPrereq())) {
554 fTasks.Add(new_task);
571 return fTasks.GetSize();
602 if (!GetAvailableRunsFile(datatype)) {
603 Error(
"GetListOfAvailableSystems(const Char_t*)",
604 "No available runs file for type %s", datatype.
Data());
607 return GetAvailableRunsFile(datatype)->GetListOfAvailableSystems();
623 return GetListOfAvailableSystems(datan->
GetPrereq());
645 if (!GetAvailableRunsFile(datatype)) {
646 Error(
"GetListOfAvailableSystems(const Char_t*)",
647 "No available runs file for type %s", datatype.
Data());
650 return GetAvailableRunsFile(datatype)->GetListOfAvailableRunFilesForSystem(systol);
672 return GetListOfAvailableRunFilesForSystem(datan->
GetPrereq(), systol);
684 if (!GetAvailableRunsFile(datatype)) {
685 Error(
"GetSystemsForRunFiles",
686 "No available runs file for type %s", datatype.
Data());
689 return GetAvailableRunsFile(datatype)->GetSystemsForRunFiles(rl);
737 TString path = GetDataSetEnv(
"DataSet.Directory",
name);
742 fCalibDir = GetDATADIRFilePath(path);
757 return fCalibDir.Data();
790 if (fRepository) fRepository->
cd();
854 if (!GetRepository())
return nullptr;
856 auto file_open = [&](
const TString & fpth) {
857 return file_opener(
type, fpth, GetName());
860 if (!strcmp(
type,
"raw") && !strcmp(GetDataSetEnv(
"MFM.WithEbyedat",
""),
"yes")) {
861 TString ebydir = GetDataSetDir();
862 ebydir +=
"/ebyedat";
863 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory", ebydir);
864 if (strcmp(GetDataSetEnv(
"MFM.EbyedatActionsExpName",
""),
""))
865 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName", GetDataSetEnv(
"MFM.EbyedatActionsExpName",
""));
866 TObject*
f = GetRepository()->OpenFile(GetRunfileName(
type, run), file_open, GetDataPathSubdir(), GetDataTypeSubdir(
type));
868 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory",
"");
869 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName",
"");
872 return GetRepository()->OpenFile(GetRunfileName(
type, run), file_open, GetDataPathSubdir(), GetDataTypeSubdir(
type));
889 if (fRepository)
file = GetRunfileName(
type, run);
892 return fRepository->GetFullPathToOpenFile(
file, GetDataPathSubdir(), GetDataTypeSubdir(
type));
907 if (!HasDataType(
type)) {
908 Error(
"GetRunfileName",
909 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
914 return GetAvailableRunsFile(
type)->GetFileName(run);
933 if (!HasDataType(
type)) {
934 Error(
"GetRunfileDate",
935 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
942 if (!GetAvailableRunsFile(
type)->GetRunInfo(run, date,
filename)) {
943 Error(
"GetRunfileDate",
944 "Runfile not found for run %d index %d (data type: %s)", run.
run(), run.
index(), (
const char*)
type);
999 auto arf = GetAvailableRunsFile(datatype);
1003 if (
v.value().has_index())
return v;
1004 int r =
v.value().run();
1006 auto db = GetDataBase(
"minimal");
1007 if (db->HasIndexMultiplier() &&
r > db->GetIndexMultiplier()) {
1008 r /= db->GetIndexMultiplier();
1009 int i =
v.value().run() % db->GetIndexMultiplier();
1029 if (!HasDataType(
type)) {
1030 Error(
"CheckRunfileAvailable",
1031 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
1035 return GetAvailableRunsFile(
type)->CheckAvailable(run);
1111 if (!HasDataType(
type)) {
1112 Error(
"UpdateAvailableRuns",
1113 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
1118 CleanRunfileDataBase(
type);
1135 if (!fRepository)
return nullptr;
1139 return fRepository->CreateNewFile(
this,
type, tmp.
Data());
1164 if (!fRepository)
return;
1169 Error(
"DeleteRunfile",
"Run %s of type %s does not exist.",
1175 KVString doNotDelete = GetDataSetEnv(
"DataSet.RunFile.DoNotDelete",
"all");
1176 if (doNotDelete ==
"all" || doNotDelete.
Contains(
type)) {
1177 Error(
"DeleteRunFile",
"%s files cannot be deleted", (
const char*)
type);
1180 fRepository->DeleteFile(
this,
type,
filename, confirm);
1182 if (!fRepository->CheckFileStatus(
this,
type,
filename.Data()))
1183 GetAvailableRunsFile(
type)->Remove(run);
1215 if (NL.IsEmpty()) NL = GetRunList(
type);
1216 if (NL.IsEmpty())
return;
1218 DeleteRunfile(
type,
r, confirm);
1241 if (!min_date && !max_date)
return {};
1243 if (min_date) printf(
"date minimum %s\n", min_date.value().AsString());
1244 if (max_date) printf(
"date maximum %s\n", max_date.value().AsString());
1248 for (
auto _sys : systems) {
1250 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1252 for (
auto _run : lrun) {
1255 if (min_date && max_date) {
1256 if (min_date.value() < run->GetFileWrittenDatime() && run->GetFileWrittenDatime() < max_date.value()) {
1257 numb.
Add(run->GetRunIndex());
1260 else if (min_date) {
1261 if (min_date.value() < run->GetFileWrittenDatime()) {
1262 numb.
Add(run->GetRunIndex());
1265 else if (max_date) {
1266 if (run->GetFileWrittenDatime() < max_date.value()) {
1267 numb.
Add(run->GetRunIndex());
1295 auto ll = GetListOfAvailableSystems(ref_type);
1298 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type.
Data());
1302 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\" for system %s", ref_type.
Data(), system->
GetName());
1306 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type.
Data(),
type.Data());
1310 for (
Int_t nl = 0; nl < ll.GetEntries(); nl += 1) {
1313 if (system && sys != system)
continue;
1315 auto nsys = GetRunList(
type, sys);
1316 auto nsys_ref = GetRunList(ref_type, sys);
1317 Int_t nref = nsys_ref.GetNValues();
1319 nsys_ref.Remove(nsys);
1321 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1323 nsys_ref.GetNValues(),
1325 nsys_ref.AsString().Data()
1327 manquant.
Add(nsys_ref);
1348 auto ll = GetListOfAvailableSystems(ref_type);
1351 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type.
Data());
1355 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type.
Data(),
type.Data());
1359 for (
Int_t nl = 0; nl < ll.GetEntries(); nl += 1) {
1362 if (!systems.
Contains(sys))
continue;
1364 auto nsys = GetRunList(
type, sys);
1365 auto nsys_ref = GetRunList(ref_type, sys);
1366 Int_t nref = nsys_ref.GetNValues();
1368 nsys_ref.Remove(nsys);
1370 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1372 nsys_ref.GetNValues(),
1374 nsys_ref.AsString().Data()
1376 manquant.
Add(nsys_ref);
1396 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1404 auto ll = GetListOfAvailableSystems(
type);
1407 Info(
"GetRunList_VersionSelection",
"No data available of type \"%s\"",
type.Data());
1411 for (
Int_t nl = 0; nl < nsys; nl += 1) {
1413 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1436 if (!fRepository)
return;
1441 fRepository->CommitFile(
file,
type,
this);
1450 TString oldfile = GetAvailableRunsFile(
type)->GetFileName(run);
1451 if (oldfile !=
"" && oldfile != newfile) {
1453 fRepository->DeleteFile(
this,
type, oldfile.
Data(),
1456 if (!fRepository->CheckFileStatus(
this,
type, oldfile.
Data()))
1457 GetAvailableRunsFile(
type)->Remove(run);
1459 if (oldfile != newfile) {
1461 GetAvailableRunsFile(
type)->Add(run, newfile.
Data());
1503 auto doubles = GetAvailableRunsFile(data_type)->CheckMultiRunfiles();
1504 if (doubles.empty()) {
1505 cout <<
"OK. No runs appear more than once." << endl;
1508 cout <<
"Runs which appear more than once: " << endl << endl;
1511 for (
auto& rr : doubles) {
1515 GetAvailableRunsFile(data_type)->GetRunInfos(rr, dates, filenames);
1517 cout <<
"Run " << rr <<
" : " << dates.
GetEntries() <<
" files >>>>>>" << endl;
1518 for (
int i = 0; i < dates.
GetEntries(); i++) {
1555 if (!fRepository)
return;
1559 if (doubles.empty()) {
1560 cout <<
"OK. No runs appear more than once." << endl;
1563 cout <<
"Runs which appear more than once: " << endl << endl;
1567 for (
auto& rr : doubles) {
1570 TDatime most_recent(
"1998-12-25 00:00:00");
1571 Int_t i_most_recent = 0;
1572 cout <<
"Run " << rr <<
" : " << dates.
GetEntries() <<
" files >>>>>>" << endl;
1573 for (
int i = 0; i < dates.
GetEntries(); i++) {
1576 if (rundate > most_recent) {
1577 most_recent = rundate;
1583 for (
int i = 0; i < dates.
GetEntries(); i++) {
1584 if (i == i_most_recent) {
1588 cout <<
"DELETE : ";
1593 if (i != i_most_recent) {
1595 fRepository->DeleteFile(
this, data_type,
1597 String().Data(), confirm);
1620 if (!fRepository)
return;
1622 Info(
"CleanRunfileDataBase",
"Checking for spurious duplicates (non-existent files)...");
1627 if (!doubles.empty()) {
1628 for (
auto& ri : doubles) {
1633 for (
auto f : files) {
1635 if (!fRepository->CheckFileStatus(
this, data_type, fname)) {
1636 Info(
"CleanRunfileDataBase",
"File %s does not exist : remove from database...", fname.
Data());
1643 Info(
"CleanRunfileDataBase",
"Database is apparently consistent");
1670 Error(
"CheckRunfileUpToDate",
1671 "Dataset \"%s\" not found in repository \"%s\"", GetName(),
1676 if (GetRunfileDate(data_type, run) < ds->
GetRunfileDate(data_type, run))
1700 auto _or = gDataRepositoryManager->
GetRepository(other_repos);
1702 return CheckRunfileUpToDate(data_type, run, _or);
1703 Error(
"CheckRunfileUpToDate",
1704 "No data repository known with this name : %s", (
const char*) other_repos);
1716 const Char_t* other_repos)
1721 if (!fRepository)
return;
1726 Error(
"CheckUpToDate",
1727 "No data repository known with this name : %s", other_repos);
1730 auto runlist = GetAvailableRunsFile(data_type)->GetRunList();
1731 Int_t need_update = 0;
1732 for (
auto& rr : runlist) {
1734 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1735 cout <<
" *** run " << rr <<
" needs update ***" <<
1737 cout <<
"\t\tREPOSITORY: " << fRepository->
1738 GetName() <<
"\tDATE: " << GetRunfileDate(data_type, rr).value().AsString() << endl;
1739 cout <<
"\t\tREPOSITORY: " << other_repos <<
"\tDATE: " << _or->
1740 GetDataSetManager()->GetDataSet(GetName())->
1741 GetRunfileDate(data_type, rr).value().AsString() << endl;
1746 cout <<
" *** All runfiles are up to date for data type " <<
1759 const Char_t* other_repos)
1765 if (!fRepository)
return updates;
1767 auto _or = gDataRepositoryManager->
GetRepository(other_repos);
1769 Error(
"CheckUpToDate",
1770 "No data repository known with this name : %s", other_repos);
1773 auto runlist = GetAvailableRunsFile(data_type)->GetRunList();
1774 for (
auto& rr : runlist) {
1776 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1799 if (!fRepository || !HasDataType(data_type)) {
1801 "No data of type %s available. Runlist will be empty.",
1806 return GetAvailableRunsFile(data_type)->GetRunList(system);
1886 Error(
"MakeAnalysisClass",
1887 "No user class required for analysis task \"%s\"", dat->
GetTitle());
1901 unique_ptr<TMethodCall> methcall(
new TMethodCall(cl,
"Make",
Form(
"\"%s\"", classname)));
1903 if (!methcall->IsValid()) {
1904 Error(
"MakeAnalysisClass",
"static Make(const Char_t*) method for class %s is not valid",
1910 methcall->Execute();
1990 KVString plugin_class = GetDataSetEnv(
Form(
"DataSet.RunFileClass.%s",
type.Data()));
1994 if (IsThisAPlugin(plugin_class, base_class)) {
1997 ph = LoadPlugin(base_class, plugin_class);
2001 base_class = plugin_class;
2012 std::unique_ptr<TMethodCall> methcall;
2013 if (strcmp(opt,
"")) {
2015 methcall = std::make_unique<TMethodCall>(cl,
"Open",
Form(
"\"%s\", \"%s\"", fname.
Data(), opt));
2019 methcall = std::make_unique<TMethodCall>(cl,
"Open",
Form(
"\"%s\"", fname.
Data()));
2022 if (!methcall->IsValid()) {
2023 if (ph)
Error(
"OpenDataSetFile",
"Open method for class %s is not valid", ph->
GetClass());
2024 else Error(
"OpenDataSetFile",
"Open method for class %s is not valid", base_class.
Data());
2030 methcall->Execute(retval);
2064 if (!_task.
Contains(
"nalysis")) _task +=
" analysis";
2067 auto dat = GetAnalysisTaskAny(_task.
Data());
2069 Error(
"MakeAnalysisClass",
2070 "called for unknown or unavailable analysis task : %s", _task.
Data());
2073 return make_analysis_class(dat, classname);
2093 auto dat = GetAnalysisTask(task);
2095 Error(
"MakeAnalysisClass",
2096 "called for unknown or unavailable analysis task index : %d", task);
2099 return make_analysis_class(dat, classname);
2114 return OpenDataSetFile(GetName(), filename,
file);
2133 abspath.
Form(
"%s/%s", datasetdir.
Data(), filename);
2134 return SearchAndOpenKVFile(abspath,
file);
2137 return SearchAndOpenKVFile(filename,
file, datasetdir);
2151 return GetFullPathToDataSetFile(GetName(),
filename);
2167 if (!SearchKVFile(
filename, fullpath, datasetdir)) {
2168 ::Warning(
"KVDataSet::GetFullPathToDataSetFile",
"File %s not found in dataset subdirectory %s",
filename, datasetdir.
Data());
2187 return SearchKVFile(
filename, fullpath, datasetdir);
2201 return FindDataSetFile(GetName(),
filename);
2228 Error(
"GetAnalysisTaskAny",
"No task found with the following keywords in its title : %s", keywords);
2254 if (!SearchKVFile(GetDataSetDir(), path)) {
2256 Info(
"DataBaseNeedsUpdate",
"%s: Creating new dataset directory %s",
2257 GetName(), GetDataSetDir());
2260 Error(
"DataBaseNeedsUpdate",
2261 "%s: Dataset directory %s does not exist and cannot be created ?",
2262 GetName(), GetDataSetDir());
2266 SearchKVFile(GetDataSetDir(), path);
2270 of1 <<
"$(KV_WORK_DIR)/db/" << GetName() <<
"/DataBase.root : Runlist.csv Systems.dat" << endl;
2271 of1 <<
"\t@echo Database needs update" << endl;
2275 of2 <<
"# Automatically generated dummy Runlist.csv file" << endl;
2279 of3 <<
"# Automatically generated dummy Systems.dat file" << endl;
2326 if (
gEnv->
Defined(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName())))
2327 return TString(
gEnv->
GetValue(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName()),
""));
2328 TString orep = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.OutputRepository", taskname), GetRepository()->GetName());
2342 auto repo = GetRepository();
2343 for (
auto& run : runs) {
2347 repo->CopyFileFromRepository(
this,
type,
filename, destpath);
2363 auto repo = GetRepository();
2367 Error(
"CopyRunfilesToRepository",
"Unknown destination repository : %s", destrepo);
2368 gDataRepositoryManager->
Print();
2372 KVDataSet* dest_ds = dest_repo->GetDataSetManager()->GetDataSet(GetName());
2373 dest_repo->CreateAllNeededSubdirectories(dest_ds,
type);
2374 for (
auto& run : runs) {
2377 repo->CopyFileFromRepository(
this,
type,
filename, destpath);
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)
void Print(Option_t *opt="") const
KVDataSetRepository * GetRepository(const TString &name) const
KVDataSet * GetDataSet(Int_t) const
Return pointer to DataSet using index in list of all datasets, index>=0.
A repository for experimental datasets.
KVDataSetManager * GetDataSetManager() const
Return pointer to data set manager for this repository.
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
void OpenDBFile(const Char_t *full_path_to_dbfile) const
Open the database from a file on disk.
void SetRepository(KVDataSetRepository *)
Set pointer to data repository in which dataset is stored.
TString GetDBName() const
void CheckMultiRunfiles(const Char_t *data_type)
Bool_t CheckRunfileAvailable(const KVString &type, const run_index_t &run)
virtual const Char_t * GetBaseFileName(const Char_t *type, const run_index_t &run) const
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
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".
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)
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
void SaveDataBase() const
KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
void SetAnalysisTasks(const KVSeqCollection *)
TFile * NewRunfile(const KVString &type, const run_index_t &run)
KVList GetListOfAvailableRunFilesForSystem(const TString &datatype, KVDBSystem *systol)
void DeleteRunfile(const KVString &type, const run_index_t &run, Bool_t confirm=kTRUE)
TObject * file_opener(const TString &, const TString &, Option_t *="")
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)
Bool_t CheckRunfileUpToDate(const KVString &data_type, const run_index_t &run, KVDataSetRepository *other_repos)
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)
KVDataSetRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
KVString GetRunfileName(const KVString &type, const run_index_t &run) const
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)
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
void UpdateAvailableRuns(const KVString &type)
run_index_list GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
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....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
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 * GetClass() const
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)