KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVNucleus.h
Go to the documentation of this file.
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 
125 class KVNucleus: public KVParticle {
126 
127 
128 private:
132  static UInt_t fNb_nuc;
133  static Char_t fElements[][3];
135 
136  enum {
137  kIsHeavy = BIT(17) //flag when mass of nucleus is > 255
138  };
139 
140 public:
141  enum { //determines how to calculate mass from Z
146  kEPAXMass
147  };
148  enum { //determines how to calculate radius from Mass
151  kELTON
152  };
153 
154  enum {
159  kViola1966
160  };
161 
162  enum {
166  knp
167  };
168 
169  static Double_t kAMU;
170  static Double_t kMe;
171  static Double_t u(void);
172  static Double_t hbar;
173  static Double_t e2;
174 
175  inline void SetMassFormula(UChar_t mt);
176  inline Int_t GetMassFormula() const
177  {
178  return (Int_t)fMassFormula;
179  }
180 
181  void init();
182  KVNucleus();
183  KVNucleus(const KVNucleus&);
184  virtual void Clear(Option_t* opt = "");
185  KVNucleus(Int_t z, Int_t a = 0, Double_t ekin = 0);
186  KVNucleus(Int_t z, Double_t t, TVector3& p);
187  KVNucleus(Int_t z, Int_t a, TVector3 p);
189  KVNucleus(const Char_t*, Double_t EperA = 0);
190 
191 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
192  virtual void Copy(TObject&) const;
193 #else
194  virtual void Copy(TObject&);
195 #endif
197  {
198  return kTRUE;
199  }
200  Int_t Compare(const TObject* obj) const;
202  {
207  return !(fZ == 0 && fA == 0);
208  }
209 
210  virtual ~ KVNucleus();
211  static Int_t GetAFromZ(Double_t, Char_t mt);
212  static Int_t GetNFromZ(Double_t, Char_t mt);
215  const Char_t* GetSymbol(Option_t* opt = "") const;
216  const Char_t* GetLatexSymbol(Option_t* opt = "") const;
217 
218  static Int_t GetZFromSymbol(const Char_t*);
219  int SetZFromSymbol(const Char_t*);
220  void Set(const Char_t*);
221  static Int_t IsMassGiven(const Char_t*);
222 
223  void SetZ(Int_t z, Char_t mt = -1);
224  void SetA(Int_t a);
225  void SetN(Int_t n);
226  void SetZandA(Int_t z, Int_t a);
227  void SetZandN(Int_t z, Int_t n);
228  void SetZAandE(Int_t z, Int_t a, Double_t ekin);
229 
230  virtual void Print(Option_t* t = "") const;
231  Int_t GetZ() const;
232  Int_t GetA() const;
233  Int_t GetN() const;
234 
235  Int_t GetNpairs(Int_t type = kNN) const;
236 
238  {
239  return Double_t(GetA()) / GetZ();
240  }
242  {
243  return Double_t(GetN()) / GetZ();
244  }
246  {
249  return Double_t(GetN() - GetZ()) / GetA();
250  }
252  Double_t GetAMeV() const;
253 
254  void CheckZAndA(Int_t& z, Int_t& a) const;
255 
256  Double_t GetMassExcess(Int_t z = -1, Int_t a = -1) const;
257  Double_t GetExtraMassExcess(Int_t z = -1, Int_t a = -1) const;
258  KVMassExcess* GetMassExcessPtr(Int_t z = -1, Int_t a = -1) const;
259  Double_t GetAtomicMass(Int_t zz = -1, Int_t aa = -1) const ;
260  Double_t GetNaturalA(Int_t zz = -1) const ;
261 
262  Double_t GetBindingEnergy(Int_t z = -1, Int_t a = -1) const;
263  Double_t GetLiquidDropBindingEnergy(Int_t z = -1, Int_t a = -1) const;
264  Double_t GetBindingEnergyPerNucleon(Int_t z = -1, Int_t a = -1) const;
265 
267 
268  KVNumberList GetKnownARange(Int_t z = -1, Double_t tmin = 0) const;
269  KVNumberList GetMeasuredARange(Int_t z = -1) const;
270  const Char_t* GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin = 0) const;
272 
274 
275  Bool_t IsKnown(int z = -1, int a = -1) const;
276  Bool_t IsStable(Double_t min_lifetime = 1.0e+15/*seconds*/) const;
277  Bool_t IsResonance() const;
278  Double_t GetWidth() const;
279 
280  void SetExcitEnergy(Double_t e);
281 
283  {
287  return GetMass() - GetMassGS();
288  }
290  {
292  return (kAMU * GetA() + GetMassExcess());
293  }
294 
295  Double_t GetLifeTime(Int_t z = -1, Int_t a = -1) const;
296  KVLifeTime* GetLifeTimePtr(Int_t z = -1, Int_t a = -1) const;
297 
298  Double_t GetSpin(Int_t z = -1, Int_t a = -1) const;
299  Double_t GetParity(Int_t z = -1, Int_t a = -1) const;
300  KVSpinParity* GetSpinParityPtr(Int_t z = -1, Int_t a = -1) const;
301 
302  Double_t GetAbundance(Int_t z = -1, Int_t a = -1) const;
303  KVAbundance* GetAbundancePtr(Int_t z = -1, Int_t a = -1) const;
304  Int_t GetMostAbundantA(Int_t z = -1) const;
305 
306  Double_t GetChargeRadius(Int_t z = -1, Int_t a = -1) const;
307  KVChargeRadius* GetChargeRadiusPtr(Int_t z = -1, Int_t a = -1) const;
308  Double_t GetExtraChargeRadius(Int_t z = -1, Int_t a = -1, Int_t rct = 2) const;
309 
310  KVNucleus& operator=(const KVNucleus& rhs);
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 
317  Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState = 0);
319  Double_t GetFissionTKE(const KVNucleus* nuc = 0, Int_t formula = kDefaultFormula) const;
322 
323  static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2);
328 
330  {
331  return GetZ() == Z;
332  }
334  {
335  return (GetZ() == Z && GetA() == A);
336  }
337 
340 
341  ClassDef(KVNucleus, 7) //Class describing atomic nuclei
342 };
343 
345 {
347  fMassFormula = mt;
348  SetA(GetAFromZ(GetZ(), fMassFormula)); //recalculate A and mass
349 }
350 
351 #endif
int Int_t
unsigned int UInt_t
unsigned char UChar_t
char Char_t
bool Bool_t
double Double_t
const Bool_t kTRUE
const char Option_t
#define ClassDef(name, id)
#define BIT(n)
Value of the relative abundance of isotopes.
Definition: KVAbundance.h:15
Simple class for storing charge radius information of nuclei.
Simple class to store lifetime information of nucleus.
Definition: KVLifeTime.h:15
Simple class for store life time information of nucleus.
Definition: KVMassExcess.h:15
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
UChar_t fZ
nuclear charge number (atomic number)
Definition: KVNucleus.h:130
Double_t ShimaChargeStatePrecision() const
Definition: KVNucleus.cpp:2103
static Double_t hbar
hbar*c in MeV.fm
Definition: KVNucleus.h:172
virtual void Clear(Option_t *opt="")
Definition: KVNucleus.cpp:298
const Char_t * GetSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:81
void SetExcitEnergy(Double_t e)
Definition: KVNucleus.cpp:865
Double_t GetExtraChargeRadius(Int_t z=-1, Int_t a=-1, Int_t rct=2) const
Definition: KVNucleus.cpp:1133
static Double_t LiquidDrop_BrackGuet(UInt_t A, UInt_t Z)
Definition: KVNucleus.cpp:1620
void Set(const Char_t *)
Definition: KVNucleus.cpp:177
Double_t GetAMeV() const
Definition: KVNucleus.cpp:1381
Double_t GetWidth() const
Definition: KVNucleus.cpp:2023
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:1927
void CheckZAndA(Int_t &z, Int_t &a) const
Definition: KVNucleus.cpp:852
static Int_t GetNFromZ(Double_t, Char_t mt)
Calculate neutron number from the element's atomic number Z.
Definition: KVNucleus.cpp:636
UChar_t fA
nuclear mass number
Definition: KVNucleus.h:129
Bool_t IsKnown(int z=-1, int a=-1) const
Definition: KVNucleus.cpp:1279
static Double_t GetRealAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:444
Double_t GetSpin(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:987
Double_t GetExcitEnergy() const
Definition: KVNucleus.h:282
Int_t Compare(const TObject *obj) const
Definition: KVNucleus.cpp:1688
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
Definition: KVNucleus.cpp:1807
void init()
Definition: KVNucleus.cpp:245
Double_t GetMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:883
Bool_t IsSortable() const
Definition: KVNucleus.h:196
KVMassExcess * GetMassExcessPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:947
KVAbundance * GetAbundancePtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1259
static Double_t GetRealNFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:514
static Double_t u(void)
Definition: KVNucleus.cpp:1750
KVNucleus operator+(const KVNucleus &rhs)
Definition: KVNucleus.cpp:1524
Bool_t IsDefined() const
Definition: KVNucleus.h:201
virtual void Print(Option_t *t="") const
Display nucleus parameters.
Definition: KVNucleus.cpp:758
void SetZandN(Int_t z, Int_t n)
Set atomic number and mass number.
Definition: KVNucleus.cpp:746
Int_t GetA() const
Definition: KVNucleus.cpp:799
static Int_t IsMassGiven(const Char_t *)
Definition: KVNucleus.cpp:144
void SetA(Int_t a)
Definition: KVNucleus.cpp:655
KVNucleus & operator=(const KVNucleus &rhs)
KVNucleus assignment operator.
Definition: KVNucleus.cpp:1506
void SetN(Int_t n)
Definition: KVNucleus.cpp:685
Double_t GetMassGS() const
Definition: KVNucleus.h:289
static Double_t kMe
electron mass in MeV/c2
Definition: KVNucleus.h:170
void SetZ(Int_t z, Char_t mt=-1)
Definition: KVNucleus.cpp:704
Double_t LiquidDrop_Weizsacker()
Definition: KVNucleus.cpp:1656
Int_t GetMostAbundantA(Int_t z=-1) const
Definition: KVNucleus.cpp:1230
KVNucleus & operator+=(const KVNucleus &rhs)
KVNucleus addition and assignment operator.
Definition: KVNucleus.cpp:1589
Double_t GetNaturalA(Int_t zz=-1) const
Definition: KVNucleus.cpp:2038
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
Definition: KVNucleus.cpp:1880
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Definition: KVNucleus.cpp:1953
Int_t GetAWithMaxBindingEnergy(Int_t z=-1)
Definition: KVNucleus.cpp:1481
KVNumberList GetKnownARange(Int_t z=-1, Double_t tmin=0) const
Definition: KVNucleus.cpp:1398
Double_t GetNsurZ() const
Definition: KVNucleus.h:241
Double_t GetExtraMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:910
@ kEALResMass
Definition: KVNucleus.h:145
Double_t GetChargeAsymetry() const
Definition: KVNucleus.h:245
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Definition: KVNucleus.h:173
Bool_t IsElement(Int_t Z) const
Definition: KVNucleus.h:329
Double_t GetAsurZ() const
Definition: KVNucleus.h:237
Double_t GetRelativeVelocity(KVNucleus *nuc)
Return the reltive velocity between nuc and this in cm/ns.
Definition: KVNucleus.cpp:1787
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin=0) const
Definition: KVNucleus.cpp:1453
@ kHinde1987
Definition: KVNucleus.h:157
@ kViola1985
Definition: KVNucleus.h:158
@ kDefaultFormula
Definition: KVNucleus.h:155
@ kViola1966
Definition: KVNucleus.h:159
@ kItkis1998
Definition: KVNucleus.h:156
Double_t GetBindingEnergyPerNucleon(Int_t z=-1, Int_t a=-1) const
Returns binding energy in MeV/A for this nucleus.
Definition: KVNucleus.cpp:1348
virtual void Copy(TObject &) const
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Definition: KVNucleus.cpp:834
Int_t GetN() const
Return the number of neutron.
Definition: KVNucleus.cpp:781
KVNucleus & operator-=(const KVNucleus &rhs)
KVNucleus subtraction and assignment operator.
Definition: KVNucleus.cpp:1604
Bool_t IsIsotope(Int_t Z, Int_t A) const
Definition: KVNucleus.h:333
KVSpinParity * GetSpinParityPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:967
static UInt_t fNb_nuc
counts number of existing KVNucleus objects
Definition: KVNucleus.h:132
Bool_t IsResonance() const
Definition: KVNucleus.cpp:2008
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Definition: KVNucleus.cpp:1764
Double_t ShimaChargeState(Int_t) const
Definition: KVNucleus.cpp:2062
static Double_t kAMU
atomic mass unit in MeV
Definition: KVNucleus.h:169
int SetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:225
void SetZandA(Int_t z, Int_t a)
Set atomic number and mass number.
Definition: KVNucleus.cpp:721
const Char_t * GetLatexSymbol(Option_t *opt="") const
Definition: KVNucleus.cpp:112
TString fSymbolName
Definition: KVNucleus.h:134
Int_t GetNpairs(Int_t type=kNN) const
Definition: KVNucleus.cpp:818
KVNumberList GetMeasuredARange(Int_t z=-1) const
returns range of a measured mass for a given element
Definition: KVNucleus.cpp:1424
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Definition: KVNucleus.cpp:733
Double_t GetQFasymTKE(KVNucleus *target)
Definition: KVNucleus.cpp:1857
KVChargeRadius * GetChargeRadiusPtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1193
static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2)
Definition: KVNucleus.cpp:1915
Double_t GetAbundance(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1212
static Int_t GetZFromSymbol(const Char_t *)
Definition: KVNucleus.cpp:206
KVLifeTime * GetLifeTimePtr(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1074
Double_t GetEnergyPerNucleon() const
Definition: KVNucleus.cpp:1365
static Char_t fElements[][3]
symbols of chemical elements
Definition: KVNucleus.h:133
void SetMassFormula(UChar_t mt)
Definition: KVNucleus.h:344
Double_t GetParity(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1012
static Int_t GetAFromZ(Double_t, Char_t mt)
Definition: KVNucleus.cpp:564
Double_t GetAtomicMass(Int_t zz=-1, Int_t aa=-1) const
Definition: KVNucleus.cpp:929
Bool_t IsStable(Double_t min_lifetime=1.0e+15) const
Definition: KVNucleus.cpp:1989
UChar_t fMassFormula
mass formula for calculating A from Z
Definition: KVNucleus.h:131
Double_t GetBindingEnergy(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1302
Int_t GetZ() const
Return the number of proton / atomic number.
Definition: KVNucleus.cpp:770
virtual ~ KVNucleus()
Double_t GetLiquidDropBindingEnergy(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1327
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:1939
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Definition: KVNucleus.cpp:1971
Double_t GetChargeRadius(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1095
Double_t GetLifeTime(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:1040
Int_t GetMassFormula() const
Definition: KVNucleus.h:176
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
Base class for relativistic kinematics of massive particles.
Definition: KVParticle.h:398
Double_t GetMass() const
Definition: KVParticle.h:572
Spin parity assignment of nuclear levels.
Definition: KVSpinParity.h:15
TLorentzVector operator-() const
Double_t Z() const