KaliVeda  1.12/06
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 protected:
141  virtual void AddGroup_Withcondition(const Char_t* groupname, KVParticleCondition*);
142 
143 public:
144  enum { //determines how to calculate mass from Z
149  kEPAXMass
150  };
151  enum { //determines how to calculate radius from Mass
154  kELTON
155  };
156 
157  enum {
162  kViola1966
163  };
164 
165  enum {
169  knp
170  };
171 
172  static Double_t kAMU;
173  static Double_t kMe;
174  static Double_t u(void);
175  static Double_t hbar;
176  static Double_t e2;
177 
178  inline void SetMassFormula(UChar_t mt);
179  inline Int_t GetMassFormula() const
180  {
181  return (Int_t)fMassFormula;
182  }
183 
184  void init();
185  KVNucleus();
186  KVNucleus(const KVNucleus&);
187  virtual void Clear(Option_t* opt = "");
188  KVNucleus(Int_t z, Int_t a = 0, Double_t ekin = 0);
189  KVNucleus(Int_t z, Double_t t, TVector3& p);
190  KVNucleus(Int_t z, Int_t a, TVector3 p);
192  KVNucleus(const Char_t*, Double_t EperA = 0);
193 
194 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
195  virtual void Copy(TObject&) const;
196 #else
197  virtual void Copy(TObject&);
198 #endif
200  {
201  return kTRUE;
202  }
203  Int_t Compare(const TObject* obj) const;
205  {
210  return !(fZ == 0 && fA == 0);
211  }
212 
213  virtual ~ KVNucleus();
214  static Int_t GetAFromZ(Double_t, Char_t mt);
215  static Int_t GetNFromZ(Double_t, Char_t mt);
218  const Char_t* GetSymbol(Option_t* opt = "") const;
219  const Char_t* GetLatexSymbol(Option_t* opt = "") const;
220 
221  static Int_t GetZFromSymbol(const Char_t*);
222  int SetZFromSymbol(const Char_t*);
223  void Set(const Char_t*);
224  static Int_t IsMassGiven(const Char_t*);
225 
226  void SetZ(Int_t z, Char_t mt = -1);
227  void SetA(Int_t a);
228  void SetN(Int_t n);
229  void SetZandA(Int_t z, Int_t a);
230  void SetZandN(Int_t z, Int_t n);
231  void SetZAandE(Int_t z, Int_t a, Double_t ekin);
232 
233  virtual void Print(Option_t* t = "") const;
234  Int_t GetZ() const;
235  Int_t GetA() const;
236  Int_t GetN() const;
237 
238  Int_t GetNpairs(Int_t type = kNN) const;
239 
241  {
242  return Double_t(GetA()) / GetZ();
243  }
245  {
246  return Double_t(GetN()) / GetZ();
247  }
249  {
252  return Double_t(GetN() - GetZ()) / GetA();
253  }
255  Double_t GetAMeV() const;
256 
257  void CheckZAndA(Int_t& z, Int_t& a) const;
258 
259  Double_t GetMassExcess(Int_t z = -1, Int_t a = -1) const;
260  Double_t GetExtraMassExcess(Int_t z = -1, Int_t a = -1) const;
261  KVMassExcess* GetMassExcessPtr(Int_t z = -1, Int_t a = -1) const;
262  Double_t GetAtomicMass(Int_t zz = -1, Int_t aa = -1) const ;
263  Double_t GetNaturalA(Int_t zz = -1) const ;
264 
265  Double_t GetBindingEnergy(Int_t z = -1, Int_t a = -1) const;
266  Double_t GetLiquidDropBindingEnergy(Int_t z = -1, Int_t a = -1) const;
267  Double_t GetBindingEnergyPerNucleon(Int_t z = -1, Int_t a = -1) const;
268 
270 
271  KVNumberList GetKnownARange(Int_t z = -1, Double_t tmin = 0) const;
272  KVNumberList GetMeasuredARange(Int_t z = -1) const;
273  const Char_t* GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin = 0) const;
275 
277 
278  Bool_t IsKnown(int z = -1, int a = -1) const;
279  Bool_t IsStable(Double_t min_lifetime = 1.0e+15/*seconds*/) const;
280  Bool_t IsResonance() const;
281  Double_t GetWidth() const;
282 
283  void SetExcitEnergy(Double_t e);
284 
286  {
290  return GetMass() - GetMassGS();
291  }
293  {
295  return (kAMU * GetA() + GetMassExcess());
296  }
297 
298  Double_t GetLifeTime(Int_t z = -1, Int_t a = -1) const;
299  KVLifeTime* GetLifeTimePtr(Int_t z = -1, Int_t a = -1) const;
300 
301  Double_t GetSpin(Int_t z = -1, Int_t a = -1) const;
302  Double_t GetParity(Int_t z = -1, Int_t a = -1) const;
303  KVSpinParity* GetSpinParityPtr(Int_t z = -1, Int_t a = -1) const;
304 
305  Double_t GetAbundance(Int_t z = -1, Int_t a = -1) const;
306  KVAbundance* GetAbundancePtr(Int_t z = -1, Int_t a = -1) const;
307  Int_t GetMostAbundantA(Int_t z = -1) const;
308 
309  Double_t GetChargeRadius(Int_t z = -1, Int_t a = -1) const;
310  KVChargeRadius* GetChargeRadiusPtr(Int_t z = -1, Int_t a = -1) const;
311  Double_t GetExtraChargeRadius(Int_t z = -1, Int_t a = -1, Int_t rct = 2) const;
312 
313  KVNucleus& operator=(const KVNucleus& rhs);
314  KVNucleus operator+(const KVNucleus& rhs);
315  KVNucleus operator-(const KVNucleus& rhs);
316  KVNucleus& operator+=(const KVNucleus& rhs);
317  KVNucleus& operator-=(const KVNucleus& rhs);
318 
320  Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState = 0);
322  Double_t GetFissionTKE(const KVNucleus* nuc = 0, Int_t formula = kDefaultFormula) const;
325 
326  static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2);
331 
333  {
334  return GetZ() == Z;
335  }
337  {
338  return (GetZ() == Z && GetA() == A);
339  }
340 
343 
344  ClassDef(KVNucleus, 7) //Class describing atomic nuclei
345 };
346 
348 {
350  fMassFormula = mt;
351  SetA(GetAFromZ(GetZ(), fMassFormula)); //recalculate A and mass
352 }
353 
354 #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:2122
static Double_t hbar
hbar*c in MeV.fm
Definition: KVNucleus.h:175
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:1639
void Set(const Char_t *)
Definition: KVNucleus.cpp:177
Double_t GetAMeV() const
Definition: KVNucleus.cpp:1381
Double_t GetWidth() const
Definition: KVNucleus.cpp:2042
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:1946
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:285
Int_t Compare(const TObject *obj) const
Definition: KVNucleus.cpp:1707
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
Definition: KVNucleus.cpp:1826
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:199
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:1769
KVNucleus operator+(const KVNucleus &rhs)
Definition: KVNucleus.cpp:1543
Bool_t IsDefined() const
Definition: KVNucleus.h:204
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:1525
void SetN(Int_t n)
Definition: KVNucleus.cpp:685
Double_t GetMassGS() const
Definition: KVNucleus.h:292
static Double_t kMe
electron mass in MeV/c2
Definition: KVNucleus.h:173
void SetZ(Int_t z, Char_t mt=-1)
Definition: KVNucleus.cpp:704
Double_t LiquidDrop_Weizsacker()
Definition: KVNucleus.cpp:1675
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:1608
Double_t GetNaturalA(Int_t zz=-1) const
Definition: KVNucleus.cpp:2057
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
Definition: KVNucleus.cpp:1899
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Definition: KVNucleus.cpp:1972
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:244
Double_t GetExtraMassExcess(Int_t z=-1, Int_t a=-1) const
Definition: KVNucleus.cpp:910
@ kEALResMass
Definition: KVNucleus.h:148
Double_t GetChargeAsymetry() const
Definition: KVNucleus.h:248
static Double_t e2
e^2/(4.pi.epsilon_0) in MeV.fm
Definition: KVNucleus.h:176
Bool_t IsElement(Int_t Z) const
Definition: KVNucleus.h:332
Double_t GetAsurZ() const
Definition: KVNucleus.h:240
Double_t GetRelativeVelocity(KVNucleus *nuc)
Return the reltive velocity between nuc and this in cm/ns.
Definition: KVNucleus.cpp:1806
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin=0) const
Definition: KVNucleus.cpp:1453
virtual void AddGroup_Withcondition(const Char_t *groupname, KVParticleCondition *)
Definition: KVNucleus.cpp:1507
@ kHinde1987
Definition: KVNucleus.h:160
@ kViola1985
Definition: KVNucleus.h:161
@ kDefaultFormula
Definition: KVNucleus.h:158
@ kViola1966
Definition: KVNucleus.h:162
@ kItkis1998
Definition: KVNucleus.h:159
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:1623
Bool_t IsIsotope(Int_t Z, Int_t A) const
Definition: KVNucleus.h:336
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:2027
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Definition: KVNucleus.cpp:1783
Double_t ShimaChargeState(Int_t) const
Definition: KVNucleus.cpp:2081
static Double_t kAMU
atomic mass unit in MeV
Definition: KVNucleus.h:172
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:1876
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:1934
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:347
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:2008
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:1958
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Definition: KVNucleus.cpp:1990
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:179
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:83
Handles particle selection criteria for data analysis classes ,.
Base class for relativistic kinematics of massive particles.
Definition: KVParticle.h:398
Double_t GetMass() const
Definition: KVParticle.h:531
Spin parity assignment of nuclear levels.
Definition: KVSpinParity.h:15
TLorentzVector operator-() const
Double_t Z() const