KaliVeda
Toolkit for HIC analysis
KVDataSet.h
1 /*
2 $Id: KVDataSet.h,v 1.26 2009/01/27 08:06:56 franklan Exp $
3 $Revision: 1.26 $
4 $Date: 2009/01/27 08:06:56 $
5 $Author: franklan $
6 */
7 
8 #ifndef __KVDATASET_H
9 #define __KVDATASET_H
10 
11 #include "KVString.h"
12 #include "KVBase.h"
13 #include "KVUniqueNameList.h"
14 #include "KVNumberList.h"
15 #include "TDatime.h"
16 #include "TFile.h"
17 #include "KVDataAnalysisTask.h"
18 #include "KVExpDB.h"
19 #include "run_index.h"
20 
21 class KVDataSetManager;
22 class KVDBSystem;
23 class TObjArray;
24 class KVDBRun;
27 
146 class KVDataSet: public KVBase {
147 
148  friend class KVAvailableRunsFile;
149  friend class KVDataSetManager;
150 
151  bool make_analysis_class(const KVDataAnalysisTask*, const Char_t* classname);
152 
153  TObject* file_opener(const TString&, const TString&, Option_t* = "");
154 
161  mutable std::unique_ptr<TFile> fDBase;
163  mutable KVExpDB* fDataBase = nullptr; //pointer to dataset's database
165  enum {
166  kAvailable = BIT(14) //flag set if this dataset is physically present on local machine
167  };
169 
170  virtual const Char_t* GetBaseFileName(const Char_t* type, const run_index_t& run) const;
171 
172  void OpenDataBase(const TString& = "") const;
173  void OpenDBFile(const Char_t* full_path_to_dbfile) const;
174  void WriteDBFile(const Char_t* full_path_to_dbfile) const;
175  TString GetDBFileName() const;
176  void SetDBName(const Char_t* name)
177  {
178  fDBName = name;
179  }
180  TString GetDBName() const;
181  TString GetFullPathToDB() const;
183  TObject* open_runfile(const KVString& type, const run_index_t& run);
184 
186 public:
188  {
190  }
191 
193 
194  KVDataSet();
195 
196  void SetDataPathSubdir(const TString& s)
197  {
198  SetLabel(s);
199  }
201  {
203  return GetLabel();
204  }
205  KVString GetDataTypeSubdir(const TString& type) const
206  {
208  if (type.IsNull())
209  return type;
210  KVString snom;
211  snom.Form("KVDataSet.DataType.Subdir.%s", type.Data());
212  return GetDataSetEnv(snom.Data(), type);
213  }
215  {
217  return fDatatypes.Data();
218  }
219  void AddAvailableDataType(const Char_t*);
220  void SetUserGroups(const Char_t* groups)
221  {
222  fUserGroups = groups;
223  }
225  {
227  return TestBit(kAvailable);
228  }
229  void SetAvailable(Bool_t yes = kTRUE)
230  {
231  SetBit(kAvailable, yes);
232  }
233  void CheckAvailable();
234 
235  Bool_t HasDataType(const Char_t* data_type) const
236  {
239 
240  KVString _dt = data_type;
241  _dt.Remove(TString::kBoth, ' ');
242  return (_dt == "*" || fDatatypes.Contains(_dt));
243  }
244 
245  void ls(Option_t* opt = "") const override;
246  void Print(Option_t* opt = "") const override;
247 
248  void SetAnalysisTasks(const KVSeqCollection*);
250  KVDataAnalysisTask* GetAnalysisTask(const Char_t* keywords) const;
251  KVDataAnalysisTask* GetAnalysisTaskAny(const Char_t* keywords) const;
252  Int_t GetNtasks() const;
253 
258  KVUniqueNameList GetSystemsForRunFiles(const TString& datatype, const run_index_list&) const;
259 
260  void cd() const;
261 
262  const Char_t* GetDataSetDir() const;
263  void SetName(const char* name) override;
264 
265 
266  KVExpDB* GetDataBase(const TString& opt = "") const;
267  void SaveDataBase() const;
268 
269  template<typename ValType>
270  ValType GetDataSetEnv(const Char_t* type, const ValType& defval) const
271  {
276 
277  return KVBase::GetDataSetEnv(GetName(), type, defval);
278  }
279  KVString GetDataSetEnv(const Char_t* type, const Char_t* defval = "") const
280  {
285  return GetDataSetEnv(type, KVString(defval));
286  }
287  KVString GetDataSetEnv(const Char_t* type, Char_t* defval) const
288  {
293  return GetDataSetEnv(type, KVString(defval));
294  }
295 
296  TString GetFullPathToRunfile(const KVString& type, const run_index_t& run) const;
297  KVString GetRunfileName(const KVString& type, const run_index_t& run) const;
298  std::optional<TDatime> GetRunfileDate(const KVString& type, const run_index_t& run);
299  std::optional<run_index_t> GetRunNumberFromFileName(const TString& datatype, const TString& filename);
300  template <typename FileType>
301  FileType* OpenRunfile(const KVString& type, const run_index_t& run)
302  {
315  return dynamic_cast<FileType*>(open_runfile(type, run));
316  }
317  TObject* OpenRunfile(const KVString& type, const run_index_t& run)
318  {
331  return open_runfile(type, run);
332  }
333 
334  Bool_t CheckRunfileAvailable(const KVString& type, const run_index_t& run);
335  void UpdateAvailableRuns(const KVString& type);
336  TFile* NewRunfile(const KVString& type, const run_index_t& run);
337  void CommitRunfile(const KVString& type, const run_index_t& run, TFile* file);
338 
339  void CopyRunfilesFromRepository(const Char_t* type, const run_index_list& runs, const Char_t* destdir);
340 
341  void DeleteRunfile(const KVString& type, const run_index_t& run, Bool_t confirm = kTRUE);
342  void DeleteRunfiles(const Char_t* type, const run_index_list& lrun = {}, Bool_t confirm = kTRUE);
343  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);
344  run_index_list GetRunList_StageSelection(const TString& other_type, const TString& base_type, KVDBSystem* sys = 0, Bool_t OnlyCol = kFALSE);
345  run_index_list GetRunList_StageSelection(const TString& other_type, const TString& base_type, const KVUnownedList& systems, Bool_t OnlyCol = kFALSE);
346  run_index_list GetRunList_VersionSelection(const TString& type, const TString& version, KVDBSystem* sys = 0);
349 
350  void CheckMultiRunfiles(const Char_t* data_type);
351  void CleanMultiRunfiles(const Char_t* data_type, Bool_t confirm = kTRUE);
352  void CleanRunfileDataBase(const Char_t* data_type);
353 
354  Bool_t CheckRunfileUpToDate(const KVString& data_type, const run_index_t& run,
355  KVDataSetRepository* other_repos);
356  Bool_t CheckRunfileUpToDate(const KVString& data_type, const run_index_t& run,
357  const KVString& other_repos);
358  void CheckUpToDate(const Char_t* data_type,
359  const Char_t* other_repos);
360  run_index_list GetUpdatableRuns(const Char_t* data_type,
361  const Char_t* other_repos);
362 
363  run_index_list GetRunList(const Char_t* data_type,
364  const KVDBSystem* sys = 0) const;
365 
366  bool MakeAnalysisClass(const Char_t* task, const Char_t* classname);
367  bool MakeAnalysisClass(int task, const Char_t* classname);
368 
369  Bool_t OpenDataSetFile(const Char_t* filename, std::ifstream& file);
370  static Bool_t OpenDataSetFile(const TString& dataset, const Char_t* filename, std::ifstream& file);
371  TString GetFullPathToDataSetFile(const Char_t* filename) const;
372  static TString GetFullPathToDataSetFile(const TString& dataset, const Char_t* filename);
373  static Bool_t FindDataSetFile(const TString& dataset, const Char_t* filename);
374  Bool_t FindDataSetFile(const Char_t* filename) const;
375 
376  Bool_t DataBaseNeedsUpdate() const;
377 
379  {
390 
391  return GetDataSetEnv("ReconstructedEventClassName", "KVReconstructedEvent");
392  }
393 
394  TString GetOutputRepository(const Char_t* taskname) const;
395  void CopyRunfilesToRepository(const Char_t* type, const run_index_list& runs, const Char_t* destrepo);
396 
398  {
400  return GetDataSetEnv("HasCalibIdentInfos", kTRUE);
401  }
402 
403  ClassDefOverride(KVDataSet, 3) //Describes a set of experimental data which may be analysed with KaliVeda
404 };
405 
407 R__EXTERN KVDataSet* gDataSet;
408 
409 #endif
int Int_t
#define R__EXTERN
bool Bool_t
char Char_t
constexpr Bool_t kTRUE
const char Option_t
#define BIT(n)
#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 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 name[80]
Handles lists of available runs for different datasets and types of data.
Base class for KaliVeda framework.
Definition: KVBase.h:140
void SetLabel(const Char_t *lab)
Definition: KVBase.h:195
const Char_t * GetLabel() const
Definition: KVBase.h:199
static ValType GetDataSetEnv(const KVString &dataset, const KVString &type, const ValType &defval)
Definition: KVBase.h:306
Description of an experimental run in database ,,.
Definition: KVDBRun.h:41
Database class used to store information on different colliding systems studied during an experiment....
Definition: KVDBSystem.h:51
Define and manage data analysis tasks.
Manage all datasets contained in a given data repository.
A repository for experimental datasets.
Manage an experimental dataset corresponding to a given experiment or campaign.
Definition: KVDataSet.h:146
std::optional< TDatime > GetRunfileDate(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:926
Bool_t HasDataType(const Char_t *data_type) const
Definition: KVDataSet.h:235
TString GetFullPathToRunfile(const KVString &type, const run_index_t &run) const
Definition: KVDataSet.cpp:882
TString GetFullPathToDB() const
Definition: KVDataSet.cpp:153
Bool_t IsAvailable() const
Definition: KVDataSet.h:224
TString fUserGroups
list of user groups allowed to read data
Definition: KVDataSet.h:168
void ls(Option_t *opt="") const override
Print dataset information.
Definition: KVDataSet.cpp:407
TString GetOutputRepository(const Char_t *taskname) const
Definition: KVDataSet.cpp:2308
void OpenDBFile(const Char_t *full_path_to_dbfile) const
Open the database from a file on disk.
Definition: KVDataSet.cpp:127
KVExpDB * fDataBase
Definition: KVDataSet.h:163
void SetRepository(KVDataSetRepository *)
Set pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1471
TString GetDBName() const
Definition: KVDataSet.cpp:112
void CheckMultiRunfiles(const Char_t *data_type)
Definition: KVDataSet.cpp:1497
Bool_t CheckRunfileAvailable(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:1023
virtual const Char_t * GetBaseFileName(const Char_t *type, const run_index_t &run) const
Definition: KVDataSet.cpp:1056
void CleanRunfileDataBase(const Char_t *data_type)
Definition: KVDataSet.cpp:1614
void CheckUpToDate(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1715
TString fDBName
name of database
Definition: KVDataSet.h:162
run_index_list GetRunList(const Char_t *data_type, const KVDBSystem *sys=0) const
Definition: KVDataSet.cpp:1792
void OpenDataBase(const TString &="") const
Definition: KVDataSet.cpp:319
TString GetFullPathToDataSetFile(const Char_t *filename) const
Definition: KVDataSet.cpp:2146
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".
Definition: KVDataSet.cpp:2338
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)
Definition: KVDataSet.cpp:1232
const Char_t * GetDataSetDir() const
Definition: KVDataSet.cpp:753
Bool_t fDataBaseUpdateInProgress
Definition: KVDataSet.h:185
void CommitRunfile(const KVString &type, const run_index_t &run, TFile *file)
Definition: KVDataSet.cpp:1430
void AddAvailableDataType(const Char_t *)
Definition: KVDataSet.cpp:515
KVUniqueNameList GetSystemsForRunFiles(const TString &datatype, const run_index_list &) const
Definition: KVDataSet.cpp:680
KVString GetDataSetEnv(const Char_t *type, Char_t *defval) const
Definition: KVDataSet.h:287
KVString GetReconstructedEventClassName() const
Definition: KVDataSet.h:378
TObject * OpenRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.h:317
bool make_analysis_class(const KVDataAnalysisTask *, const Char_t *classname)
Definition: KVDataSet.cpp:1883
void SetUserGroups(const Char_t *groups)
Definition: KVDataSet.h:220
KVDataAnalysisTask * GetAnalysisTask(Int_t) const
Definition: KVDataSet.cpp:581
KVAvailableRunsFile * GetAvailableRunsFile(const TString &type) const
Definition: KVDataSet.cpp:49
void SaveDataBase() const
Definition: KVDataSet.cpp:203
KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
Definition: KVDataSet.cpp:2216
KVList fAvailableRuns
list of KVAvailableRunsFile objects used to read infos on available runs
Definition: KVDataSet.h:164
@ kAvailable
Definition: KVDataSet.h:166
void SetAnalysisTasks(const KVSeqCollection *)
Definition: KVDataSet.cpp:532
ValType GetDataSetEnv(const Char_t *type, const ValType &defval) const
Definition: KVDataSet.h:270
TFile * NewRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:1129
KVList GetListOfAvailableRunFilesForSystem(const TString &datatype, KVDBSystem *systol)
Definition: KVDataSet.cpp:636
Bool_t HasCalibIdentInfos() const
Definition: KVDataSet.h:397
void CheckAvailable()
Definition: KVDataSet.cpp:473
void DeleteRunfile(const KVString &type, const run_index_t &run, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1154
const Char_t * GetAvailableDataTypes() const
Definition: KVDataSet.h:214
Int_t GetNtasks() const
Definition: KVDataSet.cpp:566
std::unique_ptr< TFile > fDBase
file containing database
Definition: KVDataSet.h:161
KVString GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
Definition: KVDataSet.h:279
TObject * file_opener(const TString &, const TString &, Option_t *="")
Definition: KVDataSet.cpp:1953
KVString GetDataPathSubdir() const
Definition: KVDataSet.h:200
run_index_list GetRunList_VersionSelection(const TString &type, const TString &version, KVDBSystem *sys=0)
Definition: KVDataSet.cpp:1388
KVDataSetRepository * fRepository
Definition: KVDataSet.h:155
KVExpDB * GetDataBase(const TString &opt="") const
Definition: KVDataSet.cpp:288
void SetAvailable(Bool_t yes=kTRUE)
Definition: KVDataSet.h:229
void DeleteRunfiles(const Char_t *type, const run_index_list &lrun={}, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1201
Bool_t CheckRunfileUpToDate(const KVString &data_type, const run_index_t &run, KVDataSetRepository *other_repos)
Definition: KVDataSet.cpp:1656
TObject * open_runfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:825
void CopyRunfilesToRepository(const Char_t *type, const run_index_list &runs, const Char_t *destrepo)
Definition: KVDataSet.cpp:2358
KVDataSetRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1483
KVString GetRunfileName(const KVString &type, const run_index_t &run) const
Definition: KVDataSet.cpp:902
Bool_t DataBaseNeedsUpdate() const
Definition: KVDataSet.cpp:2243
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.
Definition: KVDataSet.cpp:178
TString fDatatypes
repository containing data of this dataset
Definition: KVDataSet.h:156
run_index_list GetRunList_StageSelection(const TString &other_type, const TString &base_type, KVDBSystem *sys=0, Bool_t OnlyCol=kFALSE)
Definition: KVDataSet.cpp:1286
void cd() const
Definition: KVDataSet.cpp:775
void WriteDBFile(const Char_t *full_path_to_dbfile) const
Write the database to disk.
Definition: KVDataSet.cpp:255
void Print(Option_t *opt="") const override
Definition: KVDataSet.cpp:430
void SetName(const char *name) override
Definition: KVDataSet.cpp:715
Bool_t fDBBuild
has the database been built by us ?
Definition: KVDataSet.h:160
void UpdateAvailableRuns(const KVString &type)
Definition: KVDataSet.cpp:1100
run_index_list GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1758
bool MakeAnalysisClass(const Char_t *task, const Char_t *classname)
Definition: KVDataSet.cpp:2049
Bool_t DataBaseUpdateInProgress() const
Definition: KVDataSet.h:187
KVUniqueNameList fAllTasks
all data analysis tasks for this dataset
Definition: KVDataSet.h:157
KVDataSet()
Default constructor.
Definition: KVDataSet.cpp:35
std::optional< run_index_t > GetRunNumberFromFileName(const TString &datatype, const TString &filename)
Definition: KVDataSet.cpp:975
void SetDBName(const Char_t *name)
Definition: KVDataSet.h:176
FileType * OpenRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.h:301
void CleanMultiRunfiles(const Char_t *data_type, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1543
static Bool_t OpenDataSetFile(const TString &dataset, const Char_t *filename, std::ifstream &file)
TString fCalibDir
directory containing database, calibration, identification parameters etc. for dataset
Definition: KVDataSet.h:159
void SetDataPathSubdir(const TString &s)
Definition: KVDataSet.h:196
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
Definition: KVDataSet.cpp:2180
KVString GetDataTypeSubdir(const TString &type) const
Definition: KVDataSet.h:205
KVUnownedList GetListOfAvailableSystems(const TString &datatype)
Definition: KVDataSet.cpp:596
TString GetDBFileName() const
Definition: KVDataSet.cpp:82
KVUniqueNameList fTasks
possible data analysis tasks for this dataset (available data only)
Definition: KVDataSet.h:158
Base class to describe database of an experiment ,,.
Definition: KVExpDB.h:61
Extended TList class which owns its objects by default.
Definition: KVList.h:22
KaliVeda extensions to ROOT collection classes.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
Optimised list in which named objects can only be placed once.
Extended TList class which does not own its objects by default.
Definition: KVUnownedList.h:20
const char * GetName() const override
void SetBit(UInt_t f)
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) 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
List of runfiles specified by run number and file index ,.
Specifies a runfile according to run number and file index ,.
Definition: run_index.h:31