18#include "BDSComptonEngine.hh"
19#include "BDSGlobalConstants.hh"
20#include "BDSLaserCompton.hh"
25#include "CLHEP/Units/PhysicalConstants.h"
27BDSLaserCompton::BDSLaserCompton(
const G4String& processName):
28 G4VDiscreteProcess(processName),
32 laserWavelength = globals->GetLaserwireWavelength();
33 laserDirection = globals->GetLaserwireDir();
37BDSLaserCompton::~BDSLaserCompton()
42G4VParticleChange* BDSLaserCompton::PostStepDoIt(
const G4Track& trackData,
43 const G4Step& stepData)
45 aParticleChange.Initialize(trackData);
51 {
return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);}
53 G4Material* aMaterial = trackData.GetMaterial();
57 laserWavelength = globals->GetLaserwireWavelength();
58 laserDirection = globals->GetLaserwireDir();
60 laserEnergy = CLHEP::twopi*CLHEP::hbarc/laserWavelength;
63 G4LorentzVector Laser4mom(laserEnergy*laserDirection.unit(),laserEnergy);
65 const G4DynamicParticle* aDynamicParticle = trackData.GetDynamicParticle();
67 comptonEngine->SetIncomingElectron4Vec(aDynamicParticle->Get4Momentum());
68 comptonEngine->SetIncomingPhoton4Vec(Laser4mom);
69 comptonEngine->PerformCompton();
71 if(globals->GetLaserwireTrackPhotons())
74 G4LorentzVector ScatGam = comptonEngine->GetScatteredGamma();
75 G4DynamicParticle* aGamma =
new G4DynamicParticle (G4Gamma::Gamma(),
76 ScatGam.vect().unit(),
79 aParticleChange.SetNumberOfSecondaries(1);
80 aParticleChange.AddSecondary(aGamma);
81 if(!globals->GetLaserwireTrackElectrons())
83 aParticleChange.ProposeEnergy(0.);
84 aParticleChange.ProposeLocalEnergyDeposit (0.);
85 aParticleChange.ProposeTrackStatus(fStopAndKill);
90 aParticleChange.SetNumberOfSecondaries(0);
91 aParticleChange.ProposeLocalEnergyDeposit (0.);
94 G4double NewKinEnergy = comptonEngine->GetScatteredElectron().e()-CLHEP::electron_mass_c2;
96 G4LorentzVector ScatEl = comptonEngine->GetScatteredElectron();
98 if (NewKinEnergy > 0.)
100 aParticleChange.ProposeMomentumDirection(ScatEl.vect().unit());
101 aParticleChange.ProposeEnergy(NewKinEnergy);
102 aParticleChange.ProposeLocalEnergyDeposit (0.);
106 aParticleChange.ProposeEnergy( 0. );
107 aParticleChange.ProposeLocalEnergyDeposit (0.);
108 G4double charge= aDynamicParticle->GetCharge();
109 if (charge<0.) aParticleChange.ProposeTrackStatus(fStopAndKill);
110 else aParticleChange.ProposeTrackStatus(fStopButAlive);
114 FireLaserCompton =
false;
116 return G4VDiscreteProcess::PostStepDoIt(trackData,stepData);
Engine to calculate product of compton scattering process.
static BDSGlobalConstants * Instance()
Access method.
static BDSMaterials * Instance()
Singleton pattern access.