Import Geant4 5.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-08 16:57:27 +02:00
parent 330b82b769
commit 37fff30d2e
5733 changed files with 263867 additions and 74574 deletions
@@ -64,7 +64,6 @@ DMXPhysicsList::DMXPhysicsList() : G4VUserPhysicsList()
cutForProton = defaultCutValue;
cutForAlpha = 1.0*nanometer;
cutForGenericIon = 1.0*nanometer;
cutForOpticalPhoton = 1.0*mm;
VerboseLevel = 1;
OpVerbLevel = 0;
@@ -256,6 +255,42 @@ void DMXPhysicsList::AddTransportation() {
void DMXPhysicsList::ConstructEM() {
// processes:
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
G4LowEnergyPhotoElectric* lowePhot = new G4LowEnergyPhotoElectric();
G4LowEnergyIonisation* loweIon = new G4LowEnergyIonisation();
G4LowEnergyBremsstrahlung* loweBrem = new G4LowEnergyBremsstrahlung();
G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
// 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.
// ahadronLowEIon->SetNuclearStoppingOff() ;
ahadronLowEIon->SetNuclearStoppingPowerModel("ICRU_R49") ;
ahadronLowEIon->SetNuclearStoppingOn() ;
//fluorescence switch off for hadrons (for now) PIXE:
ahadronLowEIon->SetFluorescence(false);
//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();
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
@@ -264,17 +299,6 @@ void DMXPhysicsList::ConstructEM() {
G4String particleType = particle->GetParticleType();
G4double charge = particle->GetPDGCharge();
//processes
G4LowEnergyPhotoElectric* lowePhot = new G4LowEnergyPhotoElectric();
G4LowEnergyIonisation* loweIon = new G4LowEnergyIonisation();
G4LowEnergyBremsstrahlung* loweBrem = new G4LowEnergyBremsstrahlung();
G4MultipleScattering* aMultipleScattering = new G4MultipleScattering();
G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation();
// 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.
if (particleName == "gamma")
{
//gamma
@@ -308,7 +332,8 @@ void DMXPhysicsList::ConstructEM() {
pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3);
pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4);
pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1);
if( particleName == "mu-" )
pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1);
}
else if (particleName == "proton" ||
particleName == "alpha" ||
@@ -325,7 +350,7 @@ void DMXPhysicsList::ConstructEM() {
pmanager->AddProcess(ahadronLowEIon,-1,2,2);
}
else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(charge != 0.0) &&
(particle->GetParticleName() != "chargedgeantino"))
{
//all others charged particles except geantino
@@ -334,24 +359,6 @@ void DMXPhysicsList::ConstructEM() {
// pmanager->AddProcess(new G4hIonisation(), -1,2,2);
}
ahadronLowEIon->SetNuclearStoppingOn() ;
//fluorescence switch off for hadrons (for now) PIXE:
ahadronLowEIon->SetFluorescence(false);
//fluorescence apply specific cut for flourescence from photons, electrons
//and bremsstrahlung photons:
G4double cut = 250*eV;
lowePhot->SetCutForLowEnSecPhotons(cut);
loweIon->SetCutForLowEnSecPhotons(cut);
loweBrem->SetCutForLowEnSecPhotons(cut);
// ahadronLowEIon->SetNuclearStoppingOff() ;
// ahadronLowEIon->SetStoppingPowerTableName("ICRU_R49p") ;
// ahadronLowEIon->SetStoppingPowerTableName("Ziegler1977H") ;
}
}
@@ -359,54 +366,43 @@ void DMXPhysicsList::ConstructEM() {
// Optical Processes ////////////////////////////////////////////////////////
#include "G4Scintillation.hh"
#include "G4OpAbsorption.hh"
#include "G4OpRayleigh.hh"
//#include "G4OpRayleigh.hh"
#include "G4OpBoundaryProcess.hh"
void DMXPhysicsList::ConstructOp()
{
// ATTENTION!!!!:
// Number of scintillation photons generated is wrong (!=correct yield)
// this is due to a mis-implementation within G4 Tracking and the
// scintillation process (to be corrected soon)
// default scintillation process
G4Scintillation* theScintProcessDef = new G4Scintillation("Scintillation");
// theScintProcessDef->DumpPhysicsTable();
theScintProcessDef->SetTrackSecondariesFirst(true);
theScintProcessDef->SetScintillationYield(11000./MeV); // including QE 20%
// Fano factor assumed 1; should be much less for Xe ~ 0.13
// but the Fano factor is already partially included in the correlated
// electron production - therefore not the absolute Fano factor here:
theScintProcessDef->SetResolutionScale(1.0);
theScintProcessDef->SetScintillationTime(45.*ns);
theScintProcessDef->SetScintillationYieldFactor(1.0); //
theScintProcessDef->SetScintillationExcitationRatio(0.0); //
theScintProcessDef->SetVerboseLevel(OpVerbLevel);
// scintillation process for alpha:
G4Scintillation* theScintProcessAlpha = new G4Scintillation("Scintillation");
// theScintProcessNuc->DumpPhysicsTable();
theScintProcessAlpha->SetTrackSecondariesFirst(true);
theScintProcessAlpha->SetScintillationYield(12000./MeV); // including QE 20%
theScintProcessAlpha->SetResolutionScale(1.0);
theScintProcessAlpha->SetScintillationTime(20.*ns);
theScintProcessAlpha->SetScintillationYieldFactor(1.1);
theScintProcessAlpha->SetScintillationExcitationRatio(1.0);
theScintProcessAlpha->SetVerboseLevel(OpVerbLevel);
// scintillation process for heavy nuclei
G4Scintillation* theScintProcessNuc = new G4Scintillation("Scintillation");
// theScintProcessNuc->DumpPhysicsTable();
theScintProcessNuc->SetTrackSecondariesFirst(true);
theScintProcessNuc->SetScintillationYield(1000./MeV); // including QE 20%
theScintProcessNuc->SetResolutionScale(1.);
theScintProcessNuc->SetScintillationTime(20.*ns);
theScintProcessNuc->SetScintillationYieldFactor(0.2);
theScintProcessNuc->SetScintillationExcitationRatio(1.0);
theScintProcessNuc->SetVerboseLevel(OpVerbLevel);
// optical processes
G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption();
G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh();
// G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh();
G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess();
// theAbsorptionProcess->DumpPhysicsTable();
// theRayleighScatteringProcess->DumpPhysicsTable();
theAbsorptionProcess->SetVerboseLevel(OpVerbLevel);
theRayleighScatteringProcess->SetVerboseLevel(OpVerbLevel);
// theRayleighScatteringProcess->SetVerboseLevel(OpVerbLevel);
theBoundaryProcess->SetVerboseLevel(OpVerbLevel);
G4OpticalSurfaceModel themodel = unified;
theBoundaryProcess->SetModel(themodel);
@@ -438,7 +434,7 @@ void DMXPhysicsList::ConstructOp()
if (particleName == "opticalphoton") {
pmanager->AddDiscreteProcess(theAbsorptionProcess);
pmanager->AddDiscreteProcess(theRayleighScatteringProcess);
// pmanager->AddDiscreteProcess(theRayleighScatteringProcess);
pmanager->AddDiscreteProcess(theBoundaryProcess);
}
}
@@ -816,8 +812,6 @@ void DMXPhysicsList::SetCuts()
SetCutValue(cutForAlpha, "alpha");
SetCutValue(cutForGenericIon, "GenericIon");
SetCutValue(cutForOpticalPhoton, "opticalphoton");
SetCutValueForOthers(defaultCutValue);
if (verboseLevel>0) DumpCutValuesTable();