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