Import Geant4 9.4.0 source tree
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user