Import Geant4 10.7.0 source tree

This commit is contained in:
Gabriele Cosmo
2020-12-04 12:30:43 +01:00
parent 67ba86d073
commit dab42d2018
3770 changed files with 226369 additions and 286486 deletions
@@ -12,6 +12,29 @@ introduced in the code and keeptrack of all tags.
----------------------------------------------------------
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
01-Oct-2020, V. Ivanchenko (phys-ctor-helastic-V10-06-06)
- G4ThermalNeutrons - use G4PhysListUtils to access neutron elastic
process
17-Sep-2020, A. Ribon (phys-ctor-helastic-V10-06-05)
- G4HadronHElasticPhysics : added elastic scattering for charm and bottom
hadrons (needed for FTFP_BERT_TRV).
24-Aug-2020, V. Ivanchenko (phys-ctor-helastic-V10-06-04)
- G4HadronElasticPhysics - use G4HadProcesses and G4PhysListUtil
01-Aug-2020, V. Ivanchenko (phys-ctor-helastic-V10-06-03)
- G4HadronElasticPhysics - added optional cross section factor
for systematics studies
20-Jul-2020, V. Ivanchenko (phys-ctor-helastic-V10-06-02)
- G4HadronElasticPhysics - instantiate anti-hyperons
02-Jul-2020, V. Ivanchenko (phys-ctor-helastic-V10-06-01)
- G4HadronElasticPhysics - use coherently with inelastic physics
builder new utilities: G4HadParticles and G4HadronicBuilder
30-Apr-2020 Ben Morgan (phys-ctor-helastic-V10-06-00)
- Remove obsolete GRANULAR_DEPENDENCIES entries
@@ -14,51 +14,9 @@
#
#------------------------------------------------------------------------------
# List external includes needed.
include_directories(${CLHEP_INCLUDE_DIRS})
# List internal includes needed.
include_directories(${CMAKE_SOURCE_DIR}/source/global/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPRandom/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPNumerics/include)
include_directories(${CMAKE_SOURCE_DIR}/source/global/HEPGeometry/include)
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/volumes/include)
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/magneticfield/include)
include_directories(${CMAKE_SOURCE_DIR}/source/geometry/navigation/include)
include_directories(${CMAKE_SOURCE_DIR}/source/track/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/shortlived/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/leptons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/bosons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/mesons/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/barions/include)
include_directories(${CMAKE_SOURCE_DIR}/source/particles/hadrons/ions/include)
include_directories(${CMAKE_SOURCE_DIR}/source/run/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/builders/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/constructors/factory/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/constructors/hadron_inelastic/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/transportation/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/cuts/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/cross_sections/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/stopping/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/processes/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/coherent_elastic/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/lend/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/particle_hp/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/materials/include)
#
# Define the Geant4 Module.
#
include(Geant4MacroDefineModule)
GEANT4_DEFINE_MODULE(NAME G4phys_ctor_helastic
HEADERS
G4ChargeExchangePhysics.hh
@@ -56,19 +56,18 @@
#include "G4ElasticHadrNucleusHE.hh"
#include "G4AntiNuclElastic.hh"
#include "G4ComponentGGHadronNucleusXsc.hh"
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4ChipsProtonElasticXS.hh"
#include "G4NeutronElasticXS.hh"
#include "G4CrossSectionElastic.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
#include "G4HadParticles.hh"
#include "G4HadProcesses.hh"
#include "G4PhysListUtil.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -103,146 +102,106 @@ void G4HadronElasticPhysics::ConstructParticle()
void G4HadronElasticPhysics::ConstructProcess()
{
G4HadronicParameters* param = G4HadronicParameters::Instance();
G4bool useFactorXS = param->ApplyFactorXS();
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
const G4double elimitAntiNuc = 100.*MeV;
const G4double delta = 0.1*MeV;
G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics::ConstructProcess: "
<< "Elimit for for anti-neuclei " << elimitAntiNuc/GeV << " GeV"
<< "Elimit for for anti-neuclei " << elimitAntiNuc/CLHEP::GeV << " GeV"
<< " for all hadrons Emax(GeV)= " << emax/CLHEP::GeV
<< G4endl;
}
G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
anuc->SetMinEnergy(elimitAntiNuc);
G4CrossSectionElastic* anucxs =
new G4CrossSectionElastic(anuc->GetComponentCrossSection());
G4HadronElastic* lhep0 = new G4HadronElastic();
G4HadronElastic* lhep2 = new G4HadronElastic();
lhep0->SetMaxEnergy(emax);
lhep2->SetMaxEnergy(elimitAntiNuc+delta);
G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE();
he->SetMaxEnergy(emax);
G4VCrossSectionDataSet* theComponentGGHadronNucleusData =
new G4CrossSectionElastic( new G4ComponentGGHadronNucleusXsc );
G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
anuc->SetMinEnergy(elimitAntiNuc);
anuc->SetMaxEnergy(emax);
G4VCrossSectionDataSet* theComponentGGNuclNuclData =
new G4CrossSectionElastic( new G4ComponentGGNuclNuclXsc );
auto anucxs = G4HadProcesses::ElasticXS("AntiAGlauber");
auto xsNN = G4HadProcesses::ElasticXS("Glauber-Gribov Nucl-nucl");
G4HadronElasticProcess* hel = nullptr;
// p
G4ParticleDefinition* particle = G4Proton::Proton();
G4HadronElasticProcess* hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->RegisterMe(new G4ChipsElasticModel());
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
ph->RegisterProcess(hel, particle);
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String pname = particle->GetParticleName();
if(pname == "anti_lambda" ||
pname == "anti_omega-" ||
pname == "anti_sigma-" ||
pname == "anti_sigma0" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "lambda" ||
pname == "omega-" ||
pname == "sigma-" ||
pname == "sigma0" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "xi0"
) {
hel = new G4HadronElasticProcess();
hel->RegisterMe(lhep0);
hel->AddDataSet( theComponentGGHadronNucleusData );
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// n
particle = G4Neutron::Neutron();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
hel->RegisterMe(new G4ChipsElasticModel());
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
ph->RegisterProcess(hel, particle);
} else if(pname == "alpha" ||
pname == "deuteron" ||
pname == "triton" ||
pname == "He3"
) {
hel = new G4HadronElasticProcess();
hel->AddDataSet(theComponentGGNuclNuclData);
hel->RegisterMe(lhep0);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// pi+
particle = G4PionPlus::PionPlus();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
hel->RegisterMe(he);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
ph->RegisterProcess(hel, particle);
} else if(pname == "proton") {
// pi-
particle = G4PionMinus::PionMinus();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
hel->RegisterMe(he);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
ph->RegisterProcess(hel, particle);
// kaons
G4HadronicBuilder::BuildElastic( G4HadParticles::GetKaons() );
// d, t, He3, alpha
for( auto & pdg : G4HadParticles::GetLightIons() ) {
particle = table->FindParticle( pdg );
if ( particle == nullptr ) { continue; }
hel = new G4HadronElasticProcess();
hel->AddDataSet(xsNN);
hel->RegisterMe(lhep0);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
ph->RegisterProcess(hel, particle);
}
// high energy particles
if( emax > param->EnergyThresholdForHeavyHadrons() ) {
// pbar, nbar, anti light ions
for( auto & pdg : G4HadParticles::GetLightAntiIons() ) {
particle = table->FindParticle( pdg );
if ( particle == nullptr ) { continue; }
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->RegisterMe(new G4ChipsElasticModel());
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "neutron") {
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
hel->RegisterMe(new G4ChipsElasticModel());
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if (pname == "pi+" || pname == "pi-") {
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
hel->RegisterMe(he);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L"
) {
hel = new G4HadronElasticProcess();
//AR-14Aug2017 : Replaced Gheisha elastic kaon cross sections with
// Grichine's Glauber-Gribov ones. In this way, the
// total (elastic + inelastic) kaon cross sections
// are consistent with the PDG ones.
// For the time being, kept Gheisha elastic as
// final-state model.
hel->AddDataSet( theComponentGGHadronNucleusData );
hel->RegisterMe(lhep0);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(
pname == "anti_proton" ||
pname == "anti_neutron" ||
pname == "anti_alpha" ||
pname == "anti_deuteron" ||
pname == "anti_triton" ||
pname == "anti_He3" ) {
hel = new G4HadronElasticProcess();
hel->AddDataSet(anucxs);
hel->RegisterMe(lhep2);
hel->RegisterMe(anuc);
pmanager->AddDiscreteProcess(hel);
hel->AddDataSet(anucxs);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
ph->RegisterProcess(hel, particle);
}
// hyperons
G4HadronicBuilder::BuildElastic( G4HadParticles::GetHyperons() );
G4HadronicBuilder::BuildElastic( G4HadParticles::GetAntiHyperons() );
// b-, c- baryons and mesons
if( G4HadronicParameters::Instance()->EnableBCParticles() ) {
G4HadronicBuilder::BuildElastic( G4HadParticles::GetBCHadrons() );
}
}
}
@@ -250,16 +209,7 @@ void G4HadronElasticPhysics::ConstructProcess()
G4HadronicProcess*
G4HadronElasticPhysics::GetElasticProcess(const G4ParticleDefinition* part) const
{
G4HadronicProcess* hp = nullptr;
G4ProcessVector* pv = part->GetProcessManager()->GetPostStepProcessVector();
size_t n = pv->size();
for(size_t i=0; i<n; ++i) {
if((*pv)[i]->GetProcessSubType() == fHadronElastic) {
hp = static_cast<G4HadronicProcess*>((*pv)[i]);
break;
}
}
return hp;
return G4PhysListUtil::FindElasticProcess(part);
}
G4HadronElastic*
@@ -268,8 +218,8 @@ G4HadronElasticPhysics::GetElasticModel(const G4ParticleDefinition* part) const
G4HadronElastic* mod = nullptr;
G4HadronicProcess* hel = GetElasticProcess(part);
if(hel) {
std::vector<G4HadronicInteraction*>& hi = hel->GetHadronicInteractionList();
if(hi.size() > 0) { mod = static_cast<G4HadronElastic*>(hi[0]); }
std::vector<G4HadronicInteraction*>& hi = hel->GetHadronicInteractionList();
if( !hi.empty() ) { mod = static_cast<G4HadronElastic*>(hi[0]); }
}
return mod;
}
@@ -73,6 +73,11 @@
#include "G4DiffElasticRatio.hh"
#include "G4AutoDelete.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
#include "G4HadParticles.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
@@ -302,4 +307,10 @@ void G4HadronHElasticPhysics::ConstructProcess() {
}
}
}
// Charm and bottom hadrons
if ( G4HadronicParameters::Instance()->EnableBCParticles() ) {
G4HadronicBuilder::BuildElastic( G4HadParticles::GetBCHadrons() );
}
}
@@ -45,7 +45,7 @@
#include "G4ParticleHPThermalScatteringData.hh"
#include "G4BuilderType.hh"
#include "G4PhysListUtil.hh"
#include "G4SystemOfUnits.hh"
G4ThermalNeutrons::G4ThermalNeutrons(G4int ver) :
@@ -60,7 +60,7 @@ void G4ThermalNeutrons::ConstructProcess() {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4Neutron* part = G4Neutron::Neutron();
G4HadronicProcess* hpel = FindElasticProcess(part);
G4HadronicProcess* hpel = G4PhysListUtil::FindElasticProcess(part);
if(!hpel) {
G4cout << "### " << GetPhysicsName()
<< " WARNING: Fail to add thermal neutron scattering" << G4endl;