18#include "BDSIonExcitationEngine.hh"
22#include "G4LorentzVector.hh"
23#include "Randomize.hh"
25#include "CLHEP/Units/PhysicalConstants.h"
26#include "CLHEP/Units/SystemOfUnits.h"
30BDSIonExcitationEngine::BDSIonExcitationEngine()
33BDSIonExcitationEngine::~BDSIonExcitationEngine()
36G4double BDSIonExcitationEngine::CrossSection(G4double photonEnergy)
38 G4double degenerancyG1 = 2.0;
39 G4double degenerancyG2 = 2.0;
40 G4double wavelengthShift = (CLHEP::h_Planck*CLHEP::c_light)/photonEnergy;
43 return (wavelengthShift*wavelengthShift*degenerancyG2)/(CLHEP::twopi*degenerancyG1);
46void BDSIonExcitationEngine::PhotonAbsorption(G4ThreeVector boost)
49 scatteredIonAbsorbed.setPx(incomingGamma.px());
50 scatteredIonAbsorbed.setPy(incomingGamma.py());
51 scatteredIonAbsorbed.setPz(incomingGamma.pz());
52 scatteredIonAbsorbed.setE(incomingGamma.e()+incomingIon.e());
55 scatteredIonAbsorbed.boost(boost);
58void BDSIonExcitationEngine::PhotonEmission(G4ThreeVector boost)
61 G4double theta = G4UniformRand()*CLHEP::twopi;
63 G4double V = G4UniformRand();
64 G4double phi = acos(2.0*V-1.0);
66 G4double emittedGammaEnergy = 230.16*CLHEP::eV;
68 G4ThreeVector emittedGammaUnitVector;
74 G4double z = cos(phi);
75 G4double x = std::sqrt(1-z*z)*cos(theta);
76 G4double y = std::sqrt(1-z*z)*sin(theta);
77 emittedGammaUnitVector.set(x,y,z);
79 emittedGamma.setPx(emittedGammaUnitVector.x()*emittedGammaEnergy);
80 emittedGamma.setPy(emittedGammaUnitVector.y()*emittedGammaEnergy);
81 emittedGamma.setPz(emittedGammaUnitVector.z()*emittedGammaEnergy);
82 emittedGamma.setE(emittedGammaEnergy);
85 scatteredIonEmission.setPx(incomingIon.px()-emittedGamma.px());
86 scatteredIonEmission.setPy(incomingIon.py()-emittedGamma.py());
87 scatteredIonEmission.setPz(incomingIon.pz()-emittedGamma.pz());
88 scatteredIonEmission.setE(incomingIon.e()-emittedGammaEnergy);
91 emittedGamma.boost(boost);
92 scatteredIonEmission.boost(boost);