#include "CloverPhysicsList.hh" #include "G4ParticleDefinition.hh" #include "G4ProcessManager.hh" #include "G4ParticleTypes.hh" #include "G4ParticleTable.hh" #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... CloverPhysicsList::CloverPhysicsList() : G4VUserPhysicsList() { defaultCutValue = 1.0*mm; SetVerboseLevel(1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... CloverPhysicsList::~CloverPhysicsList() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void CloverPhysicsList::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(); G4GenericIon::GenericIonDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void CloverPhysicsList::ConstructBosons() { G4Gamma::GammaDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void CloverPhysicsList::ConstructLeptons() { G4Electron::ElectronDefinition(); G4Positron::PositronDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void CloverPhysicsList::ConstructProcess() { AddTransportation(); ConstructEM(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4PhysicsListHelper.hh" #include "G4ComptonScattering.hh" #include "G4GammaConversion.hh" #include "G4PhotoElectricEffect.hh" #include "G4eMultipleScattering.hh" #include "G4eIonisation.hh" #include "G4eBremsstrahlung.hh" #include "G4eplusAnnihilation.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void CloverPhysicsList::ConstructEM() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); auto particleIterator=GetParticleIterator(); particleIterator->reset(); while( (*particleIterator)() ){ G4ParticleDefinition* particle = particleIterator->value(); G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { ph->RegisterProcess(new G4PhotoElectricEffect, particle); ph->RegisterProcess(new G4ComptonScattering, particle); ph->RegisterProcess(new G4GammaConversion, particle); } else if (particleName == "e-") { ph->RegisterProcess(new G4eMultipleScattering, particle); ph->RegisterProcess(new G4eIonisation, particle); ph->RegisterProcess(new G4eBremsstrahlung, particle); } else if (particleName == "e+") { ph->RegisterProcess(new G4eMultipleScattering, particle); ph->RegisterProcess(new G4eIonisation, particle); ph->RegisterProcess(new G4eBremsstrahlung, particle); ph->RegisterProcess(new G4eplusAnnihilation, particle); } } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void CloverPhysicsList::SetCuts() { if (verboseLevel >0){ G4cout << "PhysicsList::SetCuts:"; G4cout << "CutLength : " << defaultCutValue/mm << " (mm)" << G4endl; } // set cut values for gamma at first and for e- second and next for e+, // because some processes for e+/e- need cut values for gamma SetCutValue(defaultCutValue, "gamma"); SetCutValue(defaultCutValue, "e-"); SetCutValue(defaultCutValue, "e+"); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......