KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVDataSet.h
Go to the documentation of this file.
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 "KVList.h"
14 #include "KVNumberList.h"
15 #include "TDatime.h"
16 #include "TFile.h"
17 #include "TEnv.h"
18 #include "TSystem.h"
19 #include "KVDataAnalysisTask.h"
20 #include "KVExpDB.h"
21 
22 class KVDataSetManager;
23 class KVDataRepository;
24 class KVDBSystem;
25 class TObjArray;
26 class KVDBRun;
28 
207 class KVDataSet: public KVBase {
208 
209  friend class KVAvailableRunsFile;
210  friend class KVDataSetManager;
211 
212 protected:
218  mutable unique_ptr<TFile> fDBase;
221  mutable KVExpDB* fDataBase;
223  enum {
224  kAvailable = BIT(14) //flag set if this dataset is physically present on local machine
225  };
227 
228  virtual const Char_t* GetBaseFileName(const Char_t* type, Int_t run) const;
229 
230  virtual void OpenDataBase(Option_t* opt = "") const;
231  virtual void OpenDBFile(const Char_t* full_path_to_dbfile) const;
232  virtual void WriteDBFile(const Char_t* full_path_to_dbfile) const;
233  void SetDBFileName(const Char_t* name)
234  {
235  fDBFileName = name;
236  }
237  const Char_t* GetDBFileName() const;
238  void SetDBName(const Char_t* name)
239  {
240  fDBName = name;
241  }
242  const Char_t* GetDBName() const;
243  const Char_t* GetFullPathToDB() const;
245  TObject* open_runfile(const Char_t* type, Int_t run);
246 
247 public:
248 
249  KVAvailableRunsFile* GetAvailableRunsFile(const Char_t* type) const;
250 
251  KVDataSet();
252  virtual ~ KVDataSet() {}
253 
254  virtual Bool_t CheckUserCanAccess();
255 
256  virtual void SetDataPathSubdir(const Char_t* s)
257  {
258  SetLabel(s);
259  }
261  virtual const Char_t* GetDataPathSubdir() const
262  {
263  return GetLabel();
264  }
265  const Char_t* GetDataTypeSubdir(const Char_t* type) const
266  {
268  KVString snom;
269  snom.Form("KVDataSet.DataType.Subdir.%s", type);
270  return GetDataSetEnv(snom.Data(), type);
271  }
272  virtual const Char_t* GetAvailableDataTypes() const
273  {
274  return fDatatypes.Data();
275  }
276  virtual void AddAvailableDataType(const Char_t*);
277  virtual void SetUserGroups(const Char_t* groups)
278  {
279  fUserGroups = groups;
280  }
282  virtual Bool_t IsAvailable() const
283  {
284  return TestBit(kAvailable);
285  }
286  virtual void SetAvailable(Bool_t yes = kTRUE)
287  {
288  SetBit(kAvailable, yes);
289  }
290  virtual void CheckAvailable();
291 
292  virtual Bool_t HasDataType(const Char_t* data_type) const
293  {
296 
297  KVString _dt = data_type;
298  _dt.Remove(TString::kBoth, ' ');
299  return (_dt == "*" || fDatatypes.Contains(_dt));
300  }
301 
302  virtual void ls(Option_t* opt = "") const;
303  virtual void Print(Option_t* opt = "") const;
304 
305  virtual void SetAnalysisTasks(const KVSeqCollection*);
306  virtual KVDataAnalysisTask* GetAnalysisTask(Int_t) const;
307  virtual KVDataAnalysisTask* GetAnalysisTask(const Char_t* keywords) const;
308  virtual std::unique_ptr<KVDataAnalysisTask> GetAnalysisTaskAny(const Char_t* keywords) const;
309  virtual Int_t GetNtasks() const;
310 
311  virtual TList* GetListOfAvailableSystems(const Char_t* datatype,
312  KVDBSystem* systol = 0);
314  KVDBSystem* systol = 0);
315 
316  void cd() const;
317 
318  const Char_t* GetDataSetDir() const;
319  void SetName(const char* name);
320 
321 
322  KVExpDB* GetDataBase(Option_t* opt = "") const;
323  virtual void SaveDataBase() const;
324 
325  const Char_t* GetDataSetEnv(const Char_t* type, const Char_t* defval = "") const;
326  Double_t GetDataSetEnv(const Char_t* type, Double_t defval) const;
327  Bool_t GetDataSetEnv(const Char_t* type, Bool_t defval) const;
328 
329  TString GetFullPathToRunfile(const Char_t* type, Int_t run) const;
330  const Char_t* GetRunfileName(const Char_t* type, Int_t run) const;
331  TDatime GetRunfileDate(const Char_t* type, Int_t run);
332  template <typename FileType>
333  FileType* OpenRunfile(const Char_t* type, Int_t run)
334  {
335  return dynamic_cast<FileType*>(open_runfile(type, run));
336  }
337  TObject* OpenRunfile(const Char_t* type, Int_t run)
338  {
339  return open_runfile(type, run);
340  }
341 
342  Bool_t CheckRunfileAvailable(const Char_t* type, Int_t run);
343  void UpdateAvailableRuns(const Char_t* type);
344  TFile* NewRunfile(const Char_t* type, Int_t run);
345  void CommitRunfile(const Char_t* type, Int_t run, TFile* file);
346 
347  void CopyRunfilesFromRepository(const Char_t* type, KVNumberList runs, const Char_t* destdir);
348 
349  void DeleteRunfile(const Char_t* type, Int_t run, Bool_t confirm = kTRUE);
350  void DeleteRunfiles(const Char_t* type, KVNumberList lrun = "", Bool_t confirm = kTRUE);
351  KVNumberList GetRunList_DateSelection(const Char_t* type, TDatime* min = 0, TDatime* max = 0);
352  KVNumberList GetRunList_StageSelection(const Char_t* other_type, const Char_t* base_type, KVDBSystem* sys = 0, Bool_t OnlyCol = kFALSE);
353  KVNumberList GetRunList_VersionSelection(const Char_t* type, const Char_t* version, KVDBSystem* sys = 0);
356 
357  void CheckMultiRunfiles(const Char_t* data_type);
358  void CleanMultiRunfiles(const Char_t* data_type, Bool_t confirm = kTRUE);
359 
360  Bool_t CheckRunfileUpToDate(const Char_t* data_type, Int_t run,
361  KVDataRepository* other_repos);
362  Bool_t CheckRunfileUpToDate(const Char_t* data_type, Int_t run,
363  const Char_t* other_repos);
364  void CheckUpToDate(const Char_t* data_type,
365  const Char_t* other_repos);
366  KVNumberList GetUpdatableRuns(const Char_t* data_type,
367  const Char_t* other_repos);
368 
369  KVNumberList GetRunList(const Char_t* data_type,
370  const KVDBSystem* sys = 0) const;
371 
372  virtual void MakeAnalysisClass(const Char_t* task, const Char_t* classname);
373 
374  Bool_t OpenDataSetFile(const Char_t* filename, std::ifstream& file);
375  static Bool_t OpenDataSetFile(const TString& dataset, const Char_t* filename, std::ifstream& file);
376  TString GetFullPathToDataSetFile(const Char_t* filename);
377  static TString GetFullPathToDataSetFile(const TString& dataset, const Char_t* filename);
378  static Bool_t FindDataSetFile(const TString& dataset, const Char_t* filename);
379  Bool_t FindDataSetFile(const Char_t* filename);
380 
381  virtual Bool_t DataBaseNeedsUpdate() const;
382 
383  virtual const Char_t* GetReconstructedEventClassName() const
384  {
389 
390  return GetDataSetEnv("ReconstructedEventClassName", "KVReconstructedEvent");
391  }
392 
393  TString GetOutputRepository(const Char_t* taskname) const;
394  void CopyRunfilesToRepository(const Char_t* type, KVNumberList runs, const Char_t* destrepo);
395 
397  {
402  return GetDataSetEnv("HasCalibIdentInfos", kTRUE);
403  }
404 
405  ClassDef(KVDataSet, 2) //Describes a set of experimental data which may be analysed with KaliVeda
406 };
407 
410 
411 #endif
int Int_t
#define R__EXTERN
R__EXTERN KVDataSet * gDataSet
........ global variable
Definition: KVDataSet.h:409
char Char_t
bool Bool_t
double Double_t
const Bool_t kTRUE
const char Option_t
#define ClassDef(name, id)
#define BIT(n)
int type
Handles lists of available runs for different datasets and types of data.
Base class for KaliVeda framework.
Definition: KVBase.h:135
void SetLabel(const Char_t *lab)
Definition: KVBase.h:188
const Char_t * GetLabel() const
Definition: KVBase.h:192
Description of an experimental run in database ,.
Definition: KVDBRun.h:35
Database class used to store information on different colliding systems studied during an experiment.
Definition: KVDBSystem.h:51
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:207
virtual ~ KVDataSet()
Definition: KVDataSet.h:252
virtual void SetUserGroups(const Char_t *groups)
Definition: KVDataSet.h:277
TString fUserGroups
list of user groups allowed to read data
Definition: KVDataSet.h:226
TString GetOutputRepository(const Char_t *taskname) const
Definition: KVDataSet.cpp:2057
virtual void OpenDBFile(const Char_t *full_path_to_dbfile) const
Open the database from a file on disk.
Definition: KVDataSet.cpp:104
KVExpDB * fDataBase
pointer to dataset's database
Definition: KVDataSet.h:221
KVNumberList GetRunList_VersionSelection(const Char_t *type, const Char_t *version, KVDBSystem *sys=0)
Definition: KVDataSet.cpp:1270
void CheckMultiRunfiles(const Char_t *data_type)
Definition: KVDataSet.cpp:1412
KVNumberList GetRunList_StageSelection(const Char_t *other_type, const Char_t *base_type, KVDBSystem *sys=0, Bool_t OnlyCol=kFALSE)
Definition: KVDataSet.cpp:1213
void CheckUpToDate(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1604
TString fDBName
name of database
Definition: KVDataSet.h:219
virtual void SetDataPathSubdir(const Char_t *s)
Definition: KVDataSet.h:256
void SetDBFileName(const Char_t *name)
Definition: KVDataSet.h:233
virtual const Char_t * GetAvailableDataTypes() const
Definition: KVDataSet.h:272
const Char_t * GetDBName() const
Definition: KVDataSet.cpp:88
KVDataRepository * GetRepository() const
Get pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1398
void CopyRunfilesToRepository(const Char_t *type, KVNumberList runs, const Char_t *destrepo)
Definition: KVDataSet.cpp:2112
@ kAvailable
Definition: KVDataSet.h:224
const Char_t * GetDBFileName() const
Definition: KVDataSet.cpp:71
const Char_t * GetDataSetDir() const
Definition: KVDataSet.cpp:719
void DeleteRunfiles(const Char_t *type, KVNumberList lrun="", Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1126
KVNumberList GetUpdatableRuns(const Char_t *data_type, const Char_t *other_repos)
Definition: KVDataSet.cpp:1652
virtual void ls(Option_t *opt="") const
Print dataset information.
Definition: KVDataSet.cpp:398
KVList fTasks
possible data analysis tasks for this dataset
Definition: KVDataSet.h:215
void DeleteRunfile(const Char_t *type, Int_t run, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1082
KVAvailableRunsFile * GetAvailableRunsFile(const Char_t *type) const
Definition: KVDataSet.cpp:49
virtual void AddAvailableDataType(const Char_t *)
Definition: KVDataSet.cpp:527
virtual TList * GetListOfAvailableSystems(const Char_t *datatype, KVDBSystem *systol=0)
Definition: KVDataSet.cpp:613
Bool_t CheckRunfileUpToDate(const Char_t *data_type, Int_t run, KVDataRepository *other_repos)
Definition: KVDataSet.cpp:1545
FileType * OpenRunfile(const Char_t *type, Int_t run)
Definition: KVDataSet.h:333
void SetName(const char *name)
Definition: KVDataSet.cpp:687
unique_ptr< TFile > fDBase
file containing database
Definition: KVDataSet.h:218
virtual KVDataAnalysisTask * GetAnalysisTask(Int_t) const
Definition: KVDataSet.cpp:588
virtual const Char_t * GetBaseFileName(const Char_t *type, Int_t run) const
Definition: KVDataSet.cpp:1003
virtual void SaveDataBase() const
Definition: KVDataSet.cpp:191
KVList fAvailableRuns
list of KVAvailableRunsFile objects used to read infos on available runs
Definition: KVDataSet.h:222
virtual void SetAnalysisTasks(const KVSeqCollection *)
Definition: KVDataSet.cpp:542
KVNumberList GetRunList_DateSelection(const Char_t *type, TDatime *min=0, TDatime *max=0)
Definition: KVDataSet.cpp:1155
Bool_t HasCalibIdentInfos() const
Definition: KVDataSet.h:396
virtual void CheckAvailable()
Definition: KVDataSet.cpp:470
const Char_t * GetRunfileName(const Char_t *type, Int_t run) const
Definition: KVDataSet.cpp:913
TDatime GetRunfileDate(const Char_t *type, Int_t run)
Definition: KVDataSet.cpp:941
const Char_t * GetDataSetEnv(const Char_t *type, const Char_t *defval="") const
Definition: KVDataSet.cpp:757
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:261
virtual Bool_t HasDataType(const Char_t *data_type) const
Definition: KVDataSet.h:292
virtual Int_t GetNtasks() const
Definition: KVDataSet.cpp:573
KVNumberList GetRunList(const Char_t *data_type, const KVDBSystem *sys=0) const
Definition: KVDataSet.cpp:1689
TString GetFullPathToDataSetFile(const Char_t *filename)
Definition: KVDataSet.cpp:1886
TString GetFullPathToRunfile(const Char_t *type, Int_t run) const
Definition: KVDataSet.cpp:887
TString fDBFileName
name of file in which database is stored on disk
Definition: KVDataSet.h:220
void CopyRunfilesFromRepository(const Char_t *type, KVNumberList runs, const Char_t *destdir)
Definition: KVDataSet.cpp:2088
void UpdateAvailableRuns(const Char_t *type)
Definition: KVDataSet.cpp:1035
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:282
virtual void MakeAnalysisClass(const Char_t *task, const Char_t *classname)
Definition: KVDataSet.cpp:1790
TObject * open_runfile(const Char_t *type, Int_t run)
Definition: KVDataSet.cpp:832
void CommitRunfile(const Char_t *type, Int_t run, TFile *file)
Definition: KVDataSet.cpp:1311
KVExpDB * GetDataBase(Option_t *opt="") const
Definition: KVDataSet.cpp:286
virtual Bool_t DataBaseNeedsUpdate() const
Definition: KVDataSet.cpp:1993
Bool_t OpenDataSetFile(const Char_t *filename, std::ifstream &file)
Definition: KVDataSet.cpp:1849
void SetDataSetSpecificTaskParameters(KVDataAnalysisTask *) const
Definition: KVDataSet.cpp:158
TString fDatatypes
list of types of data which are available for this dataset
Definition: KVDataSet.h:214
virtual void SetAvailable(Bool_t yes=kTRUE)
Definition: KVDataSet.h:286
void cd() const
Definition: KVDataSet.cpp:735
virtual void WriteDBFile(const Char_t *full_path_to_dbfile) const
Definition: KVDataSet.cpp:252
const Char_t * GetFullPathToDB() const
Returns full path to file where database is written on disk.
Definition: KVDataSet.cpp:130
TFile * NewRunfile(const Char_t *type, Int_t run)
Definition: KVDataSet.cpp:1057
virtual Bool_t CheckUserCanAccess()
Definition: KVDataSet.cpp:1355
Bool_t fDBBuild
has the database been built by us ?
Definition: KVDataSet.h:217
KVDataRepository * fRepository
repository in which dataset is stored
Definition: KVDataSet.h:213
const Char_t * GetDataTypeSubdir(const Char_t *type) const
Definition: KVDataSet.h:265
void SetRepository(KVDataRepository *)
Set pointer to data repository in which dataset is stored.
Definition: KVDataSet.cpp:1386
virtual const Char_t * GetReconstructedEventClassName() const
Definition: KVDataSet.h:383
KVDataSet()
Default constructor.
Definition: KVDataSet.cpp:36
TObject * OpenRunfile(const Char_t *type, Int_t run)
Definition: KVDataSet.h:337
void SetDBName(const Char_t *name)
Definition: KVDataSet.h:238
virtual std::unique_ptr< KVDataAnalysisTask > GetAnalysisTaskAny(const Char_t *keywords) const
Definition: KVDataSet.cpp:1955
void CleanMultiRunfiles(const Char_t *data_type, Bool_t confirm=kTRUE)
Definition: KVDataSet.cpp:1462
virtual void OpenDataBase(Option_t *opt="") const
Definition: KVDataSet.cpp:332
TString fCalibDir
directory containing database, calibration, identification parameters etc. for dataset
Definition: KVDataSet.h:216
virtual void Print(Option_t *opt="") const
Definition: KVDataSet.cpp:419
static Bool_t FindDataSetFile(const TString &dataset, const Char_t *filename)
Definition: KVDataSet.cpp:1920
Bool_t CheckRunfileAvailable(const Char_t *type, Int_t run)
Definition: KVDataSet.cpp:975
Base class to describe database of an experiment ,.
Definition: KVExpDB.h:18
Extended TList class which owns its objects by default.
Definition: KVList.h:27
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
KaliVeda extensions to ROOT collection classes.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:72
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
const long double s
Definition: KVUnits.h:94