Import Geant4 9.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 16:25:56 +02:00
parent 74cad5e589
commit 89a9605df1
4440 changed files with 379508 additions and 189225 deletions
@@ -45,6 +45,9 @@
// 05-02-05 AH - changes to G4Decay - added is not short lived protection
// and redefined particles to allow non-static creation
// i.e. changed construction to G4MesonConstructor, G4BaryonConstructor
//
// 23-10-09 LP - migrated EM physics from the LowEnergy processes (not supported) to
// the new G4Livermore model implementation. Results unchanged.
//
// --------------------------------------------------------------
@@ -213,18 +216,30 @@ void DMXPhysicsList::AddTransportation() {
// Electromagnetic Processes ////////////////////////////////////////////////
// all charged particles
#include "G4MultipleScattering.hh"
// gamma
#include "G4LowEnergyRayleigh.hh"
#include "G4LowEnergyPhotoElectric.hh"
#include "G4LowEnergyCompton.hh"
#include "G4LowEnergyGammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
// e-
#include "G4LowEnergyIonisation.hh"
#include "G4LowEnergyBremsstrahlung.hh"
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4LivermoreIonisationModel.hh"
#include "G4eBremsstrahlung.hh"
#include "G4LivermoreBremsstrahlungModel.hh"
// e+
#include "G4eIonisation.hh"
@@ -245,40 +260,23 @@ void DMXPhysicsList::AddTransportation() {
#include "G4MuonMinusCaptureAtRest.hh"
//OTHERS:
#include "G4hIonisation.hh" // standard hadron ionisation
#include "G4hIonisation.hh"
#include "G4hMultipleScattering.hh"
#include "G4hBremsstrahlung.hh"
#include "G4ionIonisation.hh"
#include "G4IonParametrisedLossModel.hh"
//em process options to allow msc step-limitation to be switched off
#include "G4EmProcessOptions.hh"
void DMXPhysicsList::ConstructEM() {
// processes:
G4LowEnergyPhotoElectric* lowePhot = new G4LowEnergyPhotoElectric();
G4LowEnergyIonisation* loweIon = new G4LowEnergyIonisation();
G4LowEnergyBremsstrahlung* loweBrem = new G4LowEnergyBremsstrahlung();
// note LowEIon uses proton as basis for its data-base, therefore
// cannot specify different LowEnergyIonisation models for different
// particles, but can change model globally for Ion, Alpha and Proton.
//fluorescence apply specific cut for fluorescence from photons, electrons
//and bremsstrahlung photons:
G4double fluorcut = 250*eV;
lowePhot->SetCutForLowEnSecPhotons(fluorcut);
loweIon->SetCutForLowEnSecPhotons(fluorcut);
loweBrem->SetCutForLowEnSecPhotons(fluorcut);
// setting tables explicitly for electronic stopping power
// ahadronLowEIon->SetElectronicStoppingPowerModel
// (G4GenericIon::GenericIonDefinition(), "ICRU_R49p") ;
// ahadronLowEIon->SetElectronicStoppingPowerModel
// (G4Proton::ProtonDefinition(), "ICRU_R49p") ;
// Switch off the Barkas and Bloch corrections
// ahadronLowEIon->SetBarkasOff();
//set a finer grid of the physic tables in order to improve precision
//former LowEnergy models have 200 bins up to 100 GeV
G4EmProcessOptions opt;
opt.SetMaxEnergy(100*GeV);
opt.SetDEDXBinning(200);
opt.SetLambdaBinning(200);
theParticleIterator->reset();
while( (*theParticleIterator)() ){
@@ -291,85 +289,134 @@ void DMXPhysicsList::ConstructEM() {
if (particleName == "gamma")
{
//gamma
pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh());
pmanager->AddDiscreteProcess(lowePhot);
pmanager->AddDiscreteProcess(new G4LowEnergyCompton());
pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion());
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
theRayleigh->SetModel(new G4LivermoreRayleighModel()); //not strictly necessary
pmanager->AddDiscreteProcess(theRayleigh);
G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
thePhotoElectricEffect->SetModel(new G4LivermorePhotoElectricModel());
pmanager->AddDiscreteProcess(thePhotoElectricEffect);
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
theComptonScattering->SetModel(new G4LivermoreComptonModel());
pmanager->AddDiscreteProcess(theComptonScattering);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
theGammaConversion->SetModel(new G4LivermoreGammaConversionModel());
pmanager->AddDiscreteProcess(theGammaConversion);
}
else if (particleName == "e-")
{
//electron
// process ordering: AddProcess(name, at rest, along step, post step)
// -1 = not implemented, then ordering
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
pmanager->AddProcess(aMultipleScattering, -1, 1, 1);
pmanager->AddProcess(loweIon, -1, 2, 2);
pmanager->AddProcess(loweBrem, -1,-1, 3);
// Multiple scattering
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc,-1, 1, 1);
// Ionisation
G4eIonisation* eIonisation = new G4eIonisation();
eIonisation->SetEmModel(new G4LivermoreIonisationModel());
eIonisation->SetStepFunction(0.2, 100*um); //improved precision in tracking
pmanager->AddProcess(eIonisation,-1, 2, 2);
// Bremsstrahlung
G4eBremsstrahlung* eBremsstrahlung = new G4eBremsstrahlung();
eBremsstrahlung->SetEmModel(new G4LivermoreBremsstrahlungModel());
pmanager->AddProcess(eBremsstrahlung, -1,-3, 3);
}
else if (particleName == "e+")
{
//positron
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
pmanager->AddProcess(aMultipleScattering, -1, 1, 1);
pmanager->AddProcess(new G4eIonisation(), -1, 2, 2);
//positron
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc,-1, 1, 1);
// Ionisation
G4eIonisation* eIonisation = new G4eIonisation();
eIonisation->SetStepFunction(0.2, 100*um); //
pmanager->AddProcess(eIonisation, -1, 2, 2);
//Bremsstrahlung (use default, no low-energy available)
pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3);
//Annihilation
pmanager->AddProcess(new G4eplusAnnihilation(),0,-1, 4);
}
else if( particleName == "mu+" ||
particleName == "mu-" )
{
//muon
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
pmanager->AddProcess(aMultipleScattering, -1, 1, 1);
pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1);
pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3);
pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4);
if( particleName == "mu-" )
pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1);
}
else if (particleName == "proton" ||
particleName == "alpha" ||
else if (particleName == "proton" ||
particleName == "pi+" ||
particleName == "pi-")
{
//multiple scattering
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
//ionisation
G4hIonisation* hIonisation = new G4hIonisation();
hIonisation->SetStepFunction(0.2, 50*um);
pmanager->AddProcess(hIonisation, -1, 2, 2);
//bremmstrahlung
pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3);
}
else if(particleName == "alpha" ||
particleName == "deuteron" ||
particleName == "triton" ||
particleName == "He3" ||
particleName == "GenericIon" ||
(particleType == "nucleus" && charge != 0))
particleName == "He3")
{
//multiple scattering
pmanager->AddProcess(new G4hMultipleScattering,-1,1,1);
//ionisation
G4ionIonisation* ionIoni = new G4ionIonisation();
ionIoni->SetStepFunction(0.1, 20*um);
pmanager->AddProcess(ionIoni, -1, 2, 2);
}
else if (particleName == "GenericIon")
{
// OBJECT may be dynamically created as either a GenericIon or nucleus
// G4Nucleus exists and therefore has particle type nucleus
// genericIon:
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
//hIonisation G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
G4hIonisation* ahadronIon = new G4hIonisation();
pmanager->AddProcess(aMultipleScattering,-1,1,1);
//hIonisation pmanager->AddProcess(ahadronLowEIon,-1,2,2);
pmanager->AddProcess(ahadronIon,-1,2,2);
// ahadronLowEIon->SetNuclearStoppingOff() ;
// ahadronLowEIon->SetNuclearStoppingPowerModel("ICRU_R49") ;
// ahadronLowEIon->SetNuclearStoppingOn() ;
//fluorescence switch off for hadrons (for now) PIXE:
//hIonisation ahadronLowEIon->SetFluorescence(false);
//multiple scattering
pmanager->AddProcess(new G4hMultipleScattering,-1,1,1);
//ionisation
G4ionIonisation* ionIoni = new G4ionIonisation();
ionIoni->SetEmModel(new G4IonParametrisedLossModel());
ionIoni->SetStepFunction(0.1, 20*um);
pmanager->AddProcess(ionIoni, -1, 2, 2);
}
else if ((!particle->IsShortLived()) &&
(charge != 0.0) &&
(particle->GetParticleName() != "chargedgeantino"))
{
//all others charged particles except geantino
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
//hIonisation G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
G4hMultipleScattering* aMultipleScattering = new G4hMultipleScattering();
G4hIonisation* ahadronIon = new G4hIonisation();
//multiple scattering
pmanager->AddProcess(aMultipleScattering,-1,1,1);
//hIonisation pmanager->AddProcess(ahadronLowEIon, -1,2,2);
//ionisation
pmanager->AddProcess(ahadronIon, -1,2,2);
// pmanager->AddProcess(new G4hIonisation(), -1,2,2);
}
}
// turn off msc step-limitation - especially as electron cut 1nm
G4EmProcessOptions opt;
// opt.SetMscStepLimitation(false);
opt.SetMscStepLimitation(fMinimal);
}