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 start_from_minimal =
false;
341 if(start_from_minimal)
342 Info(
"OpenDataBase",
"Updating existing minimal database...");
346 Info(
"OpenDataBase",
"Creating a new minimal database...");
348 Info(
"OpenDataBase",
"Creating a new full database...");
351 fDataBaseUpdateInProgress =
true;
354 auto is_glob_db = (fDataBase == gExpDB);
355 if(!start_from_minimal)
364 Info(
"OpenDataBase",
"No database defined for dataset");
365 fDataBaseUpdateInProgress =
false;
370 fDataBase->CompleteDataBase();
372 if (fDataBase && is_glob_db) fDataBase->cd();
373 fDataBaseUpdateInProgress =
false;
376 if (
update || DataBaseNeedsUpdate()) {
380 else if (!fDataBase) {
385 if (!LoadPlugin(
"KVExpDB", GetDBName())) {
386 Error(
"GetDataBase",
"Cannot load required plugin library");
390 TString dbfile_fullpath = GetFullPathToDB();
392 OpenDBFile(dbfile_fullpath.
Data());
396 if (fDataBase && fDataBase->IsMinimal() && !minimal)
397 rebuild_database(
true);
399 else if (fDataBase && fDataBase->IsMinimal() && !minimal) {
402 rebuild_database(
true);
415 cout <<
"Dataset name=" << GetName() <<
" (" << GetTitle() <<
")";
417 cout <<
" [ AVAILABLE: ";
418 cout << fDatatypes.Data();
422 cout <<
" [UNAVAILABLE]";
447 cout <<
" *** No available analysis tasks ***"
452 for (
int i = 1; i <= GetNtasks(); i++) {
454 cout <<
"\t" << i <<
". " << dat->
GetTitle() << endl;
460 cout <<
"Available data types: " << fDatatypes.Data() << endl;
491 SetAvailable(fRepository->CheckSubdirExists(GetDataPathSubdir()));
495 auto data_types = GetDataSetEnv<KVString>(
"KVDataSet.DataTypes");
496 if (data_types ==
"") {
497 Warning(
"CheckAvailable",
"No datatypes defined for this dataset: %s\nCheck value of KVDataSet.DataTypes or %s.KVDataSet.DataTypes",
498 GetName(), GetName());
503 data_types.Begin(
" ");
504 while (!data_types.End()) {
507 (fRepository && fRepository->CheckSubdirExists(GetDataPathSubdir(), GetDataTypeSubdir(
type.Data())))
509 AddAvailableDataType(
type.Data());
513 SetAvailable(fDatatypes !=
"");
515 if (!CheckUserCanAccess()) {
527 if (fDatatypes !=
"") fDatatypes +=
" ";
553 TIter nxt(task_list);
560 SetDataSetSpecificTaskParameters(new_task);
561 fAllTasks.Add(new_task);
563 if (HasDataType(new_task->
GetPrereq())) {
564 fTasks.Add(new_task);
581 return fTasks.GetSize();
612 if (!GetAvailableRunsFile(datatype)) {
613 Error(
"GetListOfAvailableSystems(const Char_t*)",
614 "No available runs file for type %s", datatype.
Data());
617 return GetAvailableRunsFile(datatype)->GetListOfAvailableSystems();
633 return GetListOfAvailableSystems(datan->
GetPrereq());
655 if (!GetAvailableRunsFile(datatype)) {
656 Error(
"GetListOfAvailableSystems(const Char_t*)",
657 "No available runs file for type %s", datatype.
Data());
660 return GetAvailableRunsFile(datatype)->GetListOfAvailableRunFilesForSystem(systol);
682 return GetListOfAvailableRunFilesForSystem(datan->
GetPrereq(), systol);
694 if (!GetAvailableRunsFile(datatype)) {
695 Error(
"GetSystemsForRunFiles",
696 "No available runs file for type %s", datatype.
Data());
699 return GetAvailableRunsFile(datatype)->GetSystemsForRunFiles(rl);
747 TString path = GetDataSetEnv(
"DataSet.Directory",
name);
752 fCalibDir = GetDATADIRFilePath(path);
767 return fCalibDir.Data();
800 if (fRepository) fRepository->
cd();
865 if (
type==
"raw" && GetDataSetEnv<KVString>(
"MFM.WithEbyedat")==
"yes") {
866 TString ebydir = GetDataSetDir();
867 ebydir +=
"/ebyedat";
868 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory", ebydir);
869 if (GetDataSetEnv<KVString>(
"MFM.EbyedatActionsExpName")!=
"")
870 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName", GetDataSetEnv<KVString>(
"MFM.EbyedatActionsExpName"));
871 TObject*
f = GetRepository()->OpenDataSetRunFile(
this,
type, run, GetName());
873 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsDirectory",
"");
874 gEnv->
SetValue(
"KVMFMDataFileReader.ActionsExpName",
"");
877 return GetRepository()->OpenDataSetRunFile(
this,
type, run, GetName());
894 if (fRepository)
file = GetRunfileName(
type, run);
897 return fRepository->GetFullPathToOpenFile(
this,
type,
file.Data());
912 if (!HasDataType(
type)) {
913 Error(
"GetRunfileName",
914 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
919 return GetAvailableRunsFile(
type)->GetFileName(run);
938 if (!HasDataType(
type)) {
939 Error(
"GetRunfileDate",
940 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
947 if (!GetAvailableRunsFile(
type)->GetRunInfo(run, date,
filename)) {
948 Error(
"GetRunfileDate",
949 "Runfile not found for run %d index %d (data type: %s)", run.
run(), run.
index(), (
const char*)
type);
1004 auto arf = GetAvailableRunsFile(datatype);
1008 if (
v.value().has_index())
return v;
1009 int r =
v.value().run();
1011 auto db = GetDataBase(
"minimal");
1012 if (db->HasIndexMultiplier() &&
r > db->GetIndexMultiplier()) {
1013 r /= db->GetIndexMultiplier();
1014 int i =
v.value().run() % db->GetIndexMultiplier();
1034 if (!HasDataType(
type)) {
1035 Error(
"CheckRunfileAvailable",
1036 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
1040 return GetAvailableRunsFile(
type)->CheckAvailable(run);
1079 auto fmt = GetDataSetEnv<TString>(
Form(
"DataSet.RunFileName.%s",
type));
1085 if (fmt.Contains(
"%D")) {
1116 if (!HasDataType(
type)) {
1117 Error(
"UpdateAvailableRuns",
1118 "No data of type \"%s\" available for dataset %s", (
const char*)
type,
1123 CleanRunfileDataBase(
type);
1140 if (!fRepository)
return nullptr;
1144 return fRepository->CreateNewFile(
this,
type, tmp.
Data());
1169 if (!fRepository)
return;
1174 Error(
"DeleteRunfile",
"Run %s of type %s does not exist.",
1180 auto doNotDelete = GetDataSetEnv<KVString>(
"DataSet.RunFile.DoNotDelete",
"all");
1181 if (doNotDelete ==
"all" || doNotDelete.Contains(
type)) {
1182 Error(
"DeleteRunFile",
"%s files cannot be deleted", (
const char*)
type);
1185 fRepository->DeleteFile(
this,
type,
filename.Data(), confirm);
1187 if (!fRepository->CheckFileStatus(
this,
type,
filename.Data()))
1188 GetAvailableRunsFile(
type)->Remove(run);
1220 if (NL.IsEmpty()) NL = GetRunList(
type);
1221 if (NL.IsEmpty())
return;
1223 DeleteRunfile(
type,
r, confirm);
1246 if (!min_date && !max_date)
return {};
1248 if (min_date) printf(
"date minimum %s\n", min_date.value().AsString());
1249 if (max_date) printf(
"date maximum %s\n", max_date.value().AsString());
1253 for (
auto _sys : systems) {
1255 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1257 for (
auto _run : lrun) {
1260 if (min_date && max_date) {
1261 if (min_date.value() < run->GetFileWrittenDatime() && run->GetFileWrittenDatime() < max_date.value()) {
1262 numb.
Add(run->GetRunIndex());
1265 else if (min_date) {
1266 if (min_date.value() < run->GetFileWrittenDatime()) {
1267 numb.
Add(run->GetRunIndex());
1270 else if (max_date) {
1271 if (run->GetFileWrittenDatime() < max_date.value()) {
1272 numb.
Add(run->GetRunIndex());
1300 auto ll = GetListOfAvailableSystems(ref_type);
1303 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type.
Data());
1307 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\" for system %s", ref_type.
Data(), system->
GetName());
1311 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type.
Data(),
type.Data());
1315 for (
Int_t nl = 0; nl < ll.GetEntries(); nl += 1) {
1318 if (system && sys != system)
continue;
1320 auto nsys = GetRunList(
type, sys);
1321 auto nsys_ref = GetRunList(ref_type, sys);
1322 Int_t nref = nsys_ref.GetNValues();
1324 nsys_ref.Remove(nsys);
1326 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1328 nsys_ref.GetNValues(),
1330 nsys_ref.AsString().Data()
1332 manquant.
Add(nsys_ref);
1353 auto ll = GetListOfAvailableSystems(ref_type);
1356 Info(
"GetRunList_StageSelection",
"No data available of type \"%s\"", ref_type.
Data());
1360 Info(
"GetRunList_StageSelection",
"Liste des runs presents dans \"%s\" mais absent dans \"%s\"", ref_type.
Data(),
type.Data());
1364 for (
Int_t nl = 0; nl < ll.GetEntries(); nl += 1) {
1367 if (!systems.
Contains(sys))
continue;
1369 auto nsys = GetRunList(
type, sys);
1370 auto nsys_ref = GetRunList(ref_type, sys);
1371 Int_t nref = nsys_ref.GetNValues();
1373 nsys_ref.Remove(nsys);
1375 Info(
"GetRunList_StageSelection",
"\nKVDBSystem : %s --> %d runs manquants sur %d : %s",
1377 nsys_ref.GetNValues(),
1379 nsys_ref.AsString().Data()
1381 manquant.
Add(nsys_ref);
1401 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1409 auto ll = GetListOfAvailableSystems(
type);
1412 Info(
"GetRunList_VersionSelection",
"No data available of type \"%s\"",
type.Data());
1416 for (
Int_t nl = 0; nl < nsys; nl += 1) {
1418 auto lrun = GetListOfAvailableRunFilesForSystem(
type, sys);
1441 if (!fRepository)
return;
1446 fRepository->CommitFile(
file,
type,
this);
1455 TString oldfile = GetAvailableRunsFile(
type)->GetFileName(run);
1456 if (oldfile !=
"" && oldfile != newfile) {
1458 fRepository->DeleteFile(
this,
type, oldfile.
Data(),
1461 if (!fRepository->CheckFileStatus(
this,
type, oldfile.
Data()))
1462 GetAvailableRunsFile(
type)->Remove(run);
1464 if (oldfile != newfile) {
1466 GetAvailableRunsFile(
type)->Add(run, newfile.
Data());
1486 if (fUserGroups ==
"")
1490 unique_ptr<TObjArray> toks(fUserGroups.Tokenize(
' '));
1492 TIter next_name(toks.get());
1493 while ((group_name = (
TObjString*) next_name())) {
1495 if (!fRepository || (fRepository && fRepository->GetDataSetManager()->
1542 auto doubles = GetAvailableRunsFile(data_type)->CheckMultiRunfiles();
1543 if (doubles.empty()) {
1544 cout <<
"OK. No runs appear more than once." << endl;
1547 cout <<
"Runs which appear more than once: " << endl << endl;
1550 for (
auto& rr : doubles) {
1554 GetAvailableRunsFile(data_type)->GetRunInfos(rr, dates, filenames);
1556 cout <<
"Run " << rr <<
" : " << dates.
GetEntries() <<
" files >>>>>>" << endl;
1557 for (
int i = 0; i < dates.
GetEntries(); i++) {
1594 if (!fRepository)
return;
1598 if (doubles.empty()) {
1599 cout <<
"OK. No runs appear more than once." << endl;
1602 cout <<
"Runs which appear more than once: " << endl << endl;
1606 for (
auto& rr : doubles) {
1609 TDatime most_recent(
"1998-12-25 00:00:00");
1610 Int_t i_most_recent = 0;
1611 cout <<
"Run " << rr <<
" : " << dates.
GetEntries() <<
" files >>>>>>" << endl;
1612 for (
int i = 0; i < dates.
GetEntries(); i++) {
1615 if (rundate > most_recent) {
1616 most_recent = rundate;
1622 for (
int i = 0; i < dates.
GetEntries(); i++) {
1623 if (i == i_most_recent) {
1627 cout <<
"DELETE : ";
1632 if (i != i_most_recent) {
1634 fRepository->DeleteFile(
this, data_type,
1636 String().Data(), confirm);
1659 if (!fRepository)
return;
1661 Info(
"CleanRunfileDataBase",
"Checking for spurious duplicates (non-existent files)...");
1666 if (!doubles.empty()) {
1667 for (
auto& ri : doubles) {
1672 for (
auto f : files) {
1674 if (!fRepository->CheckFileStatus(
this, data_type, fname)) {
1675 Info(
"CleanRunfileDataBase",
"File %s does not exist : remove from database...", fname.
Data());
1682 Info(
"CleanRunfileDataBase",
"Database is apparently consistent");
1709 Error(
"CheckRunfileUpToDate",
1710 "Dataset \"%s\" not found in repository \"%s\"", GetName(),
1715 if (GetRunfileDate(data_type, run) < ds->
GetRunfileDate(data_type, run))
1742 return CheckRunfileUpToDate(data_type, run, _or);
1743 Error(
"CheckRunfileUpToDate",
1744 "No data repository known with this name : %s", (
const char*) other_repos);
1756 const Char_t* other_repos)
1761 if (!fRepository)
return;
1766 Error(
"CheckUpToDate",
1767 "No data repository known with this name : %s", other_repos);
1770 auto runlist = GetAvailableRunsFile(data_type)->GetRunList();
1771 Int_t need_update = 0;
1772 for (
auto& rr : runlist) {
1774 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1775 cout <<
" *** run " << rr <<
" needs update ***" <<
1777 cout <<
"\t\tREPOSITORY: " << fRepository->
1778 GetName() <<
"\tDATE: " << GetRunfileDate(data_type, rr).value().AsString() << endl;
1779 cout <<
"\t\tREPOSITORY: " << other_repos <<
"\tDATE: " << _or->
1780 GetDataSetManager()->GetDataSet(GetName())->
1781 GetRunfileDate(data_type, rr).value().AsString() << endl;
1786 cout <<
" *** All runfiles are up to date for data type " <<
1799 const Char_t* other_repos)
1805 if (!fRepository)
return updates;
1810 Error(
"CheckUpToDate",
1811 "No data repository known with this name : %s", other_repos);
1814 auto runlist = GetAvailableRunsFile(data_type)->GetRunList();
1815 for (
auto& rr : runlist) {
1817 if (!CheckRunfileUpToDate(data_type, rr, _or)) {
1840 if (!fRepository || !HasDataType(data_type)) {
1842 "No data of type %s available. Runlist will be empty.",
1847 return GetAvailableRunsFile(data_type)->GetRunList(system);
1927 Error(
"MakeAnalysisClass",
1928 "No user class required for analysis task \"%s\"", dat->
GetTitle());
1942 unique_ptr<TMethodCall> methcall(
new TMethodCall(cl,
"Make",
Form(
"\"%s\"", classname)));
1944 if (!methcall->IsValid()) {
1945 Error(
"MakeAnalysisClass",
"static Make(const Char_t*) method for class %s is not valid",
1951 methcall->Execute();
1986 if (!_task.
Contains(
"nalysis")) _task +=
" analysis";
1989 auto dat = GetAnalysisTaskAny(_task.
Data());
1991 Error(
"MakeAnalysisClass",
1992 "called for unknown or unavailable analysis task : %s", _task.
Data());
1995 return make_analysis_class(dat, classname);
2015 auto dat = GetAnalysisTask(task);
2017 Error(
"MakeAnalysisClass",
2018 "called for unknown or unavailable analysis task index : %d", task);
2021 return make_analysis_class(dat, classname);
2036 return OpenDataSetFile(GetName(), filename,
file);
2055 abspath.
Form(
"%s/%s", datasetdir.
Data(), filename);
2056 return SearchAndOpenKVFile(abspath,
file);
2059 return SearchAndOpenKVFile(filename,
file, datasetdir);
2073 return GetFullPathToDataSetFile(GetName(),
filename);
2091 if (!SearchKVFile(
filename, fullpath, datasetdir)) {
2093 b.Warning(
"KVDataSet::GetFullPathToDataSetFile",
"File %s not found in dataset subdirectory %s",
filename, datasetdir.
Data());
2112 return SearchKVFile(
filename, fullpath, datasetdir);
2126 return FindDataSetFile(GetName(),
filename);
2153 Error(
"GetAnalysisTaskAny",
"No task found with the following keywords in its title : %s", keywords);
2179 if (!SearchKVFile(GetDataSetDir(), path)) {
2181 Info(
"DataBaseNeedsUpdate",
"%s: Creating new dataset directory %s",
2182 GetName(), GetDataSetDir());
2185 Error(
"DataBaseNeedsUpdate",
2186 "%s: Dataset directory %s does not exist and cannot be created ?",
2187 GetName(), GetDataSetDir());
2191 SearchKVFile(GetDataSetDir(), path);
2195 of1 <<
"$(KV_WORK_DIR)/db/" << GetName() <<
"/DataBase.root : Runlist.csv Systems.dat" << endl;
2196 of1 <<
"\t@echo Database needs update" << endl;
2200 of2 <<
"# Automatically generated dummy Runlist.csv file" << endl;
2204 of3 <<
"# Automatically generated dummy Systems.dat file" << endl;
2251 if (
gEnv->
Defined(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName())))
2252 return TString(
gEnv->
GetValue(
Form(
"%s.DataRepository.DefaultOutputRepository", GetRepository()->GetName()),
""));
2253 TString orep = GetDataSetEnv(
Form(
"%s.DataAnalysisTask.OutputRepository", taskname), GetRepository()->GetName());
2268 for (
auto& run : runs) {
2292 Error(
"CopyRunfilesToRepository",
"Unknown destination repository : %s", destrepo);
2293 gDataRepositoryManager->
Print();
2299 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 b
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)
Base class for KaliVeda framework.
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)