BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
GISASSpecularContribution Class Referencefinal

Description

Computes the specular signal in the bin where q_parallel = 0. Used by DWBAComputation.

Definition at line 27 of file GISASSpecularContribution.h.

Public Member Functions

 GISASSpecularContribution ()=default
 
void compute (DiffuseElement &ele) const
 

Constructor & Destructor Documentation

◆ GISASSpecularContribution()

GISASSpecularContribution::GISASSpecularContribution ( )
default

Member Function Documentation

◆ compute()

void GISASSpecularContribution::compute ( DiffuseElement ele) const

Definition at line 20 of file GISASSpecularContribution.cpp.

21 {
22  if (!ele.isSpecular())
23  return;
24 
25  const auto* flux = dynamic_cast<const ScalarFlux*>(ele.fluxIn(0));
26  ASSERT(flux);
27  complex_t R = flux->getScalarR();
28 
29  double sin_alpha_i = std::abs(std::sin(ele.alphaI()));
30  if (sin_alpha_i == 0.0) {
31  ele.setIntensity(0);
32  return;
33  }
34  const double solid_angle = ele.solidAngle();
35  if (solid_angle <= 0.0)
36  return;
37  const double intensity = std::norm(R) * sin_alpha_i / solid_angle;
38  ele.setIntensity(intensity);
39 }
#define ASSERT(condition)
Definition: Assert.h:45
double alphaI() const
double solidAngle() const
const IFlux * fluxIn(size_t i_layer) const
bool isSpecular() const
Tells if simulation element corresponds to a specular peak.
void setIntensity(double intensity)
Specular reflection and transmission coefficients in a layer in case of scalar interactions between t...
Definition: ScalarFlux.h:29
constexpr Double_t R()
Definition: TMath.h:213

References DiffuseElement::alphaI(), ASSERT, DiffuseElement::fluxIn(), DiffuseElement::isSpecular(), TMath::R(), DiffuseElement::setIntensity(), and DiffuseElement::solidAngle().

Here is the call graph for this function:

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