1 #include "KVSimDataManager.h"
5 #include "KVDataSetManager.h"
23 if (!fDB.has_table(
"datasets")) {
26 T.add_column(
"id",
"INTEGER");
27 T.add_column(
"name",
"TEXT").NOT_NULL();
33 T.add_column(
"id",
"INTEGER");
34 T.add_column(
"user",
"TEXT").NOT_NULL();
35 T.add_column(
"description",
"TEXT").NOT_NULL();
36 T.add_column(
"model_id",
"INTEGER");
38 T.foreign_key(
"model_id",
"models",
"id");
43 T.add_column(
"id",
"INTEGER");
44 T.add_column(
"nuc1",
"TEXT").NOT_NULL();
45 T.add_column(
"nuc2",
"TEXT");
46 T.add_column(
"energy",
"REAL");
47 T.add_column(
"spin_hbar",
"INTEGER");
48 T.add_column(
"impact_parameter",
"REAL");
49 T.add_column(
"ip_units",
"TEXT");
55 T.add_column(
"id",
"INTEGER");
57 T.add_column(
"root_dir",
"TEXT").NOT_NULL();
58 T.add_column(
"type",
"TEXT").NOT_NULL().DEFAULT(
"local");
59 T.add_column(
"Xrdsrv",
"TEXT");
60 T.add_column(
"Xrdroot",
"TEXT");
65 T.add_column(
"id",
"INTEGER");
66 T.add_column(
"name",
"TEXT").NOT_NULL();
67 T.add_column(
"path",
"TEXT").NOT_NULL();
68 T.add_column(
"repository_id",
"INTEGER");
69 T.add_column(
"original_name",
"TEXT");
70 T.add_column(
"original_path",
"TEXT");
71 T.add_column(
"events",
"INTEGER");
72 T.add_column(
"type",
"TEXT").NOT_NULL();
73 T.add_column(
"dataset_id",
"INTEGER");
74 T.add_column(
"reaction_id",
"INTEGER");
76 T.foreign_key(
"dataset_id",
"datasets",
"id");
77 T.foreign_key(
"reaction_id",
"reactions",
"id");
82 T.add_column(
"id",
"INTEGER");
83 T.add_column(
"kinematics",
"INTEGER");
84 T.foreign_key(
"kinematics",
"reactions",
"id");
85 T.add_column(
"geometry",
"TEXT").NOT_NULL();
86 T.add_column(
"run_number",
"INTEGER");
87 T.add_column(
"filter_type",
"TEXT").NOT_NULL();
88 T.add_column(
"data_quality_audit",
"TEXT");
89 T.add_column(
"random_phi",
"TEXT");
90 T.add_column(
"gemini",
"INTEGER");
91 T.add_column(
"gem_add_erot",
"TEXT");
97 T.add_column(
"id",
"INTEGER");
98 T.add_column(
"name",
"TEXT").NOT_NULL();
99 T.add_column(
"path",
"TEXT").NOT_NULL();
100 T.add_column(
"repository_id",
"INTEGER");
101 T.add_column(
"original_name",
"TEXT");
102 T.add_column(
"original_path",
"TEXT");
103 T.add_column(
"events",
"INTEGER");
104 T.add_column(
"unfiltered_file_id",
"INTEGER");
105 T.add_column(
"dataset_id",
"INTEGER");
106 T.add_column(
"reaction_id",
"INTEGER");
107 T.add_column(
"filter_id",
"INTEGER");
109 T.foreign_key(
"unfiltered_file_id",
"unfiltered_files",
"id");
110 T.foreign_key(
"dataset_id",
"datasets",
"id");
111 T.foreign_key(
"reaction_id",
"reactions",
"id");
112 T.foreign_key(
"filter_id",
"filters",
"id");
133 bool random_phi, std::optional<int> run_number, std::optional<TString> data_quality_audit, std::optional<int> gem_decay_per_event,
134 std::optional<bool> gem_add_rot_energy)
148 params.
SetValue(
"kinematics", kinematics);
150 params.
SetValue(
"filter_type", filter_type);
151 if (random_phi) params.
SetValue(
"random_phi",
"yes");
152 else params.
SetValue(
"random_phi",
"no");
153 if (run_number) params.
SetValue(
"run_number", run_number.value());
154 if (data_quality_audit) params.
SetValue(
"data_quality_audit", data_quality_audit.value());
155 if (gem_decay_per_event) {
156 params.
SetValue(
"gemini", gem_decay_per_event.value());
157 params.
SetValue(
"gem_add_erot", (gem_add_rot_energy ? (gem_add_rot_energy.value() ?
"yes" :
"no") :
"no"));
178 fRepos[
id]->ReadWithXrootd(xrdsrv.value(), xrdroot.value());
214 auto model_id = res.GetIntValue(
"model_id");
218 filt.
Form(
"filter_%d", filt_id.value());
233 std::optional<TString> xrdsrv, std::optional<TString> xrdroot)
244 if (access ==
"local") {
248 Error(
"AddDataRepository",
"invalid root directory for local data repository: %s", root_dir.
Data());
251 _root_dir = rv.value();
253 params.
SetValue(
"root_dir", _root_dir);
254 if (xrdsrv) params.
SetValue(
"Xrdsrv", xrdsrv.value());
255 if (xrdroot) params.
SetValue(
"Xrdroot", xrdroot.value());
306 params.
SetValue(
"type",
"secondary");
307 params.
SetValue(
"dataset_id", dataset);
308 params.
SetValue(
"reaction_id", reaction);
310 add_file_to_collection(
"AddUnfilteredSimulation",
"unfiltered_files", params, filepath, dataset, reaction);
327 Error(method_name,
"The file %s has already been added", filepath.
Data());
331 params.
SetValue(
"name", repo_path.second);
332 params.
SetValue(
"path", repo_path.first);
340 Error(method_name,
"The file %s has already been added", filepath.
Data());
371 kinematics = kk.value();
374 if (!gDataSetManager) {
384 kinematics = kk.value();
386 auto filt_id =
AddFilter(kinematics,
f.GetDataSet(),
f.GetFilterType(),
f.IsRandomPhi(),
387 f.HasRun() ?
f.GetRun() : std::optional<int> {},
388 f.HasDataQualityAudit() ?
f.GetDataQualityAudit() : std::optional<TString> {},
389 f.IsGemini() ?
f.GetGemDecayPerEvent() : std::optional<int> {});
392 params.
SetValue(
"events", (
int)
f.GetEvents());
393 params.
SetValue(
"dataset_id", dataset);
394 params.
SetValue(
"reaction_id", reaction);
395 params.
SetValue(
"filter_id", filt_id);
400 params.
SetValue(
"unfiltered_file_id", file_v.value());
402 add_file_to_collection(
"AddFilteredSimulation",
"filtered_files", params,
f.GetFullPathToFile(), dataset, reaction, filt_id);
460 catch (
const std::exception&
e) {
461 Info(
"ImportFilesToRepository",
"%s",
e.what());
485 if (res.HasParameter(
"nuc2")) {
486 KVNucleus proj(res.GetStringValue(
"nuc1"));
487 proj.
SetE(res.GetDoubleValue(
"energy"));
489 reac.
Form(
"reaction%s%s%.0fAMeV", res.GetStringValue(
"nuc1"), res.GetStringValue(
"nuc2"), proj.
GetAMeV());
490 if (res.HasParameter(
"impact_parameter"))
491 reac.
Append(
Form(
"_b%.1f%s", res.GetDoubleValue(
"impact_parameter"), res.GetStringValue(
"ip_units")));
495 CN.
Form(
"decay%s%.0fMeV", res.GetStringValue(
"nuc1"), res.GetDoubleValue(
"energy"));
496 if (res.HasParameter(
"spin_hbar"))
497 CN.
Append(
Form(
"_%dhbar", res.GetIntValue(
"spin_hbar")));
513 return Form(
"%s_%d", res.GetStringValue(
"name"),
id);
523 params.
SetValue(
"nuc1",
R.GetNucleus(1)->GetSymbol());
525 params.
SetValue(
"nuc2",
R.GetNucleus(2)->GetSymbol());
526 params.
SetValue(
"energy",
R.GetNucleus(1)->GetEnergy());
528 params.
SetValue(
"impact_parameter", opt.value());
529 params.
SetValue(
"ip_units", ip_units);
533 params.
SetValue(
"energy", -(
R.GetExcitEnergy()));
562 std::optional<TString> xrdsrv;
563 if (columns.HasStringParameter(
"Xrdsrv"))
564 xrdsrv = columns[
"Xrdsrv"].GetTString();
565 std::optional<TString> xrdroot;
566 if (columns.HasStringParameter(
"Xrdroot"))
567 xrdroot = columns[
"Xrdroot"].GetTString();
568 initialize_repository(
id, columns[
"root_dir"].GetString(), columns[
"type"].GetString(), xrdsrv, xrdroot);
574 throw std::runtime_error(
Form(
"no repository with id=%d in database; you should call AddDataRepository() first",
id));
603 auto reaction = (
R.GetNucleus(2) !=
nullptr);
638 auto reaction = (
R.GetNucleus(2) !=
nullptr);
727 params.
SetValue(
"description", short_description);
757 modid =
AddModel(model, model_params);
759 return AddDataSet(short_description, modid.value());
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
char * Form(const char *fmt,...)
R__EXTERN TSystem * gSystem
Relativistic binary kinematics calculator.
void Error(const char *method, const char *msgfmt,...) const override
colourised errors (red) !
static std::optional< TString > AbsoluteUnixPath(const TString &)
Base class for managing repositories of data.
int CopyFileToRepository(const TString &filename, const TString &source, const Paths &... paths) const
Manage all datasets contained in a given data repository.
Bool_t Init(KVDataSetRepository *=0)
KVDataSet * GetDataSet(Int_t) const
Return pointer to DataSet using index in list of all datasets, index>=0.
KVExpDB * GetDataBase(const TString &opt="") const
virtual KVDBSystem * GetSystem(const Char_t *system) const
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
void SetValue(const Char_t *name, value_type value)
Description of properties and kinematics of atomic nuclei.
void get_name_value_list_for_each_row(const TString &table, std::function< bool(const KVNameValueList &)> callback, const TString &selection="", const TString &anything_else="")
void add_missing_columns(const TString &table, const KVNameValueList &l)
Manage database of simulations ,.
std::optional< model_id > GetModelId(const TString &, const KVNameValueList &) const
std::map< int, std::unique_ptr< KVDataRepository > > fRepos
void initialize_repository(repository_id id, const TString &root_dir, const TString &access="local", std::optional< TString > xrdsrv=std::nullopt, std::optional< TString > xrdroot=std::nullopt)
Initialize a new data repository with the given informations.
model_id AddModel(const TString &, const KVNameValueList &)
std::optional< reaction_id > GetReactionId(const KV2Body &, std::optional< double >=std::nullopt, const TString &ip_units="fm") const
std::optional< int > find_index_in_table(const TString &table_name, const KVNameValueList ¶ms) const
repository_id AddDataRepository(const TString &root_dir, const TString &access="local", std::optional< TString > xrdsrv=std::nullopt, std::optional< TString > xrdroot=std::nullopt)
KVNameValueList get_data_for_unique_index(const TString &table_name, int id) const
filter_id AddFilter(reaction_id kinematics, const TString &geometry, const TString &filter_type, bool random_phi, std::optional< int > run_number={}, std::optional< TString > data_quality_audit={}, std::optional< int > gem_decay_per_event={}, std::optional< bool > gem_add_rot_energy={})
std::pair< TString, TString > import_file_to_repository(const TString &filepath, repository_id repo, dataset_id dset, reaction_id reac, std::optional< filter_id > filt_id={})
const KVDataRepository & get_data_repository(repository_id id)
dataset_id AddDataSet(const TString &short_description, const TString &model, const KVNameValueList &model_params)
TString GetReactionName(reaction_id id) const
repository_id import_repo
Bool_t import_data_into_repository
void enter_data_row(const TString &table_name, const KVNameValueList ¶ms)
void AddUnfilteredSimulation(const TString &filepath, Int_t events, primary_or_secondary P, dataset_id dataset, reaction_id reaction)
void AddFilteredSimulation(const KVSimFile &f, dataset_id dataset, reaction_id reaction)
KVNameValueList get_params_for_reaction(std::optional< double > opt, bool reaction, const KV2Body &R, const TString &ip_units) const
void add_file_to_collection(const TString &method_name, const TString &table_name, KVNameValueList ¶ms, const TString &filepath, dataset_id dataset, reaction_id reaction, std::optional< filter_id > filt_id={})
void AddFilesFromDirectory(dataset_id dataset, reaction_id reaction, const TString &dirpath)
Use KVSimDir to analyse files in directory, all supposed to correspond to the same reaction,...
reaction_id AddReaction(const KV2Body &, std::optional< double >=std::nullopt, const TString &ip_units="fm")
void ImportFilesToRepository(repository_id=0)
TString GetModelName(model_id id) const
Handle directory containing simulated and/or filtered simulated data ,.
const KVList * GetFiltDataList() const
const KVList * GetSimDataList() const
Handle file containing simulated and/or filtered simulated data ,.
virtual void Info(const char *method, const char *msgfmt,...) const
const char * Data() const
TString & Append(char c, Ssiz_t rep=1)
void Form(const char *fmt,...)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual const char * DirName(const char *pathname)
virtual UserGroup_t * GetUserInfo(const char *user=nullptr)
virtual const char * BaseName(const char *pathname)