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 KVDataRepository;
23 class KVDBSystem;
24 class TObjArray;
25 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 protected:
160  mutable std::unique_ptr<TFile> fDBase;
162  mutable KVExpDB* fDataBase;
164  enum {
165  kAvailable = BIT(14) //flag set if this dataset is physically present on local machine
166  };
168 
169  virtual const Char_t* GetBaseFileName(const Char_t* type, const run_index_t& run) const;
170 
171  virtual void OpenDataBase(Option_t* opt = "") const;
172  virtual void OpenDBFile(const Char_t* full_path_to_dbfile) const;
173  virtual void WriteDBFile(const Char_t* full_path_to_dbfile) const;
174  TString GetDBFileName() const;
175  void SetDBName(const Char_t* name)
176  {
177  fDBName = name;
178  }
179  TString GetDBName() const;
180  TString GetFullPathToDB() const;
182  TObject* open_runfile(const KVString& type, const run_index_t& run);
183 
185 public:
187  {
189  }
190 
191  KVAvailableRunsFile* GetAvailableRunsFile(const Char_t* type) const;
192 
193  KVDataSet();
194 
195  virtual Bool_t CheckUserCanAccess();
196 
197  virtual void SetDataPathSubdir(const Char_t* s)
198  {
199  SetLabel(s);
200  }
201  virtual const Char_t* GetDataPathSubdir() const
202  {
204  return GetLabel();
205  }
206  KVString GetDataTypeSubdir(const Char_t* type) const
207  {
209  KVString snom;
210  snom.Form("KVDataSet.DataType.Subdir.%s", type);
211  return GetDataSetEnv(snom.Data(), type);
212  }
213  virtual const Char_t* GetAvailableDataTypes() const
214  {
216  return fDatatypes.Data();
217  }
218  virtual void AddAvailableDataType(const Char_t*);
219  virtual void SetUserGroups(const Char_t* groups)
220  {
221  fUserGroups = groups;
222  }
223  virtual Bool_t IsAvailable() const
224  {
226  return TestBit(kAvailable);
227  }
228  virtual void SetAvailable(Bool_t yes = kTRUE)
229  {
230  SetBit(kAvailable, yes);
231  }
232  virtual void CheckAvailable();
233 
234  virtual Bool_t HasDataType(const Char_t* data_type) const
235  {
238 
239  KVString _dt = data_type;
240  _dt.Remove(TString::kBoth, ' ');
241  return (_dt == "*" || fDatatypes.Contains(_dt));
242  }
243 
244  void ls(Option_t* opt = "") const override;
245  void Print(Option_t* opt = "") const override;
246 
247  virtual void SetAnalysisTasks(const KVSeqCollection*);
249  KVDataAnalysisTask* GetAnalysisTask(const Char_t* keywords) const;
250  virtual KVDataAnalysisTask* GetAnalysisTaskAny(const Char_t* keywords) const;
251  virtual Int_t GetNtasks() const;
252 
253  virtual std::unique_ptr<TList> GetListOfAvailableSystems(const Char_t* datatype,
254  KVDBSystem* systol = 0);
255  virtual std::unique_ptr<TList> GetListOfAvailableSystems(KVDataAnalysisTask* datan,
256  KVDBSystem* systol = 0);
257 
258  void cd() const;
259 
260  const Char_t* GetDataSetDir() const;
261  void SetName(const char* name) override;
262 
263 
264  KVExpDB* GetDataBase(Option_t* opt = "") const;
265  virtual void SaveDataBase() const;
266 
267  template<typename ValType>
268  ValType GetDataSetEnv(const Char_t* type, const ValType& defval) const
269  {
274 
275  return KVBase::GetDataSetEnv(GetName(), type, defval);
276  }
277  KVString GetDataSetEnv(const Char_t* type, const Char_t* defval = "") const
278  {
283  return GetDataSetEnv(type, KVString(defval));
284  }
285  KVString GetDataSetEnv(const Char_t* type, Char_t* defval) const
286  {
291  return GetDataSetEnv(type, KVString(defval));
292  }
293 
294  TString GetFullPathToRunfile(const KVString& type, const run_index_t& run) const;
295  KVString GetRunfileName(const KVString& type, const run_index_t& run) const;
296  std::optional<TDatime> GetRunfileDate(const KVString& type, const run_index_t& run);
297  template <typename FileType>
298  FileType* OpenRunfile(const KVString& type, const run_index_t& run)
299  {
312  return dynamic_cast<FileType*>(open_runfile(type, run));
313  }
314  TObject* OpenRunfile(const KVString& type, const run_index_t& run)
315  {
328  return open_runfile(type, run);
329  }
330 
331  Bool_t CheckRunfileAvailable(const KVString& type, const run_index_t& run);
332  void UpdateAvailableRuns(const KVString& type);
333  TFile* NewRunfile(const KVString& type, const run_index_t& run);
334  void CommitRunfile(const KVString& type, const run_index_t& run, TFile* file);
335 
336  void CopyRunfilesFromRepository(const Char_t* type, const run_index_list& runs, const Char_t* destdir);
337 
338  void DeleteRunfile(const KVString& type, const run_index_t& run, Bool_t confirm = kTRUE);
339  void DeleteRunfiles(const Char_t* type, const run_index_list& lrun = {}, Bool_t confirm = kTRUE);
340  run_index_list GetRunList_DateSelection(const Char_t* type, TDatime* min = 0, TDatime* max = 0);
341  run_index_list GetRunList_StageSelection(const Char_t* other_type, const Char_t* base_type, KVDBSystem* sys = 0, Bool_t OnlyCol = kFALSE);
342  run_index_list GetRunList_VersionSelection(const Char_t* type, const Char_t* version, KVDBSystem* sys = 0);
345 
346  void CheckMultiRunfiles(const Char_t* data_type);
347  void CleanMultiRunfiles(const Char_t* data_type, Bool_t confirm = kTRUE);
348 
349  Bool_t CheckRunfileUpToDate(const KVString& data_type, const run_index_t& run,
350  KVDataRepository* other_repos);
351  Bool_t CheckRunfileUpToDate(const KVString& data_type, const run_index_t& run,
352  const KVString& other_repos);
353  void CheckUpToDate(const Char_t* data_type,
354  const Char_t* other_repos);
355  run_index_list GetUpdatableRuns(const Char_t* data_type,
356  const Char_t* other_repos);
357 
358  run_index_list GetRunList(const Char_t* data_type,
359  const KVDBSystem* sys = 0) const;
360 
361  bool MakeAnalysisClass(const Char_t* task, const Char_t* classname);
362  bool MakeAnalysisClass(int task, const Char_t* classname);
363 
364  Bool_t OpenDataSetFile(const Char_t* filename, std::ifstream& file);
365  static Bool_t OpenDataSetFile(const TString& dataset, const Char_t* filename, std::ifstream& file);
366  TString GetFullPathToDataSetFile(const Char_t* filename);
367  static TString GetFullPathToDataSetFile(const TString& dataset, const Char_t* filename);
368  static Bool_t FindDataSetFile(const TString& dataset, const Char_t* filename);
369  Bool_t FindDataSetFile(const Char_t* filename);
370 
371  virtual Bool_t DataBaseNeedsUpdate() const;
372 
374  {
385 
386  return GetDataSetEnv("ReconstructedEventClassName", "KVReconstructedEvent");
387  }
388 
389  TString GetOutputRepository(const Char_t* taskname) const;
390  void CopyRunfilesToRepository(const Char_t* type, const run_index_list& runs, const Char_t* destrepo);
391 
393  {
395  return GetDataSetEnv("HasCalibIdentInfos", kTRUE);
396  }
397 
398  ClassDefOverride(KVDataSet, 3) //Describes a set of experimental data which may be analysed with KaliVeda
399 };
400 
402 R__EXTERN KVDataSet* gDataSet;
403 
404 #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:139
void SetLabel(const Char_t *lab)
Definition: KVBase.h:194
const Char_t * GetLabel() const
Definition: KVBase.h:198
static ValType GetDataSetEnv(const KVString &dataset, const KVString &type, const ValType &defval)
Definition: KVBase.h:304
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:52
Define and manage data analysis tasks.
Base class for managing repositories of experimental data.
Manage all datasets contained in a given data repository.
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:838
TString GetFullPathToRunfile(const KVString &type, const run_index_t &run) const
Definition: KVDataSet.cpp:794
TString GetFullPathToDB() const
Definition: KVDataSet.cpp:153
virtual void SetUserGroups(const Char_t *groups)
Definition: KVDataSet.h:219
TString fUserGroups
list of user groups allowed to read data
Definition: KVDataSet.h:167
void ls(Option_t *opt="") const override
Print dataset information.
Definition: KVDataSet.cpp:377
TString GetOutputRepository(const Char_t *taskname) const
Definition: KVDataSet.cpp:1971
virtual void OpenDBFile(const Char_t *full_path_to_dbfile) const
Open the database from a file on disk.
Definition: KVDataSet.cpp:127
KVExpDB * fDataBase
pointer to dataset's database
Definition: KVDataSet.h:162
run_index_list GetRunList_VersionSelection(const Char_t *type, const Char_t *version, KVDBSystem *sys=0)
Definition: KVDataSet.cpp:1182
TString GetDBName() const
Definition: KVDataSet.cpp:112
void CheckMultiRunfiles(const Char_t *data_type)
Definition: KVDataSet.cpp:1324
Bool_t CheckRunfileAvailable(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:870
virtual const Char_t * GetBaseFileName(const Char_t *type, const run_index_t &run) const
Definition: KVDataSet.cpp:903
void CheckUpToDate(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1498
TString fDBName
name of database
Definition: KVDataSet.h:161
virtual void SetDataPathSubdir(const Char_t *s)
Definition: KVDataSet.h:197
run_index_list GetRunList(const Char_t *data_type, const KVDBSystem *sys=0) const
Definition: KVDataSet.cpp:1576
virtual const Char_t * GetAvailableDataTypes() const
Definition: KVDataSet.h:213
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:2001
KVDataRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1310
const Char_t * GetDataSetDir() const
Definition: KVDataSet.cpp:670
Bool_t fDataBaseUpdateInProgress
Definition: KVDataSet.h:184
KVAvailableRunsFile * GetAvailableRunsFile(const Char_t *type) const
Definition: KVDataSet.cpp:51
void CommitRunfile(const KVString &type, const run_index_t &run, TFile *file)
Definition: KVDataSet.cpp:1223
virtual void AddAvailableDataType(const Char_t *)
Definition: KVDataSet.cpp:490
KVString GetDataSetEnv(const Char_t *type, Char_t *defval) const
Definition: KVDataSet.h:285
TObject * OpenRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.h:314
bool make_analysis_class(const KVDataAnalysisTask *, const Char_t *classname)
Definition: KVDataSet.cpp:1667
KVDataAnalysisTask * GetAnalysisTask(Int_t) const
Definition: KVDataSet.cpp:556
virtual void SaveDataBase() const
Definition: KVDataSet.cpp:203
virtual std::unique_ptr< TList > GetListOfAvailableSystems(const Char_t *datatype, KVDBSystem *systol=0)
Definition: KVDataSet.cpp:573
virtual KVString GetReconstructedEventClassName() const
Definition: KVDataSet.h:373
virtual KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
Definition: KVDataSet.cpp:1881
run_index_list GetRunList_DateSelection(const Char_t *type, TDatime *min=0, TDatime *max=0)
Definition: KVDataSet.cpp:1066
KVList fAvailableRuns
list of KVAvailableRunsFile objects used to read infos on available runs
Definition: KVDataSet.h:163
@ kAvailable
Definition: KVDataSet.h:165
virtual void SetAnalysisTasks(const KVSeqCollection *)
Definition: KVDataSet.cpp:507
ValType GetDataSetEnv(const Char_t *type, const ValType &defval) const
Definition: KVDataSet.h:268
TFile * NewRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:963
Bool_t CheckRunfileUpToDate(const KVString &data_type, const run_index_t &run, KVDataRepository *other_repos)
Definition: KVDataSet.cpp:1439
Bool_t HasCalibIdentInfos() const
Definition: KVDataSet.h:392
virtual void CheckAvailable()
Definition: KVDataSet.cpp:443
void DeleteRunfile(const KVString &type, const run_index_t &run, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:988
KVString GetDataTypeSubdir(const Char_t *type) const
Definition: KVDataSet.h:206
virtual const Char_t * GetDataPathSubdir() const
Definition: KVDataSet.h:201
virtual Bool_t HasDataType(const Char_t *data_type) const
Definition: KVDataSet.h:234
virtual Int_t GetNtasks() const
Definition: KVDataSet.cpp:541
std::unique_ptr< TFile > fDBase
file containing database
Definition: KVDataSet.h:160
KVString GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
Definition: KVDataSet.h:277
run_index_list GetRunList_StageSelection(const Char_t *other_type, const Char_t *base_type, KVDBSystem *sys=0, Bool_t OnlyCol=kFALSE)
Definition: KVDataSet.cpp:1128
TString GetFullPathToDataSetFile(const Char_t *filename)
Definition: KVDataSet.cpp:1811
virtual Bool_t IsAvailable() const
Definition: KVDataSet.h:223
void DeleteRunfiles(const Char_t *type, const run_index_list &lrun={}, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1035
TObject * open_runfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:742
void CopyRunfilesToRepository(const Char_t *type, const run_index_list &runs, const Char_t *destrepo)
Definition: KVDataSet.cpp:2021
KVString GetRunfileName(const KVString &type, const run_index_t &run) const
Definition: KVDataSet.cpp:814
KVExpDB * GetDataBase(Option_t *opt="") const
Definition: KVDataSet.cpp:285
virtual Bool_t DataBaseNeedsUpdate() const
Definition: KVDataSet.cpp:1907
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
list of types of data which are available for this dataset
Definition: KVDataSet.h:155
virtual void SetAvailable(Bool_t yes=kTRUE)
Definition: KVDataSet.h:228
void cd() const
Definition: KVDataSet.cpp:692
virtual 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:400
void SetName(const char *name) override
Definition: KVDataSet.cpp:632
virtual Bool_t CheckUserCanAccess()
Definition: KVDataSet.cpp:1267
Bool_t fDBBuild
has the database been built by us ?
Definition: KVDataSet.h:159
KVDataRepository * fRepository
repository in which dataset is stored
Definition: KVDataSet.h:154
void UpdateAvailableRuns(const KVString &type)
Definition: KVDataSet.cpp:941
run_index_list GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1541
void SetRepository(KVDataRepository *)
Set pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1298
bool MakeAnalysisClass(const Char_t *task, const Char_t *classname)
Definition: KVDataSet.cpp:1714
Bool_t DataBaseUpdateInProgress() const
Definition: KVDataSet.h:186
KVUniqueNameList fAllTasks
all data analysis tasks for this dataset
Definition: KVDataSet.h:156
KVDataSet()
Default constructor.
Definition: KVDataSet.cpp:35
void SetDBName(const Char_t *name)
Definition: KVDataSet.h:175
FileType * OpenRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.h:298
void CleanMultiRunfiles(const Char_t *data_type, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1368
virtual void OpenDataBase(Option_t *opt="") const
Definition: KVDataSet.cpp:319
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:158
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
Definition: KVDataSet.cpp:1845
TString GetDBFileName() const
Definition: KVDataSet.cpp:83
KVUniqueNameList fTasks
possible data analysis tasks for this dataset (available data only)
Definition: KVDataSet.h:157
Base class to describe database of an experiment ,,.
Definition: KVExpDB.h:61
Extended TList class which owns its objects by default.
Definition: KVList.h:28
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.
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
Specifies a runfile according to run number and file index ,.
Definition: run_index.h:31