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 "TEnv.h"
16 #include "KVParticle.h"
17 #include "KVNumberList.h"
18 #include "TLorentzRotation.h"
19 #include "KVString.h"
20 
21 class KVLifeTime;
22 class KVMassExcess;
23 class KVAbundance;
24 class KVChargeRadius;
25 class KVSpinParity;
26 
126 class KVNucleus: public KVParticle {
127 
128 
129 private:
133  static UInt_t fNb_nuc;
134  static Char_t fElements[][3];
136 
137  enum {
138  kIsHeavy = BIT(17) //flag when mass of nucleus is > 255
139  };
140 
141 public:
142  enum { //determines how to calculate mass from Z
147  kEPAXMass
148  };
149  enum { //determines how to calculate radius from Mass
152  kELTON
153  };
154 
155  enum {
160  kViola1966
161  };
162 
163  enum {
167  knp
168  };
169 
170  static Double_t kAMU;
171  static Double_t kMe;
172  static Double_t u(void);
173  static Double_t hbar;
174  static Double_t e2;
175 
176  inline void SetMassFormula(UChar_t mt);
177  inline Int_t GetMassFormula() const
178  {
179  return (Int_t)fMassFormula;
180  }
181 
182  void init();
183  KVNucleus();
184  KVNucleus(const KVNucleus&);
185  virtual void Clear(Option_t* opt = "");
186  KVNucleus(Int_t z, Int_t a = 0, Double_t ekin = 0);
187  KVNucleus(Int_t z, Double_t t, const TVector3& p);
188  KVNucleus(Int_t z, Int_t a, const TVector3& p);
190  KVNucleus(const Char_t*, Double_t EperA = 0);
191 
192 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
193  virtual void Copy(TObject&) const;
194 #else
195  virtual void Copy(TObject&);
196 #endif
198  {
199  return kTRUE;
200  }
201  Int_t Compare(const TObject* obj) const;
203  {
208  return !(fZ == 0 && fA == 0);
209  }
210 
211  virtual ~ KVNucleus();
212  static Int_t GetAFromZ(Double_t, Char_t mt);
213  static Int_t GetNFromZ(Double_t, Char_t mt);
216  const Char_t* GetSymbol(Option_t* opt = "") const;
217  const Char_t* GetLatexSymbol(Option_t* opt = "") const;
218 
219  static Int_t GetZFromSymbol(const Char_t*);
220  int SetZFromSymbol(const Char_t*);
221  void Set(const Char_t*);
222  static Int_t IsMassGiven(const Char_t*);
223 
224  void SetZ(Int_t z, Char_t mt = -1);
225  void SetA(Int_t a);
226  void SetN(Int_t n);
227  void SetZandA(Int_t z, Int_t a);
228  void SetZandN(Int_t z, Int_t n);
229  void SetZAandE(Int_t z, Int_t a, Double_t ekin);
230 
231  virtual void Print(Option_t* t = "") const;
232  Int_t GetZ() const;
233  Int_t GetA() const;
234  Int_t GetN() const;
235 
236  Int_t GetNpairs(Int_t type = kNN) const;
237 
239  {
240  return Double_t(GetA()) / GetZ();
241  }
243  {
244  return Double_t(GetN()) / GetZ();
245  }
247  {
250  return Double_t(GetN() - GetZ()) / GetA();
251  }
253  Double_t GetAMeV() const;
254 
255  void CheckZAndA(Int_t& z, Int_t& a) const;
256 
257  Double_t GetMassExcess(Int_t z = -1, Int_t a = -1) const;
258  Double_t GetExtraMassExcess(Int_t z = -1, Int_t a = -1) const;
259  KVMassExcess* GetMassExcessPtr(Int_t z = -1, Int_t a = -1) const;
260  Double_t GetAtomicMass(Int_t zz = -1, Int_t aa = -1) const ;
261  Double_t GetNaturalA(Int_t zz = -1) const ;
262 
263  Double_t GetBindingEnergy(Int_t z = -1, Int_t a = -1) const;
264  Double_t GetLiquidDropBindingEnergy(Int_t z = -1, Int_t a = -1) const;
265  Double_t GetBindingEnergyPerNucleon(Int_t z = -1, Int_t a = -1) const;
266 
268 
269  KVNumberList GetKnownARange(Int_t z = -1, Double_t tmin = 0) const;
270  KVNumberList GetMeasuredARange(Int_t z = -1) const;
271  const Char_t* GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin = 0) const;
273 
275 
276  Bool_t IsKnown(int z = -1, int a = -1) const;
277  Bool_t IsStable(Double_t min_lifetime = 1.0e+15/*seconds*/) const;
278  Bool_t IsResonance() const;
279  Double_t GetWidth() const;
280 
281  void SetExcitEnergy(Double_t e);
282 
284  {
288  return GetMass() - GetMassGS();
289  }
291  {
293  return (kAMU * GetA() + GetMassExcess());
294  }
295 
296  Double_t GetLifeTime(Int_t z = -1, Int_t a = -1) const;
297  KVLifeTime* GetLifeTimePtr(Int_t z = -1, Int_t a = -1) const;
298 
299  Double_t GetSpin(Int_t z = -1, Int_t a = -1) const;
300  Double_t GetParity(Int_t z = -1, Int_t a = -1) const;
301  KVSpinParity* GetSpinParityPtr(Int_t z = -1, Int_t a = -1) const;
302 
303  Double_t GetAbundance(Int_t z = -1, Int_t a = -1) const;
304  KVAbundance* GetAbundancePtr(Int_t z = -1, Int_t a = -1) const;
305  Int_t GetMostAbundantA(Int_t z = -1) const;
306 
307  Double_t GetChargeRadius(Int_t z = -1, Int_t a = -1) const;
308  KVChargeRadius* GetChargeRadiusPtr(Int_t z = -1, Int_t a = -1) const;
309  Double_t GetExtraChargeRadius(Int_t z = -1, Int_t a = -1, Int_t rct = 2) const;
310 
311  KVNucleus& operator=(const KVNucleus& rhs);
312  KVNucleus operator+(const KVNucleus& rhs);
313  KVNucleus operator-(const KVNucleus& rhs);
314  KVNucleus& operator+=(const KVNucleus& rhs);
315  KVNucleus& operator-=(const KVNucleus& rhs);
316 
318  Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState = 0);
320  Double_t GetFissionTKE(const KVNucleus* nuc = 0, Int_t formula = kDefaultFormula) const;
323 
324  static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2);
329 
331  {
332  return GetZ() == Z;
333  }
335  {
336  return (GetZ() == Z && GetA() == A);
337  }
338 
341 
342  ClassDef(KVNucleus, 7) //Class describing atomic nuclei
343 };
344 
346 {
348  fMassFormula = mt;
349  SetA(GetAFromZ(GetZ(), fMassFormula)); //recalculate A and mass
350 }
351 
352 #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 ClassDef(name, id)
#define BIT(n)
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:126
UChar_t fZ
nuclear charge number (atomic number)
Definition: KVNucleus.h:131
Double_t ShimaChargeStatePrecision() const
Definition: KVNucleus.cpp:2106
static Double_t hbar
hbar*c in MeV.fm
Definition: KVNucleus.h:173
virtual void Clear(Option_t *opt="")
Definition: KVNucleus.cpp:301
const Char_t * GetSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:81
void SetExcitEnergy(Double_t e)
Definition: KVNucleus.cpp:868
Double_t GetExtraChargeRadius(Int_t z=-1, Int_t a=-1, Int_t rct=2) const
Definition: KVNucleus.cpp:1136
static Double_t LiquidDrop_BrackGuet(UInt_t A, UInt_t Z)
Definition: KVNucleus.cpp:1623
void Set(const Char_t *)
Definition: KVNucleus.cpp:180
Double_t GetAMeV() const
Definition: KVNucleus.cpp:1384
Double_t GetWidth() const
Definition: KVNucleus.cpp:2026
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:1930
void CheckZAndA(Int_t &z, Int_t &a) const
Definition: KVNucleus.cpp:855
static Int_t GetNFromZ(Double_t, Char_t mt)
Calculate neutron number from the element's atomic number Z.
Definition: KVNucleus.cpp:639
UChar_t fA
nuclear mass number
Definition: KVNucleus.h:130
Bool_t IsKnown(int z=-1, int a=-1) const
Definition: KVNucleus.cpp:1282
static Double_t GetRealAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:447
Double_t GetSpin(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:990
Double_t GetExcitEnergy() const
Definition: KVNucleus.h:283
Int_t Compare(const TObject *obj) const
Definition: KVNucleus.cpp:1691
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
Definition: KVNucleus.cpp:1810
void init()
Definition: KVNucleus.cpp:248
Double_t GetMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:886
Bool_t IsSortable() const
Definition: KVNucleus.h:197
KVMassExcess * GetMassExcessPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:950
KVAbundance * GetAbundancePtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1262
static Double_t GetRealNFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:517
static Double_t u(void)
Definition: KVNucleus.cpp:1753
KVNucleus operator+(const KVNucleus &rhs)
Definition: KVNucleus.cpp:1527
Bool_t IsDefined() const
Definition: KVNucleus.h:202
virtual void Print(Option_t *t="") const
Display nucleus parameters.
Definition: KVNucleus.cpp:761
void SetZandN(Int_t z, Int_t n)
Set atomic number and mass number.
Definition: KVNucleus.cpp:749
Int_t GetA() const
Definition: KVNucleus.cpp:802
static Int_t IsMassGiven(const Char_t *)
Definition: KVNucleus.cpp:147
void SetA(Int_t a)
Definition: KVNucleus.cpp:658
KVNucleus & operator=(const KVNucleus &rhs)
KVNucleus assignment operator.
Definition: KVNucleus.cpp:1509
void SetN(Int_t n)
Definition: KVNucleus.cpp:688
Double_t GetMassGS() const
Definition: KVNucleus.h:290
static Double_t kMe
electron mass in MeV/c2
Definition: KVNucleus.h:171
void SetZ(Int_t z, Char_t mt=-1)
Definition: KVNucleus.cpp:707
Double_t LiquidDrop_Weizsacker()
Definition: KVNucleus.cpp:1659
Int_t GetMostAbundantA(Int_t z=-1) const
Definition: KVNucleus.cpp:1233
KVNucleus & operator+=(const KVNucleus &rhs)
KVNucleus addition and assignment operator.
Definition: KVNucleus.cpp:1592
Double_t GetNaturalA(Int_t zz=-1) const
Definition: KVNucleus.cpp:2041
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
Definition: KVNucleus.cpp:1883
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Definition: KVNucleus.cpp:1956
Int_t GetAWithMaxBindingEnergy(Int_t z=-1)
Definition: KVNucleus.cpp:1484
KVNumberList GetKnownARange(Int_t z=-1, Double_t tmin=0) const
Definition: KVNucleus.cpp:1401
Double_t GetNsurZ() const
Definition: KVNucleus.h:242
Double_t GetExtraMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:913
@ kEALResMass
Definition: KVNucleus.h:146
Double_t GetChargeAsymetry() const
Definition: KVNucleus.h:246
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Definition: KVNucleus.h:174
Bool_t IsElement(Int_t Z) const
Definition: KVNucleus.h:330
Double_t GetAsurZ() const
Definition: KVNucleus.h:238
Double_t GetRelativeVelocity(KVNucleus *nuc)
Return the reltive velocity between nuc and this in cm/ns.
Definition: KVNucleus.cpp:1790
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin=0) const
Definition: KVNucleus.cpp:1456
@ kHinde1987
Definition: KVNucleus.h:158
@ kViola1985
Definition: KVNucleus.h:159
@ kDefaultFormula
Definition: KVNucleus.h:156
@ kViola1966
Definition: KVNucleus.h:160
@ kItkis1998
Definition: KVNucleus.h:157
Double_t GetBindingEnergyPerNucleon(Int_t z=-1, Int_t a=-1) const
Returns binding energy in MeV/A for this nucleus.
Definition: KVNucleus.cpp:1351
virtual void Copy(TObject &) const
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Definition: KVNucleus.cpp:837
Int_t GetN() const
Return the number of neutron.
Definition: KVNucleus.cpp:784
KVNucleus & operator-=(const KVNucleus &rhs)
KVNucleus subtraction and assignment operator.
Definition: KVNucleus.cpp:1607
Bool_t IsIsotope(Int_t Z, Int_t A) const
Definition: KVNucleus.h:334
KVSpinParity * GetSpinParityPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:970
static UInt_t fNb_nuc
counts number of existing KVNucleus objects
Definition: KVNucleus.h:133
Bool_t IsResonance() const
Definition: KVNucleus.cpp:2011
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Definition: KVNucleus.cpp:1767
Double_t ShimaChargeState(Int_t) const
Definition: KVNucleus.cpp:2065
static Double_t kAMU
atomic mass unit in MeV
Definition: KVNucleus.h:170
int SetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:228
void SetZandA(Int_t z, Int_t a)
Set atomic number and mass number.
Definition: KVNucleus.cpp:724
const Char_t * GetLatexSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:113
TString fSymbolName
Definition: KVNucleus.h:135
Int_t GetNpairs(Int_t type=kNN) const
Definition: KVNucleus.cpp:821
KVNumberList GetMeasuredARange(Int_t z=-1) const
returns range of a measured mass for a given element
Definition: KVNucleus.cpp:1427
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Definition: KVNucleus.cpp:736
Double_t GetQFasymTKE(KVNucleus *target)
Definition: KVNucleus.cpp:1860
KVChargeRadius * GetChargeRadiusPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1196
static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2)
Definition: KVNucleus.cpp:1918
Double_t GetAbundance(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1215
static Int_t GetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:209
KVLifeTime * GetLifeTimePtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1077
Double_t GetEnergyPerNucleon() const
Definition: KVNucleus.cpp:1368
static Char_t fElements[][3]
symbols of chemical elements
Definition: KVNucleus.h:134
void SetMassFormula(UChar_t mt)
Definition: KVNucleus.h:345
Double_t GetParity(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1015
static Int_t GetAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:567
Double_t GetAtomicMass(Int_t zz=-1, Int_t aa=-1) const
Definition: KVNucleus.cpp:932
Bool_t IsStable(Double_t min_lifetime=1.0e+15) const
Definition: KVNucleus.cpp:1992
UChar_t fMassFormula
mass formula for calculating A from Z
Definition: KVNucleus.h:132
Double_t GetBindingEnergy(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1305
Int_t GetZ() const
Return the number of proton / atomic number.
Definition: KVNucleus.cpp:773
virtual ~ KVNucleus()
Double_t GetLiquidDropBindingEnergy(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1330
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:1942
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Definition: KVNucleus.cpp:1974
Double_t GetChargeRadius(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1098
Double_t GetLifeTime(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1043
Int_t GetMassFormula() const
Definition: KVNucleus.h:177
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:574
Spin parity assignment of nuclear levels.
Definition: KVSpinParity.h:16
TLorentzVector operator-() const
Double_t Z() const