Import Geant4 11.4.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2025-06-26 09:17:29 +02:00
parent 20a218bbe1
commit a499fb82e9
1941 changed files with 203285 additions and 95593 deletions
@@ -4,6 +4,14 @@ 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!
## 2025-06-13 Vladimir Ivanchenko (phys-ctor-hinelastic-V11-03-01)
- G4HadrocPhysicsQBBC - disable General Neutron Process, which address problem reports
#2558 and #2559
## 2024-12-10 Douglas M Wright(phys-ctor-hinelastic-V11-03-00)
- Add G4HadronPhysicsLEND to define neutron and photon induced processes from LEND
- G4HadronPhysicsShielding remove LEND neutron process, now down in class above
## 2024-11-08 Alberto Ribon (phys-ctor-hinelastic-V11-02-02)
- README : updated information for the coming release 11.3.
@@ -0,0 +1,63 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// Description: Create all hadronic (neutron and photon) processes using LEND which is valid up to 20 MeV
//
// Author: Douglas M Wright, LLNL 2022-04-25
//
//----------------------------------------------------------------------------
//
#ifndef G4HadronPhysicsLEND_h
#define G4HadronPhysicsLEND_h 1
#include "G4VPhysicsConstructor.hh"
const G4double maxLEND_Energy = 20*CLHEP::MeV;
const G4double overlapLEND_Energy = 0.1*CLHEP::MeV;
class G4HadronPhysicsLEND : public G4VPhysicsConstructor
{
public:
G4HadronPhysicsLEND(G4int verbose =1, const G4String& eval="");
~G4HadronPhysicsLEND() override = default;
void ConstructProcess() override;
void ConstructParticle() override;
// copy constructor and hide assignment operator
G4HadronPhysicsLEND(G4HadronPhysicsLEND &) = delete;
G4HadronPhysicsLEND & operator =
(const G4HadronPhysicsLEND &right) = delete;
private:
G4String evaluation;
G4int verbose;
};
#endif
@@ -12,6 +12,7 @@ geant4_add_module(G4phys_ctor_hinelastic
G4HadronPhysicsFTFP_BERT_TRV.hh
G4HadronPhysicsFTFQGSP_BERT.hh
G4HadronPhysicsINCLXX.hh
G4HadronPhysicsLEND.hh
G4HadronPhysicsNuBeam.hh
G4HadronPhysicsQGS_BIC.hh
G4HadronPhysicsQGSP_BERT.hh
@@ -34,6 +35,7 @@ geant4_add_module(G4phys_ctor_hinelastic
G4HadronPhysicsFTFP_BERT_TRV.cc
G4HadronPhysicsFTFQGSP_BERT.cc
G4HadronPhysicsINCLXX.cc
G4HadronPhysicsLEND.cc
G4HadronPhysicsNuBeam.cc
G4HadronPhysicsQGS_BIC.cc
G4HadronPhysicsQGSP_BERT.cc
@@ -55,6 +57,10 @@ geant4_module_link_libraries(G4phys_ctor_hinelastic
G4run
PRIVATE
G4baryons
G4had_gamma_nuclear
G4phys_ctor_em
G4emutils
G4had_lend
G4had_fission
G4had_par_hp
G4had_preequ_exciton
@@ -86,7 +86,7 @@ G4HadronInelasticQBBC::G4HadronInelasticQBBC(G4int ver)
SetPhysicsType(bHadronInelastic);
auto param = G4HadronicParameters::Instance();
param->SetEnableBCParticles(true);
param->SetEnableNeutronGeneralProcess(true);
param->SetEnableNeutronGeneralProcess(false);
param->SetVerboseLevel(ver);
}
@@ -0,0 +1,132 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// Description: Create all hadronic (neutron and photon) processes using LEND which is valid up to 20 MeV
//
// Author: Douglas M Wright, LLNL 2022-04-25
//
//----------------------------------------------------------------------------
//
#include "G4HadronPhysicsLEND.hh"
#include "G4PhysListUtil.hh"
#include "G4NeutronBuilder.hh"
#include "G4NeutronLENDBuilder.hh"
#include "G4PhysicsListHelper.hh"
#include "G4LENDorBERTModel.hh"
//#include "G4LENDCombinedModel.hh"
#include "G4LENDCombinedCrossSection.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4GammaNuclearXS.hh"
#include "G4LossTableManager.hh"
#include "G4GammaGeneralProcess.hh"
#include "G4PhysicsConstructorFactory.hh"
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsLEND);
G4HadronPhysicsLEND::G4HadronPhysicsLEND(G4int verb, const G4String& eva)
: G4VPhysicsConstructor("hadron inelastic LEND")
{
verbose = verb;
evaluation = eva;
}
void G4HadronPhysicsLEND::ConstructProcess()
{
//....neutron-induced reactions
//....create neutron processes if they do not exist
if( G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron()) == nullptr ){
auto neutron_processes = new G4NeutronBuilder( true ); // Fission on
AddBuilder(neutron_processes);
neutron_processes->Build();
}
//....get pointers to neutron processes so can add LEND model
auto* neutron_inelastic = (G4HadronInelasticProcess*)G4PhysListUtil::FindInelasticProcess( G4Neutron::Neutron() );
auto* neutron_capture = (G4NeutronCaptureProcess*)G4PhysListUtil::FindCaptureProcess( G4Neutron::Neutron() );
auto* neutron_fission = (G4NeutronFissionProcess*)G4PhysListUtil::FindFissionProcess( G4Neutron::Neutron() );
auto* neutronLENDBuilder = new G4NeutronLENDBuilder(evaluation);
neutronLENDBuilder->Build(neutron_inelastic);
neutronLENDBuilder->Build(neutron_capture);
neutronLENDBuilder->Build(neutron_fission);
//....photon-induced reactions
//....use gamma hadronic process if it exists
// check Inelastic process using G4PhysListUtil
// then check for GammaNuclear in G4GammaGeneralProcess
auto* gamma_inelastic = (G4HadronInelasticProcess*)G4PhysListUtil::FindInelasticProcess( G4Gamma::Gamma() );
if( gamma_inelastic == nullptr){
G4LossTableManager* emManager = G4LossTableManager::Instance();
auto gproc = dynamic_cast<G4GammaGeneralProcess*>(emManager->GetGammaGeneralProcess());
if (gproc != nullptr) {
G4HadronicProcess* gnuc = gproc->GetGammaNuclear();
if (gnuc != nullptr )
gamma_inelastic = (G4HadronInelasticProcess*)gnuc;
}
}
//....did not find existing process, so create photonuclear process
if( gamma_inelastic == nullptr){
//std::cout << "DMW: HadPhysLEND = gamma inelastic pointer not found\n";
gamma_inelastic = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Gamma() );
G4PhysicsListHelper* plHelper = G4PhysicsListHelper::GetPhysicsListHelper();
plHelper->RegisterProcess(gamma_inelastic, G4Gamma::Gamma());
//....need these XS or LENDonly crashes
auto xsreg = G4CrossSectionDataSetRegistry::Instance();
G4VCrossSectionDataSet* xs = nullptr;
xs = xsreg->GetCrossSectionDataSet("GammaNuclearXS");
if(nullptr == xs) xs = new G4GammaNuclearXS();
gamma_inelastic->AddDataSet(xs);
}
//....add LEND photonuclear models
auto* theGammaReactionLowE = new G4LENDorBERTModel( G4Gamma::Gamma() ); // checks if LEND has data for specified reaction
// (note uses G4LENDCombinedModel)
// if not, uses Bertini cascade
//auto* theGammaReactionLowE = new G4LENDCombinedModel( G4Gamma::Gamma() ); // uses LEND only
theGammaReactionLowE->SetMaxEnergy(maxLEND_Energy);
theGammaReactionLowE->DumpLENDTargetInfo(true);
gamma_inelastic->RegisterMe(theGammaReactionLowE);
G4LENDCombinedCrossSection* theGammaCrossSectionLowE = new G4LENDCombinedCrossSection( G4Gamma::Gamma() );
gamma_inelastic->AddDataSet(theGammaCrossSectionLowE);
}
void G4HadronPhysicsLEND::ConstructParticle()
{
G4Neutron::Neutron();
G4Gamma::Gamma();
}
@@ -33,12 +33,13 @@
//
// 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
// FTF transition energy region
//
// 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
// FTF transition energy region
// 2024.11.19 D.M.Wright: Removed LEND inelastic neutron model,
// is now done in G4HadronPhysicsLEND
//----------------------------------------------------------------------------
//
#include <iomanip>
@@ -82,7 +83,7 @@
#include "G4ParticleHPBGGNucleonInelasticXS.hh"
#include "G4ParticleHPJENDLHEInelasticData.hh"
#include "G4ParticleHPInelasticData.hh"
#include "G4NeutronLENDBuilder.hh"
#include "G4HadronPhysicsLEND.hh" // used to access const maxLEND_Energy
#include "G4BGGNucleonInelasticXS.hh"
#include "G4CrossSectionDataSetRegistry.hh"
@@ -119,7 +120,7 @@ G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name)
G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4bool qe)
: G4HadronPhysicsFTFP_BERT(name, qe), useLEND_(false), evaluation_("")
{
minBERT_neutron = 19.9*CLHEP::MeV;
minBERT_neutron = maxLEND_Energy - overlapLEND_Energy;
}
G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4int verb)
@@ -162,11 +163,7 @@ void G4HadronPhysicsShielding::Neutron()
bertneu->SetMaxEnergy(maxBERT_neutron);
bertneu->SetMinEnergy(minBERT_neutron);
neu->RegisterMe(bertneu);
if(useLEND_) {
auto hpneu = new G4NeutronLENDBuilder(evaluation_);
AddBuilder(hpneu);
neu->RegisterMe(hpneu);
} else {
if( ! useLEND_) {
auto hpneu = new G4NeutronPHPBuilder;
AddBuilder(hpneu);
neu->RegisterMe(hpneu);