Import Geant4 11.0.0 source tree
This commit is contained in:
committed by
Ben Morgan
parent
6399a014b6
commit
80e2389dd8
@@ -13,6 +13,14 @@ introduced in the code and keeptrack of all tags.
|
||||
* Reverse chronological order (last date on top), please *
|
||||
----------------------------------------------------------
|
||||
|
||||
06-October-2020 Vladimir Ivanchenko (phys-ctor-decay-V10-07-03)
|
||||
- G4RadioactiveDecayPhysics - Use SetAuger(..) method instead of
|
||||
the obsolete SetAugerCascade(..)
|
||||
|
||||
25-August-2021 Dennis Wright (part of physics-lists-V10-07-02)
|
||||
- G4RadioactiveDecayPhysics.cc: replace G4RadioactiveDecayBase with G4RadioactiveDecay
|
||||
see top level History file
|
||||
|
||||
16-April-2021 Ben Morgan (phys-ctor-decay-V10-07-01)
|
||||
- Migrate build to modular CMake API
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4DecayPhysics
|
||||
--------------
|
||||
|
||||
G4RadioactiveDecayPhysics
|
||||
-------------------------
|
||||
|
||||
G4SpinDecayPhysics
|
||||
------------------
|
||||
|
||||
G4UnknownDecayPhysics
|
||||
---------------------
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#include "G4RadioactiveDecayPhysics.hh"
|
||||
|
||||
#include "G4RadioactiveDecayBase.hh"
|
||||
#include "G4RadioactiveDecay.hh"
|
||||
#include "G4GenericIon.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4PhysicsListHelper.hh"
|
||||
@@ -80,7 +80,7 @@ void G4RadioactiveDecayPhysics::ConstructProcess()
|
||||
{
|
||||
// EM physics extra configuration
|
||||
// this physics constructor should be defined after EM constructor
|
||||
G4EmParameters::Instance()->SetAugerCascade(true);
|
||||
G4EmParameters::Instance()->SetAuger(true);
|
||||
G4EmParameters::Instance()->SetDeexcitationIgnoreCut(true);
|
||||
|
||||
G4LossTableManager* man = G4LossTableManager::Instance();
|
||||
@@ -94,7 +94,7 @@ void G4RadioactiveDecayPhysics::ConstructProcess()
|
||||
}
|
||||
|
||||
G4PhysicsListHelper::GetPhysicsListHelper()->
|
||||
RegisterProcess(new G4RadioactiveDecayBase(), G4GenericIon::GenericIon());
|
||||
RegisterProcess(new G4RadioactiveDecay(), G4GenericIon::GenericIon());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -13,6 +13,40 @@ introduced in the code and keeptrack of all tags.
|
||||
* Reverse chronological order (last date on top), please *
|
||||
----------------------------------------------------------
|
||||
|
||||
12 November 2021, V.Ivanchenko (phys-ctor-em-V10-07-23)
|
||||
- G4EmStandardPhysicsWVI - making this experimantal configuration
|
||||
compatible for CPU performance with Opt3 (it was similar to SS)
|
||||
|
||||
10 November 2021, V.Ivanchenko (phys-ctor-em-V10-07-22)
|
||||
- G4EmStandardPhysicsWVI - use similar options as in Opt3, for ions
|
||||
use G4LinhardSorensenIonModel
|
||||
- G4EmModelActivator - updated according to the current Opt3 and Opt4
|
||||
configurations
|
||||
|
||||
29 October 2021, M. Novak (phys-ctor-em-V10-07-21)
|
||||
- G4GammaGeneralProcess - make some methods/fields visible for
|
||||
derived classes
|
||||
|
||||
25 October 2021, V.Ivanchenko (phys-ctor-em-V10-07-20)
|
||||
- G4EmBuilder - complete addition of hyper-nuclei EM physics
|
||||
- in all DNA Physics List use SetAuger() instead of SetAugerCascade()
|
||||
|
||||
22 October 2021, V.Ivanchenko (phys-ctor-em-V10-07-19)
|
||||
- G4EmBuilder - added hyper-nuclei EM physics
|
||||
|
||||
12 October 2021, V.Ivanchenko (phys-ctor-em-V10-07-18)
|
||||
- G4EmBuilder - removed obsolete header
|
||||
|
||||
27 September 2021, V.Ivanchenko (phys-ctor-em-V10-07-17)
|
||||
- G4EmBuilder - use more optimal order of instantiation of processes,
|
||||
should not affect any result but useful for debugging
|
||||
|
||||
30 August 2021, D.Sawkey (phys-ctor-em-V10-07-16)
|
||||
- G4OpticalPhysics - apply clang-format style guidelines
|
||||
|
||||
11 July 2021, V.Ivanchenko (phys-ctor-em-V10-07-15)
|
||||
- G4GammaGeneralProcess - use base material approach
|
||||
|
||||
14 June 2021, V.Ivanchenko (phys-ctor-em-V10-07-14)
|
||||
- G4EmLivermorePhysics, G4EmPenelopePhysics_option1,
|
||||
G4EmStandardPhysics_option3, G4EmStandardPhysics_option4,
|
||||
@@ -31,15 +65,15 @@ introduced in the code and keeptrack of all tags.
|
||||
- G4EmDNAPhysics - updated configuration of standard physics for
|
||||
gamma and positrons according to Opt3; updated particle list by
|
||||
addition of G4Alpha; simplified ConstructProcess() method using
|
||||
G4PhysicsListHelper
|
||||
G4PhysicsListHelper
|
||||
|
||||
22 May 2021, V.Ivanchenko (phys-ctor-em-V10-07-11)
|
||||
- Updated all standard Physics Lists: removed local member "verbose"
|
||||
and use uniform approach for verbosity via G4EmParameters;
|
||||
instantiate NIEL process only if parameter MaxNIELEnergy is above
|
||||
zero; include gamma linear polarization model to Opt0, Opt3, Opt4,
|
||||
SS, and Livermore physics constructors if the parameter
|
||||
EnablePolarisation="true"; G4EmLivermorePolarizedPhysics fully
|
||||
SS, and Livermore physics constructors if the parameter
|
||||
EnablePolarisation="true"; G4EmLivermorePolarizedPhysics fully
|
||||
inherit from G4EmLivermorePhysics
|
||||
|
||||
24 April 2021, V.Ivanchenko (phys-ctor-em-V10-07-10)
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4EmDNAChemistry
|
||||
----------------
|
||||
|
||||
G4EmDNAPhysics
|
||||
--------------
|
||||
|
||||
G4EmDNAPhysicsActivator
|
||||
-----------------------
|
||||
|
||||
G4EmDNAPhysics_option1
|
||||
----------------------
|
||||
|
||||
G4EmDNAPhysics_option2
|
||||
----------------------
|
||||
|
||||
G4EmDNAPhysics_option3
|
||||
----------------------
|
||||
|
||||
G4EmDNAPhysics_option4
|
||||
----------------------
|
||||
|
||||
G4EmDNAPhysics_option5
|
||||
----------------------
|
||||
|
||||
G4EmDNAPhysics_option7
|
||||
----------------------
|
||||
|
||||
G4EmLEPTSPhysics
|
||||
----------------
|
||||
|
||||
G4EmLivermorePhysics
|
||||
--------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmLivermorePolarizedPhysics
|
||||
-----------------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmLowEPPhysics
|
||||
----------------
|
||||
|
||||
G4EmModelActivator
|
||||
------------------
|
||||
|
||||
G4EmPenelopePhysics
|
||||
-------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysics
|
||||
-------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysicsGS
|
||||
---------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysicsSS
|
||||
---------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysicsWVI
|
||||
----------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysics_option1
|
||||
---------------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysics_option2
|
||||
---------------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysics_option3
|
||||
---------------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4EmStandardPhysics_option4
|
||||
---------------------------
|
||||
see https://geant4.web.cern.ch/geant4/collaboration/working_groups/electromagnetic/physlist.shtml
|
||||
|
||||
G4OpticalPhysics
|
||||
----------------
|
||||
|
||||
G4OpticalPhysicsMessenger
|
||||
-------------------------
|
||||
|
||||
G4OpticalProcessIndex
|
||||
---------------------
|
||||
+12
-10
@@ -65,7 +65,7 @@ class G4GammaGeneralProcess : public G4VEmProcess
|
||||
{
|
||||
public:
|
||||
|
||||
explicit G4GammaGeneralProcess();
|
||||
explicit G4GammaGeneralProcess(const G4String& pname="GammaGeneralProc");
|
||||
|
||||
~G4GammaGeneralProcess() override;
|
||||
|
||||
@@ -93,7 +93,7 @@ public:
|
||||
|
||||
// Called before tracking of each new G4Track
|
||||
void StartTracking(G4Track*) override;
|
||||
|
||||
|
||||
// implementation of virtual method, specific for G4GammaGeneralProcess
|
||||
G4double PostStepGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
@@ -102,7 +102,7 @@ public:
|
||||
|
||||
// implementation of virtual method, specific for G4GammaGeneralProcess
|
||||
G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override;
|
||||
|
||||
|
||||
// Store PhysicsTable in a file.
|
||||
// Return false in case of failure at I/O
|
||||
G4bool StorePhysicsTable(const G4ParticleDefinition*,
|
||||
@@ -148,12 +148,12 @@ protected:
|
||||
|
||||
void SelectHadProcess(const G4Track&, const G4Step&, G4HadronicProcess*);
|
||||
|
||||
private:
|
||||
|
||||
// It returns the cross section per volume for energy/ material
|
||||
G4double TotalCrossSectionPerVolume();
|
||||
|
||||
G4bool RetrieveTable(G4VEmProcess*, const G4String& directory,
|
||||
private:
|
||||
|
||||
G4bool RetrieveTable(G4VEmProcess*, const G4String& directory,
|
||||
G4bool ascii);
|
||||
|
||||
protected:
|
||||
@@ -161,6 +161,10 @@ protected:
|
||||
G4HadronicProcess* theGammaNuclear = nullptr;
|
||||
G4VProcess* selectedProc = nullptr;
|
||||
|
||||
G4double preStepLogE = 1.0;
|
||||
G4double factor = 1.0;
|
||||
|
||||
|
||||
private:
|
||||
static G4EmDataHandler* theHandler;
|
||||
static const size_t nTables = 15;
|
||||
@@ -177,8 +181,6 @@ private:
|
||||
G4double minEEEnergy;
|
||||
G4double minMMEnergy;
|
||||
G4double peLambda = 0.0;
|
||||
G4double preStepLogE = 1.0;
|
||||
G4double factor = 1.0;
|
||||
|
||||
size_t nLowE = 40;
|
||||
size_t nHighE = 50;
|
||||
@@ -187,7 +189,7 @@ private:
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
inline G4double
|
||||
G4GammaGeneralProcess::ComputeGeneralLambda(size_t idxe, size_t idxt)
|
||||
{
|
||||
@@ -206,7 +208,7 @@ inline G4double G4GammaGeneralProcess::GetProbability(size_t idxt)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void
|
||||
inline void
|
||||
G4GammaGeneralProcess::SelectedProcess(const G4Step& step, G4VProcess* ptr)
|
||||
{
|
||||
selectedProc = ptr;
|
||||
|
||||
@@ -49,27 +49,23 @@
|
||||
|
||||
class G4OpticalPhysics : public G4VPhysicsConstructor
|
||||
{
|
||||
public:
|
||||
public:
|
||||
G4OpticalPhysics(G4int verbose = 0, const G4String& name = "Optical");
|
||||
~G4OpticalPhysics() override;
|
||||
void PrintStatistics() const;
|
||||
|
||||
G4OpticalPhysics(G4int verbose = 0, const G4String& name = "Optical");
|
||||
~G4OpticalPhysics() override;
|
||||
void PrintStatistics() const;
|
||||
G4OpticalPhysics(const G4OpticalPhysics& right) = delete;
|
||||
G4OpticalPhysics& operator=(const G4OpticalPhysics& right) = delete;
|
||||
|
||||
G4OpticalPhysics(const G4OpticalPhysics& right) = delete;
|
||||
G4OpticalPhysics& operator=(const G4OpticalPhysics& right) = delete;
|
||||
|
||||
protected:
|
||||
|
||||
// construct particle and physics
|
||||
void ConstructParticle() override;
|
||||
void ConstructProcess() override;
|
||||
|
||||
private:
|
||||
|
||||
void PrintWarning(G4ExceptionDescription&) const;
|
||||
protected:
|
||||
// construct particle and physics
|
||||
void ConstructParticle() override;
|
||||
void ConstructProcess() override;
|
||||
|
||||
private:
|
||||
void PrintWarning(G4ExceptionDescription&) const;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif // G4OpticalPhysics_h
|
||||
#endif // G4OpticalPhysics_h
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
|
||||
#include "G4hIonisation.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
#include "G4alphaIonisation.hh"
|
||||
#include "G4NuclearStopping.hh"
|
||||
|
||||
#include "G4MuMultipleScattering.hh"
|
||||
@@ -117,14 +116,14 @@ void G4EmBuilder::ConstructIonEmPhysics(G4hMultipleScattering* hmsc,
|
||||
ph->RegisterProcess(hmsc, part);
|
||||
ph->RegisterProcess(new G4hIonisation(), part);
|
||||
|
||||
part = G4He3::He3();
|
||||
part = G4Alpha::Alpha();
|
||||
ph->RegisterProcess(new G4hMultipleScattering(), part);
|
||||
ph->RegisterProcess(new G4ionIonisation(), part);
|
||||
if( nucStopping != nullptr ) {
|
||||
ph->RegisterProcess(nucStopping, part);
|
||||
}
|
||||
|
||||
part = G4Alpha::Alpha();
|
||||
part = G4He3::He3();
|
||||
ph->RegisterProcess(new G4hMultipleScattering(), part);
|
||||
ph->RegisterProcess(new G4ionIonisation(), part);
|
||||
if( nucStopping != nullptr ) {
|
||||
@@ -144,11 +143,11 @@ void G4EmBuilder::ConstructIonEmPhysicsSS()
|
||||
ph->RegisterProcess(new G4hIonisation(), part);
|
||||
ph->RegisterProcess(new G4CoulombScattering(), part);
|
||||
|
||||
part = G4He3::He3();
|
||||
part = G4Alpha::Alpha();
|
||||
ph->RegisterProcess(new G4ionIonisation(), part);
|
||||
ph->RegisterProcess(new G4CoulombScattering(), part);
|
||||
|
||||
part = G4Alpha::Alpha();
|
||||
part = G4He3::He3();
|
||||
ph->RegisterProcess(new G4ionIonisation(), part);
|
||||
ph->RegisterProcess(new G4CoulombScattering(), part);
|
||||
}
|
||||
@@ -160,15 +159,16 @@ void G4EmBuilder::ConstructLightHadrons(G4ParticleDefinition* part1,
|
||||
{
|
||||
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
|
||||
|
||||
G4hBremsstrahlung* brem = ( isHEP ) ? new G4hBremsstrahlung() : nullptr;
|
||||
G4hPairProduction* pair = ( isHEP ) ? new G4hPairProduction() : nullptr;
|
||||
|
||||
G4hMultipleScattering* msc = new G4hMultipleScattering();
|
||||
if(isWVI) { msc->SetEmModel(new G4WentzelVIModel()); }
|
||||
G4CoulombScattering* ss = ( isWVI ) ? new G4CoulombScattering() : nullptr;
|
||||
|
||||
ph->RegisterProcess(msc, part1);
|
||||
ph->RegisterProcess(new G4hIonisation(), part1);
|
||||
|
||||
G4hBremsstrahlung* brem = ( isHEP ) ? new G4hBremsstrahlung() : nullptr;
|
||||
G4hPairProduction* pair = ( isHEP ) ? new G4hPairProduction() : nullptr;
|
||||
|
||||
if( isHEP ) {
|
||||
ph->RegisterProcess(brem, part1);
|
||||
ph->RegisterProcess(pair, part1);
|
||||
@@ -197,10 +197,11 @@ void G4EmBuilder::ConstructLightHadronsSS(G4ParticleDefinition* part1,
|
||||
{
|
||||
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
|
||||
|
||||
ph->RegisterProcess(new G4hIonisation(), part1);
|
||||
|
||||
G4hBremsstrahlung* brem = ( isHEP ) ? new G4hBremsstrahlung() : nullptr;
|
||||
G4hPairProduction* pair = ( isHEP ) ? new G4hPairProduction() : nullptr;
|
||||
|
||||
ph->RegisterProcess(new G4hIonisation(), part1);
|
||||
if( isHEP ) {
|
||||
ph->RegisterProcess(brem, part1);
|
||||
ph->RegisterProcess(pair, part1);
|
||||
@@ -224,10 +225,6 @@ void G4EmBuilder::ConstructCharged(G4hMultipleScattering* hmsc,
|
||||
G4HadronicParameters* hpar = G4HadronicParameters::Instance();
|
||||
G4bool isHEP = ( param->MaxKinEnergy() > hpar->EnergyThresholdForHeavyHadrons() );
|
||||
|
||||
// muon bremsstrahlung and pair production
|
||||
G4MuBremsstrahlung* mub = ( isHEP ) ? new G4MuBremsstrahlung() : nullptr;
|
||||
G4MuPairProduction* mup = ( isHEP ) ? new G4MuPairProduction() : nullptr;
|
||||
|
||||
// muon multiple and single scattering
|
||||
G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
|
||||
if(isWVI) { mumsc->SetEmModel(new G4WentzelVIModel()); }
|
||||
@@ -238,6 +235,11 @@ void G4EmBuilder::ConstructCharged(G4hMultipleScattering* hmsc,
|
||||
G4ParticleDefinition* part = G4MuonPlus::MuonPlus();
|
||||
ph->RegisterProcess(mumsc, part);
|
||||
ph->RegisterProcess(new G4MuIonisation(), part);
|
||||
|
||||
// muon bremsstrahlung and pair production
|
||||
G4MuBremsstrahlung* mub = ( isHEP ) ? new G4MuBremsstrahlung() : nullptr;
|
||||
G4MuPairProduction* mup = ( isHEP ) ? new G4MuPairProduction() : nullptr;
|
||||
|
||||
if( isHEP ) {
|
||||
ph->RegisterProcess(mub, part);
|
||||
ph->RegisterProcess(mup, part);
|
||||
@@ -276,6 +278,10 @@ void G4EmBuilder::ConstructCharged(G4hMultipleScattering* hmsc,
|
||||
if( hpar->EnableBCParticles() ) {
|
||||
ConstructBasicEmPhysics(hmsc, G4HadParticles::GetBCChargedHadrons());
|
||||
}
|
||||
// light hyper-nuclei
|
||||
if( hpar->EnableHyperNuclei() ) {
|
||||
ConstructBasicEmPhysics(hmsc, G4HadParticles::GetChargedHyperNuclei());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,10 +292,6 @@ void G4EmBuilder::ConstructChargedSS(G4hMultipleScattering* hmsc)
|
||||
G4HadronicParameters* hpar = G4HadronicParameters::Instance();
|
||||
G4bool isHEP = ( param->MaxKinEnergy() > hpar->EnergyThresholdForHeavyHadrons() );
|
||||
|
||||
// muon bremsstrahlung and pair production
|
||||
G4MuBremsstrahlung* mub = ( isHEP ) ? new G4MuBremsstrahlung() : nullptr;
|
||||
G4MuPairProduction* mup = ( isHEP ) ? new G4MuPairProduction() : nullptr;
|
||||
|
||||
// muon multiple and single scattering
|
||||
G4CoulombScattering* muss = new G4CoulombScattering();
|
||||
|
||||
@@ -297,6 +299,11 @@ void G4EmBuilder::ConstructChargedSS(G4hMultipleScattering* hmsc)
|
||||
// mu+-
|
||||
G4ParticleDefinition* part = G4MuonPlus::MuonPlus();
|
||||
ph->RegisterProcess(new G4MuIonisation(), part);
|
||||
|
||||
// muon bremsstrahlung and pair production
|
||||
G4MuBremsstrahlung* mub = ( isHEP ) ? new G4MuBremsstrahlung() : nullptr;
|
||||
G4MuPairProduction* mup = ( isHEP ) ? new G4MuPairProduction() : nullptr;
|
||||
|
||||
if( isHEP ) {
|
||||
ph->RegisterProcess(mub, part);
|
||||
ph->RegisterProcess(mup, part);
|
||||
@@ -330,6 +337,10 @@ void G4EmBuilder::ConstructChargedSS(G4hMultipleScattering* hmsc)
|
||||
if( hpar->EnableBCParticles() ) {
|
||||
ConstructBasicEmPhysics(hmsc, G4HadParticles::GetBCChargedHadrons());
|
||||
}
|
||||
// light hyper-nuclei
|
||||
if( hpar->EnableHyperNuclei() ) {
|
||||
ConstructBasicEmPhysics(hmsc, G4HadParticles::GetChargedHyperNuclei());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +93,6 @@ G4EmDNAPhysics_option1::G4EmDNAPhysics_option1(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -94,7 +94,6 @@ G4EmDNAPhysics_option2::G4EmDNAPhysics_option2(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@ G4EmDNAPhysics_option3::G4EmDNAPhysics_option3(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -98,7 +98,6 @@ G4EmDNAPhysics_option4::G4EmDNAPhysics_option4(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -98,7 +98,6 @@ G4EmDNAPhysics_option5::G4EmDNAPhysics_option5(G4int ver, const G4String&) :
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -110,7 +110,6 @@ G4EmDNAPhysics_option6::G4EmDNAPhysics_option6(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -98,7 +98,6 @@ G4EmDNAPhysics_option7::G4EmDNAPhysics_option7(G4int ver, const G4String&) :
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
@@ -94,7 +94,6 @@ G4EmDNAPhysics_option8::G4EmDNAPhysics_option8(G4int ver, const G4String&)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
|
||||
+2
-12
@@ -90,7 +90,6 @@ G4EmDNAPhysics_stationary_option2::G4EmDNAPhysics_stationary_option2(G4int ver)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
@@ -101,17 +100,8 @@ G4EmDNAPhysics_stationary_option2::G4EmDNAPhysics_stationary_option2(G4int ver)
|
||||
|
||||
G4EmDNAPhysics_stationary_option2::G4EmDNAPhysics_stationary_option2(G4int ver,
|
||||
const G4String&)
|
||||
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option2"), verbose(ver)
|
||||
{
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
: G4EmDNAPhysics_stationary_option2(ver)
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
+2
-12
@@ -92,7 +92,6 @@ G4EmDNAPhysics_stationary_option4::G4EmDNAPhysics_stationary_option4(G4int ver)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
@@ -103,17 +102,8 @@ G4EmDNAPhysics_stationary_option4::G4EmDNAPhysics_stationary_option4(G4int ver)
|
||||
|
||||
G4EmDNAPhysics_stationary_option4::G4EmDNAPhysics_stationary_option4(G4int ver,
|
||||
const G4String&)
|
||||
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option4"), verbose(ver)
|
||||
{
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
: G4EmDNAPhysics_stationary_option4(ver)
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
+2
-12
@@ -93,7 +93,6 @@ G4EmDNAPhysics_stationary_option6::G4EmDNAPhysics_stationary_option6(G4int ver)
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
param->ActivateDNA();
|
||||
|
||||
@@ -104,17 +103,8 @@ G4EmDNAPhysics_stationary_option6::G4EmDNAPhysics_stationary_option6(G4int ver)
|
||||
|
||||
G4EmDNAPhysics_stationary_option6::G4EmDNAPhysics_stationary_option6(G4int ver,
|
||||
const G4String&)
|
||||
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option6"), verbose(ver)
|
||||
{
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
param->SetDefaults();
|
||||
param->SetFluo(true);
|
||||
param->SetAuger(true);
|
||||
param->SetAugerCascade(true);
|
||||
param->SetDeexcitationIgnoreCut(true);
|
||||
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
: G4EmDNAPhysics_stationary_option6(ver)
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
#include "G4UrbanMscModel.hh"
|
||||
#include "G4GoudsmitSaundersonMscModel.hh"
|
||||
#include "G4LowEPComptonModel.hh"
|
||||
#include "G4BetheHeitler5DModel.hh"
|
||||
|
||||
#include "G4LivermorePhotoElectricModel.hh"
|
||||
#include "G4LivermoreComptonModel.hh"
|
||||
@@ -250,12 +251,17 @@ void G4EmModelActivator::ActivateEmOptions()
|
||||
FindOrAddProcess(phot, "Rayl");
|
||||
mod = new G4LivermoreRayleighModel();
|
||||
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
|
||||
FindOrAddProcess(phot, "phot");
|
||||
mod = new G4LivermorePhotoElectricModel();
|
||||
FindOrAddProcess(phot, "compt");
|
||||
mod = new G4KleinNishinaModel();
|
||||
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
|
||||
mod = new G4LowEPComptonModel();
|
||||
mod->SetHighEnergyLimit(20*MeV);
|
||||
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
|
||||
FindOrAddProcess(phot, "conv");
|
||||
mod = new G4BetheHeitler5DModel();
|
||||
em_config->SetExtraEmModel("gamma", "conv", mod, reg);
|
||||
|
||||
} else if("G4EmStandardGS" == typesPhys[i]) {
|
||||
G4GoudsmitSaundersonMscModel* msc = new G4GoudsmitSaundersonMscModel();
|
||||
|
||||
@@ -31,11 +31,7 @@
|
||||
// Author: V.Ivanchenko 09.11.2005
|
||||
//
|
||||
// Modified:
|
||||
// 05.12.2005 V.Ivanchenko add controlled verbosity
|
||||
// 13.11.2006 V.Ivanchenko use G4hMultipleScattering
|
||||
// 23.11.2006 V.Ivanchenko remove mscStepLimit option and improve cout
|
||||
// 13.02.2007 V.Ivanchenko use G4hMultipleScattering for muons
|
||||
// 13.02.2007 V.Ivanchenko set skin=0.0
|
||||
//
|
||||
// 21.04.2008 V.Ivanchenko add long-lived D and B mesons
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -60,7 +56,9 @@
|
||||
#include "G4CoulombScattering.hh"
|
||||
#include "G4WentzelVIModel.hh"
|
||||
#include "G4WentzelVIRelModel.hh"
|
||||
#include "G4UrbanMscModel.hh"
|
||||
#include "G4hCoulombScatteringModel.hh"
|
||||
#include "G4eCoulombScatteringModel.hh"
|
||||
|
||||
#include "G4eIonisation.hh"
|
||||
#include "G4eBremsstrahlung.hh"
|
||||
@@ -69,9 +67,11 @@
|
||||
|
||||
#include "G4hIonisation.hh"
|
||||
#include "G4ionIonisation.hh"
|
||||
#include "G4BetheHeitler5DModel.hh"
|
||||
#include "G4AtimaEnergyLossModel.hh"
|
||||
#include "G4AtimaFluctuations.hh"
|
||||
#include "G4IonParametrisedLossModel.hh"
|
||||
#include "G4LindhardSorensenIonModel.hh"
|
||||
#include "G4BraggIonModel.hh"
|
||||
#include "G4NuclearStopping.hh"
|
||||
#include "G4eplusTo2GammaOKVIModel.hh"
|
||||
@@ -99,7 +99,7 @@ G4EmStandardPhysicsWVI::G4EmStandardPhysicsWVI(G4int ver)
|
||||
param->SetDefaults();
|
||||
param->SetVerbose(ver);
|
||||
param->SetMinEnergy(10*CLHEP::eV);
|
||||
param->SetLowestElectronEnergy(10*CLHEP::eV);
|
||||
param->SetLowestElectronEnergy(100*CLHEP::eV);
|
||||
param->SetNumberOfBinsPerDecade(20);
|
||||
param->ActivateAngularGeneratorForIonisation(true);
|
||||
param->SetStepFunction(0.2, 100*CLHEP::um);
|
||||
@@ -108,8 +108,10 @@ G4EmStandardPhysicsWVI::G4EmStandardPhysicsWVI(G4int ver)
|
||||
param->SetStepFunctionIons(0.1, 1*CLHEP::um);
|
||||
param->SetUseMottCorrection(true);
|
||||
param->SetMuHadLateralDisplacement(true);
|
||||
param->SetUseICRU90Data(true);
|
||||
param->SetMscThetaLimit(0.15);
|
||||
param->SetFluo(true);
|
||||
param->SetMaxNIELEnergy(1*CLHEP::MeV);
|
||||
SetPhysicsType(bElectromagnetic);
|
||||
}
|
||||
|
||||
@@ -135,10 +137,21 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
|
||||
}
|
||||
G4EmBuilder::PrepareEMPhysics();
|
||||
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
|
||||
// common processes
|
||||
G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
|
||||
G4NuclearStopping* pnuc(nullptr);
|
||||
|
||||
// nuclear stopping is enabled if th eenergy limit above zero
|
||||
G4double nielEnergyLimit = param->MaxNIELEnergy();
|
||||
G4NuclearStopping* pnuc = nullptr;
|
||||
if(nielEnergyLimit > 0.0) {
|
||||
pnuc = new G4NuclearStopping();
|
||||
pnuc->SetMaxKinEnergy(nielEnergyLimit);
|
||||
}
|
||||
|
||||
// high energy limit for e+- scattering models
|
||||
G4double highEnergyLimit = 1*CLHEP::MeV;
|
||||
|
||||
// Add gamma EM processes
|
||||
G4ParticleDefinition* particle = G4Gamma::Gamma();
|
||||
@@ -149,17 +162,33 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
|
||||
G4ComptonScattering* cs = new G4ComptonScattering;
|
||||
cs->SetEmModel(new G4KleinNishinaModel());
|
||||
|
||||
G4GammaConversion* gc = new G4GammaConversion();
|
||||
if(param->EnablePolarisation()) {
|
||||
gc->SetEmModel(new G4BetheHeitler5DModel());
|
||||
}
|
||||
|
||||
ph->RegisterProcess(pee, particle);
|
||||
ph->RegisterProcess(cs, particle);
|
||||
ph->RegisterProcess(new G4GammaConversion(), particle);
|
||||
ph->RegisterProcess(gc, particle);
|
||||
ph->RegisterProcess(new G4RayleighScattering(), particle);
|
||||
|
||||
// e-
|
||||
particle = G4Electron::Electron();
|
||||
|
||||
G4eMultipleScattering* msc = new G4eMultipleScattering;
|
||||
msc->SetEmModel(new G4WentzelVIModel());
|
||||
G4UrbanMscModel* msc1 = new G4UrbanMscModel();
|
||||
G4WentzelVIModel* msc2 = new G4WentzelVIModel();
|
||||
msc1->SetHighEnergyLimit(highEnergyLimit);
|
||||
msc2->SetLowEnergyLimit(highEnergyLimit);
|
||||
msc->SetEmModel(msc1);
|
||||
msc->SetEmModel(msc2);
|
||||
|
||||
G4eCoulombScatteringModel* ssm = new G4eCoulombScatteringModel();
|
||||
G4CoulombScattering* ss = new G4CoulombScattering();
|
||||
ss->SetEmModel(ssm);
|
||||
ss->SetMinKinEnergy(highEnergyLimit);
|
||||
ssm->SetLowEnergyLimit(highEnergyLimit);
|
||||
ssm->SetActivationLowEnergyLimit(highEnergyLimit);
|
||||
|
||||
ph->RegisterProcess(msc, particle);
|
||||
ph->RegisterProcess(new G4eIonisation(), particle);
|
||||
@@ -170,8 +199,19 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
|
||||
particle = G4Positron::Positron();
|
||||
|
||||
msc = new G4eMultipleScattering;
|
||||
msc->SetEmModel(new G4WentzelVIModel());
|
||||
msc1 = new G4UrbanMscModel();
|
||||
msc2 = new G4WentzelVIModel();
|
||||
msc1->SetHighEnergyLimit(highEnergyLimit);
|
||||
msc2->SetLowEnergyLimit(highEnergyLimit);
|
||||
msc->SetEmModel(msc1);
|
||||
msc->SetEmModel(msc2);
|
||||
|
||||
ssm = new G4eCoulombScatteringModel();
|
||||
ss = new G4CoulombScattering();
|
||||
ss->SetEmModel(ssm);
|
||||
ss->SetMinKinEnergy(highEnergyLimit);
|
||||
ssm->SetLowEnergyLimit(highEnergyLimit);
|
||||
ssm->SetActivationLowEnergyLimit(highEnergyLimit);
|
||||
|
||||
G4eplusAnnihilation* ann = new G4eplusAnnihilation();
|
||||
ann->SetEmModel(new G4eplusTo2GammaOKVIModel());
|
||||
@@ -185,11 +225,10 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
|
||||
// generic ion
|
||||
particle = G4GenericIon::GenericIon();
|
||||
G4ionIonisation* ionIoni = new G4ionIonisation();
|
||||
ionIoni->SetEmModel(new G4BraggIonModel(),0);
|
||||
ionIoni->SetEmModel(new G4AtimaEnergyLossModel(),1);
|
||||
ionIoni->SetFluctModel(new G4AtimaFluctuations());
|
||||
ionIoni->SetEmModel(new G4LindhardSorensenIonModel());
|
||||
ph->RegisterProcess(hmsc, particle);
|
||||
ph->RegisterProcess(ionIoni, particle);
|
||||
if(nullptr != pnuc) { ph->RegisterProcess(pnuc, particle); }
|
||||
|
||||
// muons, hadrons, ions
|
||||
G4EmBuilder::ConstructCharged(hmsc, pnuc);
|
||||
|
||||
@@ -76,15 +76,15 @@
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
G4EmDataHandler* G4GammaGeneralProcess::theHandler = nullptr;
|
||||
G4bool G4GammaGeneralProcess::theT[nTables] =
|
||||
G4bool G4GammaGeneralProcess::theT[nTables] =
|
||||
{true,false,true,true,true,false,true,true,true,
|
||||
true,true,true,true,true,true};
|
||||
G4String G4GammaGeneralProcess::nameT[nTables] =
|
||||
G4String G4GammaGeneralProcess::nameT[nTables] =
|
||||
{"0","1","2","3","4","5","6","7","8",
|
||||
"9","10","11","12","13","14"};
|
||||
|
||||
G4GammaGeneralProcess::G4GammaGeneralProcess():
|
||||
G4VEmProcess("GammaGeneralProc", fElectromagnetic),
|
||||
G4GammaGeneralProcess::G4GammaGeneralProcess(const G4String& pname):
|
||||
G4VEmProcess(pname, fElectromagnetic),
|
||||
minPEEnergy(150*CLHEP::keV),
|
||||
minEEEnergy(2*CLHEP::electron_mass_c2),
|
||||
minMMEnergy(100*CLHEP::MeV)
|
||||
@@ -148,11 +148,14 @@ void G4GammaGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& part
|
||||
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
G4LossTableManager* man = G4LossTableManager::Instance();
|
||||
|
||||
isTheMaster = man->IsMaster();
|
||||
|
||||
isTheMaster = man->IsMaster();
|
||||
if(isTheMaster) { SetVerboseLevel(param->Verbose()); }
|
||||
else { SetVerboseLevel(param->WorkerVerbose()); }
|
||||
|
||||
G4LossTableBuilder* bld = man->GetTableBuilder();
|
||||
baseMat = bld->GetBaseMaterialFlag();
|
||||
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << "G4GammaGeneralProcess::PreparePhysicsTable() for "
|
||||
<< GetProcessName()
|
||||
@@ -165,8 +168,8 @@ void G4GammaGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& part
|
||||
theConversionEE == nullptr) {
|
||||
G4ExceptionDescription ed;
|
||||
ed << "### G4GeneralGammaProcess is initialized incorrectly"
|
||||
<< "\n Photoelectric: " << thePhotoElectric
|
||||
<< "\n Compton: " << theCompton
|
||||
<< "\n Photoelectric: " << thePhotoElectric
|
||||
<< "\n Compton: " << theCompton
|
||||
<< "\n Conversion: " << theConversionEE;
|
||||
G4Exception("G4GeneralGammaProcess","em0004",
|
||||
FatalException, ed,"");
|
||||
@@ -186,15 +189,15 @@ void G4GammaGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& part
|
||||
|
||||
void G4GammaGeneralProcess::InitialiseProcess(const G4ParticleDefinition*)
|
||||
{
|
||||
if(isTheMaster) {
|
||||
if(isTheMaster) {
|
||||
|
||||
G4EmParameters* param = G4EmParameters::Instance();
|
||||
G4LossTableManager* man = G4LossTableManager::Instance();
|
||||
|
||||
// tables are created and its size is defined only once
|
||||
if(nullptr == theHandler) {
|
||||
theHandler = new G4EmDataHandler(nTables);
|
||||
if(theRayleigh) { theT[1] = true; }
|
||||
if(nullptr == theHandler) {
|
||||
theHandler = new G4EmDataHandler(nTables);
|
||||
if(theRayleigh) { theT[1] = true; }
|
||||
|
||||
theHandler->SetMasterProcess(thePhotoElectric);
|
||||
theHandler->SetMasterProcess(theCompton);
|
||||
@@ -202,7 +205,7 @@ void G4GammaGeneralProcess::InitialiseProcess(const G4ParticleDefinition*)
|
||||
theHandler->SetMasterProcess(theRayleigh);
|
||||
}
|
||||
auto bld = man->GetTableBuilder();
|
||||
|
||||
|
||||
const G4ProductionCutsTable* theCoupleTable=
|
||||
G4ProductionCutsTable::GetProductionCutsTable();
|
||||
size_t numOfCouples = theCoupleTable->GetTableSize();
|
||||
@@ -219,22 +222,22 @@ void G4GammaGeneralProcess::InitialiseProcess(const G4ParticleDefinition*)
|
||||
G4PhysicsLogVector cVector(minEEEnergy,minMMEnergy,nHighE,splineFlag);
|
||||
G4PhysicsLogVector dVector(minMMEnergy,maxe,nbin2,splineFlag);
|
||||
|
||||
for(size_t i=0; i<nTables; ++i) {
|
||||
for(size_t i=0; i<nTables; ++i) {
|
||||
if(!theT[i]) { continue; }
|
||||
//G4cout << "## PreparePhysTable " << i << "." << G4endl;
|
||||
G4PhysicsTable* table = theHandler->MakeTable(i);
|
||||
G4PhysicsTable* table = theHandler->MakeTable(i);
|
||||
//G4cout << " make table " << table << G4endl;
|
||||
for(size_t j=0; j<numOfCouples; ++j) {
|
||||
vec = (*table)[j];
|
||||
if (bld->GetFlag(j) && nullptr == vec) {
|
||||
//G4cout <<" i= "<<i<<" j= "<< j <<" make new vector"<< G4endl;
|
||||
if(i<=1) {
|
||||
if(i<=1) {
|
||||
vec = new G4PhysicsVector(aVector);
|
||||
} else if(i<=5) {
|
||||
vec = new G4PhysicsVector(bVector);
|
||||
} else if(i<=9) {
|
||||
vec = new G4PhysicsVector(cVector);
|
||||
} else {
|
||||
} else {
|
||||
vec = new G4PhysicsVector(dVector);
|
||||
}
|
||||
G4PhysicsTableHelper::SetPhysicsVector(table, j, vec);
|
||||
@@ -254,26 +257,27 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
<< " and particle " << part.GetParticleName()
|
||||
<< G4endl;
|
||||
}
|
||||
if(!isTheMaster) {
|
||||
thePhotoElectric->SetEmMasterProcess(theHandler->GetMasterProcess(0));
|
||||
if(!isTheMaster) {
|
||||
thePhotoElectric->SetEmMasterProcess(theHandler->GetMasterProcess(0));
|
||||
baseMat = theHandler->GetMasterProcess(0)->UseBaseMaterial();
|
||||
}
|
||||
thePhotoElectric->BuildPhysicsTable(part);
|
||||
thePhotoElectric->BuildPhysicsTable(part);
|
||||
|
||||
if(!isTheMaster) {
|
||||
theCompton->SetEmMasterProcess(theHandler->GetMasterProcess(1));
|
||||
if(!isTheMaster) {
|
||||
theCompton->SetEmMasterProcess(theHandler->GetMasterProcess(1));
|
||||
}
|
||||
theCompton->BuildPhysicsTable(part);
|
||||
|
||||
if(!isTheMaster) {
|
||||
theConversionEE->SetEmMasterProcess(theHandler->GetMasterProcess(2));
|
||||
theCompton->BuildPhysicsTable(part);
|
||||
|
||||
if(!isTheMaster) {
|
||||
theConversionEE->SetEmMasterProcess(theHandler->GetMasterProcess(2));
|
||||
}
|
||||
theConversionEE->BuildPhysicsTable(part);
|
||||
|
||||
if(theRayleigh != nullptr) {
|
||||
if(!isTheMaster) {
|
||||
theRayleigh->SetEmMasterProcess(theHandler->GetMasterProcess(3));
|
||||
theConversionEE->BuildPhysicsTable(part);
|
||||
|
||||
if(theRayleigh != nullptr) {
|
||||
if(!isTheMaster) {
|
||||
theRayleigh->SetEmMasterProcess(theHandler->GetMasterProcess(3));
|
||||
}
|
||||
theRayleigh->BuildPhysicsTable(part);
|
||||
theRayleigh->BuildPhysicsTable(part);
|
||||
}
|
||||
if(theGammaNuclear != nullptr) { theGammaNuclear->BuildPhysicsTable(part); }
|
||||
if(theConversionMM != nullptr) { theConversionMM->BuildPhysicsTable(part); }
|
||||
@@ -286,9 +290,9 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
G4LossTableBuilder* bld = G4LossTableManager::Instance()->GetTableBuilder();
|
||||
const std::vector<G4PhysicsTable*>& tables = theHandler->GetTables();
|
||||
|
||||
G4CrossSectionDataStore* gn = (nullptr != theGammaNuclear)
|
||||
G4CrossSectionDataStore* gn = (nullptr != theGammaNuclear)
|
||||
? theGammaNuclear->GetCrossSectionDataStore() : nullptr;
|
||||
G4DynamicParticle* dynParticle =
|
||||
G4DynamicParticle* dynParticle =
|
||||
new G4DynamicParticle(G4Gamma::Gamma(),G4ThreeVector(1,0,0),1.0);
|
||||
|
||||
G4double sigComp(0.), sigPE(0.), sigConv(0.), sigR(0.),
|
||||
@@ -298,53 +302,53 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
|
||||
if (bld->GetFlag(i)) {
|
||||
|
||||
G4int idx = (*theDensityIdx)[i];
|
||||
const G4MaterialCutsCouple* couple =
|
||||
G4int idx = (!baseMat) ? i : DensityIndex(i);
|
||||
const G4MaterialCutsCouple* couple =
|
||||
theCoupleTable->GetMaterialCutsCouple(i);
|
||||
const G4Material* material = couple->GetMaterial();
|
||||
|
||||
// energy interval 0
|
||||
size_t nn = (*(tables[0]))[idx]->GetVectorLength();
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << "======= Zone 0 ======= N= " << nn
|
||||
<< " for " << material->GetName() << G4endl;
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << "======= Zone 0 ======= N= " << nn
|
||||
<< " for " << material->GetName() << G4endl;
|
||||
}
|
||||
for(size_t j=0; j<nn; ++j) {
|
||||
G4double e = (*(tables[0]))[idx]->Energy(j);
|
||||
G4double loge = G4Log(e);
|
||||
sigComp = theCompton->GetLambda(e, couple, loge);
|
||||
sigR = (nullptr != theRayleigh) ?
|
||||
sigR = (nullptr != theRayleigh) ?
|
||||
theRayleigh->GetLambda(e, couple, loge) : 0.0;
|
||||
G4double sum = sigComp + sigR;
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " Rayl= " << sigR << G4endl;
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " Rayl= " << sigR << G4endl;
|
||||
}
|
||||
(*(tables[0]))[idx]->PutValue(j, sum);
|
||||
if(theT[1]) {
|
||||
val = sigR/sum;
|
||||
(*(tables[1]))[idx]->PutValue(j, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// energy interval 1
|
||||
nn = (*(tables[2]))[idx]->GetVectorLength();
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << "======= Zone 1 ======= N= " << nn << G4endl;
|
||||
G4cout << "======= Zone 1 ======= N= " << nn << G4endl;
|
||||
}
|
||||
for(size_t j=0; j<nn; ++j) {
|
||||
G4double e = (*(tables[2]))[idx]->Energy(j);
|
||||
G4double loge = G4Log(e);
|
||||
sigComp = theCompton->GetLambda(e, couple, loge);
|
||||
sigR = (nullptr != theRayleigh) ?
|
||||
sigR = (nullptr != theRayleigh) ?
|
||||
theRayleigh->GetLambda(e, couple, loge) : 0.0;
|
||||
sigPE = thePhotoElectric->GetLambda(e, couple, loge);
|
||||
G4double sum = sigComp + sigR + sigPE;
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " conv= " << sigConv
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " conv= " << sigConv
|
||||
<< " PE= " << sigPE << " Rayl= " << sigR
|
||||
<< " GN= " << sigN << G4endl;
|
||||
<< " GN= " << sigN << G4endl;
|
||||
}
|
||||
(*(tables[2]))[idx]->PutValue(j, sum);
|
||||
|
||||
@@ -358,7 +362,7 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
// energy interval 2
|
||||
nn = (*(tables[6]))[idx]->GetVectorLength();
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << "======= Zone 2 ======= N= " << nn << G4endl;
|
||||
G4cout << "======= Zone 2 ======= N= " << nn << G4endl;
|
||||
}
|
||||
for(size_t j=0; j<nn; ++j) {
|
||||
G4double e = (*(tables[6]))[idx]->Energy(j);
|
||||
@@ -373,11 +377,11 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
}
|
||||
G4double sum = sigComp + sigConv + sigPE + sigN;
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " conv= " << sigConv
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " conv= " << sigConv
|
||||
<< " PE= " << sigPE
|
||||
<< " GN= " << sigN << G4endl;
|
||||
}
|
||||
}
|
||||
(*(tables[6]))[idx]->PutValue(j, sum);
|
||||
|
||||
val = sigConv/sum;
|
||||
@@ -387,14 +391,14 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
(*(tables[8]))[idx]->PutValue(j, val);
|
||||
|
||||
val = (sigN > 0.0) ? (sigConv + sigComp + sigPE)/sum : 1.0;
|
||||
(*(tables[9]))[idx]->PutValue(j, val);
|
||||
(*(tables[9]))[idx]->PutValue(j, val);
|
||||
}
|
||||
|
||||
// energy interval 3
|
||||
nn = (*(tables[10]))[idx]->GetVectorLength();
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << "======= Zone 3 ======= N= " << nn
|
||||
<< " for " << material->GetName() << G4endl;
|
||||
G4cout << "======= Zone 3 ======= N= " << nn
|
||||
<< " for " << material->GetName() << G4endl;
|
||||
}
|
||||
for(size_t j=0; j<nn; ++j) {
|
||||
G4double e = (*(tables[10]))[idx]->Energy(j);
|
||||
@@ -414,11 +418,11 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
}
|
||||
G4double sum = sigComp + sigConv + sigPE + sigN + sigM;
|
||||
if(1 < verboseLevel) {
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " conv= " << sigConv
|
||||
G4cout << j << ". E= " << e << " xs= " << sum
|
||||
<< " compt= " << sigComp << " conv= " << sigConv
|
||||
<< " PE= " << sigPE
|
||||
<< " GN= " << sigN << G4endl;
|
||||
}
|
||||
}
|
||||
(*(tables[10]))[idx]->PutValue(j, sum);
|
||||
|
||||
val = (sigComp + sigPE + sigN + sigM)/sum;
|
||||
@@ -429,14 +433,14 @@ void G4GammaGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part)
|
||||
|
||||
val = (sigN + sigM)/sum;
|
||||
(*(tables[13]))[idx]->PutValue(j, val);
|
||||
|
||||
|
||||
val = sigN/sum;
|
||||
(*(tables[14]))[idx]->PutValue(j, val);
|
||||
}
|
||||
for(size_t k=0; k<nTables; ++k) {
|
||||
if(splineFlag) {
|
||||
(*(tables[k]))[idx]->FillSecondDerivatives();
|
||||
}
|
||||
if(splineFlag) {
|
||||
(*(tables[k]))[idx]->FillSecondDerivatives();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -475,10 +479,13 @@ G4double G4GammaGeneralProcess::PostStepGetPhysicalInteractionLength(
|
||||
G4bool recompute = false;
|
||||
if(couple != currentCouple) {
|
||||
currentCouple = couple;
|
||||
currentCoupleIndex = couple->GetIndex();
|
||||
basedCoupleIndex = (*theDensityIdx)[currentCoupleIndex];
|
||||
factor = (*theDensityFactor)[currentCoupleIndex];
|
||||
basedCoupleIndex = currentCoupleIndex = couple->GetIndex();
|
||||
currentMaterial = couple->GetMaterial();
|
||||
factor = 1.0;
|
||||
if(baseMat) {
|
||||
basedCoupleIndex = DensityIndex(currentCoupleIndex);
|
||||
factor = DensityFactor(currentCoupleIndex);
|
||||
}
|
||||
recompute = true;
|
||||
}
|
||||
if(energy != preStepKinEnergy) {
|
||||
@@ -490,26 +497,26 @@ G4double G4GammaGeneralProcess::PostStepGetPhysicalInteractionLength(
|
||||
preStepLambda = TotalCrossSectionPerVolume();
|
||||
|
||||
// zero cross section
|
||||
if(preStepLambda <= 0.0) {
|
||||
if(preStepLambda <= 0.0) {
|
||||
theNumberOfInteractionLengthLeft = -1.0;
|
||||
currentInteractionLength = DBL_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
// non-zero cross section
|
||||
if(preStepLambda > 0.0) {
|
||||
if(preStepLambda > 0.0) {
|
||||
|
||||
if (theNumberOfInteractionLengthLeft < 0.0) {
|
||||
|
||||
// beggining of tracking (or just after DoIt of this process)
|
||||
theNumberOfInteractionLengthLeft = -G4Log( G4UniformRand() );
|
||||
theInitialNumberOfInteractionLength = theNumberOfInteractionLengthLeft;
|
||||
theInitialNumberOfInteractionLength = theNumberOfInteractionLengthLeft;
|
||||
|
||||
} else if(currentInteractionLength < DBL_MAX) {
|
||||
|
||||
theNumberOfInteractionLengthLeft -=
|
||||
theNumberOfInteractionLengthLeft -=
|
||||
previousStepSize/currentInteractionLength;
|
||||
theNumberOfInteractionLengthLeft =
|
||||
theNumberOfInteractionLengthLeft =
|
||||
std::max(theNumberOfInteractionLengthLeft, 0.0);
|
||||
}
|
||||
|
||||
@@ -518,8 +525,8 @@ G4double G4GammaGeneralProcess::PostStepGetPhysicalInteractionLength(
|
||||
x = theNumberOfInteractionLengthLeft * currentInteractionLength;
|
||||
}
|
||||
/*
|
||||
G4cout << "PostStepGetPhysicalInteractionLength: e= " << energy
|
||||
<< " idxe= " << idxEnergy << " xs= " << preStepLambda
|
||||
G4cout << "PostStepGetPhysicalInteractionLength: e= " << energy
|
||||
<< " idxe= " << idxEnergy << " xs= " << preStepLambda
|
||||
<< " x= " << x << G4endl;
|
||||
*/
|
||||
return x;
|
||||
@@ -531,18 +538,18 @@ G4double G4GammaGeneralProcess::TotalCrossSectionPerVolume()
|
||||
{
|
||||
G4double cross = 0.0;
|
||||
/*
|
||||
G4cout << "#Total: " << preStepKinEnergy << " " << minPEEnergy << " "
|
||||
G4cout << "#Total: " << preStepKinEnergy << " " << minPEEnergy << " "
|
||||
<< minEEEnergy << " " << minMMEnergy<< G4endl;
|
||||
G4cout << " idxE= " << idxEnergy
|
||||
G4cout << " idxE= " << idxEnergy
|
||||
<< " idxC= " << currentCoupleIndex << G4endl;
|
||||
*/
|
||||
if(preStepKinEnergy < minPEEnergy) {
|
||||
cross = ComputeGeneralLambda(0, 0);
|
||||
//G4cout << "XS1: " << cross << G4endl;
|
||||
peLambda = thePhotoElectric->GetLambda(preStepKinEnergy, currentCouple, preStepLogE);
|
||||
cross += peLambda;
|
||||
cross += peLambda;
|
||||
//G4cout << "XS2: " << cross << G4endl;
|
||||
|
||||
|
||||
} else if(preStepKinEnergy < minEEEnergy) {
|
||||
cross = ComputeGeneralLambda(1, 2);
|
||||
//G4cout << "XS3: " << cross << G4endl;
|
||||
@@ -555,9 +562,9 @@ G4double G4GammaGeneralProcess::TotalCrossSectionPerVolume()
|
||||
cross = ComputeGeneralLambda(3, 10);
|
||||
//G4cout << "XS5: " << cross << G4endl;
|
||||
}
|
||||
/*
|
||||
G4cout << "xs= " << cross << " idxE= " << idxEnergy
|
||||
<< " idxC= " << currentCoupleIndex
|
||||
/*
|
||||
G4cout << "xs= " << cross << " idxE= " << idxEnergy
|
||||
<< " idxC= " << currentCoupleIndex
|
||||
<< " E= " << energy << G4endl;
|
||||
*/
|
||||
return cross;
|
||||
@@ -573,13 +580,13 @@ G4VParticleChange* G4GammaGeneralProcess::PostStepDoIt(const G4Track& track,
|
||||
selectedProc = nullptr;
|
||||
G4double q = G4UniformRand();
|
||||
/*
|
||||
G4cout << "PostStep: preStepLambda= " << preStepLambda
|
||||
<< " PE= " << peLambda << " q= " << q << " idxE= " << idxEnergy
|
||||
G4cout << "PostStep: preStepLambda= " << preStepLambda
|
||||
<< " PE= " << peLambda << " q= " << q << " idxE= " << idxEnergy
|
||||
<< G4endl;
|
||||
*/
|
||||
switch (idxEnergy) {
|
||||
case 0:
|
||||
if(preStepLambda*q <= peLambda) {
|
||||
if(preStepLambda*q <= peLambda) {
|
||||
SelectEmProcess(step, thePhotoElectric);
|
||||
} else {
|
||||
if(theT[1] && preStepLambda*q < preStepLambda*GetProbability(1) + peLambda) {
|
||||
@@ -600,7 +607,7 @@ G4VParticleChange* G4GammaGeneralProcess::PostStepDoIt(const G4Track& track,
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case 2:
|
||||
if(q <= GetProbability(7)) {
|
||||
SelectEmProcess(step, theConversionEE);
|
||||
} else if(q <= GetProbability(8)) {
|
||||
@@ -612,7 +619,7 @@ G4VParticleChange* G4GammaGeneralProcess::PostStepDoIt(const G4Track& track,
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 3:
|
||||
if(q + GetProbability(11) <= 1.0) {
|
||||
SelectEmProcess(step, theConversionEE);
|
||||
} else if(q + GetProbability(12) <= 1.0) {
|
||||
@@ -627,8 +634,8 @@ G4VParticleChange* G4GammaGeneralProcess::PostStepDoIt(const G4Track& track,
|
||||
break;
|
||||
}
|
||||
// sample secondaries
|
||||
if(selectedProc != nullptr) {
|
||||
return selectedProc->PostStepDoIt(track, step);
|
||||
if(selectedProc != nullptr) {
|
||||
return selectedProc->PostStepDoIt(track, step);
|
||||
}
|
||||
// no interaction - exception case
|
||||
fParticleChange.InitializeForPostStep(track);
|
||||
@@ -653,7 +660,7 @@ G4bool G4GammaGeneralProcess::StorePhysicsTable(const G4ParticleDefinition* part
|
||||
{
|
||||
G4bool yes = true;
|
||||
if(!isTheMaster) { return yes; }
|
||||
if(!thePhotoElectric->StorePhysicsTable(part, directory, ascii))
|
||||
if(!thePhotoElectric->StorePhysicsTable(part, directory, ascii))
|
||||
{ yes = false; }
|
||||
if(!theCompton->StorePhysicsTable(part, directory, ascii))
|
||||
{ yes = false; }
|
||||
@@ -665,7 +672,7 @@ G4bool G4GammaGeneralProcess::StorePhysicsTable(const G4ParticleDefinition* part
|
||||
|
||||
for(size_t i=0; i<nTables; ++i) {
|
||||
if(theT[i]) {
|
||||
G4String nam = (0==i || 2==i || 6==i || 10==i)
|
||||
G4String nam = (0==i || 2==i || 6==i || 10==i)
|
||||
? "LambdaGeneral" + nameT[i] : "ProbGeneral" + nameT[i];
|
||||
G4String fnam = GetPhysicsTableFileName(part,directory,nam,ascii);
|
||||
if(!theHandler->StorePhysicsTable(i, part, fnam, ascii)) { yes = false; }
|
||||
@@ -676,7 +683,7 @@ G4bool G4GammaGeneralProcess::StorePhysicsTable(const G4ParticleDefinition* part
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....
|
||||
|
||||
G4bool
|
||||
G4bool
|
||||
G4GammaGeneralProcess::RetrievePhysicsTable(const G4ParticleDefinition* part,
|
||||
const G4String& directory,
|
||||
G4bool ascii)
|
||||
@@ -687,7 +694,7 @@ G4GammaGeneralProcess::RetrievePhysicsTable(const G4ParticleDefinition* part,
|
||||
<< GetProcessName() << G4endl;
|
||||
}
|
||||
G4bool yes = true;
|
||||
if(!thePhotoElectric->RetrievePhysicsTable(part, directory, ascii))
|
||||
if(!thePhotoElectric->RetrievePhysicsTable(part, directory, ascii))
|
||||
{ yes = false; }
|
||||
if(!theCompton->RetrievePhysicsTable(part, directory, ascii))
|
||||
{ yes = false; }
|
||||
@@ -699,10 +706,10 @@ G4GammaGeneralProcess::RetrievePhysicsTable(const G4ParticleDefinition* part,
|
||||
|
||||
for(size_t i=0; i<nTables; ++i) {
|
||||
if(theT[i]) {
|
||||
G4String nam = (0==i || 2==i || 6==i || 10==i)
|
||||
G4String nam = (0==i || 2==i || 6==i || 10==i)
|
||||
? "LambdaGeneral" + nameT[i] : "ProbGeneral" + nameT[i];
|
||||
G4String fnam = GetPhysicsTableFileName(part,directory,nam,ascii);
|
||||
if(!theHandler->RetrievePhysicsTable(i, part, fnam, ascii, splineFlag))
|
||||
if(!theHandler->RetrievePhysicsTable(i, part, fnam, ascii, splineFlag))
|
||||
{ yes = false; }
|
||||
}
|
||||
}
|
||||
@@ -726,7 +733,7 @@ G4double G4GammaGeneralProcess::GetMeanFreePath(const G4Track& track,
|
||||
void G4GammaGeneralProcess::ProcessDescription(std::ostream& out) const
|
||||
{
|
||||
thePhotoElectric->ProcessDescription(out);
|
||||
theCompton->ProcessDescription(out);
|
||||
theCompton->ProcessDescription(out);
|
||||
theConversionEE->ProcessDescription(out);
|
||||
if(theRayleigh) { theRayleigh->ProcessDescription(out); }
|
||||
if(theGammaNuclear) { theGammaNuclear->ProcessDescription(out); }
|
||||
@@ -737,7 +744,7 @@ void G4GammaGeneralProcess::ProcessDescription(std::ostream& out) const
|
||||
|
||||
const G4String& G4GammaGeneralProcess::GetSubProcessName() const
|
||||
{
|
||||
return (selectedProc) ? selectedProc->GetProcessName()
|
||||
return (selectedProc) ? selectedProc->GetProcessName()
|
||||
: G4VProcess::GetProcessName();
|
||||
}
|
||||
|
||||
@@ -745,8 +752,8 @@ const G4String& G4GammaGeneralProcess::GetSubProcessName() const
|
||||
|
||||
G4int G4GammaGeneralProcess::GetSubProcessSubType() const
|
||||
{
|
||||
return (selectedProc) ? selectedProc->GetProcessSubType()
|
||||
: fGammaGeneralProcess;
|
||||
return (selectedProc) ? selectedProc->GetProcessSubType()
|
||||
: fGammaGeneralProcess;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -37,22 +37,20 @@
|
||||
//
|
||||
|
||||
#include "G4OpticalPhysics.hh"
|
||||
#include "G4OpticalParameters.hh"
|
||||
|
||||
#include "G4Cerenkov.hh"
|
||||
#include "G4EmSaturation.hh"
|
||||
#include "G4LossTableManager.hh"
|
||||
#include "G4OpAbsorption.hh"
|
||||
#include "G4OpBoundaryProcess.hh"
|
||||
#include "G4OpRayleigh.hh"
|
||||
#include "G4OpMieHG.hh"
|
||||
#include "G4OpBoundaryProcess.hh"
|
||||
#include "G4OpticalParameters.hh"
|
||||
#include "G4OpWLS.hh"
|
||||
#include "G4OpWLS2.hh"
|
||||
#include "G4Scintillation.hh"
|
||||
#include "G4Cerenkov.hh"
|
||||
|
||||
#include "G4LossTableManager.hh"
|
||||
#include "G4EmSaturation.hh"
|
||||
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4Scintillation.hh"
|
||||
|
||||
// factory
|
||||
#include "G4PhysicsConstructorFactory.hh"
|
||||
@@ -67,8 +65,7 @@ G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
G4OpticalPhysics::~G4OpticalPhysics()
|
||||
{}
|
||||
G4OpticalPhysics::~G4OpticalPhysics() {}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
void G4OpticalPhysics::PrintStatistics() const
|
||||
@@ -85,79 +82,93 @@ void G4OpticalPhysics::ConstructParticle()
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
void G4OpticalPhysics::ConstructProcess()
|
||||
{
|
||||
if(verboseLevel>0)
|
||||
G4cout <<"G4OpticalPhysics:: Add Optical Physics Processes"<< G4endl;
|
||||
if(verboseLevel > 0)
|
||||
G4cout << "G4OpticalPhysics:: Add Optical Physics Processes" << G4endl;
|
||||
|
||||
auto params = G4OpticalParameters::Instance();
|
||||
|
||||
// Add Optical Processes
|
||||
|
||||
G4ProcessManager* pManager = G4OpticalPhoton::OpticalPhoton()->GetProcessManager();
|
||||
if (!pManager) {
|
||||
G4ExceptionDescription ed;
|
||||
ed << "Optical Photon without a Process Manager";
|
||||
G4Exception("G4OpticalPhysics::ConstructProcess()","",
|
||||
FatalException,ed);
|
||||
return;
|
||||
G4ProcessManager* pManager =
|
||||
G4OpticalPhoton::OpticalPhoton()->GetProcessManager();
|
||||
if(!pManager)
|
||||
{
|
||||
G4ExceptionDescription ed;
|
||||
ed << "Optical Photon without a Process Manager";
|
||||
G4Exception("G4OpticalPhysics::ConstructProcess()", "", FatalException, ed);
|
||||
return;
|
||||
}
|
||||
|
||||
G4OpAbsorption* absorption = new G4OpAbsorption();
|
||||
if (params->GetProcessActivation("OpAbsorption")) pManager->AddDiscreteProcess(absorption);
|
||||
G4OpAbsorption* absorption = new G4OpAbsorption();
|
||||
if(params->GetProcessActivation("OpAbsorption"))
|
||||
pManager->AddDiscreteProcess(absorption);
|
||||
|
||||
G4OpRayleigh* rayleigh = new G4OpRayleigh();
|
||||
if (params->GetProcessActivation("OpRayleigh")) pManager->AddDiscreteProcess(rayleigh);
|
||||
if(params->GetProcessActivation("OpRayleigh"))
|
||||
pManager->AddDiscreteProcess(rayleigh);
|
||||
|
||||
G4OpMieHG* mie = new G4OpMieHG();
|
||||
if (params->GetProcessActivation("OpMieHG")) pManager->AddDiscreteProcess(mie);
|
||||
if(params->GetProcessActivation("OpMieHG"))
|
||||
pManager->AddDiscreteProcess(mie);
|
||||
|
||||
G4OpBoundaryProcess* boundary = new G4OpBoundaryProcess();
|
||||
if (params->GetProcessActivation("OpBoundary")) pManager->AddDiscreteProcess(boundary);
|
||||
if(params->GetProcessActivation("OpBoundary"))
|
||||
pManager->AddDiscreteProcess(boundary);
|
||||
|
||||
G4OpWLS* wls = new G4OpWLS();
|
||||
if (params->GetProcessActivation("OpWLS")) pManager->AddDiscreteProcess(wls);
|
||||
if(params->GetProcessActivation("OpWLS"))
|
||||
pManager->AddDiscreteProcess(wls);
|
||||
|
||||
G4OpWLS2* wls2 = new G4OpWLS2();
|
||||
if (params->GetProcessActivation("OpWLS2")) pManager->AddDiscreteProcess(wls2);
|
||||
if(params->GetProcessActivation("OpWLS2"))
|
||||
pManager->AddDiscreteProcess(wls2);
|
||||
|
||||
G4Scintillation* scint = new G4Scintillation();
|
||||
G4Scintillation* scint = new G4Scintillation();
|
||||
G4EmSaturation* emSaturation = G4LossTableManager::Instance()->EmSaturation();
|
||||
scint->AddSaturation(emSaturation);
|
||||
|
||||
G4Cerenkov* cerenkov = new G4Cerenkov();
|
||||
|
||||
auto myParticleIterator=GetParticleIterator();
|
||||
auto myParticleIterator = GetParticleIterator();
|
||||
myParticleIterator->reset();
|
||||
|
||||
while( (*myParticleIterator)() ){
|
||||
|
||||
while((*myParticleIterator)())
|
||||
{
|
||||
G4ParticleDefinition* particle = myParticleIterator->value();
|
||||
G4String particleName = particle->GetParticleName();
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
pManager = particle->GetProcessManager();
|
||||
if (!pManager) {
|
||||
G4ExceptionDescription ed;
|
||||
ed << "Particle " << particleName << "without a Process Manager";
|
||||
G4Exception("G4OpticalPhysics::ConstructProcess()","",
|
||||
FatalException, ed);
|
||||
return; // else coverity complains for pManager use below
|
||||
if(!pManager)
|
||||
{
|
||||
G4ExceptionDescription ed;
|
||||
ed << "Particle " << particleName << "without a Process Manager";
|
||||
G4Exception("G4OpticalPhysics::ConstructProcess()", "", FatalException,
|
||||
ed);
|
||||
return; // else coverity complains for pManager use below
|
||||
}
|
||||
|
||||
if (cerenkov->IsApplicable(*particle) && params->GetProcessActivation("Cerenkov")) {
|
||||
pManager->AddProcess(cerenkov);
|
||||
pManager->SetProcessOrdering(cerenkov,idxPostStep);
|
||||
if(cerenkov->IsApplicable(*particle) &&
|
||||
params->GetProcessActivation("Cerenkov"))
|
||||
{
|
||||
pManager->AddProcess(cerenkov);
|
||||
pManager->SetProcessOrdering(cerenkov, idxPostStep);
|
||||
}
|
||||
if (scint->IsApplicable(*particle) && params->GetProcessActivation("Scintillation")) {
|
||||
pManager->AddProcess(scint);
|
||||
pManager->SetProcessOrderingToLast(scint,idxAtRest);
|
||||
pManager->SetProcessOrderingToLast(scint,idxPostStep);
|
||||
if(scint->IsApplicable(*particle) &&
|
||||
params->GetProcessActivation("Scintillation"))
|
||||
{
|
||||
pManager->AddProcess(scint);
|
||||
pManager->SetProcessOrderingToLast(scint, idxAtRest);
|
||||
pManager->SetProcessOrderingToLast(scint, idxPostStep);
|
||||
}
|
||||
if (boundary->IsApplicable(*particle) && params->GetProcessActivation("OpBoundary")) {
|
||||
pManager->SetProcessOrderingToLast(boundary,idxPostStep);
|
||||
if(boundary->IsApplicable(*particle) &&
|
||||
params->GetProcessActivation("OpBoundary"))
|
||||
{
|
||||
pManager->SetProcessOrderingToLast(boundary, idxPostStep);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (verboseLevel > 1) PrintStatistics();
|
||||
if (verboseLevel > 0)
|
||||
if(verboseLevel > 1)
|
||||
PrintStatistics();
|
||||
if(verboseLevel > 0)
|
||||
G4cout << "### " << namePhysics << " physics constructed." << G4endl;
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4PhysicsConstructorFactory
|
||||
---------------------------
|
||||
|
||||
G4PhysicsConstructorRegistry
|
||||
----------------------------
|
||||
|
||||
@@ -13,6 +13,22 @@ introduced in the code and keeptrack of all tags.
|
||||
* Reverse chronological order (last date on top), please *
|
||||
----------------------------------------------------------
|
||||
|
||||
10 November 2021 Vladimir Ivanchenko (phys-ctor-glnuclear-V10-07-06)
|
||||
- G4EmExtraPhysics - added an option for positron annihilation to tau pair
|
||||
|
||||
20 August 2021 Vladimir Ivanchenko (phys-ctor-glnuclear-V10-07-05)
|
||||
- G4EmExtraPhysics - enable synkrotron radiation only for really stable
|
||||
particles
|
||||
|
||||
16 August 2021 Jonas Hahnfeld (phys-ctor-glnuclear-V10-07-04)
|
||||
- G4EmExtraPhysics - fix typo to register positron-nuclear process,
|
||||
register model for e-/e+-nuclear in case of general processes,
|
||||
avoid registering synchroton radiation twice for e-/e+
|
||||
|
||||
13 August 2021 Vladimir Ivanchenko (phys-ctor-glnuclear-V10-07-03)
|
||||
- G4EmExtraPhysics - enable updated G4GammaNuclearXS by default
|
||||
for more detailed tests
|
||||
|
||||
16 April 2021 Ben Morgan (phys-ctor-glnuclear-V10-07-02)
|
||||
- Migrate build to modular CMake API
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4BertiniElectroNuclearBuilder
|
||||
------------------------------
|
||||
It includes gamma-nuclear, electron-nuclear and positron-nuclear
|
||||
processes.
|
||||
For gamma-nuclear, it uses Bertini (BERT) model for gamma below 6 GeV,
|
||||
and Quark-Gluon-String (QGS) model above 3 GeV.
|
||||
For electron-nuclear and positron-nuclear, it uses the equivalent photon
|
||||
approximation in which the incoming lepton generates a virtual photon,
|
||||
and then the virtual photon is converted to a real photon. This real
|
||||
photon is handled by BERT if its energy is below 10 GeV; if it is above
|
||||
10 GeV, then the real photon is transformed into a (on-shell) pi0 and
|
||||
then handled by Fritiof (FTF) string model.
|
||||
|
||||
|
||||
G4EmExtraPhysics
|
||||
----------------
|
||||
It uses G4BertiniElectroNuclearBuilder for gamma-nuclear, electron-nuclear
|
||||
and positron-nuclear.
|
||||
Moreover, it includes muon-nuclear process (for mu- and mu+), and
|
||||
synchrotron process (either for electron & positron, or for all
|
||||
charged particles).
|
||||
The muon-nuclear process is treated similarly as for electrons and
|
||||
positrons (i.e. the equivalent photon approximation in which the incoming
|
||||
lepton generates a virtual photon, and then the virtual photon is converted
|
||||
to a real photon, which is handled by BERT below 10 GeV or by FTF as a pi0
|
||||
above 10 GeV).
|
||||
By default, gamma-nuclear, electron-nuclear, positron-nuclear, and
|
||||
muon-nuclear are switched on, whereas synchrotron process is switched off
|
||||
for all particles. It is however possible, at run time via macro commands,
|
||||
to change this default (see G4EmMessenger below).
|
||||
|
||||
|
||||
G4EmMessenger
|
||||
-------------
|
||||
Used by G4EmExtraPhysics to be able to switch on/off:
|
||||
- synchrotron radiation for electron and positron
|
||||
(note: electron and positron together, not individually)
|
||||
- synchrotron radiation for all charged particles
|
||||
(note: all charged particles together, not individually)
|
||||
- gamma-nuclear, electron-nuclear and positron-nuclear
|
||||
(note: all these three particles together, not individually)
|
||||
- muon-nuclear
|
||||
(note: mu- and mu+ together, not individually)
|
||||
at run time, via macro commands.
|
||||
|
||||
@@ -61,6 +61,12 @@
|
||||
#include "G4AntiNeutrinoTau.hh"
|
||||
#include "G4NeutrinoTau.hh"
|
||||
|
||||
#include "G4Proton.hh"
|
||||
#include "G4AntiProton.hh"
|
||||
#include "G4PionPlus.hh"
|
||||
#include "G4PionMinus.hh"
|
||||
#include "G4GenericIon.hh"
|
||||
|
||||
#include "G4SynchrotronRadiation.hh"
|
||||
#include "G4MuonNuclearProcess.hh"
|
||||
#include "G4MuonVDNuclearModel.hh"
|
||||
@@ -113,6 +119,7 @@
|
||||
#include "G4HadronicParameters.hh"
|
||||
#include "G4PhysicsListHelper.hh"
|
||||
#include "G4BuilderType.hh"
|
||||
#include "G4CrossSectionDataSetRegistry.hh"
|
||||
|
||||
// factory
|
||||
#include "G4PhysicsConstructorFactory.hh"
|
||||
@@ -134,7 +141,7 @@ G4EmExtraPhysics::G4EmExtraPhysics(G4int ver):
|
||||
phadActivated (false),
|
||||
fNuActivated (false),
|
||||
fNuETotXscActivated (false),
|
||||
fUseGammaNuclearXS(false),
|
||||
fUseGammaNuclearXS(true),
|
||||
gmumuFactor (1.0),
|
||||
pmumuFactor (1.0),
|
||||
phadFactor (1.0),
|
||||
@@ -314,8 +321,8 @@ void G4EmExtraPhysics::ConstructProcess()
|
||||
G4GammaConversionToMuons* theGammaToMuMu = new G4GammaConversionToMuons();
|
||||
theGammaToMuMu->SetCrossSecFactor(gmumuFactor);
|
||||
G4GammaGeneralProcess* sp =
|
||||
(G4GammaGeneralProcess*)emManager->GetGammaGeneralProcess();
|
||||
if(sp) {
|
||||
static_cast<G4GammaGeneralProcess*>(emManager->GetGammaGeneralProcess());
|
||||
if(nullptr != sp) {
|
||||
sp->AddMMProcess(theGammaToMuMu);
|
||||
} else {
|
||||
ph->RegisterProcess(theGammaToMuMu, gamma);
|
||||
@@ -325,6 +332,9 @@ void G4EmExtraPhysics::ConstructProcess()
|
||||
G4AnnihiToMuPair* thePosiToMuMu = new G4AnnihiToMuPair();
|
||||
thePosiToMuMu->SetCrossSecFactor(pmumuFactor);
|
||||
ph->RegisterProcess(thePosiToMuMu, positron);
|
||||
G4AnnihiToMuPair* thePosiToTauTau = new G4AnnihiToMuPair("AnnihiToTauPair");
|
||||
thePosiToTauTau->SetCrossSecFactor(pmumuFactor);
|
||||
ph->RegisterProcess(thePosiToTauTau, positron);
|
||||
}
|
||||
if(phadActivated) {
|
||||
G4eeToHadrons* thePosiToHadrons = new G4eeToHadrons();
|
||||
@@ -336,20 +346,14 @@ void G4EmExtraPhysics::ConstructProcess()
|
||||
ph->RegisterProcess( theSynchRad, electron);
|
||||
ph->RegisterProcess( theSynchRad, positron);
|
||||
if(synActivatedForAll) {
|
||||
auto myParticleIterator=GetParticleIterator();
|
||||
myParticleIterator->reset();
|
||||
G4ParticleDefinition* particle = nullptr;
|
||||
ph->RegisterProcess( theSynchRad, muonplus);
|
||||
ph->RegisterProcess( theSynchRad, muonminus);
|
||||
|
||||
while( (*myParticleIterator)() ) {
|
||||
particle = myParticleIterator->value();
|
||||
if( particle->GetPDGStable() && particle->GetPDGCharge() != 0.0) {
|
||||
if(verbose > 1) {
|
||||
G4cout << "### G4SynchrotronRadiation for "
|
||||
<< particle->GetParticleName() << G4endl;
|
||||
}
|
||||
ph->RegisterProcess( theSynchRad, particle);
|
||||
}
|
||||
}
|
||||
ph->RegisterProcess( theSynchRad, G4Proton::Proton());
|
||||
ph->RegisterProcess( theSynchRad, G4AntiProton::AntiProton());
|
||||
ph->RegisterProcess( theSynchRad, G4PionPlus::PionPlus());
|
||||
ph->RegisterProcess( theSynchRad, G4PionMinus::PionMinus());
|
||||
ph->RegisterProcess( theSynchRad, G4GenericIon::GenericIon());
|
||||
}
|
||||
}
|
||||
if( fNuActivated )
|
||||
@@ -444,11 +448,17 @@ void G4EmExtraPhysics::ConstructGammaElectroNuclear()
|
||||
G4LossTableManager* emManager = G4LossTableManager::Instance();
|
||||
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
|
||||
|
||||
G4HadronInelasticProcess* gnuc = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Definition() );
|
||||
gnuc->AddDataSet( new G4PhotoNuclearCrossSection );
|
||||
G4HadronInelasticProcess* gnuc = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Gamma() );
|
||||
auto xsreg = G4CrossSectionDataSetRegistry::Instance();
|
||||
G4VCrossSectionDataSet* xs = nullptr;
|
||||
if(fUseGammaNuclearXS) {
|
||||
gnuc->AddDataSet(new G4GammaNuclearXS());
|
||||
xs = xsreg->GetCrossSectionDataSet("GammaNuclearXS");
|
||||
if(nullptr == xs) xs = new G4GammaNuclearXS();
|
||||
} else {
|
||||
xs = xsreg->GetCrossSectionDataSet("PhotoNuclearXS");
|
||||
if(nullptr == xs) xs = new G4PhotoNuclearCrossSection();
|
||||
}
|
||||
gnuc->AddDataSet(xs);
|
||||
|
||||
G4QGSModel< G4GammaParticipants >* theStringModel =
|
||||
new G4QGSModel< G4GammaParticipants >;
|
||||
@@ -495,12 +505,14 @@ void G4EmExtraPhysics::ConstructGammaElectroNuclear()
|
||||
G4PositronNuclearProcess* pnuc = new G4PositronNuclearProcess;
|
||||
G4ElectroVDNuclearModel* eModel = new G4ElectroVDNuclearModel;
|
||||
|
||||
enuc->RegisterMe(eModel);
|
||||
pnuc->RegisterMe(eModel);
|
||||
|
||||
G4GammaGeneralProcess* eproc =
|
||||
(G4GammaGeneralProcess*)emManager->GetElectronGeneralProcess();
|
||||
if(eproc != nullptr) {
|
||||
eproc->AddHadProcess(enuc);
|
||||
} else {
|
||||
enuc->RegisterMe(eModel);
|
||||
ph->RegisterProcess(enuc, G4Electron::Electron());
|
||||
}
|
||||
|
||||
@@ -509,8 +521,7 @@ void G4EmExtraPhysics::ConstructGammaElectroNuclear()
|
||||
if(pproc != nullptr) {
|
||||
pproc->AddHadProcess(pnuc);
|
||||
} else {
|
||||
pnuc->RegisterMe(eModel);
|
||||
ph->RegisterProcess(enuc, G4Positron::Positron());
|
||||
ph->RegisterProcess(pnuc, G4Positron::Positron());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4HadronElasticPhysics
|
||||
----------------------
|
||||
Hadron nuclear elastic process for all hadrons:
|
||||
- proton
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: Chips
|
||||
- neutron:
|
||||
- cross section: G4NeutronElasticXS
|
||||
- final-state: Chips
|
||||
- charged pions:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: Starkov's model (G4ElasticHadrNucleusHE) for all energies
|
||||
- kaons, hyperons, anti-hyperons, charm and bottom hadrons
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: Gheisha
|
||||
- deuteron, triton, He3, alpha
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: Gheisha
|
||||
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3,
|
||||
anti_alpha
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
|
||||
Gheisha below.
|
||||
|
||||
G4HadronElasticPhysicsHP
|
||||
------------------------
|
||||
As G4HadronElasticPhysics, with the only difference that for neutrons
|
||||
below 20 MeV, NeutronHP elastic is used (for both cross section and
|
||||
final-state model).
|
||||
|
||||
G4HadronElasticPhysicsLEND
|
||||
--------------------------
|
||||
As G4HadronElasticPhysics, with the only difference that for neutrons
|
||||
below 20 MeV, LEND elastic is used (for both cross section and
|
||||
final-state model).
|
||||
|
||||
G4HadronElasticPhysicsXS
|
||||
------------------------
|
||||
Now exactly as G4HadronElasticPhysics.
|
||||
|
||||
G4HadronHElasticPhysics
|
||||
-----------------------
|
||||
- proton
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- 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,
|
||||
above 10 MeV, and Gheisha below
|
||||
- charged pions:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- 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: Gheisha
|
||||
- deuteron, triton, He3, alpha
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: Gheisha
|
||||
- anti_proton, anti_neutron
|
||||
- cross section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
|
||||
Chips below.
|
||||
- anti_deuteron, anti_triton, anti_He3, anti_alpha
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
|
||||
Gheisha below.
|
||||
|
||||
G4IonElasticPhysics
|
||||
-------------------
|
||||
As G4HadronElasticPhysics, with the addition of elastic process for
|
||||
generic ion:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: Diffuse model
|
||||
|
||||
|
||||
G4HadronDElasticPhysics
|
||||
-----------------------
|
||||
Hadron nuclear elastic process for all hadrons:
|
||||
- proton and charged pions:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: Diffuse model where applicable, else Gheisha
|
||||
- neutron:
|
||||
- cross section: G4NeutronElasticXS
|
||||
- final-state: Diffuse model where applicable, else Gheisha
|
||||
- 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,
|
||||
anti_alpha
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: Galoyan-Uzhinsky model above 100 MeV/nucleon,
|
||||
Gheisha below.
|
||||
|
||||
G4ChargeExchangePhysics
|
||||
-----------------------
|
||||
Hadron nuclear coherent charge exchange, used in this constructor
|
||||
only for nucleons and charged pions.
|
||||
|
||||
@@ -1,282 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4HadronInelasticQBBC
|
||||
---------------------
|
||||
Hadron nuclear inelastic processes for all hadrons:
|
||||
- proton inelastic:
|
||||
- cross section: G4ParticleInelasticXS
|
||||
- final-state: Fritiof coupled with Precompound/de-excitation (FTFP) above 3 GeV;
|
||||
Bertini (BERT) between 1 and 6 GeV;
|
||||
Binary coupled with Precompound/de-excitation (BIC) below 1.5 GeV
|
||||
- neutron inelastic:
|
||||
- cross section: G4NeutronInelasticXS
|
||||
- final-state: FTFP > 3 GeV; 1 GeV < BERT < 6 GeV; BIC < 1.5 GeV
|
||||
neutron capture:
|
||||
- cross section: G4NeutronCaptureXS
|
||||
- final-state: G4NeutronRadCapture
|
||||
- charged pions inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: FTFP > 3 GeV; 1 GeV < BERT < 12 GeV; BIC < 1.5 GeV
|
||||
- kaons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
- hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
- anti_hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
- charm and bottom hadrons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
|
||||
|
||||
G4HadronPhysicsFTFP_BERT
|
||||
------------------------
|
||||
Hadron nuclear inelastic processes for all hadrons:
|
||||
- proton inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
- neutron inelastic:
|
||||
- cross section: G4NeutronInelasticXS
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
neutron capture:
|
||||
- cross section: G4NeutronCaptureXS
|
||||
- final-state: G4NeutronRadCapture
|
||||
- charged pions inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
- kaons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
- hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP > 3 GeV; BERT < 6 GeV
|
||||
- anti_proton, anti_neutron, anti_deuteron, anti_triton, anti_He3, anti_alpha inelastic:
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
- anti_hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
- charm and bottom hadrons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
|
||||
|
||||
G4HadronPhysicsFTFP_BERT_ATL
|
||||
----------------------------
|
||||
Similar to G4HadronPhysicsFTFP_BERT, with the difference that for proton,
|
||||
neutron, pions and kaons, the FTFP is used above 9 GeV and BERT below 12 GeV
|
||||
(i.e. transition between these two models is in the interval [9, 12] GeV
|
||||
for the most frequent hadrons).
|
||||
|
||||
|
||||
G4HadronPhysicsFTFP_BERT_HP
|
||||
--------------------------
|
||||
Similar to G4HadronPhysicsFTFP_BERT, but with a different treatment of
|
||||
low-energy neutrons:
|
||||
- neutron inelastic: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section;
|
||||
final-state: BERT between 19.9 MeV and 6 GeV,
|
||||
FTFP above 3 GeV.
|
||||
- neutron capture: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section
|
||||
and G4NeutronRadCapture final-state.
|
||||
- neutron fission: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above Gheisha (cross section and final state).
|
||||
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
|
||||
|
||||
|
||||
G4HadronPhysicsFTFP_BERT_TRV
|
||||
----------------------------
|
||||
The same as G4HadronPhysicsFTFP_BERT.
|
||||
|
||||
|
||||
G4HadronPhysicsFTF_BIC
|
||||
----------------------
|
||||
Similar to G4HadronPhysicsFTFP_BERT, with the following differences:
|
||||
- For proton and neutron, BIC is used (instead of BERT) below 6 GeV
|
||||
- For pions, BIC is used below 1.5 GeV, whereas BERT is used in the
|
||||
interval 1 GeV < BERT < 6 GeV
|
||||
- FTF is coupled with BIC (instead of directly to Precompound/de-excitation).
|
||||
|
||||
|
||||
G4HadronPhysicsQGS_BIC
|
||||
----------------------
|
||||
Similar to G4HadronPhysicsFTP_BIC, except that QGSP is used above 12 GeV
|
||||
and FTFP below 25 GeV.
|
||||
|
||||
|
||||
G4HadronPhysicsFTFQGSP_BERT
|
||||
---------------------------
|
||||
Similar to G4HadronPhysicsFTFP_BERT, but with QGS fragmentation of strings
|
||||
(instead of the Lund string fragmentation).
|
||||
|
||||
|
||||
G4HadronPhysicsINCLXX
|
||||
---------------------
|
||||
Similar to QGSP_BERT except for:
|
||||
- proton inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
|
||||
- final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV
|
||||
- neutron inelastic:
|
||||
- cross section: G4NeutronInelasticXS
|
||||
- final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV
|
||||
- charged pions inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: QGSP > 15 GeV; 1 MeV < INCLXX < 20 GeV; Preco < 2 MeV
|
||||
- kaons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 14 GeV; BERT < 15 GeV
|
||||
Note: it is possible to specify in the constructor the use of FTFP
|
||||
instead of QGSP;
|
||||
moreover, NeutronHP can also be activated in the constructor,
|
||||
in which case inelastic, capture and fission below 20 MeV are
|
||||
taken from NeutronHP (both cross section and final-state).
|
||||
|
||||
|
||||
G4HadronPhysicsNuBeam
|
||||
---------------------
|
||||
Similar to FTFP_BERT, except for the final-state models of proton:
|
||||
- proton : QGSP with Lund string fragmentation > 100 GeV;
|
||||
3 GeV < FTFP < 101 GeV; BERT < 6 GeV
|
||||
|
||||
|
||||
G4HadronPhysicsQGSP_BERT
|
||||
------------------------
|
||||
Hadron nuclear inelastic processes for all hadrons:
|
||||
- proton inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- neutron inelastic:
|
||||
- cross section: G4NeutronInelasticXS
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
neutron capture:
|
||||
- cross section: G4NeutronCaptureXS
|
||||
- final-state: G4NeutronRadCapture
|
||||
- charged pions inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- kaons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- anti_proton and anti_neutron inelastic:
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
|
||||
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
- anti_hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
|
||||
- charm and bottom hadrons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
|
||||
|
||||
|
||||
G4HadronPhysicsQGSP_FTFP_BERT
|
||||
-----------------------------
|
||||
Currently it is the same as QGSP_BERT (this was not the case before G4 10.6).
|
||||
It might be removed in future versions of Geant4.
|
||||
|
||||
|
||||
G4HadronPhysicsQGSP_BERT_HP
|
||||
---------------------------
|
||||
Similar to G4HadronPhysicsQGSP_BERT, but with a different treatment of
|
||||
low-energy neutrons:
|
||||
- neutron inelastic: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section;
|
||||
final-state: BERT between 19.9 MeV and 6 GeV,
|
||||
FTFP between 3 and 25 GeV, QGSP above 12 GeV.
|
||||
- neutron capture: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section
|
||||
and G4NeutronRadCapture final-state.
|
||||
- neutron fission: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above Gheisha (cross section and final state).
|
||||
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
|
||||
|
||||
|
||||
G4HadronPhysicsQGSP_BIC
|
||||
-----------------------
|
||||
Hadron nuclear inelastic processes for all hadrons:
|
||||
- proton inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov (G4BGGNucleonInelasticXS)
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BIC < 6 GeV
|
||||
- neutron inelastic:
|
||||
- cross section: G4NeutronInelasticXS
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BIC < 6 GeV
|
||||
neutron capture:
|
||||
- cross section: G4NeutronCaptureXS
|
||||
- final-state: G4NeutronRadCapture
|
||||
- charged pions inelastic:
|
||||
- cross section: Barashenkov-Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- kaons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; BERT < 6 GeV
|
||||
- anti_proton and anti_neutron inelastic:
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
|
||||
- anti_deuteron, anti_triton, anti_He3, and anti_alpha inelastic:
|
||||
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
|
||||
- final-state: FTFP for all energies
|
||||
- anti_hyperons inelastic:
|
||||
- cross section: Glauber-Gribov
|
||||
- final-state: QGSP > 12 GeV; FTFP < 25 GeV
|
||||
|
||||
|
||||
G4HadronPhysicsQGSP_BIC_HP
|
||||
--------------------------
|
||||
Similar to G4HadronPhysicsQGSP_BIC, but with a different treatment of
|
||||
low-energy neutrons:
|
||||
- neutron inelastic: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section;
|
||||
final-state: BIC between 19.9 MeV and 6 GeV,
|
||||
FTFP between 3 and 25 GeV, QGSP above 12 GeV.
|
||||
- neutron capture: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section
|
||||
and G4NeutronRadCapture final-state.
|
||||
- neutron fission: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above Gheisha (cross section and final state).
|
||||
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
|
||||
|
||||
|
||||
G4HadronPhysicsQGSP_BIC_AllHP
|
||||
-----------------------------
|
||||
Similar to G4HadronPhysicsQGSP_BIC_HP, but with a different treatment of
|
||||
low-energy protons:
|
||||
ParticleHP is used (for both cross section and final state) below 200 MeV;
|
||||
above it: Barashenkov-Glauber-Gribov inelastic cross section;
|
||||
final-state: QGSP > 12 GeV; 3 GeV < FTFP < 25 GeV; 190 MeV < BIC < 6 GeV.
|
||||
|
||||
|
||||
G4HadronPhysicsShielding
|
||||
------------------------
|
||||
Similar to G4HadronPhysicsFTFP_BERT_HP except for using
|
||||
JENDLHEInelasticCrossSection for the neutron inelastic cross section
|
||||
above 20 MeV.
|
||||
Note: the variant "M" of the Shielding physics list has a transition region
|
||||
between FTFP and BERT for pions between 9.5 and 9.9 GeV
|
||||
(instead of 3-6 GeV).
|
||||
|
||||
|
||||
G4HadronPhysicsShieldingLEND
|
||||
----------------------------
|
||||
Similar to G4HadronPhysicsShielding, except that LEND is used for neutrons
|
||||
below 20 MeV instead of NeutronHP.
|
||||
|
||||
|
||||
G4VHadronPhysics
|
||||
----------------
|
||||
Utility class which provides useful methods.
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4IonBinaryCascadePhysics
|
||||
-------------------------
|
||||
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
|
||||
generic ion projectiles), with Glauber-Gribov cross section and
|
||||
Binary Light Ion (BIC, with Precompound/de-excitation) and Fritiof (FTF)
|
||||
string model (with Precompound/de-excitation) for the final state.
|
||||
BIC is used for projectiles of kinetic energies below 6 GeV/nucleon, and
|
||||
FTF above 3 GeV/nucleon.
|
||||
|
||||
G4IonINCLXXPhysics
|
||||
------------------
|
||||
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
|
||||
generic ion projectiles), with Glauber-Gribov cross section and
|
||||
INCLXX and FTFP for the final state. INCLXX is used below 3 GeV/nucleon,
|
||||
and FTF above 2.9 GeV/nucleon.
|
||||
|
||||
G4IonPhysics
|
||||
------------
|
||||
Currently equivalent to G4IonBinaryCascadePhysics.
|
||||
|
||||
G4IonPhysicsXS
|
||||
--------------
|
||||
As G4IonPhysics, except that for deuteron, triton, He3 and alpha
|
||||
the corresponding G4ParticleInelasticXS cross section is used
|
||||
(instead of G4ComponentGGNuclNuclXsc).
|
||||
|
||||
G4IonPhysicsPHP
|
||||
---------------
|
||||
Similar to G4IonBinaryCascadePhysics, except that ParticleHP (for both
|
||||
cross sections and final states) is used below 200 MeV/n for deuteron,
|
||||
triton, He3 and alpha (and BIC used above 190 MeV/n for these light ions).
|
||||
|
||||
G4IonQMDPhysic
|
||||
--------------
|
||||
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
|
||||
generic ion projectiles), with Glauber-Gribov cross section and
|
||||
BIC, QMD and FTFP for the final state. These three final-state models
|
||||
are used in the following intervals of projectile kinetic energy:
|
||||
- BIC below 110 MeV/nucleon;
|
||||
- QMD between 100 and 6'000 MeV/nucleon;
|
||||
- FTF above 5990 MeV/nucleon.
|
||||
@@ -1,72 +0,0 @@
|
||||
contructors/limiters
|
||||
--------------------
|
||||
|
||||
This directory contains "technical" constructors in the sense they do not
|
||||
add processes with physics content but add processes or modify physics lists to
|
||||
allow for step limitation in parallel geometries, biasing, etc.
|
||||
|
||||
|
||||
G4FastSimulationPhysics:
|
||||
------------------------
|
||||
|
||||
Constructor that modifies a given physics list to allow for fast simulation.
|
||||
|
||||
One, or several, G4FastSimulationManagerProcess objects are added to the
|
||||
process manager of particles for which a fast simulation is requested.
|
||||
|
||||
The fast simulation may be associated to regions in the mass geometry, in
|
||||
what case a call like fastSimPhys->ActivateFastSimulation("e-") must be
|
||||
done to allow for fast simulation of electrons.
|
||||
Parallel geometries can be used also in what case the geometry is specified
|
||||
by its name like fastSimPhys->ActivateFastSimulation("e-","parallelGeom") to
|
||||
allow for fast simulation of electrons, with fast simulation models attached
|
||||
to regions in "parallelGeom".
|
||||
|
||||
|
||||
G4GenericBiasingPhysics:
|
||||
------------------------
|
||||
|
||||
Constructor that modifies a given physics list to allow for generic biasing.
|
||||
|
||||
It provides three type of functionnalities:
|
||||
- wrap physics processes with G4BiasingProcessInterface processes to
|
||||
make the generic biasing to control them (allowing change of
|
||||
interaction law, change of final state generation).
|
||||
- add G4BiasingProcessInterface processes, but without wrapping a
|
||||
physics process, in what case these processes will be used for
|
||||
"non-physics based biasing" : ie, spliting and killing
|
||||
- add G4ParallelGeometriesLimiterProcess process (at most one per
|
||||
process manager) that provides step limitation on the parallel
|
||||
geometries used in generic biasing. A process can handle several
|
||||
parallel geometries associated to one particle type.
|
||||
|
||||
Various methods are provided to activate these functionnalities per
|
||||
particle, set of particles, to activate physics-based only or
|
||||
non-physics-based only or both functionnalities, and to activate the
|
||||
parallel geometry functionnality.
|
||||
This is documented in include/G4GenericBiasingPhysics.hh .
|
||||
|
||||
|
||||
G4ImportanceBiasing:
|
||||
-------------------
|
||||
|
||||
G4MaxTimeCuts:
|
||||
--------------
|
||||
|
||||
G4MinEkineCuts:
|
||||
---------------
|
||||
|
||||
G4NeutronTrackingCut:
|
||||
---------------------
|
||||
|
||||
G4ParallelWorldPhysics:
|
||||
-----------------------
|
||||
|
||||
G4SpecialCuts:
|
||||
--------------
|
||||
|
||||
G4StepLimiterPhysics:
|
||||
---------------------
|
||||
|
||||
G4WeightWindowBiasing:
|
||||
----------------------
|
||||
@@ -1,19 +0,0 @@
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
G4StoppingPhysics
|
||||
-----------------
|
||||
It uses Bertini/Precompound (i.e. Bertini followed by the official
|
||||
Precompound/deexcitation of Geant4, not the internal one of Bertini)
|
||||
for nuclear capture of: pi-, K-, Sigma-, Xi- and Omega-.
|
||||
It uses Fritiof/Precompound model for nuclear capture of: anti_proton,
|
||||
anti_neutron, anti_Lambda, anti_Sigma0, anti_Sigma+, anti_Xi0,
|
||||
anti_deuteron, anti_triton, anti_He3, and anti_alpha.
|
||||
For mu-, Bertini model is used for nuclear capture, together with
|
||||
default element selector, EM cascade sampling and bound decay sampling.
|
||||
|
||||
G4StoppingPhysicsFritiofWithBinaryCascade
|
||||
-----------------------------------------
|
||||
The same as G4StoppingPhysics, except that for anti-proton and anti-neutron
|
||||
annihilation at rest it uses Fritiof coupled with Binary Cascade.
|
||||
|
||||
Reference in New Issue
Block a user