1 #ifndef __KVMULTIGAUSSISOTOPEFIT_H
2 #define __KVMULTIGAUSSISOTOPEFIT_H
9 #include "KVNumberList.h"
11 #include "KVNameValueList.h"
53 enum fit_param_index {
62 double centroid_fit(
double*
x,
double*
p);
64 double FitFunc(
double*
x,
double*
p);
66 int get_gauss_norm_index(
int ig)
const
70 int get_mass_index(
int ig,
int ng)
const
74 int total_number_parameters(
int ng)
const
80 double PIDmin, PIDmax;
81 std::vector<int> Alist;
82 std::vector<double> PIDlist;
83 double min_sigma = 1.e-2;
84 double max_sigma = 1.e-1;
86 double evaluate_gaussian(
int i,
double pid)
const
91 std::optional<double> get_total_fit_for_pid(
double PID)
const;
93 template<
typename VecType,
typename PutInMapFunc,
typename PutInVecFunc>
94 std::vector<VecType> get_yield_ranked(PutInMapFunc put_in_map, PutInVecFunc put_in_vector)
const
96 std::map<double, int> yields;
97 for (
int i = 1; i <= Niso; ++i) yields[
GetGaussianNorm(i)] = put_in_map(i);
100 std::vector<VecType>
vec;
101 for(
auto it = yields.rbegin();it!=yields.rend();++it)
102 vec.push_back(put_in_vector(it));
118 double bkg_cst,
double bkg_slp,
double gaus_wid,
119 double pidvsa_a0,
double pidvsa_a1,
double pidvsa_a2);
172 if (old_fit)
delete old_fit;
186 return get_yield_ranked<int>([
this](
int i){
return Alist[i-1]; },
187 [](
auto it){
return it->second; });
193 return get_yield_ranked<double>([
this](
int i){
return Alist[i-1]; },
194 [](
auto it){
return it->first; });
200 return get_yield_ranked<int>([
this](
int i){
return i; },
201 [](
auto it){
return it->second; });
209 std::optional<double>
GetMeanA(
double PID)
const;
211 std::optional<int>
GetA(
double PID,
double& P)
const;
217 return Form(
"multigauss_fit_Z=%d", z);
221 return Form(
"gauss_fit_Z=%d_A=%d", z,
a);
225 return Form(
"gauss_fit_Z=%d_", z);
258 assert(i > 0 && i <= Niso);
264 assert(i > 0 && i <= Niso);
291 SetParLimits(fit_param_index::gauss_wid, min_sigma, max_sigma);
#define ClassDefOverride(name, id)
winID h TVirtualViewer3D TVirtualGLPainter p
char * Form(const char *fmt,...)
Function for fitting PID mass spectra.
static TString get_name_of_isotope_gaussian(int z, int a)
double GetPIDvsAfit_a1() const
static TString get_name_of_multifit(int z)
double GetMinSigma() const
double GetGaussianWidth(int) const
static TString get_root_name_of_isotope_gaussian(int z)
static void UnDrawAnyGaussian(int z, TVirtualPad *pad=gPad)
Remove the graphical representation of any gaussian for this Z from the given pad.
void DrawFitWithGaussians(Option_t *opt="", const TString &fit_title="") const
double GetCentroid(int i) const
void InitializeParameterLimitsForNewFit()
std::optional< double > GetMeanA(double PID) const
int GetGaussianA(int i) const
KVMultiGaussIsotopeFit(int z, std::vector< int > alist)
void SetSigmaLimits(double smin, double smax)
std::vector< double > GetRankedYields() const
std::optional< std::map< int, double > > GetADistribution(double PID) const
void PositiveBkgSlope(bool yes=true)
void UpdateGaussianCentroidParameters()
Required in case the attribution of masses to the gaussians changes.
std::vector< double > GetPIDlist() const
void SetFitRange(double min, double max)
Change range of fit.
double GetPIDvsAfit_a2() const
std::optional< int > GetA(double PID, double &P) const
void SetPIDlist(const std::vector< double > pidlist)
int GetIsotopeWithMaxYield() const
void SetAlist(const std::vector< int > alist)
void SetGaussianNorm(int i, double v)
double GetInterpolatedA(double PID) const
double GetPIDFromInterpolatedA(double interpA)
std::optional< int > GetMostProbableA(double PID, double &P) const
double GetBackgroundSlope() const
double GetProbability(int A, double PID) const
double GetPIDvsAfit_a0() const
int GetNGaussians() const
double GetGaussianNorm(int i) const
double GetBackgroundConstant() const
int GetIsotopeIndexWithMaxYield() const
void ReleaseCentroids()
Release the constraint on the positions of the centroids.
std::vector< int > GetAlist() const
void UnDraw(TVirtualPad *pad=gPad) const
Remove the graphical representation of this fit from the given pad.
static void UnDrawGaussian(int z, int a, TVirtualPad *pad=gPad)
std::vector< int > GetIsotopesRankedByYield() const
std::vector< int > GetIsotopeIndicesRankedByYield() const
double GetMaxSigma() const
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Strings used to represent a set of ranges of values.
virtual Double_t GetParameter(const TString &name) const
virtual void SetParLimits(Int_t ipar, Double_t parmin, Double_t parmax)
virtual void SetParameter(const TString &name, Double_t value)
Double_t Gaus(Double_t x, Double_t mean=0, Double_t sigma=1, Bool_t norm=kFALSE)