Hi, could you please clarify whether the sigma_alpha unit (Roughness of surfaces) is expressed in degrees or radians? Also, what are its minimum and maximum allowed values?
That’s a good question. The example code in the Application Developers Guide has
OpSurface->SetSigmaAlpha(0.1);
Which is dimensionless by construction (compare other G4 quantities which are always written with a units multiplier). Looking at the source code which uses it (G4OpBoundaryProcess::GetFacetNormal()
), the main comment there says
/* This function codes alpha to a random value taken from the
distribution p(alpha) = g(alpha; 0, sigma_alpha)*std::sin(alpha),
for alpha > 0 and alpha < 90, where g(alpha; 0, sigma_alpha) is a
gaussian distribution with mean 0 and standard deviation sigma_alpha. */
The Gaussian g(alpha)
is a multiplier for sin(alpha), and is dimensionless in both value and argument.
If it helps to think about it conceptually, sigma_alpha has units of “sine”
Based on my research, from a mathematical and physical perspective, sigma_alpha should not be significantly larger than a value that reasonably keeps the Gaussian distribution of alpha within the range of [0, 90] degrees (or [0, π/2] radians). Its lower limit is 0 (representing a perfectly smooth surface). In practice, values less than 1 radian (approximately 57 degrees) are typically more common for modeling physical roughness. Geant4 accepts SetSigmaAlpha
as a G4double
(a floating-point number) and does not impose any strict limitations on its input.