glassure.transform module

glassure.transform.calculate_fr(sq_pattern: Pattern, r: ndarray | None = None, use_modification_fcn: bool = False, method: str = 'integral') Pattern

Calculates F(r) from a given S(Q) pattern for r values. If r is None, a range from 0 to 10 with step 0.01 is used. A Lorch modification function of the form:

m = sin(q*pi/q_max)/(q*pi/q_max)

can be used to address issues with a low q_max. This will broaden the sharp peaks in g(r)

Parameters:
  • sq_pattern – Structure factor S(Q) with lim_inf S(Q) = 1 and unit(q)=A^-1

  • r – numpy array giving the r-values for which F(r) will be calculated, default is 0.01 to 10 with 0.01 as a step. units should be in Angstrom.

  • use_modification_fcn – boolean flag whether to use the Lorch modification function

  • method – determines the method used for calculating fr, possible values are: - ‘integral’ solves the Fourier integral, by calculating the integral - ‘fft’ solves the Fourier integral by using fast fourier transformation

Returns:

F(r) pattern

glassure.transform.calculate_gr(fr_pattern: Pattern, atomic_density: float) Pattern

Calculates a g(r) pattern from a given F(r) pattern and the atomic density

Parameters:
  • fr_pattern – F(r) pattern

  • atomic_density – atomic density in atoms/A^3

Returns:

g(r) pattern

glassure.transform.calculate_rdf(gr_pattern: Pattern, atomic_density: float) Pattern

Calculates a RDF pattern from a given g(r) pattern and the atomic density

RDF = 4 * pi * r^2 * g(r) * rho

Parameters:
  • gr_pattern – g(r) pattern

  • atomic_density – atomic density in atoms/A^3

Returns:

RDF pattern

glassure.transform.calculate_sq(normalized_pattern: Pattern, f_squared_mean: ndarray, f_mean_squared: ndarray) Pattern

Calculates the Faber Ziman structure factor, using the equation: S(Q) = (n * Intensity - incoherent_scattering - <f>^2-)/<f^2> + 1 where n is the normalization factor and f are the scattering factors. The function takes in the already normalized intensity (incoherent scattering is also subtracted)

Parameters:
  • normalized_pattern – Pattern with q and (n * Intensity - incoherent scattering) as x and y

  • f_squared_mean – <f^2> - mean squared scattering factor for each q value in the pattern

  • f_mean_squared – <f>^2 - squared mean scattering factor for each q value in the pattern

Returns:

S(Q) pattern

glassure.transform.calculate_sq_from_fr(fr_pattern: Pattern, q: ndarray | None = None, method: str = 'integral', use_modification_fcn: bool = False) Pattern

Calculates S(Q) from an F(r) pattern for given q values.

Parameters:
  • fr_pattern – input F(r) pattern

  • q – numpy array giving the q-values for which S(q) will be calculated,

Returns:

F(r) pattern

glassure.transform.calculate_sq_from_gr(gr_pattern: Pattern, q: ndarray, atomic_density: float, method: str = 'integral') Pattern

Performs a back Fourier transform from the pair distribution function g(r)

Parameters:
  • gr_pattern – g(r) pattern

  • q – numpy array of q values for which S(Q) should be calculated

  • atomic_density – number_density in atoms/A^3

Returns:

S(Q) pattern

glassure.transform.calculate_tr(gr_pattern: Pattern, atomic_density: float) Pattern

Calculates a transfer function from a given g(r) pattern and the atomic density

T(r) = 4 * pi * r * g(r) * rho = RDF/r

Parameters:
  • gr_pattern – g(r) pattern

  • atomic_density – atomic density in atoms/A^3

Returns:

transfer function