Import Geant4 10.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2016-06-30 14:12:05 +02:00
parent a654a7ab1f
commit 4ec577e5c4
2021 changed files with 100995 additions and 78277 deletions
+55 -1
View File
@@ -1,4 +1,4 @@
$Id: History 94620 2015-11-26 14:05:52Z gcosmo $
$Id: History 96797 2016-05-09 10:13:42Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -17,6 +17,60 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
- 5 May 2016 Hisaya Kurashige (particles-V10-02-14)
- Fix Coverity defects (43015,62787,62788)
- Modify G4IonTable::GetIon with non-zero lvl
(Coverity 63524)
- 5 April 2016 Makoto Asai (particles-V10-02-13)
- G4IsotopeMagneticMomentTable: Ignoring floating level base for
the time being.
- 4 April 2016 Makoto Asai (particles-V10-02-12)
- G4NuclideTable has migrated to the new floating level base scheme.
- 31 March 2016 Makoto Asai (particles-V10-02-11)
- Introducing floating level base to G4Ions and related classes.
- 2 March 2016 Hisaya Kurashige (particles-V10-02-10)
- Update properties of particles according to PDG
- 1 Match 2016 Andrea Dotti (particles-V10-02-09)
- Fix for WIN: removing constexpr
- 29 February 2016 Andrea Dotti (particles-V10-02-08)
- Fix for bug #1834: MT data-race in G4VDecayTable class
- 25 February 2016 Andrea Dotti (particles-V10-02-07)
- Preliminary tag to review of MT treatment for SetDaugheter in
G4VDecayChannel: raise exception if re-definition of daughters
is requested
- 4 February 2016 Tatsumi Koi (particles-V10-02-06)
- Change default life of ion and hyper nucleus from -1 to 0
- 27 January 2016 Hisaya Kurashige(particles-V10-02-05)
- Fix the bug(#1820) in G4PhaseSpaceDecayChannel
- 21 January 2016 Hisaya Kurashige(particles-V10-02-04)
- Fix G4DecayTable::SelectADecayChannel
- 28 December 2015 Makoto Asai (particles-V10-02-03)
- Fix wrong argument order CreateIon(A,Z,LL,0.0) of line #485 in
G4IonTable.cc to CreateIon(Z,A,LL,0.0).
- 18 December 2015 Tatsumi Koi (particles-V10-02-02)
- Fix problem on previous tag
- 17 December 2015 Tatsumi Koi (particles-V10-02-01)
- Revert default value of level tolerance in NuclideTable to 1 eV
- Turn out rounding of excitation energy to avoid potential conservation problem
- 3 December 2015 Dennis Wright (particles-V10-01-19)
- In G4IonTable remove static const tolerance and replace it with
pNuclideTable->GetLevelTolerance() in all locations.
This recovers missed levels when they are closer together than 2 keV
- 25 Nov. 2015 Gunter Folger (particles-V10-01-18)
- Fix for Windows in G4NuclideTable:
Convert static G4double levelTolerance to data member of singleton.
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiLambdab.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4AntiLambdab.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,11 +70,11 @@ G4AntiLambdab* G4AntiLambdab::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.6195*GeV, 0.454e-9*MeV, 0.,
name, 5.61951*GeV, 0.449e-9*MeV, 0.,
1, +1, 0,
0, 0, 0,
"baryon", 0, -1, -5122,
false, 1.451e-3*ns, NULL,
false, 1.466e-3*ns, NULL,
false, "lambda_b");
}
theInstance = reinterpret_cast<G4AntiLambdab*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiOmegabMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4AntiOmegabMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,11 +69,11 @@ G4AntiOmegabMinus* G4AntiOmegabMinus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 6.0488*GeV, 0.58e-9*MeV, +1.*eplus,
name, 6.0480*GeV, 0.42e-9*MeV, +1.*eplus,
1, +1, 0,
0, 0, 0,
"baryon", 0, -1, -5332,
false, 1.100e-3*ns, NULL,
false, 1.570e-3*ns, NULL,
false, "omega_b");
}
theInstance = reinterpret_cast<G4AntiOmegabMinus*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiSigmacPlusPlus.cc 79342 2014-02-24 11:42:42Z gcosmo $
// $Id: G4AntiSigmacPlusPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4AntiSigmacPlusPlus* G4AntiSigmacPlusPlus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.45398*GeV, 2.26*MeV, -2.0*eplus,
name, 2.45397*GeV, 2.26*MeV, -2.0*eplus,
1, +1, 0,
2, -2, 0,
"baryon", 0, -1, -4222,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiSigmacZero.cc 79342 2014-02-24 11:42:42Z gcosmo $
// $Id: G4AntiSigmacZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4AntiSigmacZero* G4AntiSigmacZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.45374*GeV, 2.16*MeV, +0.0*eplus,
name, 2.45375*GeV, 1.83*MeV, +0.0*eplus,
1, +1, 0,
2, +2, 0,
"baryon", 0, -1, -4112,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiXibMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4AntiXibMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,7 +70,7 @@ G4AntiXibMinus* G4AntiXibMinus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.7949*GeV, 0.42e-9*MeV, +1.*eplus,
name, 5.7944*GeV, 0.422e-9*MeV, +1.*eplus,
1, +1, 0,
1, +1, 0,
"baryon", 0, -1, -5132,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiXibZero.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4AntiXibZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,11 +70,11 @@ G4AntiXibZero* G4AntiXibZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.7931*GeV, 0.44e-9*MeV, 0,
name, 5.7918*GeV, 0.45e-9*MeV, 0,
1, +1, 0,
1, -1, 0,
"baryon", 0, -1, -5232,
false, 1.490e-3*ns, NULL,
false, 1.464e-3*ns, NULL,
false, "xi_b");
}
theInstance = reinterpret_cast<G4AntiXibZero*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiXicPlus.cc 67971 2013-03-13 10:13:24Z gcosmo $
// $Id: G4AntiXicPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4AntiXicPlus* G4AntiXicPlus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.4678*GeV, 1.49e-9*MeV, -1.*eplus,
name, 2.46793*GeV, 1.49e-9*MeV, -1.*eplus,
1, +1, 0,
1, -1, 0,
"baryon", 0, -1, -4232,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiXicZero.cc 67971 2013-03-13 10:13:24Z gcosmo $
// $Id: G4AntiXicZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4AntiXicZero* G4AntiXicZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.47088*GeV, 5.9e-9*MeV, 0.0,
name, 2.47085*GeV, 5.9e-9*MeV, 0.0,
1, +1, 0,
1, +1, 0,
"baryon", 0, -1, -4132,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4Lambdab.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4Lambdab.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,11 +70,11 @@ G4Lambdab* G4Lambdab::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.6195*GeV, 0.454e-9*MeV, 0.,
name, 5.61951*GeV, 0.449e-9*MeV, 0.,
1, +1, 0,
0, 0, 0,
"baryon", 0, +1, 5122,
false, 1.451e-3*ns, NULL,
false, 1.466e-3*ns, NULL,
false, "lambda_b");
}
theInstance = reinterpret_cast<G4Lambdab*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4OmegabMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4OmegabMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,11 +69,11 @@ G4OmegabMinus* G4OmegabMinus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 6.0488*GeV, 0.58e-9*MeV, -1.*eplus,
name, 6.0480*GeV, 0.42e-9*MeV, -1.*eplus,
1, +1, 0,
0, 0, 0,
"baryon", 0, +1, 5332,
false, 1.100e-3*ns, NULL,
false, 1.570e-3*ns, NULL,
false, "omega_b");
}
theInstance = reinterpret_cast<G4OmegabMinus*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4SigmacPlusPlus.cc 79342 2014-02-24 11:42:42Z gcosmo $
// $Id: G4SigmacPlusPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4SigmacPlusPlus* G4SigmacPlusPlus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.45398*GeV, 2.26*MeV, +2.0*eplus,
name, 2.45397*GeV, 2.26*MeV, +2.0*eplus,
1, +1, 0,
2, +2, 0,
"baryon", 0, +1, 4222,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4SigmacZero.cc 79342 2014-02-24 11:42:42Z gcosmo $
// $Id: G4SigmacZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4SigmacZero* G4SigmacZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.45374*GeV, 2.16*MeV, +0.0*eplus,
name, 2.45375*GeV, 1.83*MeV, +0.0*eplus,
1, +1, 0,
2, -1, 0,
"baryon", 0, +1, 4112,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4XibMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4XibMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,7 +70,7 @@ G4XibMinus* G4XibMinus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.7949*GeV, 0.42e-9*MeV, -1.*eplus,
name, 5.7944*GeV, 0.422e-9*MeV, -1.*eplus,
1, +1, 0,
1, -1, 0,
"baryon", 0, +1, 5132,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4XibZero.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4XibZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,11 +70,11 @@ G4XibZero* G4XibZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.7931*GeV, 0.44e-9*MeV, 0,
name, 5.7918*GeV, 0.45e-9*MeV, 0,
1, +1, 0,
1, +1, 0,
"baryon", 0, +1, 5232,
false, 1.490e-3*ns, NULL,
false, 1.464e-3*ns, NULL,
false, "xi_b");
}
theInstance = reinterpret_cast<G4XibZero*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4XicPlus.cc 67971 2013-03-13 10:13:24Z gcosmo $
// $Id: G4XicPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4XicPlus* G4XicPlus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.4678*GeV, 1.49e-9*MeV, +1.*eplus,
name, 2.46793*GeV, 1.49e-9*MeV, +1.*eplus,
1, +1, 0,
1, +1, 0,
"baryon", 0, +1, 4232,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4XicZero.cc 67971 2013-03-13 10:13:24Z gcosmo $
// $Id: G4XicZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -69,7 +69,7 @@ G4XicZero* G4XicZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.47088*GeV, 5.9e-9*MeV, 0.0,
name, 2.47085*GeV, 5.9e-9*MeV, 0.0,
1, +1, 0,
1, -1, 0,
"baryon", 0, +1, 4132,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiBMesonZero.cc 79342 2014-02-24 11:42:42Z gcosmo $
// $Id: G4AntiBMesonZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -65,11 +65,11 @@ G4AntiBMesonZero* G4AntiBMesonZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.27958*GeV, 4.333e-10*MeV, 0.,
name, 5.27961*GeV, 4.333e-10*MeV, 0.,
0, -1, 0,
1, +1, 0,
"meson", 0, 0, -511,
false, 1.519e-3*ns, NULL,
false, 1.520e-3*ns, NULL,
false, "B");
}
theInstance = reinterpret_cast<G4AntiBMesonZero*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4AntiBsMesonZero.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4AntiBsMesonZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -65,11 +65,11 @@ G4AntiBsMesonZero* G4AntiBsMesonZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.36677*GeV, 4.353e-10*MeV, 0.,
name, 5.36679*GeV, 4.359e-10*MeV, 0.,
0, -1, 0,
0, 0, 0,
"meson", 0, 0, -531,
false, 1.512e-3*ns, NULL,
false, 1.510e-3*ns, NULL,
false, "Bs");
}
theInstance = reinterpret_cast<G4AntiBsMesonZero*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4BMesonMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4BMesonMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -65,7 +65,7 @@ G4BMesonMinus* G4BMesonMinus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.27926*GeV, 4.018e-10*MeV, -1.*eplus,
name, 5.27929*GeV, 4.018e-10*MeV, -1.*eplus,
0, -1, 0,
1, -1, 0,
"meson", 0, 0, -521,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4BMesonPlus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4BMesonPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -65,7 +65,7 @@ G4BMesonPlus* G4BMesonPlus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.27926*GeV, 4.018e-10*MeV, +1.*eplus,
name, 5.27929*GeV, 4.018e-10*MeV, +1.*eplus,
0, -1, 0,
1, +1, 0,
"meson", 0, 0, 521,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4BMesonZero.cc 79342 2014-02-24 11:42:42Z gcosmo $
// $Id: G4BMesonZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -65,11 +65,11 @@ G4BMesonZero* G4BMesonZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.27958*GeV, 4.333e-10*MeV, 0.,
name, 5.27961*GeV, 4.333e-10*MeV, 0.,
0, -1, 0,
1, -1, 0,
"meson", 0, 0, 511,
false, 1.519e-3*ns, NULL,
false, 1.520e-3*ns, NULL,
false, "B");
}
theInstance = reinterpret_cast<G4BMesonZero*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4BcMesonMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4BcMesonMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -64,11 +64,11 @@ G4BcMesonMinus* G4BcMesonMinus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 6.2756*GeV, 1.460e-9*MeV, -1.*eplus,
name, 6.2751*GeV, 1.302e-9*MeV, -1.*eplus,
0, -1, 0,
0, 0, 0,
"meson", 0, 0, -541,
false, 0.452e-3*ns, NULL,
false, 0.507e-3*ns, NULL,
false, "Bc");
}
theInstance = reinterpret_cast<G4BcMesonMinus*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4BcMesonPlus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4BcMesonPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -64,11 +64,11 @@ G4BcMesonPlus* G4BcMesonPlus::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 6.2756*GeV, 1.460e-9*MeV, +1.*eplus,
name, 6.2751*GeV, 1.302e-9*MeV, +1.*eplus,
0, -1, 0,
0, 0, 0,
"meson", 0, 0, 541,
false, 0.452e-3*ns, NULL,
false, 0.507e-3*ns, NULL,
false, "Bc");
}
theInstance = reinterpret_cast<G4BcMesonPlus*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4BsMesonZero.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4BsMesonZero.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -64,11 +64,11 @@ G4BsMesonZero* G4BsMesonZero::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 5.36677*GeV, 4.353e-10*MeV, 0.,
name, 5.36679*GeV, 4.359e-10*MeV, 0.,
0, -1, 0,
0, 0, 0,
"meson", 0, 0, 531,
false, 1.512e-3*ns, NULL,
false, 1.510e-3*ns, NULL,
false, "Bs");
}
theInstance = reinterpret_cast<G4BsMesonZero*>(anInstance);
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4Etac.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4Etac.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,7 +70,7 @@ G4Etac* G4Etac::Definition()
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 2.9836*GeV, 32.2*MeV, 0.0,
name, 2.9836*GeV, 31.8*MeV, 0.0,
0, -1, +1,
0, 0, +1,
"meson", 0, 0, 441,
+2 -2
View File
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4TauMinus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4TauMinus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,7 +70,7 @@ G4TauMinus* G4TauMinus::Definition()
// stable lifetime decay table
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 1.77682*GeV, 2.267e-9*MeV, -1.*eplus,
name, 1.77686*GeV, 2.267e-9*MeV, -1.*eplus,
1, 0, 0,
0, 0, 0,
"lepton", 1, 0, 15,
+2 -2
View File
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4TauPlus.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4TauPlus.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -70,7 +70,7 @@ G4TauPlus* G4TauPlus::Definition()
// stable lifetime decay table
// shortlived subType anti_encoding
anInstance = new G4ParticleDefinition(
name, 1.77682*GeV, 2.267e-9*MeV, 1.*eplus,
name, 1.77686*GeV, 2.267e-9*MeV, 1.*eplus,
1, 0, 0,
0, 0, 0,
"lepton", -1, 0, -15,
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4IonTable.hh 94421 2015-11-16 08:22:56Z gcosmo $
// $Id: G4IonTable.hh 96314 2016-04-06 07:21:51Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -134,13 +134,23 @@ class G4IonTable
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4int lvl=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4int L, G4int lvl);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4double E, G4int J=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4int L,
G4double E, G4int J=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4double E,
char flbChar, G4int J=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4int L, G4double E,
G4int J=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4int L, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J=0);
G4ParticleDefinition* GetIon(G4int Z, G4int A, G4int L, G4double E,
char flbChar, G4int J=0);
// Z: Atomic Number
// A: Atomic Mass (nn + np +nlambda)
// L: Number of Lmabda
// E: Excitaion energy
// lvl: Isomer Level 0: ground state)
// flb: Floating level base (enum defined in G4Ions.hh)
// flbChar: Floating level base denoted bya character (X,Y,Z,U,V,W)
// J: Total Angular momentum (in unit of 1/2) : not used
G4ParticleDefinition* GetIon(G4int encoding);
@@ -151,13 +161,23 @@ class G4IonTable
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4int lvl=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4int L, G4int lvl);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4double E, G4int J=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4int L,
G4double E, G4int J=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4double E,
char flbChar, G4int J=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4int L, G4double E,
G4int J=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4int L, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J=0);
G4ParticleDefinition* FindIon(G4int Z, G4int A, G4int L, G4double E,
char flbChar, G4int J=0);
// Z: Atomic Number
// A: Atomic Mass (nn + np +nlambda)
// L: Number of Lmabda
// E: Excitaion energy
// lvl: Isomer Level 0: ground state)
// flb: Floating level base (enum defined in G4Ions.hh)
// flbChar: Floating level base denoted bya character (X,Y,Z,U,V,W)
// J: Total Angular momentum (in unit of 1/2) : not used
static G4bool IsIon(const G4ParticleDefinition*);
@@ -168,8 +188,10 @@ class G4IonTable
const G4String& GetIonName(G4int Z, G4int A, G4int lvl=0) const;
const G4String& GetIonName(G4int Z, G4int A, G4double E) const;
const G4String& GetIonName(G4int Z, G4int A, G4int L, G4double E) const;
const G4String& GetIonName(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::noFloat) const;
const G4String& GetIonName(G4int Z, G4int A, G4int L, G4double E,
G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::noFloat) const;
const G4String& GetIonName(G4int Z, G4int A, G4int L, G4int lvl) const;
// get ion name
@@ -210,7 +232,9 @@ class G4IonTable
// lvl is isomer level
G4double GetLifeTime(const G4ParticleDefinition*) const;
G4double GetLifeTime(G4int Z, G4int A, G4double E) const;
G4double GetLifeTime(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::noFloat) const;
G4double GetLifeTime(G4int Z, G4int A, G4double E, char flbChar) const;
// Returns a life time of an ion. -1 for stable ion, and -1001 for ion
// that is not listed in G4NuclideTable.
@@ -240,12 +264,13 @@ class G4IonTable
protected:
G4ParticleDefinition* FindIonInMaster(G4int Z, G4int A, G4int lvl=0);
G4ParticleDefinition* FindIonInMaster(G4int Z, G4int A, G4int L, G4int lvl);
G4ParticleDefinition* FindIonInMaster(G4int Z, G4int A, G4double E, G4int J=0);
G4ParticleDefinition* FindIonInMaster(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J=0);
G4ParticleDefinition* FindIonInMaster(G4int Z, G4int A, G4int L,
G4double E, G4int J=0);
G4double E, G4Ions::G4FloatLevelBase flb, G4int J=0);
G4ParticleDefinition* CreateIon(G4int Z, G4int A, G4double E);
G4ParticleDefinition* CreateIon(G4int Z, G4int A, G4int L, G4double E);
G4ParticleDefinition* CreateIon(G4int Z, G4int A, G4double E, G4Ions::G4FloatLevelBase flb);
G4ParticleDefinition* CreateIon(G4int Z, G4int A, G4int L, G4double E, G4Ions::G4FloatLevelBase flb);
G4ParticleDefinition* CreateIon(G4int Z, G4int A, G4int lvl=0);
G4ParticleDefinition* CreateIon(G4int Z, G4int A, G4int L, G4int lvl);
@@ -263,7 +288,7 @@ class G4IonTable
// Create Ion
G4IsotopeProperty* FindIsotope(G4int Z, G4int A, G4double E) const;
G4IsotopeProperty* FindIsotope(G4int Z, G4int A, G4double E, G4Ions::G4FloatLevelBase flb) const;
G4IsotopeProperty* FindIsotope(G4int Z, G4int A, G4int lvl) const;
// Ask properties of isotopes to this G4VIsotopeTable
@@ -296,7 +321,6 @@ class G4IonTable
// ion list. This implementation is equivalent to make the ion table thread
// private. The two shadow ponters are used by each worker thread to copy the
// content from the master thread.
static const G4double tolerance;
enum { numberOfElements = 118};
static const G4String elementName[numberOfElements];
+104 -2
View File
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4Ions.hh 69557 2013-05-08 12:01:40Z gcosmo $
// $Id: G4Ions.hh 96314 2016-04-06 07:21:51Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -91,12 +91,33 @@ class G4Ions : public G4ParticleDefinition
// Get Isomer level (=0 for ground state)
G4int GetIsomerLevel() const;
private:
// enumerator for floating level base
enum class G4FloatLevelBase { noFloat=0, plus_U, plus_V, plus_W, plus_X, plus_Y, plus_Z };
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar);
static G4Ions::G4FloatLevelBase FloatLevelBase(G4int flbIdx);
static char FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb);
// set/get methods for floating level base
G4Ions::G4FloatLevelBase GetFloatLevelBase() const;
G4int GetFloatLevelBaseIndex() const;
void SetFloatLevelBase(G4Ions::G4FloatLevelBase flb);
void SetFloatLevelBase(char flbChar);
void SetFloatLevelBase(G4int flbIdx);
private:
G4double theExcitationEnergy;
G4int theIsomerLevel;
G4FloatLevelBase floatLevelBase;
};
#define plusU G4Ions::G4FloatLevelBase::plus_U
#define plusV G4Ions::G4FloatLevelBase::plus_V
#define plusW G4Ions::G4FloatLevelBase::plus_W
#define plusX G4Ions::G4FloatLevelBase::plus_X
#define plusY G4Ions::G4FloatLevelBase::plus_Y
#define plusZ G4Ions::G4FloatLevelBase::plus_Z
inline
G4Ions* G4Ions::IonsDefinition()
{
@@ -121,6 +142,87 @@ inline
return theIsomerLevel;
}
inline
G4Ions::G4FloatLevelBase G4Ions::GetFloatLevelBase() const
{
return floatLevelBase;
}
inline
G4int G4Ions::GetFloatLevelBaseIndex() const
{
return static_cast<G4int>(floatLevelBase);
}
inline
void G4Ions::SetFloatLevelBase(G4Ions::G4FloatLevelBase flb)
{
floatLevelBase = flb;
}
inline
void G4Ions::SetFloatLevelBase(char flbChar)
{
floatLevelBase = FloatLevelBase(flbChar);
}
inline
void G4Ions::SetFloatLevelBase(G4int flbIdx)
{
floatLevelBase = FloatLevelBase(flbIdx);
}
inline
G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(char flbChar)
{
G4Ions::G4FloatLevelBase flb = G4FloatLevelBase::noFloat;
switch(flbChar)
{
case 'u': case 'U':
flb = plusU;
break;
case 'v': case 'V':
flb = plusV;
break;
case 'w': case 'W':
flb = plusW;
break;
case 'x': case 'X':
flb = plusX;
break;
case 'y': case 'Y':
flb = plusY;
break;
case 'z': case 'Z':
flb = plusZ;
break;
default:
break;
}
return flb;
}
inline
G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(G4int flbIdx)
{
static G4Ions::G4FloatLevelBase flb[] =
{ G4FloatLevelBase::noFloat,
G4FloatLevelBase::plus_U,
G4FloatLevelBase::plus_V,
G4FloatLevelBase::plus_W,
G4FloatLevelBase::plus_X,
G4FloatLevelBase::plus_Y,
G4FloatLevelBase::plus_Z };
return flb[flbIdx];
}
inline
char G4Ions::FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb)
{
static char flbChar[] = {'\0','U','V','W','X','Y','Z'};
return flbChar[static_cast<G4int>(flb)];
}
#endif
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4IsotopeProperty.hh 69557 2013-05-08 12:01:40Z gcosmo $
// $Id: G4IsotopeProperty.hh 96314 2016-04-06 07:21:51Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -41,6 +41,7 @@
#include "globals.hh"
class G4DecayTable;
#include "G4Ions.hh"
class G4IsotopeProperty
{
// Class Description
@@ -89,6 +90,11 @@ class G4IsotopeProperty
G4int GetIsomerLevel() const;
void SetIsomerLevel(G4int level);
// Set/Get floating level base
G4Ions::G4FloatLevelBase GetFloatLevelBase() const;
void SetFloatLevelBase(G4Ions::G4FloatLevelBase flb);
void SetFloatLevelBase(G4int flbIndex);
// Set/Get life time
G4double GetLifeTime() const;
void SetLifeTime(G4double T);
@@ -109,6 +115,7 @@ class G4IsotopeProperty
G4DecayTable* fDecayTable; // decay Table
G4double fMagneticMoment; // magnetic moment
G4int fIsomerLevel; // isomer level
G4Ions::G4FloatLevelBase fFloatLevelBase; // floating level base
};
inline
@@ -205,6 +212,25 @@ inline
{
fDecayTable = table;
}
inline
G4Ions::G4FloatLevelBase G4IsotopeProperty::GetFloatLevelBase() const
{
return fFloatLevelBase;
}
inline
void G4IsotopeProperty::SetFloatLevelBase(G4Ions::G4FloatLevelBase flb)
{
fFloatLevelBase = flb;
}
inline
void G4IsotopeProperty::SetFloatLevelBase(G4int flbIndex)
{
fFloatLevelBase = G4Ions::FloatLevelBase(flbIndex);
}
#endif
@@ -214,5 +240,3 @@ inline
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4KL3DecayChannel.hh 67971 2013-03-13 10:13:24Z gcosmo $
// $Id: G4KL3DecayChannel.hh 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -66,7 +66,7 @@ class G4KL3DecayChannel :public G4VDecayChannel
protected:
// assignment of daughter particles for arrays of daughters[] etc.
enum{idPi=0, idLepton=1, idNutrino=2};
G4double daughterM[3];
//G4double daughterM[3];
protected:
// calcurate momentum of daughters
@@ -88,11 +88,10 @@ class G4KL3DecayChannel :public G4VDecayChannel
// pLambda : linear energy dependence of f+
// pXi0 : = f+(0)/f-
// pNorm : normalization factor
G4double DalitzDensity(G4double Epi, G4double El, G4double Enu);
G4double DalitzDensity(G4double parentmass, G4double Epi, G4double El, G4double Enu,
G4double massPi, G4double massL , G4double massNu );
private:
// constants used in DalitzDensity()
// Kon mass
G4double massK;
// coefficients
G4double pLambda;
G4double pXi0;
@@ -78,39 +78,33 @@ public: // With Description
private:
// Radiative Correction Factors
G4double F_c(G4double x, G4double x0);
G4double F_theta(G4double x, G4double x0);
G4double R_c(G4double x);
G4double EMMU;
G4double EMASS;
G4double F_c(G4double x, G4double x0 , G4double omega);
G4double F_theta(G4double x, G4double x0 , G4double omega);
G4double R_c(G4double x , G4double omega);
};
inline G4double G4MuonDecayChannelWithSpin::F_c(G4double x, G4double x0)
inline G4double G4MuonDecayChannelWithSpin::F_c(G4double x, G4double x0 , G4double omega)
{
G4double omega = std::log(EMMU/EMASS);
G4double f_c;
f_c = (5.+17.*x-34.*x*x)*(omega+std::log(x))-22.*x+34.*x*x;
f_c = (1.-x)/(3.*x*x)*f_c;
f_c = (6.-4.*x)*R_c(x)+(6.-6.*x)*std::log(x) + f_c;
f_c = (6.-4.*x)*R_c(x,omega)+(6.-6.*x)*std::log(x) + f_c;
f_c = (CLHEP::fine_structure_const/CLHEP::twopi) * (x*x-x0*x0) * f_c;
return f_c;
}
inline G4double G4MuonDecayChannelWithSpin::F_theta(G4double x, G4double x0)
inline G4double G4MuonDecayChannelWithSpin::F_theta(G4double x, G4double x0,G4double omega)
{
G4double omega = std::log(EMMU/EMASS);
G4double f_theta;
f_theta = (1.+x+34*x*x)*(omega+std::log(x))+3.-7.*x-32.*x*x;
f_theta = f_theta + ((4.*(1.-x)*(1.-x))/x)*std::log(1.-x);
f_theta = (1.-x)/(3.*x*x) * f_theta;
f_theta = (2.-4.*x)*R_c(x)+(2.-6.*x)*std::log(x)-f_theta;
f_theta = (2.-4.*x)*R_c(x,omega)+(2.-6.*x)*std::log(x)-f_theta;
f_theta = (CLHEP::fine_structure_const/CLHEP::twopi) * (x*x-x0*x0) * f_theta;
return f_theta;
@@ -93,19 +93,21 @@ public:
G4double GetLevelTolerance() { return flevelTolerance; };
void AddState(G4int,G4int,G4double,G4double,G4int ionJ=0,G4double ionMu=0.0);
void AddState(G4int,G4int,G4double,G4int,G4double,G4int ionJ=0,G4double ionMu=0.0);
//G4bool Exists(G4double,G4double,G4double);
//Use GetIsotope(G4int Z, G4int A, G4double E)
//void FillProperty(G4ParticleDefinition*);
size_t GetSizeOfIsotopeList(){ return ( fIsotopeList ? fIsotopeList->size() : static_cast<size_t>(0)) ; };
size_t GetSizeOfIsotopeList()
{ return ( fIsotopeList ? fIsotopeList->size() : static_cast<size_t>(0)) ; };
//
// with description
//
virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E);
virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::noFloat);
virtual G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, G4int lvl=0);
//
// again it will replace the pure virtual one in the abstract base class.
@@ -113,6 +115,7 @@ public:
// Z: Atomic Number
// A: Atomic Mass
// E: Excitaion energy
// flb: floating level base (enum defined in G4Ions.hh)
// or
// lvl: isomer level
//
@@ -159,8 +162,10 @@ private:
G4IsotopeList* fIsotopeList;
G4double flevelTolerance;
G4NuclideTableMessenger* fMessenger;
};
private:
G4double StripFloatLevelBase(G4double E, G4int& flbIndex);
};
inline
size_t G4NuclideTable::entries() const
@@ -174,4 +179,5 @@ inline
if ( fIsotopeList && idx<fIsotopeList->size()) return (*fIsotopeList)[idx];
else return 0;
}
#endif
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4PhaseSpaceDecayChannel.hh 92057 2015-08-14 13:34:55Z gcosmo $
// $Id: G4PhaseSpaceDecayChannel.hh 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -41,6 +41,7 @@
#include "G4ios.hh"
#include "globals.hh"
#include "G4VDecayChannel.hh"
#include "G4Cache.hh"
class G4PhaseSpaceDecayChannel :public G4VDecayChannel
{
@@ -73,8 +74,9 @@ class G4PhaseSpaceDecayChannel :public G4VDecayChannel
public:
static G4double Pmx(G4double e, G4double p1, G4double p2);
private:
static G4ThreadLocal G4double current_parent_mass;
private:
//A thread-local object
G4Cache<G4double> current_parent_mass;
G4DecayProducts *OneBodyDecayIt();
G4DecayProducts *TwoBodyDecayIt();
G4DecayProducts *ThreeBodyDecayIt();
@@ -77,31 +77,6 @@ class G4PionRadiativeDecayChannel : public G4VDecayChannel
virtual G4DecayProducts *DecayIt(G4double);
private:
G4double beta;
G4double cib;
G4double csdp;
G4double csdm;
G4double cif;
G4double cig;
G4double xl, yl, xu, yu, d2wmax;
G4double D2W(const G4double x, const G4double y);
};
inline G4double G4PionRadiativeDecayChannel::D2W(const G4double x,
const G4double y)
{
G4double d2w = cib*(1.-y)*(1.+((1.-x)*(1.-x)))/((x*x)*(x+y-1.)) +
csdp*(1.-x)*((x+y-1.)*(x+y-1.)) +
csdm*(1.-x)*((1.-y)*(1.-y)) +
cif*(x-1.)*(1.-y)/x +
cig*(1.-y)*(1.-x+(x*x)/(x+y-1.))/x;
return d2w;
}
#endif
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4VDecayChannel.hh 93024 2015-09-30 15:59:32Z gcosmo $
// $Id: G4VDecayChannel.hh 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -43,65 +43,13 @@
#include "G4ios.hh"
#include "globals.hh"
#include "G4ThreeVector.hh"
/////@@#include "G4PDefSplitter.hh"
#include "G4Threading.hh"
#include "G4AutoLock.hh"
class G4ParticleDefinition;
class G4DecayProducts;
class G4ParticleTable;
/////@@class G4DecayChannelData
/////@@{
/////@@ // Encapsulates the fields associated to the class G4VDecayChannel that
/////@@ // may not be read-only.
/////@@
/////@@ public:
/////@@
/////@@ void initialize()
/////@@ {
/////@@ parent = 0;
/////@@ daughters = 0;
/////@@ parent_mass = 0.0;
/////@@ daughters_mass = 0;
/////@@ daughters_width = 0;
/////@@ }
/////@@
/////@@ G4ParticleDefinition* parent;
/////@@ G4ParticleDefinition** daughters;
/////@@ G4double parent_mass;
/////@@ G4double* daughters_mass;
/////@@ G4double* daughters_width;
/////@@};
/////@@
/////@@// The type G4DecayChannelManager is introduced to encapsulate the methods used
/////@@// by both the master thread and worker threads to allocate memory space for
/////@@// the fields encapsulated by the class G4DecayChannelData. When each thread
/////@@// initializes the value for these fields, it refers to them using a macro
/////@@// definition defined below. For every G4DecayChannel instance, there is
/////@@// a corresponding G4DecayChannelData instance. All G4DecayChannelData
/////@@// instances are organized by the class G4DecayChannelManager as an array.
/////@@// The field "int instanceID" is added to the class G4DecayChannel.
/////@@// The value of this field in each G4DecayChannel instance is the subscript
/////@@// of the corresponding G4DecayChannelData instance.
/////@@// In order to use the class G4DecayChannelManager, we add a static member in
/////@@// G4DecayChannel as follows: "static G4DecayChannelManager subInstanceManager".
/////@@// For the master thread, the array for G4DecayChannelData instances grows
/////@@// dynamically along with G4DecayChannel instances are created.
/////@@// For each worker thread, it copies the array of G4DecayChannelData instances
/////@@// from the master thread.
/////@@// In addition, it invokes a method similiar to the constructor explicitly
/////@@// to achieve the partial effect for each instance in the array.
/////@@//
/////@@typedef G4PDefSplitter<G4DecayChannelData> G4DecayChannelManager;
/////@@
/////@@// These macros change the references to fields that are now encapsulated
/////@@// in the class G4DecayChannelData.
/////@@//
/////@@#define G4MT_parent ((G4VDecayChannel::subInstanceManager.offset[instanceID]).parent)
/////@@#define G4MT_daughters ((G4VDecayChannel::subInstanceManager.offset[instanceID]).daughters)
/////@@#define G4MT_parent_mass ((G4VDecayChannel::subInstanceManager.offset[instanceID]).parent_mass)
/////@@#define G4MT_daughters_mass ((G4VDecayChannel::subInstanceManager.offset[instanceID]).daughters_mass)
/////@@#define G4MT_daughters_width ((G4VDecayChannel::subInstanceManager.offset[instanceID]).daughters_width)
/////@@
class G4VDecayChannel
{
// Class Description:
@@ -180,17 +128,16 @@ class G4VDecayChannel
void SetPolarization(const G4ThreeVector&);
const G4ThreeVector& GetPolarization() const;
/////@@
/////@@ // returns the instance ID.
/////@@ inline G4int GetInstanceID() const;
/////@@ // returns the private data instance manager.
/////@@ static const G4DecayChannelManager& GetSubInstanceManager();
protected: // with description
// clear daughters array
void ClearDaughtersName();
protected:
inline void CheckAndFillDaughters();
inline void CheckAndFillParent();
private:
// fill daughters array
void FillDaughters();
// fill parent
@@ -242,15 +189,13 @@ class G4VDecayChannel
static const G4String noName;
/////@@ // This field is used as instance ID.
/////@@ G4int instanceID;
/////@@ // This field helps to use the class G4DecayChannelManager introduced above.
/////@@ G4PART_DLL static G4DecayChannelManager subInstanceManager;
G4ParticleDefinition* G4MT_parent;
G4ParticleDefinition** G4MT_daughters;
G4double G4MT_parent_mass;
G4double* G4MT_daughters_mass;
G4double* G4MT_daughters_width;
G4Mutex daughtersMutex;
G4Mutex parentMutex;
};
// ------------------------------------------------------------
@@ -267,7 +212,7 @@ inline
G4ParticleDefinition* G4VDecayChannel::GetDaughter(G4int anIndex)
{
// pointers to daughter particles are filled, if they are not set yet
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillDaughters();
// get the pointer to a daughter particle
if ( (anIndex>=0) && (anIndex<numberOfDaughters) ) {
@@ -311,7 +256,7 @@ inline
G4ParticleDefinition* G4VDecayChannel::GetParent()
{
// the pointer to the parent particle is filled, if it is not set yet
if (G4MT_parent == 0) FillParent();
CheckAndFillParent();
// get the pointer to the parent particle
return G4MT_parent;
}
@@ -375,8 +320,20 @@ inline
return parent_polarization;
}
/////@@inline
/////@@ G4int G4VDecayChannel::GetInstanceID() const { return instanceID; }
inline
void G4VDecayChannel::CheckAndFillDaughters() {
G4AutoLock l(&daughtersMutex);
if ( G4MT_daughters ==0 ) {
l.unlock();
FillDaughters();
}
}
inline void G4VDecayChannel::CheckAndFillParent() {
G4AutoLock l(&parentMutex);
if ( G4MT_parent == 0 ) {
l.unlock();
FillParent();
}
}
#endif
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4VIsotopeTable.hh 69557 2013-05-08 12:01:40Z gcosmo $
// $Id: G4VIsotopeTable.hh 96314 2016-04-06 07:21:51Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -38,6 +38,7 @@
#include "G4ios.hh"
#include "globals.hh"
#include "G4Ions.hh"
class G4IsotopeProperty;
@@ -62,7 +63,8 @@ class G4VIsotopeTable
public: // With Description
// pure virtual method
virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E)=0;
virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::noFloat)=0;
virtual G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, G4int level=0);
// Search the isotope in the G4VIsotopeTable.
// The isotope is desingated by
@@ -70,6 +72,7 @@ class G4VIsotopeTable
// G4int A: number of nucleon (Atomic mass)
// and
// G4double E: excited energy
// G4Ions::G4FloatLevelBase flb: floating level base (enum defined in G4Ions.hh)
// or
// G4int level: isomer level
// in the given G4IsotopeProperty.
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DalitzDecayChannel.cc 91896 2015-08-10 09:54:06Z gcosmo $
// $Id: G4DalitzDecayChannel.cc 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -108,8 +108,8 @@ G4DecayProducts *G4DalitzDecayChannel::DecayIt(G4double)
#ifdef G4VERBOSE
if (GetVerboseLevel()>1) G4cout << "G4DalitzDecayChannel::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4DecayTable.cc 92057 2015-08-14 13:34:55Z gcosmo $
// $Id: G4DecayTable.cc 95052 2016-01-21 08:34:03Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -96,8 +96,7 @@ G4VDecayChannel *G4DecayTable::SelectADecayChannel(G4double parentMass)
if (r < sumBR) return (*i);
}
}
G4VDecayChannelVector::iterator i = channels->begin();
return (*i);
return 0;
}
void G4DecayTable::DumpInfo() const
+146 -77
View File
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4IonTable.cc 94421 2015-11-16 08:22:56Z gcosmo $
// $Id: G4IonTable.cc 96797 2016-05-09 10:13:42Z gcosmo $
//
//
// --------------------------------------------------------------
@@ -76,7 +76,6 @@ G4ThreadLocal G4IonTable::G4IonList* G4IonTable::fIonList = 0;
G4ThreadLocal std::vector<G4VIsotopeTable*> *G4IonTable::fIsotopeTableList = 0;
G4IonTable::G4IonList* G4IonTable::fIonListShadow = 0;
std::vector<G4VIsotopeTable*> *G4IonTable::fIsotopeTableListShadow = 0;
const G4double G4IonTable::tolerance = 2.0*keV;
namespace lightions {
static const G4ParticleDefinition* p_proton=0;
@@ -241,7 +240,8 @@ void G4IonTable::DestroyWorkerG4IonTable()
////////////////////
// -- CreateIon method ------
////////////////////
G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb)
{
G4ParticleDefinition* ion=0;
@@ -264,7 +264,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
return 0;
}
G4double life = -1.0;
G4double life = 0.0;
G4DecayTable* decayTable =0;
G4bool stable = true;
G4double mu = 0.0;
@@ -272,7 +272,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
G4int lvl =0;
G4int J=0;
const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E);
const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E, flb);
if (fProperty !=0 ){
Eex = fProperty->GetEnergy();
lvl = fProperty->GetIsomerLevel();
@@ -288,7 +288,10 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
if (GetVerboseLevel()>1) {
G4ExceptionDescription ed;
ed << "G4IonTable::CreateIon() : G4IsotopeProperty object was not found for"
<< " Z = " << Z << " A = " << A << " E = " << E/keV << " (keV).\n"
<< " Z = " << Z << " A = " << A << " E = " << E/keV << " (keV)";
if(flb!=G4Ions::G4FloatLevelBase::noFloat)
{ ed << " FloatingLevel +" << G4Ions::FloatLevelBaseChar(flb); }
ed << ".\n"
<< " Physics quantities such as life are not set for this ion.";
G4Exception( "G4IonTable::CreateIon()","PART70105", JustWarning, ed);
}
@@ -299,13 +302,13 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
if (Eex>0.0) lvl=9;
}
Eex = G4NuclideTable::Round(Eex);
//Eex = G4NuclideTable::Round(Eex);
if (Eex==0.0) lvl=0;
// ion name
G4String name ="";
/////////////if (lvl<9) name = GetIonName(Z, A, lvl);
if (lvl==0) name = GetIonName(Z, A, lvl);
else name = GetIonName(Z, A, Eex);
else name = GetIonName(Z, A, Eex, flb);
// PDG encoding
G4int encoding = GetNucleusEncoding(Z,A,E,lvl);
@@ -336,6 +339,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
//
ion->SetPDGMagneticMoment(mu);
static_cast<G4Ions*>(ion)->SetFloatLevelBase(flb);
//No Anti particle registered
ion->SetAntiPDGEncoding(0);
@@ -374,9 +378,10 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E)
////////////////////
G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4double E)
G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4double E,
G4Ions::G4FloatLevelBase flb)
{
if (LL==0) return CreateIon(Z,A,E);
if (LL==0) return CreateIon(Z,A,E,flb);
// create hyper nucleus
G4ParticleDefinition* ion=0;
@@ -400,12 +405,13 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4double
}
G4int J=0;
G4double life = -1.0;
G4double life = 0.0;
G4DecayTable* decayTable =0;
G4bool stable = true;
// excitation energy
G4double Eex = G4NuclideTable::Round(E);
//G4double Eex = G4NuclideTable::Round(E);
G4double Eex = E;
G4double mass = GetNucleusMass(Z, A, LL)+ Eex;
G4int lvl = 0;
// lvl is assigned to 9 temporally
@@ -421,7 +427,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4double
// spin, parity, isospin values are fixed
//
// get ion name
G4String name = GetIonName(Z, A, LL, Eex);
G4String name = GetIonName(Z, A, LL, Eex, flb);
ion = new G4Ions( name, mass, 0.0*MeV, charge,
J, +1, 0,
@@ -436,6 +442,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4double
G4double mu = 0.0; // magnetic moment
ion->SetPDGMagneticMoment(mu);
static_cast<G4Ions*>(ion)->SetFloatLevelBase(flb);
//No Anti particle registered
ion->SetAntiPDGEncoding(0);
@@ -462,7 +469,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4double
////////////////////////////////
G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int lvl)
{
if(lvl == 0) return CreateIon(Z,A,0.0);
if(lvl == 0) return CreateIon(Z,A,0.0,G4Ions::G4FloatLevelBase::noFloat);
G4Exception( "G4IonTable::CreateIon()","PART105", JustWarning,
"Ion cannot be created by an isomer level. Use excitation energy.");
return 0;
@@ -473,6 +480,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int lvl)
G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4int lvl)
{
if (LL==0) return CreateIon(Z,A,lvl);
if(lvl == 0) return CreateIon(Z,A,0.0,G4Ions::G4FloatLevelBase::noFloat);
if (lvl>0) {
G4ExceptionDescription ed;
@@ -482,7 +490,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4int lv
return 0;
}
return CreateIon(A,Z,LL,0.0);
return 0;
}
////////////////////
@@ -498,37 +506,31 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int lvl)
}
#endif
return 0;
}
}
if ( lvl == 0 ) return GetIon(Z,A,0.0);
// Search ions with A, Z, lvl
G4ParticleDefinition* ion = FindIon(Z,A,lvl);
// create ion
#ifdef G4MULTITHREADED
if(ion == 0)
{
if(G4Threading::IsWorkerThread())
{
if (ion ==0 ){
if(G4Threading::IsWorkerThread()){
G4MUTEXLOCK(&G4IonTable::ionTableMutex);
ion = FindIonInMaster(Z,A,lvl);
if(ion == 0 && lvl == 0) ion = CreateIon(Z,A,lvl);
if(ion != 0) InsertWorker(ion);
G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
}
else
{ if(lvl == 0) ion = CreateIon(Z,A,lvl); }
}
}
#else
if(ion == 0 && lvl == 0) ion = CreateIon(Z, A, lvl);
#endif
// if(ion == 0)
// {
// G4ExceptionDescription ed;
// ed << "Isomer level " << lvl << " is unknown for the isotope (Z="
// << Z << ", A=" << A << "). Null pointer is returned.";
// G4Exception( "G4IonTable::GetIon()","PART106", JustWarning, ed);
// }
if (ion ==0 ){
G4Exception( "G4IonTable::GetIon()","PART105", JustWarning,
"Ion cannot be created by an isomer level. Use excitation energy.");
// G4ExceptionDescription ed;
// ed << "Isomer level " << lvl << " is unknown for the isotope (Z="
// << Z << ", A=" << A << "). Null pointer is returned.";
// G4Exception( "G4IonTable::GetIon()","PART106", JustWarning, ed);
}
return ion;
}
@@ -565,16 +567,15 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4int lvl)
if (ion == 0) {
if (lvl==0) {
#ifdef G4MULTITHREADED
if(G4Threading::IsWorkerThread())
{
if(G4Threading::IsWorkerThread()){
G4MUTEXLOCK(&G4IonTable::ionTableMutex);
ion = FindIonInMaster(Z,A,LL,lvl);
if(ion == 0) ion = CreateIon(Z, A, LL, lvl);
InsertWorker(ion);
G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
} else {
ion = CreateIon(Z, A, LL, lvl);
}
else
{ ion = CreateIon(Z, A, LL, lvl); }
#else
ion = CreateIon(Z, A, LL, lvl);
#endif
@@ -593,6 +594,16 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4int lvl)
////////////////////
G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E, G4int J)
{ return GetIon(Z,A,E,G4Ions::G4FloatLevelBase::noFloat,J); }
////////////////////
G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E,
char flbChar, G4int J)
{ return GetIon(Z,A,E,G4Ions::FloatLevelBase(flbChar),J); }
////////////////////
G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J)
{
if ( (A<1) || (Z<=0) || (E<0.0) || (A>999) || (J<0) ) {
#ifdef G4VERBOSE
@@ -605,7 +616,7 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E, G4int J)
}
// Search ions with A, Z
G4ParticleDefinition* ion = FindIon(Z,A,E,J);
G4ParticleDefinition* ion = FindIon(Z,A,E,flb,J);
// create ion
#ifdef G4MULTITHREADED
@@ -614,16 +625,16 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E, G4int J)
if(G4Threading::IsWorkerThread())
{
G4MUTEXLOCK(&G4IonTable::ionTableMutex);
ion = FindIonInMaster(Z,A,E,J);
if(ion == 0) ion = CreateIon(Z,A,E);
ion = FindIonInMaster(Z,A,E,flb,J);
if(ion == 0) ion = CreateIon(Z,A,E,flb);
InsertWorker(ion);
G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
}
else
{ ion = CreateIon(Z,A,E); }
{ ion = CreateIon(Z,A,E,flb); }
}
#else
if (ion == 0) ion = CreateIon(Z, A, E);
if (ion == 0) ion = CreateIon(Z,A,E,flb);
#endif
return ion;
@@ -631,8 +642,18 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E, G4int J)
////////////////////
G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4double E, G4int J)
{ return GetIon(Z,A,LL,E,G4Ions::G4FloatLevelBase::noFloat,J); }
////////////////////
G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4double E,
char flbChar, G4int J)
{ return GetIon(Z,A,LL,E,G4Ions::FloatLevelBase(flbChar),J); }
////////////////////
G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J)
{
if (LL==0) return GetIon(Z,A,E,J);
if (LL==0) return GetIon(Z,A,E,flb,J);
if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) {
#ifdef G4VERBOSE
@@ -655,7 +676,7 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4double E,
}
// Search ions with A, Z
G4ParticleDefinition* ion = FindIon(Z,A,LL,E,J);
G4ParticleDefinition* ion = FindIon(Z,A,LL,E,flb,J);
// create ion
#ifdef G4MULTITHREADED
@@ -664,16 +685,16 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4double E,
if(G4Threading::IsWorkerThread())
{
G4MUTEXLOCK(&G4IonTable::ionTableMutex);
ion = FindIonInMaster(Z,A,LL,E,J);
if(ion == 0) ion = CreateIon(Z,A,LL,E);
ion = FindIonInMaster(Z,A,LL,E,flb,J);
if(ion == 0) ion = CreateIon(Z,A,LL,E,flb);
InsertWorker(ion);
G4MUTEXUNLOCK(&G4IonTable::ionTableMutex);
}
else
{ ion = CreateIon(Z,A,LL,E); }
{ ion = CreateIon(Z,A,LL,E,flb); }
}
#else
if(ion == 0) ion = CreateIon(Z, A, LL, E);
if(ion == 0) ion = CreateIon(Z,A,LL,E,flb);
#endif
return ion;
@@ -699,8 +720,20 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int encoding)
return GetIon( Z, A, LL, IsoLvl);
}
////////////////////
/////////////////////
// -- FindIon methods ------
/////////////////////
G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4double E, G4int J)
{ return FindIon(Z,A,E,G4Ions::G4FloatLevelBase::noFloat,J); }
////////////////////
G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4double E,
char flbChar, G4int J)
{ return FindIon(Z,A,E,G4Ions::FloatLevelBase(flbChar),J); }
////////////////////
G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J)
{
if ( (A<1) || (Z<=0) || (J<0) || (E<0.0) || (A>999) ) {
#ifdef G4VERBOSE
@@ -732,9 +765,12 @@ G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4double E, G4int J)
if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
// excitation level
G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
if ( std::fabs( E - anExcitaionEnergy )< tolerance) {
isFound = true;
break;
if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
if(((const G4Ions*)(ion))->GetFloatLevelBase()==flb)
{
isFound = true;
break;
}
}
}
}
@@ -749,8 +785,18 @@ G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4double E, G4int J)
////////////////////
G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4double E, G4int J)
{ return FindIon(Z,A,LL,E,G4Ions::G4FloatLevelBase::noFloat,J); }
////////////////////
G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4double E,
char flbChar, G4int J)
{ return FindIon(Z,A,LL,E,G4Ions::FloatLevelBase(flbChar),J); }
////////////////////
G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J)
{
if (LL==0) return FindIon(Z,A,E,J);
if (LL==0) return FindIon(Z,A,E,flb,J);
if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) {
#ifdef G4VERBOSE
@@ -778,9 +824,12 @@ G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4double E
if( ion->GetQuarkContent(3) != LL) break;
// excitation level
G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
if ( std::fabs( E - anExcitaionEnergy )< tolerance) {
isFound = true;
break;
if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
if(((const G4Ions*)(ion))->GetFloatLevelBase()==flb)
{
isFound = true;
break;
}
}
}
@@ -989,7 +1038,8 @@ G4bool G4IonTable::GetNucleusByEncoding(G4int encoding,
#include "G4AutoDelete.hh"
/////////////////
const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4double E) const
const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb) const
{
static G4ThreadLocal G4String *pname = 0;
if (!pname) { pname = new G4String(""); G4AutoDelete::Register(pname); }
@@ -1010,7 +1060,10 @@ const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4double E) const
os->str("");
std::ostringstream& oo = *os;
// Excited nucleus
oo<<'['<<E/keV << ']';
oo<<'['<<E/keV;
if(flb!=G4Ions::G4FloatLevelBase::noFloat)
{ oo<<G4Ions::FloatLevelBaseChar(flb); }
oo<< ']';
name += os->str();
}
@@ -1018,9 +1071,10 @@ const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4double E) const
}
/////////////////
const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4int LL, G4double E) const
const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4int LL, G4double E,
G4Ions::G4FloatLevelBase flb) const
{
if (LL==0) return GetIonName(Z, A, E);
if (LL==0) return GetIonName(Z, A, E, flb);
static G4ThreadLocal G4String *pname = 0;
if (!pname) { pname = new G4String(""); G4AutoDelete::Register(pname); }
G4String &name = *pname;
@@ -1028,7 +1082,7 @@ const G4String& G4IonTable::GetIonName(G4int Z, G4int A, G4int LL, G4double E) c
for (int i =0; i<LL; i++){
name +="L";
}
name += GetIonName(Z, A, E);
name += GetIonName(Z, A, E, flb);
return name;
}
@@ -1507,7 +1561,8 @@ G4VIsotopeTable* G4IonTable::GetIsotopeTable(size_t index) const
////////////////////
G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4double E) const
G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb) const
{
if (fIsotopeTableList ==0) return 0;
if (fIsotopeTableList->size()==0) return 0;
@@ -1517,7 +1572,7 @@ G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4double E) const
// iterate
for (size_t i = 0; i<fIsotopeTableList->size(); ++i) {
G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[fIsotopeTableList->size()-i-1];
property = fIsotopeTable->GetIsotope(Z,A,E);
property = fIsotopeTable->GetIsotope(Z,A,E,flb);
if(property) break;
}
@@ -1640,7 +1695,8 @@ G4int G4IonTable::size() const
////////////////////
G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4double E, G4int /*J*/)
G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb, G4int /*J*/)
{
// Search ions with A, Z ,E
// !! J is omitted now !!
@@ -1655,9 +1711,12 @@ G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4double E,
if ( ( ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break;
// excitation level
G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
if ( std::fabs( E - anExcitaionEnergy )< tolerance) {
isFound = true;
break;
if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
if(((const G4Ions*)(ion))->GetFloatLevelBase()==flb)
{
isFound = true;
break;
}
}
}
@@ -1670,9 +1729,10 @@ G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4double E,
////////////////////
G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4int LL, G4double E, G4int J)
G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4int LL, G4double E,
G4Ions::G4FloatLevelBase flb, G4int J)
{
if (LL==0) return FindIon(Z,A,E,J);
if (LL==0) return FindIon(Z,A,E,flb,J);
// Search ions with A, Z ,E
// !! J is omitted now !!
@@ -1688,9 +1748,12 @@ G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4int LL, G4
if( ion->GetQuarkContent(3) != LL) break;
// excitation level
G4double anExcitaionEnergy = ((const G4Ions*)(ion))->GetExcitationEnergy();
if ( std::fabs( E - anExcitaionEnergy )< tolerance) {
isFound = true;
break;
if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance() ) {
if(((const G4Ions*)(ion))->GetFloatLevelBase()==flb)
{
isFound = true;
break;
}
}
}
@@ -1785,10 +1848,16 @@ G4double G4IonTable::GetLifeTime(const G4ParticleDefinition* particle) const
return particle->GetPDGLifeTime();
}
G4double G4IonTable::GetLifeTime(G4int Z, G4int A, G4double E) const
////////////////////
G4double G4IonTable::GetLifeTime(G4int Z, G4int A, G4double E, char flbChar) const
{ return GetLifeTime(Z,A,E,G4Ions::FloatLevelBase(flbChar)); }
////////////////////
G4double G4IonTable::GetLifeTime(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb) const
{
G4double life = -1001.0;
const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E);
const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E, flb);
if( fProperty !=0 ) life = fProperty->GetLifeTime();
return life;
}
+3 -2
View File
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4Ions.cc 72955 2013-08-14 14:23:14Z gcosmo $
// $Id: G4Ions.cc 96314 2016-04-06 07:21:51Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -65,7 +65,8 @@ G4Ions::G4Ions(
lepton,baryon,encoding,stable,lifetime,decaytable,
shortlived, subType, anti_encoding),
theExcitationEnergy(excitation),
theIsomerLevel(isomer)
theIsomerLevel(isomer),
floatLevelBase(G4FloatLevelBase::noFloat)
{
if ((aName == "proton") || (aName == "neutron")) {
isGeneralIon = false ;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4IsotopeProperty.cc 69557 2013-05-08 12:01:40Z gcosmo $
// $Id: G4IsotopeProperty.cc 96314 2016-04-06 07:21:51Z gcosmo $
//
//
// ----------------------------------------------------------------------
@@ -50,7 +50,8 @@ G4IsotopeProperty::G4IsotopeProperty():
fISpin(0),fEnergy(0.0),
fLifeTime(-1.0),fDecayTable(0),
fMagneticMoment(0.0),
fIsomerLevel(-1)
fIsomerLevel(-1),
fFloatLevelBase(G4Ions::G4FloatLevelBase::noFloat)
{
}
@@ -69,6 +70,7 @@ G4IsotopeProperty::G4IsotopeProperty(const G4IsotopeProperty& right)
fEnergy = right.fEnergy;
fLifeTime = right.fLifeTime;
fIsomerLevel = right.fIsomerLevel;
fFloatLevelBase = right.fFloatLevelBase;
// decay table is not copied because G4DecayTable has no copy constructor
fDecayTable = 0;
}
@@ -84,6 +86,7 @@ G4IsotopeProperty & G4IsotopeProperty::operator=(G4IsotopeProperty& right)
fEnergy = right.fEnergy;
fLifeTime = right.fLifeTime;
fIsomerLevel = right.fIsomerLevel;
fFloatLevelBase = right.fFloatLevelBase;
// decay table is not copied because G4DecayTable has no copy constructor
fDecayTable = 0;
}
@@ -102,6 +105,7 @@ G4int G4IsotopeProperty::operator==(const G4IsotopeProperty &right) const
value = value && ( fEnergy == right.fEnergy);
value = value && ( fLifeTime == right.fLifeTime);
value = value && ( fIsomerLevel == right.fIsomerLevel);
value = value && ( fFloatLevelBase == right.fFloatLevelBase);
return value;
}
@@ -126,11 +130,15 @@ void G4IsotopeProperty::DumpInfo() const
<< fIsomerLevel
<< ", Excited Energy: "
<< std::setprecision(1)
<< fEnergy/keV << "[keV]"
<< fEnergy/keV;
if(fFloatLevelBase!=G4Ions::G4FloatLevelBase::noFloat)
{ G4cout << " +" << G4Ions::FloatLevelBaseChar(fFloatLevelBase); }
G4cout << " [keV]"
<< ", "
<< std::setprecision(6)
<< "Life Time: "
<< fLifeTime/ns << "[ns]" << G4endl;
<< fLifeTime/ns << "[ns]"
<< G4endl;
if (fDecayTable != 0) {
fDecayTable->DumpInfo();
} else {
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4KL3DecayChannel.cc 91896 2015-08-10 09:54:06Z gcosmo $
// $Id: G4KL3DecayChannel.cc 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -46,11 +46,8 @@
G4KL3DecayChannel::G4KL3DecayChannel()
:G4VDecayChannel(),
massK(0.0), pLambda(0.0), pXi0(0.0)
pLambda(0.0), pXi0(0.0)
{
daughterM[idPi] = 0.0;
daughterM[idLepton] = 0.0;
daughterM[idNutrino] = 0.0;
}
@@ -72,11 +69,6 @@ G4KL3DecayChannel::G4KL3DecayChannel(
static const G4String E_plus("e+");
static const G4String E_minus("e-");
massK = 0.0;
daughterM[idPi] = 0.0;
daughterM[idLepton] = 0.0;
daughterM[idNutrino] = 0.0;
// check modes
if ( ((theParentName == K_plus)&&(theLeptonName == E_plus)) ||
((theParentName == K_minus)&&(theLeptonName == E_minus)) ) {
@@ -118,13 +110,10 @@ G4KL3DecayChannel::~G4KL3DecayChannel()
G4KL3DecayChannel::G4KL3DecayChannel(const G4KL3DecayChannel &right):
G4VDecayChannel(right),
massK(right.massK),
//massK(right.massK),
pLambda(right.pLambda),
pXi0(right.pXi0)
{
daughterM[idPi] = right.daughterM[idPi];
daughterM[idLepton] = right.daughterM[idLepton];
daughterM[idNutrino] = right.daughterM[idNutrino];
}
G4KL3DecayChannel & G4KL3DecayChannel::operator=(const G4KL3DecayChannel & right)
@@ -150,12 +139,9 @@ G4KL3DecayChannel & G4KL3DecayChannel::operator=(const G4KL3DecayChannel & right
daughters_name[index] = new G4String(*right.daughters_name[index]);
}
}
massK = right.massK;
//massK = right.massK;
pLambda = right.pLambda;
pXi0 = right.pXi0;
daughterM[idPi] = right.daughterM[idPi];
daughterM[idLepton] = right.daughterM[idLepton];
daughterM[idNutrino] = right.daughterM[idNutrino];
}
return *this;
}
@@ -171,15 +157,12 @@ G4DecayProducts* G4KL3DecayChannel::DecayIt(G4double)
#endif
// fill parent particle and its mass
if (G4MT_parent == 0) {
FillParent();
}
massK = G4MT_parent->GetPDGMass();
CheckAndFillParent();
G4double massK = G4MT_parent->GetPDGMass();
// fill daughter particles and their mass
if (G4MT_daughters == 0) {
FillDaughters();
}
CheckAndFillDaughters();
G4double daughterM[3];
daughterM[idPi] = G4MT_daughters[idPi]->GetPDGMass();
daughterM[idLepton] = G4MT_daughters[idLepton]->GetPDGMass();
daughterM[idNutrino] = G4MT_daughters[idNutrino]->GetPDGMass();
@@ -193,7 +176,8 @@ G4DecayProducts* G4KL3DecayChannel::DecayIt(G4double)
for (size_t loop_counter=0; loop_counter <MAX_LOOP; ++loop_counter){
r = G4UniformRand();
PhaseSpace(massK, &daughterM[0], &daughterE[0], &daughterP[0]);
w = DalitzDensity(daughterE[idPi],daughterE[idLepton],daughterE[idNutrino]);
w = DalitzDensity(massK,daughterE[idPi],daughterE[idLepton],daughterE[idNutrino],
daughterM[idPi],daughterM[idLepton],daughterM[idNutrino]);
if ( r <= w) break;
}
@@ -328,7 +312,8 @@ void G4KL3DecayChannel::PhaseSpace(G4double parentM,
}
G4double G4KL3DecayChannel::DalitzDensity(G4double Epi, G4double El, G4double Enu)
G4double G4KL3DecayChannel::DalitzDensity(G4double massK, G4double Epi, G4double El, G4double Enu,
G4double massPi, G4double massL , G4double massNu )
{
// KL3 decay Dalitz Plot Density
// see Chounet et al Phys. Rep. 4, 201
@@ -345,11 +330,6 @@ G4double G4KL3DecayChannel::DalitzDensity(G4double Epi, G4double El, G4double En
// El: total energy of lepton (e or mu)
// Enu: total energy of nutrino
// mass of daughters
G4double massPi = daughterM[idPi];
G4double massL = daughterM[idLepton];
G4double massNu = daughterM[idNutrino];
// calcurate total energy
Epi = Epi + massPi;
El = El + massL;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4MuonDecayChannel.cc 94091 2015-11-05 15:13:52Z gcosmo $
// $Id: G4MuonDecayChannel.cc 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -131,8 +131,8 @@ G4DecayProducts *G4MuonDecayChannel::DecayIt(G4double)
if (GetVerboseLevel()>1) G4cout << "G4MuonDecayChannel::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
@@ -49,17 +49,13 @@
#include "G4LorentzVector.hh"
G4MuonDecayChannelWithSpin::G4MuonDecayChannelWithSpin()
: G4MuonDecayChannel(),
EMMU( 0.*MeV),
EMASS( 0.*MeV)
: G4MuonDecayChannel()
{
}
G4MuonDecayChannelWithSpin::G4MuonDecayChannelWithSpin(const G4String& theParentName,
G4double theBR)
: G4MuonDecayChannel(theParentName,theBR),
EMMU( 0.*MeV),
EMASS( 0.*MeV)
: G4MuonDecayChannel(theParentName,theBR)
{
}
@@ -70,8 +66,6 @@ G4MuonDecayChannelWithSpin::~G4MuonDecayChannelWithSpin()
G4MuonDecayChannelWithSpin::G4MuonDecayChannelWithSpin(const G4MuonDecayChannelWithSpin &right):
G4MuonDecayChannel(right)
{
EMMU = right.EMMU;
EMASS = right.EMASS;
}
G4MuonDecayChannelWithSpin & G4MuonDecayChannelWithSpin::operator=(const G4MuonDecayChannelWithSpin & right)
@@ -97,8 +91,6 @@ G4MuonDecayChannelWithSpin & G4MuonDecayChannelWithSpin::operator=(const G4MuonD
daughters_name[index] = new G4String(*right.daughters_name[index]);
}
}
EMMU = right.EMMU;
EMASS = right.EMASS;
}
return *this;
}
@@ -114,13 +106,13 @@ G4DecayProducts *G4MuonDecayChannelWithSpin::DecayIt(G4double)
if (GetVerboseLevel()>1) G4cout << "G4MuonDecayChannelWithSpin::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
EMMU = parentmass;
G4double EMMU = parentmass;
//daughters'mass
G4double daughtermass[3];
@@ -130,7 +122,7 @@ G4DecayProducts *G4MuonDecayChannelWithSpin::DecayIt(G4double)
sumofdaughtermass += daughtermass[index];
}
EMASS = daughtermass[0];
G4double EMASS = daughtermass[0];
//create parent G4DynamicParticle at rest
G4ThreeVector dummy;
@@ -191,14 +183,14 @@ G4DecayProducts *G4MuonDecayChannelWithSpin::DecayIt(G4double)
F_AS = F_AS + G_AS;
// *** Radiative Corrections ***
G4double R_IS = F_c(x,x0);
const G4double omega = std::log(EMMU/EMASS);
G4double R_IS = F_c(x,x0,omega);
G4double F = 6.*F_IS + R_IS/std::sqrt(x_squared-x0_squared);
// *** Radiative Corrections ***
G4double R_AS = F_theta(x,x0);
G4double R_AS = F_theta(x,x0,omega);
rndm = G4UniformRand();
@@ -292,7 +284,7 @@ G4DecayProducts *G4MuonDecayChannelWithSpin::DecayIt(G4double)
return products;
}
G4double G4MuonDecayChannelWithSpin::R_c(G4double x){
G4double G4MuonDecayChannelWithSpin::R_c(G4double x,G4double omega){
G4int n_max = (int)(100.*x);
@@ -304,8 +296,6 @@ G4double G4MuonDecayChannelWithSpin::R_c(G4double x){
L2 += std::pow(x,n)/(n*n);
}
G4double omega = std::log(EMMU/EMASS);
G4double r_c;
r_c = 2.*L2-(pi*pi/3.)-2.;
@@ -134,8 +134,8 @@ G4DecayProducts *G4MuonRadiativeDecayChannelWithSpin::DecayIt(G4double)
G4cout << "G4MuonRadiativeDecayChannelWithSpin::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4NeutronBetaDecayChannel.cc 91896 2015-08-10 09:54:06Z gcosmo $
// $Id: G4NeutronBetaDecayChannel.cc 95906 2016-03-02 10:56:50Z gcosmo $
// GEANT4 tag $Name: geant4-09-04-ref-00 $
//
//
@@ -135,8 +135,8 @@ G4DecayProducts *G4NeutronBetaDecayChannel::DecayIt(G4double)
if (GetVerboseLevel()>1) G4cout << "G4NeutronBetaDecayChannel::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
@@ -64,7 +64,7 @@ G4NuclideTable::G4NuclideTable()
minimum_threshold_of_half_life(DBL_MAX),
fUserDefinedList(NULL),
fIsotopeList(NULL),
flevelTolerance(1.0e-3*eV)
flevelTolerance(1.0*eV)
{
//SetVerboseLevel(G4ParticleTable::GetParticleTable()->GetVerboseLevel());
//FillHardCodeList();
@@ -104,22 +104,23 @@ G4NuclideTable::~G4NuclideTable()
///////////////////////////////////////////////////////////////////////////////
//
G4IsotopeProperty* G4NuclideTable::GetIsotope(G4int Z, G4int A, G4double E)
G4IsotopeProperty* G4NuclideTable::GetIsotope(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb)
{
G4IsotopeProperty* fProperty = NULL;
G4IsotopeProperty* fProperty = nullptr;
// At first searching UserDefined
if ( fUserDefinedList != NULL ) {
if ( fUserDefinedList ) {
for ( G4IsotopeList::iterator it = fUserDefinedList->begin() ; it != fUserDefinedList->end() ; it++ ) {
if ( Z == (*it)->GetAtomicNumber() && A == (*it)->GetAtomicMass() ) {
G4double levelE = (*it)->GetEnergy();
if ( levelE - flevelTolerance/2 <= E && E < levelE + flevelTolerance/2 ) {
return *it; //found
if( flb == (*it)->GetFloatLevelBase() )
{ return *it; } //found
}
}
}
}
@@ -135,12 +136,13 @@ G4IsotopeProperty* G4NuclideTable::GetIsotope(G4int Z, G4int A, G4double E)
if ( lower_bound_itr != itf -> second.end() ) {
levelE = lower_bound_itr->first;
if ( levelE - flevelTolerance/2 <= E && E < levelE + flevelTolerance/2 ) {
return lower_bound_itr->second; // found
if( flb == (lower_bound_itr->second)->GetFloatLevelBase() )
{ return lower_bound_itr->second; } // found
}
}
}
return fProperty; // not found;
return fProperty; // not found
}
///////////////////////////////////////////////////////////////////////
@@ -206,6 +208,8 @@ void G4NuclideTable::GenerateNuclide()
}
ionE *= keV;
G4int flbIndex = 0;
ionE = StripFloatLevelBase( ionE, flbIndex );
ionLife *= ns;
ionMu *= (joule/tesla);
@@ -226,6 +230,7 @@ void G4NuclideTable::GenerateNuclide()
fProperty->SetLifeTime(ionLife);
fProperty->SetDecayTable(0);
fProperty->SetMagneticMoment(ionMu);
fProperty->SetFloatLevelBase(flbIndex);
fIsotopeList->push_back(fProperty);
@@ -285,6 +290,16 @@ void G4NuclideTable::GenerateNuclide()
}
void G4NuclideTable::AddState( G4int ionZ, G4int ionA, G4double ionE, G4double ionLife, G4int ionJ, G4double ionMu )
{
if ( G4Threading::IsMasterThread() ) {
G4int flbIndex = 0;
ionE = StripFloatLevelBase( ionE, flbIndex );
AddState(ionZ,ionA,ionE,flbIndex,ionLife,ionJ,ionMu);
}
}
void G4NuclideTable::AddState( G4int ionZ, G4int ionA, G4double ionE,
G4int flbIndex, G4double ionLife, G4int ionJ, G4double ionMu )
{
if ( G4Threading::IsMasterThread() ) {
@@ -301,6 +316,7 @@ void G4NuclideTable::AddState( G4int ionZ, G4int ionA, G4double ionE, G4double i
fProperty->SetLifeTime(ionLife);
fProperty->SetDecayTable(0);
fProperty->SetMagneticMoment(ionMu);
fProperty->SetFloatLevelBase(flbIndex);
fUserDefinedList->push_back(fProperty);
fIsotopeList->push_back(fProperty);
@@ -316,3 +332,10 @@ void G4NuclideTable::SetThresholdOfHalfLife( G4double t )
GenerateNuclide();
}
}
G4double G4NuclideTable::StripFloatLevelBase(G4double E, G4int& flbIndex)
{
G4double rem = fmod(E/(1.0E-3*eV),10.0);
flbIndex = int(rem);
return E-rem;
}
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4PhaseSpaceDecayChannel.cc 92057 2015-08-14 13:34:55Z gcosmo $
// $Id: G4PhaseSpaceDecayChannel.cc 96797 2016-05-09 10:13:42Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -46,10 +46,11 @@
#include "G4LorentzVector.hh"
#include "G4LorentzRotation.hh"
G4ThreadLocal G4double G4PhaseSpaceDecayChannel::current_parent_mass = 0.0;
//G4ThreadLocal G4double G4PhaseSpaceDecayChannel::current_parent_mass = 0.0;
G4PhaseSpaceDecayChannel::G4PhaseSpaceDecayChannel(G4int Verbose)
:G4VDecayChannel("Phase Space", Verbose)
:G4VDecayChannel("Phase Space", Verbose),
useGivenDaughterMass(false)
{
}
@@ -86,11 +87,11 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::DecayIt(G4double parentMass)
G4DecayProducts * products = 0;
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
if (parentMass >0.0) current_parent_mass = parentMass;
else current_parent_mass = G4MT_parent_mass;
if (parentMass >0.0) current_parent_mass.Put( parentMass );
else current_parent_mass.Put(G4MT_parent_mass);
switch (numberOfDaughters){
case 0:
@@ -129,10 +130,12 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::OneBodyDecayIt()
#ifdef G4VERBOSE
if (GetVerboseLevel()>1) G4cout << "G4PhaseSpaceDecayChannel::OneBodyDecayIt()"<<G4endl;
#endif
// parent mass
G4double parentmass = current_parent_mass.Get();
//create parent G4DynamicParticle at rest
G4ThreeVector dummy;
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0);
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass);
//create G4Decayproducts
G4DecayProducts *products = new G4DecayProducts(*parentparticle);
delete parentparticle;
@@ -158,7 +161,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::TwoBodyDecayIt()
if (GetVerboseLevel()>1) G4cout << "G4PhaseSpaceDecayChannel::TwoBodyDecayIt()"<<G4endl;
#endif
// parent mass
G4double parentmass = current_parent_mass;
G4double parentmass = current_parent_mass.Get();
//daughters'mass, width
G4double daughtermass[2], daughterwidth[2];
@@ -169,7 +172,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::TwoBodyDecayIt()
//create parent G4DynamicParticle at rest
G4ThreeVector dummy;
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0);
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass);
//create G4Decayproducts
G4DecayProducts *products = new G4DecayProducts(*parentparticle);
delete parentparticle;
@@ -186,7 +189,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::TwoBodyDecayIt()
if (GetVerboseLevel()>0) {
G4cout << "G4PhaseSpaceDecayChannel::TwoBodyDecayIt "
<< "sum of daughter mass is larger than parent mass" << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass/GeV << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass.Get()/GeV << G4endl;
G4cout << "daughter 1 :" << G4MT_daughters[0]->GetParticleName() << " " << daughtermass[0]/GeV << G4endl;
G4cout << "daughter 2:" << G4MT_daughters[1]->GetParticleName() << " " << daughtermass[1]/GeV << G4endl;
}
@@ -215,7 +218,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::TwoBodyDecayIt()
if (GetVerboseLevel()>0) {
G4cout << "G4PhaseSpaceDecayChannel::TwoBodyDecayIt "
<< "sum of daughter mass is larger than parent mass" << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass/GeV << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass.Get()/GeV << G4endl;
G4cout << "daughter 1 :" << G4MT_daughters[0]->GetParticleName() << " " << daughtermass[0]/GeV << G4endl;
G4cout << "daughter 2:" << G4MT_daughters[1]->GetParticleName() << " " << daughtermass[1]/GeV << G4endl;
if (useGivenDaughterMass) {
@@ -262,7 +265,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ThreeBodyDecayIt()
if (GetVerboseLevel()>1) G4cout << "G4PhaseSpaceDecayChannel::ThreeBodyDecayIt()"<<G4endl;
#endif
// parent mass
G4double parentmass = current_parent_mass;
G4double parentmass = current_parent_mass.Get();
//daughters'mass
G4double daughtermass[3], daughterwidth[3];
G4double sumofdaughtermass = 0.0;
@@ -278,7 +281,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ThreeBodyDecayIt()
//create parent G4DynamicParticle at rest
G4ThreeVector dummy;
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0);
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass);
//create G4Decayproducts
@@ -293,7 +296,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ThreeBodyDecayIt()
if (GetVerboseLevel()>0) {
G4cout << "G4PhaseSpaceDecayChannel::ThreeBodyDecayIt "
<< "sum of daughter mass is larger than parent mass" << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass/GeV << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass.Get()/GeV << G4endl;
G4cout << "daughter 1 :" << G4MT_daughters[0]->GetParticleName() << " " << daughtermass[0]/GeV << G4endl;
G4cout << "daughter 2:" << G4MT_daughters[1]->GetParticleName() << " " << daughtermass[1]/GeV << G4endl;
G4cout << "daughter 3:" << G4MT_daughters[2]->GetParticleName() << " " << daughtermass[2]/GeV << G4endl;
@@ -330,7 +333,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ThreeBodyDecayIt()
if (GetVerboseLevel()>0) {
G4cout << "G4PhaseSpaceDecayChannel::ThreeBodyDecayIt "
<< "sum of daughter mass is larger than parent mass" << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass/GeV << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass.Get()/GeV << G4endl;
G4cout << "daughter 1 :" << G4MT_daughters[0]->GetParticleName() << " " << daughtermass[0]/GeV << G4endl;
G4cout << "daughter 2:" << G4MT_daughters[1]->GetParticleName() << " " << daughtermass[1]/GeV << G4endl;
G4cout << "daughter 3:" << G4MT_daughters[2]->GetParticleName() << " " << daughtermass[2]/GeV << G4endl;
@@ -460,16 +463,18 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ManyBodyDecayIt()
if (GetVerboseLevel()>1) G4cout << "G4PhaseSpaceDecayChannel::ManyBodyDecayIt()"<<G4endl;
#endif
// parent mass
G4double parentmass = current_parent_mass.Get();
//parent particle
G4ThreeVector dummy;
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0);
G4DynamicParticle * parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass);
//create G4Decayproducts
G4DecayProducts *products = new G4DecayProducts(*parentparticle);
delete parentparticle;
// parent mass
G4double parentmass = current_parent_mass;
//daughters'mass
G4double *daughtermass = new G4double[numberOfDaughters];
@@ -487,7 +492,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ManyBodyDecayIt()
if (GetVerboseLevel()>0) {
G4cout << "G4PhaseSpaceDecayChannel::ManyBodyDecayIt "
<< "sum of daughter mass is larger than parent mass" << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass/GeV << G4endl;
G4cout << "parent :" << G4MT_parent->GetParticleName() << " " << current_parent_mass.Get()/GeV << G4endl;
G4cout << "daughter 1 :" << G4MT_daughters[0]->GetParticleName() << " " << daughtermass[0]/GeV << G4endl;
G4cout << "daughter 2:" << G4MT_daughters[1]->GetParticleName() << " " << daughtermass[1]/GeV << G4endl;
G4cout << "daughter 3:" << G4MT_daughters[2]->GetParticleName() << " " << daughtermass[2]/GeV << G4endl;
@@ -497,6 +502,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ManyBodyDecayIt()
G4Exception("G4PhaseSpaceDecayChannel::ManyBodyDecayIt",
"PART112", JustWarning,
"Can not create decay products: sum of daughter mass is larger than parent mass");
delete [] daughtermass;
return products;
}
@@ -578,7 +584,7 @@ G4DecayProducts *G4PhaseSpaceDecayChannel::ManyBodyDecayIt()
delete [] sm;
delete [] daughtermass;
delete [] daughtermomentum;
delete products;
G4Exception("G4PhaseSpaceDecayChannel::ManyBodyDecayIt",
"PART112", JustWarning,
"Can not create decay products: sum of daughter mass is larger than parent mass");
@@ -715,8 +721,8 @@ G4bool G4PhaseSpaceDecayChannel::SampleDaughterMasses()
G4bool G4PhaseSpaceDecayChannel::IsOKWithParentMass(G4double parentMass) {
if (!useGivenDaughterMass) return G4VDecayChannel::IsOKWithParentMass(parentMass);
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
G4double sumOfDaughterMassMin=0.0;
for (G4int index=0; index < numberOfDaughters; index++) {
@@ -45,10 +45,33 @@
#include "G4DecayProducts.hh"
#include "G4LorentzVector.hh"
namespace {
const G4double beta = 3.6612e-03;
const G4double cib = 1.16141e-03;
const G4double csdp = 3.45055e-02;
const G4double csdm = 5.14122e-03;
const G4double cif = 4.63543e-05;
const G4double cig = 1.78928e-05;
const G4double xl = 2.*0.1*MeV/139.57*MeV;
const G4double yl = ((1.-xl) + std::sqrt((1-xl)*(1-xl)+4*beta*beta))/2.;
const G4double xu = 1. - (yl - std::sqrt(yl*yl-4.*beta*beta))/2.;
const G4double yu = 1. + beta*beta;
inline G4double D2W(const G4double x,const G4double y) {
return cib*(1.-y)*(1.+((1.-x)*(1.-x)))/((x*x)*(x+y-1.)) +
csdp*(1.-x)*((x+y-1.)*(x+y-1.)) +
csdm*(1.-x)*((1.-y)*(1.-y)) +
cif*(x-1.)*(1.-y)/x +
cig*(1.-y)*(1.-x+(x*x)/(x+y-1.))/x;
}
const G4double d2wmax = D2W(xl,yl);
}
G4PionRadiativeDecayChannel::G4PionRadiativeDecayChannel()
: G4VDecayChannel(),
beta(0.),cib(0.),csdp(0.),csdm(0.),cif(0.),cig(0.),
xl(0.), yl(0.), xu(0.), yu(0.), d2wmax(0.)
: G4VDecayChannel()
{
}
@@ -81,34 +104,13 @@ G4PionRadiativeDecayChannel::
}
#endif
}
beta = 3.6612e-03;
cib = 1.16141e-03;
csdp = 3.45055e-02;
csdm = 5.14122e-03;
cif = 4.63543e-05;
cig = 1.78928e-05;
xl = 2.*0.1*MeV/139.57*MeV;
yl = ((1.-xl) + std::sqrt((1-xl)*(1-xl)+4*beta*beta))/2.;
xu = 1. - (yl - std::sqrt(yl*yl-4.*beta*beta))/2.;
yu = 1. + beta*beta;
d2wmax = D2W(xl,yl);
}
G4PionRadiativeDecayChannel::~G4PionRadiativeDecayChannel()
{
}
G4PionRadiativeDecayChannel::G4PionRadiativeDecayChannel(const G4PionRadiativeDecayChannel &right)
:G4VDecayChannel(right),
beta(right.beta),cib(right.cib),csdp(right.csdp),
csdm(right.csdm),cif(right.cif),cig(right.cig),
xl(right.xl), yl(right.yl), xu(right.xu), yu(right.yu),
d2wmax(right.d2wmax)
:G4VDecayChannel(right)
{
}
@@ -135,17 +137,6 @@ G4PionRadiativeDecayChannel & G4PionRadiativeDecayChannel::operator=(const G4Pio
daughters_name[index] = new G4String(*right.daughters_name[index]);
}
}
beta = right.beta;
cib = right.cib;
csdp = right.csdp;
csdm = right.csdm;
cif = right.cif;
cig = right.cig;
xl = right.xl;
yl = right.yl;
xu = right.xu;
yu = right.yu;
d2wmax = right.d2wmax;
}
return *this;
}
@@ -158,8 +149,8 @@ G4DecayProducts *G4PionRadiativeDecayChannel::DecayIt(G4double)
G4cout << "G4PionRadiativeDecayChannel::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4TauLeptonicDecayChannel.cc 91896 2015-08-10 09:54:06Z gcosmo $
// $Id: G4TauLeptonicDecayChannel.cc 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -142,8 +142,8 @@ G4DecayProducts *G4TauLeptonicDecayChannel::DecayIt(G4double)
if (GetVerboseLevel()>1) G4cout << "G4TauLeptonicDecayChannel::DecayIt ";
#endif
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
// parent mass
G4double parentmass = G4MT_parent->GetPDGMass();
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4VDecayChannel.cc 93024 2015-09-30 15:59:32Z gcosmo $
// $Id: G4VDecayChannel.cc 95906 2016-03-02 10:56:50Z gcosmo $
//
//
// ------------------------------------------------------------
@@ -42,22 +42,7 @@
#include "G4DecayTable.hh"
#include "G4DecayProducts.hh"
#include "G4VDecayChannel.hh"
/////@@// This static member is thread local. For each thread, it holds the array
/////@@// size of G4DecayChannelData instances.
/////@@//
/////@@template <class G4DecayChannelData> G4ThreadLocal
/////@@G4int G4PDefSplitter<G4DecayChannelData>::slavetotalspace = 0;
/////@@
/////@@// This static member is thread local. For each thread, it points to the
/////@@// array of G4DecayChannelData instances.
/////@@//
/////@@template <class G4DecayChannelData> G4ThreadLocal
/////@@G4DecayChannelData* G4PDefSplitter<G4DecayChannelData>::offset = 0;
/////@@
/////@@// This new field helps to use the class G4VDecayChannelSubInstanceManager.
/////@@//
/////@@G4DecayChannelManager G4VDecayChannel::subInstanceManager;
#include "G4AutoLock.hh"
const G4String G4VDecayChannel::noName = " ";
@@ -71,7 +56,6 @@ G4VDecayChannel::G4VDecayChannel()
particletable(0),
verboseLevel(1)
{
/////@@ instanceID = subInstanceManager.CreateSubInstance();
G4MT_parent = 0;
G4MT_daughters = 0;
G4MT_parent_mass = 0.0;
@@ -90,9 +74,10 @@ G4VDecayChannel::G4VDecayChannel(const G4String &aName, G4int Verbose)
rangeMass(2.5),
parent_polarization(),
particletable(0),
verboseLevel(Verbose)
verboseLevel(Verbose),
daughtersMutex(G4MUTEX_INITIALIZER),
parentMutex(G4MUTEX_INITIALIZER)
{
/////@@ instanceID = subInstanceManager.CreateSubInstance();
G4MT_parent = 0;
G4MT_daughters = 0;
G4MT_parent_mass = 0.0;
@@ -118,9 +103,10 @@ G4VDecayChannel::G4VDecayChannel(const G4String &aName,
rangeMass(1.0),
parent_polarization(),
particletable(0),
verboseLevel(1)
verboseLevel(1),
daughtersMutex(G4MUTEX_INITIALIZER),
parentMutex(G4MUTEX_INITIALIZER)
{
/////@@ instanceID = subInstanceManager.CreateSubInstance();
G4MT_parent = 0;
G4MT_daughters = 0;
G4MT_parent_mass = 0.0;
@@ -146,8 +132,6 @@ G4VDecayChannel::G4VDecayChannel(const G4String &aName,
G4VDecayChannel::G4VDecayChannel(const G4VDecayChannel &right)
{
/////@@ instanceID = subInstanceManager.CreateSubInstance();
kinematics_name = right.kinematics_name;
verboseLevel = right.verboseLevel;
rbranch = right.rbranch;
@@ -181,6 +165,8 @@ G4VDecayChannel::G4VDecayChannel(const G4VDecayChannel &right)
parent_polarization = right.parent_polarization;
G4MUTEXINIT(daughtersMutex);
G4MUTEXINIT(parentMutex);
}
G4VDecayChannel & G4VDecayChannel::operator=(const G4VDecayChannel &right)
@@ -219,6 +205,9 @@ G4VDecayChannel & G4VDecayChannel::operator=(const G4VDecayChannel &right)
// particle table
particletable = G4ParticleTable::GetParticleTable();
G4MUTEXINIT(daughtersMutex);
G4MUTEXINIT(parentMutex);
return *this;
}
@@ -231,15 +220,13 @@ G4VDecayChannel::~G4VDecayChannel()
G4MT_daughters_mass =0;
if (G4MT_daughters_width != 0) delete [] G4MT_daughters_width;
G4MT_daughters_width = 0;
G4MUTEXDESTROY(daughtersMutex);
G4MUTEXDESTROY(parentMutex);
}
/////@@const G4DecayChannelManager& G4VDecayChannel::GetSubInstanceManager()
/////@@{
/////@@ return subInstanceManager;
/////@@}
void G4VDecayChannel::ClearDaughtersName()
{
G4AutoLock l(&daughtersMutex);
if ( daughters_name != 0) {
if (numberOfDaughters>0) {
#ifdef G4VERBOSE
@@ -293,14 +280,27 @@ void G4VDecayChannel::SetDaughter(G4int anIndex,
return;
}
// check existence of daughters_name array
if (daughters_name == 0) {
// cleate array
daughters_name = new G4String*[numberOfDaughters];
for (G4int index=0;index<numberOfDaughters;index++) {
daughters_name[index]=0;
}
//ANDREA:-> Feb 25 2016
// An analysis of this code, shows that this method is called
// only in the constructor of derived classes.
// The general idea of this method is probably to support
// the possibility to re-define daughters on the fly, however
// this design is extremely problematic for MT mode, we thus
// require (as practically happens) that the method is called only
// at construction, i.e. when G4MT_daugheters == 0
// moreover this method can be called only after SetNumberOfDaugthers
// has been called (see previous if), in such a case daughters_name != 0
if ( daughters_name == 0 ) {
G4Exception("G4VDecayChannel::SetDaughter","PART112",FatalException,
"Trying to add a daughter without specifying number of secondaries, useSetNumberOfDaughters first");
return;
}
if ( G4MT_daughters != 0 ) {
G4Exception("G4VDecayChannel::SetDaughter","PART111",FatalException,
"Trying to modify a daughter of a decay channel, but decay channel already has daughters.");
return;
}
//<-:ANDREA
// check an index
if ( (anIndex<0) || (anIndex>=numberOfDaughters) ) {
@@ -311,12 +311,8 @@ void G4VDecayChannel::SetDaughter(G4int anIndex,
}
#endif
} else {
// delete the old name if it exists
if (daughters_name[anIndex]!=0) delete daughters_name[anIndex];
// fill the name
daughters_name[anIndex] = new G4String(particle_name);
// refill the array of daughters[] if it exists
if (G4MT_daughters != 0) FillDaughters();
#ifdef G4VERBOSE
if (verboseLevel>1) {
G4cout << "G4VDecayChannel::SetDaughter[" << anIndex <<"] :";
@@ -333,6 +329,11 @@ void G4VDecayChannel::SetDaughter(G4int anIndex, const G4ParticleDefinition * pa
void G4VDecayChannel::FillDaughters()
{
G4AutoLock lock(&daughtersMutex);
//Double check, check again if another thread has already filled this, in
//case do not need to do anything
if ( G4MT_daughters != 0 ) return;
G4int index;
#ifdef G4VERBOSE
@@ -344,7 +345,7 @@ void G4VDecayChannel::FillDaughters()
}
// parent mass
if (G4MT_parent == 0) FillParent();
CheckAndFillParent();
G4double parentmass = G4MT_parent->GetPDGMass();
//
@@ -443,6 +444,11 @@ void G4VDecayChannel::FillDaughters()
void G4VDecayChannel::FillParent()
{
G4AutoLock lock(&parentMutex);
//Double check, check again if another thread has already filled this, in
//case do not need to do anything
if ( G4MT_parent != 0 ) return;
if (parent_name == 0) {
// parent name is not defined
#ifdef G4VERBOSE
@@ -485,7 +491,7 @@ G4int G4VDecayChannel::GetAngularMomentum()
// determine angular momentum
// fill pointers to daughter particles if not yet set
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillDaughters();
const G4int PiSpin = G4MT_parent->GetPDGiSpin();
const G4int PParity = G4MT_parent->GetPDGiParity();
@@ -578,8 +584,8 @@ G4double G4VDecayChannel::DynamicalMass(G4double massPDG, G4double width, G4doub
G4bool G4VDecayChannel::IsOKWithParentMass(G4double parentMass)
{
G4double sumOfDaughterMassMin=0.0;
if (G4MT_parent == 0) FillParent();
if (G4MT_daughters == 0) FillDaughters();
CheckAndFillParent();
CheckAndFillDaughters();
for (G4int index=0; index < numberOfDaughters; index++) {
sumOfDaughterMassMin +=
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4ExcitedMesonConstructor.cc 91935 2015-08-12 07:56:31Z gcosmo $
// $Id: G4ExcitedMesonConstructor.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// --------------------------------------------------------------
@@ -1432,7 +1432,7 @@ const G4double G4ExcitedMesonConstructor::mass[G4ExcitedMesonConstructor::NMulti
{ 1.2295*GeV, 1.170*GeV, 1.386*GeV, 1.272*GeV, 1.272*GeV },
{ 1.474*GeV, 1.350*GeV, 0.0, 1.430*GeV, 1.430*GeV },
{ 1.230*GeV,1.2819*GeV,1.4264*GeV, 1.403*GeV, 1.403*GeV },
{ 1.3183*GeV,1.2751*GeV, 1.525*GeV,1.4256*GeV, 1.4256*GeV },
{ 1.3183*GeV,1.2755*GeV, 1.525*GeV,1.4256*GeV, 1.4256*GeV },
{ 1.6722*GeV, 1.617*GeV, 1.842*GeV, 1.773*GeV, 1.773*GeV },
{ 1.720*GeV, 1.670*GeV, 0.0, 1.717*GeV, 1.717*GeV },
{ 1.6888*GeV, 1.667*GeV, 1.854*GeV, 1.776*GeV, 1.776*GeV },
@@ -1456,7 +1456,7 @@ const G4double G4ExcitedMesonConstructor::width[G4ExcitedMesonConstructor::NMult
{ 142.0*MeV, 360.0*MeV, 91.0*MeV, 90.0*MeV, 90.0*MeV },
{ 265.0*MeV, 350.0*MeV, 0.0, 270.0*MeV, 270.0*MeV },
{ 420.0*MeV, 24.2*MeV, 54.9*MeV, 174.0*MeV, 174.0*MeV },
{ 107.0*MeV, 185.1*MeV, 73.0*MeV, 98.5*MeV, 98.5*MeV },
{ 107.0*MeV, 186.7*MeV, 73.0*MeV, 98.5*MeV, 98.5*MeV },
{ 260.0*MeV, 181.0*MeV, 225.0*MeV, 186.0*MeV, 186.0*MeV },
{ 250.0*MeV, 315.0*MeV, 0.0, 320.0*MeV, 320.0*MeV },
{ 161.0*MeV, 168.0*MeV, 87.0*MeV, 159.0*MeV, 159.0*MeV },
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4ShortLivedConstructor.cc 83749 2014-09-12 12:14:59Z gcosmo $
// $Id: G4ShortLivedConstructor.cc 95951 2016-03-03 10:44:16Z gcosmo $
//
//
// --------------------------------------------------------------
@@ -811,7 +811,7 @@ void G4ShortLivedConstructor::ConstructMesons()
particle->SetDecayTable(decayTable);
// f0(1500)
particle = new G4ExcitedMesons(
"f0(1500)", 1505.0*MeV, 109.0*MeV, 0.0,
"f0(1500)", 1504.0*MeV, 109.0*MeV, 0.0,
0, +1, +1,
0, 0, +1,
"meson", 0, 0, 9030221,
@@ -831,7 +831,7 @@ void G4ShortLivedConstructor::ConstructMesons()
// f0(1710)
particle = new G4ExcitedMesons(
"f0(1710)", 1722.0*MeV, 135.0*MeV, 0.0,
"f0(1710)", 1723.0*MeV, 139.0*MeV, 0.0,
0, +1, +1,
0, 0, +1,
"meson", 0, 0, 10331,
@@ -84,7 +84,8 @@ public:
// abstract base class G4VIstopeTable. We don't use this fuction in this
// implementation, instead we use the next function.
//
virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E);
virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::noFloat);
virtual G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, G4int lvl=0);
//
// again it will replace the pure virtual one in the abstract base class.
@@ -92,6 +93,8 @@ public:
// Z: Atomic Number
// A: Atomic Mass
// E: Excitaion energy
// flb: floating level base (enum defined in G4Ions.hh)
// -- currently ignored
// or
// G4int level: isomer level
//
@@ -191,7 +191,8 @@ G4bool G4IsotopeMagneticMomentTable::FindIsotope(G4IsotopeProperty* pP)
///////////////////////////////////////////////////////////////////////////////
//
G4IsotopeProperty*
G4IsotopeMagneticMomentTable::GetIsotope(G4int Z, G4int A, G4double E)
G4IsotopeMagneticMomentTable::GetIsotope(G4int Z, G4int A, G4double E,
G4Ions::G4FloatLevelBase /*flb*/)
{
G4IsotopeProperty* fProperty = 0;
for (size_t i = 0 ; i< fIsotopeList.size(); ++i) {