00001 #include "BDSCutsAndLimits.hh"
00002 #include "G4Gamma.hh"
00003 #include "G4Electron.hh"
00004 #include "G4Positron.hh"
00005 #include "G4Proton.hh"
00006 #include "G4StepLimiter.hh"
00007 #include "G4UserSpecialCuts.hh"
00008 #include "G4ProcessManager.hh"
00009 #include "G4Version.hh"
00010
00011 BDSCutsAndLimits::BDSCutsAndLimits():G4VPhysicsConstructor("BDSCutsAndLimits"),_wasActivated(false)
00012 {;}
00013
00014 BDSCutsAndLimits::~BDSCutsAndLimits()
00015 {;}
00016
00017 void BDSCutsAndLimits::ConstructParticle(){
00018 G4Gamma::Gamma();
00019 G4Electron::Electron();
00020 G4Positron::Positron();
00021 G4Proton::Proton();
00022 return;
00023 }
00024
00025 void BDSCutsAndLimits::ConstructProcess(){
00026 if(_wasActivated) return;
00027 _wasActivated=true;
00028
00029 #if G4VERSION_NUMBER < 1000
00030 theParticleTable = G4ParticleTable::GetParticleTable();
00031 theParticleIterator = theParticleTable->GetIterator();
00032 G4ParticleTable::G4PTblDicIterator* aParticleIterator = theParticleIterator;
00033 #endif
00034
00035 aParticleIterator->reset();
00036 while( (*aParticleIterator)() ){
00037 G4ParticleDefinition* particle = aParticleIterator->value();
00038 G4ProcessManager *pmanager = particle->GetProcessManager();
00039 if((particle->GetParticleName()=="gamma")||
00040 (particle->GetParticleName()=="e-")||
00041 (particle->GetParticleName()=="e+")||
00042 (particle->GetParticleName()=="proton")){
00043 particle->SetApplyCutsFlag(true);
00044 }
00045 pmanager->AddProcess(new G4StepLimiter,-1,-1,1);
00046 #ifndef NOUSERSPECIALCUTS
00047 pmanager->AddDiscreteProcess(new G4UserSpecialCuts);
00048 #endif
00049 }
00050 return;
00051 }
00052