00001 #include "BDSSynchRadPhysics.hh"
00002 #include "G4Gamma.hh"
00003 #include "G4ProcessManager.hh"
00004 #include "G4Version.hh"
00005
00006 BDSSynchRadPhysics::BDSSynchRadPhysics():G4VPhysicsConstructor("BDSSynchRadPhysics"),
00007 _srProcess(NULL),_contSR(NULL),_wasActivated(false)
00008 {;}
00009
00010 BDSSynchRadPhysics::~BDSSynchRadPhysics()
00011 {;}
00012
00013 void BDSSynchRadPhysics::ConstructParticle(){
00014 G4Gamma::Gamma();
00015 G4Electron::Electron();
00016 G4Positron::Positron();
00017 return;
00018 }
00019
00020 void BDSSynchRadPhysics::ConstructProcess(){
00021 if(_wasActivated) return;
00022 _wasActivated=true;
00023 _srProcess = new BDSSynchrotronRadiation();
00024 _contSR= new BDSContinuousSR();
00025
00026 #if G4VERSION_NUMBER < 1000
00027 theParticleTable = G4ParticleTable::GetParticleTable();
00028 theParticleIterator = theParticleTable->GetIterator();
00029 G4ParticleTable::G4PTblDicIterator* aParticleIterator = theParticleIterator;
00030 #endif
00031
00032 aParticleIterator->reset();
00033 while( (*aParticleIterator)() ){
00034 G4ParticleDefinition* particle = aParticleIterator->value();
00035 G4ProcessManager* pmanager = particle->GetProcessManager();
00036 G4String particleName = particle->GetParticleName();
00037 if (particleName == "e-") {
00038 pmanager->AddProcess(_srProcess);
00039 pmanager->SetProcessOrderingToLast(_srProcess,idxPostStep);
00040 G4int idx = pmanager->AddProcess(_contSR);
00041 pmanager->SetProcessOrderingToLast(_contSR,idxPostStep);
00042 pmanager->SetProcessActivation(idx, false);
00043 }
00044 if (particleName == "e+") {
00045 pmanager->AddProcess(_srProcess);
00046 pmanager->SetProcessOrderingToLast(_srProcess,idxPostStep);
00047 G4int idx = pmanager->AddProcess(_contSR);
00048 pmanager->SetProcessOrderingToLast(_contSR,idxPostStep);
00049 pmanager->SetProcessActivation(idx, false);
00050 }
00051 }
00052 return;
00053 }
00054
00055