1 #include "KVGaussFitMassModifier.h"
2 #include "KVIDZAFromZGridMassHomogenizer.h"
3 #include "KVMultiGaussIsotopeFit.h"
14 void KVIDZAFromZGridMassHomogenizer::correct_masses_for_grid(
const TString& grid_name,
int Z,
int deltaA,
23 auto gr = GetGrid(grid_name);
26 auto h2d =
dynamic_cast<TH2*
>(theData.
Get(grid_name));
30 "No data histo with name %s found for grid %s",
34 auto h =
gr->LinearizeHistoToPID(h2d,100);
36 gfmm.Modify(deltaA, h, mass_fit_parameters);
66 "Read %d reference grids from file %s",
72 "Could not read file %s",
81 void KVIDZAFromZGridMassHomogenizer::Analyse(
KVIDZAFromZGrid* grid,
double min_yield)
88 if(!grid->
GetFits()->GetEntries())
96 auto yields =
fit->GetRankedYields();
98 for(
auto a :
fit->GetIsotopesRankedByYield())
100 if(yields[i]>=min_yield*yields[0])
127 for(
auto& stats : all_mass_ranges)
129 std::cout <<
"Z = " << stats.first <<
" :\n";
130 for(
auto& stat : stats.second)
132 std::cout <<
"\t" << stat.first <<
" : " << stat.second.size() <<
"\t{";
134 for(
auto&s : stat.second)
136 if(i) std::cout <<
", ";
145 std::cout <<
"}" << std::endl;
161 if(all_mass_ranges[Z].find(alist)!=all_mass_ranges[Z].
end())
164 auto Ntel = (int)all_mass_ranges[Z][alist].
size();
166 auto tel_to_show = std::min(Ntel,maxNtel);
175 else if(tel_to_show>6)
181 else if(tel_to_show<13)
186 else if(tel_to_show<16)
191 else if(tel_to_show<21)
197 int can_dimx=1920, can_dimy=1080;
200 can_dimy=600; can_dimx=tel_to_show*can_dimy;
202 auto c =
new TCanvas(
Form(
"fits_Z=%d_A=%s",Z,alist.c_str()),
Form(
"fits_Z=%d_A=%s",Z,alist.c_str()),-can_dimx,can_dimy);
205 for(
auto s : all_mass_ranges[Z][alist])
207 auto gr = GetGrid(s.c_str());
209 auto pad =
c->cd(itel);
210 gr->GetMultiGaussFit(Z)->DrawFitWithGaussians(
"",s.c_str());
212 auto dy = .2*(
gr->GetMultiGaussFit(Z)->GetNGaussians()+1)/5.;
213 pad->BuildLegend(.1,.9-dy,.45,.9);
223 KVError::Error(
this,
"ShowFits",
"No mass range '%s' for Z=%d",alist.c_str(),Z);
247 if(all_mass_ranges[Z].find(alist)!=all_mass_ranges[Z].
end())
249 for(
auto s : all_mass_ranges[Z][alist])
251 correct_masses_for_grid(s.c_str(),Z,deltaA,mass_fit_parameters);
275 correct_masses_for_grid(idtel,Z,deltaA,mass_fit_parameters);
size_t size(const MatrixT &matrix)
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 filename
char * Form(const char *fmt,...)
Change isotope masses in a multi-gauss fit by fixed offset.
static void SetAutoAdd(Bool_t yes=kTRUE)
const Char_t * GetName() const override
Int_t WriteAsciiFile(const Char_t *filename, const TCollection *selection=0)
void AddLastReadGrids()
Add all grids read the last time ReadAsciiFile() was called to the grid manager.
Bool_t ReadAsciiFile(const Char_t *filename)
const KVSeqCollection * GetGrids() const
Check & correct if necessary that isotopic masses used in different multi-gauss fits are consistent.
void CorrectMassesForTelescope(int Z, const TString &idtel, int deltaA, const KVNameValueList &mass_fit_parameters)
void SaveGrids(const TString &filename)
Save all grids: overwrites original file if no filename given (filename=""), otherwise writes a new f...
KVIDZAFromZGridMassHomogenizer(const TString &gridfile, const TString &datafile)
void CorrectMasses(int Z, const std::string &alist, int deltaA, const KVNameValueList &mass_fit_parameters)
void ShowFits(int Z, const std::string &alist)
Hybrid charge & mass identification grid.
void Initialize() override
Function for fitting PID mass spectra.
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
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.
virtual Int_t GetEntries() const
T * Get(const char *namecycle)
const char * GetName() const override
virtual void SetName(const char *name)
const char * Data() const
void Error(UserClass p, const char *location, const char *va_(fmt),...)
void Warning(UserClass p, const char *location, const char *va_(fmt),...)
void Info(UserClass p, const char *location, const char *va_(fmt),...)
fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, criterion, save_best, scheduler)