Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4PhotoElectricAngularGeneratorPolarized Class Reference

#include <G4PhotoElectricAngularGeneratorPolarized.hh>

Inheritance diagram for G4PhotoElectricAngularGeneratorPolarized:
G4VEmAngularDistribution

Public Member Functions

 G4PhotoElectricAngularGeneratorPolarized ()
 
 G4PhotoElectricAngularGeneratorPolarized (const G4PhotoElectricAngularGeneratorPolarized &)=delete
 
const G4StringGetName () const
 
G4PhotoElectricAngularGeneratorPolarizedoperator= (const G4PhotoElectricAngularGeneratorPolarized &right)=delete
 
void PrintGeneratorInformation () const override
 
G4ThreeVectorSampleDirection (const G4DynamicParticle *dp, G4double eKinEnergy, G4int shellId, const G4Material *mat=nullptr) override
 
virtual G4ThreeVectorSampleDirectionForShell (const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, G4int shellID, const G4Material *)
 
virtual void SamplePairDirections (const G4DynamicParticle *dp, G4double elecKinEnergy, G4double posiKinEnergy, G4ThreeVector &dirElectron, G4ThreeVector &dirPositron, G4int Z=0, const G4Material *mat=nullptr)
 
 ~G4PhotoElectricAngularGeneratorPolarized ()
 

Protected Member Functions

G4ThreeVector PerpendicularVector (const G4ThreeVector &a) const
 

Protected Attributes

G4ThreeVector fLocalDirection
 
G4bool fPolarisation
 

Private Member Functions

G4double CrossSectionMajorantFunction (G4double theta, G4double cBeta) const
 
G4double DSigmaKshellGavrila1959 (G4double beta, G4double theta, G4double phi) const
 
G4double DSigmaL1shellGavrila (G4double beta, G4double theta, G4double phi) const
 
G4ThreeVector PhotoElectronComputeFinalDirection (const G4RotationMatrix &rotation, G4double theta, G4double phi) const
 
void PhotoElectronGeneratePhiAndTheta (G4int shellId, G4double beta, G4double aBeta, G4double cBeta, G4double *pphi, G4double *ptheta) const
 
void PhotoElectronGetMajorantSurfaceAandCParameters (G4int shellId, G4double beta, G4double *majorantSurfaceParameterA, G4double *majorantSurfaceParameterC) const
 
G4RotationMatrix PhotoElectronRotationMatrix (const G4ThreeVector &direction, const G4ThreeVector &polarization)
 

Private Attributes

G4double aMajorantSurfaceParameterTable [980][2]
 
G4double betaArray [3]
 
G4double cMajorantSurfaceParameterTable [980][2]
 
G4String fName
 

Detailed Description

Definition at line 52 of file G4PhotoElectricAngularGeneratorPolarized.hh.

Constructor & Destructor Documentation

◆ G4PhotoElectricAngularGeneratorPolarized() [1/2]

G4PhotoElectricAngularGeneratorPolarized::G4PhotoElectricAngularGeneratorPolarized ( )
explicit

Definition at line 71 of file G4PhotoElectricAngularGeneratorPolarized.cc.

72 :G4VEmAngularDistribution("AngularGenSauterGavrilaPolarized")
73{
74 const G4int arrayDim = 980;
75
76 //minimum electron beta parameter allowed
77 betaArray[0] = 0.02;
78 //beta step
79 betaArray[1] = 0.001;
80 //maximum index array for a and c tables
81 betaArray[2] = arrayDim - 1;
82
83 // read Majorant Surface Parameters. This are required in order to generate
84 //Gavrila angular photoelectron distribution
85 for(G4int level = 0; level < 2; level++){
86 char nameChar0[100] = "ftab0.dat"; // K-shell Majorant Surface Parameters
87 char nameChar1[100] = "ftab1.dat"; // L-shell Majorant Surface Parameters
88
89 G4String filename;
90 if(level == 0) filename = nameChar0;
91 if(level == 1) filename = nameChar1;
92
93 char* path = std::getenv("G4LEDATA");
94 if (!path)
95 {
96 G4String excep = "G4EMDataSet - G4LEDATA environment variable not set";
97 G4Exception("G4PhotoElectricAngularGeneratorPolarized::G4PhotoElectricAngularGeneratorPolarized",
98 "em0006",FatalException,"G4LEDATA environment variable not set");
99 return;
100 }
101
102 G4String pathString(path);
103 G4String dirFile = pathString + "/photoelectric_angular/" + filename;
104 std::ifstream infile(dirFile);
105 if (!infile.is_open())
106 {
107 G4String excep = "data file: " + dirFile + " not found";
108 G4Exception("G4PhotoElectricAngularGeneratorPolarized::G4PhotoElectricAngularGeneratorPolarized",
109 "em0003",FatalException,excep);
110 return;
111 }
112
113 // Read parameters into tables. The parameters are function of incident electron
114 // energy and shell level
115 G4float aRead=0,cRead=0, beta=0;
116 for(G4int i=0 ; i<arrayDim ;++i){
117 infile >> beta >> aRead >> cRead;
118 aMajorantSurfaceParameterTable[i][level] = aRead;
119 cMajorantSurfaceParameterTable[i][level] = cRead;
120 }
121 infile.close();
122 }
123}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
float G4float
Definition: G4Types.hh:84
int G4int
Definition: G4Types.hh:85
G4VEmAngularDistribution(const G4String &name)

References aMajorantSurfaceParameterTable, anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, betaArray, cMajorantSurfaceParameterTable, FatalException, and G4Exception().

◆ ~G4PhotoElectricAngularGeneratorPolarized()

G4PhotoElectricAngularGeneratorPolarized::~G4PhotoElectricAngularGeneratorPolarized ( )

Definition at line 127 of file G4PhotoElectricAngularGeneratorPolarized.cc.

128{}

◆ G4PhotoElectricAngularGeneratorPolarized() [2/2]

G4PhotoElectricAngularGeneratorPolarized::G4PhotoElectricAngularGeneratorPolarized ( const G4PhotoElectricAngularGeneratorPolarized )
delete

Member Function Documentation

◆ CrossSectionMajorantFunction()

G4double G4PhotoElectricAngularGeneratorPolarized::CrossSectionMajorantFunction ( G4double  theta,
G4double  cBeta 
) const
private

Definition at line 221 of file G4PhotoElectricAngularGeneratorPolarized.cc.

223{
224 // Compute Majorant Function
225 G4double crossSectionMajorantFunctionValue = 0;
226 crossSectionMajorantFunctionValue = theta/(1+cBeta*theta*theta);
227 return crossSectionMajorantFunctionValue;
228}
double G4double
Definition: G4Types.hh:83

Referenced by PhotoElectronGeneratePhiAndTheta().

◆ DSigmaKshellGavrila1959()

G4double G4PhotoElectricAngularGeneratorPolarized::DSigmaKshellGavrila1959 ( G4double  beta,
G4double  theta,
G4double  phi 
) const
private

Definition at line 233 of file G4PhotoElectricAngularGeneratorPolarized.cc.

235{
236 //Double differential K shell cross-section (Gavrila 1959)
237
238 G4double beta2 = beta*beta;
239 G4double oneBeta2 = 1 - beta2;
240 G4double sqrtOneBeta2 = std::sqrt(oneBeta2);
241 G4double oneBeta2_to_3_2 = std::pow(oneBeta2,1.5);
242 G4double cosTheta = std::cos(theta);
243 G4double sinTheta2 = std::sin(theta)*std::sin(theta);
244 G4double cosPhi2 = std::cos(phi)*std::cos(phi);
245 G4double oneBetaCosTheta = 1-beta*cosTheta;
246 G4double dsigma = 0;
247 G4double firstTerm = 0;
248 G4double secondTerm = 0;
249
250 firstTerm = sinTheta2*cosPhi2/std::pow(oneBetaCosTheta,4)-(1 - sqrtOneBeta2)/(2*oneBeta2) *
251 (sinTheta2 * cosPhi2)/std::pow(oneBetaCosTheta,3) + (1-sqrtOneBeta2)*
252 (1-sqrtOneBeta2)/(4*oneBeta2_to_3_2) * sinTheta2/std::pow(oneBetaCosTheta,3);
253
254 secondTerm = std::sqrt(1 - sqrtOneBeta2)/(std::pow(2.,3.5)*beta2*std::pow(oneBetaCosTheta,2.5)) *
255 (4*beta2/sqrtOneBeta2 * sinTheta2*cosPhi2/oneBetaCosTheta + 4*beta/oneBeta2 * cosTheta * cosPhi2
256 - 4*(1-sqrtOneBeta2)/oneBeta2 *(1+cosPhi2) - beta2 * (1-sqrtOneBeta2)/oneBeta2 * sinTheta2/oneBetaCosTheta
257 + 4*beta2*(1-sqrtOneBeta2)/oneBeta2_to_3_2 - 4*beta*(1-sqrtOneBeta2)*(1-sqrtOneBeta2)/oneBeta2_to_3_2 * cosTheta)
258 + (1-sqrtOneBeta2)/(4*beta2*oneBetaCosTheta*oneBetaCosTheta) * (beta/oneBeta2 - 2/oneBeta2 * cosTheta * cosPhi2 +
259 (1-sqrtOneBeta2)/oneBeta2_to_3_2 * cosTheta - beta * (1-sqrtOneBeta2)/oneBeta2_to_3_2);
260
261 dsigma = ( firstTerm*(1-pi*fine_structure_const/beta) + secondTerm*(pi*fine_structure_const) )*std::sin(theta);
262
263 return dsigma;
264}
static constexpr double pi
Definition: G4SIunits.hh:55
int fine_structure_const
Definition: hepunit.py:286

References anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, source.hepunit::fine_structure_const, and pi.

Referenced by PhotoElectronGeneratePhiAndTheta().

◆ DSigmaL1shellGavrila()

G4double G4PhotoElectricAngularGeneratorPolarized::DSigmaL1shellGavrila ( G4double  beta,
G4double  theta,
G4double  phi 
) const
private

Definition at line 269 of file G4PhotoElectricAngularGeneratorPolarized.cc.

271{
272 //Double differential L1 shell cross-section (Gavrila 1961)
273 G4double beta2 = beta*beta;
274 G4double oneBeta2 = 1-beta2;
275 G4double sqrtOneBeta2 = std::sqrt(oneBeta2);
276 G4double oneBeta2_to_3_2=std::pow(oneBeta2,1.5);
277 G4double cosTheta = std::cos(theta);
278 G4double sinTheta2 =std::sin(theta)*std::sin(theta);
279 G4double cosPhi2 = std::cos(phi)*std::cos(phi);
280 G4double oneBetaCosTheta = 1-beta*cosTheta;
281
282 G4double dsigma = 0;
283 G4double firstTerm = 0;
284 G4double secondTerm = 0;
285
286 firstTerm = sinTheta2*cosPhi2/std::pow(oneBetaCosTheta,4)-(1 - sqrtOneBeta2)/(2*oneBeta2)
287 * (sinTheta2 * cosPhi2)/std::pow(oneBetaCosTheta,3) + (1-sqrtOneBeta2)*
288 (1-sqrtOneBeta2)/(4*oneBeta2_to_3_2) * sinTheta2/std::pow(oneBetaCosTheta,3);
289
290 secondTerm = std::sqrt(1 - sqrtOneBeta2)/(std::pow(2.,3.5)*beta2*std::pow(oneBetaCosTheta,2.5)) *
291 (4*beta2/sqrtOneBeta2 * sinTheta2*cosPhi2/oneBetaCosTheta + 4*beta/oneBeta2 * cosTheta * cosPhi2
292 - 4*(1-sqrtOneBeta2)/oneBeta2 *(1+cosPhi2) - beta2 * (1-sqrtOneBeta2)/oneBeta2 * sinTheta2/oneBetaCosTheta
293 + 4*beta2*(1-sqrtOneBeta2)/oneBeta2_to_3_2 - 4*beta*(1-sqrtOneBeta2)*(1-sqrtOneBeta2)/oneBeta2_to_3_2 * cosTheta)
294 + (1-sqrtOneBeta2)/(4*beta2*oneBetaCosTheta*oneBetaCosTheta) * (beta/oneBeta2 - 2/oneBeta2 * cosTheta * cosPhi2 +
295 (1-sqrtOneBeta2)/oneBeta2_to_3_2*cosTheta - beta*(1-sqrtOneBeta2)/oneBeta2_to_3_2);
296
297 dsigma = ( firstTerm*(1-pi*fine_structure_const/beta) + secondTerm*(pi*fine_structure_const) )*std::sin(theta);
298
299 return dsigma;
300}

References anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, source.hepunit::fine_structure_const, and pi.

Referenced by PhotoElectronGeneratePhiAndTheta().

◆ GetName()

const G4String & G4VEmAngularDistribution::GetName ( ) const
inlineinherited

Definition at line 111 of file G4VEmAngularDistribution.hh.

112{
113 return fName;
114}

References G4VEmAngularDistribution::fName.

◆ operator=()

G4PhotoElectricAngularGeneratorPolarized & G4PhotoElectricAngularGeneratorPolarized::operator= ( const G4PhotoElectricAngularGeneratorPolarized right)
delete

◆ PerpendicularVector()

G4ThreeVector G4PhotoElectricAngularGeneratorPolarized::PerpendicularVector ( const G4ThreeVector a) const
protected

Definition at line 423 of file G4PhotoElectricAngularGeneratorPolarized.cc.

425{
426 G4double dx = a.x();
427 G4double dy = a.y();
428 G4double dz = a.z();
429 G4double x = dx < 0.0 ? -dx : dx;
430 G4double y = dy < 0.0 ? -dy : dy;
431 G4double z = dz < 0.0 ? -dz : dz;
432 if (x < y) {
433 return x < z ? G4ThreeVector(-dy,dx,0) : G4ThreeVector(0,-dz,dy);
434 }else{
435 return y < z ? G4ThreeVector(dz,0,-dx) : G4ThreeVector(-dy,dx,0);
436 }
437}
CLHEP::Hep3Vector G4ThreeVector
double z() const
double x() const
double y() const

References CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by PhotoElectronRotationMatrix().

◆ PhotoElectronComputeFinalDirection()

G4ThreeVector G4PhotoElectricAngularGeneratorPolarized::PhotoElectronComputeFinalDirection ( const G4RotationMatrix rotation,
G4double  theta,
G4double  phi 
) const
private

Definition at line 394 of file G4PhotoElectricAngularGeneratorPolarized.cc.

395{
396 //computes the photoelectron momentum unitary vector
397 G4double sint = std::sin(theta);
398 G4double px = std::cos(phi)*sint;
399 G4double py = std::sin(phi)*sint;
400 G4double pz = std::cos(theta);
401
402 G4ThreeVector samplingDirection(px,py,pz);
403
404 G4ThreeVector outgoingDirection = rotation*samplingDirection;
405 return outgoingDirection;
406}

Referenced by SampleDirection().

◆ PhotoElectronGeneratePhiAndTheta()

void G4PhotoElectricAngularGeneratorPolarized::PhotoElectronGeneratePhiAndTheta ( G4int  shellId,
G4double  beta,
G4double  aBeta,
G4double  cBeta,
G4double pphi,
G4double ptheta 
) const
private

Definition at line 176 of file G4PhotoElectricAngularGeneratorPolarized.cc.

179{
180 G4double rand1, rand2, rand3 = 0;
181 G4double phi = 0;
182 G4double theta = 0;
183 G4double crossSectionValue = 0;
184 G4double crossSectionMajorantFunctionValue = 0;
185 G4double maxBeta = 0;
186
187 do {
188
189 rand1 = G4UniformRand();
190 rand2 = G4UniformRand();
191 rand3 = G4UniformRand();
192
193 phi=2*pi*rand1;
194
195 if(shellLevel == 0){
196 // Polarized Gavrila Cross-Section for K-shell (1959)
197 theta=std::sqrt(((G4Exp(rand2*std::log(1+cBeta*pi*pi)))-1)/cBeta);
198 crossSectionMajorantFunctionValue =
199 CrossSectionMajorantFunction(theta, cBeta);
200 crossSectionValue = DSigmaKshellGavrila1959(beta, theta, phi);
201 } else {
202 // Polarized Gavrila Cross-Section for other shells (L1-shell) (1961)
203 theta = std::sqrt(((G4Exp(rand2*std::log(1+cBeta*pi*pi)))-1)/cBeta);
204 crossSectionMajorantFunctionValue =
205 CrossSectionMajorantFunction(theta, cBeta);
206 crossSectionValue = DSigmaL1shellGavrila(beta, theta, phi);
207 }
208
209 maxBeta=rand3*aBeta*crossSectionMajorantFunctionValue;
210 if(crossSectionValue < 0.0) { crossSectionValue = maxBeta; }
211
212 } while(maxBeta > crossSectionValue || theta > CLHEP::pi);
213
214 *pphi = phi;
215 *ptheta = theta;
216}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
#define G4UniformRand()
Definition: Randomize.hh:52
G4double DSigmaL1shellGavrila(G4double beta, G4double theta, G4double phi) const
G4double CrossSectionMajorantFunction(G4double theta, G4double cBeta) const
G4double DSigmaKshellGavrila1959(G4double beta, G4double theta, G4double phi) const
static constexpr double pi
Definition: SystemOfUnits.h:55

References anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, CrossSectionMajorantFunction(), DSigmaKshellGavrila1959(), DSigmaL1shellGavrila(), G4Exp(), G4UniformRand, CLHEP::pi, and pi.

Referenced by SampleDirection().

◆ PhotoElectronGetMajorantSurfaceAandCParameters()

void G4PhotoElectricAngularGeneratorPolarized::PhotoElectronGetMajorantSurfaceAandCParameters ( G4int  shellId,
G4double  beta,
G4double majorantSurfaceParameterA,
G4double majorantSurfaceParameterC 
) const
private

Definition at line 348 of file G4PhotoElectricAngularGeneratorPolarized.cc.

349{
350 // This member function finds for a given shell and beta value
351 // of the outgoing electron the correct Majorant Surface parameters
352 G4double aBeta,cBeta;
353 G4double bMin,bStep;
354 G4int indexMax;
355 G4int level = 0;
356 if(shellId > 0) { level = 1; }
357
358 bMin = betaArray[0];
359 bStep = betaArray[1];
360 indexMax = (G4int)betaArray[2];
361 const G4double kBias = 1e-9;
362
363 G4int k = (G4int)((beta-bMin+kBias)/bStep);
364
365 if(k < 0)
366 k = 0;
367 if(k > indexMax)
368 k = indexMax;
369
370 if(k == 0)
372 else if(k==indexMax)
374 else{
376 aBeta = std::max(aBeta,aMajorantSurfaceParameterTable[k+1][level]);
377 }
378
379 if(k == 0)
381 else if(k == indexMax)
383 else{
385 cBeta = std::max(cBeta,cMajorantSurfaceParameterTable[k+1][level]);
386 }
387
388 *majorantSurfaceParameterA = aBeta;
389 *majorantSurfaceParameterC = cBeta;
390}
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References aMajorantSurfaceParameterTable, anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, betaArray, cMajorantSurfaceParameterTable, and G4INCL::Math::max().

Referenced by SampleDirection().

◆ PhotoElectronRotationMatrix()

G4RotationMatrix G4PhotoElectricAngularGeneratorPolarized::PhotoElectronRotationMatrix ( const G4ThreeVector direction,
const G4ThreeVector polarization 
)
private

Definition at line 305 of file G4PhotoElectricAngularGeneratorPolarized.cc.

308{
309 G4double mK = direction.mag();
310 G4double mS = polarization.mag();
311 G4ThreeVector polarization2 = polarization;
312 const G4double kTolerance = 1e-6;
313
314 if(!(polarization.isOrthogonal(direction,kTolerance)) || mS == 0){
315 G4ThreeVector d0 = direction.unit();
317 G4ThreeVector a0 = a1.unit();
318 G4double rand1 = G4UniformRand();
319 G4double angle = twopi*rand1;
320 G4ThreeVector b0 = d0.cross(a0);
322 c.setX(std::cos(angle)*(a0.x())+std::sin(angle)*b0.x());
323 c.setY(std::cos(angle)*(a0.y())+std::sin(angle)*b0.y());
324 c.setZ(std::cos(angle)*(a0.z())+std::sin(angle)*b0.z());
325 polarization2 = c.unit();
326 mS = polarization2.mag();
327 }else
328 {
329 if ( polarization.howOrthogonal(direction) != 0)
330 {
331 polarization2 = polarization
332 - polarization.dot(direction)/direction.dot(direction) * direction;
333 }
334 }
335
336 G4ThreeVector direction2 = direction/mK;
337 polarization2 = polarization2/mS;
338
339 G4ThreeVector y = direction2.cross(polarization2);
340
341 G4RotationMatrix R(polarization2,y,direction2);
342 return R;
343}
const G4double a0
static constexpr double twopi
Definition: G4SIunits.hh:56
static const G4double angle[DIMMOTT]
Hep3Vector unit() const
void setY(double)
Hep3Vector cross(const Hep3Vector &) const
double dot(const Hep3Vector &) const
void setZ(double)
bool isOrthogonal(const Hep3Vector &v, double epsilon=tolerance) const
Definition: SpaceVector.cc:233
double mag() const
double howOrthogonal(const Hep3Vector &v) const
Definition: SpaceVector.cc:215
void setX(double)
G4ThreeVector PerpendicularVector(const G4ThreeVector &a) const

References a0, angle, CLHEP::Hep3Vector::cross(), CLHEP::Hep3Vector::dot(), G4UniformRand, CLHEP::Hep3Vector::howOrthogonal(), CLHEP::Hep3Vector::isOrthogonal(), CLHEP::Hep3Vector::mag(), anonymous_namespace{G4ChipsKaonMinusElasticXS.cc}::mK, PerpendicularVector(), CLHEP::Hep3Vector::setX(), CLHEP::Hep3Vector::setY(), CLHEP::Hep3Vector::setZ(), twopi, CLHEP::Hep3Vector::unit(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by SampleDirection().

◆ PrintGeneratorInformation()

void G4PhotoElectricAngularGeneratorPolarized::PrintGeneratorInformation ( ) const
overridevirtual

Reimplemented from G4VEmAngularDistribution.

Definition at line 410 of file G4PhotoElectricAngularGeneratorPolarized.cc.

411{
412 G4cout << "\n" << G4endl;
413 G4cout << "Polarized Photoelectric Angular Generator" << G4endl;
414 G4cout << "PhotoElectric Electron Angular Generator based on the general Gavrila photoelectron angular distribution" << G4endl;
415 G4cout << "Includes polarization effects for K and L1 atomic shells, according to Gavrilla (1959, 1961)." << G4endl;
416 G4cout << "For higher shells the L1 cross-section is used." << G4endl;
417 G4cout << "(see Physics Reference Manual) \n" << G4endl;
418}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References G4cout, and G4endl.

◆ SampleDirection()

G4ThreeVector & G4PhotoElectricAngularGeneratorPolarized::SampleDirection ( const G4DynamicParticle dp,
G4double  eKinEnergy,
G4int  shellId,
const G4Material mat = nullptr 
)
overridevirtual

Implements G4VEmAngularDistribution.

Definition at line 133 of file G4PhotoElectricAngularGeneratorPolarized.cc.

138{
139 // (shellId == 0) - K-shell - Polarized model for K-shell
140 // (shellId > 0) - L1-shell - Polarized model for L1 and higher shells
141
142 // Calculate Lorentz term (gamma) and beta parameters
143 G4double gamma = 1 + eKinEnergy/electron_mass_c2;
144 G4double beta = std::sqrt((gamma - 1)*(gamma + 1))/gamma;
145
146 const G4ThreeVector& direction = dp->GetMomentumDirection();
147 const G4ThreeVector& polarization = dp->GetPolarization();
148
149 G4double theta, phi = 0;
150 // Majorant surface parameters
151 // function of the outgoing electron kinetic energy
152 G4double aBeta = 0;
153 G4double cBeta = 0;
154
155 // For the outgoing kinetic energy
156 // find the current majorant surface parameters
158
159 // Generate pho and theta according to the shell level
160 // and beta parameter of the electron
161 PhotoElectronGeneratePhiAndTheta(shellId, beta, aBeta, cBeta, &phi, &theta);
162
163 // Determine the rotation matrix
164 const G4RotationMatrix rotation =
165 PhotoElectronRotationMatrix(direction, polarization);
166
167 // Compute final direction of the outgoing electron
169
170 return fLocalDirection;
171}
const G4ThreeVector & GetMomentumDirection() const
const G4ThreeVector & GetPolarization() const
void PhotoElectronGetMajorantSurfaceAandCParameters(G4int shellId, G4double beta, G4double *majorantSurfaceParameterA, G4double *majorantSurfaceParameterC) const
G4ThreeVector PhotoElectronComputeFinalDirection(const G4RotationMatrix &rotation, G4double theta, G4double phi) const
void PhotoElectronGeneratePhiAndTheta(G4int shellId, G4double beta, G4double aBeta, G4double cBeta, G4double *pphi, G4double *ptheta) const
G4RotationMatrix PhotoElectronRotationMatrix(const G4ThreeVector &direction, const G4ThreeVector &polarization)
float electron_mass_c2
Definition: hepunit.py:273

References anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, source.hepunit::electron_mass_c2, G4VEmAngularDistribution::fLocalDirection, G4DynamicParticle::GetMomentumDirection(), G4DynamicParticle::GetPolarization(), PhotoElectronComputeFinalDirection(), PhotoElectronGeneratePhiAndTheta(), PhotoElectronGetMajorantSurfaceAandCParameters(), and PhotoElectronRotationMatrix().

◆ SampleDirectionForShell()

G4ThreeVector & G4VEmAngularDistribution::SampleDirectionForShell ( const G4DynamicParticle dp,
G4double  finalTotalEnergy,
G4int  Z,
G4int  shellID,
const G4Material mat 
)
virtualinherited

◆ SamplePairDirections()

void G4VEmAngularDistribution::SamplePairDirections ( const G4DynamicParticle dp,
G4double  elecKinEnergy,
G4double  posiKinEnergy,
G4ThreeVector dirElectron,
G4ThreeVector dirPositron,
G4int  Z = 0,
const G4Material mat = nullptr 
)
virtualinherited

Field Documentation

◆ aMajorantSurfaceParameterTable

G4double G4PhotoElectricAngularGeneratorPolarized::aMajorantSurfaceParameterTable[980][2]
private

◆ betaArray

G4double G4PhotoElectricAngularGeneratorPolarized::betaArray[3]
private

◆ cMajorantSurfaceParameterTable

G4double G4PhotoElectricAngularGeneratorPolarized::cMajorantSurfaceParameterTable[980][2]
private

◆ fLocalDirection

G4ThreeVector G4VEmAngularDistribution::fLocalDirection
protectedinherited

◆ fName

G4String G4VEmAngularDistribution::fName
privateinherited

Definition at line 108 of file G4VEmAngularDistribution.hh.

Referenced by G4VEmAngularDistribution::GetName().

◆ fPolarisation

G4bool G4VEmAngularDistribution::fPolarisation
protectedinherited

The documentation for this class was generated from the following files: