25 fTables.SetOwner(
kTRUE);
27 fIgnoreMassID =
false;
98 min = (pidrange(pidrange.
Index(
"-") + 1, pidrange.
Length()));
150 double pidmin, pidmax, pid;
152 else if (
type == 2) {
157 itv->
add(aa, pid, pidmin, pidmax);
227 for (
int ii = 1; ii < 30; ii++) {
256 if (it && it->
is_inside(pid))
return zint + 1;
261 if (it && it->
is_inside(pid))
return zint - 1;
334 if (!idr->
IDOK)
return;
337 bool mass_id_success =
false;
339 if (have_pid_range_for_Z
343 if (mass_id_success) {
368 if (mass_id_success) idr->
SetComment(
"slight ambiguity of A, which could be larger");
369 else idr->
SetComment(
"slight ambiguity of Z, which could be larger");
372 if (mass_id_success) idr->
SetComment(
"slight ambiguity of A, which could be smaller");
373 else idr->
SetComment(
"slight ambiguity of Z, which could be smaller");
376 if (mass_id_success) idr->
SetComment(
"slight ambiguity of A, which could be larger or smaller");
377 else idr->
SetComment(
"slight ambiguity of Z, which could be larger or smaller");
380 if (mass_id_success) idr->
SetComment(
"point is outside of mass identification range");
381 else idr->
SetComment(
"point is in between two lines of different Z, too far from either to be considered well-identified");
384 if (mass_id_success) idr->
SetComment(
"point is in between two isotopes A & A+2 (e.g. 5He, 8Be, 9B)");
385 else idr->
SetComment(
"point is in between two lines of different Z, too far from either to be considered well-identified");
388 idr->
SetComment(
"(x,y) is below first line in grid");
391 idr->
SetComment(
"(x,y) is above last line in grid");
394 idr->
SetComment(
"no identification: (x,y) out of range covered by grid");
415 if (!zint)
return -1;
416 if (zint != idr->
Z) idr->
Z = zint;
420 if (it) res = it->
eval(idr);
436 if (!itvs->
GetNPID())
continue;
444 if (!itvs->
GetNPID())
continue;
465 double pid = idr->
PID;
466 if (pid < 0.5)
return 0.;
476 interval* left_int(
nullptr), *right_int(
nullptr);
481 ares = inter->
GetA();
504 if (!right_int || !left_int) {
512 int dA = right_int->
GetA() - left_int->GetA();
609 Error(
"add",
"Wrong interval for Z=%d and A=%d: [%.4lf %.4lf %.4lf] (%s)",
fZ, aa, pidmin, pid, pidmax,
GetName());
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
char * Form(const char *fmt,...)
virtual void WriteToAsciiFile(std::ofstream &gridfile)
KVNameValueList * fPar
parameters associated to grid
virtual void ReadFromAsciiFile(std::ifstream &gridfile)
KVList * GetInfos() const
const Char_t * GetName() const
KVNameValueList * GetParameters() const
KVList * GetIdentifiers() const
Hybrid identification grid.
Bool_t fHasMassIDRegion
set to true if grid has a limited region for mass identification, indicated by an info "MassID"
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
virtual void ReadFromAsciiFile(std::ifstream &gridfile)
KVList * GetIntervalSets()
virtual ~KVIDZAFromZGrid()
Destructor.
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
Bool_t IdentifyingGridHasFlag(TString flag)
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 Zident
=kTRUE if Z of particle established
void SetValue(const Char_t *name, value_type value)
void RemoveParameter(const Char_t *name)
const Char_t * GetStringValue(const Char_t *name) const
Bool_t HasParameter(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 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 SetPoint(Int_t i, Double_t x, Double_t y)
virtual Double_t Eval(Double_t x, TSpline *spline=nullptr, Option_t *option="") const
virtual const char * GetName() const
virtual void SetName(const char *name)
virtual Bool_t InheritsFrom(const char *classname) const
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
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)