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