Import Geant4 11.2.0 source tree

This commit is contained in:
Gabriele Cosmo
2023-12-08 10:43:34 +01:00
parent dd1f179cda
commit 860a2b92bf
3962 changed files with 139318 additions and 164259 deletions
@@ -4,6 +4,13 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
## 2023-10-20 Jean-Christophe David (phys-ctor-hinelastic-V11-01-02)
- Call G4HadronicBuilder::BuildAntiLightIonsINCLXX() to treat antiproton with INCLXX
## 2023-10-15 Vladimir Ivanchenko (phys-ctor-hinelastic-V11-01-01)
- G4HadronInelasticQBBC - more accurate instantiation of the neutron general process
- G4HadrocPhysicsQGSP_BERT_HP - used alternative HP models and cross sections
## 2023-04-19 Alberto Ribon (phys-ctor-hinelastic-V11-01-00)
- Created the new class G4HadronInelasticQBBC_ABLA, which is similar to
G4HadronInelasticQBBC_ABLA, except that, for the final-state of nuclear
@@ -31,6 +31,7 @@
// Author: 2 October 2009 V. Ivanchenko
//
// Modified:
// 12.10.2023 V.Ivanchenko added usage of the neutron general process
//
//----------------------------------------------------------------------------
//
@@ -284,7 +284,7 @@ void G4HadronPhysicsINCLXX::Others()
if( param->GetMaxEnergy() > param->EnergyThresholdForHeavyHadrons() ) {
// anti light ions
G4HadronicBuilder::BuildAntiLightIonsFTFP();
G4HadronicBuilder::BuildAntiLightIonsINCLXX();
if ( param->EnableHyperNuclei() ) {
// INCLXX is currently capable of handling light hypernuclei projectiles,
@@ -33,10 +33,13 @@
// Modified:
// 15.12.2005 G.Folger: migration to non static particles
// 08.06.2006 V.Ivanchenko: remove stopping
// 20.06.2006 G.Folger: Bertini applies to Kaons, i.e. use SetMinEnergy instead of SetMinPionEnergy
// 20.06.2006 G.Folger: Bertini applies to Kaons, i.e. use SetMinEnergy
// instead of SetMinPionEnergy
// 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
// 12.10.2023 V.Ivanchenko added usage of alternative neutron
// HP model and cross section
//
//----------------------------------------------------------------------------
//
@@ -56,17 +59,21 @@
#include "G4BertiniNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4NeutronRadCapture.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4ParticleHPCaptureData.hh"
#include "G4LFission.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4NeutronCaptureProcess.hh"
#include "G4NeutronFissionProcess.hh"
#include "G4NeutronRadCaptureHP.hh"
#include "G4NeutronHPCaptureXS.hh"
#include "G4NeutronHPFissionXS.hh"
#include "G4NeutronHPInelasticXS.hh"
#include "G4NeutronHPInelasticVI.hh"
#include "G4NeutronInelasticXS.hh"
#include "G4ParticleHPInelastic.hh"
#include "G4NeutronFissionVI.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessManager.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4PhysListUtil.hh"
#include "G4HadronicParameters.hh"
// factory
@@ -84,6 +91,9 @@ G4HadronPhysicsQGSP_BERT_HP::G4HadronPhysicsQGSP_BERT_HP(const G4String& name, G
: G4HadronPhysicsQGSP_BERT(name)
{
minBERT_neutron = 19.9*MeV;
auto param = G4HadronicParameters::Instance();
// HP is inconsistent with the neutron general process
param->SetEnableNeutronGeneralProcess(false);
}
void G4HadronPhysicsQGSP_BERT_HP::Neutron()
@@ -91,43 +101,40 @@ void G4HadronPhysicsQGSP_BERT_HP::Neutron()
G4HadronicParameters* param = G4HadronicParameters::Instance();
G4bool useFactorXS = param->ApplyFactorXS();
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 bert = new G4BertiniNeutronBuilder;
AddBuilder(bert);
bert->SetMinEnergy(minBERT_neutron);
bert->SetMaxEnergy(maxBERT_neutron);
neu->RegisterMe(bert);
auto hp = new G4NeutronPHPBuilder;
AddBuilder(hp);
neu->RegisterMe(hp);
neu->Build();
const G4ParticleDefinition* neutron = G4Neutron::Neutron();
G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess( neutron );
if(nullptr != inel) {
if( useFactorXS ) inel->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() );
}
G4HadronicProcess* capture = G4PhysListUtil::FindCaptureProcess( neutron );
if ( nullptr != capture ) {
G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture;
theNeutronRadCapture->SetMinEnergy( minBERT_neutron );
capture->RegisterMe( theNeutronRadCapture );
}
G4HadronicProcess* fission = G4PhysListUtil::FindFissionProcess( neutron );
if ( nullptr != fission ) {
G4LFission* theNeutronLEPFission = new G4LFission;
theNeutronLEPFission->SetMinEnergy( minBERT_neutron );
theNeutronLEPFission->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
fission->RegisterMe( theNeutronLEPFission );
}
auto inel = new G4HadronInelasticProcess( "neutronInelastic", neutron );
neutron->GetProcessManager()->AddDiscreteProcess(inel);
G4QGSPNeutronBuilder qgs(QuasiElasticQGS);
qgs.SetMinEnergy(minQGSP_neutron);
qgs.Build(inel);
G4FTFPNeutronBuilder ftf(QuasiElasticFTF);
ftf.SetMinEnergy(minFTFP_neutron);
ftf.SetMaxEnergy(maxFTFP_neutron);
ftf.Build(inel);
G4BertiniNeutronBuilder bert;
bert.SetMinEnergy(minBERT_neutron);
bert.SetMaxEnergy(maxBERT_neutron);
bert.Build(inel);
auto xsinel = new G4NeutronInelasticXS();
inel->AddDataSet( xsinel );
inel->AddDataSet( new G4NeutronHPInelasticXS() );
auto mod = new G4NeutronHPInelasticVI();
mod->SetMaxEnergy( 20*CLHEP::MeV );
inel->RegisterMe( mod );
if ( useFactorXS )
inel->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() );
auto capture = new G4NeutronCaptureProcess( "nCaptureHP" );
neutron->GetProcessManager()->AddDiscreteProcess(capture);
capture->AddDataSet( new G4NeutronHPCaptureXS() );
capture->RegisterMe( new G4NeutronRadCaptureHP() );
auto fission = new G4NeutronFissionProcess( "nFissionHP" );
neutron->GetProcessManager()->AddDiscreteProcess(fission);
fission->AddDataSet( new G4NeutronHPFissionXS() );
fission->RegisterMe( new G4NeutronFissionVI() );
}