/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSMuonPhysics.cc

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 //Returns the wrapper process.
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 

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7