KaliVeda
Toolkit for HIC analysis
KVDataAnalyser.h
1 /*
2 $Id: KVDataAnalyser.h,v 1.18 2009/04/01 09:28:34 franklan Exp $
3 $Revision: 1.18 $
4 $Date: 2009/04/01 09:28:34 $
5 $Author: franklan $
6 */
7 
8 #ifndef __KVDATAANALYSER_H
9 #define __KVDATAANALYSER_H
10 
11 #include "TObject.h"
12 #include "TTree.h"
13 #include "KVList.h"
14 #include "KVBatchSystem.h"
15 #include "KVString.h"
16 #include "KVNumberList.h"
17 #include "TEnv.h"
18 #include "KV2Body.h"
19 #include "KVDBSystem.h"
20 #include "KVDBRun.h"
21 class KVDataAnalysisTask;
22 
57 class KVDataAnalyser : public TObject {
58 
59 public:
60  struct UserClass {
61  KVString name; // the name of the class
62  KVString imp_file; // the name of the implementation file
63  KVString dec_file; // the name of the header file
64  KVString dir_name = "$(PWD)"; // the name of the directory containing the files
65 
66  /* N.B.: TSystem::ExpandPathName does not expand ".", this is why we use "$(PWD)" */
67 
68  KVString get_full_path(const KVString&, const KVString& = "") const;
69  KVString full_path_imp(const KVString& other_dir = "") const
70  {
71  return get_full_path(imp_file, other_dir);
72  }
73  KVString full_path_dec(const KVString& other_dir = "") const
74  {
75  return get_full_path(dec_file, other_dir);
76  }
78  {
79  return !imp_file.IsNull() && !dec_file.IsNull();
80  }
81  void reset()
82  {
83  name = imp_file = dec_file = "";
84  dir_name = "$(PWD)";
85  }
86  };
87 
88 private:
94 
98 
105 
107 
108  std::unique_ptr<TEnv> fBatchEnv;
111 
115 
117 
118 protected:
120  void ScanWorkingDirectory(TList**);
122 
123  virtual Bool_t CheckIfUserClassIsValid(const KVString& alternative_base_class = "");
124  TObject* GetInstanceOfUserClass(const KVString& alternative_base_class = "");
125 
126  const Char_t* GetACliCMode();
127 
128  void OpenBatchInfoFile(const TString& filename)
129  {
133 
134  if (!fBatchEnv || filename != fBatchEnv->GetRcName()) {
135  fBatchEnv.reset(new TEnv(filename));
136  }
137  }
139  {
140  return fBatchEnv.get();
141  }
143  {
144  return kTRUE;
145  }
146  virtual void PostRunReset();
147  virtual Bool_t NeedToChooseWhatToDo() const
148  {
149  return !GetAnalysisTask();
150  }
152  {
153  AbstractMethod("NeedToChooseWhatToAnalyse");
154  return kTRUE;
155  }
156  virtual void ChooseWhatToAnalyse()
157  {
158  }
159  virtual void ChooseWhatToDo()
160  {
161  }
163 
164  virtual void set_up_analyser_for_task(KVDataAnalyser* the_analyser);
165 
166 public:
167  enum EProofMode {
170  Proof
171  };
172 private:
174 public:
176  {
177  fProofMode = e;
178  }
180  {
181  return fProofMode;
182  }
183 
184  static void SetAbortProcessingLoop(Bool_t now = kTRUE)
185  {
187  fCleanAbort = now;
188  }
190  {
191  return fCleanAbort;
192  }
193 
194  KVDataAnalyser();
195  virtual ~ KVDataAnalyser();
196 
197  void SetUserClass(const UserClass& kvs, Bool_t check = kTRUE);
199  {
200  return fUserClass.name;
201  }
202  const UserClass& GetUserClass() const
203  {
204  return fUserClass;
205  }
207  {
208  return fUserClassIsOK;
209  }
210 
212  {
213  return 0;
214  }
215 
216  virtual void Run();
217  virtual void RunMenus();
218  void ChooseUserClass();
219  void ChooseRunningMode();
220  virtual void SubmitTask();
221  virtual Bool_t CheckTaskVariables();
223 
224  void SetBatchMode(Bool_t on = kTRUE)
225  {
226  fBatch = on;
227  }
229  {
230  return fBatch;
231  }
232  void SetBatchName(const Char_t* batchname)
233  {
234  fBatchName = batchname;
235  }
237  {
238  return fBatchName.Data();
239  }
241  {
242  fBatchSystem = bs;
244  if (bs) fBatchSystem->cd();
245  }
246  virtual const KVBatchSystem* GetBatchSystem()
247  {
248  return fBatchSystem;
249  }
251 
252  const Char_t* GetLaunchDirectory() const;
254  const Char_t* GetBatchStatusFileName() const;
255  void UpdateBatchStatusFile(Int_t totev, Int_t evread, TString disk) const;
256  void DeleteBatchStatusFile() const;
258  {
259  return 0;
260  }
261  virtual Bool_t CheckStatusUpdateInterval(Long64_t nevents) const;
262  void SetStatusUpdateInterval(double t)
263  {
265  }
267  {
268  return fStatusUpdateInterval;
269  }
270 
271  void DoStatusUpdate(Long64_t nevents) const;
272 
274  {
275  return fTask;
276  }
277  const KVString& GetDataType() const
278  {
279  return fDataType;
280  }
281  const KVString& GetUserIncludes() const
282  {
283  return fIncludes;
284  }
285  const KVString& GetUserLibraries() const
286  {
287  return fLibraries;
288  }
289  virtual void SetFileList(TList*)
290  {
291  AbstractMethod("SetFileList(TList*)");
292  }
293  virtual void SetAuxFileList(TList*)
294  {
295  AbstractMethod("SetAuxFileList(TList*)");
296  }
297 
299  {
300  Info("SetNbEventToRead", "called with %lld", nb);
301  nbEventToRead = nb;
302  }
303 
305  {
306  return nbEventToRead;
307  }
308 
309  void ChooseNbEventToRead();
311  void SetDataType(const Char_t* name)
312  {
313  fDataType = name;
314  }
315 
316  void SetUserIncludes(const Char_t* incDirs = 0);
317  void SetUserLibraries(const Char_t* libs = 0);
318 
319  virtual void Reset();
320 
322  {
323  fParent = da;
324  }
326  {
327  return fParent;
328  }
329 
330  static KVDataAnalyser* GetAnalyser(const Char_t* plugin);
331  virtual Bool_t ReadBatchEnvFile(const TString&);
332  virtual void WriteBatchEnvFile(const TString&, Bool_t sav = kTRUE);
333 
334  virtual TString ExpandAutoBatchName(const Char_t* format) const;
335 
336  /* methods which can be used to customise analysis class behaviour.
337  they can be called from the analysis class using the global
338  pointer to the current data analyser, gDataAnalyser */
339  virtual void preInitAnalysis() {}
340  virtual void postInitAnalysis() {}
341  virtual void preInitRun() {}
342  virtual void postInitRun() {}
343  virtual void preAnalysis() {}
344  virtual void postAnalysis() {}
345  virtual void preEndRun() {}
346  virtual void postEndRun() {}
347  virtual void preEndAnalysis() {}
348  virtual void postEndAnalysis() {}
349 
350  void WriteBatchInfo(TTree*);
351 
352  virtual void RegisterUserClass(TObject*) {}
353 
354  void SetUserClassOptions(const Char_t* o = "")
355  {
356  fUserClassOptions = o;
357  }
359  {
360  return fUserClassOptions;
361  }
362 
363  static void RunAnalyser(const Char_t* plugin = "");
364 
366 
367  virtual void AddJobDescriptionList(TList*);
368 
369  void SetMenus(Bool_t on = kTRUE)
370  {
371  fMenus = on;
372  }
373  Bool_t IsMenus() const
374  {
375  return fMenus;
376  }
377  void SetQuit(Bool_t yes = kTRUE)
378  {
379  fQuit = yes;
380  }
381  Bool_t IsQuit() const
382  {
383  return fQuit;
384  }
385  void SetSubmit(Bool_t yes = kTRUE)
386  {
387  fSubmit = yes;
388  }
389  Bool_t IsSubmit() const
390  {
391  return fSubmit;
392  }
394  {
395  AbstractMethod("GetRootDirectoryOfDataToAnalyse");
396  return "";
397  }
398  virtual const Char_t* GetRecognisedAutoBatchNameKeywords() const;
400  {
402  }
406  virtual const KV2Body* GetKinematics() const
407  {
408  return nullptr;
409  }
410  virtual KVDBSystem* GetAnalysedSystem() const
411  {
412  return nullptr;
413  }
414  virtual KVDBRun* GetAnalysedRun() const
415  {
416  return nullptr;
417  }
418  virtual void SetTriggerConditionsForRun(int) {}
419 
420  virtual void SetAnalysedTree(TTree*) {}
421  virtual TTree* GetAnalysedTree() const
422  {
427 
428  return nullptr;
429  }
431  {
432  return "";
433  }
434 
435  ClassDef(KVDataAnalyser, 0) //For submitting & performing data analysis tasks
436 };
437 
439 R__EXTERN KVDataAnalyser* gDataAnalyser;
440 
441 #endif
int Int_t
#define R__EXTERN
#define e(i)
bool Bool_t
char Char_t
double Double_t
constexpr Bool_t kTRUE
#define ClassDef(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 filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
char name[80]
Relativistic binary kinematics calculator.
Definition: KV2Body.h:166
Base class for interface to a batch job management system.
Definition: KVBatchSystem.h:78
void cd()
Make this the default batch system.
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
Manager class which sets up and runs data analysis tasks.
virtual void SetTriggerConditionsForRun(int)
virtual void SetAnalysedTree(TTree *)
const Char_t * GetACliCMode()
virtual void postEndRun()
virtual TTree * GetAnalysedTree() const
Bool_t IsMenus() const
Double_t GetStatusUpdateInterval() const
virtual KVDBRun * GetAnalysedRun() const
const UserClass & GetUserClass() const
UserClass fUserClass
user's analysis class
void UseBaseClassSubmitTask()
void DoStatusUpdate(Long64_t nevents) const
Print infos on events treated, disk usage, memory usage.
virtual TString ExpandAutoBatchName(const Char_t *format) const
void SetParent(KVDataAnalyser *da)
const KVString & GetUserLibraries() const
Bool_t fUseBaseClassSubmitTask
Long64_t nbEventToRead
virtual void PostRunReset()
virtual void Run()
Check all task variables, then run analyser.
Bool_t fSubmit
set to kTRUE when user wants to submit task
virtual void Reset()
virtual void SetAuxFileList(TList *)
std::unique_ptr< TEnv > fBatchEnv
batch environment file
virtual void AddJobDescriptionList(TList *)
KVDataAnalyser * fParent
holds address of parent analyser which created this one
virtual void WriteBatchEnvFile(const TString &, Bool_t sav=kTRUE)
void SetBatchSystem(KVBatchSystem *bs)
void ChooseNbEventToRead()
Ask user to set number of events to read.
virtual void preInitAnalysis()
void SetUserClassOptions(const Char_t *o="")
Bool_t RunningInLaunchDirectory()
virtual const KVBatchSystem * GetBatchSystem()
KVString fLibraries
user's libraries
virtual void postAnalysis()
void SetBatchMode(Bool_t on=kTRUE)
virtual ~ KVDataAnalyser()
const KVString & GetDataType() const
void SetUserLibraries(const Char_t *libs=0)
static void SetAbortProcessingLoop(Bool_t now=kTRUE)
KVString fUserClassOptions
options to be passed to user analysis class
virtual Bool_t CheckIfUserClassIsValid(const KVString &alternative_base_class="")
KVDataAnalyser * GetParent() const
virtual Bool_t NeedToChooseWhatToAnalyse() const
Bool_t fBatch
set to kTRUE when used in a non-interactive environment
void SetBatchName(const Char_t *batchname)
TString GetPathToFileInLaunchDirectory(const TString &) const
KVString GetUserClassName()
void WriteBatchInfo(TTree *)
virtual const KV2Body * GetKinematics() const
virtual void RunMenus()
Run data analyser in menu-driven mode.
virtual Bool_t CheckTaskVariables()
void SetSubmit(Bool_t yes=kTRUE)
Bool_t DoUserClassFilesExist()
const Char_t * GetBatchName()
const Char_t * GetLaunchDirectory() const
virtual TString GetAnalyserClassNameForBatchJob()
EProofMode fProofMode
void SetAnalysisTask(KVDataAnalysisTask *at)
KVString fBatchName
name of batch job when used in a non-interactive environment
void SetProofMode(EProofMode e)
const KVString & GetUserIncludes() const
Bool_t fUserClassIsOK
set once user class has been validated
virtual const Char_t * GetRecognisedAutoBatchNameKeywords() const
virtual void set_up_analyser_for_task(KVDataAnalyser *the_analyser)
virtual Bool_t NeedToChooseWhatToDo() const
virtual Bool_t CheckStatusUpdateInterval(Long64_t nevents) const
virtual Bool_t CheckWhatToAnalyseAndHow()
void SetQuit(Bool_t yes=kTRUE)
virtual void SubmitTask()
void SetUserClass(const UserClass &kvs, Bool_t check=kTRUE)
const Char_t * GetBatchStatusFileName() const
Returns full path to file used to store status of running batch jobs.
virtual void preAnalysis()
virtual void SetFileList(TList *)
TList * fWorkDirInit
list of files in working directory before task runs
virtual Long64_t GetTotalEntriesToRead() const
KVDataAnalyser()
Default constructor.
virtual Int_t GetNumberOfFilesToAnalyse() const
static Bool_t fCleanAbort
flag to force abort of processing
const KVString & GetUserClassOptions() const
virtual Bool_t PreSubmitCheck()
static KVDataAnalyser * GetAnalyser(const Char_t *plugin)
KVString fIncludes
user's include directories
Bool_t fQuit
set to kTRUE when user wants to quit
EProofMode GetProofMode() const
static Bool_t IsRunningBatchAnalysis()
void SetDataType(const Char_t *name)
virtual KVString GetRootDirectoryOfDataToAnalyse() const
virtual void ChooseWhatToAnalyse()
Bool_t fMenus
set to kTRUE in menu-driven mode
virtual void preEndRun()
virtual void postInitRun()
KVString fUserClassAlternativeBaseClass
alternative base class for user's analysis class
static void RunAnalyser(const Char_t *plugin="")
void ScanWorkingDirectory(TList **)
void ChooseUserClass()
Choose the user's analysis class.
TList * fWorkDirEnd
list of files in working directory after task runs
static Bool_t AbortProcessingLoop()
Long64_t GetNbEventToRead(void) const
virtual void postEndAnalysis()
virtual void preEndAnalysis()
void SetMenus(Bool_t on=kTRUE)
void CopyAnalysisResultsToLaunchDirectory()
virtual Bool_t ReadBatchEnvFile(const TString &)
void DeleteBatchStatusFile() const
Delete batch status file (and backup - '.bak') for batch job.
void SetStatusUpdateInterval(double t)
virtual void preInitRun()
virtual void RegisterUserClass(TObject *)
void SetUserIncludes(const Char_t *incDirs=0)
Bool_t IsUserClassValid() const
KVDataAnalysisTask * GetAnalysisTask() const
Bool_t BatchMode() const
virtual void postInitAnalysis()
void OpenBatchInfoFile(const TString &filename)
virtual KVDBSystem * GetAnalysedSystem() const
Bool_t IsSubmit() const
void UpdateBatchStatusFile(Int_t totev, Int_t evread, TString disk) const
Update infos in batch status file.
KVBatchSystem * fBatchSystem
batch system to use for submission of job
TEnv * GetBatchInfoFile() const
Bool_t IsQuit() const
Bool_t fChoseRunMode
set to kTRUE once running mode has been set/chosen
virtual void ChooseWhatToDo()
TObject * GetInstanceOfUserClass(const KVString &alternative_base_class="")
KVString fDataType
datatype chosen by user
KVDataAnalysisTask * fTask
task chosen by user
Double_t fStatusUpdateInterval
void SetNbEventToRead(Long64_t nb=0)
Define and manage data analysis tasks.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
void AbstractMethod(const char *method) const
virtual void Info(const char *method, const char *msgfmt,...) const
const char * Data() const
Bool_t IsNull() const
long long Long64_t
KVString full_path_dec(const KVString &other_dir="") const
KVString get_full_path(const KVString &, const KVString &="") const
KVString full_path_imp(const KVString &other_dir="") const