1 #include "KVIDZAFromZGridMassCorrector.h"
2 #include "KVGaussFitMassModifier.h"
3 #include "KVMultiGaussIsotopeFit.h"
26 std::vector<KVIDZAFromZGridMassCorrector::mass_correction_t>
50 KVError::Warning(
this,
"DetermineMassCorrections",
"Grid %s has no multi-gaussian mass fits", modGrid->
GetName());
55 KVError::Warning(
this,
"DetermineMassCorrections",
"Grid %s has no multi-gaussian mass fits", refGrid->
GetName());
60 std::vector<mass_correction_t> corrections;
64 if(!mod_fit)
continue;
66 double min_yield=_min_yield;
67 if(ref_fit->
GetZ()==6)
74 int ngauss = std::min(std::min(ref_fit->
GetNGaussians(),mod_fit->GetNGaussians()),3);
76 auto mod_A = mod_fit->GetIsotopesRankedByYield();
78 auto mod_yield = mod_fit->GetRankedYields();
79 for(
int i=0; i<ngauss; ++i)
82 if(ref_yield[i]>min_yield*ref_yield[0])
84 ref_masses.
Add(ref_A[i]);
85 mod_masses.
Add(mod_A[i]);
89 if(ref_masses != mod_masses)
93 std::cout <<
"Z=" << ref_fit->
GetZ() <<
" : " << refGrid->
GetName() <<
" A=" << ref_masses.
AsString();
94 std::cout <<
"\t\t-- " << modGrid->
GetName() <<
" A=" << mod_masses.
AsString();
100 auto alist = mod_fit->GetAlist();
110 else if(test_nuc.
GetLifeTime(ref_fit->
GetZ(),A).value_or(1.e+06)<1.e-3)
112 else if(not_good[ref_fit->
GetZ()].Contains(A))
117 std::cout <<
"\t\t==> apply DeltaA = " << (*
offset>0 ?
"+" :
"") << *
offset;
118 corrections.push_back({ref_fit->
GetZ(),*
offset});
122 std::cout <<
"\t\t==> applying DeltaA = " << (*
offset>0 ?
"+" :
"") << *
offset <<
" would lead to masses: " << new_masses.
AsString() <<
" !!!\n";
126 std::cout <<
" ==> cannot find constant DeltaA to apply...???";
127 std::cout << std::endl;
163 for(
auto& corr : corrections)
167 std::cout <<
"Applying DeltaA=" << corr.second <<
" to isotopes for Z=" << corr.first << std::endl;
169 gfmm.
Modify(corr.second, pid_dist, mass_fit_parameters);
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 offset
Change isotope masses in a multi-gauss fit by fixed offset.
void Modify(int deltaA, TH1 *pid_dist, const KVNameValueList &mass_fit_parameters)
const Char_t * GetName() const override
Modify masses used in multi-gauss fits of an id-grid to be conform to those of a 'reference' grid.
void ApplyCorrections(const std::vector< KVIDZAFromZGridMassCorrector::mass_correction_t > &, TH1 *pid_dist, const KVNameValueList &mass_fit_parameters)
std::vector< mass_correction_t > DetermineMassCorrections(double min_yield)
void Initialize() override
KVMultiGaussIsotopeFit * GetMultiGaussFit(int z) const
Function for fitting PID mass spectra.
std::vector< double > GetRankedYields() const
int GetNGaussians() const
std::vector< int > GetIsotopesRankedByYield() const
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Description of properties and kinematics of atomic nuclei.
std::optional< double > GetLifeTime(std::optional< int > z={}, std::optional< int > a={}) const
Bool_t IsResonance(std::optional< int > z={}, std::optional< int > a={}) const
Strings used to represent a set of ranges of values.
const Char_t * AsString(Int_t maxchars=0) const
void Add(Int_t)
Add value 'n' to the list.
std::optional< int > FindOffset(const KVNumberList &other)
void Warning(UserClass p, const char *location, const char *va_(fmt),...)