4 #include "KVIDZAFromZGrid.h"
6 #include "KVIDZALine.h"
25 fTables.SetOwner(
kTRUE);
28 fIgnoreMassID =
false;
147 double pidmin, pidmax, pid;
149 else if (
type == 2) {
154 itv->
add(aa, pid, pidmin, pidmax);
224 for (
int ii = 1; ii < 30; ii++) {
253 if (it && it->
is_inside(pid))
return zint + 1;
258 if (it && it->
is_inside(pid))
return zint - 1;
291 if (!
id->InheritsFrom(
"KVIDZALine"))
continue;
303 for (
auto z : zlist) {
307 fitparams.
Set(massfit);
320 auto A = fitfunc->GetA(idr->
PID, P);
323 idr->
PID = fitfunc->GetInterpolatedA(idr->
PID);
366 if (!idr->
IDOK)
return;
370 bool have_mass_fit_for_Z = (mass_fit_for_Z !=
nullptr);
371 bool mass_id_success =
false;
373 if ((have_mass_fit_for_Z || have_pid_range_for_Z)
376 if (have_mass_fit_for_Z)
380 if (mass_id_success) {
405 if (mass_id_success) idr->
SetComment(
"slight ambiguity of A, which could be larger");
406 else idr->
SetComment(
"slight ambiguity of Z, which could be larger");
409 if (mass_id_success) idr->
SetComment(
"slight ambiguity of A, which could be smaller");
410 else idr->
SetComment(
"slight ambiguity of Z, which could be smaller");
413 if (mass_id_success) idr->
SetComment(
"slight ambiguity of A, which could be larger or smaller");
414 else idr->
SetComment(
"slight ambiguity of Z, which could be larger or smaller");
417 if (mass_id_success) idr->
SetComment(
"point is outside of mass identification range");
418 else idr->
SetComment(
"point is in between two lines of different Z, too far from either to be considered well-identified");
421 if (mass_id_success) idr->
SetComment(
"point is in between two isotopes A & A+2 (e.g. 5He, 8Be, 9B)");
422 else idr->
SetComment(
"point is in between two lines of different Z, too far from either to be considered well-identified");
425 idr->
SetComment(
"(x,y) is below first line in grid");
428 idr->
SetComment(
"(x,y) is above last line in grid");
431 idr->
SetComment(
"no identification: (x,y) out of range covered by grid");
452 if (!zint)
return -1;
453 if (zint != idr->
Z) idr->
Z = zint;
457 if (it) res = it->
eval(idr);
473 if (!itvs->
GetNPID())
continue;
481 if (!itvs->
GetNPID())
continue;
502 double pid = idr->
PID;
503 if (pid < 0.5)
return 0.;
513 interval* left_int(
nullptr), *right_int(
nullptr);
518 ares = inter->
GetA();
541 if (!right_int || !left_int) {
549 int dA = right_int->
GetA() - left_int->GetA();
646 Error(
"add",
"Wrong interval for Z=%d and A=%d: [%.4lf %.4lf %.4lf] (%s)",
fZ, aa, pidmin, pid, pidmax,
GetName());
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
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
char * Form(const char *fmt,...)
virtual void WriteToAsciiFile(std::ofstream &gridfile)
const KVList * GetInfos() const
virtual void ReadFromAsciiFile(std::ifstream &gridfile)
const KVNameValueList * GetParameters() const
const Char_t * GetName() const
const KVList * GetIdentifiers() const
Hybrid charge & mass identification grid.
Bool_t fHasMassIDRegion
set to true if grid has a limited region for mass identification, indicated by an info "MassID"
bool MassIdentificationFromMultiGaussFit(KVMultiGaussIsotopeFit *, KVIdentificationResult *) const
KVList fTables
intervals for mass id
interval_set * GetIntervalSet(int zint) const
virtual void WriteToAsciiFile(std::ofstream &gridfile)
void SetOnlyZId(Bool_t=kTRUE)
void Copy(TObject &obj) const
virtual double DeduceAfromPID(KVIdentificationResult *idr) const
KVUniqueNameList fFits
multi-gaussian fits for mass id
KVMultiGaussIsotopeFit * GetMultiGaussFit(int z) const
virtual void ReadFromAsciiFile(std::ifstream &gridfile)
KVList * GetIntervalSets()
int is_inside(double pid) const
virtual void Identify(Double_t x, Double_t y, KVIdentificationResult *) const
virtual void Copy(TObject &) const
Copy this to 'obj'.
virtual void Identify(Double_t x, Double_t y, KVIdentificationResult *) const
UShort_t fZMax
largest Z of lines in grid
Int_t fICode
code de retour
Base class for identification ridge lines corresponding to different nuclear species.
Base class for graphical cuts used in particle identification.
Full result of one attempted particle identification.
Bool_t IDOK
general quality of identification, =kTRUE if acceptable identification made
void SetComment(const Char_t *c)
Bool_t Aident
= kTRUE if A of particle established
Double_t PID
= "real" Z if Zident==kTRUE and Aident==kFALSE, "real" A if Zident==Aident==kTRUE
Int_t A
A of particle found (if Aident==kTRUE)
Int_t Z
Z of particle found (if Zident==kTRUE)
Int_t IDquality
specific quality code returned by identification procedure
Bool_t HasFlag(std::string grid_name, TString flag)
Bool_t Zident
=kTRUE if Z of particle established
Function for fitting PID mass spectra.
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
void SetValue(const Char_t *name, value_type value)
void RemoveParameter(const Char_t *name)
Bool_t HasStringParameter(const Char_t *name) const
const Char_t * GetStringValue(const Char_t *name) const
bool Set(const KVString &)
TString GetTStringValue(const Char_t *name) 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.
virtual void Copy(TObject &obj) const
virtual void AddLast(TObject *obj)
virtual void SetOwner(Bool_t enable=kTRUE)
virtual void Clear(Option_t *option="")
virtual TObject * At(Int_t idx) const
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
virtual void Add(TObject *obj)
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
virtual Double_t Eval(Double_t x, TSpline *spline=nullptr, Option_t *option="") const
const char * GetName() const override
virtual void SetName(const char *name)
virtual void Error(const char *method, const char *msgfmt,...) const
const char * Data() const
Bool_t IsWhitespace() const
TString & Remove(EStripType s, char c)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TString & ReplaceAll(const char *s1, const char *s2)
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
TString GetListOfMasses()
bool is_inside(double pid)
bool is_above(double pid)
void add(int aa, double pid, double pidmin=-1., double pidmax=-1.)
double eval(KVIdentificationResult *idr)
interval_set(int zz, int type)
bool is_right_of(double pid)
bool is_left_of(double pid)
bool is_inside(double pid)
double min(double x, double y)