00001 #ifndef MULTI_DRAW_FORMULA_H
00002 #define MULTI_DRAW_FORMULA_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00016
00017
00018
00019
00020 #include <MultiDraw/Global.h>
00021
00022 #include <string>
00023 #include <Rtypes.h>
00024
00025 class TTree;
00026 class TTreeFormula;
00027 class TTreeFormulaManager;
00028
00029 namespace MD
00030 {
00031 class Formula
00032 {
00033
00034
00035
00036
00039 public:
00040 void testInvariant () const;
00041
00042
00045 public:
00046 Formula ();
00047
00048
00052 public:
00053 Formula (const std::string& name, const std::string& formula, TTree *tree);
00054
00055
00058 public:
00059 ~Formula ();
00060
00061
00067 public:
00068 void reset (TTree *tree);
00069
00070
00073 public:
00074 const std::string& formula () const;
00075
00076
00079 public:
00080 bool valid () const;
00081
00082
00087 public:
00088 int ndim () const;
00089
00090
00096 public:
00097 std::size_t ndata () const;
00098
00099
00106 public:
00107 Double_t value (std::size_t data) const;
00108
00109
00110
00111
00112
00113
00114
00116 private:
00117 std::string m_formula;
00118
00120 private:
00121 std::string m_name;
00122
00124 private:
00125 TTree *m_tree;
00126
00128 private:
00129 TTreeFormula *m_form;
00130
00132 private:
00133 TTreeFormulaManager *m_manager;
00134
00137 private:
00138 int m_ndim;
00139
00141 private:
00142 mutable Long64_t m_entry;
00143
00145 private:
00146 mutable Int_t m_ndata;
00147
00149 private:
00150 mutable std::vector<Double_t> m_cache;
00151
00153 private:
00154 mutable std::vector<bool> m_read;
00155
00156
00158 private:
00159 Formula (const Formula& that);
00160 Formula& operator = (const Formula& that);
00161 };
00162 }
00163
00164 #endif