18#include "KVParticleCondition.h"
22#include "KVNDTManager.h"
24#include "KVLifeTime.h"
25#include "KVMassExcess.h"
26#include "KVAbundance.h"
27#include "KVChargeRadius.h"
28#include "KVSpinParity.h"
50#define MAXZ_ELEMENT_SYMBOL 118
52 "n",
"H",
"He",
"Li",
"Be",
"B",
"C",
"N",
"O",
53 "F",
"Ne",
"Na",
"Mg",
"Al",
"Si",
"P",
"S",
"Cl",
"Ar",
"K",
"Ca",
55 "Ti",
"V",
"Cr",
"Mn",
"Fe",
"Co",
"Ni",
"Cu",
"Zn",
"Ga",
"Ge",
"As",
57 "Kr",
"Rb",
"Sr",
"Y",
"Zr",
"Nb",
"Mo",
"Tc",
"Ru",
"Rh",
"Pd",
"Ag",
59 "In",
"Sn",
"Sb",
"Te",
"I",
"Xe",
"Cs",
"Ba",
"La",
"Ce",
"Pr",
"Nd",
61 "Sm",
"Eu",
"Gd",
"Tb",
"Dy",
"Ho",
"Er",
"Tm",
"Yb",
"Lu",
"Hf",
"Ta",
63 "Re",
"Os",
"Ir",
"Pt",
"Au",
"Hg",
"Tl",
"Pb",
"Bi",
"Po",
"At",
"Rn",
65 "Ra",
"Ac",
"Th",
"Pa",
"U",
"Np",
"Pu",
"Am",
"Cm",
"Bk",
"Cf",
"Es",
67 "No",
"Lr",
"Rf",
"Db",
"Sg",
"Bh",
"Hs",
"Mt",
"Ds",
"Rg",
"Cn",
"Ed",
92 Bool_t Mpfx = strcmp(opt,
"EL");
93 if (0 <=
GetZ() &&
GetZ() <= MAXZ_ELEMENT_SYMBOL) {
100 return symname.
Data();
126 if (0 <=
GetZ() &&
GetZ() <= MAXZ_ELEMENT_SYMBOL) {
127 if (!strcmp(opt,
"ALL")) symname.
Form(
"{}^{%d}_{%d}%s",
a, z,
fElements[z]);
128 else if (!strcmp(opt,
"EL"))
GetSymbol(opt);
134 return symname.
Data();
161 if (sscanf(tmp.
Data(),
"%d%s", &A,
name) == 2) {
192 if (sscanf(tmp.
Data(),
"%d%s", &A,
name) == 2) {
197 else if (sscanf(tmp.
Data(),
"%s",
name) == 1) {
213 for (
int i = 0; i <= MAXZ_ELEMENT_SYMBOL; i++) {
236 else Error(
"SetZFromSymbol",
"%s is unknown",
sym);
288#if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
328 if (z != 0 &&
a == 0) {
832#if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
845 ((
KVNucleus&) obj).SetMassFormula(fMassFormula);
857 if (z == -1) z =
GetZ();
1062 return (life < 0. ? 1.e+100 : life);
1239 if (z == -1) z =
GetZ();
1246 if (abund > abmax) {
1291 return gNDTManager->
IsInTable(z,
a,
"MassExcess");
1357 if (
a == 0)
return 0;
1407 if (zz == -1) zz =
GetZ();
1415 while (!nla.
End()) {
1431 if (zz == -1) zz =
GetZ();
1439 while (!nla.
End()) {
1466 for (
Int_t zz = zmin; zz <= zmax; zz += 1) {
1469 while (!nla.
End()) {
1487 if (zz == -1) zz =
GetZ();
1492 while (!nla.
End()) {
1571 if (zres < 0 || ares < 0 || eres < 0) {
1572 Warning(
"operator-(const KVNucleus &rhs)",
1573 "Cannot subtract nuclei, resulting Z=%d A=%d E=%lf", zres, ares, eres);
1644 Double_t AUX = 1. + (9. * XJJ / 4. / QQ / X13);
1645 Double_t EE3 = XJJ * A * SI * SI / AUX;
1647 AVOL * A + ASUR *
TMath::Power(A, 2. / 3.) + AC * X13 + AZER;
1648 Double_t TOTA = EE1 + EE2 + EE3 + EE4;
1649 return (939.55 * XNEU + 938.77 *
Z - TOTA);
1773 if (ChargeState == 0) ChargeState =
GetZ();
1775 Double_t X = Brho * C_mparns * ChargeState;
1793 if (!nuc)
return 0.;
1825 Ztot += nuc->
GetZ();
1826 Atot += nuc->
GetA();
1907 vrel =
sqrt(2 * TKE / mu) *
C();
1922 return 0.755 * z1 * z2 / (
pow(a1, 1 / 3.) +
pow(a2, 1 / 3.)) + 7.3;
1934 return 0.1189 * za + 7.3;
1946 return 0.1071 * za + 22.2;
1965 return 0.104 * za + 24.3;
1979 return 39.43 + .085 *
pow(zp + zt, 2) /
pow(ap + at, 1. / 3.);
2049 while (!isotopes.
End()) {
2051 int A = isotopes.
Next();
2053 if (abundance > 0.) {
2054 Aeff += A * abundance;
2059 if (wtot > 0) Aeff /= wtot;
2093 Double_t vel = GetVelocity().Mag();
2112 return 0.04 *
GetZ();
winID h TVirtualViewer3D TVirtualGLPainter p
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 target
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
Value of the relative abundance of isotopes.
static void InitEnvironment()
Simple class for storing charge radius information of nuclei.
Simple class to store lifetime information of nucleus.
Bool_t IsAResonance() const
Simple class for store life time information of nucleus.
Nuclear Data Table manager.
Bool_t IsInTable(Int_t zz, Int_t aa, const Char_t *name) const
Double_t GetValue(Int_t zz, Int_t aa, const Char_t *name) const
KVNuclData * GetData(Int_t zz, Int_t aa, const Char_t *name) const
Double_t GetValue() const
Description of properties and kinematics of atomic nuclei.
UChar_t fZ
nuclear charge number (atomic number)
Double_t ShimaChargeStatePrecision() const
static Double_t hbar
hbar*c in MeV.fm
virtual void Clear(Option_t *opt="")
const Char_t * GetSymbol(Option_t *opt="") const
void SetExcitEnergy(Double_t e)
Double_t GetExtraChargeRadius(Int_t z=-1, Int_t a=-1, Int_t rct=2) const
static Double_t LiquidDrop_BrackGuet(UInt_t A, UInt_t Z)
Double_t GetWidth() const
static Double_t TKE_Viola1985(Double_t z, Double_t a)
from: V. E. Viola, K. Kwiatkowski, and M. Walker, Physical Review C 31, 1550 (1985).
void CheckZAndA(Int_t &z, Int_t &a) const
static Int_t GetNFromZ(Double_t, Char_t mt)
Calculate neutron number from the element's atomic number Z.
UChar_t fA
nuclear mass number
Bool_t IsKnown(int z=-1, int a=-1) const
static Double_t GetRealAFromZ(Double_t, Char_t mt)
Double_t GetSpin(Int_t z=-1, Int_t a=-1) const
Double_t GetExcitEnergy() const
Int_t Compare(const TObject *obj) const
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
Double_t GetMassExcess(Int_t z=-1, Int_t a=-1) const
KVMassExcess * GetMassExcessPtr(Int_t z=-1, Int_t a=-1) const
KVAbundance * GetAbundancePtr(Int_t z=-1, Int_t a=-1) const
static Double_t GetRealNFromZ(Double_t, Char_t mt)
KVNucleus operator+(const KVNucleus &rhs)
virtual void Print(Option_t *t="") const
Display nucleus parameters.
void SetZandN(Int_t z, Int_t n)
Set atomic number and mass number.
static Int_t IsMassGiven(const Char_t *)
KVNucleus & operator=(const KVNucleus &rhs)
KVNucleus assignment operator.
Double_t GetMassGS() const
static Double_t kMe
electron mass in MeV/c2
void SetZ(Int_t z, Char_t mt=-1)
Double_t LiquidDrop_Weizsacker()
Int_t GetMostAbundantA(Int_t z=-1) const
KVNucleus & operator+=(const KVNucleus &rhs)
KVNucleus addition and assignment operator.
Double_t GetNaturalA(Int_t zz=-1) const
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Int_t GetAWithMaxBindingEnergy(Int_t z=-1)
KVNumberList GetKnownARange(Int_t z=-1, Double_t tmin=0) const
Double_t GetExtraMassExcess(Int_t z=-1, Int_t a=-1) const
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Double_t GetRelativeVelocity(KVNucleus *nuc)
Return the reltive velocity between nuc and this in cm/ns.
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin=0) const
Double_t GetBindingEnergyPerNucleon(Int_t z=-1, Int_t a=-1) const
Returns binding energy in MeV/A for this nucleus.
virtual void Copy(TObject &) const
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Int_t GetN() const
Return the number of neutron.
KVNucleus & operator-=(const KVNucleus &rhs)
KVNucleus subtraction and assignment operator.
KVSpinParity * GetSpinParityPtr(Int_t z=-1, Int_t a=-1) const
static UInt_t fNb_nuc
counts number of existing KVNucleus objects
Bool_t IsResonance() const
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Double_t ShimaChargeState(Int_t) const
static Double_t kAMU
atomic mass unit in MeV
int SetZFromSymbol(const Char_t *)
void SetZandA(Int_t z, Int_t a)
Set atomic number and mass number.
const Char_t * GetLatexSymbol(Option_t *opt="") const
Int_t GetNpairs(Int_t type=kNN) const
KVNumberList GetMeasuredARange(Int_t z=-1) const
returns range of a measured mass for a given element
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Double_t GetQFasymTKE(KVNucleus *target)
KVChargeRadius * GetChargeRadiusPtr(Int_t z=-1, Int_t a=-1) const
static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2)
Double_t GetAbundance(Int_t z=-1, Int_t a=-1) const
static Int_t GetZFromSymbol(const Char_t *)
KVLifeTime * GetLifeTimePtr(Int_t z=-1, Int_t a=-1) const
Double_t GetEnergyPerNucleon() const
static Char_t fElements[][3]
symbols of chemical elements
Double_t GetParity(Int_t z=-1, Int_t a=-1) const
static Int_t GetAFromZ(Double_t, Char_t mt)
Double_t GetAtomicMass(Int_t zz=-1, Int_t aa=-1) const
Bool_t IsStable(Double_t min_lifetime=1.0e+15) const
UChar_t fMassFormula
mass formula for calculating A from Z
Double_t GetBindingEnergy(Int_t z=-1, Int_t a=-1) const
Int_t GetZ() const
Return the number of proton / atomic number.
Double_t GetLiquidDropBindingEnergy(Int_t z=-1, Int_t a=-1) const
static Double_t TKE_Viola1966(Double_t z, Double_t a)
from: V. E. Viola, Jr., Nuclear Data Sheets. Section A 1, 391 (1965).
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Double_t GetChargeRadius(Int_t z=-1, Int_t a=-1) const
Double_t GetLifeTime(Int_t z=-1, Int_t a=-1) const
Strings used to represent a set of ranges of values.
void SetMinMax(Int_t min, Int_t max, Int_t pas=1)
Set list with all values from 'min' to 'max'.
void Add(Int_t)
Add value 'n' to the list.
Base class for relativistic kinematics of massive particles.
virtual void SetMass(Double_t m)
TVector3 GetMomentum() const
Double_t GetEnergy() const
void SetKE(Double_t ecin)
virtual void Clear(Option_t *opt="")
Reset particle properties i.e. before creating/reading a new event.
void SetMomentum(const TVector3 *v)
virtual void Copy(TObject &) const
void Set4Mom(const TLorentzVector &p)
virtual void Print(Option_t *t="") const
print out characteristics of particle
TVector3 GetVelocity() const
returns velocity vector in cm/ns units
Spin parity assignment of nuclear levels.
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TLorentzVector operator-() const
void Streamer(TBuffer &) override
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
R__ALWAYS_INLINE Bool_t IsZombie() const
virtual void Error(const char *method, const char *msgfmt,...) const
const char * Data() const
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
void Form(const char *fmt,...)
TString & Remove(EStripType s, char c)
RVec< PromoteTypes< T0, T1 > > pow(const RVec< T0 > &v, const T1 &y)
RVec< PromoteType< T > > exp(const RVec< T > &v)
Expr< UnaryOp< Sqrt< T >, Expr< A, T, D, D2, R >, T >, T, D, D2, R > sqrt(const Expr< A, T, D, D2, R > &rhs)
TMatrixT< Double_t > as(SEXP)
constexpr Double_t Ccgs()
Double_t Sign(Double_t a, Double_t b)
constexpr Double_t Hbarcgs()
Double_t Power(Double_t x, Double_t y)
Double_t Sqrt(Double_t x)
Double_t Max(Double_t a, Double_t b)
#define sym(otri1, otri2)