KaliVeda
Toolkit for HIC analysis
|
Isoscaling class.
Kaliveda libs ROOT libs
Class used to estimate isoscaling alpha coefficient and extract Csym/T from input data files (Z fixed)
See Phys. Rev. Lett. 86, 5023 (2001) and also Phys. Rev. C 75, 044605 bis (2007) for more details about the isoscaling method. This class was used in Fable et al., Phys. Rev. C 106 024605 (2022).
Isoscaling corresponds to the scaling behaviour obtained from the ratio \( R_{21}(N,Z) \) of the same isotope measured with two colliding systems differing in their neutron-to-proton content, \( Y_{(1)}(N,Z) \) and \( Y_{(2)}(N,Z) \), where \( (2) \) stands for the neutron-rich system.
In a variety of HIC an exponential dependence of the ratio on \(N\) and \(Z\) is observed, such as
\[ R_{21}(N,Z) = \frac{Y_{(2)}(N,Z)}{Y_{(1)}(N,Z)} = C\,exp\left[ \alpha N + \beta Z \right] \]
where \( C \) is an overall normalization constant while \( \alpha \) and \( \beta \) are the isoscaling parameters.
For a fixed charge \( Z \), \( \alpha(Z) \) can be extracted from a linear fit to the natural logarithm of the yield ratio \( R_{21} \) as a function of the neutron number \( N \).
A Gaussian approximation of the yields in the grand-canonical approximation allows to link the \(\alpha\) parameter to the symmetry energy coefficient \( C_{sym} \) divided by the temperature \( T \):
\[ \frac{C_{sym}(Z)}{T} = \frac{\alpha(Z)}{4\Delta (Z)} \]
with
\[ \Delta (Z) = \left( \frac{Z}{\langle A_{1}(Z) \rangle} \right)^{2} - \left( \frac{Z}{\langle A_{2}(Z) \rangle} \right)^{2} \]
where \( \langle A_{1}(Z)\rangle \) and \( \langle A_{2}(Z)\rangle \) are the average masses corresponding to the isotope charge \(Z\) for systems \( (1) \) and \( (2) \), respectively.
First, initialize the isoscaling class:
Then import (at least) two ASCII files (one for each studied system) containing the yields for each charge. Each system is referenced by a string set by the user at the importation.
Format of the data in an input file must be the following:
Assuming a string (const Char_t *my_path
) representing the name of the ASCII file to open, containing the yields data for a given system to be referenced by const std::string& system_name
. The yields can be imported using:
After the importation, a gaussian fit will be applied the each individual isotopic yield in order to extract the average mass \( \langle A(Z)\rangle \) for each element (see BuildGaussianPlots() method for more details).
Results of the importation can be accessed from various functions:
Isoscaling is expected in a mass region where the Gaussian approximation is verified. For this reason, it can be necessary to limit the region of experimental points where the isoscaling fitting procedure is applied.
The approach we use is to limit the fit in a region around \( \langle A(Z)\rangle \pm tol \cdot rms \), where \( rms \) is the standard deviation of \( \langle A(Z)\rangle \) and \( tol \) is a threshold that can be set by the user.
By default, \( tol = 2.5 \). It can be modified by calling:
It is also possible to test "by-hand" and optimize the \( tol \) threshold. Assuming two systems referenced by const std::string& system_name1
and const std::string& system_name2
, for a given charge (Int_t zz
) the quality of the Gaussian approximation can be tested with the following method:
This will plot a graph of the desired isotopic yield with and without the tolerance applied, superimposed to the gaussian fits.
Asumming two systems referenced by const std::string& system_name1
and const std::string& system_name2
, the \(ln(R_{21})\) vs \(N\) graphs are built by calling:
Note that the tolerance threshold of the Gaussian approximation is applied here (see SetRMSTolerance() method).
To fit the graphs use:
To draw the isoscaling fit results use:
The following method allows to exploit the isoscaling fit results ( \(\alpha\), \(\Delta\), \(C_{sym}/T=\alpha/4\Delta\)).
Results can be saved in ASCII file using:
Results can be saved in ROOT file using:
Definition at line 198 of file KVIsoscaling.h.
#include <KVIsoscaling.h>
Public Member Functions | |
KVIsoscaling () | |
void | BuildIsoscalingPlots (const std::string &system_name1, const std::string &system_name2, Int_t mcolor, Int_t mstyle, Bool_t draw=kFALSE) |
void | BuildLnR21vsNPlots (const std::string &system_name1, const std::string &system_name2) |
void | CreateCsymOverTMultiGraph (TMultiGraph *mgr) |
void | DrawAlphavsNFits (const std::string &system_name1, const std::string &system_name2) |
void | DrawLnR21vsNFits (const std::string &system_name1, const std::string &system_name2) |
Int_t | FindZFromAmean (const std::string &system_name, Int_t aa) |
void | FitLnR21vsNPlots (const std::string &system_name1, const std::string &system_name2, Option_t *option="MNVR", Option_t *gooption="goff") |
Bool_t | GetAlpha (const std::string &system_name1, const std::string &system_name2, Int_t zz, Float_t &alpha, Float_t &alpha_err) |
Bool_t | GetAMean (const std::string &system_name, Int_t zz, Float_t &meanA, Float_t &meanA_err) |
— Getters — | |
KVNumberList | GetANumberList (const std::string &system_name, Int_t zz) |
Bool_t | GetCsymOverT (const std::string &system_name1, const std::string &system_name2, Int_t zz, Float_t &csymT, Float_t &csymT_err, Bool_t debug) |
Bool_t | GetDeltaZA2 (const std::string &system_name1, const std::string &system_name2, Int_t zz, Float_t &denum, Float_t &denum_err, Bool_t debug) |
Double_t | GetRMSTolerance () |
KVNumberList | GetSharedANumberList (const std::string &system_name1, const std::string &system_name2, Int_t zz) |
KVNumberList | GetSharedZNumberList (const std::string &system_name1, const std::string &system_name2) |
KVNumberList | GetZNumberList (const std::string &system_name) |
void | PrintSystemsList () |
void | PrintYieldsList () |
— Printers — | |
void | ReadYieldsFile (const std::string &system_name, const Char_t *file_path) |
void | SaveResultsASCII (const Char_t *file_name="./isoscaling_output_file.txt") |
void | SaveResultsROOT (const Char_t *file_name="./isoscaling_output_file.root") |
void | SetRMSTolerance (Double_t tol) |
void | SetVerbose (Bool_t debug) |
— inline methods — | |
void | TestGaussianApprox (const std::string &system_name1, const std::string &system_name2, Int_t zz, Double_t tol) |
Public Member Functions inherited from TObject | |
TObject () | |
TObject (const TObject &object) | |
virtual | ~TObject () |
void | AbstractMethod (const char *method) const |
virtual void | AppendPad (Option_t *option="") |
virtual void | Browse (TBrowser *b) |
ULong_t | CheckedHash () |
virtual const char * | ClassName () const |
virtual void | Clear (Option_t *="") |
virtual TObject * | Clone (const char *newname="") const |
virtual Int_t | Compare (const TObject *obj) const |
virtual void | Copy (TObject &object) const |
virtual void | Delete (Option_t *option="") |
virtual Int_t | DistancetoPrimitive (Int_t px, Int_t py) |
virtual void | Draw (Option_t *option="") |
virtual void | DrawClass () const |
virtual TObject * | DrawClone (Option_t *option="") const |
virtual void | Dump () const |
virtual void | Error (const char *method, const char *msgfmt,...) const |
virtual void | Execute (const char *method, const char *params, Int_t *error=nullptr) |
virtual void | Execute (TMethod *method, TObjArray *params, Int_t *error=nullptr) |
virtual void | ExecuteEvent (Int_t event, Int_t px, Int_t py) |
virtual void | Fatal (const char *method, const char *msgfmt,...) const |
virtual TObject * | FindObject (const char *name) const |
virtual TObject * | FindObject (const TObject *obj) const |
virtual Option_t * | GetDrawOption () const |
virtual const char * | GetIconName () const |
virtual const char * | GetName () const |
virtual char * | GetObjectInfo (Int_t px, Int_t py) const |
virtual Option_t * | GetOption () const |
virtual const char * | GetTitle () const |
virtual UInt_t | GetUniqueID () const |
virtual Bool_t | HandleTimer (TTimer *timer) |
virtual ULong_t | Hash () const |
Bool_t | HasInconsistentHash () const |
virtual void | Info (const char *method, const char *msgfmt,...) const |
virtual Bool_t | InheritsFrom (const char *classname) const |
virtual Bool_t | InheritsFrom (const TClass *cl) const |
virtual void | Inspect () const |
void | InvertBit (UInt_t f) |
virtual TClass * | IsA () const |
Bool_t | IsDestructed () const |
virtual Bool_t | IsEqual (const TObject *obj) const |
virtual Bool_t | IsFolder () const |
R__ALWAYS_INLINE Bool_t | IsOnHeap () const |
virtual Bool_t | IsSortable () const |
R__ALWAYS_INLINE Bool_t | IsZombie () const |
virtual void | ls (Option_t *option="") const |
void | MayNotUse (const char *method) const |
virtual Bool_t | Notify () |
void | Obsolete (const char *method, const char *asOfVers, const char *removedFromVers) const |
void | operator delete (void *ptr) |
void | operator delete (void *ptr, void *vp) |
void | operator delete[] (void *ptr) |
void | operator delete[] (void *ptr, void *vp) |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, void *vp) |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, void *vp) |
TObject & | operator= (const TObject &rhs) |
virtual void | Paint (Option_t *option="") |
virtual void | Pop () |
virtual void | Print (Option_t *option="") const |
virtual Int_t | Read (const char *name) |
virtual void | RecursiveRemove (TObject *obj) |
void | ResetBit (UInt_t f) |
virtual void | SaveAs (const char *filename="", Option_t *option="") const |
virtual void | SavePrimitive (std::ostream &out, Option_t *option="") |
void | SetBit (UInt_t f) |
void | SetBit (UInt_t f, Bool_t set) |
virtual void | SetDrawOption (Option_t *option="") |
virtual void | SetUniqueID (UInt_t uid) |
virtual void | Streamer (TBuffer &) |
void | StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b) |
virtual void | SysError (const char *method, const char *msgfmt,...) const |
R__ALWAYS_INLINE Bool_t | TestBit (UInt_t f) const |
Int_t | TestBits (UInt_t f) const |
virtual void | UseCurrentStyle () |
virtual void | Warning (const char *method, const char *msgfmt,...) const |
virtual Int_t | Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0) |
virtual Int_t | Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0) const |
Private Member Functions | |
void | BuildGaussianPlots (const std::string &system_name) |
Private Attributes | |
Bool_t | fdebug_ |
verbose mode for debugging | |
std::unordered_map< std::string, Isoscaling_t > | fIsoscalingList_ |
(hash) map by name | |
std::unordered_map< std::string, System_t > | fSystemList_ |
(hash) map by name | |
Double_t | ftol_ |
tolerance for the gaussian approximation (in sigma) | |
Additional Inherited Members | |
Public Types inherited from TObject | |
enum | EDeprecatedStatusBits |
enum | EStatusBits |
Static Public Member Functions inherited from TObject | |
static TClass * | Class () |
static const char * | Class_Name () |
static constexpr Version_t | Class_Version () |
static const char * | DeclFileName () |
static Longptr_t | GetDtorOnly () |
static Bool_t | GetObjectStat () |
static void | SetDtorOnly (void *obj) |
static void | SetObjectStat (Bool_t stat) |
Public Attributes inherited from TObject | |
kBitMask | |
kCanDelete | |
kCannotPick | |
kHasUUID | |
kInconsistent | |
kInvalidObject | |
kIsOnHeap | |
kIsReferenced | |
kMustCleanup | |
kNoContextMenu | |
kNotDeleted | |
kObjInCanvas | |
kOverwrite | |
kSingleKey | |
kWriteDelete | |
kZombie | |
Protected Member Functions inherited from TObject | |
virtual void | DoError (int level, const char *location, const char *fmt, va_list va) const |
void | MakeZombie () |
Protected Attributes inherited from TObject | |
kOnlyPrepStep | |
|
inline |
Default constructor
Definition at line 201 of file KVIsoscaling.h.
|
private |
Method to build the plots used to check the gaussian approximation Also compute the average masses for each charge \(\langle A(Z)\rangle\)
[in] | system | name |
Definition at line 108 of file KVIsoscaling.cpp.
void KVIsoscaling::BuildIsoscalingPlots | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Int_t | mcolor, | ||
Int_t | mstyle, | ||
Bool_t | draw = kFALSE |
||
) |
This method allows to create isoscaling results plots for a given system pair :
\(\alpha\) vs \(Z\) \(\Delta\) vs \(Z\) \(\alpha\) vs \(\Delta\) \(Csym/T\) vs \(Z\)
To compute \(C_{sym}/T\), we use the usual isoscaling formula (see for ex. Raduta & Gulminelli, PRC 75 044605 bis (2007), Eq.(16)) :
\[ C_{sym}(\langle A(Z) \rangle)/T = \alpha(Z)/\Delta(Z) \]
where
\[ \Delta = (Z/\langle A_{1}(Z) \rangle)^{2}-(Z/\langle A_{2}(Z) \rangle)^{2} \]
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
[in] | mcolor | color to use for drawing |
[in] | mstyle | style to use for drawing |
[in] | draw | =kTRUE if we want to plot the result |
Definition at line 570 of file KVIsoscaling.cpp.
void KVIsoscaling::BuildLnR21vsNPlots | ( | const std::string & | system_name1, |
const std::string & | system_name2 | ||
) |
Method to compute the ratio \(ln(R_{21})\) of the yields \(Y_{i}(A,Z)\) of 2 asymetric reactions \((2)\) and \((1)\) (projectiles and targets of reactions \((2)\) and \((1)\) only differ in their respective number of neutrons).
We are interested in extracting the alpha isoscaling parameter, thus we want to draw \(ln(R_{21})\) as a function of \(N\) for a given \(Z\). The tolerance parameter \(tol\) is used to limit the number of points used to build the plots (see GetRMSTolerance() method).
[in] system_name1 name of the n-deficient system [in] system_name2 name of the n-rich system index
Definition at line 319 of file KVIsoscaling.cpp.
void KVIsoscaling::CreateCsymOverTMultiGraph | ( | TMultiGraph * | mgr | ) |
This method creates a TMultiGraph containing all the \(C_{sym}/T\) isoscaling results (for all combination of systems pairs already tested).
[in] | mgr | pointer to the TMultiGraph provided by the user |
Definition at line 680 of file KVIsoscaling.cpp.
void KVIsoscaling::DrawAlphavsNFits | ( | const std::string & | system_name1, |
const std::string & | system_name2 | ||
) |
void KVIsoscaling::DrawLnR21vsNFits | ( | const std::string & | system_name1, |
const std::string & | system_name2 | ||
) |
This method draws the results of \(ln(R_{21})\) vs \(N\) linear fits for the given system pair.
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
Definition at line 508 of file KVIsoscaling.cpp.
Returns the charge \(Z\) (element) associated to the provided mass \(A\) such as \(\langle A(Z) \rangle = A \).
[in] | system_name | name of the system |
[in] | aa | mass |
Definition at line 918 of file KVIsoscaling.cpp.
void KVIsoscaling::FitLnR21vsNPlots | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Option_t * | option = "MNVR" , |
||
Option_t * | gooption = "goff" |
||
) |
This method applies a linear fit to the \(ln(R_{21})\) ratios to extract \(\alpha\) isoscaling parameters (for each element shared between the two systems).
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
[in] | option | fit options |
[in] | gooption | graphic fit options |
Definition at line 460 of file KVIsoscaling.cpp.
Bool_t KVIsoscaling::GetAlpha | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Int_t | zz, | ||
Float_t & | alpha, | ||
Float_t & | alpha_err | ||
) |
This method extracts the isoscaling \(\alpha\) parameter.
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
[in] | zz | charge for the element the isoscaling fit was applied |
[out] | alpha | isoscaling fit parameter \(\alpha\) |
[out] | alpha_err | error on the isoscaling fit parameter \(\alpha\) |
Definition at line 965 of file KVIsoscaling.cpp.
Bool_t KVIsoscaling::GetAMean | ( | const std::string & | system_name, |
Int_t | zz, | ||
Float_t & | meanA, | ||
Float_t & | meanA_err | ||
) |
— Getters —
This method returns the average mass \( \langle A(Z) \rangle \) of the given element (charge \(Z\)) for the given system. The average mass and associated uncertainty are obtained from the result of a gaussian fit applied to the isotopic distribution.
[in] | system_name | name of the system |
[in] | zz | charge of the element |
[out] | meanA | average mass |
[out] | meanA_err | error on the average mass |
Definition at line 883 of file KVIsoscaling.cpp.
KVNumberList KVIsoscaling::GetANumberList | ( | const std::string & | system_name, |
Int_t | zz | ||
) |
This method returns the list of all isotopes for the given element.
[in] | system_name | name of the system |
[in] | zz | charge of the element |
Definition at line 1172 of file KVIsoscaling.cpp.
Bool_t KVIsoscaling::GetCsymOverT | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Int_t | zz, | ||
Float_t & | csymT, | ||
Float_t & | csymT_err, | ||
Bool_t | debug | ||
) |
This method returns the value of \(C_{sym}/T\) from isoscaling method such as (see for ex. Raduta & Gulminelli, PRC 75 044605 (2007) Eq.(16))
\[ C_{sym}/T = \alpha/4\Delta \]
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
[in] | zz | charge for the element the isoscaling fit was applied |
[out] | csymT | value of the ratio \(C_{sym}/T = \alpha/4\Delta\) |
[out] | csymT_err | error on the ratio \(C_{sym}/T = \alpha/4\Delta\) |
Definition at line 1060 of file KVIsoscaling.cpp.
Bool_t KVIsoscaling::GetDeltaZA2 | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Int_t | zz, | ||
Float_t & | denum, | ||
Float_t & | denum_err, | ||
Bool_t | debug | ||
) |
This method returns the value of the asymmetry parameter \( \Delta \) (denumerator for \( C_{sym}/T \) estimation), such as
\[ \Delta = (Z/\langle A_{1} \rangle)^{2}-(Z/ \langle A_{2} \rangle)^{2} \]
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
[in] | zz | charge for the element the isoscaling fit was applied |
[out] | denum | asymmetry parameter \(\Delta\) |
[out] | denum_err | error on the asymmetry parameter \(\Delta\) |
Definition at line 1007 of file KVIsoscaling.cpp.
|
inline |
Definition at line 228 of file KVIsoscaling.h.
KVNumberList KVIsoscaling::GetSharedANumberList | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Int_t | zz | ||
) |
This method returns the list of all isotopes shared between the two provided systems for the given element.
[in] | system_name1 | name of the first system |
[in] | system_name2 | name of the second system |
[in] | zz | charge of the element |
Definition at line 1203 of file KVIsoscaling.cpp.
KVNumberList KVIsoscaling::GetSharedZNumberList | ( | const std::string & | system_name1, |
const std::string & | system_name2 | ||
) |
This method returns the list of all elements shared between the two provided systems.
[in] | system_name1 | name of the first system |
[in] | system_name2 | name of the second system |
Definition at line 1139 of file KVIsoscaling.cpp.
KVNumberList KVIsoscaling::GetZNumberList | ( | const std::string & | system_name | ) |
This method returns the list of elements of a given system
[in] | system_name | name of the system |
Definition at line 1110 of file KVIsoscaling.cpp.
void KVIsoscaling::PrintSystemsList | ( | ) |
Definition at line 1272 of file KVIsoscaling.cpp.
void KVIsoscaling::PrintYieldsList | ( | ) |
— Printers —
Definition at line 1234 of file KVIsoscaling.cpp.
Read and save yields from file provided by the user and fill the corresponding structs and maps Input ASCII file format is : Z A Yield Yield_err
[in] | system | name |
[in] | path | for the input ASCII file |
Definition at line 36 of file KVIsoscaling.cpp.
This method allows to save results in a *.txt file.
[in] | file_name | output file path |
Definition at line 800 of file KVIsoscaling.cpp.
This method allows to save the yields and the isoscaling fits and graphs ( \(ln(R_{21})\), \(\alpha\), \(\Delta\), \(C_{sym}/T\) graphs) in a *.root file.
[in] | file_name | output file path |
Definition at line 706 of file KVIsoscaling.cpp.
Definition at line 248 of file KVIsoscaling.h.
— inline methods —
Definition at line 243 of file KVIsoscaling.h.
void KVIsoscaling::TestGaussianApprox | ( | const std::string & | system_name1, |
const std::string & | system_name2, | ||
Int_t | zz, | ||
Double_t | tol | ||
) |
Method to test the tolerance threshold of the gaussian approximation for a given charge (element) \(Z\). Assuming a tolerance \(tol\) set by the user and an average mass \(\langle A(Z)\rangle\) with a standard deviation \( rms(Z) \), the region of experimental points will be limited to \( \langle A(Z)\rangle \pm tol \cdot rms(Z) \). This method allows to test and plot the results of various tolerance thresholds.
[in] | system_name1 | name of the n-deficient system |
[in] | system_name2 | name of the n-rich system |
[in] | zz | fixed charge for the isotopic yields to be tested |
[in] | tol | threshold to be tested |
Definition at line 189 of file KVIsoscaling.cpp.
|
private |
verbose mode for debugging
Definition at line 257 of file KVIsoscaling.h.
|
private |
(hash) map by name
Definition at line 255 of file KVIsoscaling.h.
|
private |
(hash) map by name
Definition at line 254 of file KVIsoscaling.h.
|
private |
tolerance for the gaussian approximation (in sigma)
Definition at line 258 of file KVIsoscaling.h.