Hall A ROOT/C++ Analyzer (podd)
Loading...
Searching...
No Matches
THaFormula.h
Go to the documentation of this file.
1#ifndef Podd_THaFormula_h_
2#define Podd_THaFormula_h_
3
5// //
6// THaFormula //
7// //
9
10#include "RVersion.h"
11#include "v5/TFormula.h"
12#include "THaGlobals.h"
13#include <vector>
14#include <iostream>
15
16class THaVarList;
17class THaCutList;
18class THaVar;
19
20
22
23public:
24 static const Option_t* const kPRINTFULL;
25 static const Option_t* const kPRINTBRIEF;
26
27 THaFormula();
28 THaFormula( const char* name, const char* formula, Bool_t do_register=true,
29 const THaVarList* vlst=gHaVars, const THaCutList* clst=gHaCuts );
30 THaFormula( const THaFormula& rhs );
31 THaFormula& operator=( const THaFormula& rhs );
32 virtual ~THaFormula();
33
34 virtual Int_t Compile( const char* expression="" );
35 virtual char* DefinedString( Int_t i );
36 virtual Double_t DefinedValue( Int_t i );
37 // Requires ROOT >= 4.00/00
38 virtual Int_t DefinedVariable( TString& variable, Int_t& action );
39 virtual Int_t DefinedCut( TString& variable );
40 virtual Int_t DefinedGlobalVariable( TString& variable );
41 virtual Int_t DefinedGlobalVariableExtraList( TString& variable, const THaVarList* extralist );
42 virtual Int_t DefinedSpecialFunction( TString& name );
43 virtual Double_t Eval();
44 // Requires ROOT >= 4.02/04
45 virtual Double_t Eval( Double_t /*x*/, Double_t /*y*/=0.0,
46 Double_t /*z*/=0.0, Double_t /*t*/=0.0 ) const
47 // need to hack this-pointer to be non-const - courtesy of ROOT team
48 { return const_cast<THaFormula*>(this)->Eval(); }
49 virtual Double_t EvalInstance( Int_t instance );
50 virtual Int_t GetNdata() const;
51 virtual Bool_t IsArray() const { return TestBit(kArrayFormula); }
52 virtual Bool_t IsVarArray() const { return TestBit(kVarArray); }
53 Bool_t IsError() const { return TestBit(kError); }
54 Bool_t IsInvalid() const { return TestBit(kInvalid); }
55 virtual void Print( Option_t* option="" ) const;
56 void SetList( const THaVarList* lst ) { fVarList = lst; }
57 void SetCutList( const THaCutList* lst ) { fCutList = lst; }
58
59protected:
60
61 enum {
62 kError = BIT(0), // Compile() failed
63 kInvalid = BIT(1), // DefinedValue() encountered invalid data
64 kVarArray = BIT(2), // Formula contains a variable-size array
65 kArrayFormula = BIT(3), // Formula has multiple instances
66 kFuncOfVarArray = BIT(4) // Formula contains function of var-size array
67 };
68
72
73 virtual Int_t DefinedCutWithType( TString& variable, EVariableType type );
74 class FVarDef_t {
75 public:
76 EVariableType type; //Type of variable in the formula
77 void* obj; //Pointer to the respective object
78 Int_t index; //Linear index into array, if fixed-size
79 FVarDef_t( EVariableType t, void* p, Int_t i ) : type(t), obj(p), index(i) {}
80 FVarDef_t( const FVarDef_t& rhs );
81 FVarDef_t& operator=( const FVarDef_t& rhs );
82 FVarDef_t( FVarDef_t&& rhs ) noexcept;
83 FVarDef_t& operator=( FVarDef_t&& rhs ) noexcept;
84 ~FVarDef_t();
85 };
86 std::vector<FVarDef_t> fVarDef; //Global variables referenced in formula
87 const THaVarList* fVarList; //Pointer to list of variables
88 const THaCutList* fCutList; //Pointer to list of cuts
89 Int_t fInstance; //Current instance to evaluate
90
93 Int_t Init( const char* name, const char* expression );
94 virtual Bool_t IsString( Int_t oper ) const;
95 virtual void RegisterFormula( Bool_t add = true );
96
97 ClassDef(THaFormula,0) //Formula defined on list of variables
98};
99
100//__________________inlines____________________________________________________
101inline
103{
104 fInstance = instance;
105 if( fNoper == 1 && fVarDef.size() == 1 )
106 return DefinedValue(0);
107 else
108 return EvalPar(nullptr);
109}
110
111#endif
int Int_t
bool Bool_t
double Double_t
const char Option_t
#define ClassDef(name, id)
#define BIT(n)
winID h TVirtualViewer3D TVirtualGLPainter p
R__EXTERN class THaVarList * gHaVars
Definition THaGlobals.h:11
R__EXTERN class THaCutList * gHaCuts
Definition THaGlobals.h:12
virtual Double_t EvalPar(const Double_t *x, const Double_t *params=nullptr)
EVariableType type
Definition THaFormula.h:76
FVarDef_t(EVariableType t, void *p, Int_t i)
Definition THaFormula.h:79
FVarDef_t & operator=(const FVarDef_t &rhs)
virtual Int_t GetNdata() const
virtual void Print(Option_t *option="") const
Int_t Init(const char *name, const char *expression)
Int_t GetNdataUnchecked() const
virtual Int_t DefinedVariable(TString &variable, Int_t &action)
static const Option_t *const kPRINTBRIEF
Definition THaFormula.h:25
virtual Int_t Compile(const char *expression="")
virtual Bool_t IsString(Int_t oper) const
virtual void RegisterFormula(Bool_t add=true)
Bool_t IsInvalid() const
Definition THaFormula.h:54
virtual Int_t DefinedCutWithType(TString &variable, EVariableType type)
virtual Double_t Eval()
virtual Int_t DefinedCut(TString &variable)
virtual Double_t EvalInstance(Int_t instance)
std::vector< FVarDef_t > fVarDef
Definition THaFormula.h:86
Bool_t IsError() const
Definition THaFormula.h:53
virtual Double_t DefinedValue(Int_t i)
virtual Bool_t IsArray() const
Definition THaFormula.h:51
Double_t EvalInstanceUnchecked(Int_t instance)
Definition THaFormula.h:102
@ kFuncOfVarArray
Definition THaFormula.h:66
const THaVarList * fVarList
Definition THaFormula.h:87
const THaCutList * fCutList
Definition THaFormula.h:88
Int_t fInstance
Definition THaFormula.h:89
virtual ~THaFormula()
void SetList(const THaVarList *lst)
Definition THaFormula.h:56
void SetCutList(const THaCutList *lst)
Definition THaFormula.h:57
virtual Bool_t IsVarArray() const
Definition THaFormula.h:52
virtual Int_t DefinedSpecialFunction(TString &name)
virtual Int_t DefinedGlobalVariable(TString &variable)
virtual Double_t Eval(Double_t, Double_t=0.0, Double_t=0.0, Double_t=0.0) const
Definition THaFormula.h:45
virtual Int_t DefinedGlobalVariableExtraList(TString &variable, const THaVarList *extralist)
THaFormula & operator=(const THaFormula &rhs)
static const Option_t *const kPRINTFULL
Definition THaFormula.h:24
virtual char * DefinedString(Int_t i)
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const