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");
94 if (Mpfx) symname.
Form(
"%d%s",
a, fElements[z]);
95 else symname = fElements[z];
100 return symname.
Data();
125 if (!strcmp(opt,
"ALL")) symname.
Form(
"{}^{%d}_{%d}%s",
a, z, fElements[z]);
126 else symname.
Form(
"^{%d}%s",
a, fElements[z]);
131 return symname.
Data();
158 if (sscanf(tmp.
Data(),
"%d%s", &A, name) == 2) {
160 Int_t z = GetZFromSymbol(name);
164 Int_t z = GetZFromSymbol(tmp);
189 if (sscanf(tmp.
Data(),
"%d%s", &A, name) == 2) {
191 if (SetZFromSymbol(name) > -1) SetA(A);
194 else if (sscanf(tmp.
Data(),
"%s", name) == 1) {
196 if (SetZFromSymbol(name) == -1) MakeZombie();
211 if (!strcmp(
sym, fElements[i])) {
233 else Error(
"SetZFromSymbol",
"%s is unknown",
sym);
256 fMassFormula = kBetaMass;
285 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
325 if (z != 0 &&
a == 0) {
401 KVNucleus::~KVNucleus()
829 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
842 ((
KVNucleus&) obj).SetMassFormula(fMassFormula);
854 if (z == -1) z =
GetZ();
1059 return (life < 0. ? 1.e+100 : life);
1236 if (z == -1) z =
GetZ();
1243 if (abund > abmax) {
1354 if (
a == 0)
return 0;
1404 if (zz == -1) zz =
GetZ();
1412 while (!nla.
End()) {
1428 if (zz == -1) zz =
GetZ();
1436 while (!nla.
End()) {
1463 for (
Int_t zz = zmin; zz <= zmax; zz += 1) {
1466 while (!nla.
End()) {
1484 if (zz == -1) zz =
GetZ();
1489 while (!nla.
End()) {
1568 if (zres < 0 || ares < 0 || eres < 0) {
1569 Warning(
"operator-(const KVNucleus &rhs)",
1570 "Cannot subtract nuclei, resulting Z=%d A=%d E=%lf", zres, ares, eres);
1641 Double_t AUX = 1. + (9. * XJJ / 4. / QQ / X13);
1642 Double_t EE3 = XJJ * A * SI * SI / AUX;
1644 AVOL * A + ASUR *
TMath::Power(A, 2. / 3.) + AC * X13 + AZER;
1645 Double_t TOTA = EE1 + EE2 + EE3 + EE4;
1646 return (939.55 * XNEU + 938.77 *
Z - TOTA);
1770 if (ChargeState == 0) ChargeState =
GetZ();
1772 Double_t X = Brho * C_mparns * ChargeState;
1790 if (!nuc)
return 0.;
1822 Ztot += nuc->
GetZ();
1823 Atot += nuc->
GetA();
1904 vrel =
sqrt(2 * TKE / mu) *
C();
1919 return 0.755 * z1 * z2 / (
pow(a1, 1 / 3.) +
pow(a2, 1 / 3.)) + 7.3;
1931 return 0.1189 * za + 7.3;
1943 return 0.1071 * za + 22.2;
1962 return 0.104 * za + 24.3;
1976 return 39.43 + .085 *
pow(zp + zt, 2) /
pow(ap + at, 1. / 3.);
2046 while (!isotopes.
End()) {
2048 int A = isotopes.
Next();
2050 if (abundance > 0.) {
2051 Aeff += A * abundance;
2056 if (wtot > 0) Aeff /= wtot;
2090 Double_t vel = GetVelocity().Mag();
2109 return 0.04 *
GetZ();
2119 void KVNucleus::Streamer(
TBuffer& R__b)
KVNDTManager * gNDTManager
#define MAXZ_ELEMENT_SYMBOL
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
double pow(double, double)
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
void SetMomentum(const TVector3 &v)
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.
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 Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TLorentzVector operator-() const
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
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
const char * Data() const
void Form(const char *fmt,...)
TString & Remove(EStripType s, char c)
VecExpr< UnaryOp< Sqrt< T >, SVector< T, D >, T >, T, D > sqrt(const SVector< T, D > &rhs)
std::array< T, i > as(SEXP &obj)
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)