KaliVeda
Toolkit for HIC analysis
KVBase.h
1 /***************************************************************************
2  kvbase.h - description
3  -------------------
4  begin : Thu May 16 2002
5  copyright : (C) 2002 by J.D. Frankland
6  email : frankland@ganil.fr
7 
8 $Id: KVBase.h,v 1.42 2009/03/12 13:59:40 franklan Exp $
9 ***************************************************************************/
10 
11 #ifndef KVBASE_H
12 #define KVBASE_H
13 #include <optional>
14 #include "KVConfig.h"
15 #include "KVError.h"
16 #include "TNamed.h"
17 #include "RVersion.h"
18 #include "TString.h"
19 #include "KVLockfile.h"
20 #include "TPluginManager.h"
21 #include "TF1.h"
22 #include "TEnv.h"
23 class KVString;
24 #ifdef WITH_RSQLITE
25 namespace KVSQLite {
26  class database;
27 }
28 #endif
29 
140 class KVBase: public TNamed {
141 
142 private:
143  UInt_t fNumber;
144 protected:
145  TString fLabel;
146 
147 private:
148  static Bool_t fEnvIsInit;
149  static TString fWorkingDirectory;
150 
151  void init();
152  static void ReadGUIMimeTypes();
153  static void ReadConfigFiles();
154 
155 public:
156 
157  static void Deprecated(const char* method, const char* advice);
158 
160  kIsKaliVedaObject = BIT(23) //all KVBase-derived objects have this bit set in TObject::fBits
161  };
162 
163  static Bool_t IsEnvInit()
164  {
165  return fEnvIsInit;
166  }
167  static void InitEnvironment();
168  KVBase();
169  KVBase(const Char_t* name, const Char_t* title = "");
170  KVBase(const KVBase&);
171  KVBase& operator=(const KVBase&);
172 
173  virtual void SetType(const Char_t* str)
174  {
175  SetTitle(str);
176  }
177  virtual const Char_t* GetType() const
178  {
179  return GetTitle();
180  }
181  static const Char_t* WorkingDirectory()
182  {
183  return fWorkingDirectory.Data();
184  }
185  Bool_t IsType(const Char_t* typ, bool case_insensitive = false) const
186  {
190  TString this_type(GetType());
191  return this_type.CompareTo(typ, case_insensitive ? TString::kIgnoreCase : TString::kExact) == 0;
192  }
193  Bool_t IsCalled(const Char_t* name, bool case_insensitive = false) const
194  {
198  TString this_name(GetName());
199  return this_name.CompareTo(name, case_insensitive ? TString::kIgnoreCase : TString::kExact) == 0;
200  }
201  void SetLabel(const Char_t* lab)
202  {
203  fLabel = lab;
204  }
205  const Char_t* GetLabel() const
206  {
207  return fLabel;
208  }
209  Bool_t HasLabel() const
210  {
211  return fLabel.Length();
212  }
213  Bool_t IsLabelled(const Char_t* l, bool case_insensitive = false) const
214  {
218  return fLabel.CompareTo(l, case_insensitive ? TString::kIgnoreCase : TString::kExact) == 0;
219  }
220  void Print(Option_t* option = "") const override;
221  virtual void List()
222  {
223  }
224  virtual void SetNumber(UInt_t num)
225  {
226  fNumber = num;
227  }
229  {
230  return fNumber;
231  }
232  void Clear(Option_t* opt = "") override;
233 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
234  void Copy(TObject&) const override;
235 #else
236  virtual void Copy(TObject&);
237 #endif
238 
239  static Bool_t SearchKVFile(const Char_t* name, TString& fullpath,
240  const Char_t* kvsubdir = "");
241 #ifdef WITH_RSQLITE
242  static Bool_t SearchAndOpenKVFile(const Char_t* name, KVSQLite::database& dbfile,
243  const Char_t* kvsubdir = "");
244 #endif
245  static Bool_t SearchAndOpenKVFile(const Char_t* name, std::ifstream& file,
246  const Char_t* kvsubdir = "", KVLockfile* locks = 0);
247  static Bool_t SearchAndOpenKVFile(const Char_t* name, std::ofstream& file,
248  const Char_t* kvsubdir = "", KVLockfile* locks = 0);
249  static void BackupFileWithDate(const Char_t* path);
250  static TPluginHandler* LoadPlugin(const Char_t* base,
251  const Char_t* uri = "0");
252  static const Char_t* GetPluginURI(const Char_t* base, const Char_t* plugin);
253  static const Char_t* GetListOfPlugins(const Char_t* base);
254  static const Char_t* GetListOfPluginURIs(const Char_t* base);
255  static Bool_t IsThisAPlugin(const TString& uri, TString& base);
256  static void OpenTempFile(TString& base, std::ofstream& fp); /* open temp file with basename 'base' */
257  static void GetTempFileName(TString& base);
258 
259  static const Char_t* GetKVVersion();
260  static int GetKVMajorVersion();
261  static int GetKVMinorVersion();
262  static int GetKVPatchVersion();
263  static const Char_t* GetKVBuildDate();
264  static const Char_t* GetKVBuildTime();
265  static const Char_t* GetKVBuildType();
266  static const Char_t* GetKVBuildUser();
267  static const Char_t* GetKVSourceDir();
268  static const Char_t* GetKVBuildDir();
269 
270 #ifdef WITH_GIT_INFOS
271  static const Char_t* gitBranch();
272  static const Char_t* gitCommit();
273 #endif
274 
275  static const Char_t* GetETCDIRFilePath(const Char_t* namefile = "");
276  static const Char_t* GetDATADIRFilePath(const Char_t* namefile = "");
277  static const Char_t* GetDATABASEFilePath();
278  static const Char_t* GetLIBDIRFilePath(const Char_t* namefile = "");
279  static const Char_t* GetINCDIRFilePath(const Char_t* namefile = "");
280  static const Char_t* GetBINDIRFilePath(const Char_t* namefile = "");
281  static const Char_t* GetWORKDIRFilePath(const Char_t* namefile = "");
282  static const Char_t* GetTEMPLATEDIRFilePath(const Char_t* namefile = "");
283  static const Char_t* GetExampleFilePath(const Char_t* library, const Char_t* namefile);
284  static bool is_gnuinstall()
285  {
289 #ifdef WITH_GNU_INSTALL
290  return true;
291 #else
292  return false;
293 #endif
294  }
295 
296  static Bool_t FindExecutable(TString& exec, const Char_t* path =
297  "$(PATH)");
298 
299  static const Char_t* FindFile(const Char_t* search, TString& wfil);
300  static Bool_t FindClassSourceFiles(const KVString& class_name, KVString& imp_file,
301  KVString& dec_file, const KVString& dir_name = ".");
302 
303  static Bool_t AreEqual(Double_t x, Double_t y, Long64_t maxdif = 1);
304 
305  static Bool_t OpenContextMenu(const char* method, TObject* obj, const char* alt_method_name = "");
306 
307  static void CombineFiles(const Char_t* file1, const Char_t* file2, const Char_t* newfilename, Bool_t keep = kTRUE);
308 
309  virtual TObject* GetObject() const;
310 
311  static void PrintSplashScreen();
312 
313  template<typename ValType>
314  static ValType GetDataSetEnv(const KVString& dataset, const KVString& type, const ValType& defval = {})
315  {
322 
323  KVString temp = dataset + "." + type;
324  if (gEnv->Defined(temp)) return gEnv->GetValue(temp.Data(), defval);
325  return gEnv->GetValue(type, defval);
326  }
327 
328  enum class GetX_status
329  {
330  ok,
333  at_maximum,
334  at_minimum
335  };
336 
337  static Double_t ProtectedGetX(const TF1* func, Double_t val, GetX_status& status, std::optional<Double_t> xmin = {}, std::optional<Double_t> xmax = {});
338  static Double_t ProtectedGetX(const TF1& func, Double_t val, GetX_status& status, std::optional<Double_t> xmin = {}, std::optional<Double_t> xmax = {});
339 
340  static std::optional<TString> AbsoluteUnixPath(const TString&);
341 
342  ClassDefOverride(KVBase, 4) //Base class for all KaliVeda objects
343 };
344 
347 extern void AssignAndDelete(TString& target, char* tobedeleted);
349 Bool_t SearchFile(const Char_t* name, TString& fullpath, int ndirs, ...);
350 #endif
unsigned int UInt_t
bool Bool_t
char Char_t
double Double_t
const char Option_t
#define BIT(n)
#define ClassDefOverride(name, id)
R__EXTERN TEnv * gEnv
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]
float xmax
void AssignAndDelete(TString &target, char *tobedeleted)
Base class for KaliVeda framework.
Definition: KVBase.h:140
static const Char_t * WorkingDirectory()
Definition: KVBase.h:181
void Clear(Option_t *opt="") override
Clear object properties : name, type/title, number, label.
Definition: KVBase.cpp:382
void SetLabel(const Char_t *lab)
Definition: KVBase.h:201
virtual const Char_t * GetType() const
Definition: KVBase.h:177
static const Char_t * GetBINDIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:111
static void OpenTempFile(TString &base, std::ofstream &fp)
Definition: KVBase.cpp:829
GetX_status
Definition: KVBase.h:329
static const Char_t * GetDATADIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:67
static const Char_t * GetDATABASEFilePath()
Definition: KVBase.cpp:85
static const Char_t * GetKVBuildDate()
Returns KaliVeda build date.
Definition: KVBase.cpp:900
static const Char_t * FindFile(const Char_t *search, TString &wfil)
Definition: KVBase.cpp:1053
static const Char_t * GetINCDIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:102
static const Char_t * gitCommit()
Returns last git commit of sources.
Definition: KVBase.cpp:970
static const Char_t * GetWORKDIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:120
static Bool_t FindExecutable(TString &exec, const Char_t *path="$(PATH)")
Definition: KVBase.cpp:994
static const Char_t * GetKVBuildUser()
Returns username of person who performed build.
Definition: KVBase.cpp:888
static Double_t ProtectedGetX(const TF1 *func, Double_t val, GetX_status &status, std::optional< Double_t > xmin={}, std::optional< Double_t > xmax={})
Definition: KVBase.cpp:1622
static void BackupFileWithDate(const Char_t *path)
Definition: KVBase.cpp:755
static const Char_t * gitBranch()
Returns git branch of sources.
Definition: KVBase.cpp:959
static const Char_t * GetListOfPluginURIs(const Char_t *base)
Definition: KVBase.cpp:1318
KVBase()
Default constructor.
Definition: KVBase.cpp:328
static int GetKVMajorVersion()
Definition: KVBase.cpp:129
static const Char_t * GetListOfPlugins(const Char_t *base)
Definition: KVBase.cpp:1251
Bool_t HasLabel() const
Definition: KVBase.h:209
static Bool_t AreEqual(Double_t x, Double_t y, Long64_t maxdif=1)
Comparison between two 64-bit floating-point values.
Definition: KVBase.cpp:1433
KVBase & operator=(const KVBase &)
copy assignment operator
Definition: KVBase.cpp:366
static void CombineFiles(const Char_t *file1, const Char_t *file2, const Char_t *newfilename, Bool_t keep=kTRUE)
Definition: KVBase.cpp:1518
static Bool_t IsEnvInit()
Definition: KVBase.h:163
const Char_t * GetLabel() const
Definition: KVBase.h:205
Bool_t IsType(const Char_t *typ, bool case_insensitive=false) const
Definition: KVBase.h:185
static Bool_t FindClassSourceFiles(const KVString &class_name, KVString &imp_file, KVString &dec_file, const KVString &dir_name=".")
Definition: KVBase.cpp:1095
virtual void SetNumber(UInt_t num)
Definition: KVBase.h:224
static Bool_t SearchAndOpenKVFile(const Char_t *name, std::ifstream &file, const Char_t *kvsubdir="", KVLockfile *locks=0)
static bool is_gnuinstall()
Definition: KVBase.h:284
static const Char_t * GetTEMPLATEDIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:76
static const Char_t * GetKVSourceDir()
Returns top-level directory of source tree used for build.
Definition: KVBase.cpp:935
static ValType GetDataSetEnv(const KVString &dataset, const KVString &type, const ValType &defval={})
Definition: KVBase.h:314
void Copy(TObject &) const override
Make a copy of this object.
Definition: KVBase.cpp:396
static void InitEnvironment()
Definition: KVBase.cpp:196
void Print(Option_t *option="") const override
Definition: KVBase.cpp:412
Bool_t IsLabelled(const Char_t *l, bool case_insensitive=false) const
Definition: KVBase.h:213
virtual void SetType(const Char_t *str)
Definition: KVBase.h:173
static const Char_t * GetKVBuildTime()
Returns KaliVeda build time.
Definition: KVBase.cpp:911
static int GetKVMinorVersion()
Definition: KVBase.cpp:137
static void PrintSplashScreen()
Prints welcome message and infos on version etc.
Definition: KVBase.cpp:1584
virtual void List()
Definition: KVBase.h:221
static const Char_t * GetLIBDIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:93
static std::optional< TString > AbsoluteUnixPath(const TString &)
Definition: KVBase.cpp:1723
static int GetKVPatchVersion()
Definition: KVBase.cpp:145
static const Char_t * GetExampleFilePath(const Char_t *library, const Char_t *namefile)
Return full path to example file for given library (="KVMultiDet", "BackTrack", etc....
Definition: KVBase.cpp:1568
Bool_t IsCalled(const Char_t *name, bool case_insensitive=false) const
Definition: KVBase.h:193
static const Char_t * GetKVBuildDir()
Returns top-level directory used for build.
Definition: KVBase.cpp:947
static Bool_t IsThisAPlugin(const TString &uri, TString &base)
Definition: KVBase.cpp:1348
EKaliVedaBits
Definition: KVBase.h:159
@ kIsKaliVedaObject
Definition: KVBase.h:160
virtual TObject * GetObject() const
Definition: KVBase.cpp:1551
static void GetTempFileName(TString &base)
Definition: KVBase.cpp:850
static Bool_t SearchKVFile(const Char_t *name, TString &fullpath, const Char_t *kvsubdir="")
Definition: KVBase.cpp:540
static const Char_t * GetKVBuildType()
Returns KaliVeda build type (cmake build: Release, Debug, RelWithDebInfo, ...)
Definition: KVBase.cpp:923
static const Char_t * GetPluginURI(const Char_t *base, const Char_t *plugin)
Definition: KVBase.cpp:1168
static const Char_t * GetETCDIRFilePath(const Char_t *namefile="")
Definition: KVBase.cpp:58
static Bool_t OpenContextMenu(const char *method, TObject *obj, const char *alt_method_name="")
Definition: KVBase.cpp:1486
static Bool_t SearchAndOpenKVFile(const Char_t *name, KVSQLite::database &dbfile, const Char_t *kvsubdir="")
Definition: KVBase.cpp:651
static TPluginHandler * LoadPlugin(const Char_t *base, const Char_t *uri="0")
Definition: KVBase.cpp:795
static const Char_t * GetKVVersion()
Returns KaliVeda version string.
Definition: KVBase.cpp:876
static void Deprecated(const char *method, const char *advice)
Definition: KVBase.cpp:1699
UInt_t GetNumber() const
Definition: KVBase.h:228
static Bool_t SearchAndOpenKVFile(const Char_t *name, std::ofstream &file, const Char_t *kvsubdir="", KVLockfile *locks=0)
Interface to (Linux) system lockfile command.
Definition: KVLockfile.h:70
Interface to ROOT SQLite database backend.
Definition: SQLiteDB.h:473
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
virtual const char * GetValue(const char *name, const char *dflt) const
Bool_t Defined(const char *name) const
virtual void SetTitle(const char *title="")
const char * GetName() const override
const char * GetTitle() const override
Ssiz_t Length() const
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
const char * Data() const
long long Long64_t
TLine l