81 if (isOkToBeInitialised ==
true && isInitialised ==
false) {
82 G4cout <<
"Calling G4MicroElecLOPhononModel" <<
"::Initialise()" <<
G4endl;
84 if (isInitialised) {
return; }
99 m0 = CLHEP::electron_mass_c2 / c_squared / kg,
100 h = CLHEP::hbar_Planck / (m2*kg / s),
101 eps0 = CLHEP::epsilon0 / (farad / m),
102 kb = CLHEP::k_Boltzmann / (joule / kelvin);
107 isOkToBeInitialised =
true;
119 phononEnergy = (0.75*0.153+0.25*0.063 )* eV;
120 G4double hw = (phononEnergy / eV) * e;
121 G4double n = 1.0 / (std::exp(hw / (kb*T)) - 1);
132 G4double racine = std::sqrt(1. + ((-signe*hw) / E));
134 G4double P = (std::pow(e, 2) / (4 * pi*eps0*h*h)) * (n + 0.5 + signe*0.5) * ((1 / einf) - (1 / eps)) * std::sqrt(m0 / (2 * E)) *hw* std::log((1 + racine) / (signe * 1 + ((-signe)*racine)));
136 G4double MFP = (std::sqrt(2. * E / m0) / P)*m;
144 std::vector<G4DynamicParticle*>*,
153 Eprim = E + phononEnergy;
156 Eprim = E - phononEnergy;
159 G4double B = (E + Eprim + 2 * std::sqrt(E*Eprim)) / (E + Eprim - 2 * std::sqrt(E*Eprim));
160 G4double cosTheta = ((E + Eprim) / (2 * std::sqrt(E*Eprim)))*(1 - std::pow(
B, rand)) + std::pow(
B, rand);
170 G4double xDir = std::sqrt(1. - cosTheta*cosTheta);
172 xDir *= std::cos(phi);
173 yDir *= std::sin(phi);
175 G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers));
double B(double temperature)
G4GLOB_DLL std::ostream G4cout
Hep3Vector orthogonal() const
Hep3Vector cross(const Hep3Vector &) const
const G4ThreeVector & GetMomentumDirection() const
G4double GetKineticEnergy() const
const G4String & GetName() const
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax) override
G4MicroElecLOPhononModel(const G4ParticleDefinition *p=0, const G4String &nam="G4MicroElecLOPhononModel")
G4ParticleChangeForGamma * fParticleChangeForGamma
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
~G4MicroElecLOPhononModel() override
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4ParticleChangeForGamma * GetParticleChangeForGamma()