Import Geant4 10.3.0.beta source tree
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user