KaliVeda
Toolkit for HIC analysis
KVCalibrator.h
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 
56 
99 class KVCalibrator: public KVBase {
100 
111 
112 protected:
114  {
117  fCalibFunc = f;
118  }
120  {
125 
126  KVBase::GetX_status status;
127  Double_t res = ProtectedGetX(fCalibFunc, x, status); // fCalibFunc->GetX(x);
129  return res;
130  }
131  bool in_range(double X, double Xmin, double Xmax)
132  {
134  return (X >= Xmin) && (X <= Xmax);
135  }
137 public:
139  : KVBase("Calibrator", "KVCalibrator"), fDetector(nullptr), fCalibFunc(nullptr), fReady(kFALSE), fUseInverseFunction(kFALSE), fInputMin(99), fInputMax(-1), fInversionFail(kFALSE), fRandomize(false) {}
140  KVCalibrator(const TString& formula, const TString& type)
141  : KVBase("Calibrator", type), fDetector(nullptr), fCalibFunc(new TF1("KVCalibrator::fCalibFunc", formula)), fReady(kFALSE), fUseInverseFunction(kFALSE), fInputMin(99), fInputMax(-1), fInversionFail(kFALSE), fRandomize(false)
142  {
144  }
145  virtual ~KVCalibrator()
146  {
148  }
150  {
151  return fCalibFunc;
152  }
153 
154  virtual Int_t GetNumberParams() const
155  {
157  return (fCalibFunc ? fCalibFunc->GetNpar() : 0);
158  }
159  virtual void SetParameter(int i, Double_t par_val)
160  {
161  if (fCalibFunc) fCalibFunc->SetParameter(i, par_val);
162  }
163  Double_t GetParameter(int i) const
164  {
165  return (fCalibFunc ? fCalibFunc->GetParameter(i) : 0);
166  }
167  void SetStatus(Bool_t ready)
168  {
169  fReady = ready;
170  if (ready)
171  if (IsUseInverseFunction())
173  }
175  {
176  return fReady;
177  }
178  void Print(Option_t* opt = "") const override;
179  virtual void Reset()
180  {
181  for (Int_t i = 0; i < GetNumberParams(); i++) {
182  SetParameter(i, 0.0);
183  }
184  SetStatus(kFALSE);
185  }
186  virtual Double_t Compute(Double_t x, const KVNameValueList&) const
187  {
191 
193  : fCalibFunc->Eval(fRandomize ? x+gRandom->Uniform(-.5,.5) : x));
194  }
195  virtual Double_t Invert(Double_t x, const KVNameValueList&) const
196  {
198 
200  }
202  {
204  return Compute(x, par);
205  }
206  virtual Bool_t IsAvailableFor(const KVNameValueList&) const
207  {
213 
214  return kTRUE;
215  }
216 
217  static KVCalibrator* MakeCalibrator(const Char_t* type);
218 
219  virtual void SetOptions(const KVNameValueList&);
220  void SetInputSignalType(const TString& type)
221  {
222  fInputSignal = type;
223  }
224  void SetOutputSignalType(const TString& type)
225  {
227  }
229  {
230  return fInputSignal;
231  }
233  {
234  return fOutputSignal;
235  }
236  virtual void SetDetector(KVDetector* d)
237  {
238  fDetector = d;
239  }
241  {
242  return fDetector;
243  }
244 
245  void SetUseInverseFunction(Bool_t yes = kTRUE)
246  {
249  fUseInverseFunction = yes;
250  }
252  {
255  return fUseInverseFunction;
256  }
258  {
261  return fInversionFail;
262  }
263 
264  KVDrawable<TGraph> GetGraphOfCalibration(int npts, KVValueRange<double> input_range, const KVNameValueList& par = "");
265 
266  void SetRandomize(Bool_t yes = kTRUE)
267  {
270  fRandomize=yes;
271  }
272  ClassDefOverride(KVCalibrator, 2)//Base class for calibration of detectors
273 };
274 
275 #endif
int Int_t
#define SafeDelete(p)
#define d(i)
#define f(i)
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
#define ClassDefOverride(name, id)
#define X(type, name)
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
R__EXTERN TRandom * gRandom
Base class for KaliVeda framework.
Definition: KVBase.h:139
GetX_status
Definition: KVBase.h:320
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:1623
Base class for all detector calibrations.
Definition: KVCalibrator.h:99
Double_t operator()(Double_t x, const KVNameValueList &par="")
Definition: KVCalibrator.h:201
virtual Int_t GetNumberParams() const
Definition: KVCalibrator.h:154
TF1 * GetCalibFunction() const
Definition: KVCalibrator.h:149
KVDetector * GetDetector() const
Definition: KVCalibrator.h:240
virtual void SetParameter(int i, Double_t par_val)
Definition: KVCalibrator.h:159
void Print(Option_t *opt="") const override
Print a description of the calibration object, including a list of its parameters.
void adjust_range_of_inverse_calibration()
void SetCalibFunction(TF1 *f)
Definition: KVCalibrator.h:113
void SetUseInverseFunction(Bool_t yes=kTRUE)
Definition: KVCalibrator.h:245
virtual Double_t Invert(Double_t x, const KVNameValueList &) const
Definition: KVCalibrator.h:195
Bool_t fReady
= kTRUE if calibration formula & parameters have been set up
Definition: KVCalibrator.h:103
Bool_t GetStatus() const
Definition: KVCalibrator.h:174
Bool_t fInversionFail
problem inverting calibration function
Definition: KVCalibrator.h:109
KVDrawable< TGraph > GetGraphOfCalibration(int npts, KVValueRange< double > input_range, const KVNameValueList &par="")
Double_t fInputMin
required minimum input signal for inverse calibration
Definition: KVCalibrator.h:107
virtual ~KVCalibrator()
Definition: KVCalibrator.h:145
virtual void Reset()
Definition: KVCalibrator.h:179
virtual void SetDetector(KVDetector *d)
Definition: KVCalibrator.h:236
virtual Bool_t IsAvailableFor(const KVNameValueList &) const
Definition: KVCalibrator.h:206
virtual void SetOptions(const KVNameValueList &)
Double_t do_inversion(Double_t x) const
Definition: KVCalibrator.h:119
virtual Double_t Compute(Double_t x, const KVNameValueList &) const
Definition: KVCalibrator.h:186
void SetStatus(Bool_t ready)
Definition: KVCalibrator.h:167
TF1 * fCalibFunc
calibration function
Definition: KVCalibrator.h:102
Double_t GetParameter(int i) const
Definition: KVCalibrator.h:163
Double_t fInputMax
required maximum input signal for inverse calibration
Definition: KVCalibrator.h:108
KVCalibrator(const TString &formula, const TString &type)
Definition: KVCalibrator.h:140
TString GetInputSignalType() const
Definition: KVCalibrator.h:228
void SetRandomize(Bool_t yes=kTRUE)
Definition: KVCalibrator.h:266
TString fOutputSignal
type of output calibrated signal
Definition: KVCalibrator.h:105
void SetOutputSignalType(const TString &type)
Definition: KVCalibrator.h:224
void SetInputSignalType(const TString &type)
Definition: KVCalibrator.h:220
TString GetOutputSignalType() const
Definition: KVCalibrator.h:232
KVDetector * fDetector
associated detector
Definition: KVCalibrator.h:101
Bool_t fUseInverseFunction
true if inverse i.e. TF1::GetX should be used for Compute()
Definition: KVCalibrator.h:106
Bool_t fRandomize
randomize input integer values with uniform distribution in range [-0.5,0.5]
Definition: KVCalibrator.h:110
TString fInputSignal
type of signal used as input
Definition: KVCalibrator.h:104
Bool_t InversionFailure() const
Definition: KVCalibrator.h:257
Bool_t IsUseInverseFunction() const
Definition: KVCalibrator.h:251
static KVCalibrator * MakeCalibrator(const Char_t *type)
bool in_range(double X, double Xmin, double Xmax)
Definition: KVCalibrator.h:131
Base class for detector geometry description, interface to energy-loss calculations.
Definition: KVDetector.h:160
Simple wrapper for objects which can be drawn (graphs, histograms)
Definition: KVDrawable.h:29
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Range of values specified by minimum, maximum.
Definition: KVValueRange.h:19
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)
virtual Double_t Uniform(Double_t x1, Double_t x2)
Double_t x[n]