00001 #include "BDSMuonPhysics.hh"
00002 #include "BDSXSBiasPhysics.hh"
00003 #include "G4GammaConversionToMuons.hh"
00004 #include "BDSVProcess.hh"
00005 #include "BDSGlobalConstants.hh"
00006 #include "G4eeToHadrons.hh"
00007 #include "G4Version.hh"
00008
00009 BDSMuonPhysics::BDSMuonPhysics():BDSXSBiasPhysics("BDSMuonPhysics")
00010 {;}
00011
00012 BDSMuonPhysics::~BDSMuonPhysics()
00013 {;}
00014
00015 void BDSMuonPhysics::ConstructParticle(){
00016 G4Gamma::Gamma();
00017 G4Electron::Electron();
00018 G4Positron::Positron();
00019 G4MuonPlus::MuonPlus();
00020 G4MuonMinus::MuonMinus();
00021 G4PionPlus::PionPlusDefinition();
00022 G4PionMinus::PionMinusDefinition();
00023 return;
00024 }
00025
00026 void BDSMuonPhysics::ConstructProcess(){
00027 if(_wasActivated) return;
00028 _wasActivated=true;
00029
00030 #if G4VERSION_NUMBER < 1000
00031 theParticleTable = G4ParticleTable::GetParticleTable();
00032 theParticleIterator = theParticleTable->GetIterator();
00033 G4ParticleTable::G4PTblDicIterator* aParticleIterator = theParticleIterator;
00034 #endif
00035
00036 aParticleIterator->reset();
00037
00038 while( (*aParticleIterator)() ){
00039 G4ParticleDefinition* particle = aParticleIterator->value();
00040 G4ProcessManager* pmanager = particle->GetProcessManager();
00041 G4String particleName = particle->GetParticleName();
00042 if(particleName == "gamma"){
00043 G4GammaConversionToMuons* gamConvToMu = new G4GammaConversionToMuons();
00044 ReplaceDiscreteProcess(pmanager, gamConvToMu, WrapXSBias(gamConvToMu,BDSGlobalConstants::Instance()->GetGammaToMuFe()));
00045 }
00046 if(particleName == "e+"){
00047 G4AnnihiToMuPair* anni = new G4AnnihiToMuPair();
00048 ReplaceDiscreteProcess(pmanager, anni, WrapXSBias(anni,BDSGlobalConstants::Instance()->GetAnnihiToMuFe()));
00049 G4eeToHadrons* eetohadrons = new G4eeToHadrons();
00050 ReplaceDiscreteProcess(pmanager, eetohadrons, WrapXSBias(eetohadrons,BDSGlobalConstants::Instance()->GetEeToHadronsFe()));
00051 }
00052 }
00053 return;
00054 }
00055
00056
00057 BDSXSBias* BDSMuonPhysics::WrapXSBias(G4GammaConversionToMuons* proc, G4double efactor){
00058 proc->SetCrossSecFactor(efactor);
00059 BDSXSBias* xsbias_proc = new BDSXSBias();
00060 xsbias_proc->RegisterProcess(proc);
00061 xsbias_proc->eFactor(efactor);
00062 return xsbias_proc;
00063 }
00064
00065 BDSXSBias* BDSMuonPhysics::WrapXSBias(G4AnnihiToMuPair* proc, G4double efactor){
00066 proc->SetCrossSecFactor(efactor);
00067 BDSXSBias* xsbias_proc = new BDSXSBias();
00068 xsbias_proc->RegisterProcess(proc);
00069 xsbias_proc->eFactor(efactor);
00070 return xsbias_proc;
00071 }
00072
00073 BDSXSBias* BDSMuonPhysics::WrapXSBias(G4eeToHadrons* proc, G4double efactor){
00074 proc->SetCrossSecFactor(efactor);
00075 BDSXSBias* xsbias_proc = new BDSXSBias();
00076 xsbias_proc->RegisterProcess(proc);
00077 xsbias_proc->eFactor(efactor);
00078 return xsbias_proc;
00079 }
00080