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 
36 class KVDataSet: public KVBase {
37 
38  friend class KVAvailableRunsFile;
39  friend class KVDataSetManager;
40 
41 protected:
48  mutable std::unique_ptr<TFile> fDBase;
50  mutable KVExpDB* fDataBase;
52  enum {
53  kAvailable = BIT(14) //flag set if this dataset is physically present on local machine
54  };
56 
57  virtual const Char_t* GetBaseFileName(const Char_t* type, const run_index_t& run) const;
58 
59  virtual void OpenDataBase(Option_t* opt = "") const;
60  virtual void OpenDBFile(const Char_t* full_path_to_dbfile) const;
61  virtual void WriteDBFile(const Char_t* full_path_to_dbfile) const;
62  TString GetDBFileName() const;
63  void SetDBName(const Char_t* name)
64  {
65  fDBName = name;
66  }
67  TString GetDBName() const;
68  TString GetFullPathToDB() const;
70  TObject* open_runfile(const KVString& type, const run_index_t& run);
71 
73 public:
75  {
77  }
78 
80 
81  KVDataSet();
82  virtual ~ KVDataSet() {}
83 
84  virtual Bool_t CheckUserCanAccess();
85 
86  virtual void SetDataPathSubdir(const Char_t* s)
87  {
88  SetLabel(s);
89  }
91  virtual const Char_t* GetDataPathSubdir() const
92  {
93  return GetLabel();
94  }
95  const Char_t* GetDataTypeSubdir(const Char_t* type) const
96  {
98  KVString snom;
99  snom.Form("KVDataSet.DataType.Subdir.%s", type);
100  return GetDataSetEnv(snom.Data(), type);
101  }
102  virtual const Char_t* GetAvailableDataTypes() const
103  {
104  return fDatatypes.Data();
105  }
106  virtual void AddAvailableDataType(const Char_t*);
107  virtual void SetUserGroups(const Char_t* groups)
108  {
109  fUserGroups = groups;
110  }
112  virtual Bool_t IsAvailable() const
113  {
114  return TestBit(kAvailable);
115  }
116  virtual void SetAvailable(Bool_t yes = kTRUE)
117  {
118  SetBit(kAvailable, yes);
119  }
120  virtual void CheckAvailable();
121 
122  virtual Bool_t HasDataType(const Char_t* data_type) const
123  {
126 
127  KVString _dt = data_type;
128  _dt.Remove(TString::kBoth, ' ');
129  return (_dt == "*" || fDatatypes.Contains(_dt));
130  }
131 
132  void ls(Option_t* opt = "") const override;
133  void Print(Option_t* opt = "") const override;
134 
135  virtual void SetAnalysisTasks(const KVSeqCollection*);
137  KVDataAnalysisTask* GetAnalysisTask(const Char_t* keywords) const;
138  virtual KVDataAnalysisTask* GetAnalysisTaskAny(const Char_t* keywords) const;
139  virtual Int_t GetNtasks() const;
140 
141  virtual std::unique_ptr<TList> GetListOfAvailableSystems(const Char_t* datatype,
142  KVDBSystem* systol = 0);
143  virtual std::unique_ptr<TList> GetListOfAvailableSystems(KVDataAnalysisTask* datan,
144  KVDBSystem* systol = 0);
145 
146  void cd() const;
147 
148  const Char_t* GetDataSetDir() const;
149  void SetName(const char* name) override;
150 
151 
152  KVExpDB* GetDataBase(Option_t* opt = "") const;
153  virtual void SaveDataBase() const;
154 
155  KVString GetDataSetEnv(const Char_t* type, const Char_t* defval = "") const;
156  Double_t GetDataSetEnv(const Char_t* type, Double_t defval) const;
157  Bool_t GetDataSetEnv(const Char_t* type, Bool_t defval) const;
158  Int_t GetDataSetEnv(const Char_t* type, Int_t defval) const;
159 
160  TString GetFullPathToRunfile(const KVString& type, const run_index_t& run) const;
161  KVString GetRunfileName(const KVString& type, const run_index_t& run) const;
162  TDatime GetRunfileDate(const KVString& type, const run_index_t& run);
163  template <typename FileType>
164  FileType* OpenRunfile(const KVString& type, const run_index_t& run)
165  {
166  return dynamic_cast<FileType*>(open_runfile(type, run));
167  }
168  TObject* OpenRunfile(const KVString& type, const run_index_t& run)
169  {
170  return open_runfile(type, run);
171  }
172 
173  Bool_t CheckRunfileAvailable(const KVString& type, const run_index_t& run);
174  void UpdateAvailableRuns(const KVString& type);
175  TFile* NewRunfile(const KVString& type, const run_index_t& run);
176  void CommitRunfile(const KVString& type, const run_index_t& run, TFile* file);
177 
178  void CopyRunfilesFromRepository(const Char_t* type, const run_index_list& runs, const Char_t* destdir);
179 
180  void DeleteRunfile(const KVString& type, const run_index_t& run, Bool_t confirm = kTRUE);
181  void DeleteRunfiles(const Char_t* type, const run_index_list& lrun = {}, Bool_t confirm = kTRUE);
182  run_index_list GetRunList_DateSelection(const Char_t* type, TDatime* min = 0, TDatime* max = 0);
183  run_index_list GetRunList_StageSelection(const Char_t* other_type, const Char_t* base_type, KVDBSystem* sys = 0, Bool_t OnlyCol = kFALSE);
184  run_index_list GetRunList_VersionSelection(const Char_t* type, const Char_t* version, KVDBSystem* sys = 0);
187 
188  void CheckMultiRunfiles(const Char_t* data_type);
189  void CleanMultiRunfiles(const Char_t* data_type, Bool_t confirm = kTRUE);
190 
191  Bool_t CheckRunfileUpToDate(const KVString& data_type, const run_index_t& run,
192  KVDataRepository* other_repos);
193  Bool_t CheckRunfileUpToDate(const KVString& data_type, const run_index_t& run,
194  const KVString& other_repos);
195  void CheckUpToDate(const Char_t* data_type,
196  const Char_t* other_repos);
197  run_index_list GetUpdatableRuns(const Char_t* data_type,
198  const Char_t* other_repos);
199 
200  run_index_list GetRunList(const Char_t* data_type,
201  const KVDBSystem* sys = 0) const;
202 
203  virtual void MakeAnalysisClass(const Char_t* task, const Char_t* classname);
204 
205  Bool_t OpenDataSetFile(const Char_t* filename, std::ifstream& file);
206  static Bool_t OpenDataSetFile(const TString& dataset, const Char_t* filename, std::ifstream& file);
207  TString GetFullPathToDataSetFile(const Char_t* filename);
208  static TString GetFullPathToDataSetFile(const TString& dataset, const Char_t* filename);
209  static Bool_t FindDataSetFile(const TString& dataset, const Char_t* filename);
210  Bool_t FindDataSetFile(const Char_t* filename);
211 
212  virtual Bool_t DataBaseNeedsUpdate() const;
213 
215  {
222 
223  return GetDataSetEnv("ReconstructedEventClassName", "KVReconstructedEvent");
224  }
225 
226  TString GetOutputRepository(const Char_t* taskname) const;
227  void CopyRunfilesToRepository(const Char_t* type, const run_index_list& runs, const Char_t* destrepo);
228 
230  {
235  return GetDataSetEnv("HasCalibIdentInfos", kTRUE);
236  }
237 
238  ClassDefOverride(KVDataSet, 3) //Describes a set of experimental data which may be analysed with KaliVeda
239 };
240 
242 R__EXTERN KVDataSet* gDataSet;
243 
244 #endif
int Int_t
#define R__EXTERN
bool Bool_t
char Char_t
double Double_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
Description of an experimental run in database ,,.
Definition: KVDBRun.h:40
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:36
TString GetFullPathToRunfile(const KVString &type, const run_index_t &run) const
Definition: KVDataSet.cpp:931
TString GetFullPathToDB() const
Returns full path to file where database is written on disk.
Definition: KVDataSet.cpp:150
virtual ~ KVDataSet()
Definition: KVDataSet.h:82
virtual void SetUserGroups(const Char_t *groups)
Definition: KVDataSet.h:107
TString fUserGroups
list of user groups allowed to read data
Definition: KVDataSet.h:55
void ls(Option_t *opt="") const override
Print dataset information.
Definition: KVDataSet.cpp:422
TString GetOutputRepository(const Char_t *taskname) const
Definition: KVDataSet.cpp:2086
virtual void OpenDBFile(const Char_t *full_path_to_dbfile) const
Open the database from a file on disk.
Definition: KVDataSet.cpp:124
KVExpDB * fDataBase
pointer to dataset's database
Definition: KVDataSet.h:50
run_index_list GetRunList_VersionSelection(const Char_t *type, const Char_t *version, KVDBSystem *sys=0)
Definition: KVDataSet.cpp:1331
TString GetDBName() const
Definition: KVDataSet.cpp:110
void CheckMultiRunfiles(const Char_t *data_type)
Definition: KVDataSet.cpp:1473
Bool_t CheckRunfileAvailable(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:1019
virtual const Char_t * GetBaseFileName(const Char_t *type, const run_index_t &run) const
Definition: KVDataSet.cpp:1052
void CheckUpToDate(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1647
TString fDBName
name of database
Definition: KVDataSet.h:49
virtual void SetDataPathSubdir(const Char_t *s)
Definition: KVDataSet.h:86
run_index_list GetRunList(const Char_t *data_type, const KVDBSystem *sys=0) const
Definition: KVDataSet.cpp:1728
virtual const Char_t * GetAvailableDataTypes() const
Definition: KVDataSet.h:102
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:2116
KVDataRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1459
const Char_t * GetDataSetDir() const
Definition: KVDataSet.cpp:746
Bool_t fDataBaseUpdateInProgress
Definition: KVDataSet.h:72
KVAvailableRunsFile * GetAvailableRunsFile(const Char_t *type) const
Definition: KVDataSet.cpp:50
void CommitRunfile(const KVString &type, const run_index_t &run, TFile *file)
Definition: KVDataSet.cpp:1372
TDatime GetRunfileDate(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:985
virtual void AddAvailableDataType(const Char_t *)
Definition: KVDataSet.cpp:551
TObject * OpenRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.h:168
KVDataAnalysisTask * GetAnalysisTask(Int_t) const
Definition: KVDataSet.cpp:617
virtual void SaveDataBase() const
Definition: KVDataSet.cpp:213
virtual std::unique_ptr< TList > GetListOfAvailableSystems(const Char_t *datatype, KVDBSystem *systol=0)
Definition: KVDataSet.cpp:641
virtual KVString GetReconstructedEventClassName() const
Definition: KVDataSet.h:214
virtual KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
Definition: KVDataSet.cpp:1996
run_index_list GetRunList_DateSelection(const Char_t *type, TDatime *min=0, TDatime *max=0)
Definition: KVDataSet.cpp:1215
KVList fAvailableRuns
list of KVAvailableRunsFile objects used to read infos on available runs
Definition: KVDataSet.h:51
@ kAvailable
Definition: KVDataSet.h:53
virtual void SetAnalysisTasks(const KVSeqCollection *)
Definition: KVDataSet.cpp:568
TFile * NewRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:1112
Bool_t CheckRunfileUpToDate(const KVString &data_type, const run_index_t &run, KVDataRepository *other_repos)
Definition: KVDataSet.cpp:1588
Bool_t HasCalibIdentInfos() const
Definition: KVDataSet.h:229
virtual void CheckAvailable()
Definition: KVDataSet.cpp:494
void DeleteRunfile(const KVString &type, const run_index_t &run, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1137
virtual const Char_t * GetDataPathSubdir() const
Returns name of top-level directory in data repository used to store data files for this dataset.
Definition: KVDataSet.h:91
virtual Bool_t HasDataType(const Char_t *data_type) const
Definition: KVDataSet.h:122
virtual Int_t GetNtasks() const
Definition: KVDataSet.cpp:602
std::unique_ptr< TFile > fDBase
file containing database
Definition: KVDataSet.h:48
KVString GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
Definition: KVDataSet.cpp:784
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:1277
TString GetFullPathToDataSetFile(const Char_t *filename)
Definition: KVDataSet.cpp:1926
virtual Bool_t IsAvailable() const
Returns kTRUE if this dataset is available for analysis, i.e. if any associated data files are stored...
Definition: KVDataSet.h:112
virtual void MakeAnalysisClass(const Char_t *task, const Char_t *classname)
Definition: KVDataSet.cpp:1830
void DeleteRunfiles(const Char_t *type, const run_index_list &lrun={}, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1184
TObject * open_runfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.cpp:876
void CopyRunfilesToRepository(const Char_t *type, const run_index_list &runs, const Char_t *destrepo)
Definition: KVDataSet.cpp:2136
KVString GetRunfileName(const KVString &type, const run_index_t &run) const
Definition: KVDataSet.cpp:957
KVExpDB * GetDataBase(Option_t *opt="") const
Definition: KVDataSet.cpp:308
virtual Bool_t DataBaseNeedsUpdate() const
Definition: KVDataSet.cpp:2022
Bool_t OpenDataSetFile(const Char_t *filename, std::ifstream &file)
void SetDataSetSpecificTaskParameters(KVDataAnalysisTask *) const
Definition: KVDataSet.cpp:178
TString fDatatypes
list of types of data which are available for this dataset
Definition: KVDataSet.h:43
virtual void SetAvailable(Bool_t yes=kTRUE)
Definition: KVDataSet.h:116
void cd() const
Definition: KVDataSet.cpp:762
virtual void WriteDBFile(const Char_t *full_path_to_dbfile) const
Definition: KVDataSet.cpp:274
void Print(Option_t *opt="") const override
Definition: KVDataSet.cpp:443
void SetName(const char *name) override
Definition: KVDataSet.cpp:714
virtual Bool_t CheckUserCanAccess()
Definition: KVDataSet.cpp:1416
Bool_t fDBBuild
has the database been built by us ?
Definition: KVDataSet.h:47
KVDataRepository * fRepository
repository in which dataset is stored
Definition: KVDataSet.h:42
void UpdateAvailableRuns(const KVString &type)
Definition: KVDataSet.cpp:1090
const Char_t * GetDataTypeSubdir(const Char_t *type) const
Definition: KVDataSet.h:95
run_index_list GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1693
void SetRepository(KVDataRepository *)
Set pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1447
Bool_t DataBaseUpdateInProgress() const
Definition: KVDataSet.h:74
KVUniqueNameList fAllTasks
all data analysis tasks for this dataset
Definition: KVDataSet.h:44
KVDataSet()
Default constructor.
Definition: KVDataSet.cpp:35
void SetDBName(const Char_t *name)
Definition: KVDataSet.h:63
FileType * OpenRunfile(const KVString &type, const run_index_t &run)
Definition: KVDataSet.h:164
void CleanMultiRunfiles(const Char_t *data_type, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1517
virtual void OpenDataBase(Option_t *opt="") const
Definition: KVDataSet.cpp:354
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:46
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
Definition: KVDataSet.cpp:1960
TString GetDBFileName() const
Definition: KVDataSet.cpp:82
KVUniqueNameList fTasks
possible data analysis tasks for this dataset (available data only)
Definition: KVDataSet.h:45
Base class to describe database of an experiment ,,.
Definition: KVExpDB.h:20
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.
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:33