KaliVeda
Toolkit for HIC analysis
KVDataAnalysisTask.cpp
1 /*
2 $Id: KVDataAnalysisTask.cpp,v 1.10 2009/01/14 16:01:38 franklan Exp $
3 $Revision: 1.10 $
4 $Date: 2009/01/14 16:01:38 $
5 $Author: franklan $
6 */
7 
8 #include "KVDataAnalysisTask.h"
9 #include "TSystem.h"
10 #include "Riostream.h"
11 #include "TObjString.h"
12 #include "TClass.h"
13 #include "TPluginManager.h"
14 
15 using namespace std;
16 
18 
19 
20 
24 {
25  //Default ctor.
26  fUserClass = kFALSE;
27  fBaseIsPlugin = kFALSE;
28  fStatusUpdateInterval = 1000;
29 }
30 
31 
32 
35 
37 {
38  //Copy ctor
39 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
40  obj.Copy(*this);
41 #else
42  ((KVDataAnalysisTask&) obj).Copy(*this);
43 #endif
44 }
45 
46 
47 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
48 
52 
54 #else
56 #endif
57 {
58  //Copy this to obj
59  //Redefinition of KVBase::Copy
60 
61  KVBase::Copy(obj);
62  ((KVDataAnalysisTask&) obj).fPrereq = fPrereq;
63  ((KVDataAnalysisTask&) obj).fAnalyser = fAnalyser;
64  ((KVDataAnalysisTask&) obj).fBaseClass = fBaseClass;
65  ((KVDataAnalysisTask&) obj).fUserClass = fUserClass;
66  ((KVDataAnalysisTask&) obj).fBaseIsPlugin = fBaseIsPlugin;
67  ((KVDataAnalysisTask&) obj).fPluginBase = fPluginBase;
68  ((KVDataAnalysisTask&) obj).fPluginURI = fPluginURI;
69  ((KVDataAnalysisTask&) obj).fExtraAClicIncludes = fExtraAClicIncludes;
70  ((KVDataAnalysisTask&) obj).fStatusUpdateInterval = fStatusUpdateInterval;
71 }
72 
73 
74 
76 
77 KVDataAnalysisTask::~KVDataAnalysisTask()
78 {
79 }
80 
81 
82 
85 
87 {
88  //Print analysis task information
89  cout << "KVDataAnalysisTask : ";
90  cout << GetName() << " : ";
91  cout << GetTitle();
92  cout << " (pre-req = " << GetPrereq();
93  cout << ", analyser = " << GetDataAnalyser();
94  if (fUserClass) cout << ", base class for user analysis = " << GetUserBaseClass();
95  else if (fBaseClass != "") cout << ", default class for analysis = " << GetUserBaseClass();
96  cout << ")" << endl;
97 }
98 
99 
100 
117 
119 {
120  // Set the class from which user's analysis class must derive.
121  // This is normally read in from the following environment variable:
122  //
123  //~~~
124  // TaskName.DataAnalysisTask.UserClass.Base: [base_name]
125  //~~~
126  //
127  // If base_name is not the name of a known (i.e. currently contained in the ROOT
128  // dictionary class table) class, it is assumed to be the uri of a plugin class.
129  // By default, we assume that the plugin extends the KVDataAnalyser class, but
130  // this can be changed using the following syntax:
131  //
132  //~~~
133  // TaskName.DataAnalysisTask.UserClass.Base: [uri]/[base class]
134  //~~~
135 
136  fBaseClass = base_name;
137  if (fBaseClass != "" && !TClass::GetClass(base_name)) {
138  // Base class is not in dictionary. Assume that base_name is a plugin.
140  KVString _base(base_name);
141  TObjArray* toks = _base.Tokenize("/");
142  if (toks->GetEntries() > 1) {
143  // base_name = uri/base
144  fPluginURI = ((TObjString*)toks->At(0))->String();
145  fPluginBase = ((TObjString*)toks->At(1))->String();
146  }
147  else {
148  // base_name = uri. default plugin base class is KVDataAnalyser
149  fPluginURI = base_name;
150  fPluginBase = "KVDataAnalyser";
151  }
152  delete toks;
153  // check plugin exists
155  if (!ph) {
156  Error("SetUserBaseClass", "Analysis task=%s :\nNo plugin found with URI=%s for base class %s",
158  return;
159  }
160  // get name of plugin base class that user's analysis must derive from
161  fBaseClass = ph->GetClass();
162  if (gDebug > 1) Info("SetUserBaseClass", "Analysis task=%s :\nUser analysis class derives from %s, extension of %s in plugin %s",
164  }
165 }
166 
167 
168 
180 
182 {
183  // This method checks that the base class for the user's analysis class is loaded.
184  // If this base class requires a plugin library to be loaded, it will be loaded.
185  //
186  // First we add any required extra ACliC include paths (taken from resource
187  //
188  //~~~
189  //DataAnalysisTask.UserClass.ExtraACliCIncludes
190  //~~~
191  //
192  // \returns kFALSE if plugin cannot be loaded or class is simply unknown
193 
194  if (fExtraAClicIncludes != "") {
196  Info("CheckUserBaseClassIsLoaded", "Added ACliC include path: %s", fExtraAClicIncludes.Data());
197  }
198  TClass* cl = TClass::GetClass(fBaseClass.Data()); // class in dictionary already ?
199  if (cl) return kTRUE;
200  if (fBaseIsPlugin) {
201  // base class is in a plugin library. load it now.
203  if (ph) return kTRUE;
204  Error("CheckUserBaseClassIsLoaded", "Analysis task=%s : Failed to load plugin class=%s base=%s uri=%s",
206  }
207  else {
208  Error("CheckUserBaseClassIsLoaded", "Analysis task=%s : User analysis base class %s is unknown",
209  GetName(), fBaseClass.Data());
210  }
211  return kFALSE;
212 }
213 
214 
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
constexpr Bool_t kTRUE
const char Option_t
R__EXTERN TPluginManager * gPluginMgr
Int_t gDebug
R__EXTERN TSystem * gSystem
Base class for KaliVeda framework.
Definition: KVBase.h:139
void Error(const char *method, const char *msgfmt,...) const override
Definition: KVBase.cpp:1650
void Copy(TObject &) const override
Make a copy of this object.
Definition: KVBase.cpp:373
static TPluginHandler * LoadPlugin(const Char_t *base, const Char_t *uri="0")
Definition: KVBase.cpp:772
Define and manage data analysis tasks.
Bool_t fBaseIsPlugin
true if base class for user analysis is in a plugin library
KVString fPluginBase
known base class extended by plugin library
KVString fPluginURI
uri of the plugin library containing user base class
KVString fExtraAClicIncludes
to be added to AClic include paths before compilation
virtual Bool_t CheckUserBaseClassIsLoaded()
KVString fBaseClass
base class for user analysis
void Copy(TObject &) const override
KVDataAnalysisTask()
Default ctor.
virtual const Char_t * GetDataAnalyser() const
virtual const Char_t * GetUserBaseClass() const
virtual const Char_t * GetPrereq() const
Bool_t fUserClass
true if analysis task requires user-supplied class (derived from fBaseClass)
virtual void SetUserBaseClass(const Char_t *d)
void ls(Option_t *opt="") const override
Print analysis task information.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
static TClass * GetClass(Bool_t load=kTRUE, Bool_t silent=kFALSE)
const char * GetName() const override
const char * GetTitle() const override
Int_t GetEntries() const override
TObject * At(Int_t idx) const override
virtual void Info(const char *method, const char *msgfmt,...) const
const char * GetClass() const
TPluginHandler * FindHandler(const char *base, const char *uri=nullptr)
const char * Data() const
TObjArray * Tokenize(const TString &delim) const
virtual void AddIncludePath(const char *includePath)
const char * String
ClassImp(TPyArg)