KaliVeda
Toolkit for HIC analysis
KVNucleus.h
1 /***************************************************************************
2 $Id: KVNucleus.h,v 1.40 2009/04/02 09:32:55 ebonnet Exp $
3  * *
4  * This program is free software; you can redistribute it and/or modify *
5  * it under the terms of the GNU General Public License as published by *
6  * the Free Software Foundation; either version 2 of the License, or *
7  * (at your option) any later version. *
8  * *
9  ***************************************************************************/
10 
11 #ifndef KVNUCLEUS_H
12 #define KVNUCLEUS_H
13 
14 #include "TVector3.h"
15 #include "KVParticle.h"
16 #include "KVNumberList.h"
17 
18 class KVLifeTime;
19 class KVMassExcess;
20 class KVAbundance;
21 class KVChargeRadius;
22 class KVSpinParity;
23 
123 class KVNucleus: public KVParticle {
124 
125 
126 private:
130  static Char_t fElements[][3];
132 
133  enum {
134  kIsHeavy = BIT(17) //flag when mass of nucleus is > 255
135  };
136 
137 public:
138  enum { //determines how to calculate mass from Z
143  kEPAXMass
144  };
145  enum { //determines how to calculate radius from Mass
148  kELTON
149  };
150 
151  enum {
156  kViola1966
157  };
158 
159  enum {
163  knp
164  };
165 
166  static Double_t kAMU;
167  static Double_t kMe;
168  static Double_t u(void);
169  static Double_t hbar;
170  static Double_t e2;
171 
172  inline void SetMassFormula(UChar_t mt);
173  inline Int_t GetMassFormula() const
174  {
175  return (Int_t)fMassFormula;
176  }
177 
178  void init();
179  KVNucleus();
180  KVNucleus(const KVNucleus&);
181  void Clear(Option_t* opt = "") override;
182  KVNucleus(Int_t z, Int_t a = 0, Double_t ekin = 0);
183  KVNucleus(Int_t z, Double_t t, const TVector3& p);
184  KVNucleus(Int_t z, Int_t a, const TVector3& p);
186  KVNucleus(const Char_t*, Double_t EperA = 0);
187 
188 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
189  void Copy(TObject&) const override;
190 #else
191  virtual void Copy(TObject&);
192 #endif
193  Bool_t IsSortable() const override
194  {
195  return kTRUE;
196  }
197  Int_t Compare(const TObject* obj) const override;
199  {
204  return !(fZ == 0 && fA == 0);
205  }
206 
207  virtual ~ KVNucleus();
208  static Int_t GetAFromZ(Double_t, Char_t mt);
209  static Int_t GetNFromZ(Double_t, Char_t mt);
212  const Char_t* GetSymbol(Option_t* opt = "") const;
213  const Char_t* GetLatexSymbol(Option_t* opt = "") const;
214 
215  static Int_t GetZFromSymbol(const Char_t*);
216  int SetZFromSymbol(const Char_t*);
217  void Set(const Char_t*);
218  static Int_t IsMassGiven(const Char_t*);
219 
220  void SetZ(Int_t z, Char_t mt = -1);
221  void SetA(Int_t a);
222  void SetN(Int_t n);
223  void SetZandA(Int_t z, Int_t a);
224  void SetZandN(Int_t z, Int_t n);
225  void SetZAandE(Int_t z, Int_t a, Double_t ekin);
226 
227  void Print(Option_t* t = "") const override;
228  Int_t GetZ() const;
229  Int_t GetA() const;
230  Int_t GetN() const;
231 
232  Int_t GetNpairs(Int_t type = kNN) const;
233 
235  {
236  return Double_t(GetA()) / GetZ();
237  }
239  {
240  return Double_t(GetN()) / GetZ();
241  }
243  {
246  return Double_t(GetN() - GetZ()) / GetA();
247  }
249  Double_t GetAMeV() const;
250 
251  void CheckZAndA(Int_t& z, Int_t& a) const;
252 
253  Double_t GetMassExcess(Int_t z = -1, Int_t a = -1) const;
254  Double_t GetExtraMassExcess(Int_t z = -1, Int_t a = -1) const;
255  KVMassExcess* GetMassExcessPtr(Int_t z = -1, Int_t a = -1) const;
256  Double_t GetAtomicMass(Int_t zz = -1, Int_t aa = -1) const ;
257  Double_t GetNaturalA(Int_t zz = -1) const ;
258 
259  Double_t GetBindingEnergy(Int_t z = -1, Int_t a = -1) const;
260  Double_t GetLiquidDropBindingEnergy(Int_t z = -1, Int_t a = -1) const;
261  Double_t GetBindingEnergyPerNucleon(Int_t z = -1, Int_t a = -1) const;
262 
264 
265  KVNumberList GetKnownARange(Int_t z = -1, Double_t tmin = 0) const;
266  KVNumberList GetMeasuredARange(Int_t z = -1) const;
267  const Char_t* GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin = 0) const;
269 
271 
272  Bool_t IsKnown(int z = -1, int a = -1) const;
273  Bool_t IsStable(Double_t min_lifetime = 1.0e+15/*seconds*/) const;
274  Bool_t IsResonance() const;
275  Double_t GetWidth() const;
276 
277  void SetExcitEnergy(Double_t e);
278 
280  {
284  return GetMass() - GetMassGS();
285  }
287  {
289  return (kAMU * GetA() + GetMassExcess());
290  }
291 
292  Double_t GetLifeTime(Int_t z = -1, Int_t a = -1) const;
293  KVLifeTime* GetLifeTimePtr(Int_t z = -1, Int_t a = -1) const;
294 
295  Double_t GetSpin(Int_t z = -1, Int_t a = -1) const;
296  Double_t GetParity(Int_t z = -1, Int_t a = -1) const;
297  KVSpinParity* GetSpinParityPtr(Int_t z = -1, Int_t a = -1) const;
298 
299  Double_t GetAbundance(Int_t z = -1, Int_t a = -1) const;
300  KVAbundance* GetAbundancePtr(Int_t z = -1, Int_t a = -1) const;
301  Int_t GetMostAbundantA(Int_t z = -1) const;
302 
303  Double_t GetChargeRadius(Int_t z = -1, Int_t a = -1) const;
304  KVChargeRadius* GetChargeRadiusPtr(Int_t z = -1, Int_t a = -1) const;
305  Double_t GetExtraChargeRadius(Int_t z = -1, Int_t a = -1, Int_t rct = 2) const;
306 
307  KVNucleus& operator=(const KVNucleus& rhs);
308  KVNucleus operator+(const KVNucleus& rhs);
309  KVNucleus operator-(const KVNucleus& rhs);
310  KVNucleus& operator+=(const KVNucleus& rhs);
311  KVNucleus& operator-=(const KVNucleus& rhs);
312 
314  Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState = 0);
316  Double_t GetFissionTKE(const KVNucleus* nuc = 0, Int_t formula = kDefaultFormula) const;
319 
320  static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2);
325 
327  {
328  return GetZ() == Z;
329  }
331  {
332  return (GetZ() == Z && GetA() == A);
333  }
334 
337 
338  ClassDefOverride(KVNucleus, 7) //Class describing atomic nuclei
339 };
340 
342 {
344  fMassFormula = mt;
345  SetA(GetAFromZ(GetZ(), fMassFormula)); //recalculate A and mass
346 }
347 
348 #endif
int Int_t
unsigned int UInt_t
bool Bool_t
unsigned char UChar_t
char Char_t
double Double_t
constexpr Bool_t kTRUE
const char Option_t
#define BIT(n)
#define ClassDefOverride(name, id)
Value of the relative abundance of isotopes.
Definition: KVAbundance.h:16
Simple class for storing charge radius information of nuclei.
Simple class to store lifetime information of nucleus.
Definition: KVLifeTime.h:16
Simple class for store life time information of nucleus.
Definition: KVMassExcess.h:16
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
UChar_t fZ
nuclear charge number (atomic number)
Definition: KVNucleus.h:128
Double_t ShimaChargeStatePrecision() const
Definition: KVNucleus.cpp:2096
static Double_t hbar
hbar*c in MeV.fm
Definition: KVNucleus.h:169
const Char_t * GetSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:71
void Copy(TObject &) const override
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Definition: KVNucleus.cpp:827
void SetExcitEnergy(Double_t e)
Definition: KVNucleus.cpp:858
Double_t GetExtraChargeRadius(Int_t z=-1, Int_t a=-1, Int_t rct=2) const
Definition: KVNucleus.cpp:1126
static Double_t LiquidDrop_BrackGuet(UInt_t A, UInt_t Z)
Definition: KVNucleus.cpp:1613
void Clear(Option_t *opt="") override
Definition: KVNucleus.cpp:291
void Set(const Char_t *)
Definition: KVNucleus.cpp:170
Double_t GetAMeV() const
Definition: KVNucleus.cpp:1374
Double_t GetWidth() const
Definition: KVNucleus.cpp:2016
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).
Definition: KVNucleus.cpp:1920
void CheckZAndA(Int_t &z, Int_t &a) const
Definition: KVNucleus.cpp:845
static Int_t GetNFromZ(Double_t, Char_t mt)
Calculate neutron number from the element's atomic number Z.
Definition: KVNucleus.cpp:628
void Print(Option_t *t="") const override
Display nucleus parameters.
Definition: KVNucleus.cpp:750
UChar_t fA
nuclear mass number
Definition: KVNucleus.h:127
Bool_t IsKnown(int z=-1, int a=-1) const
Definition: KVNucleus.cpp:1272
static Double_t GetRealAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:436
Double_t GetSpin(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:980
Double_t GetExcitEnergy() const
Definition: KVNucleus.h:279
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
Definition: KVNucleus.cpp:1800
void init()
Definition: KVNucleus.cpp:238
Double_t GetMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:876
KVMassExcess * GetMassExcessPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:940
KVAbundance * GetAbundancePtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1252
static Double_t GetRealNFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:506
static Double_t u(void)
Definition: KVNucleus.cpp:1743
@ kHinde1987
Definition: KVNucleus.h:154
@ kViola1985
Definition: KVNucleus.h:155
@ kDefaultFormula
Definition: KVNucleus.h:152
@ kViola1966
Definition: KVNucleus.h:156
@ kItkis1998
Definition: KVNucleus.h:153
KVNucleus operator+(const KVNucleus &rhs)
Definition: KVNucleus.cpp:1517
Bool_t IsDefined() const
Definition: KVNucleus.h:198
void SetZandN(Int_t z, Int_t n)
Set atomic number and mass number.
Definition: KVNucleus.cpp:738
Int_t GetA() const
Definition: KVNucleus.cpp:792
static Int_t IsMassGiven(const Char_t *)
Definition: KVNucleus.cpp:137
void SetA(Int_t a)
Definition: KVNucleus.cpp:647
KVNucleus & operator=(const KVNucleus &rhs)
KVNucleus assignment operator.
Definition: KVNucleus.cpp:1499
void SetN(Int_t n)
Definition: KVNucleus.cpp:677
Double_t GetMassGS() const
Definition: KVNucleus.h:286
static Double_t kMe
electron mass in MeV/c2
Definition: KVNucleus.h:167
void SetZ(Int_t z, Char_t mt=-1)
Definition: KVNucleus.cpp:696
Double_t LiquidDrop_Weizsacker()
Definition: KVNucleus.cpp:1649
Int_t GetMostAbundantA(Int_t z=-1) const
Definition: KVNucleus.cpp:1223
KVNucleus & operator+=(const KVNucleus &rhs)
KVNucleus addition and assignment operator.
Definition: KVNucleus.cpp:1582
Double_t GetNaturalA(Int_t zz=-1) const
Definition: KVNucleus.cpp:2031
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
Definition: KVNucleus.cpp:1873
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Definition: KVNucleus.cpp:1946
@ kEALResMass
Definition: KVNucleus.h:142
Int_t GetAWithMaxBindingEnergy(Int_t z=-1)
Definition: KVNucleus.cpp:1474
KVNumberList GetKnownARange(Int_t z=-1, Double_t tmin=0) const
Definition: KVNucleus.cpp:1391
Double_t GetNsurZ() const
Definition: KVNucleus.h:238
Double_t GetExtraMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:903
Double_t GetChargeAsymetry() const
Definition: KVNucleus.h:242
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Definition: KVNucleus.h:170
Bool_t IsElement(Int_t Z) const
Definition: KVNucleus.h:326
Double_t GetAsurZ() const
Definition: KVNucleus.h:234
Double_t GetRelativeVelocity(KVNucleus *nuc)
Return the reltive velocity between nuc and this in cm/ns.
Definition: KVNucleus.cpp:1780
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin=0) const
Definition: KVNucleus.cpp:1446
Double_t GetBindingEnergyPerNucleon(Int_t z=-1, Int_t a=-1) const
Returns binding energy in MeV/A for this nucleus.
Definition: KVNucleus.cpp:1341
Int_t GetN() const
Return the number of neutron.
Definition: KVNucleus.cpp:774
KVNucleus & operator-=(const KVNucleus &rhs)
KVNucleus subtraction and assignment operator.
Definition: KVNucleus.cpp:1597
Bool_t IsIsotope(Int_t Z, Int_t A) const
Definition: KVNucleus.h:330
KVSpinParity * GetSpinParityPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:960
Int_t Compare(const TObject *obj) const override
Definition: KVNucleus.cpp:1681
Bool_t IsResonance() const
Definition: KVNucleus.cpp:2001
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Definition: KVNucleus.cpp:1757
Double_t ShimaChargeState(Int_t) const
Definition: KVNucleus.cpp:2055
static Double_t kAMU
atomic mass unit in MeV
Definition: KVNucleus.h:166
int SetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:218
void SetZandA(Int_t z, Int_t a)
Set atomic number and mass number.
Definition: KVNucleus.cpp:713
const Char_t * GetLatexSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:103
TString fSymbolName
Definition: KVNucleus.h:131
Int_t GetNpairs(Int_t type=kNN) const
Definition: KVNucleus.cpp:811
KVNumberList GetMeasuredARange(Int_t z=-1) const
returns range of a measured mass for a given element
Definition: KVNucleus.cpp:1417
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Definition: KVNucleus.cpp:725
Double_t GetQFasymTKE(KVNucleus *target)
Definition: KVNucleus.cpp:1850
KVChargeRadius * GetChargeRadiusPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1186
static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2)
Definition: KVNucleus.cpp:1908
Double_t GetAbundance(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1205
static Int_t GetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:199
KVLifeTime * GetLifeTimePtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1067
Double_t GetEnergyPerNucleon() const
Definition: KVNucleus.cpp:1358
static Char_t fElements[][3]
symbols of chemical elements
Definition: KVNucleus.h:130
void SetMassFormula(UChar_t mt)
Definition: KVNucleus.h:341
Double_t GetParity(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1005
static Int_t GetAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:556
Bool_t IsSortable() const override
Definition: KVNucleus.h:193
Double_t GetAtomicMass(Int_t zz=-1, Int_t aa=-1) const
Definition: KVNucleus.cpp:922
Bool_t IsStable(Double_t min_lifetime=1.0e+15) const
Definition: KVNucleus.cpp:1982
UChar_t fMassFormula
mass formula for calculating A from Z
Definition: KVNucleus.h:129
Double_t GetBindingEnergy(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1295
Int_t GetZ() const
Return the number of proton / atomic number.
Definition: KVNucleus.cpp:763
virtual ~ KVNucleus()
Double_t GetLiquidDropBindingEnergy(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1320
static Double_t TKE_Viola1966(Double_t z, Double_t a)
from: V. E. Viola, Jr., Nuclear Data Sheets. Section A 1, 391 (1965).
Definition: KVNucleus.cpp:1932
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Definition: KVNucleus.cpp:1964
Double_t GetChargeRadius(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1088
Double_t GetLifeTime(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1033
Int_t GetMassFormula() const
Definition: KVNucleus.h:173
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:85
Base class for relativistic kinematics of massive particles.
Definition: KVParticle.h:396
Double_t GetMass() const
Definition: KVParticle.h:577
Spin parity assignment of nuclear levels.
Definition: KVSpinParity.h:16
TLorentzVector operator-() const
Double_t Z() const