Import Geant4 10.7.2 source tree

This commit is contained in:
Gabriele Cosmo
2021-06-14 10:01:31 +02:00
parent 3dfcdb544e
commit c968e26a39
271 changed files with 26365 additions and 21942 deletions
@@ -37,6 +37,7 @@
// interactions with the wrapper hadronic model around CRMC.
//
// Modified:
// - 21-May-2021 Alberto Ribon : Used the latest Geant4-CRMC interface.
//
//----------------------------------------------------------------------------
//
@@ -46,26 +47,26 @@
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "G4VKaonBuilder.hh"
#include "G4CRMCModel.hh"
class HadronicInelasticModelCRMC;
class CRMCKaonBuilder : public G4VKaonBuilder {
public:
CRMCKaonBuilder();
CRMCKaonBuilder( const G4int crmcModelId, const std::string & crmcModelName );
virtual ~CRMCKaonBuilder();
virtual void Build( G4HadronElasticProcess* aP ) final override;
virtual void Build( G4KaonPlusInelasticProcess* aP ) final override;
virtual void Build( G4KaonMinusInelasticProcess* aP ) final override;
virtual void Build( G4KaonZeroLInelasticProcess* aP ) final override;
virtual void Build( G4KaonZeroSInelasticProcess* aP ) final override;
virtual void Build( G4KaonZeroSInelasticProcess* aP ) final override;
inline void SetMinEnergy( G4double aM ) final override { fMin = aM; }
inline void SetMaxEnergy( G4double aM ) final override { fMax = aM; }
using G4VKaonBuilder::Build; // Prevent compiler warning
private:
G4CRMCModel* fModel;
HadronicInelasticModelCRMC* fModel;
G4double fMin;
G4double fMax;
};
#endif
@@ -33,11 +33,12 @@
//
// Author: 2018 Alberto Ribon
//
// Physics builder to treat the final state of inelastic proton-nuclear
// Physics builder to treat the final state of inelastic neutron-nuclear
// interactions with the wrapper hadronic model around CRMC.
// For fission and capture the usual Geant4 models are used.
//
// Modified:
// - 21-May-2021 Alberto Ribon : Used the latest Geant4-CRMC interface.
//
//----------------------------------------------------------------------------
//
@@ -47,29 +48,29 @@
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "G4VNeutronBuilder.hh"
#include "G4CRMCModel.hh"
#include "G4NeutronRadCapture.hh"
#include "G4LFission.hh"
class HadronicInelasticModelCRMC;
class CRMCNeutronBuilder : public G4VNeutronBuilder {
public:
CRMCNeutronBuilder();
CRMCNeutronBuilder( const G4int crmcModelId, const std::string & crmcModelName );
virtual ~CRMCNeutronBuilder();
virtual void Build( G4HadronElasticProcess* aP ) final override;
virtual void Build( G4HadronFissionProcess* aP ) final override;
virtual void Build( G4HadronCaptureProcess* aP ) final override;
virtual void Build( G4NeutronInelasticProcess* aP ) final override;
virtual void Build( G4NeutronInelasticProcess* aP ) final override;
inline void SetMinEnergy( G4double aM ) final override { fMin = aM; }
inline void SetMaxEnergy( G4double aM ) final override { fMax = aM; }
using G4VNeutronBuilder::Build; // Prevent compiler warning
private:
G4double fMin;
G4double fMax;
G4CRMCModel* fModel;
G4NeutronRadCapture* captureModel;
G4LFission* fissionModel;
HadronicInelasticModelCRMC* fModel;
G4NeutronRadCapture* fCaptureModel;
G4LFission* fFissionModel;
};
#endif
@@ -33,10 +33,11 @@
//
// Author: 2018 Alberto Ribon
//
// Physics builder to treat the final state of inelastic kaon- and
// pion-nuclear interactions with the wrapper hadronic model around CRMC.
// Physics builder to treat the final state of inelastic pion- and kaon-
// nuclear interactions with the wrapper hadronic model around CRMC.
//
// Modified:
// - 21-May-2021 Alberto Ribon : Used the latest Geant4-CRMC interface.
//
//----------------------------------------------------------------------------
//
@@ -46,12 +47,13 @@
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "G4VPiKBuilder.hh"
#include "G4CRMCModel.hh"
class HadronicInelasticModelCRMC;
class CRMCPiKBuilder : public G4VPiKBuilder {
public:
CRMCPiKBuilder();
CRMCPiKBuilder( const G4int crmcModelId, const std::string & crmcModelName );
virtual ~CRMCPiKBuilder();
virtual void Build( G4HadronElasticProcess* aP ) final override;
virtual void Build( G4PionPlusInelasticProcess* aP ) final override;
@@ -59,15 +61,14 @@ class CRMCPiKBuilder : public G4VPiKBuilder {
virtual void Build( G4KaonPlusInelasticProcess* aP ) final override;
virtual void Build( G4KaonMinusInelasticProcess* aP ) final override;
virtual void Build( G4KaonZeroLInelasticProcess* aP ) final override;
virtual void Build( G4KaonZeroSInelasticProcess* aP ) final override;
virtual void Build( G4KaonZeroSInelasticProcess* aP ) final override;
inline void SetMinEnergy( G4double aM ) final override { fMin = aM; }
inline void SetMaxEnergy( G4double aM ) final override { fMax = aM; }
using G4VPiKBuilder::Build; // Prevent compiler warning
private:
G4CRMCModel* fModel;
HadronicInelasticModelCRMC* fModel;
G4double fMin;
G4double fMax;
};
#endif
@@ -37,6 +37,7 @@
// interactions with the wrapper hadronic model around CRMC.
//
// Modified:
// - 21-May-2021 Alberto Ribon : Used the latest Geant4-CRMC interface.
//
//----------------------------------------------------------------------------
//
@@ -46,12 +47,13 @@
#include "globals.hh"
#include "G4SystemOfUnits.hh"
#include "G4VPionBuilder.hh"
#include "G4CRMCModel.hh"
class HadronicInelasticModelCRMC;
class CRMCPionBuilder : public G4VPionBuilder {
public:
CRMCPionBuilder();
CRMCPionBuilder( const G4int crmcModelId, const std::string & crmcModelName );
virtual ~CRMCPionBuilder();
virtual void Build( G4HadronElasticProcess* aP ) final override;
virtual void Build( G4PionPlusInelasticProcess* aP ) final override;
@@ -60,10 +62,9 @@ class CRMCPionBuilder : public G4VPionBuilder {
inline void SetMaxEnergy( G4double aM ) final override { fMax = aM; }
using G4VPionBuilder::Build; // Prevent compiler warning
private:
G4CRMCModel* fModel;
HadronicInelasticModelCRMC* fModel;
G4double fMin;
G4double fMax;
};
#endif
@@ -37,6 +37,7 @@
// interactions with the wrapper hadronic model around CRMC.
//
// Modified:
// - 21-May-2021 Alberto Ribon : Used the latest Geant4-CRMC interface.
//
//----------------------------------------------------------------------------
//
@@ -45,12 +46,13 @@
#include "globals.hh"
#include "G4VProtonBuilder.hh"
#include "G4CRMCModel.hh"
class HadronicInelasticModelCRMC;
class CRMCProtonBuilder : public G4VProtonBuilder {
public:
CRMCProtonBuilder();
CRMCProtonBuilder( const G4int crmcModelId, const std::string & crmcModelName );
virtual ~CRMCProtonBuilder();
virtual void Build( G4HadronElasticProcess* aP ) final override;
virtual void Build( G4ProtonInelasticProcess* aP ) final override;
@@ -58,10 +60,9 @@ class CRMCProtonBuilder : public G4VProtonBuilder {
inline void SetMaxEnergy( G4double aM ) final override { fMax = aM; }
using G4VProtonBuilder::Build; // Prevent compiler warning
private:
G4CRMCModel* fModel;
HadronicInelasticModelCRMC* fModel;
G4double fMin;
G4double fMax;
};
#endif
@@ -40,51 +40,28 @@
// For the remaining inelastic interactions (i.e. hyperon- , antihyperon- ,
// antinucleon- and light anti-ion-nuclear interactions, as well as
// for all elastic final-state interactions, and for all elastic and
// inelastic hadronic cross sections, the usual Geant4 approach, as in
// inelastic hadronic cross sections), the usual Geant4 approach, as in
// FTFP_BERT is used.
//
// Modified:
// - 18-May-2021 Alberto Ribon : Migrated to non-templated physics list.
//
//----------------------------------------------------------------------------
//
#ifndef TCRMC_FTFP_BERT_h
#define TCRMC_FTFP_BERT_h 1
#ifndef CRMC_FTFP_BERT_h
#define CRMC_FTFP_BERT_h 1
#include "G4VModularPhysicsList.hh"
#include "globals.hh"
#include "CompileTimeConstraints.hh"
#include "G4VModularPhysicsList.hh"
template<class T>
class TCRMC_FTFP_BERT: public T {
class CRMC_FTFP_BERT : public G4VModularPhysicsList {
public:
TCRMC_FTFP_BERT( G4int ver = 1 );
virtual ~TCRMC_FTFP_BERT();
virtual void SetCuts();
private:
enum { ok = CompileTimeConstraints::IsA< T, G4VModularPhysicsList >::ok };
CRMC_FTFP_BERT( G4int ver = 1 );
virtual ~CRMC_FTFP_BERT() = default;
CRMC_FTFP_BERT( const CRMC_FTFP_BERT & ) = delete;
CRMC_FTFP_BERT & operator=( const CRMC_FTFP_BERT & ) = delete;
};
#ifdef G4_USE_CRMC
#include "CRMC_FTFP_BERT.icc"
#else
template<class T>
TCRMC_FTFP_BERT<T>::TCRMC_FTFP_BERT( G4int ) : T() {
G4ExceptionDescription de;
de << "Support for CRMC_FTFP_BERT not enabled" << G4endl;
G4Exception( __FILE__, "CRMC_FTFP_BERT-01", FatalException, de,
"Code should be compiled with G4_USE_CRMC environment variable set.");
}
template<class T>
TCRMC_FTFP_BERT<T>::~TCRMC_FTFP_BERT() { }
template<class T>
void TCRMC_FTFP_BERT<T>::SetCuts() {}
#endif
typedef TCRMC_FTFP_BERT< G4VModularPhysicsList > CRMC_FTFP_BERT;
#endif //TCRMC_FTFP_BERT_h
@@ -1,79 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
/// \file hadronic/Hadr02/include/CRMC_FTFP_BERT.icc
/// \brief Implementation of the CRMC_FTFP_BERT class inline functions
//
//
//---------------------------------------------------------------------------
//
// ClassName: CRMC_FTFP_BERT
//
// Author: 2018 Alberto Ribon
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "globals.hh"
#include "G4ios.hh"
#include <iomanip>
#include "G4EmStandardPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "G4DecayPhysics.hh"
#include "G4HadronElasticPhysics.hh"
#include "HadronPhysicsCRMC_FTFP_BERT.hh"
#include "G4StoppingPhysics.hh"
#include "IonCRMCPhysics.hh"
#include "G4NeutronTrackingCut.hh"
#include "G4SystemOfUnits.hh"
template<class T> TCRMC_FTFP_BERT<T>::TCRMC_FTFP_BERT( G4int ver ): T() {
G4cout << "<<< Geant4 Physics List simulation engine: CRMC_FTFP_BERT 0.1" << G4endl;
G4cout << G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel( ver );
this->RegisterPhysics( new G4EmStandardPhysics( ver ) ); // EM physics
this->RegisterPhysics( new G4EmExtraPhysics( ver ) ); // Synchroton & GN physics
this->RegisterPhysics( new G4DecayPhysics( ver ) ); // Decays
this->RegisterPhysics( new G4HadronElasticPhysics( ver ) ); // Hadron Elastic scattering
this->RegisterPhysics( new HadronPhysicsCRMC_FTFP_BERT( ver ) ); // Hadron Inelastic scattering
this->RegisterPhysics( new G4StoppingPhysics( ver ) ); // Stopping physics
this->RegisterPhysics( new IonCRMCPhysics( ver ) ); // Ion physics
this->RegisterPhysics( new G4NeutronTrackingCut( ver ) ); // Neutron tracking cut
}
template<class T> TCRMC_FTFP_BERT<T>::~TCRMC_FTFP_BERT() {}
template<class T> void TCRMC_FTFP_BERT<T>::SetCuts() {
if ( this->verboseLevel > 1 ) {
G4cout << "CRMC_FTFP_BERT::SetCuts:";
}
this->SetCutsWithDefault();
}
@@ -1,115 +0,0 @@
//
// ********************************************************************
// * 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. *
// * *
// * Parts of this code which have been developed by Abdel-Waged *
// * et al under contract (31-465) to the King Abdul-Aziz City for *
// * Science and Technology (KACST), the National Centre of *
// * Mathematics and Physics (NCMP), Saudi Arabia. *
// * *
// * 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. *
// ********************************************************************
//
/// \file hadronic/Hadr02/include/G4CRMCModel.hh
/// \brief Definition of the G4CRMCModel class
//
//---------------------------------------------------------------------------
//
// ClassName: G4CRMCModel
//
// Author: 2018 Alberto Ribon
//
// Geant4 wrapper hadronic model around CRMC.
// By changing a single number (model) it is possible to use one of the
// following 4 CRMC generators: 0 : EPOS LHC
// 1 : EPOS 1.99
// 6 : SIBYLL 2.3c
// 12 : DPMJET 3
//
// We are pleased to acknowledge the contribution of Andrii Tykhonov
// (Universite' de Geneve, and member of the DAMPE Collaboration)
// who made the first prototype interface between Geant4 and CRMC,
// and shared his expertise and implementation with us.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#ifndef G4CRMCModel_hh
#define G4CRMCModel_hh
#include "G4Nucleus.hh"
#include "G4HadronicInteraction.hh"
#include "G4HadFinalState.hh"
#include <fstream>
#include <string>
class G4IonTable;
#ifdef G4_USE_CRMC
#include "CRMCinterface.h"
extern CRMCdata gCRMC_data;
#else
class CRMCinterface;
#endif
class G4CRMCModel : public G4HadronicInteraction {
public:
// ***LOOKHERE*** Select default model:
// EPOS LHC (0), EPOS 1.99 (1), SIBYLL 2.3c (6), DPMJET 3 (12)
G4CRMCModel( const G4int model = 0 );
virtual ~G4CRMCModel ();
G4HadFinalState* ApplyYourself( const G4HadProjectile &theProjectile, G4Nucleus &theNucleus );
G4ParticleDefinition* GetParticleDefinition( long particle_id );
// The following virtual method can be used to override the default check levels
// (relative energy violation value of 2% and absolute energy violation value of 1 GeV)
// used to check (by the hadronic process, in the method G4HadronicProcess::CheckResult)
// whether the (inelastic) final state is acceptable or not in terms of energy
// conservation. If it is not, then the final-state is rejected, a "JustWarning"
// exception is thrown, and another attempt is done to find an acceptable final-state.
// Only in the case of 100 consecutive failed attempts, the program crashes.
// In the case of EPOS-LHC, there are some cases of final-states that are rejected
// because they do not pass the default energy conservation. The number of these
// cases is relatively low and harmless (because these final-states are rejected),
// therefore we suggest to keep using the default. If you want instead to keep
// more final-states, i.e. be more tolerant on the energy violations, then uncomment
// the following line and its implementation (in the source file).
//virtual const std::pair< G4double, G4double > GetFatalEnergyCheckLevels() const;
private:
G4bool operator==( G4CRMCModel& right );
G4bool operator!=( G4CRMCModel& right );
void WelcomeMessage () const;
G4int CurrentEvent;
G4int verbose;
G4int fModel;
G4HadFinalState fFinalState;
CRMCinterface* fInterface;
G4ParticleTable* fParticleTable;
G4IonTable* fIonTable;
};
#endif
@@ -35,50 +35,24 @@
// created from FTFP_BERT
//
// Modified:
// - 18-May-2021 Alberto Ribon : Migrated to non-templated physics list.
//
//----------------------------------------------------------------------------
//
#ifndef THIJING_h
#define THIJING_h 1
#ifndef HIJING_h
#define HIJING_h 1
#include "G4VModularPhysicsList.hh"
#include "globals.hh"
#include "CompileTimeConstraints.hh"
template<class T>
class THIJING: public T
{
public:
THIJING(G4int ver = 1);
virtual ~THIJING();
public:
// SetCuts()
virtual void SetCuts();
private:
enum {ok = CompileTimeConstraints::IsA<T, G4VModularPhysicsList>::ok };
class HIJING : public G4VModularPhysicsList {
public:
HIJING( G4int ver = 1 );
virtual ~HIJING() = default;
HIJING( const HIJING & ) = delete;
HIJING & operator=( const HIJING & ) = delete;
};
#ifdef G4_USE_HIJING
#include "HIJING.icc"
#else
template<class T>
THIJING<T>::THIJING(G4int) : T()
{
G4ExceptionDescription de;
de<<"Support for HIJING not enabled"<<G4endl;
G4Exception(__FILE__,"HIJING-01",FatalException,de,
"Code should be compiled with G4_USE_HIJING environment variable set.");
}
template<class T>
THIJING<T>::~THIJING() { }
template<class T>
void THIJING<T>::SetCuts() { }
#endif
typedef THIJING<G4VModularPhysicsList> HIJING;
#endif //THIJING_h
@@ -1,112 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
/// \file hadronic/Hadr02/include/HIJING.icc
/// \brief Implementation of the HIJING class inline functions
//
//
//---------------------------------------------------------------------------
//
// ClassName:
//
// Author: 2012 Andrea Dotti
//
// created from FTFP_BERT
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "globals.hh"
//#include "G4ProcessManager.hh"
//#include "G4ProcessVector.hh"
//#include "G4ParticleTypes.hh"
//#include "G4ParticleTable.hh"
//#include "G4Material.hh"
//#include "G4MaterialTable.hh"
#include "G4ios.hh"
#include <iomanip>
#include "G4DecayPhysics.hh"
#include "G4EmStandardPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "IonHIJINGPhysics.hh"
#include "G4HadronElasticPhysics.hh"
#include "G4NeutronTrackingCut.hh"
#include "G4StoppingPhysics.hh"
#include "HadronPhysicsHIJING.hh"
template<class T> THIJING<T>::THIJING(G4int ver): T()
{
// default cut value (1.0mm)
// defaultCutValue = 1.0*mm;
G4cout << "<<< Geant4 Physics List simulation engine: HIJING 0.1"<<G4endl;
G4cout <<G4endl;
this->defaultCutValue = 0.7*mm;
this->SetVerboseLevel(ver);
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics(ver));
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
this->RegisterPhysics( new G4DecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronElasticPhysics(ver) );
// Hadron Physics
this->RegisterPhysics( new HadronPhysicsHIJING(ver));
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new IonHIJINGPhysics(ver));
// Neutron tracking cut
this->RegisterPhysics( new G4NeutronTrackingCut(ver));
}
template<class T> THIJING<T>::~THIJING()
{
}
template<class T> void THIJING<T>::SetCuts()
{
if (this->verboseLevel >1){
G4cout << "HIJING::SetCuts:";
}
// " G4VUserPhysicsList::SetCutsWithDefault" method sets
// the default cut value for all particle types
this->SetCutsWithDefault();
}
@@ -1,4 +1,3 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
@@ -23,6 +22,9 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file hadronic/Hadr02/include/HadronPhysicsCRMC_FTFP_BERT.hh
/// \brief Definition of the HadronPhysicsCRMC_FTFP_BERT class
//
//
//---------------------------------------------------------------------------
//
@@ -31,54 +33,46 @@
// Author: 2018 Alberto Ribon
//
// This is a variant of HadronPhysicsFTFP_BERT whereby CRMC is used
// for modeling final-state for pion- , kaon- , proton- and neutron-nuclear
// inelastic interactions at very high energies.
// for modeling final-state for pion- , kaon- , proton- and neutron-
// nuclear inelastic interactions at very high energies.
// For other hadron projectile types (e.g. hyperons, antinucleons and
// antihyperons) the usual FTFP_BERT approach is used at all energies.
// The inelastic hadronic cross sections are, for all hadron projectiles
// and energies, the usual ones (exactly as in FTFP_BERT).
//
// Modified:
// - 18-May-2021 Alberto Ribon : Migrated to newer physics constructor
// and used the latest Geant4-CRMC interface.
//
//----------------------------------------------------------------------------
//
#ifndef HadronPhysicsCRMC_FTFP_BERT_h
#define HadronPhysicsCRMC_FTFP_BERT_h 1
#include "globals.hh"
#include "G4ios.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4Cache.hh"
class G4ComponentGGHadronNucleusXsc;
class G4VCrossSectionDataSet;
#include "G4HadronPhysicsFTFP_BERT.hh"
class HadronPhysicsCRMC_FTFP_BERT : public G4VPhysicsConstructor {
public:
class HadronPhysicsCRMC_FTFP_BERT : public G4HadronPhysicsFTFP_BERT {
public:
HadronPhysicsCRMC_FTFP_BERT( G4int verbose = 1 );
HadronPhysicsCRMC_FTFP_BERT( const G4String& name );
virtual ~HadronPhysicsCRMC_FTFP_BERT();
virtual void ConstructParticle() override;
virtual void ConstructProcess() override;
HadronPhysicsCRMC_FTFP_BERT( const G4String& name, G4bool quasiElastic = false );
~HadronPhysicsCRMC_FTFP_BERT() override;
// copy constructor and hide assignment operator
HadronPhysicsCRMC_FTFP_BERT( HadronPhysicsCRMC_FTFP_BERT & ) = delete;
HadronPhysicsCRMC_FTFP_BERT & operator=( const HadronPhysicsCRMC_FTFP_BERT &right ) = delete;
protected:
void CreateModels();
virtual void Neutron();
virtual void Proton();
virtual void Pion();
virtual void Kaon();
virtual void Others();
virtual void DumpBanner();
// This contains extra configurataion specific to this PL
virtual void ExtraConfiguration();
virtual void Neutron() override;
virtual void Proton() override;
virtual void Pion() override;
virtual void Kaon() override;
private:
G4int model; // 0:EPOS-LHC, 1:EPOS-1.99, 2:QGSJET:01, 6:SIBYLL-2.3,
static const std::array< std::string, 13 > modelNames; // 7:QGSJETII-04, 11:QGSJETII-03, 12:DPMJET-3.06
G4double minCRMC;
G4double minFTFP;
G4double maxFTFP;
G4double minBERT;
G4double maxBERT;
// Thread-private data write them here to delete them
G4VectorCache< G4VCrossSectionDataSet* > xs_ds;
G4Cache< G4ComponentGGHadronNucleusXsc* > xs_k;
};
#endif
@@ -0,0 +1,120 @@
// ********************************************************************
// * 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. *
// ********************************************************************
//
/// \file hadronic/Hadr02/include/HadronicInelasticModelCRMC.hh
/// \brief Definition of the HadronicInelasticModelCRMC class
//
//
// ------------------------------------------------------------
//
// CRMC interface to GEANT4
// for more details on CRMC, see:
// https://web.ikp.kit.edu/rulrich/crmc.html
//
//
// Author: Andrii Tykhonov (University of Geneva)
// Email: andrii.tykhonov@cern.ch
// Created: 14.02.2018
//
//
// (
// A few, trivial modifications made by A. Ribon in May 2021
// in order to use it inside the Geant4 example Hadr02 :
// - Copied here, instead of using the original class
// G4HadronicInelasticModelCRMC as it is distributed
// with crmc-svn-geant4, to avoid some problems with CMake
// which is unable to find the library libGeantCrmc.
// - Renamed the class as HadronicInelasticModelCRMC,
// to follow the Geant4 convention that classes whose
// names start with "G4" are only those distributed in
// source/ .
// - Fixed a few compilation warnings .
// - Set the seed by hand, because the method
// CLHEP::HepRandom::getTheSeed()
// returns 0 which is not accepted.
// )
// ------------------------------------------------------------
#ifndef HadronicInelasticModelCRMC_h
#define HadronicInelasticModelCRMC_h
#include "G4HadronicInteraction.hh"
#include "G4HadFinalState.hh"
#include "G4SystemOfUnits.hh"
#include "CRMCinterface.h"
#include <string>
extern CRMCdata gCRMC_data;
class G4HadFinalState;
class G4ParticleTable;
class G4IonTable;
class G4ParticleDefinition; //class G4DynamicParticle;
class HadronicInelasticModelCRMC : public G4HadronicInteraction
{
public:
//! model:
//! 0 : EPOS LHC
//! 1 : EPOS 1.99
//! 12 : DPMJET3
HadronicInelasticModelCRMC(int model, const G4String& modelName);
~HadronicInelasticModelCRMC();
G4HadFinalState * ApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus);
G4bool IsApplicable (const G4HadProjectile &, G4Nucleus &);
void SetPrintDebug(bool printdebug) {fPrintDebug = printdebug;}
G4ParticleDefinition* GetParticleDefinition(long particle_id,int& error_code);
void SplitMultiNeutrons(CRMCdata& CRMC_data);
bool IsMultiNeutron(int Z, int A);
virtual const std::pair<G4double, G4double> GetFatalEnergyCheckLevels() const {
// possible energy non-coservations of up to 1 TeV are ignored
return std::pair<G4double, G4double>( 10.0*perCent, 1000.0*GeV );
}
private:
CRMCinterface* fInterface;
//CRMCdata fCRMCdata;
int fTypeOutput;
G4HadFinalState* finalState;
G4ParticleTable* fParticleTable;
G4IonTable* fIonTable;
//std::vector<G4ParticleDefinition*> fParticleDefinitions;
//std::vector<G4DynamicParticle*> fDynamicParticles;
bool fPrintDebug;
//
std::string GetCrmcParamPath();
};
#endif
@@ -38,8 +38,9 @@
// The inelastic hadronic cross sections are the same as in G4IonPhysics.
//
// Modified:
// - 18-May-2021 Alberto Ribon : Used the latest Geant4-CRMC interface.
//
// ------------------------------------------------------------
//---------------------------------------------------------------------------
//
#ifndef G4IonCRMCPhysics_h
#define G4IonCRMCPhysics_h 1
@@ -49,29 +50,20 @@
class G4HadronicInteraction;
class G4VCrossSectionDataSet;
class G4VComponentCrossSection;
class G4FTFBuilder;
class G4BinaryLightIonReaction;
class G4CRMCModel;
class IonCRMCPhysics : public G4VPhysicsConstructor {
public:
IonCRMCPhysics( G4int ver = 0 );
virtual ~IonCRMCPhysics();
void ConstructParticle();
void ConstructProcess();
void ConstructParticle() override;
void ConstructProcess() override;
private:
void AddProcess( const G4String& , G4ParticleDefinition* , G4bool isIon );
static G4ThreadLocal G4VCrossSectionDataSet* theNuclNuclData;
static G4ThreadLocal G4VComponentCrossSection* theGGNuclNuclXS;
static G4ThreadLocal G4BinaryLightIonReaction* theIonBC;
static G4ThreadLocal G4HadronicInteraction* theFTFP;
static G4ThreadLocal G4FTFBuilder* theBuilder;
static G4ThreadLocal G4CRMCModel* theCRMC;
G4int verbose;
static G4ThreadLocal G4bool wasActivated;
void AddProcess( const G4String& , G4ParticleDefinition* , G4HadronicInteraction* ,
G4HadronicInteraction* , G4HadronicInteraction* , G4VCrossSectionDataSet* );
int fModel; // 0:EPOS-LHC, 1:EPOS-1.99, 2:QGSJET:01, 6:SIBYLL-2.3,
static const std::array< std::string, 13 > fModelNames; // 7:QGSJETII-04, 11:QGSJETII-03, 12:DPMJET-3.06
G4int fVerbose;
};
#endif
@@ -35,50 +35,24 @@
// created from FTFP_BERT
//
// Modified:
// - 18-May-2021 Alberto Ribon : Migrated to non-templated physics list.
//
//----------------------------------------------------------------------------
//
#ifndef TUrQMD_h
#define TUrQMD_h 1
#ifndef UrQMD_h
#define UrQMD_h 1
#include "G4VModularPhysicsList.hh"
#include "globals.hh"
#include "CompileTimeConstraints.hh"
template<class T>
class TUrQMD: public T
{
public:
TUrQMD(G4int ver = 1);
virtual ~TUrQMD();
public:
// SetCuts()
virtual void SetCuts();
private:
enum {ok = CompileTimeConstraints::IsA<T, G4VModularPhysicsList>::ok };
class UrQMD : public G4VModularPhysicsList {
public:
UrQMD( G4int ver = 1 );
virtual ~UrQMD() = default;
UrQMD( const UrQMD & ) = delete;
UrQMD & operator=( const UrQMD & ) = delete;
};
#ifdef G4_USE_URQMD
#include "UrQMD.icc"
#else
template<class T>
TUrQMD<T>::TUrQMD(G4int) : T()
{
G4ExceptionDescription de;
de<<"Support for UrQMD not enabled"<<G4endl;
G4Exception(__FILE__,"UrQMD-01",FatalException,de,
"Code should be compiled with G4_USE_URQMD environment variable set.");
}
template<class T>
TUrQMD<T>::~TUrQMD() { }
template<class T>
void TUrQMD<T>::SetCuts() { }
#endif
typedef TUrQMD<G4VModularPhysicsList> UrQMD;
#endif //TUrQMD_h
@@ -1,105 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
/// \file hadronic/Hadr02/include/UrQMD.icc
/// \brief Implementation of the UrQMD class inline functions
//
//
//---------------------------------------------------------------------------
//
// ClassName:
//
// Author: 2012 Andrea Dotti
//
// created from FTFP_BERT
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "globals.hh"
#include "G4ios.hh"
#include <iomanip>
#include "G4DecayPhysics.hh"
#include "G4EmStandardPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "IonUrQMDPhysics.hh"
#include "G4StoppingPhysics.hh"
#include "G4HadronElasticPhysics.hh"
#include "G4NeutronTrackingCut.hh"
#include "HadronPhysicsUrQMD.hh"
#include "G4SystemOfUnits.hh"
template<class T> TUrQMD<T>::TUrQMD(G4int ver): T()
{
G4cout << "<<< Geant4 Physics List simulation engine: UrQMD 0.1"<<G4endl;
G4cout <<G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel(ver);
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics(ver));
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
this->RegisterPhysics( new G4DecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronElasticPhysics(ver) );
// Hadron Physics
this->RegisterPhysics( new HadronPhysicsUrQMD(ver));
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new IonUrQMDPhysics(ver));
// Neutron tracking cut
this->RegisterPhysics( new G4NeutronTrackingCut(ver));
}
template<class T> TUrQMD<T>::~TUrQMD()
{
}
template<class T> void TUrQMD<T>::SetCuts()
{
if (this->verboseLevel >1){
G4cout << "UrQMD::SetCuts:";
}
// " G4VUserPhysicsList::SetCutsWithDefault" method sets
// the default cut value for all particle types
this->SetCutsWithDefault();
}