280 likes | 295 Views
Low Energy Electromagnetic Physics PART II. Alex Howard Imperial College, UK a.s.howard@ic.ac.uk on behalf of the Low Energy Electromagnetic Working Group Geant4 User Workshop CERN, 11-15 November 2002. http://www.ge.infn.it/geant4/training/. Lecture 1 Overview Software process OOAD
E N D
Low Energy Electromagnetic Physics PART II Alex Howard Imperial College, UK a.s.howard@ic.ac.uk on behalf of the Low Energy Electromagnetic Working Group Geant4 User Workshop CERN, 11-15 November 2002 http://www.ge.infn.it/geant4/training/
Lecture 1 Overview Software process OOAD Physics Electrons and photons Hadrons and ions Atomic relaxation Polarisation Lecture 2 How to use LowE processes Examples Experimental applications Outlook Plan of the tutorial
Outline • How to use Geant4 LowE electromagnetic processes • Where to find examples • A selection of real-life applications • Space Physics – X-Rays • Space Physics – Proof Mass Charging • Medical Physics • Dark Matter • Outlook • New Physics • Performance Optimisation • Conclusions
Compton scattering Rayleigh scattering Photoelectric effect Pair production Bremsstrahlung Ionisation Polarised Compton + atomic relaxation fluorescence Auger effect following photoelectric effect and ionisation The following code is required in yourPhysicsList.cc [All code has been lifted from the relevant advanced examples] Low Energy Em Physics Implementation:
brachytherapy • Low energy electromagnetic processes for precise calculation of dose distribution // gamma #include "G4LowEnergyRayleigh.hh" #include "G4LowEnergyPhotoElectric.hh" #include "G4LowEnergyCompton.hh" #include "G4LowEnergyGammaConversion.hh" // e- #include "G4LowEnergyIonisation.hh" #include "G4LowEnergyBremsstrahlung.hh" // e+ #include "G4eIonisation.hh" #include "G4eBremsstrahlung.hh" #include "G4eplusAnnihilation.hh"
Brachytherapy Implementation void BrachyPhysicsList::ConstructEM() { theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); //processes lowePhot = new G4LowEnergyPhotoElectric("LowEnPhotoElec"); loweIon = new G4LowEnergyIonisation("LowEnergyIoni"); loweBrem = new G4LowEnergyBremsstrahlung("LowEnBrem"); if (particleName == "gamma") { //gamma pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh); pmanager->AddDiscreteProcess(lowePhot); pmanager->AddDiscreteProcess(new G4LowEnergyCompton); pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion); } else if (particleName == "e-") { //electron pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); pmanager->AddProcess(loweIon, -1, 2,2); pmanager->AddProcess(loweBrem, -1,-1,3); } else if (particleName == "e+") { //positron pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); pmanager->AddProcess(new G4eIonisation, -1, 2,2); pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3); pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4); } } }
sample detector beam Fe lines GaAs lines Scattered photons X-ray fluorescence • Physics: Low Energy processes, atomic relaxation #include "G4LowEnergyCompton.hh" #include "G4LowEnergyGammaConversion.hh" #include "G4LowEnergyPhotoElectric.hh" #include "G4LowEnergyRayleigh.hh" // e+ #include "G4MultipleScattering.hh" #include "G4eIonisation.hh" #include "G4eBremsstrahlung.hh" #include "G4eplusAnnihilation.hh" #include "G4LowEnergyIonisation.hh" #include "G4LowEnergyBremsstrahlung.hh" #include "G4hLowEnergyIonisation.hh"
Process Registration X-ray Fluor else if (particleName == "proton") { //proton pmanager->AddProcess(new G4MultipleScattering,-1,1,1); pmanager->AddProcess(new G4hLowEnergyIonisation,-1, 2,2); } else if ( particleName == "alpha" ) { pmanager->AddProcess(new G4MultipleScattering,-1,1,1); G4hLowEnergyIonisation* iIon = new G4hLowEnergyIonisation() ; pmanager->AddProcess(iIon,-1,2,2); } } } void XrayFluoPhysicsList::ConstructEM() { theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { // gamma pmanager->AddDiscreteProcess(new G4LowEnergyCompton); LePeprocess = new G4LowEnergyPhotoElectric(); //LePeprocess->ActivateAuger(false); //LePeprocess->SetCutForLowEnSecPhotons(10000 * keV); //LePeprocess->SetCutForLowEnSecElectrons(10000 * keV); pmanager->AddDiscreteProcess(LePeprocess); pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh); } else if (particleName == "e-") { //electron pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); LeIoprocess = new G4LowEnergyIonisation(); //LeIoprocess->ActivateAuger(false); //LeIoprocess->SetCutForLowEnSecPhotons(10000 keV); //LeIoprocess->SetCutForLowEnSecElectrons(10000 keV); pmanager->AddProcess(LeIoprocess, -1, 2, 2); LeBrprocess = new G4LowEnergyBremsstrahlung(); pmanager->AddProcess(LeBrprocess, -1, -1, 3); } else if (particleName == "e+") { //positron pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); pmanager->AddProcess(new G4eIonisation, -1, 2,2); pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3); pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4); }
mirror LXe GXe source PMT Underground physics // Electromagnetic Processes // all charged particles // gamma #include "G4LowEnergyRayleigh.hh" #include "G4LowEnergyPhotoElectric.hh" #include "G4LowEnergyCompton.hh" #include "G4LowEnergyGammaConversion.hh" // e- #include "G4LowEnergyIonisation.hh" #include "G4LowEnergyBremsstrahlung.hh" // e+ #include "G4eIonisation.hh" #include "G4eBremsstrahlung.hh" #include "G4eplusAnnihilation.hh" // alpha and GenericIon and deuterons, triton, He3: #include "G4hLowEnergyIonisation.hh" #include "G4EnergyLossTables.hh" //muon: #include "G4MuIonisation.hh" #include "G4MuBremsstrahlung.hh" #include "G4MuPairProduction.hh" #include "G4MuonMinusCaptureAtRest.hh"
void DMXPhysicsList::ConstructEM() { // processes G4MultipleScattering* aMultipleScattering = new G4MultipleScattering(); G4LowEnergyPhotoElectric* lowePhot = new G4LowEnergyPhotoElectric(); G4LowEnergyIonisation* loweIon = new G4LowEnergyIonisation(); G4LowEnergyBremsstrahlung* loweBrem = new G4LowEnergyBremsstrahlung(); // fluorescence: specific cuts for flourescence // from photons, electrons and bremsstrahlung photons G4double fluorcut = 250*eV; lowePhot->SetCutForLowEnSecPhotons(fluorcut); loweIon ->SetCutForLowEnSecPhotons(fluorcut); loweBrem->SetCutForLowEnSecPhotons(fluorcut); Process Creation - DMX
Hadron Ionisation – Choosing a model G4hLowEnergyIonisation* ahadronLowEIon = new G4hLowEnergyIonisation(); ahadronLowEIon->SetNuclearStoppingPowerModel("ICRU_R49") ; ahadronLowEIon->SetNuclearStoppingOn() ; // ahadronLowEIon->SetElectronicStoppingPowerModel // (G4GenericIon::GenericIonDefinition(), "ICRU_R49p") ; // ahadronLowEIon->SetElectronicStoppingPowerModel // (G4Proton::ProtonDefinition(), "ICRU_R49p") ; // Switch off the Barkas and Bloch corrections ahadronLowEIon->SetBarkasOff(); // Switch off hadron-induced fluorescence (for now) ahadronLowEIon->SetFluorescence(false); // NOTE: the same G4hLowEnergyIonisation process is applied to all hadrons, which need not be the case!
Attaching Processes to Particles: theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); G4String particleType = particle->GetParticleType(); G4double particleCharge = particle->GetPDGCharge(); // gamma if (particleName == "gamma") { pmanager->AddDiscreteProcess(new G4LowEnergyRayleigh()); pmanager->AddDiscreteProcess(lowePhot); pmanager->AddDiscreteProcess(new G4LowEnergyCompton()); pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion()); }
Attaching Processes to Particles: { // electron else if (particleName == "e-") { // process ordering: AddProcess(name, at rest, along step, post step) // -1 = not implemented, then ordering pmanager->AddProcess(aMultipleScattering, -1, 1, 1); pmanager->AddProcess(loweIon, -1, 2, 2); pmanager->AddProcess(loweBrem, -1,-1, 3); } // positron else if (particleName == "e+") { pmanager->AddProcess(aMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4eIonisation(), -1, 2, 2); pmanager->AddProcess(new G4eBremsstrahlung(), -1,-1, 3); pmanager->AddProcess(new G4eplusAnnihilation(), 0,-1, 4); }
Attaching Processes to Particles: // muons else if( particleName == "mu+" || particleName == "mu-" ) { pmanager->AddProcess(aMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2); pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3); pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4); if( particleName == "mu-" ) pmanager->AddProcess(new G4MuonMinusCaptureAtRest(), 0,-1,-1); } // charged hadrons else if (particleName == "proton" || particleName == "alpha" || particleName == "deuteron" || particleName == "triton" || particleName == "He3" || particleName == "GenericIon" || (particleType == "nucleus" && particleCharge != 0))
Attaching Processes to Particles: { // OBJECT may be dynamically created as either a GenericIon or nucleus pmanager->AddProcess(aMultipleScattering, -1, 1, 1); pmanager->AddProcess(ahadronLowEIon, -1, 2, 2); } // all other charged particles except geantino else if ((!particle->IsShortLived()) && (particleCharge != 0.0) && (particleName != "chargedgeantino")) { pmanager->AddProcess(aMultipleScattering, -1, 1, 1); pmanager->AddProcess(ahadronLowEIon, -1, 2, 2); } } }
//special for low energy physics G4double lowlimit=250*eV; G4Gamma ::SetEnergyRange(lowlimit,100*GeV); G4Electron::SetEnergyRange(lowlimit,100*GeV); G4Positron::SetEnergyRange(lowlimit,100*GeV); Setting Energy Cuts:
Validation of Low Energy Physics – Some (biased) examples • Two examples of Low Energy Physics Implementation and Validation that I have experience in: • UNDERGROUND (DARK MATTER) SIMULATION – DMX • Low energy gammas, electrons, hadrons and secondary production • GRAVITATIONAL WAVE – LISA (Proof Mass Charging) • All electromagnetic processes that can lead to residual charge, • In particular secondary production
g upwards through Xe shell Pb compton
241Am spectrum experimental
g spectrum experimental
Time Constant Discrimination Geant4 Output Experimental Data • Red Curve = Alphas • Blue Curve = Gammas
Geant4 Simulationof Test-Mass Chargingin the LISA Mission Very long base-line: 1 million km Very high precision: < 1nm – 1pm (!)
Physics List EM processes (LowE) Electrons, Gammas, etc Atomic de-excitation Hadrons (no hFluorescence) Secondaries Cuts: (250 eV), 1mm - 5mm Kill e- outside caging
2 days in parallel !!! 45 s exposure ~ 10,000,000 events 1 charging event ~ 2,000 events ~ 40,000 events/day/CPU Charging rate Results I G4 result: 58 +e/s (G3 result: 11 +e/s) 52 +e/s 6 +e/s
Cuts 1 um 8.77 keV 41 +e/s (~0.1 um) 250 eV 52 +e/s 2 um 30.7 keV 40 +e/s 5 um 53.2 keV 42 +e/s Results II Energy of Primary, MeV Decreasing the production threshold from 10 keV (G3, G4EM) to 250 eV (G4LowE) leads to a ~20% increase of the charging rate!
Cosmic rays, jovian electrons AGILE Solar X-rays, e, p GLAST GLAST Courtesy SOHO EIT Other Users – SPACE and Cosmic Ray
The Future… • In progress • Polarised g conversion, photoelectric • More precise angular distributions (Rayleigh, photoelectric, Bremsstrahlung etc.) • Foreseen • New models, based on different physics approaches • Processes for positrons • Performance Optimisation and Enhancement • Development plan • Driven by user requirements • Schedule compatible with available resources
Conclusions To learn more…………: • Low Energy EM Physics implementation has been demonstrated • Its use within actual examples demonstrate • Validation with experimental data has been carried out (ongoing) • There are still low energy EM physics areas that are being developed • Performance optimisation, benchmarking and testing are being initiated. • Geant4 Physics Reference Manual • Application Developer Guide • http://www.ge.infn.it/geant4/lowE