19#include "BDSComptonEngine.hh"
20#include "BDSGlobalConstants.hh"
21#include "BDSLaserCompton.hh"
26#include "CLHEP/Units/PhysicalConstants.h"
28BDSLaserCompton::BDSLaserCompton(
const G4String& processName):
29 G4VDiscreteProcess(processName),
33 laserWavelength = globals->GetLaserwireWavelength();
34 laserDirection = globals->GetLaserwireDir();
38BDSLaserCompton::~BDSLaserCompton()
43G4VParticleChange* BDSLaserCompton::PostStepDoIt(
const G4Track& trackData,
44 const G4Step& stepData)
46 aParticleChange.Initialize(trackData);
52 {
return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);}
54 G4Material* aMaterial = trackData.GetMaterial();
58 laserWavelength = globals->GetLaserwireWavelength();
59 laserDirection = globals->GetLaserwireDir();
61 laserEnergy = CLHEP::twopi*CLHEP::hbarc/laserWavelength;
64 G4LorentzVector Laser4mom(laserEnergy*laserDirection.unit(),laserEnergy);
66 const G4DynamicParticle* aDynamicParticle = trackData.GetDynamicParticle();
68 comptonEngine->SetIncomingElectron4Vec(aDynamicParticle->Get4Momentum());
69 comptonEngine->SetIncomingPhoton4Vec(Laser4mom);
70 comptonEngine->PerformCompton();
72 if(globals->GetLaserwireTrackPhotons())
75 G4LorentzVector ScatGam = comptonEngine->GetScatteredGamma();
76 G4DynamicParticle* aGamma =
new G4DynamicParticle (G4Gamma::Gamma(),
77 ScatGam.vect().unit(),
80 aParticleChange.SetNumberOfSecondaries(1);
81 aParticleChange.AddSecondary(aGamma);
82 if(!globals->GetLaserwireTrackElectrons())
84 aParticleChange.ProposeEnergy(0.);
85 aParticleChange.ProposeLocalEnergyDeposit (0.);
86 aParticleChange.ProposeTrackStatus(fStopAndKill);
91 aParticleChange.SetNumberOfSecondaries(0);
92 aParticleChange.ProposeLocalEnergyDeposit (0.);
95 G4double NewKinEnergy = comptonEngine->GetScatteredElectron().e()-CLHEP::electron_mass_c2;
97 G4LorentzVector ScatEl = comptonEngine->GetScatteredElectron();
99 if (NewKinEnergy > 0.)
101 aParticleChange.ProposeMomentumDirection(ScatEl.vect().unit());
102 aParticleChange.ProposeEnergy(NewKinEnergy);
103 aParticleChange.ProposeLocalEnergyDeposit (0.);
107 aParticleChange.ProposeEnergy( 0. );
108 aParticleChange.ProposeLocalEnergyDeposit (0.);
109 G4double charge= aDynamicParticle->GetCharge();
110 if (charge<0.) aParticleChange.ProposeTrackStatus(fStopAndKill);
111 else aParticleChange.ProposeTrackStatus(fStopButAlive);
115 FireLaserCompton =
false;
117 return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);
Engine to calculate product of compton scattering process.
static BDSGlobalConstants * Instance()
Access method.
static BDSMaterials * Instance()
Singleton pattern access.