186 lines
6.6 KiB
C++
186 lines
6.6 KiB
C++
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
// LOW ENERGY MUON SPIN RELAXATION, ROTATION, RADIATION
|
|
//
|
|
// ID : LEMuSRMuonPhysics.cc , v 1.3
|
|
// AUTHOR: Taofiq PARAISO
|
|
// DATE : 2006-01-19 16:15
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
//
|
|
// & &&&&&&&&&& &&&&&&& &&&&&&&&
|
|
// & & && && & &&
|
|
// & & & & & & &&
|
|
// & &&&&&&& & & &&&&&& &&&&&&&&
|
|
// & & & && & & &&
|
|
// & & && & & && && & &
|
|
// &&&&&&&&&& &&&&&&&&&& & &&&&& && &&&&&&& & &&
|
|
// &
|
|
// &
|
|
// &
|
|
// &
|
|
// MuonPhysics
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
|
|
|
|
#include "LEMuSRMuonPhysics.hh"
|
|
|
|
#include "globals.hh"
|
|
#include "G4ios.hh"
|
|
#include <iomanip>
|
|
|
|
|
|
LEMuSRMuonPhysics::LEMuSRMuonPhysics(const G4String& name)
|
|
: G4VPhysicsConstructor(name)
|
|
{
|
|
}
|
|
|
|
LEMuSRMuonPhysics::~LEMuSRMuonPhysics()
|
|
{
|
|
}
|
|
|
|
#include "G4ParticleDefinition.hh"
|
|
#include "G4ParticleTable.hh"
|
|
|
|
#include "G4MuonPlus.hh"
|
|
#include "G4Muonium.hh"
|
|
#include "G4MuonMinus.hh"
|
|
#include "G4TauMinus.hh"
|
|
#include "G4TauPlus.hh"
|
|
#include "G4NeutrinoTau.hh"
|
|
#include "G4AntiNeutrinoTau.hh"
|
|
#include "G4NeutrinoMu.hh"
|
|
#include "G4AntiNeutrinoMu.hh"
|
|
#include "LEMuSRMuonDecayChannel.hh"
|
|
#include "G4UserSpecialCuts.hh"
|
|
#include "G4DecayTable.hh"
|
|
#include "G4MuonDecayChannelWithSpin.hh"
|
|
|
|
|
|
|
|
|
|
void LEMuSRMuonPhysics::ConstructParticle()
|
|
{
|
|
//! Muon
|
|
G4MuonPlus::MuonPlusDefinition();
|
|
G4Muonium::MuoniumDefinition();
|
|
G4MuonMinus::MuonMinusDefinition();
|
|
G4NeutrinoMu::NeutrinoMuDefinition();
|
|
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
|
|
|
|
//! Tau
|
|
G4TauMinus::TauMinusDefinition();
|
|
G4TauPlus::TauPlusDefinition();
|
|
G4NeutrinoTau::NeutrinoTauDefinition();
|
|
G4AntiNeutrinoTau::AntiNeutrinoTauDefinition();
|
|
|
|
|
|
//! The decay process
|
|
/*!
|
|
* Although the asymmetric decay process is a feature of new Geant4 versions,
|
|
* it is recommended to use the original \lemu implementation.
|
|
*/
|
|
#ifdef ASYM_USE_LEMU
|
|
G4DecayTable* MuonPlusDecayTable = new G4DecayTable();
|
|
MuonPlusDecayTable -> Insert(new LEMuSRMuonDecayChannel("mu+",1.00));
|
|
G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable);
|
|
|
|
/*!
|
|
Half of the muonium have a completely isotropic decay.
|
|
*/
|
|
G4DecayTable* MuoniumDecayTable = new G4DecayTable();
|
|
MuoniumDecayTable -> Insert(new LEMuSRMuonDecayChannel("Mu",0.5));
|
|
MuoniumDecayTable -> Insert(new G4MuonDecayChannel("Mu",0.5));
|
|
G4Muonium::MuoniumDefinition() -> SetDecayTable(MuoniumDecayTable);
|
|
|
|
G4DecayTable* MuonMinusDecayTable = new G4DecayTable();
|
|
MuonMinusDecayTable -> Insert(new LEMuSRMuonDecayChannel("mu-",1.00));
|
|
G4MuonMinus::MuonMinusDefinition() -> SetDecayTable(MuonMinusDecayTable);
|
|
G4cout<<"ASYM_USE_LEMU\n";
|
|
#else
|
|
G4DecayTable* MuonPlusDecayTable = new G4DecayTable();
|
|
MuonPlusDecayTable -> Insert(new G4MuonDecayChannel("mu+",1.00));
|
|
G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable);
|
|
|
|
G4DecayTable* MuoniumDecayTable = new G4DecayTable();
|
|
MuoniumDecayTable -> Insert(new G4MuonDecayChannel("Mu",1.));
|
|
G4Muonium::MuoniumDefinition() -> SetDecayTable(MuoniumDecayTable);
|
|
|
|
G4DecayTable* MuonMinusDecayTable = new G4DecayTable();
|
|
MuonMinusDecayTable -> Insert(new G4MuonDecayChannelWithSpin("mu-",1.00));
|
|
G4MuonMinus::MuonMinusDefinition() -> SetDecayTable(MuonMinusDecayTable);
|
|
G4cout<<"ASYM_USE_G4\n";
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
#include "G4ProcessManager.hh"
|
|
|
|
void LEMuSRMuonPhysics::ConstructProcess()
|
|
{
|
|
G4ProcessManager * pManager = 0;
|
|
|
|
// Muon Plus Physics
|
|
pManager = G4MuonPlus::MuonPlus()->GetProcessManager();
|
|
|
|
//! Syntax: pManager->AddProcess(&fprocess, atrest, prestep, poststep). -1 means that the process is not executed under correspondant condition.
|
|
pManager->AddProcess(&fMuAtRestSpinRotation, 1, -1, -1);
|
|
pManager->AddProcess(&fMuFormation,-1, -1, 1);
|
|
pManager->AddProcess(&fMuPlusMultipleScattering,-1, 1, -1);// may crash when enabled as post step process
|
|
pManager->AddProcess(&fMuPlusIonisation, -1, 2, 2);
|
|
pManager->AddProcess(&fMuPlusBremsstrahlung, -1, 3, 3);
|
|
pManager->AddProcess(&fMuPlusPairProduction, -1, 4, 4);
|
|
|
|
pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,6);
|
|
// pManager ->SetProcessOrderingToLast(&fDepolarization, idxAtRest);
|
|
// pManager ->SetProcessOrdering(&fDepolarization, idxPostStep);
|
|
|
|
//! the last process: decay
|
|
pManager->AddProcess(&fDecayProcess);
|
|
pManager ->SetProcessOrderingToLast(&fDecayProcess, idxAtRest);
|
|
pManager ->SetProcessOrdering(&fDecayProcess, idxPostStep);
|
|
|
|
|
|
//! Muonium Physics is the same as muon plus physics
|
|
pManager = G4Muonium::Muonium()->GetProcessManager();
|
|
|
|
pManager->AddProcess(&fMuAtRestSpinRotation, 1, -1, -1);
|
|
pManager->AddProcess(&fMuPlusIonisation, -1, 2, 2);
|
|
pManager->AddProcess(&fMuoniumScatt, -1, -1, 3);
|
|
pManager->AddProcess(&fMuPlusBremsstrahlung, -1, 4, 4);
|
|
pManager->AddProcess(&fMuPlusPairProduction, -1, 5, 5);
|
|
|
|
pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,6);
|
|
|
|
// the last process: decay
|
|
pManager->AddProcess(&fDecayProcess);
|
|
pManager->SetProcessOrderingToLast(&fDecayProcess, idxAtRest);
|
|
pManager->SetProcessOrdering(&fDecayProcess, idxPostStep);
|
|
|
|
//! Muon Minus Physics
|
|
pManager = G4MuonMinus::MuonMinus()->GetProcessManager();
|
|
|
|
pManager->AddProcess(&fMuMinusMultipleScattering,-1, 1, 1);
|
|
pManager->AddProcess(&fMuMinusIonisation, -1, 2, 2);
|
|
pManager->AddProcess(&fMuMinusBremsstrahlung, -1, 3, 3);
|
|
pManager->AddProcess(&fMuMinusPairProduction, -1, 4, 4);
|
|
|
|
pManager->AddRestProcess(&fMuMinusCaptureAtRest);
|
|
pManager->AddProcess(&fDecayProcess);
|
|
pManager->SetProcessOrderingToLast(&fDecayProcess, idxAtRest);
|
|
pManager->SetProcessOrdering(&fDecayProcess, idxPostStep);
|
|
|
|
//! Tau Plus Physics
|
|
pManager = G4TauPlus::TauPlus()->GetProcessManager();
|
|
|
|
pManager->AddProcess(&fTauPlusMultipleScattering, -1, 1, 1);
|
|
pManager->AddProcess(&fTauPlusIonisation, -1, 2, 2);
|
|
|
|
//! Tau Minus Physics
|
|
pManager = G4TauMinus::TauMinus()->GetProcessManager();
|
|
|
|
pManager->AddProcess(&fTauMinusMultipleScattering, -1, 1, 1);
|
|
pManager->AddProcess(&fTauMinusIonisation, -1, 2, 2);
|
|
|
|
}
|
|
|