KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVCalibrator.h
Go to the documentation of this file.
1 #ifndef __KV_CALIBRATOR__
2 #define __KV_CALIBRATOR__
3 
4 #include "KVBase.h"
5 #include "TRef.h"
6 #include "KVDetector.h"
7 #include "TF1.h"
8 #include "KVValueRange.h"
9 
55 
75 class KVCalibrator: public KVBase {
76 
86 
87 protected:
89  {
92  fCalibFunc = f;
93  }
95  {
96  return fCalibFunc;
97  }
99  {
104 
105  int status;
106  Double_t res = ProtectedGetX(fCalibFunc, x, status); // fCalibFunc->GetX(x);
107  fInversionFail = (status != 0);
108  return res;
109  }
110  bool in_range(double X, double Xmin, double Xmax)
111  {
113  return (X >= Xmin) && (X <= Xmax);
114  }
116 public:
118  : KVBase("Calibrator", "KVCalibrator"), fDetector(nullptr), fCalibFunc(nullptr), fReady(kFALSE), fUseInverseFunction(kFALSE), fInputMin(99), fInputMax(-1), fInversionFail(kFALSE) {}
119  KVCalibrator(const TString& formula, const TString& type)
120  : KVBase("Calibrator", type), fDetector(nullptr), fCalibFunc(new TF1("KVCalibrator::fCalibFunc", formula)), fReady(kFALSE), fUseInverseFunction(kFALSE), fInputMin(99), fInputMax(-1), fInversionFail(kFALSE)
121  {
123  }
124  virtual ~KVCalibrator()
125  {
127  }
128 
130  {
132  return (fCalibFunc ? fCalibFunc->GetNpar() : 0);
133  }
134  void SetParameter(int i, Double_t par_val) const
135  {
136  if (fCalibFunc) fCalibFunc->SetParameter(i, par_val);
137  }
138  Double_t GetParameter(int i) const
139  {
140  return (fCalibFunc ? fCalibFunc->GetParameter(i) : 0);
141  }
142  void SetStatus(Bool_t ready)
143  {
144  fReady = ready;
145  if (ready)
146  if (IsUseInverseFunction())
148  }
150  {
151  return fReady;
152  }
153  virtual void Print(Option_t* opt = "") const;
154  virtual void Reset()
155  {
156  for (Int_t i = 0; i < GetNumberParams(); i++) {
157  SetParameter(i, 0.0);
158  }
159  SetStatus(kFALSE);
160  }
161  virtual Double_t Compute(Double_t x, const KVNameValueList&) const
162  {
164 
166  }
167  virtual Double_t Invert(Double_t x, const KVNameValueList&) const
168  {
170 
172  }
174  {
176  return Compute(x, par);
177  }
178  virtual Bool_t IsAvailableFor(const KVNameValueList&) const
179  {
185 
186  return kTRUE;
187  }
188 
189  static KVCalibrator* MakeCalibrator(const Char_t* type);
190 
191  virtual void SetOptions(const KVNameValueList&);
192  void SetInputSignalType(const TString& type)
193  {
194  fInputSignal = type;
195  }
196  void SetOutputSignalType(const TString& type)
197  {
199  }
201  {
202  return fInputSignal;
203  }
205  {
206  return fOutputSignal;
207  }
209  {
210  fDetector = d;
211  }
213  {
214  return fDetector;
215  }
216 
217  void SetUseInverseFunction(Bool_t yes = kTRUE)
218  {
221  fUseInverseFunction = yes;
222  }
224  {
227  return fUseInverseFunction;
228  }
230  {
233  return fInversionFail;
234  }
235 
236  TGraph* GetGraphOfCalibration(int npts, KVValueRange<double> input_range, const KVNameValueList& par = "");
237 
238  ClassDef(KVCalibrator, 2)//Base class for calibration of detectors
239 };
240 
241 #endif
int Int_t
#define SafeDelete(p)
#define d(i)
#define f(i)
char Char_t
const Bool_t kFALSE
bool Bool_t
double Double_t
const Bool_t kTRUE
const char Option_t
#define ClassDef(name, id)
int type
Base class for KaliVeda framework.
Definition: KVBase.h:135
Double_t ProtectedGetX(const TF1 *func, Double_t val, int &status, Double_t xmin=0.0, Double_t xmax=0.0) const
Definition: KVBase.cpp:1654
Base class for all detector calibrations.
Definition: KVCalibrator.h:75
Double_t operator()(Double_t x, const KVNameValueList &par="")
Definition: KVCalibrator.h:173
TF1 * GetCalibFunction() const
Definition: KVCalibrator.h:94
KVDetector * GetDetector() const
Definition: KVCalibrator.h:212
void adjust_range_of_inverse_calibration()
void SetCalibFunction(TF1 *f)
Definition: KVCalibrator.h:88
void SetUseInverseFunction(Bool_t yes=kTRUE)
Definition: KVCalibrator.h:217
virtual Double_t Invert(Double_t x, const KVNameValueList &) const
Definition: KVCalibrator.h:167
Bool_t fReady
= kTRUE if calibration formula & parameters have been set up
Definition: KVCalibrator.h:79
Bool_t GetStatus() const
Definition: KVCalibrator.h:149
Bool_t fInversionFail
problem inverting calibration function
Definition: KVCalibrator.h:85
Int_t GetNumberParams() const
Definition: KVCalibrator.h:129
Double_t fInputMin
required minimum input signal for inverse calibration
Definition: KVCalibrator.h:83
virtual ~KVCalibrator()
Definition: KVCalibrator.h:124
virtual void Reset()
Definition: KVCalibrator.h:154
virtual Bool_t IsAvailableFor(const KVNameValueList &) const
Definition: KVCalibrator.h:178
virtual void SetOptions(const KVNameValueList &)
void SetParameter(int i, Double_t par_val) const
Definition: KVCalibrator.h:134
Double_t do_inversion(Double_t x) const
Definition: KVCalibrator.h:98
virtual Double_t Compute(Double_t x, const KVNameValueList &) const
Definition: KVCalibrator.h:161
void SetStatus(Bool_t ready)
Definition: KVCalibrator.h:142
TGraph * GetGraphOfCalibration(int npts, KVValueRange< double > input_range, const KVNameValueList &par="")
TF1 * fCalibFunc
calibration function
Definition: KVCalibrator.h:78
Double_t GetParameter(int i) const
Definition: KVCalibrator.h:138
virtual void Print(Option_t *opt="") const
Print a description of the calibration object, including a list of its parameters.
Double_t fInputMax
required maximum input signal for inverse calibration
Definition: KVCalibrator.h:84
KVCalibrator(const TString &formula, const TString &type)
Definition: KVCalibrator.h:119
TString GetInputSignalType() const
Definition: KVCalibrator.h:200
TString fOutputSignal
type of output calibrated signal
Definition: KVCalibrator.h:81
void SetOutputSignalType(const TString &type)
Definition: KVCalibrator.h:196
void SetDetector(KVDetector *d)
Definition: KVCalibrator.h:208
void SetInputSignalType(const TString &type)
Definition: KVCalibrator.h:192
TString GetOutputSignalType() const
Definition: KVCalibrator.h:204
KVDetector * fDetector
associated detector
Definition: KVCalibrator.h:77
Bool_t fUseInverseFunction
true if inverse i.e. TF1::GetX should be used for Compute()
Definition: KVCalibrator.h:82
TString fInputSignal
type of signal used as input
Definition: KVCalibrator.h:80
Bool_t InversionFailure() const
Definition: KVCalibrator.h:229
Bool_t IsUseInverseFunction() const
Definition: KVCalibrator.h:223
static KVCalibrator * MakeCalibrator(const Char_t *type)
bool in_range(double X, double Xmin, double Xmax)
Definition: KVCalibrator.h:110
Base class for detector geometry description, interface to energy-loss calculations.
Definition: KVDetector.h:121
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Range of values specified by minimum, maximum.
Definition: KVValueRange.h:17
virtual Double_t GetParameter(const TString &name) const
virtual Int_t GetNpar() const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
virtual void SetParameter(const TString &name, Double_t value)
Double_t x[n]