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 <optional>
15 #include "TVector3.h"
16 #include "KVParticle.h"
17 #include "KVNumberList.h"
18 #include "tknucleus.h"
19 
108 class KVNucleus: public KVParticle {
109 
110 
111 private:
112  UChar_t fA;
113  UChar_t fZ;
114  UChar_t fMassFormula;
115  mutable TString fSymbolName;
116 
117  enum {
118  kIsHeavy = BIT(17) //flag when mass of nucleus is > 255
119  };
120 
121 public:
122  enum { //determines how to calculate mass from Z
127  kEPAXMass
128  };
129  enum { //determines how to calculate radius from Mass
132  kELTON
133  };
134 
135  enum {
140  kViola1966
141  };
142 
143  enum {
147  knp
148  };
149 
150  static Double_t kAMU;
151  static Double_t kMe;
152  static Double_t u(void);
153  static Double_t hbar;
154  static Double_t e2;
155 
156  inline void SetMassFormula(UChar_t mt);
157  inline Int_t GetMassFormula() const
158  {
159  return (Int_t)fMassFormula;
160  }
161 
162  void init();
163  KVNucleus();
164  KVNucleus(const KVNucleus&);
165  void Clear(Option_t* opt = "") override;
166  KVNucleus(Int_t z, Int_t a = 0, Double_t ekin = 0);
167  KVNucleus(Int_t z, Double_t t, const TVector3& p);
168  KVNucleus(Int_t z, Int_t a, const TVector3& p);
169  KVNucleus(const Char_t*, Double_t EperA = 0);
170 
171  void Copy(TObject&) const override;
172  Bool_t IsSortable() const override
173  {
174  return kTRUE;
175  }
176  Int_t Compare(const TObject* obj) const override;
178  {
183  return !(fZ == 0 && fA == 0);
184  }
185 
186  virtual ~ KVNucleus();
187  static Int_t GetAFromZ(Double_t, Char_t mt);
188  static Int_t GetNFromZ(Double_t, Char_t mt);
191  const Char_t* GetSymbol(Option_t* opt = "") const;
192  const Char_t* GetLatexSymbol(Option_t* opt = "") const;
193 
194  static Int_t GetZFromSymbol(const Char_t*);
195  int SetZFromSymbol(const Char_t*);
196  void Set(const Char_t*);
197  static Int_t IsMassGiven(const Char_t*);
198 
199  void SetZ(Int_t z, Char_t mt = -1);
200  void SetA(Int_t a);
201  void SetN(Int_t n);
202  void SetZandA(Int_t z, Int_t a);
203  void SetZandN(Int_t z, Int_t n);
204  void SetZAandE(Int_t z, Int_t a, Double_t ekin);
205 
206  void Print(Option_t* t = "") const override;
207  Int_t GetZ() const;
208  Int_t GetA() const;
209  Int_t GetN() const;
210 
211  Int_t GetNpairs(Int_t type = kNN) const;
212 
214  {
215  return Double_t(GetA()) / GetZ();
216  }
218  {
219  return Double_t(GetN()) / GetZ();
220  }
222  {
225  return Double_t(GetN() - GetZ()) / GetA();
226  }
228  Double_t GetAMeV() const;
229 
230  void CheckZAndA(std::optional<Int_t>& z, std::optional<Int_t>& a) const;
231 
232  Double_t GetMassExcess(std::optional<int> z = {}, std::optional<int> a = {}) const;
233  Double_t GetExtraMassExcess(std::optional<int> z = {}, std::optional<int> a = {}) const;
234  Double_t GetAtomicMass(std::optional<int> z = {}, std::optional<int> a = {}) const ;
235  Double_t GetNaturalA(std::optional<int> z = {}) const ;
236 
237  Double_t GetBindingEnergy(std::optional<int> z = {}, std::optional<int> a = {}) const;
238  Double_t GetLiquidDropBindingEnergy(std::optional<int> z = {}, std::optional<int> a = {}) const;
239  Double_t GetBindingEnergyPerNucleon(std::optional<int> z = {}, std::optional<int> a = {}) const;
240 
242 
243  KVNumberList GetKnownARange(std::optional<int> z = {}, std::optional<double> tmin = {}) const;
244  KVNumberList GetMeasuredARange(std::optional<int> z = {}) const;
245  const Char_t* GetIsotopesList(Int_t zmin, Int_t zmax, std::optional<double> tmin = {}) const;
246  Int_t GetAWithMaxBindingEnergy(std::optional<int> z = {});
247 
249 
250  Bool_t IsKnown(std::optional<int> z = {}, std::optional<int> a = {}) const;
251  Bool_t IsStable(Double_t min_lifetime = 1.0e+15/*seconds*/) const;
252  Bool_t IsResonance(std::optional<int> z = {}, std::optional<int> a = {}) const;
253  std::optional<double> GetWidth(std::optional<int> z = {}, std::optional<int> a = {}) const;
254 
255  void SetExcitEnergy(Double_t e);
256 
258  {
263  return GetMass() - GetMassGS();
264  }
266  {
268  return (kAMU * GetA() + GetMassExcess());
269  }
270 
271  tkn::tknucleus GetTkNucleus(std::optional<int> z = {}, std::optional<int> a = {}) const;
272 
273  std::optional<double> GetLifeTime(std::optional<int> z = {}, std::optional<int> a = {}) const;
274  std::optional<double> GetSpin(std::optional<int> z = {}, std::optional<int> a = {}) const;
275  std::optional<int> GetParity(std::optional<int> z = {}, std::optional<int> a = {}) const;
276  std::optional<double> GetAbundance(std::optional<int> z = {}, std::optional<int> a = {}) const;
277  std::optional<int> GetMostAbundantA(std::optional<int> z = {}) const;
278  Double_t GetChargeRadius(std::optional<int> z = {}, std::optional<int> a = {}) const;
279  Double_t GetExtraChargeRadius(std::optional<int> a = {}, Int_t rct = 2) const;
280 
281  KVNucleus& operator=(const KVNucleus& rhs);
282  KVNucleus operator+(const KVNucleus& rhs);
283  KVNucleus operator-(const KVNucleus& rhs);
284  KVNucleus& operator+=(const KVNucleus& rhs);
285  KVNucleus& operator-=(const KVNucleus& rhs);
286 
288  Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState = 0);
290  Double_t GetFissionTKE(const KVNucleus* nuc = 0, Int_t formula = kDefaultFormula) const;
293 
294  static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2);
299 
301  {
302  return GetZ() == Z;
303  }
305  {
306  return (GetZ() == Z && GetA() == A);
307  }
308 
311 
312  ClassDefOverride(KVNucleus, 7) //Class describing atomic nuclei
313 };
314 
316 {
318  fMassFormula = mt;
319  SetA(GetAFromZ(GetZ(), fMassFormula)); //recalculate A and mass
320 }
321 
322 #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)
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:108
Double_t ShimaChargeStatePrecision() const
Definition: KVNucleus.cpp:2063
std::optional< double > GetAbundance(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1179
@ kHinde1987
Definition: KVNucleus.h:138
@ kViola1985
Definition: KVNucleus.h:139
@ kDefaultFormula
Definition: KVNucleus.h:136
@ kViola1966
Definition: KVNucleus.h:140
@ kItkis1998
Definition: KVNucleus.h:137
static Double_t hbar
hbar*c in MeV.fm
Definition: KVNucleus.h:153
Double_t GetBindingEnergyPerNucleon(std::optional< int > z={}, std::optional< int > a={}) const
Returns binding energy in MeV/A for this nucleus.
Definition: KVNucleus.cpp:1292
const Char_t * GetSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:43
void Copy(TObject &) const override
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Definition: KVNucleus.cpp:839
void SetExcitEnergy(Double_t e)
Definition: KVNucleus.cpp:867
Double_t GetExtraMassExcess(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:946
static Double_t LiquidDrop_BrackGuet(UInt_t A, UInt_t Z)
Definition: KVNucleus.cpp:1568
void Clear(Option_t *opt="") override
Definition: KVNucleus.cpp:296
Double_t GetMassExcess(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:911
void CheckZAndA(std::optional< Int_t > &z, std::optional< Int_t > &a) const
Definition: KVNucleus.cpp:854
std::optional< int > GetMostAbundantA(std::optional< int > z={}) const
Definition: KVNucleus.cpp:1197
Double_t GetBindingEnergy(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1243
void Set(const Char_t *)
Definition: KVNucleus.cpp:184
Double_t GetAMeV() const
Definition: KVNucleus.cpp:1325
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:1877
static Int_t GetNFromZ(Double_t, Char_t mt)
Calculate neutron number from the element's atomic number Z.
Definition: KVNucleus.cpp:637
void Print(Option_t *t="") const override
Display nucleus parameters.
Definition: KVNucleus.cpp:763
static Double_t GetRealAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:445
Double_t GetExcitEnergy() const
Definition: KVNucleus.h:257
std::optional< double > GetLifeTime(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1045
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
Definition: KVNucleus.cpp:1757
void init()
Definition: KVNucleus.cpp:251
Int_t GetAWithMaxBindingEnergy(std::optional< int > z={})
Definition: KVNucleus.cpp:1428
static Double_t GetRealNFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:515
static Double_t u(void)
Definition: KVNucleus.cpp:1699
KVNucleus operator+(const KVNucleus &rhs)
Definition: KVNucleus.cpp:1471
Bool_t IsDefined() const
Definition: KVNucleus.h:177
void SetZandN(Int_t z, Int_t n)
Set atomic number and mass number.
Definition: KVNucleus.cpp:751
Int_t GetA() const
Definition: KVNucleus.cpp:805
static Int_t IsMassGiven(const Char_t *)
Definition: KVNucleus.cpp:149
void SetA(Int_t a)
Definition: KVNucleus.cpp:658
KVNucleus & operator=(const KVNucleus &rhs)
KVNucleus assignment operator.
Definition: KVNucleus.cpp:1452
void SetN(Int_t n)
Definition: KVNucleus.cpp:690
Double_t GetMassGS() const
Definition: KVNucleus.h:265
static Double_t kMe
electron mass in MeV/c2
Definition: KVNucleus.h:151
void SetZ(Int_t z, Char_t mt=-1)
Definition: KVNucleus.cpp:709
Double_t LiquidDrop_Weizsacker()
Definition: KVNucleus.cpp:1604
Double_t GetExtraChargeRadius(std::optional< int > a={}, Int_t rct=2) const
Definition: KVNucleus.cpp:1120
KVNucleus & operator+=(const KVNucleus &rhs)
KVNucleus addition and assignment operator.
Definition: KVNucleus.cpp:1537
Double_t GetLiquidDropBindingEnergy(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1271
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
Definition: KVNucleus.cpp:1830
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Definition: KVNucleus.cpp:1903
std::optional< double > GetSpin(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:994
@ kEALResMass
Definition: KVNucleus.h:126
Double_t GetNsurZ() const
Definition: KVNucleus.h:217
Double_t GetAtomicMass(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:971
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Definition: KVNucleus.h:154
Bool_t IsKnown(std::optional< int > z={}, std::optional< int > a={}) const
Returns kTRUE if this nucleus or (z,a) is known.
Definition: KVNucleus.cpp:1222
Bool_t IsElement(Int_t Z) const
Definition: KVNucleus.h:300
tkn::tknucleus GetTkNucleus(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:881
Double_t GetAsurZ() const
Definition: KVNucleus.h:213
Double_t GetRelativeVelocity(KVNucleus *nuc)
Return the reltive velocity between nuc and this in cm/ns.
Definition: KVNucleus.cpp:1737
Int_t GetN() const
Return the number of neutron.
Definition: KVNucleus.cpp:787
Double_t GetNaturalA(std::optional< int > z={}) const
Definition: KVNucleus.cpp:1998
KVNucleus & operator-=(const KVNucleus &rhs)
KVNucleus subtraction and assignment operator.
Definition: KVNucleus.cpp:1552
Bool_t IsIsotope(Int_t Z, Int_t A) const
Definition: KVNucleus.h:304
Int_t Compare(const TObject *obj) const override
Definition: KVNucleus.cpp:1636
KVNumberList GetMeasuredARange(std::optional< int > z={}) const
returns range of a measured mass for a given element
Definition: KVNucleus.cpp:1368
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Definition: KVNucleus.cpp:1714
Double_t ShimaChargeState(Int_t) const
Definition: KVNucleus.cpp:2022
static Double_t kAMU
atomic mass unit in MeV
Definition: KVNucleus.h:150
int SetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:231
void SetZandA(Int_t z, Int_t a)
Set atomic number and mass number.
Definition: KVNucleus.cpp:726
const Char_t * GetLatexSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:97
Int_t GetNpairs(Int_t type=kNN) const
Definition: KVNucleus.cpp:824
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, std::optional< double > tmin={}) const
Definition: KVNucleus.cpp:1398
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Definition: KVNucleus.cpp:738
Double_t GetQFasymTKE(KVNucleus *target)
Definition: KVNucleus.cpp:1807
static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2)
Definition: KVNucleus.cpp:1865
Double_t GetChargeRadius(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1083
KVNumberList GetKnownARange(std::optional< int > z={}, std::optional< double > tmin={}) const
Definition: KVNucleus.cpp:1342
static Int_t GetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:213
Double_t GetEnergyPerNucleon() const
Definition: KVNucleus.cpp:1309
void SetMassFormula(UChar_t mt)
Definition: KVNucleus.h:315
Double_t GetChargeAsymmetry() const
Definition: KVNucleus.h:221
std::optional< int > GetParity(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1016
static Int_t GetAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:565
Bool_t IsSortable() const override
Definition: KVNucleus.h:172
Bool_t IsStable(Double_t min_lifetime=1.0e+15) const
Definition: KVNucleus.cpp:1939
Int_t GetZ() const
Return the number of proton / atomic number.
Definition: KVNucleus.cpp:776
virtual ~ KVNucleus()
Bool_t IsResonance(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1961
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:1889
std::optional< double > GetWidth(std::optional< int > z={}, std::optional< int > a={}) const
Definition: KVNucleus.cpp:1981
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Definition: KVNucleus.cpp:1921
Int_t GetMassFormula() const
Definition: KVNucleus.h:157
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
TLorentzVector operator-() const
Double_t Z() const
TArc a