1 #include "KVLightEnergyCsI.h"
76 return do_inversion(*x);
89 if (make_func) SetCalibFunction(
new TF1(
"fLight_CsI",
this, &KVLightEnergyCsI::CalculLumiere, 0., 10000., 4));
116 if (!CheckParameters(z_and_a)) {
153 if (!CheckParameters(z_and_a)) {
154 KVError::Error(
this,
"Compute",
"Cannot compute without knowing Z and A of nucleus");
209 fit_result = lite_vs_e->
Fit(
GetCalibFunction(),
"EMGS",
"",fit_e_range->Min(),fit_e_range->Max());
212 std::cout <<
"chi**2/ndf=" << fit_result->
Chi2()/fit_result->
Ndf()
213 <<
" proba=" << fit_result->
Prob()*100 <<
"%\n";
244 inv_fit_func = std::make_unique<TF1>(
"fInv_Light_CsI",
this, &KVLightEnergyCsI::InvCalc, 0., 100000., 4);
246 inv_fit_func->SetParameters(10.,0.5,a3_fit,a4_fit);
247 inv_fit_func->SetParLimits(0,0.,1000.);
248 inv_fit_func->SetParLimits(1,0.,1.);
250 inv_fit_func->SetParLimits(2,a3_range->Min(),a3_range->Max());
252 inv_fit_func->FixParameter(2,a3_fit);
254 inv_fit_func->SetParLimits(3,a4_range->Min(),a4_range->Max());
256 inv_fit_func->FixParameter(3,a4_fit);
259 fit_result = e_vs_lite->
Fit(inv_fit_func.get(),
"EMGS",
"",fit_lite_range->Min(),fit_lite_range->Max());
261 fit_result = e_vs_lite->
Fit(inv_fit_func.get(),
"EMGS");
262 std::cout <<
"chi**2/ndf=" << fit_result->
Chi2()/fit_result->
Ndf()
263 <<
" proba=" << fit_result->
Prob()*100 <<
"%\n";
264 std::cout << inv_fit_func->GetParameter(0) <<
","
265 << inv_fit_func->GetParameter(1) <<
","
266 << inv_fit_func->GetParameter(2) <<
","
267 << inv_fit_func->GetParameter(3) << std::endl;
virtual void SetType(const Char_t *str)
Base class for all detector calibrations.
TF1 * GetCalibFunction() const
void SetUseInverseFunction(Bool_t yes=kTRUE)
virtual Double_t Invert(Double_t x, const KVNameValueList &) const
virtual Double_t Compute(Double_t x, const KVNameValueList &) const
Light-energy calibration function for CsI detectors using a Fermi-function dependence on energy for d...
KVLightEnergyCsI(Bool_t make_func=kTRUE)
Double_t Compute(Double_t chan, const KVNameValueList &z_and_a="") const override
Double_t Invert(Double_t, const KVNameValueList &z_and_a="") const override
void invFit(TH1 *, int z, int a, std::optional< KVValueRange< Double_t >> fit_lite_range={})
void Fit(TH1 *, int z, int a, std::optional< KVValueRange< Double_t >> fit_e_range={})
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Int_t GetIntValue(const Char_t *name) const
void ls(Option_t *opt="") const override
Bool_t HasIntParameter(const Char_t *name) const
Range of values specified by minimum, maximum.
virtual Double_t GetParameter(const TString &name) const
virtual void SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
virtual void SetParameters(const Double_t *params)
virtual void FixParameter(Int_t ipar, Double_t value)
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
const char * GetName() const override
void Error(UserClass p, const char *location, const char *va_(fmt),...)