Import Geant4 10.7.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2020-06-26 10:23:25 +02:00
parent c02c370437
commit 67ba86d073
1871 changed files with 174422 additions and 131884 deletions
@@ -6,12 +6,49 @@
Hadronic physics-list/constructors/hadron_inelastic History
-----------------------------------------------------------
This file should be used to briefly summarize all major modifications
This file should be used to briefly summarize all major modifications
introduced in the code and keeptrack of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
38-May-2020 Ben Morgan (phys-ctor-hinelastic-V10-06-04)
- Remove obsolete GRANULAR_DEPENDENCIES entries
20-May-2020, Alberto Ribon (phys-ctor-hinelastic-V10-06-03)
- G4HadronPhysicsQGSP_BIC_HP, G4HadronPhysicsQGSP_BIC_AllHP : refactoring
of these two constructors, consistently with all others.
For G4HadronPhysicsQGSP_BIC_HP, the physics remain unchanged;
for G4HadronPhysicsQGSP_BIC_AllHP, the physics remain unchanged
except for the transition region between Binary and ProtonHP which
is now 190-200 MeV (instead than 199-200), as for light ions.
18-May-2020, Vladimir Ivanchenko (phys-ctor-hinelastic-V10-06-02)
- G4HadronPhysicsFTFP_BERT, G4HadronPhysicsQGSP_BERT,
G4HadronPhysicsFTFP_BERT_TRV, G4HadronPhysicsQGSP_FTFP_BERT,
G4HadronInelasticQBBC - added b- and c- particle
07-May-2020, Alberto Ribon (phys-ctor-hinelastic-V10-06-01)
- G4HadronPhysicsFTFP_BERT, G4HadronPhysicsFTF_BIC, G4HadronPhysicsINCLXX,
G4HadronPhysicsShielding, G4HadronPhysicsShieldingLEND,
G4HadronPhysicsQGSP_BERT, G4HadronPhysicsQGS_BIC,
G4HadronPhysicsQGSP_BIC, G4HadronPhysicsQGSP_BIC_HP,
G4HadronPhysicsQGSP_BIC_AllHP : in all the inelastic physics constructors
which were using the builder G4HyperonFTFPBuilder, introduce the new
builder G4HyperonBuilder; moreover, the new builder G4HyperonQGSPBuilder
is used now in all QGS-based inelastic physics constructor for hyperons
(and anti-hyperons) at high energies (while keeping using
G4HyperonFTFPBuilder at lower energies).
05-May-2020, Alberto Ribon (phys-ctor-hinelastic-V10-06-00)
- G4HadronPhysicsQGSP_BERT, G4HadronPhysicsQGSP_BIC, G4HadronPhysicsQGS_BIC,
G4HadronPhysicsINCLXX, G4HadronPhysicsQGSP_BIC_HP,
G4HadronPhysicsQGSP_BIC_AllHP : use the new builder class
G4QGSPAntiBarionBuilder to handle anti_proton and anti_neutron
at high energies with QGSP.
(For the light anti-ions - anti_deuteron, anti_triton, anti_He3, and
anti_alpha - currently QGSP cannot handle them, therefore FTFP is
used.)
29-November-2019, Alberto Ribon (phys-ctor-hinelastic-V10-05-03)
- Update of the only README file.
@@ -23,10 +60,10 @@ introduced in the code and keeptrack of all tags.
- G4HadronInelasticFTFQGSP_BERT, G4HadronInelasticQBBC : use Glauber-Gribov
inelastic cross sections (instead of Chips ones) for hyperons and
anti-hyperons.
- G4HadronPhysicsFTF_BIC, G4HadronPhysicsFTFP_BERT_HP,
- G4HadronPhysicsFTF_BIC, G4HadronPhysicsFTFP_BERT_HP,
G4HadronPhysicsFTFP_BERT_TRV, G4HadronPhysicsFTFQGSP_BERT,
G4HadronPhysicsQGS_BIC, G4HadronPhysicsQGSP_BERT,
G4HadronPhysicsQGSP_BERT_HP, G4HadronPhysicsQGSP_BIC,
G4HadronPhysicsQGSP_BERT_HP, G4HadronPhysicsQGSP_BIC,
G4HadronPhysicsQGSP_BIC_HP, G4HadronPhysicsQGSP_BIC_AllHP,
G4HadronInelasticQBBC, G4HadronPhysicsINCLXX : removed special treatment
of hadronic inelastic cross sections of kaons (now default).
@@ -65,7 +102,7 @@ introduced in the code and keeptrack of all tags.
- G4HadronInelasticQBBC - removed statics class memebers
06-August-2018, Alberto Ribon (phys-ctor-hinelastic-V10-04-08)
- G4HadronPhysicsFTFP_BERT_HP, G4HadronPhysicsINCLXX,
- G4HadronPhysicsFTFP_BERT_HP, G4HadronPhysicsINCLXX,
G4HadronPhysicsShielding, G4HadronPhysicsQGSP_BIC_AllHP,
G4HadronPhysicsNuBeam, G4HadronPhysicsShieldingLEND,
G4HadronPhysicsQGSP_BERT_HP, G4HadronPhysicsQGSP_BIC_HP,
@@ -74,7 +111,7 @@ introduced in the code and keeptrack of all tags.
the one from G4HadronicParameters .
28-July-2018, Vladimir Ivantchenko (phys-ctor-hinelastic-V10-04-07)
- in all hadronic builders implement fix for #2057, remove possible
- in all hadronic builders implement fix for #2057, remove possible
double deletion of objects end of run
25-July-2018, Alberto Ribon (phys-ctor-hinelastic-V10-04-06)
@@ -84,8 +121,8 @@ introduced in the code and keeptrack of all tags.
21-July-2018, Vladimir Ivantchenko (phys-ctor-hinelastic-V10-04-05)
- G4VHadronPhysics - added extra method
- G4HadronInelasticQBBC, G4HadronPhysicsFTFP_BERT,
G4HadronPhysicsQGSP_BIC_AllHP, G4HadronPhysicsQGS_BIC - do not fill
- G4HadronInelasticQBBC, G4HadronPhysicsFTFP_BERT,
G4HadronPhysicsQGSP_BIC_AllHP, G4HadronPhysicsQGS_BIC - do not fill
internal structure for cross sections
20-July-2018, Vladimir Ivantchenko (phys-ctor-hinelastic-V10-04-04)
@@ -109,17 +146,17 @@ introduced in the code and keeptrack of all tags.
- G4HadronInelasticQBBC - use G4ParticleInelasticXS both for neutrons
and protons
7-Nov-2017, Tatsumi Koi (phys-ctor-hinelastic-V10-03-06)
7-Nov-2017, Tatsumi Koi (phys-ctor-hinelastic-V10-03-06)
- Adding G4HadronPhysicsShieldingLEND
6-Nov-2017, Tatsumi Koi (phys-ctor-hinelastic-V10-03-05)
6-Nov-2017, Tatsumi Koi (phys-ctor-hinelastic-V10-03-05)
- Fix registration of cross section data set in G4HadronPhysicsShielding
16-Oct-2017, Alberto Ribon (phys-ctor-hinelastic-V10-03-04)
16-Oct-2017, Alberto Ribon (phys-ctor-hinelastic-V10-03-04)
- G4HadronPhysicsFTFQGSP_BERT : fixing trivial compiler warnings
of the previous tag.
16-Oct-2017, Alberto Ribon (phys-ctor-hinelastic-V10-03-03)
16-Oct-2017, Alberto Ribon (phys-ctor-hinelastic-V10-03-03)
- G4HadronPhysicsFTFQGSP_BERT : new hadron physics similar to
G4HadronPhysicsFTFP_BERT, but with QGS fragmentation of strings
(instead of the Lund string fragmentation).
@@ -134,7 +171,7 @@ introduced in the code and keeptrack of all tags.
- Refactoring of code of FTFP_BERT and register physics builders
09-Feb-2017, Makoto Asai (phys-ctor-hinelastic-V10-03-00)
- Print-out of the transition energy region between FTFP and BERT
- Print-out of the transition energy region between FTFP and BERT
in the physics lists FTFP_BERT_HP and G4HadronPhysicsFTFP_BERT_HP
is made only for the master thread.
@@ -153,7 +190,7 @@ introduced in the code and keeptrack of all tags.
- G4HadronPhysicsFTFP_BERT : changed the transition energy region
between FTFP and BERT in the physics list FTFP_BERT : now it is
between [2, 6] GeV.
18-Nov-2016, Alberto Ribon (phys-ctor-hinelastic-V10-02-07)
- G4HadronPhysicsFTFP_BERT : changed the transition energy region
between FTFP and BERT in the physics list FTFP_BERT : now it is
@@ -170,7 +207,7 @@ introduced in the code and keeptrack of all tags.
fix required by clang39 on Windows and MAC
30-Aug-2016, V.Ivanchenko (phys-ctor-hinelastic-V10-02-03)
- G4HadronPhysicsQBBC : use G4 de-excitation for the Bertini cascade
- G4HadronPhysicsQBBC : use G4 de-excitation for the Bertini cascade
26-May-2016, A. Ribon (phys-ctor-hinelastic-V10-02-02)
- G4HadronPhysicsQGSP_BIC_AllHP : treat only proton with ParticleHP in
@@ -205,7 +242,7 @@ introduced in the code and keeptrack of all tags.
12-Jun-2015, V.Ivanchenko (phys-ctor-hinelastic-V10-01-01)
- G4HadronInelasticQBBC - reduced upper limit of Bertini from 12 to 4 GeV;
use BGG inelastic cross section for pions
use BGG inelastic cross section for pions
30-Mar-2015, A. Ribon (phys-ctor-hinelastic-V10-01-00)
- G4HadronPhysicsFTFP_BERT_TRV: changed the transition region between
@@ -215,7 +252,7 @@ introduced in the code and keeptrack of all tags.
- Add G4HadronPhysicsQGSP_BIC_AllHP for particle_hp physics list
30-Oct-2014, Andrea Dotti (phys-ctor-hinelastic-V10-00-07)
- Fix in destructor of G4VHadronPhysics to check validity of pointer.
- Fix in destructor of G4VHadronPhysics to check validity of pointer.
30-Oct-2014, Julia Yarba (phys-ctor-hinelastic-V10-00-06)
- In G4HadronPhysicsNuBeam, adjust bertini-ftf overlap from 7-10GeV to 3-3.5GeV
@@ -274,14 +311,14 @@ introduced in the code and keeptrack of all tags.
- Fixed compilation warnings (unused QuasiElastic).
12-Jun-2013, Gunter Folger (phys-ctor-hinelastic-V09-06-12)
- in G4HadronPhysicsINCLXX.cc initialise pointers to optinal parts of
- in G4HadronPhysicsINCLXX.cc initialise pointers to optinal parts of
physics to 0 to protect deletion of uninitialised pointer.
11-Jun-2013, Alberto Ribon (phys-ctor-hinelastic-V09-06-11)
- Improved use of kaon cross sections in G4HadronPhysicsShielding.
- Improved use of kaon cross sections in G4HadronPhysicsShielding.
09-Jun-2013, Andrea Dotti (phys-ctor-hinelastic-V09-06-10)
- Fix for MT, make private data members TLS.
- Fix for MT, make private data members TLS.
29-Mar-2013, Andrea Dotti (phys-ctor-hinelastic-V09-06-09)
- Changes needed for MT: now G4VUserPhysicsList is a split class
@@ -307,7 +344,7 @@ introduced in the code and keeptrack of all tags.
27-Feb-2013, Vladimir Ivanchenko (phys-ctor-hinelastic-V09-06-03)
- G4HadronPhysicsFTFP_BERT, G4HadronPhysicsFTFP_BERT_HP - comment out
unused members of the class to fix warning from the clang compiler
unused members of the class to fix warning from the clang compiler
on MacOS
22-Feb-2013, Davide Mancusi (phys-ctor-hinelastic-V09-06-02)
@@ -319,5 +356,5 @@ introduced in the code and keeptrack of all tags.
- GNUmakefile fixed - G4LIB_BUILD_EXPAT is added
10-Jan-2012, Gunter Folger (phys-ctor-hinelastic-V09-06-00)
- new directory structure introduced.
- new directory structure introduced.
constructors/hadron_inelastic classes
@@ -127,13 +127,16 @@
- final-state: QGSP > 14 GeV; BERT < 15 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- anti_proton and anti_neutron inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
Note: it is possible to specify in the constructor the use of FTFP instead
of QGSP for proton, neutron, charged pions and kaons;
moreover, NeutronHP can also be activated in the constructor, in which
@@ -172,13 +175,16 @@
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- anti_proton and anti_neutron inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
G4HadronPhysicsQGSP_BERT_HP
@@ -217,13 +223,16 @@
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- anti_proton and anti_neutron inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
G4HadronPhysicsQGSP_BIC_HP
@@ -244,13 +253,13 @@
G4HadronPhysicsQGSP_BIC_AllHP
-----------------------------
Similar to G4HadronPhysicsQGSP_BIC_HP with the only difference for proton
and light ions (d, t, He3, alpha):
Similar to G4HadronPhysicsQGSP_BIC_HP, but with a different treatment of
low-energy protons:
ParticleHP is used (for both cross section and final state) below 200 MeV;
above it: Barashenkov-Glauber-Gribov inelastic cross section;
final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; 199 MeV < BIC < 6 GeV.
final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; 190 MeV < BIC < 6 GeV.
G4HadronPhysicsQGSP_FTFP_BERT
-----------------------------
Currently it is the same as QGSP_BERT (this was not the case before G4 10.6).
@@ -290,13 +299,13 @@
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP > 3 GeV; BERT < 6 GeV
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
- anti_hyperons inelastic:
- cross section: Glauber-Gribov
- final-state: FTFP for all energies
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
Note: the variant "M" of the Shielding physics list has a transition region
between FTFP and BERT - for proton, neutron, pions and kaons - between
@@ -25,89 +25,22 @@
//
//
//---------------------------------------------------------------------------
//
#ifndef G4HadronPhysicsQGSP_BIC_AllHP_h
#define G4HadronPhysicsQGSP_BIC_AllHP_h 1
#include "globals.hh"
#include "G4ios.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4PiKBuilder.hh"
#include "G4FTFPPiKBuilder.hh"
#include "G4QGSPPiKBuilder.hh"
#include "G4BertiniPiKBuilder.hh"
#include "G4ProtonBuilder.hh"
#include "G4FTFPProtonBuilder.hh"
#include "G4QGSPProtonBuilder.hh"
#include "G4BinaryProtonBuilder.hh"
#include "G4ProtonPHPBuilder.hh"
#include "G4NeutronBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4QGSPNeutronBuilder.hh"
#include "G4BinaryNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronPhysicsQGSP_BIC_HP.hh"
class G4ComponentGGHadronNucleusXsc;
class G4HadronPhysicsQGSP_BIC_AllHP : public G4VPhysicsConstructor
{
class G4HadronPhysicsQGSP_BIC_AllHP : public G4HadronPhysicsQGSP_BIC_HP {
public:
G4HadronPhysicsQGSP_BIC_AllHP(G4int verbose =1);
G4HadronPhysicsQGSP_BIC_AllHP(const G4String& name, G4bool quasiElastic=true);
virtual ~G4HadronPhysicsQGSP_BIC_AllHP();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
void CreateModels();
const G4double maxFTFP = G4HadronicParameters::Instance()->GetMaxEnergyTransitionQGS_FTF();
const G4double minFTFP = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade();
const G4double maxBIC = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
const G4double maxBERT = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
const G4double minBIC_neutron = 19.9*CLHEP::MeV;
const G4double maxHP_neutron = 20.0*CLHEP::MeV;
const G4double minBIC_proton = 199.0*CLHEP::MeV;
const G4double maxHP_proton = 200.0*CLHEP::MeV;
struct ThreadPrivate {
G4NeutronBuilder * theNeutrons;
G4FTFPNeutronBuilder * theFTFPNeutron;
G4QGSPNeutronBuilder * theQGSPNeutron;
G4BinaryNeutronBuilder * theBinaryNeutron;
G4NeutronPHPBuilder * thePHPNeutron;
G4PiKBuilder * thePiK;
G4FTFPPiKBuilder * theFTFPPiK;
G4QGSPPiKBuilder * theQGSPPiK;
G4BertiniPiKBuilder * theBertiniPiK;
G4ProtonBuilder * thePro;
G4FTFPProtonBuilder * theFTFPPro;
G4QGSPProtonBuilder * theQGSPPro;
G4BinaryProtonBuilder * theBinaryPro;
G4ProtonPHPBuilder * thePHPProton;
G4HyperonFTFPBuilder * theHyperon;
G4AntiBarionBuilder * theAntiBaryon;
G4FTFPAntiBarionBuilder * theFTFPAntiBaryon;
};
static G4ThreadLocal ThreadPrivate* tpdata;
G4HadronPhysicsQGSP_BIC_AllHP( G4int verbose = 1 );
G4HadronPhysicsQGSP_BIC_AllHP( const G4String& name, G4bool quasiElastic = true );
virtual ~G4HadronPhysicsQGSP_BIC_AllHP() {}
protected:
virtual void Proton() override;
G4double minBIC_proton;
G4double maxHP_proton;
};
#endif
@@ -37,77 +37,27 @@
// 25.04.2007 G.Folger: Add quasielastic as option, use quasielastic by default
// 31.10.2012 A.Ribon: Use G4MiscBuilder
// 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
// 05.05.2020 A.Ribon: Use QGSP for antibaryons at high energies
// 07.05.2020 A.Ribon: Use QGSP for hyperons (and anti-hyperons) at high energies
// 20.05.2020 A.Ribon: Refactoring of the class (keeping same functionalities)
//
//----------------------------------------------------------------------------
//
#ifndef G4HadronPhysicsQGSP_BIC_HP_h
#define G4HadronPhysicsQGSP_BIC_HP_h 1
#include "globals.hh"
#include "G4ios.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4PiKBuilder.hh"
#include "G4FTFPPiKBuilder.hh"
#include "G4QGSPPiKBuilder.hh"
#include "G4BertiniPiKBuilder.hh"
#include "G4ProtonBuilder.hh"
#include "G4FTFPProtonBuilder.hh"
#include "G4QGSPProtonBuilder.hh"
#include "G4BinaryProtonBuilder.hh"
#include "G4NeutronBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4QGSPNeutronBuilder.hh"
#include "G4BinaryNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
class G4ComponentGGHadronNucleusXsc;
#include "G4HadronPhysicsQGSP_BIC.hh"
class G4HadronPhysicsQGSP_BIC_HP : public G4VPhysicsConstructor
{
class G4HadronPhysicsQGSP_BIC_HP : public G4HadronPhysicsQGSP_BIC {
public:
G4HadronPhysicsQGSP_BIC_HP(G4int verbose =1);
G4HadronPhysicsQGSP_BIC_HP(const G4String& name, G4bool quasiElastic=true);
virtual ~G4HadronPhysicsQGSP_BIC_HP();
void ConstructParticle() override;
void ConstructProcess() override;
private:
void CreateModels();
struct ThreadPrivate {
G4NeutronBuilder * theNeutrons;
G4FTFPNeutronBuilder * theFTFPNeutron;
G4QGSPNeutronBuilder * theQGSPNeutron;
G4BinaryNeutronBuilder * theBinaryNeutron;
G4NeutronPHPBuilder * theHPNeutron;
G4PiKBuilder * thePiK;
G4FTFPPiKBuilder * theFTFPPiK;
G4QGSPPiKBuilder * theQGSPPiK;
G4BertiniPiKBuilder * theBertiniPiK;
G4ProtonBuilder * thePro;
G4FTFPProtonBuilder * theFTFPPro;
G4QGSPProtonBuilder * theQGSPPro;
G4BinaryProtonBuilder * theBinaryPro;
G4HyperonFTFPBuilder * theHyperon;
G4AntiBarionBuilder * theAntiBaryon;
G4FTFPAntiBarionBuilder * theFTFPAntiBaryon;
};
static G4ThreadLocal ThreadPrivate* tpdata;
G4HadronPhysicsQGSP_BIC_HP( G4int verbose = 1 );
G4HadronPhysicsQGSP_BIC_HP( const G4String& name, G4bool quasiElastic = true );
virtual ~G4HadronPhysicsQGSP_BIC_HP() {}
protected:
virtual void Neutron() override;
virtual void ExtraConfiguration() override;
G4double minBIC_neutron;
};
#endif
@@ -144,7 +144,6 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_hinelastic
G4had_mod_man
G4had_mod_util
G4had_lept_nuclear
G4had_neu_hp
G4had_preequ_exciton
G4had_string_diff
G4had_string_frag
@@ -74,6 +74,7 @@
#include "G4HadronicInteractionRegistry.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -238,4 +239,5 @@ void G4HadronInelasticQBBC::ConstructProcess()
hp->AddDataSet(anucxs);
}
}
G4HadronicBuilder::BuildBCHadronsFTFP_BERT();
}
@@ -61,6 +61,7 @@
#include "G4BertiniNeutronBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
@@ -78,6 +79,7 @@
#include "G4Threading.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -135,6 +137,7 @@ void G4HadronPhysicsFTFP_BERT::CreateModels()
Pion();
Kaon();
Others();
G4HadronicBuilder::BuildBCHadronsFTFP_BERT();
}
void G4HadronPhysicsFTFP_BERT::Neutron()
@@ -205,12 +208,14 @@ void G4HadronPhysicsFTFP_BERT::Kaon()
void G4HadronPhysicsFTFP_BERT::Others()
{
//===== Hyperons ====== //
auto hyp = new G4HyperonFTFPBuilder;
AddBuilder( hyp );
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
auto ftfphyp = new G4HyperonFTFPBuilder;
AddBuilder(ftfphyp);
hyp->RegisterMe(ftfphyp);
hyp->Build();
///===== Anti-barions==== //
// Anti-barions
auto abar = new G4AntiBarionBuilder;
AddBuilder(abar);
auto ftfpabar = new G4FTFPAntiBarionBuilder(QuasiElastic);
@@ -77,6 +77,7 @@ G4HadronPhysicsFTFP_BERT_TRV::G4HadronPhysicsFTFP_BERT_TRV(const G4String& name,
minFTFP_neutron = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade();
maxBERT_neutron = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
QuasiElastic = false;
G4HadronicParameters::Instance()->SetEnableBCParticles(true);
}
/*
@@ -57,6 +57,7 @@
#include "G4NeutronBuilder.hh"
#include "G4FTFBinaryNeutronBuilder.hh"
#include "G4BinaryNeutronBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
@@ -167,10 +168,14 @@ void G4HadronPhysicsFTF_BIC::Kaon()
void G4HadronPhysicsFTF_BIC::Others()
{
auto hyp = new G4HyperonFTFPBuilder;
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
auto ftfphyp = new G4HyperonFTFPBuilder;
AddBuilder(ftfphyp);
hyp->RegisterMe(ftfphyp);
hyp->Build();
// Anti-barions
auto abar = new G4AntiBarionBuilder;
AddBuilder(abar);
auto ftfpabar = new G4FTFPAntiBarionBuilder(QuasiElastic);
@@ -31,6 +31,9 @@
// Author: 2011 P. Kaitaniemi
//
// Modified:
// 07.05.2020 A.Ribon: Use eventually QGSP for hyperons (and anti-hyperons)
// at high energies
// 05.05.2020 A.Ribon: Use eventually QGSP for antibaryons at high energies
// 22.05.2014 D. Mancusi: Extend INCL++ to 20 GeV
// 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
// 08.03.2013 D. Mancusi: Fix a problem with overlapping model ranges
@@ -77,9 +80,12 @@
#include "G4INCLXXNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4HyperonQGSPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
#include "G4QGSPAntiBarionBuilder.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronRadCapture.hh"
@@ -239,15 +245,34 @@ void G4HadronPhysicsINCLXX::Kaon()
void G4HadronPhysicsINCLXX::Others()
{
auto hyp = new G4HyperonFTFPBuilder;
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
hyp->Build();
auto ftfphyp = new G4HyperonFTFPBuilder(quasiElasticFTF);
AddBuilder(ftfphyp);
hyp->RegisterMe(ftfphyp);
if (!withFTFP) {
ftfphyp->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergyTransitionQGS_FTF());
auto qgsphyp = new G4HyperonQGSPBuilder(quasiElasticQGS);
AddBuilder(qgsphyp);
qgsphyp->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionQGS_FTF());
hyp->RegisterMe(qgsphyp);
}
hyp->Build();
// Antibaryons
auto abar = new G4AntiBarionBuilder;
AddBuilder(abar);
auto ftfpabar = new G4FTFPAntiBarionBuilder(quasiElasticFTF);
AddBuilder(ftfpabar);
abar->RegisterMe(ftfpabar);
auto ftf = new G4FTFPAntiBarionBuilder(quasiElasticFTF);
AddBuilder(ftf);
abar->RegisterMe(ftf);
if (!withFTFP) {
ftf->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergyTransitionQGS_FTF());
auto qgs = new G4QGSPAntiBarionBuilder(quasiElasticQGS);
AddBuilder(qgs);
qgs->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionQGS_FTF());
abar->RegisterMe(qgs);
}
abar->Build();
}
@@ -38,6 +38,8 @@
// 10.12.2007 G.Folger: Add projectilediffrative option for proton/neutron, off by default
// 31.10.2012 A.Ribon: Use G4MiscBuilder
// 19.03.2013 A.Ribon: Replace LEP with FTFP
// 05.05.2020 A.Ribon: Use QGSP for antibaryons at high energies
// 07.05.2020 A.Ribon: Use QGSP for hyperons (and anti-hyperons) at high energies
//
//----------------------------------------------------------------------------
//
@@ -66,9 +68,12 @@
#include "G4QGSPNeutronBuilder.hh"
#include "G4BertiniNeutronBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4HyperonQGSPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
#include "G4QGSPAntiBarionBuilder.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
@@ -83,6 +88,7 @@
#include "G4PhysListUtil.hh"
#include "G4ProcessManager.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
#include "G4PhysicsConstructorFactory.hh"
//
@@ -115,6 +121,7 @@ void G4HadronPhysicsQGSP_BERT::CreateModels()
Pion();
Kaon();
Others();
G4HadronicBuilder::BuildBCHadronsQGSP_FTFP_BERT(QuasiElasticQGS);
}
void G4HadronPhysicsQGSP_BERT::Neutron()
@@ -187,15 +194,29 @@ void G4HadronPhysicsQGSP_BERT::Pion()
void G4HadronPhysicsQGSP_BERT::Others()
{
auto hyp = new G4HyperonFTFPBuilder;
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
hyp->Build();
auto ftfphyp = new G4HyperonFTFPBuilder(QuasiElasticFTF);
AddBuilder(ftfphyp);
ftfphyp->SetMaxEnergy(maxFTFP_proton);
hyp->RegisterMe(ftfphyp);
auto qgsphyp = new G4HyperonQGSPBuilder(QuasiElasticQGS);
AddBuilder(qgsphyp);
qgsphyp->SetMinEnergy(minQGSP_proton);
hyp->RegisterMe(qgsphyp);
hyp->Build();
// Antibaryons
auto abar = new G4AntiBarionBuilder;
AddBuilder(abar);
auto ftf = new G4FTFPAntiBarionBuilder(QuasiElasticFTF);
AddBuilder(ftf);
ftf->SetMaxEnergy(maxFTFP_proton);
abar->RegisterMe(ftf);
auto qgs = new G4QGSPAntiBarionBuilder(QuasiElasticQGS);
AddBuilder(qgs);
qgs->SetMinEnergy(minQGSP_proton);
abar->RegisterMe(qgs);
abar->Build();
}
@@ -36,6 +36,8 @@
// 25.04.2007 G.Folger: Add code for quasielastic
// 31.10.2012 A.Ribon: Use G4MiscBuilder
// 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
// 05.05.2020 A.Ribon: Use QGSP for antibaryons at high energies
// 07.05.2020 A.Ribon: Use QGSP for hyperons (and anti-hyperons) at high energies
//
//----------------------------------------------------------------------------
//
@@ -58,9 +60,12 @@
#include "G4QGSPNeutronBuilder.hh"
#include "G4BinaryNeutronBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4HyperonQGSPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
#include "G4QGSPAntiBarionBuilder.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
@@ -174,14 +179,29 @@ void G4HadronPhysicsQGSP_BIC::Pion()
void G4HadronPhysicsQGSP_BIC::Others()
{
auto hyp = new G4HyperonFTFPBuilder;
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
hyp->Build();
auto ftfphyp = new G4HyperonFTFPBuilder(QuasiElasticFTF);
AddBuilder(ftfphyp);
ftfphyp->SetMaxEnergy(maxFTFP_proton);
hyp->RegisterMe(ftfphyp);
auto qgsphyp = new G4HyperonQGSPBuilder(QuasiElasticQGS);
AddBuilder(qgsphyp);
qgsphyp->SetMinEnergy(minQGSP_proton);
hyp->RegisterMe(qgsphyp);
hyp->Build();
// Antibaryons
auto abar = new G4AntiBarionBuilder;
AddBuilder(abar);
auto ftf = new G4FTFPAntiBarionBuilder(QuasiElasticFTF);
AddBuilder(ftf);
ftf->SetMaxEnergy(maxFTFP_proton);
abar->RegisterMe(ftf);
auto qgs = new G4QGSPAntiBarionBuilder(QuasiElasticQGS);
AddBuilder(qgs);
qgs->SetMinEnergy(minQGSP_proton);
abar->RegisterMe(qgs);
abar->Build();
}
@@ -25,152 +25,63 @@
//
//
//---------------------------------------------------------------------------
//
#include <iomanip>
#include "G4HadronPhysicsQGSP_BIC_AllHP.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronRadCapture.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4ParticleHPCaptureData.hh"
#include "G4LFission.hh"
#include "G4ProtonBuilder.hh"
#include "G4FTFPProtonBuilder.hh"
#include "G4QGSPProtonBuilder.hh"
#include "G4BinaryProtonBuilder.hh"
#include "G4ProtonPHPBuilder.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessManager.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4PhysListUtil.hh"
#include "G4HadronicParameters.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsQGSP_BIC_AllHP);
G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronPhysicsQGSP_BIC_AllHP );
G4ThreadLocal G4HadronPhysicsQGSP_BIC_AllHP::ThreadPrivate*
G4HadronPhysicsQGSP_BIC_AllHP::tpdata = nullptr;
G4HadronPhysicsQGSP_BIC_AllHP::G4HadronPhysicsQGSP_BIC_AllHP(G4int)
: G4VPhysicsConstructor("hInelastic QGSP_BIC_AllHP")
G4HadronPhysicsQGSP_BIC_AllHP::G4HadronPhysicsQGSP_BIC_AllHP( G4int )
: G4HadronPhysicsQGSP_BIC_AllHP( "hInelastic QGSP_BIC_AllHP" )
{}
G4HadronPhysicsQGSP_BIC_AllHP::G4HadronPhysicsQGSP_BIC_AllHP(const G4String& name, G4bool /* quasiElastic */)
: G4VPhysicsConstructor(name)
{}
void G4HadronPhysicsQGSP_BIC_AllHP::CreateModels()
G4HadronPhysicsQGSP_BIC_AllHP::G4HadronPhysicsQGSP_BIC_AllHP( const G4String& name, G4bool /*quasiElastic */ )
: G4HadronPhysicsQGSP_BIC_HP( name )
{
G4bool quasiElasticFTF= false; // Use built-in quasi-elastic (not add-on)
G4bool quasiElasticQGS= true; // For QGS, it must use it.
tpdata->theNeutrons=new G4NeutronBuilder( true ); // Fission on
tpdata->theNeutrons->RegisterMe(tpdata->theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasticQGS));
tpdata->theNeutrons->RegisterMe(tpdata->theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasticFTF));
tpdata->theFTFPNeutron->SetMinEnergy(minFTFP);
tpdata->theFTFPNeutron->SetMaxEnergy(maxFTFP);
tpdata->theNeutrons->RegisterMe(tpdata->theBinaryNeutron=new G4BinaryNeutronBuilder);
tpdata->theBinaryNeutron->SetMinEnergy(minBIC_neutron);
tpdata->theBinaryNeutron->SetMaxEnergy(maxBIC);
tpdata->theNeutrons->RegisterMe(tpdata->thePHPNeutron=new G4NeutronPHPBuilder);
tpdata->thePHPNeutron->SetMaxEnergy(maxHP_neutron);
tpdata->thePro=new G4ProtonBuilder;
tpdata->thePro->RegisterMe(tpdata->theQGSPPro=new G4QGSPProtonBuilder(quasiElasticQGS));
tpdata->thePro->RegisterMe(tpdata->theFTFPPro=new G4FTFPProtonBuilder(quasiElasticFTF));
tpdata->theFTFPPro->SetMinEnergy(minFTFP);
tpdata->theFTFPPro->SetMaxEnergy(maxFTFP);
tpdata->thePro->RegisterMe(tpdata->theBinaryPro=new G4BinaryProtonBuilder);
tpdata->theBinaryPro->SetMinEnergy(minBIC_proton);
tpdata->theBinaryPro->SetMaxEnergy(maxBIC);
tpdata->thePro->RegisterMe(tpdata->thePHPProton=new G4ProtonPHPBuilder);
tpdata->thePHPProton->SetMaxEnergy(maxHP_proton);
tpdata->thePiK=new G4PiKBuilder;
tpdata->thePiK->RegisterMe(tpdata->theQGSPPiK=new G4QGSPPiKBuilder(quasiElasticQGS));
tpdata->thePiK->RegisterMe(tpdata->theFTFPPiK=new G4FTFPPiKBuilder(quasiElasticFTF));
tpdata->theFTFPPiK->SetMaxEnergy(maxFTFP);
tpdata->thePiK->RegisterMe(tpdata->theBertiniPiK=new G4BertiniPiKBuilder);
tpdata->theBertiniPiK->SetMaxEnergy(maxBERT);
tpdata->theHyperon=new G4HyperonFTFPBuilder;
tpdata->theAntiBaryon=new G4AntiBarionBuilder;
tpdata->theAntiBaryon->RegisterMe(tpdata->theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(quasiElasticFTF));
minBIC_proton = 190.0*CLHEP::MeV;
maxHP_proton = 200.0*CLHEP::MeV;
}
G4HadronPhysicsQGSP_BIC_AllHP::~G4HadronPhysicsQGSP_BIC_AllHP()
{
if (!tpdata) return;
delete tpdata->thePHPNeutron;
delete tpdata->theBinaryNeutron;
delete tpdata->theQGSPNeutron;
delete tpdata->theFTFPNeutron;
delete tpdata->theBertiniPiK;
delete tpdata->theQGSPPiK;
delete tpdata->theFTFPPiK;
delete tpdata->thePiK;
delete tpdata->thePHPProton;
delete tpdata->theBinaryPro;
delete tpdata->theQGSPPro;
delete tpdata->theFTFPPro;
delete tpdata->thePro;
delete tpdata->theFTFPAntiBaryon;
delete tpdata->theAntiBaryon;
delete tpdata->theHyperon;
delete tpdata; tpdata = nullptr;
}
void G4HadronPhysicsQGSP_BIC_AllHP::ConstructParticle()
{
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
G4IonConstructor pIonConstructor;
pIonConstructor.ConstructParticle();
}
#include "G4ProcessManager.hh"
void G4HadronPhysicsQGSP_BIC_AllHP::ConstructProcess()
{
if ( tpdata == 0 ) tpdata = new ThreadPrivate;
CreateModels();
tpdata->theNeutrons->Build();
tpdata->thePro->Build();
tpdata->thePiK->Build();
tpdata->theHyperon->Build();
tpdata->theAntiBaryon->Build();
// --- Neutrons ---
const G4ParticleDefinition* neutron = G4Neutron::Neutron();
G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess(neutron);
if (capture) {
G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture();
theNeutronRadCapture->SetMinEnergy( minBIC_neutron );
capture->RegisterMe( theNeutronRadCapture );
}
G4HadronicProcess* fission = G4PhysListUtil::FindFissionProcess(neutron);
if (fission) {
G4LFission* theNeutronLEPFission = new G4LFission();
theNeutronLEPFission->SetMinEnergy( minBIC_neutron );
theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
fission->RegisterMe( theNeutronLEPFission );
}
void G4HadronPhysicsQGSP_BIC_AllHP::Proton() {
auto pro = new G4ProtonBuilder;
AddBuilder( pro );
auto qgs = new G4QGSPProtonBuilder( QuasiElasticQGS );
AddBuilder( qgs );
qgs->SetMinEnergy( minQGSP_proton );
pro->RegisterMe( qgs );
auto ftf = new G4FTFPProtonBuilder( QuasiElasticFTF );
AddBuilder( ftf );
ftf->SetMinEnergy( minFTFP_proton );
ftf->SetMaxEnergy( maxFTFP_proton );
pro->RegisterMe( ftf );
auto bic = new G4BinaryProtonBuilder;
AddBuilder( bic );
bic->SetMinEnergy( minBIC_proton );
bic->SetMaxEnergy( maxBIC_proton );
pro->RegisterMe( bic );
auto hp = new G4ProtonPHPBuilder;
AddBuilder( hp );
hp->SetMaxEnergy( maxHP_proton );
pro->RegisterMe( hp );
pro->Build();
}
@@ -36,155 +36,89 @@
// 25.04.2007 G.Folger: Add code for quasielastic
// 31.10.2012 A.Ribon: Use G4MiscBuilder
// 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
// 05.05.2020 A.Ribon: Use QGSP for antibaryons at high energies
// 07.05.2020 A.Ribon: Use QGSP for hyperons (and anti-hyperons) at high energies
// 20.05.2020 A.Ribon: Refactoring of the class (keeping same functionalities)
//
//----------------------------------------------------------------------------
//
#include <iomanip>
#include "G4HadronPhysicsQGSP_BIC_HP.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4NeutronBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4QGSPNeutronBuilder.hh"
#include "G4BinaryNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronRadCapture.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4ParticleHPCaptureData.hh"
#include "G4LFission.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessManager.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4PhysListUtil.hh"
#include "G4HadronicParameters.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsQGSP_BIC_HP);
G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronPhysicsQGSP_BIC_HP );
G4ThreadLocal G4HadronPhysicsQGSP_BIC_HP::ThreadPrivate*
G4HadronPhysicsQGSP_BIC_HP::tpdata = nullptr;
G4HadronPhysicsQGSP_BIC_HP::G4HadronPhysicsQGSP_BIC_HP(G4int)
: G4VPhysicsConstructor("hInelastic QGSP_BIC_HP")
G4HadronPhysicsQGSP_BIC_HP::G4HadronPhysicsQGSP_BIC_HP( G4int )
: G4HadronPhysicsQGSP_BIC_HP( "hInelastic QGSP_BIC_HP" )
{}
G4HadronPhysicsQGSP_BIC_HP::G4HadronPhysicsQGSP_BIC_HP(const G4String& name, G4bool /* quasiElastic */)
: G4VPhysicsConstructor(name)
{}
void G4HadronPhysicsQGSP_BIC_HP::CreateModels()
G4HadronPhysicsQGSP_BIC_HP::G4HadronPhysicsQGSP_BIC_HP( const G4String& name, G4bool /*quasiElastic */ )
: G4HadronPhysicsQGSP_BIC( name )
{
G4bool quasiElasticFTF= false; // Use built-in quasi-elastic (not add-on)
G4bool quasiElasticQGS= true; // For QGS, it must use it.
const G4double maxFTFP = G4HadronicParameters::Instance()->GetMaxEnergyTransitionQGS_FTF();
const G4double minFTFP = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade();
const G4double maxBIC = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
const G4double maxBERT = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
const G4double maxHP = 19.9*MeV;
tpdata->theNeutrons=new G4NeutronBuilder( true ); // Fission on
tpdata->theNeutrons->RegisterMe(tpdata->theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasticQGS));
tpdata->theNeutrons->RegisterMe(tpdata->theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasticFTF));
tpdata->theFTFPNeutron->SetMinEnergy(minFTFP);
tpdata->theFTFPNeutron->SetMaxEnergy(maxFTFP);
tpdata->theNeutrons->RegisterMe(tpdata->theBinaryNeutron=new G4BinaryNeutronBuilder);
tpdata->theBinaryNeutron->SetMinEnergy(maxHP);
tpdata->theBinaryNeutron->SetMaxEnergy(maxBIC);
tpdata->theNeutrons->RegisterMe(tpdata->theHPNeutron=new G4NeutronPHPBuilder);
tpdata->thePro=new G4ProtonBuilder;
tpdata->thePro->RegisterMe(tpdata->theQGSPPro=new G4QGSPProtonBuilder(quasiElasticQGS));
tpdata->thePro->RegisterMe(tpdata->theFTFPPro=new G4FTFPProtonBuilder(quasiElasticFTF));
tpdata->theFTFPPro->SetMinEnergy(minFTFP);
tpdata->theFTFPPro->SetMaxEnergy(maxFTFP);
tpdata->thePro->RegisterMe(tpdata->theBinaryPro=new G4BinaryProtonBuilder);
tpdata->theBinaryPro->SetMaxEnergy(maxBIC);
tpdata->thePiK=new G4PiKBuilder;
tpdata->thePiK->RegisterMe(tpdata->theQGSPPiK=new G4QGSPPiKBuilder(quasiElasticQGS));
tpdata->thePiK->RegisterMe(tpdata->theFTFPPiK=new G4FTFPPiKBuilder(quasiElasticFTF));
tpdata->theFTFPPiK->SetMaxEnergy(maxFTFP);
tpdata->thePiK->RegisterMe(tpdata->theBertiniPiK=new G4BertiniPiKBuilder);
tpdata->theBertiniPiK->SetMaxEnergy(maxBERT);
tpdata->theHyperon=new G4HyperonFTFPBuilder;
tpdata->theAntiBaryon=new G4AntiBarionBuilder;
tpdata->theAntiBaryon->RegisterMe(tpdata->theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(quasiElasticFTF));
minBIC_neutron = 19.9*MeV;
}
G4HadronPhysicsQGSP_BIC_HP::~G4HadronPhysicsQGSP_BIC_HP()
{
if (!tpdata) return;
delete tpdata->theHPNeutron;
delete tpdata->theBinaryNeutron;
delete tpdata->theQGSPNeutron;
delete tpdata->theFTFPNeutron;
delete tpdata->theBertiniPiK;
delete tpdata->theQGSPPiK;
delete tpdata->theFTFPPiK;
delete tpdata->thePiK;
delete tpdata->theBinaryPro;
delete tpdata->theQGSPPro;
delete tpdata->theFTFPPro;
delete tpdata->thePro;
delete tpdata->theFTFPAntiBaryon;
delete tpdata->theAntiBaryon;
delete tpdata->theHyperon;
delete tpdata; tpdata = nullptr;
void G4HadronPhysicsQGSP_BIC_HP::Neutron() {
auto neu = new G4NeutronBuilder( true ); // Fission on
AddBuilder( neu );
auto qgs = new G4QGSPNeutronBuilder( QuasiElasticQGS );
AddBuilder( qgs );
qgs->SetMinEnergy( minQGSP_neutron );
neu->RegisterMe( qgs );
auto ftf = new G4FTFPNeutronBuilder( QuasiElasticFTF );
AddBuilder( ftf );
ftf->SetMinEnergy( minFTFP_neutron );
ftf->SetMaxEnergy( maxFTFP_neutron );
neu->RegisterMe( ftf );
auto bic = new G4BinaryNeutronBuilder;
AddBuilder( bic );
bic->SetMinEnergy( minBIC_neutron );
bic->SetMaxEnergy( maxBIC_neutron );
neu->RegisterMe( bic );
auto hp = new G4NeutronPHPBuilder;
AddBuilder( hp );
neu->RegisterMe( hp );
neu->Build();
}
void G4HadronPhysicsQGSP_BIC_HP::ConstructParticle()
{
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
G4IonConstructor pIonConstructor;
pIonConstructor.ConstructParticle();
}
void G4HadronPhysicsQGSP_BIC_HP::ConstructProcess()
{
if ( !tpdata ) tpdata = new ThreadPrivate;
CreateModels();
tpdata->theNeutrons->Build();
tpdata->thePro->Build();
tpdata->thePiK->Build();
tpdata->theHyperon->Build();
tpdata->theAntiBaryon->Build();
void G4HadronPhysicsQGSP_BIC_HP::ExtraConfiguration() {
// --- Neutrons ---
const G4ParticleDefinition* neutron = G4Neutron::Neutron();
G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess(neutron);
if (capture) {
G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture();
theNeutronRadCapture->SetMinEnergy( 19.9*MeV );
G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess( neutron );
if ( capture ) {
G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture;
theNeutronRadCapture->SetMinEnergy( minBIC_neutron );
capture->RegisterMe( theNeutronRadCapture );
}
G4HadronicProcess* fission = G4PhysListUtil::FindFissionProcess(neutron);
if (fission) {
G4LFission* theNeutronLEPFission = new G4LFission();
theNeutronLEPFission->SetMinEnergy( 19.9*MeV );
G4HadronicProcess* fission = G4PhysListUtil::FindFissionProcess( neutron );
if ( fission ) {
G4LFission* theNeutronLEPFission = new G4LFission;
theNeutronLEPFission->SetMinEnergy( minBIC_neutron );
theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
fission->RegisterMe( theNeutronLEPFission );
}
@@ -54,6 +54,7 @@ G4HadronPhysicsQGSP_FTFP_BERT::G4HadronPhysicsQGSP_FTFP_BERT(const G4String& nam
G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade();
maxBERT_proton = maxBERT_neutron = maxBERT_pik =
G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
G4HadronicParameters::Instance()->SetEnableBCParticles(true);
}
@@ -59,9 +59,12 @@
#include "G4QGSBinaryNeutronBuilder.hh"
#include "G4BinaryNeutronBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4HyperonQGSPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
#include "G4QGSPAntiBarionBuilder.hh"
#include "globals.hh"
#include "G4ios.hh"
@@ -208,14 +211,29 @@ void G4HadronPhysicsQGS_BIC::Kaon()
void G4HadronPhysicsQGS_BIC::Others()
{
auto hyp = new G4HyperonFTFPBuilder;
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
auto ftfphyp = new G4HyperonFTFPBuilder(QuasiElasticFTF);
AddBuilder(ftfphyp);
ftfphyp->SetMaxEnergy(maxFTF_proton);
hyp->RegisterMe(ftfphyp);
auto qgsphyp = new G4HyperonQGSPBuilder(QuasiElasticQGS);
AddBuilder(qgsphyp);
qgsphyp->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionQGS_FTF());
hyp->RegisterMe(qgsphyp);
hyp->Build();
// Antibaryons
auto abar = new G4AntiBarionBuilder;
AddBuilder(abar);
auto ftf = new G4FTFPAntiBarionBuilder(QuasiElasticFTF);
AddBuilder(ftf);
ftf->SetMaxEnergy(maxFTF_proton);
abar->RegisterMe(ftf);
auto qgs = new G4QGSPAntiBarionBuilder(QuasiElasticQGS);
AddBuilder(qgs);
qgs->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionQGS_FTF());
abar->RegisterMe(qgs);
abar->Build();
}
@@ -33,6 +33,7 @@
//
// Modified:
//
// 2020.05.07 A.Ribon used the newly introduced G4HyperonBuilder
// 2019.08.01 A.Ribon replaced explicit numbers for the energy transition
// region with values taken from G4HadronicParameters
// 2014.08.05 K.L.Genser added provisions for modifing the Bertini to
@@ -73,6 +74,7 @@
#include "G4FTFPNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
@@ -249,17 +251,19 @@ void G4HadronPhysicsShielding::Kaon()
void G4HadronPhysicsShielding::Others()
{
// Hyperons
auto hyp = new G4HyperonFTFPBuilder;
AddBuilder( hyp );
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
auto ftfphyp = new G4HyperonFTFPBuilder;
AddBuilder(ftfphyp);
hyp->RegisterMe(ftfphyp);
hyp->Build();
// Antibaryons
// Anti-barions
auto abar = new G4AntiBarionBuilder;
AddBuilder( abar );
auto ftfpabar = new G4FTFPAntiBarionBuilder( false );
AddBuilder( ftfpabar );
abar->RegisterMe( ftfpabar );
AddBuilder(abar);
auto ftfpabar = new G4FTFPAntiBarionBuilder;
AddBuilder(ftfpabar);
abar->RegisterMe(ftfpabar);
abar->Build();
}
@@ -68,6 +68,7 @@
#include "G4FTFPNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4HyperonBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
@@ -238,17 +239,19 @@ void G4HadronPhysicsShieldingLEND::Kaon()
void G4HadronPhysicsShieldingLEND::Others()
{
// Hyperons
auto hyp = new G4HyperonFTFPBuilder;
AddBuilder( hyp );
// Hyperons (and anti-hyperons)
auto hyp = new G4HyperonBuilder;
AddBuilder(hyp);
auto ftfphyp = new G4HyperonFTFPBuilder;
AddBuilder(ftfphyp);
hyp->RegisterMe(ftfphyp);
hyp->Build();
// Antibaryons
// Anti-barions
auto abar = new G4AntiBarionBuilder;
AddBuilder( abar );
auto ftfpabar = new G4FTFPAntiBarionBuilder( false );
AddBuilder( ftfpabar );
abar->RegisterMe( ftfpabar );
AddBuilder(abar);
auto ftfpabar = new G4FTFPAntiBarionBuilder;
AddBuilder(ftfpabar);
abar->RegisterMe(ftfpabar);
abar->Build();
}