Import Geant4 11.0.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2021-06-25 16:12:29 +02:00
parent c968e26a39
commit 6399a014b6
4200 changed files with 207479 additions and 237366 deletions
@@ -1,18 +0,0 @@
#------------------------------------------------------------------------------
# CMakeLists.txt
# Module : G4phys_ctor_glnuclear
# Package: Geant4.src.G4physicslists.G4phys_ctors.G4phys_ctor_glnuclear
#
# CMakeLists.txt for building a single granular library.
#
# Generated on : 12-Jan-2013
#
#
#------------------------------------------------------------------------------
if(GEANT4_BUILD_GRANULAR_LIBS)
include(Geant4MacroLibraryTargets)
GEANT4_GRANULAR_LIBRARY_TARGET(COMPONENT sources.cmake)
endif()
@@ -46,8 +46,6 @@ CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/management/include \
-I$(G4BASE)/processes/hadronic/models/util/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
@@ -13,8 +13,34 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
07-December-2020, Vladimir Ivanchenko (phys-ctor-helastic-V10-06-07)
- G4HadronElasticPhysics : fixed type of builder in all hadron
20-May-2021 Vladimir Ivanchenko (phys-ctor-helastic-V10-07-06)
- in all constructors use verbosity level from G4HadronicParameters
16-April-2021 Ben Morgan (phys-ctor-helastic-V10-07-05)
- Migrate build to modular CMake API
13-Apr-2021, Alberto Ribon (phys-ctor-helastic-V10-07-04)
- GNUmakefile, sources.cmake : removed dependency on hadronic/model/util
and hadronic/model/management (that have been now deleted, with their
classes moved to hadronic/util and hadronic/management).
08-Mar-2021, Alberto Ribon (phys-ctor-helastic-V10-07-03)
- G4ChargeExchangePhysics : set explicitly the elastic cross sections
according to the hadron type, given that the universal Gheisha
elastic cross section has been deleted.
15-Feb-2021, Alberto Ribon (phys-ctor-helastic-V10-07-02)
- G4HadronHElasticPhysics : fixed problem of fully overlapping energy
transition between G4HadronElastic and G4ChipsElasticModel, using
now G4ChipsElasticModel only for Hydrogen element above 10 MeV.
11-Dec-2020, Vladimir Ivanchenko (phys-ctor-helastic-V10-07-01)
- G4HadronDElasticPhysics, G4HadronHElasticPhysics : use inheritance
from G4HadronElasticPhysics; use G4HadProcesses, G4PhysListUtil,
and G4HadParticles; implement x-section factor
07-Dec-2020, Vladimir Ivanchenko (phys-ctor-helastic-V10-07-00)
- G4HadronElasticPhysics : fixed type of builder in all hadron
elastic constructors (problem #2183)
G4IonElasticPhysics, G4ThermalNeutrons - added comments
@@ -38,7 +64,7 @@ introduced in the code and keeptrack of all tags.
02-Jul-2020, V. Ivanchenko (phys-ctor-helastic-V10-06-01)
- G4HadronElasticPhysics - use coherently with inelastic physics
builder new utilities: G4HadParticles and G4HadronicBuilder
builder new utilities: G4HadParticles and G4HadronicBuilder
30-Apr-2020 Ben Morgan (phys-ctor-helastic-V10-06-00)
- Remove obsolete GRANULAR_DEPENDENCIES entries
@@ -13,7 +13,7 @@
- charged pions:
- cross section: Barashenkov-Glauber-Gribov
- final-state: Starkov's model (G4ElasticHadrNucleusHE) for all energies
- kaons, hyperons, anti-hyperons
- kaons, hyperons, anti-hyperons, charm and bottom hadrons
- cross section: Glauber-Gribov
- final-state: Gheisha
- deuteron, triton, He3, alpha
@@ -45,16 +45,19 @@
-----------------------
- proton
- cross section: Barashenkov-Glauber-Gribov
- final-state: Diffuse model, except for Hydrogen where Chips is used
- final-state: Diffuse model, except for Hydrogen where Chips is used,
above 10 MeV, and Gheisha below
- neutron:
- cross section: G4NeutronElasticXS
- final-state: Diffuse model, except for Hydrogen where Chips is used
- final-state: Diffuse model, except for Hydrogen where Chips is used,
above 10 MeV, and Gheisha below
- charged pions:
- cross section: Barashenkov-Glauber-Gribov
- final-state: Diffuse model, except for Hydrogen where Chips is used
- kaons, hyperons, anti-hyperons
- final-state: Diffuse model, except for Hydrogen where Chips is used,
above 10 MeV, and Gheisha below
- kaons, hyperons, anti-hyperons, charm and bottom hadrons
- cross section: Glauber-Gribov
- final-state: Chips
- final-state: Gheisha
- deuteron, triton, He3, alpha
- cross section: Glauber-Gribov
- final-state: Gheisha
@@ -84,10 +87,8 @@
- neutron:
- cross section: G4NeutronElasticXS
- final-state: Diffuse model where applicable, else Gheisha
- kaons
- cross section: Glauber-Gribov
- final-state: Diffuse model where applicable, else Gheisha
- hyperons, anti-hyperons, deuteron, triton, He3, alpha
- kaons, hyperons, anti-hyperons, charm and bottom hadrons,
deuteron, triton, He3, alpha
- cross section: Glauber-Gribov
- final-state: Gheisha
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3,
@@ -44,22 +44,13 @@
class G4ChargeExchangePhysics : public G4VPhysicsConstructor
{
public:
explicit G4ChargeExchangePhysics(G4int ver = 0);
explicit G4ChargeExchangePhysics(G4int ver = 1);
virtual ~G4ChargeExchangePhysics();
public:
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
void ConstructParticle() override;
// This method will be invoked in the Construct() method.
// each physics process will be instantiated and
// registered to the process manager of each particle type
void ConstructProcess() override;
private:
G4int verbose;
};
@@ -38,10 +38,9 @@
#ifndef G4HadronDElasticPhysics_h
#define G4HadronDElasticPhysics_h 1
#include "globals.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4HadronElasticPhysics.hh"
class G4HadronDElasticPhysics : public G4VPhysicsConstructor
class G4HadronDElasticPhysics : public G4HadronElasticPhysics
{
public:
@@ -49,25 +48,14 @@ public:
virtual ~G4HadronDElasticPhysics();
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
void ConstructParticle() override;
// This method will be invoked in the Construct() method.
// each physics process will be instantiated and
// registered to the process manager of each particle type
void ConstructProcess() override;
private:
G4HadronDElasticPhysics(G4HadronDElasticPhysics &) = delete;
G4HadronDElasticPhysics & operator=
(const G4HadronDElasticPhysics &right) = delete;
G4int verbose;
};
#endif
@@ -55,8 +55,8 @@ class G4HadronElasticPhysics : public G4VPhysicsConstructor
{
public:
explicit G4HadronElasticPhysics(G4int ver = 0,
const G4String& nam = "hElasticWEL_CHIPS_XS");
explicit G4HadronElasticPhysics(G4int ver = 1,
const G4String& nam = "hElasticWEL_CHIPS_XS");
virtual ~G4HadronElasticPhysics();
@@ -79,14 +79,10 @@ public:
void AddXSection(const G4ParticleDefinition*, G4VCrossSectionDataSet*) const;
private:
// copy constructor and hide assignment operator
G4HadronElasticPhysics(G4HadronElasticPhysics &) = delete;
G4HadronElasticPhysics & operator=(const G4HadronElasticPhysics &right) = delete;
protected:
G4int verbose;
};
#endif
@@ -53,8 +53,6 @@ public:
// registered to the process manager of each particle type
void ConstructProcess() final;
private:
G4HadronElasticPhysicsHP(G4HadronElasticPhysicsHP &) = delete;
G4HadronElasticPhysicsHP & operator=(const G4HadronElasticPhysicsHP &right) = delete;
@@ -54,12 +54,11 @@ public:
// registered to the process manager of each particle type
void ConstructProcess() final;
private:
G4HadronElasticPhysicsLEND(G4HadronElasticPhysicsLEND &) = delete;
G4HadronElasticPhysicsLEND & operator=
(const G4HadronElasticPhysicsLEND &right) = delete;
private:
G4String evaluation;
};
@@ -52,7 +52,6 @@ public:
// registered to the process manager of each particle type
void ConstructProcess() final;
private:
G4HadronElasticPhysicsPHP(const G4HadronElasticPhysicsPHP&) = delete;
G4HadronElasticPhysicsPHP& operator=(const G4HadronElasticPhysicsPHP&) = delete;
};
@@ -53,8 +53,6 @@ public:
// registered to the process manager of each particle type
void ConstructProcess() final;
private:
G4HadronElasticPhysicsXS(G4HadronElasticPhysicsXS &) = delete;
G4HadronElasticPhysicsXS & operator=(const G4HadronElasticPhysicsXS &right) = delete;
};
@@ -38,44 +38,27 @@
#ifndef G4HadronHElasticPhysics_h
#define G4HadronHElasticPhysics_h 1
#include "globals.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4HadronElasticPhysics.hh"
class G4DiffElasticRatio;
class G4HadronHElasticPhysics : public G4VPhysicsConstructor
class G4HadronHElasticPhysics : public G4HadronElasticPhysics
{
public:
G4HadronHElasticPhysics(G4int ver = 0, G4bool diffraction=false);
G4HadronHElasticPhysics(G4int ver = 1, G4bool diffraction = false);
virtual ~G4HadronHElasticPhysics();
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
void ConstructParticle() override;
// This method will be invoked in the Construct() method.
// each physics process will be instantiated and
// registered to the process manager of each particle type
void ConstructProcess() override;
inline void SetDiffraction(G4bool val) {fDiffraction = val;};
private:
inline void SetDiffraction(G4bool val) { fDiffraction = val; };
G4HadronHElasticPhysics(G4HadronHElasticPhysics &) = delete;
G4HadronHElasticPhysics & operator=
(const G4HadronHElasticPhysics &right) = delete;
G4int verbose;
G4bool fDiffraction;
static G4ThreadLocal G4DiffElasticRatio* diffRatio;
};
#endif
@@ -45,7 +45,7 @@ class G4IonElasticPhysics : public G4VPhysicsConstructor
{
public:
explicit G4IonElasticPhysics(G4int ver = 0);
explicit G4IonElasticPhysics(G4int ver = 1);
virtual ~G4IonElasticPhysics();
@@ -58,14 +58,10 @@ public:
// registered to the process manager of each particle type
void ConstructProcess() override;
private:
// copy constructor and hide assignment operator
G4IonElasticPhysics(G4IonElasticPhysics &) = delete;
G4IonElasticPhysics & operator=
(const G4IonElasticPhysics &right) = delete;
G4int verbose;
};
#endif
@@ -50,8 +50,6 @@ public:
void ConstructProcess() override;
private:
G4int verbose;
};
#endif
@@ -1,126 +1,49 @@
#------------------------------------------------------------------------------
# sources.cmake
# Module : G4phys_ctor_helastic
# Package: Geant4.src.G4physicslists.G4physlist_ctors.G4physlist_ctor_helastic
#
# Sources description for a library.
# Lists the sources and headers of the code explicitely.
# Lists include paths needed.
# Lists the internal granular and global dependencies of the library.
# Source specific properties should be added at the end.
#
# Generated on : 10/01/2013
#
#
#------------------------------------------------------------------------------
# - G4phys_ctor_helastic module build definition
#
# Define the Geant4 Module.
#
GEANT4_DEFINE_MODULE(NAME G4phys_ctor_helastic
HEADERS
G4ChargeExchangePhysics.hh
G4HadronDElasticPhysics.hh
G4HadronElasticPhysics.hh
G4HadronElasticPhysicsHP.hh
G4HadronElasticPhysicsLEND.hh
G4HadronElasticPhysicsXS.hh
G4HadronHElasticPhysics.hh
G4IonElasticPhysics.hh
G4HadronElasticPhysicsPHP.hh
G4ThermalNeutrons.hh
SOURCES
G4ChargeExchangePhysics.cc
G4HadronDElasticPhysics.cc
G4HadronElasticPhysics.cc
G4HadronElasticPhysicsHP.cc
G4HadronElasticPhysicsLEND.cc
G4HadronElasticPhysicsXS.cc
G4HadronHElasticPhysics.cc
G4IonElasticPhysics.cc
G4HadronElasticPhysicsPHP.cc
G4ThermalNeutrons.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
G4cuts
G4decay
G4digits
G4emhighenergy
G4emlowenergy
G4emstandard
G4emutils
G4event
G4geometrymng
G4globman
G4had_im_r_matrix
G4had_lend
G4had_mod_man
G4had_mod_util
G4had_lept_nuclear
G4had_preequ_exciton
G4had_string_diff
G4had_string_frag
G4had_string_man
G4had_theo_max
G4hadronic_bert_cascade
G4hadronic_binary
G4hadronic_coherent_elastic
G4hadronic_deex_evaporation
G4hadronic_deex_fermi_breakup
G4hadronic_deex_fission
G4hadronic_deex_gem_evaporation
G4hadronic_deex_handler
G4hadronic_deex_management
G4hadronic_deex_multifragmentation
G4hadronic_deex_photon_evaporation
G4hadronic_deex_util
G4hadronic_inclxx_interface
G4hadronic_inclxx_physics
G4hadronic_inclxx_utils
G4hadronic_mgt
G4hadronic_proc
G4hadronic_qgstring
G4hadronic_radioactivedecay
G4hadronic_stop
G4hadronic_util
G4hadronic_xsect
G4hits
G4intercoms
G4ions
G4leptons
G4magneticfield
G4materials
G4mesons
G4muons
G4navigation
G4optical
G4partman
G4phys_builders
G4phys_ctor_factory
G4phys_ctor_hinelastic
G4procman
G4run
G4shortlived
G4track
G4tracking
G4transportation
G4volumes
G4xrays
GLOBAL_DEPENDENCIES
G4digits_hits
G4event
G4geometry
G4global
G4intercoms
G4materials
G4particles
G4processes
G4run
G4track
G4tracking
LINK_LIBRARIES
geant4_add_module(G4phys_ctor_helastic
PUBLIC_HEADERS
G4ChargeExchangePhysics.hh
G4HadronDElasticPhysics.hh
G4HadronElasticPhysics.hh
G4HadronElasticPhysicsHP.hh
G4HadronElasticPhysicsLEND.hh
G4HadronElasticPhysicsXS.hh
G4HadronHElasticPhysics.hh
G4IonElasticPhysics.hh
G4HadronElasticPhysicsPHP.hh
G4ThermalNeutrons.hh
SOURCES
G4ChargeExchangePhysics.cc
G4HadronDElasticPhysics.cc
G4HadronElasticPhysics.cc
G4HadronElasticPhysicsHP.cc
G4HadronElasticPhysicsLEND.cc
G4HadronElasticPhysicsXS.cc
G4HadronHElasticPhysics.cc
G4IonElasticPhysics.cc
G4HadronElasticPhysicsPHP.cc
G4ThermalNeutrons.cc)
geant4_module_link_libraries(G4phys_ctor_helastic
PUBLIC
G4globman
G4hadronic_coherent_elastic
G4hadronic_mgt
G4phys_ctor_hinelastic
G4run
PRIVATE
G4baryons
G4had_lend
G4had_par_hp
G4hadronic_proc
G4hadronic_util
G4hadronic_xsect
G4ions
G4mesons
G4partman
G4phys_builders
G4phys_ctor_factory
G4physlist_util
G4procman
)
# List any source specific properties here
@@ -47,15 +47,22 @@
#include "G4BaryonConstructor.hh"
#include "G4Neutron.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4NeutronElasticXS.hh"
#include "G4HadronicParameters.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4ChargeExchangePhysics);
G4ChargeExchangePhysics::G4ChargeExchangePhysics(G4int ver)
: G4VPhysicsConstructor("chargeExchange"), verbose(ver)
: G4VPhysicsConstructor("chargeExchange")
{
if(verbose > 1) G4cout << "### ChargeExchangePhysics" << G4endl;
// because it is an addition, the type of this constructor is 0
G4HadronicParameters::Instance()->SetVerboseLevel(ver);
if(ver > 1) G4cout << "### ChargeExchangePhysics" << G4endl;
}
G4ChargeExchangePhysics::~G4ChargeExchangePhysics()
@@ -75,7 +82,7 @@ void G4ChargeExchangePhysics::ConstructProcess()
{
G4ChargeExchange* model = new G4ChargeExchange();
if(verbose > 1) {
if(G4HadronicParameters::Instance()->GetVerboseLevel() > 1) {
G4cout << "### ChargeExchangePhysics Construct Processes with the model <"
<< model->GetModelName() << ">" << G4endl;
}
@@ -85,19 +92,27 @@ void G4ChargeExchangePhysics::ConstructProcess()
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4String pname = particle->GetParticleName();
if(pname == "neutron" ||
pname == "pi-" ||
pname == "pi+" ||
pname == "proton"
if( particle == G4Neutron::Definition() ||
particle == G4PionMinus::Definition() ||
particle == G4PionPlus::Definition() ||
particle == G4Proton::Definition()
) {
G4ProcessManager* pmanager = particle->GetProcessManager();
G4ChargeExchangeProcess* p = new G4ChargeExchangeProcess();
p->RegisterMe(model);
if( particle == G4PionMinus::Definition() || particle == G4PionPlus::Definition() ) {
p->AddDataSet( new G4BGGPionElasticXS( particle ) );
} else if( particle == G4Proton::Definition() ) {
p->AddDataSet( new G4BGGNucleonElasticXS( particle ) );
} else if( particle == G4Neutron::Definition() ) {
p->AddDataSet( new G4NeutronElasticXS );
}
pmanager->AddDiscreteProcess(p);
if(verbose > 1)
if(G4HadronicParameters::Instance()->GetVerboseLevel() > 1)
G4cout << "### ChargeExchangePhysics added for "
<< particle->GetParticleName() << G4endl;
}
@@ -73,22 +73,25 @@
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4ChipsKaonPlusElasticXS.hh"
#include "G4ChipsKaonMinusElasticXS.hh"
#include "G4ChipsKaonZeroElasticXS.hh"
#include "G4CrossSectionElastic.hh"
#include "G4DiffuseElastic.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
#include "G4HadParticles.hh"
#include "G4HadProcesses.hh"
#include "G4PhysListUtil.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronDElasticPhysics);
G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver)
: G4VPhysicsConstructor("hElasticDIFFUSE"), verbose(ver)
: G4HadronElasticPhysics(ver, "hElasticDIFFUSE")
{
if(verbose > 1) {
if(ver > 1) {
G4cout << "### G4HadronDElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
@@ -97,24 +100,18 @@ G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver)
G4HadronDElasticPhysics::~G4HadronDElasticPhysics()
{}
void G4HadronDElasticPhysics::ConstructParticle()
{
// G4cout << "G4HadronDElasticPhysics::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4HadronDElasticPhysics::ConstructProcess()
{
const G4double elimitAntiNuc = 100.1*MeV;
if(verbose > 1) {
G4HadronicParameters* param = G4HadronicParameters::Instance();
G4bool useFactorXS = param->ApplyFactorXS();
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
const G4double eminDElastic = 10.*MeV;
const G4double elimitAntiNuc = 100.*MeV;
const G4double delta = 0.1*MeV;
G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
if(param->GetVerboseLevel() > 1) {
G4cout << "### HadronDElasticPhysics Construct Processes "
<< " for anti-neuclei "
<< elimitAntiNuc/GeV << " GeV" << G4endl;
@@ -122,140 +119,102 @@ void G4HadronDElasticPhysics::ConstructProcess()
G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
anuc->SetMinEnergy(elimitAntiNuc);
G4CrossSectionElastic* anucxs =
new G4CrossSectionElastic(anuc->GetComponentCrossSection());
anuc->SetMaxEnergy(emax);
G4VCrossSectionDataSet* theComponentGGHadronNucleusData =
new G4CrossSectionElastic( new G4ComponentGGHadronNucleusXsc );
G4VCrossSectionDataSet* theComponentGGNuclNuclData =
new G4CrossSectionElastic( new G4ComponentGGNuclNuclXsc );
auto anucxs = G4HadProcesses::ElasticXS("AntiAGlauber");
auto xsNN = G4HadProcesses::ElasticXS("Glauber-Gribov Nucl-nucl");
G4HadronElastic* lhep0 = new G4HadronElastic();
G4HadronElastic* lhep1 = new G4HadronElastic();
lhep1->SetMaxEnergy(10.1*MeV);
lhep1->SetMaxEnergy(eminDElastic + delta);
G4HadronElastic* lhep2 = new G4HadronElastic();
lhep2->SetMaxEnergy(elimitAntiNuc);
G4DiffuseElastic* model = nullptr;
G4HadronElasticProcess* hel = nullptr;
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 << "### HadronDElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// p
G4ParticleDefinition* particle = G4Proton::Proton();
G4HadronElasticProcess* hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
model = new G4DiffuseElastic();
model->SetMinEnergy(eminDElastic);
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
ph->RegisterProcess(hel, particle);
} else if(pname == "proton") {
// n
particle = G4Neutron::Neutron();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
model = new G4DiffuseElastic();
model->SetMinEnergy(eminDElastic);
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
ph->RegisterProcess(hel, particle);
// pi+
particle = G4PionPlus::PionPlus();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
model = new G4DiffuseElastic();
model->SetMinEnergy(eminDElastic);
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
ph->RegisterProcess(hel, particle);
// pi-
particle = G4PionMinus::PionMinus();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
model = new G4DiffuseElastic();
model->SetMinEnergy(eminDElastic);
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
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));
model = new G4DiffuseElastic();
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronDElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "neutron") {
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
model = new G4DiffuseElastic();
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronDElasticPhysics: "
<< hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if (pname == "pi+" || pname == "pi-") {
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
model = new G4DiffuseElastic();
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronDElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L"
) {
hel = new G4HadronElasticProcess();
model = new G4DiffuseElastic();
hel->RegisterMe(lhep1);
hel->RegisterMe(model);
hel->AddDataSet( theComponentGGHadronNucleusData );
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} 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;
}
} else if(
pname == "anti_neutron" ||
pname == "anti_proton" ||
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() );
}
}
if(verbose > 1) {
G4cout << "### HadronDElasticPhysics Construct Processes " << G4endl;
}
}
@@ -77,9 +77,10 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysics);
//
G4HadronElasticPhysics::G4HadronElasticPhysics(G4int ver, const G4String& nam)
: G4VPhysicsConstructor(nam), verbose(ver)
: G4VPhysicsConstructor(nam)
{
if(verbose > 1) {
G4HadronicParameters::Instance()->SetVerboseLevel(ver);
if(ver > 1) {
G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
@@ -112,7 +113,7 @@ void G4HadronElasticPhysics::ConstructProcess()
const G4double elimitAntiNuc = 100.*MeV;
const G4double delta = 0.1*MeV;
G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
if(verbose > 1) {
if(param->GetVerboseLevel() > 1) {
G4cout << "### HadronElasticPhysics::ConstructProcess: "
<< "Elimit for for anti-neuclei " << elimitAntiNuc/CLHEP::GeV << " GeV"
<< " for all hadrons Emax(GeV)= " << emax/CLHEP::GeV
@@ -45,6 +45,7 @@
#include "G4HadronElastic.hh"
#include "G4ParticleHPElastic.hh"
#include "G4ParticleHPElasticData.hh"
#include "G4HadronicParameters.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -54,7 +55,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysicsHP);
G4HadronElasticPhysicsHP::G4HadronElasticPhysicsHP(G4int ver)
: G4HadronElasticPhysics(ver, "hElasticWEL_CHIPS_HP")
{
if(verbose > 1) {
if(ver > 1) {
G4cout << "### G4HadronElasticPhysicsHP: " << GetPhysicsName()
<< G4endl;
}
@@ -76,7 +77,7 @@ void G4HadronElasticPhysicsHP::ConstructProcess()
hel->AddDataSet(new G4ParticleHPElasticData());
}
if(verbose > 1) {
if(G4HadronicParameters::Instance()->GetVerboseLevel() > 1) {
G4cout << "### HadronElasticPhysicsHP is constructed "
<< G4endl;
}
@@ -44,6 +44,7 @@
#include "G4Neutron.hh"
#include "G4HadronicProcess.hh"
#include "G4HadronElastic.hh"
#include "G4HadronicParameters.hh"
#include "G4LENDElastic.hh"
#include "G4LENDElasticCrossSection.hh"
@@ -56,7 +57,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysicsLEND);
G4HadronElasticPhysicsLEND::G4HadronElasticPhysicsLEND(G4int ver, const G4String& eva)
: G4HadronElasticPhysics(ver, "hElasticWEL_CHIPS_LEND"), evaluation(eva)
{
if(verbose > 1) {
if(ver > 1) {
G4cout << "### G4HadronElasticPhysicsLEND: " << GetPhysicsName()
<< G4endl;
}
@@ -89,7 +90,7 @@ void G4HadronElasticPhysicsLEND::ConstructProcess()
hel->AddDataSet( lend_XS );
}
if(verbose > 1) {
if(G4HadronicParameters::Instance()->GetVerboseLevel() > 1) {
G4cout << "### HadronElasticPhysicsLEND is constructed"
<< G4endl;
}
@@ -40,6 +40,7 @@
#include "G4ParticleHPElastic.hh"
#include "G4ParticleHPElasticData.hh"
#include "G4SystemOfUnits.hh"
#include "G4HadronicParameters.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -50,7 +51,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysicsPHP);
G4HadronElasticPhysicsPHP::G4HadronElasticPhysicsPHP(G4int ver)
: G4HadronElasticPhysics(ver, "hElasticPhysics_PHP")
{
if(verbose > 1) {
if(ver > 1) {
G4cout << "### G4HadronElasticPhysicsPHP: " << GetPhysicsName()
<< G4endl;
}
@@ -72,7 +73,7 @@ void G4HadronElasticPhysicsPHP::ConstructProcess()
hel->AddDataSet(new G4ParticleHPElasticData());
}
if(verbose > 1) {
if(G4HadronicParameters::Instance()->GetVerboseLevel() > 1) {
G4cout << "### HadronElasticPhysicsHP is constructed "
<< G4endl;
}
@@ -55,7 +55,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysicsXS);
G4HadronElasticPhysicsXS::G4HadronElasticPhysicsXS(G4int ver)
: G4HadronElasticPhysics(ver, "hElasticWEL_CHIPS_XS")
{
if(verbose > 1) {
if(ver > 1) {
G4cout << "### G4HadronElasticPhysicsHP: " << GetPhysicsName()
<< G4endl;
}
@@ -63,33 +63,29 @@
#include "G4ChipsKaonMinusElasticXS.hh"
#include "G4ChipsKaonPlusElasticXS.hh"
#include "G4ChipsKaonZeroElasticXS.hh"
#include "G4ChipsHyperonElasticXS.hh"
#include "G4ChipsAntiBaryonElasticXS.hh"
#include "G4ComponentGGHadronNucleusXsc.hh"
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4LMsdGenerator.hh"
#include "G4DiffElasticRatio.hh"
#include "G4AutoDelete.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
#include "G4HadParticles.hh"
#include "G4HadProcesses.hh"
#include "G4PhysListUtil.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronHElasticPhysics );
G4ThreadLocal G4DiffElasticRatio* G4HadronHElasticPhysics::diffRatio = nullptr;
G4HadronHElasticPhysics::G4HadronHElasticPhysics( G4int ver, G4bool diffraction)
: G4VPhysicsConstructor( "hElastic_BEST" ), verbose( ver ),
G4HadronHElasticPhysics::G4HadronHElasticPhysics(G4int ver, G4bool diffraction)
: G4HadronElasticPhysics(ver, "hElastic_BEST"),
fDiffraction(diffraction)
{
if ( verbose > 1 ) {
if (ver > 1) {
G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName()
<< " low-mass diffraction: " << fDiffraction << G4endl;
}
@@ -97,220 +93,142 @@ G4HadronHElasticPhysics::G4HadronHElasticPhysics( G4int ver, G4bool diffraction)
G4HadronHElasticPhysics::~G4HadronHElasticPhysics() {}
void G4HadronHElasticPhysics::ConstructParticle() {
// G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4HadronHElasticPhysics::ConstructProcess() {
G4HadronicParameters* param = G4HadronicParameters::Instance();
G4bool useFactorXS = param->ApplyFactorXS();
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
const G4double elimitDiffuse = 0.0;
const G4double elimitDiffuse = 10.0;
const G4double elimitAntiNuc = 100.0*MeV;
const G4double delta = 0.1*MeV;
if ( verbose > 1 ) {
G4double emax = std::max(param->GetMaxEnergy(), elimitAntiNuc+delta);
if (param->GetVerboseLevel() > 1 ) {
G4cout << "### HadronHElasticPhysics::ConstructProcess: lower energy limit for DiffuseElastic : "
<< elimitDiffuse/GeV << " GeV" << G4endl
<< " transition energy for anti-nuclei : "
<< elimitAntiNuc/GeV << " GeV" << G4endl;
}
G4HadronElastic* lhep0 = new G4HadronElastic();
G4HadronElastic* lhep1 = new G4HadronElastic();
G4HadronElastic* lhep2 = new G4HadronElastic();
lhep0->SetMaxEnergy(emax);
lhep1->SetMaxEnergy(elimitDiffuse+delta);
lhep2->SetMaxEnergy(elimitAntiNuc+delta);
G4AntiNuclElastic* anuc = new G4AntiNuclElastic();
anuc->SetMinEnergy( elimitAntiNuc );
G4CrossSectionElastic* anucxs =
new G4CrossSectionElastic( anuc->GetComponentCrossSection() );
anuc->SetMaxEnergy(emax);
G4HadronElastic* lhep = new G4HadronElastic();
lhep->SetMaxEnergy( elimitAntiNuc + delta );
auto anucxs = G4HadProcesses::ElasticXS("AntiAGlauber");
auto xsNN = G4HadProcesses::ElasticXS("Glauber-Gribov Nucl-nucl");
G4HadronElastic* lhep0 = new G4HadronElastic();
G4LMsdGenerator* diffGen = nullptr;
G4DiffElasticRatio* diffRatio = nullptr;
if( fDiffraction ) {
diffGen = new G4LMsdGenerator("LMsdDiffraction");
diffRatio = new G4DiffElasticRatio();
}
// Three instances of Chips elastic model: one used everywhere,
// one used below a energy threshold, and one used only for the
// hydrogen element.
G4ChipsElasticModel* chips1 = new G4ChipsElasticModel();
G4ChipsElasticModel* chips2 = new G4ChipsElasticModel();
chips2->SetMaxEnergy( elimitAntiNuc + delta );
// Use Chips elastic model only for the hydrogen element and above an energy threshold
G4ChipsElasticModel* chipsH = new G4ChipsElasticModel();
chipsH->SetMinEnergy( elimitDiffuse );
const G4ElementTable* theElementTable = G4Element::GetElementTable();
for ( size_t i_ele = 0; i_ele < theElementTable->size(); i_ele++ ) {
G4Element* element = (*theElementTable)[ i_ele ];
if ( element->GetZ() > 1.0 ) chipsH->DeActivateFor( element );
}
G4NuclNuclDiffuseElastic* diffuseNuclNuclElastic = new G4NuclNuclDiffuseElastic();
diffuseNuclNuclElastic->SetMinEnergy( elimitDiffuse );
// p
G4ParticleDefinition* particle = G4Proton::Proton();
G4HadronElasticProcess* hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
G4DiffuseElastic* protonDiffuseElastic = new G4DiffuseElastic();
protonDiffuseElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( protonDiffuseElastic );
hel->RegisterMe( lhep1 );
if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
ph->RegisterProcess(hel, particle);
G4VCrossSectionDataSet* theComponentGGHadronNucleusData =
new G4CrossSectionElastic( new G4ComponentGGHadronNucleusXsc );
// n
particle = G4Neutron::Neutron();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
G4DiffuseElastic* neutronDiffuseElastic = new G4DiffuseElastic();
neutronDiffuseElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( neutronDiffuseElastic );
hel->RegisterMe( lhep1 );
if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorNucleonElastic() );
ph->RegisterProcess(hel, particle);
G4VCrossSectionDataSet* theComponentGGNuclNuclData =
new G4CrossSectionElastic( new G4ComponentGGNuclNuclXsc() );
// pi+
particle = G4PionPlus::PionPlus();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
G4DiffuseElastic* dElastic = new G4DiffuseElastic();
dElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( dElastic );
hel->RegisterMe( lhep1 );
if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorPionElastic() );
ph->RegisterProcess(hel, particle);
G4LMsdGenerator* diffGen = nullptr;
if(fDiffraction) {
diffGen = new G4LMsdGenerator("LMsdDiffraction");
diffRatio = new G4DiffElasticRatio();
G4AutoDelete::Register(diffRatio);
// pi-
particle = G4PionMinus::PionMinus();
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4BGGPionElasticXS(particle));
dElastic = new G4DiffuseElastic();
dElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( dElastic );
hel->RegisterMe( lhep1 );
if( fDiffraction) hel->SetDiffraction(diffGen, diffRatio);
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);
}
G4HadronElasticProcess* hel = nullptr;
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() ) {
// high energy particles
if( emax > param->EnergyThresholdForHeavyHadrons() ) {
G4ParticleDefinition* particle = myParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String pname = particle->GetParticleName();
// pbar, nbar, anti light ions
for( auto & pdg : G4HadParticles::GetLightAntiIons() ) {
particle = table->FindParticle( pdg );
if ( particle == nullptr ) { continue; }
if ( pname == "anti_lambda" ||
pname == "anti_sigma-" ||
pname == "anti_sigma0" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "anti_omega-" ||
pname == "lambda" ||
pname == "sigma-" ||
pname == "sigma0" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "xi0" ||
pname == "omega-"
) {
hel = new G4HadronElasticProcess();
hel->AddDataSet( theComponentGGHadronNucleusData );
hel->RegisterMe( chips1 );
pmanager->AddDiscreteProcess( hel );
if ( verbose > 1 ) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
hel->RegisterMe(lhep2);
hel->RegisterMe(anuc);
hel->AddDataSet(anucxs);
if( useFactorXS ) hel->MultiplyCrossSectionBy( param->XSFactorHadronElastic() );
ph->RegisterProcess(hel, particle);
}
} else if ( pname == "proton" ) {
hel = new G4HadronElasticProcess();
hel->AddDataSet( new G4BGGNucleonElasticXS( particle ) );
// To preserve reproducibility, a different instance of
// G4DiffuseElastic must be used for each particle type.
G4DiffuseElastic* protonDiffuseElastic = new G4DiffuseElastic();
protonDiffuseElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( protonDiffuseElastic );
pmanager->AddDiscreteProcess( hel );
if(fDiffraction) { hel->SetDiffraction(diffGen, diffRatio); }
if ( verbose > 1 ) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// hyperons
G4HadronicBuilder::BuildElastic( G4HadParticles::GetHyperons() );
G4HadronicBuilder::BuildElastic( G4HadParticles::GetAntiHyperons() );
} else if ( pname == "neutron" ) {
hel = new G4HadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS() );
// To preserve reproducibility, a different instance of
// G4DiffuseElastic must be used for each particle type.
G4DiffuseElastic* neutronDiffuseElastic = new G4DiffuseElastic();
neutronDiffuseElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( neutronDiffuseElastic );
pmanager->AddDiscreteProcess( hel );
if(fDiffraction) { hel->SetDiffraction(diffGen, diffRatio); }
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 ) );
// To preserve reproducibility, a different instance of
// G4DiffuseElastic must be used for each particle type.
G4DiffuseElastic* dElastic = new G4DiffuseElastic();
dElastic->SetMinEnergy( elimitDiffuse );
hel->RegisterMe( chipsH ); // Use Chips only for Hydrogen element
hel->RegisterMe( dElastic );
pmanager->AddDiscreteProcess( hel );
if(fDiffraction) { hel->SetDiffraction(diffGen, diffRatio); }
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 Chips 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 Chips elastic as
// final-state model.
hel->AddDataSet( theComponentGGHadronNucleusData );
hel->RegisterMe( chips1 );
pmanager->AddDiscreteProcess( hel );
if(fDiffraction) { hel->SetDiffraction(diffGen, diffRatio); }
if ( verbose > 1 ) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} 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;
}
} else if ( pname == "anti_proton" || pname == "anti_neutron" ) {
hel = new G4HadronElasticProcess();
hel->AddDataSet( anucxs );
hel->RegisterMe( chips2 );
hel->RegisterMe( anuc );
pmanager->AddDiscreteProcess( hel );
if ( verbose > 1 ) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if ( pname == "anti_deuteron" ||
pname == "anti_triton" ||
pname == "anti_He3" ||
pname == "anti_alpha"
) {
hel = new G4HadronElasticProcess();
hel->AddDataSet( anucxs );
hel->RegisterMe( lhep );
hel->RegisterMe( anuc );
pmanager->AddDiscreteProcess( hel );
if ( verbose > 1 ) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// b-, c- baryons and mesons
if( G4HadronicParameters::Instance()->EnableBCParticles() ) {
G4HadronicBuilder::BuildElastic( G4HadParticles::GetBCHadrons() );
}
}
// Charm and bottom hadrons
if ( G4HadronicParameters::Instance()->EnableBCParticles() ) {
G4HadronicBuilder::BuildElastic( G4HadParticles::GetBCHadrons() );
}
}
@@ -46,6 +46,7 @@
#include "G4NuclNuclDiffuseElastic.hh"
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4CrossSectionElastic.hh"
#include "G4HadronicParameters.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -54,9 +55,11 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4IonElasticPhysics);
//
G4IonElasticPhysics::G4IonElasticPhysics(G4int ver)
: G4VPhysicsConstructor("IonElasticPhysics"), verbose(ver)
: G4VPhysicsConstructor("IonElasticPhysics")
{
if(verbose > 1) {
// because it is an addition, the type of this constructor is 0
G4HadronicParameters::Instance()->SetVerboseLevel(ver);
if(ver > 1) {
G4cout << "### G4IonElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
@@ -89,8 +92,9 @@ void G4IonElasticPhysics::ConstructProcess()
G4ProcessManager* ionManager = G4GenericIon::GenericIon()->GetProcessManager();
ionManager->AddDiscreteProcess( ionElasticProcess );
if ( verbose > 1 ) {
if (G4HadronicParameters::Instance()->GetVerboseLevel() > 1 ) {
G4cout << "### IonElasticPhysics: " << ionElasticProcess->GetProcessName()
<< " added for " << G4GenericIon::GenericIon()->GetParticleName() << G4endl;
<< " added for " << G4GenericIon::GenericIon()->GetParticleName()
<< G4endl;
}
}
@@ -43,25 +43,27 @@
#include "G4ParticleHPThermalScattering.hh"
#include "G4ParticleHPThermalScatteringData.hh"
#include "G4HadronicParameters.hh"
#include "G4BuilderType.hh"
#include "G4PhysListUtil.hh"
#include "G4SystemOfUnits.hh"
G4ThermalNeutrons::G4ThermalNeutrons(G4int ver) :
G4VHadronPhysics("G4ThermalNeutrons"), verbose(ver) {
G4VHadronPhysics("ThermalNeutrons", ver) {
// because it is an addition, the type of this constructor is 0
}
G4ThermalNeutrons::~G4ThermalNeutrons() {}
void G4ThermalNeutrons::ConstructProcess() {
if(verbose > 0) {
if(G4HadronicParameters::Instance()->GetVerboseLevel() > 1) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4Neutron* part = G4Neutron::Neutron();
G4HadronicProcess* hpel = G4PhysListUtil::FindElasticProcess(part);
if(!hpel) {
if(nullptr == hpel) {
G4cout << "### " << GetPhysicsName()
<< " WARNING: Fail to add thermal neutron scattering" << G4endl;
return;