00001 #include "MyStepLimiter.hh"
00002
00003 #include "G4StepLimiter.hh"
00004 #include "G4ParticleDefinition.hh"
00005 #include "G4ProcessManager.hh"
00006
00007 #include "G4ParticleTypes.hh"
00008 #include "G4ParticleTable.hh"
00009
00010 MyStepLimiter::MyStepLimiter(G4int ver)
00011 : G4VPhysicsConstructor("MyStepLimiter"), verbose(ver), wasActivated(false)
00012 {
00013 fStepLimiter = 0;
00014 }
00015
00016 MyStepLimiter::MyStepLimiter(const G4String& name, G4int ver)
00017 : G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
00018 {
00019 fStepLimiter = 0;
00020 }
00021
00022 MyStepLimiter::~MyStepLimiter()
00023 {
00024 delete fStepLimiter;
00025 }
00026
00027 void MyStepLimiter::ConstructParticle()
00028 {
00029
00030
00031
00032 }
00033
00034 void MyStepLimiter::ConstructProcess()
00035 {
00036 if(wasActivated) { return; }
00037 wasActivated = true;
00038
00039 G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
00040 G4ParticleTable::G4PTblDicIterator* theParticleIterator
00041 = G4ParticleTable::GetParticleTable()->GetIterator();
00042
00043 theParticleIterator->reset();
00044
00045 fStepLimiter = new G4StepLimiter();
00046
00047 while ((*theParticleIterator)()){
00048 G4ParticleDefinition *particle = theParticleIterator->value();
00049 G4ProcessManager *pmanager = particle->GetProcessManager();
00050 G4String particleName = particle->GetParticleName();
00051
00052
00053
00054
00055
00056
00057 if (particleName != "gamma"
00058 && particleName != "geantino"
00059 && particleName != "chargedgeantino"
00060 && particleName != "nu_e"
00061 && particleName != "nu_mu"
00062 && particleName != "nu_tau"
00063 && particleName != "anti_nu_e"
00064 && particleName != "anti_nu_mu"
00065 && particleName != "anti_nu_tau"
00066 ) {
00067 pmanager->AddDiscreteProcess(fStepLimiter);
00068 }
00069 }
00070 }