Physics List
// // ******************************************************************** // * DISCLAIMER * // * * // * The following disclaimer summarizes all the specific disclaimers * // * of contributors to this software. The specific disclaimers,which * // * govern, are listed with their locations in: * // * http://cern.ch/geant4/license * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. * // * * // * This code implementation is the intellectual property of the * // * GEANT4 collaboration. * // * By copying, distributing or modifying the Program (or any work * // * based on the Program) you indicate your acceptance of this * // * statement, and all its terms. * // ******************************************************************** // // // $Id: BetheBlochPhysicsList.cc,v 1.21 2005/05/30 16:20:23 maire Exp $ // GEANT4 tag $Name: geant4-08-00-patch-01 $ // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
- include "globals.hh"
- include "BetheBlochPhysicsList.hh"
- include "G4ProcessManager.hh"
- include "G4ParticleTypes.hh"
- include "G4IonConstructor.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
BetheBlochPhysicsList::BetheBlochPhysicsList(): G4VUserPhysicsList() {
defaultCutValue = 1.0*cm; SetVerboseLevel(1);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
BetheBlochPhysicsList::~BetheBlochPhysicsList() {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructParticle() {
// In this method, static member functions should be called // for all particles which you want to use. // This ensures that objects of these particle types will be // created in the program.
ConstructBosons(); ConstructLeptons(); ConstructMesons(); ConstructBaryons();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructBosons() {
// pseudo-particles G4Geantino::GeantinoDefinition(); G4ChargedGeantino::ChargedGeantinoDefinition();
// gamma G4Gamma::GammaDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructLeptons() {
// leptons // e+/- G4Electron::ElectronDefinition(); G4Positron::PositronDefinition(); // mu+/- G4MuonPlus::MuonPlusDefinition(); G4MuonMinus::MuonMinusDefinition(); // nu_e G4NeutrinoE::NeutrinoEDefinition(); G4AntiNeutrinoE::AntiNeutrinoEDefinition(); // nu_mu G4NeutrinoMu::NeutrinoMuDefinition(); G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructMesons() {
// mesons // light mesons G4PionPlus::PionPlusDefinition(); G4PionMinus::PionMinusDefinition(); G4PionZero::PionZeroDefinition(); G4Eta::EtaDefinition(); G4EtaPrime::EtaPrimeDefinition(); G4KaonPlus::KaonPlusDefinition(); G4KaonMinus::KaonMinusDefinition(); G4KaonZero::KaonZeroDefinition(); G4AntiKaonZero::AntiKaonZeroDefinition(); G4KaonZeroLong::KaonZeroLongDefinition(); G4KaonZeroShort::KaonZeroShortDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructBaryons() {
// barions G4Proton::ProtonDefinition(); G4AntiProton::AntiProtonDefinition();
G4Neutron::NeutronDefinition(); G4AntiNeutron::AntiNeutronDefinition();
G4IonConstructor ion; ion.ConstructParticle();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructProcess() {
AddTransportation(); ConstructEM(); //ConstructPN(); ConstructGeneral();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
- include "G4ComptonScattering.hh"
- include "G4GammaConversion.hh"
- include "G4PhotoElectricEffect.hh"
- include "G4MultipleScattering.hh"
- include "G4eIonisation.hh"
- include "G4eBremsstrahlung.hh"
- include "G4eplusAnnihilation.hh"
- include "G4MuIonisation.hh"
- include "G4MuBremsstrahlung.hh"
- include "G4MuPairProduction.hh"
- include "G4hIonisation.hh"
//#include "G4PenelopeIonisation.hh"
//#include "G4ionIonisation.hh"
//#include "G4StepLimiter.hh" //#include "G4UserSpecialCuts.hh"
// this include file defindes the class G4HadronElasticProcess
- include "G4NeutronHPorLElastic.hh"
//#include "G4NeutronHPElastic.hh" //#include "G4LElastic.hh"
// hadron elastic scattering processes
//#include "G4ElasticHadrNucleusHE.hh" /* for high energy elestic scattering */
//#include "G4LElastic.hh"
//#include "G4NeutronHPElastic.hh"
- include "G4GammaNuclearReaction.hh"
- include "G4PhotoNuclearProcess.hh"
- include "G4StepLimiter.hh"
- include "G4UserSpecialCuts.hh"
- include <G4PhotoNuclearCrossSection.hh>
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::ConstructEM() {
theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName();
//G4GammaNuclearReaction* gammaNuclear = new G4GammaNuclearReaction(); //G4PhotoNuclearProcess* photoNuclearProcess = new G4PhotoNuclearProcess(); if (particleName == "gamma") { // gamma pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); //pmanager->AddDiscreteProcess(new G4LowEnergyPhotoElectric); pmanager->AddDiscreteProcess(new G4ComptonScattering); //pmanager->AddDiscreteProcess(new G4LowEnergyCompton); pmanager->AddDiscreteProcess(new G4GammaConversion); //pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion); //pmanager->AddDiscrete(new G4PenelopeIonisation); //pmanager->AddDiscrete(new G4LowEnergyRayleigh());
//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00 G4GammaNuclearReaction* gammaNuclear = new G4GammaNuclearReaction(); G4PhotoNuclearProcess* photoNuclearProcess = new G4PhotoNuclearProcess(); photoNuclearProcess->RegisterMe(gammaNuclear); pmanager->AddDiscreteProcess(photoNuclearProcess); //00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00
} else if (particleName == "e-") { //electron pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4eIonisation, -1, 2,2); pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3);
} else if (particleName == "proton") { //proton
//AddProcess(process name, proccess when at rest, continuous proces flag, discrete process flag); pmanager->AddProcess(new G4hIonisation, -1, 1,1); pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); // G4ionIonisation* iIon= new G4ionIonisation(); // pmanager->AddProcess(iIon,-1, 1,2); //step limit pmanager->AddProcess(new G4StepLimiter, -1,-1,3);
} else if (particleName == "e+") { //positron pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4eIonisation, -1, 2,2); pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4);
} else if( particleName == "mu+" || particleName == "mu-" ) { //muon pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4MuIonisation, -1, 2,2); pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3,3); pmanager->AddProcess(new G4MuPairProduction, -1, 4,4);
//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00 } else if (particleName == "neutron") { //neutron
// available neutron elastic scattering models
//G4LElastic* elasticModel = new G4LElastic(); //G4NeutronHPElastic* elasticModel = new G4NeutronHPElastic(); G4NeutronHPorLElastic* elasticModel = new G4NeutronHPorLElastic(); // define process to handle elastic scattering G4HadronElasticProcess* hadElastProc = new G4HadronElasticProcess(); // register the model you are using for eleastic scatterin hadElastProc->RegisterMe(elasticModel); // add the elastic scattering process to the process manager
pmanager->AddDiscreteProcess(hadElastProc); pmanager->AddProcess(new G4StepLimiter, -1,-1,3); //00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00 } else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) && (particle->GetParticleName() != "chargedgeantino")) {
//all others charged particles except geantino pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4hIonisation, -1, 2,2); //step limit pmanager->AddProcess(new G4StepLimiter, -1,-1,3); ///pmanager->AddProcess(new G4UserSpecialCuts, -1,-1,4); } }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
- include "G4Decay.hh"
void BetheBlochPhysicsList::ConstructGeneral() {
// Add Decay Process G4Decay* theDecayProcess = new G4Decay(); theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); if (theDecayProcess->IsApplicable(*particle)) { pmanager ->AddProcess(theDecayProcess); // set ordering for PostStepDoIt and AtRestDoIt pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest); } }
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void BetheBlochPhysicsList::SetCuts() {
//G4VUserPhysicsList::SetCutsWithDefault method sets //the default cut value for all particle types // SetCutsWithDefault(); if (verboseLevel>0) DumpCutValuesTable();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......