19#include "BDSIonExcitationEngine.hh"
23#include "G4LorentzVector.hh"
24#include "Randomize.hh"
26#include "CLHEP/Units/PhysicalConstants.h"
27#include "CLHEP/Units/SystemOfUnits.h"
31BDSIonExcitationEngine::BDSIonExcitationEngine()
34BDSIonExcitationEngine::~BDSIonExcitationEngine()
37G4double BDSIonExcitationEngine::CrossSection(G4double photonEnergy)
39 G4double degenerancyG1 = 2.0;
40 G4double degenerancyG2 = 2.0;
41 G4double wavelengthShift = (CLHEP::h_Planck*CLHEP::c_light)/photonEnergy;
44 return (wavelengthShift*wavelengthShift*degenerancyG2)/(CLHEP::twopi*degenerancyG1);
47void BDSIonExcitationEngine::PhotonAbsorption(G4ThreeVector boost)
50 scatteredIonAbsorbed.setPx(incomingGamma.px());
51 scatteredIonAbsorbed.setPy(incomingGamma.py());
52 scatteredIonAbsorbed.setPz(incomingGamma.pz());
53 scatteredIonAbsorbed.setE(incomingGamma.e()+incomingIon.e());
56 scatteredIonAbsorbed.boost(boost);
59void BDSIonExcitationEngine::PhotonEmission(G4ThreeVector boost)
62 G4double theta = G4UniformRand()*CLHEP::twopi;
64 G4double V = G4UniformRand();
65 G4double phi = acos(2.0*V-1.0);
67 G4double emittedGammaEnergy = 230.16*CLHEP::eV;
69 G4ThreeVector emittedGammaUnitVector;
75 G4double z = cos(phi);
76 G4double x = std::sqrt(1-z*z)*cos(theta);
77 G4double y = std::sqrt(1-z*z)*sin(theta);
78 emittedGammaUnitVector.set(x,y,z);
80 emittedGamma.setPx(emittedGammaUnitVector.x()*emittedGammaEnergy);
81 emittedGamma.setPy(emittedGammaUnitVector.y()*emittedGammaEnergy);
82 emittedGamma.setPz(emittedGammaUnitVector.z()*emittedGammaEnergy);
83 emittedGamma.setE(emittedGammaEnergy);
86 scatteredIonEmission.setPx(incomingIon.px()-emittedGamma.px());
87 scatteredIonEmission.setPy(incomingIon.py()-emittedGamma.py());
88 scatteredIonEmission.setPz(incomingIon.pz()-emittedGamma.pz());
89 scatteredIonEmission.setE(incomingIon.e()-emittedGammaEnergy);
92 emittedGamma.boost(boost);
93 scatteredIonEmission.boost(boost);