KaliVeda
Toolkit for HIC analysis
KVSimDataManager.h
1 #pragma once
2 #include <optional>
3 #include "KVBase.h"
4 #include "SQLiteDB.h"
5 #include "KV2Body.h"
6 #include "KVDataRepository.h"
7 
8 class KVSimFile;
9 
211 class KVSimDataManager : public KVBase {
212 public:
213  using dataset_id = int;
214  using model_id = int;
215  using reaction_id = int;
216  using file_id = int;
217  using repository_id = int;
218  using filter_id = int;
219 
220  enum class primary_or_secondary {
221  primary,
222  secondary
223  };
224 
225 private:
227  std::map<int, std::unique_ptr<KVDataRepository>> fRepos;
228 
231 
232  std::optional<int> find_index_in_table(const TString& table_name, const KVNameValueList& params) const
233  {
234  fDB.select_data_in_list(table_name, params, "id");
235  std::optional<int> id;
236  while (fDB.get_next_result())
237  id = fDB[table_name]["id"].get_data<int>();
238  return id;
239  }
240  void enter_data_row(const TString& table_name, const KVNameValueList& params)
241  {
242  fDB.prepare_data_insertion(table_name);
243  fDB[table_name].prepare_data(params);
246  }
247  KVNameValueList get_data_for_unique_index(const TString& table_name, int id) const
248  {
251  auto callback = [&](const KVNameValueList & l) {
252  result = l;
253  return false;
254  };
255  fDB.get_name_value_list_for_each_row(table_name, callback, Form("id = %d", id));
256  return result;
257  }
258  KVNameValueList get_params_for_reaction(std::optional<double> opt, bool reaction, const KV2Body& R, const TString& ip_units) const;
260 
261  void initialize_repository(repository_id id, const TString& root_dir, const TString& access = "local",
262  std::optional<TString> xrdsrv = std::nullopt, std::optional<TString> xrdroot = std::nullopt);
263 
264  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 = {});
265 
266  void add_file_to_collection(const TString& method_name, const TString& table_name, KVNameValueList& params, const TString& filepath, dataset_id dataset,
267  reaction_id reaction, std::optional<filter_id> filt_id = {});
268 
269 public:
270  KVSimDataManager() = default;
271 
272  void OpenDataBase(const TString&);
273 
274  repository_id AddDataRepository(const TString& root_dir, const TString& access = "local",
275  std::optional<TString> xrdsrv = std::nullopt,
276  std::optional<TString> xrdroot = std::nullopt);
277 
278  model_id AddModel(const TString&, const KVNameValueList&);
279  dataset_id AddDataSet(const TString& short_description, const TString& model, const KVNameValueList& model_params);
280  dataset_id AddDataSet(const TString& short_description, model_id modid);
281  reaction_id AddReaction(const KV2Body&, std::optional<double> = std::nullopt, const TString& ip_units = "fm");
282  filter_id AddFilter(reaction_id kinematics, const TString& geometry, const TString& filter_type, bool random_phi,
283  std::optional<int> run_number = {}, std::optional<TString> data_quality_audit = {}, std::optional<int> gem_decay_per_event = {},
284  std::optional<bool> gem_add_rot_energy = {});
285  void AddUnfilteredSimulation(const TString& filepath, Int_t events, primary_or_secondary P, dataset_id dataset, reaction_id reaction);
286  void AddFilteredSimulation(const KVSimFile& f, dataset_id dataset, reaction_id reaction);
287 
288  std::optional<model_id> GetModelId(const TString&, const KVNameValueList&) const;
289  std::optional<reaction_id> GetReactionId(const KV2Body&, std::optional<double> = std::nullopt, const TString& ip_units = "fm") const;
290 
291  void AddFilesFromDirectory(dataset_id dataset, reaction_id reaction, const TString& dirpath);
292 
294 
296  TString GetModelName(model_id id) const;
297 
299 
300 };
int Int_t
bool Bool_t
#define ClassDefOverride(name, id)
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 result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
char * Form(const char *fmt,...)
Relativistic binary kinematics calculator.
Definition: KV2Body.h:168
Base class for KaliVeda framework.
Definition: KVBase.h:140
Base class for managing repositories of data.
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Interface to ROOT SQLite database backend.
Definition: SQLiteDB.h:473
bool select_data_in_list(const TString &tables, const KVNameValueList &selection, const TString &columns="*", bool distinct=false, const TString &anything_else="") const
Definition: SQLiteDB.cpp:943
void insert_data_row()
Definition: SQLiteDB.cpp:529
void get_name_value_list_for_each_row(const TString &table, std::function< bool(const KVNameValueList &)> callback, const TString &selection="", const TString &anything_else="")
Definition: SQLiteDB.cpp:1078
void end_data_insertion()
Definition: SQLiteDB.cpp:616
bool get_next_result() const
Definition: SQLiteDB.cpp:959
bool prepare_data_insertion(const TString &)
Definition: SQLiteDB.cpp:303
Manage database of simulations ,.
std::optional< model_id > GetModelId(const TString &, const KVNameValueList &) const
std::map< int, std::unique_ptr< KVDataRepository > > fRepos
KVSQLite::database fDB
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 &params) 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
KVSimDataManager()=default
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={})
void OpenDataBase(const TString &)
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 &params)
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 &params, 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 file containing simulated and/or filtered simulated data ,.
Definition: KVSimFile.h:20
TLine l