KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
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
21class KVLifeTime;
22class KVMassExcess;
23class KVAbundance;
24class KVChargeRadius;
25class KVSpinParity;
26
126class KVNucleus: public KVParticle {
127
128
129private:
134 static Char_t fElements[][3];
136
137 enum {
138 kIsHeavy = BIT(17) //flag when mass of nucleus is > 255
139 };
140
141public:
142 enum { //determines how to calculate mass from Z
148 };
149 enum { //determines how to calculate radius from Mass
152 kELTON
153 };
154
155 enum {
161 };
162
163 enum {
167 knp
168 };
169
171 static Double_t kMe;
172 static Double_t u(void);
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;
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
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.
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
static Double_t hbar
hbar*c in MeV.fm
Definition KVNucleus.h:173
virtual void Clear(Option_t *opt="")
const Char_t * GetSymbol(Option_t *opt="") const
Definition KVNucleus.cpp:81
void SetExcitEnergy(Double_t e)
Double_t GetExtraChargeRadius(Int_t z=-1, Int_t a=-1, Int_t rct=2) const
static Double_t LiquidDrop_BrackGuet(UInt_t A, UInt_t Z)
void Set(const Char_t *)
Double_t GetAMeV() const
Double_t GetWidth() const
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).
void CheckZAndA(Int_t &z, Int_t &a) const
static Int_t GetNFromZ(Double_t, Char_t mt)
Calculate neutron number from the element's atomic number Z.
UChar_t fA
nuclear mass number
Definition KVNucleus.h:130
Bool_t IsKnown(int z=-1, int a=-1) const
static Double_t GetRealAFromZ(Double_t, Char_t mt)
Double_t GetSpin(Int_t z=-1, Int_t a=-1) const
Double_t GetExcitEnergy() const
Definition KVNucleus.h:283
Int_t Compare(const TObject *obj) const
Double_t GetFissionTKE(const KVNucleus *nuc=0, Int_t formula=kDefaultFormula) const
void init()
Double_t GetMassExcess(Int_t z=-1, Int_t a=-1) const
Bool_t IsSortable() const
Definition KVNucleus.h:197
KVMassExcess * GetMassExcessPtr(Int_t z=-1, Int_t a=-1) const
KVAbundance * GetAbundancePtr(Int_t z=-1, Int_t a=-1) const
static Double_t GetRealNFromZ(Double_t, Char_t mt)
static Double_t u(void)
KVNucleus operator+(const KVNucleus &rhs)
Bool_t IsDefined() const
Definition KVNucleus.h:202
virtual void Print(Option_t *t="") const
Display nucleus parameters.
void SetZandN(Int_t z, Int_t n)
Set atomic number and mass number.
Int_t GetA() const
static Int_t IsMassGiven(const Char_t *)
void SetA(Int_t a)
KVNucleus & operator=(const KVNucleus &rhs)
KVNucleus assignment operator.
void SetN(Int_t n)
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)
Double_t LiquidDrop_Weizsacker()
Int_t GetMostAbundantA(Int_t z=-1) const
KVNucleus & operator+=(const KVNucleus &rhs)
KVNucleus addition and assignment operator.
Double_t GetNaturalA(Int_t zz=-1) const
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
static Double_t TKE_Itkis1998(Double_t z, Double_t a)
Int_t GetAWithMaxBindingEnergy(Int_t z=-1)
KVNumberList GetKnownARange(Int_t z=-1, Double_t tmin=0) const
Double_t GetNsurZ() const
Definition KVNucleus.h:242
Double_t GetExtraMassExcess(Int_t z=-1, Int_t a=-1) const
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.
const Char_t * GetIsotopesList(Int_t zmin, Int_t zmax, Double_t tmin=0) const
@ kDefaultFormula
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.
virtual void Copy(TObject &) const
Copy this KVNucleus into the KVNucleus object referenced by "obj".
Int_t GetN() const
Return the number of neutron.
KVNucleus & operator-=(const KVNucleus &rhs)
KVNucleus subtraction and assignment operator.
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
static UInt_t fNb_nuc
counts number of existing KVNucleus objects
Definition KVNucleus.h:133
Bool_t IsResonance() const
Double_t DeduceEincFromBrho(Double_t Brho, Int_t ChargeState=0)
TH2F* GetKnownNucleiChart(KVString method="GetBindingEnergyPerNucleon");.
Double_t ShimaChargeState(Int_t) const
static Double_t kAMU
atomic mass unit in MeV
Definition KVNucleus.h:170
int SetZFromSymbol(const Char_t *)
void SetZandA(Int_t z, Int_t a)
Set atomic number and mass number.
const Char_t * GetLatexSymbol(Option_t *opt="") const
TString fSymbolName
Definition KVNucleus.h:135
Int_t GetNpairs(Int_t type=kNN) const
KVNumberList GetMeasuredARange(Int_t z=-1) const
returns range of a measured mass for a given element
void SetZAandE(Int_t z, Int_t a, Double_t ekin)
Set atomic number, mass number, and kinetic energy in MeV.
Double_t GetQFasymTKE(KVNucleus *target)
KVChargeRadius * GetChargeRadiusPtr(Int_t z=-1, Int_t a=-1) const
static Double_t TKE_Hinde1987(Double_t z1, Double_t a1, Double_t z2, Double_t a2)
Double_t GetAbundance(Int_t z=-1, Int_t a=-1) const
static Int_t GetZFromSymbol(const Char_t *)
KVLifeTime * GetLifeTimePtr(Int_t z=-1, Int_t a=-1) const
Double_t GetEnergyPerNucleon() const
static Char_t fElements[][3]
symbols of chemical elements
Definition KVNucleus.h:51
void SetMassFormula(UChar_t mt)
Definition KVNucleus.h:345
Double_t GetParity(Int_t z=-1, Int_t a=-1) const
static Int_t GetAFromZ(Double_t, Char_t mt)
Double_t GetAtomicMass(Int_t zz=-1, Int_t aa=-1) const
Bool_t IsStable(Double_t min_lifetime=1.0e+15) const
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
Int_t GetZ() const
Return the number of proton / atomic number.
Double_t GetLiquidDropBindingEnergy(Int_t z=-1, Int_t a=-1) const
static Double_t TKE_Viola1966(Double_t z, Double_t a)
from: V. E. Viola, Jr., Nuclear Data Sheets. Section A 1, 391 (1965).
static Double_t TKE_Kozulin2014(Double_t zp, Double_t zt, Double_t ap, Double_t at)
Double_t GetChargeRadius(Int_t z=-1, Int_t a=-1) const
Double_t GetLifeTime(Int_t z=-1, Int_t a=-1) const
Int_t GetMassFormula() const
Definition KVNucleus.h:177
Strings used to represent a set of ranges of values.
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.
TLorentzVector operator-() const
Double_t Z() const