musrsim/geant4/LEMuSR/src/PhysicsList.cc
2005-11-11 12:35:21 +00:00

104 lines
3.5 KiB
C++

#include "PhysicsList.hh"
#include "globals.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4MaterialTable.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4DecayTable.hh"
#include "G4MuonDecayChannelWithSpin.hh"
PhysicsList::PhysicsList()
{}
PhysicsList::~PhysicsList()
{}
void PhysicsList::ConstructParticle()
{
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4NeutrinoE::NeutrinoEDefinition();
G4AntiNeutrinoE::AntiNeutrinoEDefinition();
G4MuonPlus::MuonPlusDefinition();
G4MuonMinus::MuonMinusDefinition();
G4NeutrinoMu::NeutrinoMuDefinition();
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
G4DecayTable* MuonPlusDecayTable = new G4DecayTable();
MuonPlusDecayTable -> Insert(new G4MuonDecayChannelWithSpin("mu+",1.00));
G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable);
G4DecayTable* MuonMinusDecayTable = new G4DecayTable();
MuonMinusDecayTable -> Insert(new G4MuonDecayChannelWithSpin("mu-",1.00));
G4MuonMinus::MuonMinusDefinition() -> SetDecayTable(MuonMinusDecayTable);
}
void PhysicsList::ConstructProcess()
{
// Define transportation process
AddTransportation();
theDecayProcess = new G4DecayWithSpin();
G4ProcessManager* pManager;
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
pManager = particle->GetProcessManager();
if (theDecayProcess->IsApplicable(*particle)) {
pManager->AddProcess(theDecayProcess);
pManager ->SetProcessOrderingToLast(theDecayProcess, idxAtRest);
}
}
theMuPlusIonisation = new G4MuIonisation();
theMuPlusMultipleScattering = new G4MultipleScattering();
theMuPlusBremsstrahlung=new G4MuBremsstrahlung();
theMuPlusPairProduction= new G4MuPairProduction();
theMuMinusIonisation = new G4MuIonisation();
theMuMinusMultipleScattering = new G4MultipleScattering;
theMuMinusBremsstrahlung = new G4MuBremsstrahlung();
theMuMinusPairProduction = new G4MuPairProduction();
// Muon Plus Physics
pManager = G4MuonPlus::MuonPlus()->GetProcessManager();
pManager->AddProcess(theMuPlusMultipleScattering,-1, 1, 1);
pManager->AddProcess(theMuPlusIonisation, -1, 2, 2);
pManager->AddProcess(theMuPlusBremsstrahlung, -1, 3, 3);
pManager->AddProcess(theMuPlusPairProduction, -1, 4, 4);
// Muon Minus Physics
pManager = G4MuonMinus::MuonMinus()->GetProcessManager();
pManager->AddProcess(theMuMinusMultipleScattering,-1, 1, 1);
pManager->AddProcess(theMuMinusIonisation, -1, 2, 2);
pManager->AddProcess(theMuMinusBremsstrahlung, -1, 3, 3);
pManager->AddProcess(theMuMinusPairProduction, -1, 4, 4);
}
void PhysicsList::SetCuts()
{
// suppress error messages even in case e/gamma/proton do not exist
G4int temp = GetVerboseLevel();
SetVerboseLevel(0);
// " G4VUserPhysicsList::SetCutsWithDefault" method sets
// the default cut value for all particle types
SetCutsWithDefault();
// Retrieve verbose level
SetVerboseLevel(temp);
}