Skip to content
Snippets Groups Projects
Commit 68935a80 authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

Remove tests for old specular resolution machinery

parent c667cff1
No related branches found
No related tags found
No related merge requests found
Showing
with 16 additions and 264 deletions
...@@ -157,10 +157,6 @@ SimulationFactory::SimulationFactory() ...@@ -157,10 +157,6 @@ SimulationFactory::SimulationFactory()
"Simulation implies beam divergence both in wavelength and " "Simulation implies beam divergence both in wavelength and "
"inclination angle."); "inclination angle.");
registerItem("SpecularDivergentBeamCopy", StandardSimulations::SpecularDivergentBeamCopy,
"Simulation implies beam divergence both in wavelength and "
"inclination angle.");
registerItem("TOFRWithRelativeResolution", StandardSimulations::TOFRWithRelativeResolution, registerItem("TOFRWithRelativeResolution", StandardSimulations::TOFRWithRelativeResolution,
"Q-defined reflectometric scan with relative resolution"); "Q-defined reflectometric scan with relative resolution");
......
...@@ -466,32 +466,6 @@ SpecularSimulation* StandardSimulations::SpecularWithSquareBeam() ...@@ -466,32 +466,6 @@ SpecularSimulation* StandardSimulations::SpecularWithSquareBeam()
} }
SpecularSimulation* StandardSimulations::SpecularDivergentBeam() SpecularSimulation* StandardSimulations::SpecularDivergentBeam()
{
const double wavelength = 1.54 * Units::angstrom;
const int number_of_bins = 20;
const size_t n_integration_points = 10;
const double min_angle = 0 * Units::deg;
const double max_angle = 5 * Units::deg;
AngularSpecScan scan(wavelength, FixedBinAxis("axis", number_of_bins, min_angle, max_angle));
DistributionGaussian wavelength_distr(wavelength, 0.1*Units::angstrom);
DistributionGaussian alpha_distr(0.0, 0.1*Units::degree);
std::unique_ptr<SpecularSimulation> result(new SpecularSimulation());
result->setScan(scan);
ParameterPattern pattern1;
pattern1.beginsWith("*").add(BornAgain::BeamType).add(BornAgain::Wavelength);
result->addParameterDistribution(pattern1.toStdString(), wavelength_distr,
n_integration_points);
ParameterPattern pattern2;
pattern2.beginsWith("*").add(BornAgain::BeamType).add(BornAgain::Inclination);
result->addParameterDistribution(pattern2.toStdString(), alpha_distr, n_integration_points);
return result.release();
}
SpecularSimulation* StandardSimulations::SpecularDivergentBeamCopy()
{ {
const double wavelength = 1.54 * Units::angstrom; const double wavelength = 1.54 * Units::angstrom;
const int number_of_bins = 20; const int number_of_bins = 20;
......
...@@ -64,7 +64,6 @@ BA_CORE_API_ SpecularSimulation* BasicSpecularQ(); ...@@ -64,7 +64,6 @@ BA_CORE_API_ SpecularSimulation* BasicSpecularQ();
BA_CORE_API_ SpecularSimulation* SpecularWithGaussianBeam(); BA_CORE_API_ SpecularSimulation* SpecularWithGaussianBeam();
BA_CORE_API_ SpecularSimulation* SpecularWithSquareBeam(); BA_CORE_API_ SpecularSimulation* SpecularWithSquareBeam();
BA_CORE_API_ SpecularSimulation* SpecularDivergentBeam(); BA_CORE_API_ SpecularSimulation* SpecularDivergentBeam();
BA_CORE_API_ SpecularSimulation* SpecularDivergentBeamCopy();
BA_CORE_API_ SpecularSimulation* TOFRWithRelativeResolution(); BA_CORE_API_ SpecularSimulation* TOFRWithRelativeResolution();
BA_CORE_API_ SpecularSimulation* TOFRWithPointwiseResolution(); BA_CORE_API_ SpecularSimulation* TOFRWithPointwiseResolution();
......
...@@ -70,20 +70,16 @@ def get_simulation(scan_size=500): ...@@ -70,20 +70,16 @@ def get_simulation(scan_size=500):
""" """
Returns a specular simulation with beam and detector defined. Returns a specular simulation with beam and detector defined.
""" """
# First argument of ba.DistributionGaussian is the mean value for distribution.
# It should be zero in the case of incident angle distribution, otherwise an
# exception is thrown.
footprint = ba.FootprintFactorSquare(beam_sample_ratio) footprint = ba.FootprintFactorSquare(beam_sample_ratio)
alpha_distr = ba.RangedDistributionGaussian(n_points, n_sig)
scan = ba.AngularSpecScan(wavelength, scan_size, alpha_i_min, alpha_i_max) scan = ba.AngularSpecScan(wavelength, scan_size, alpha_i_min, alpha_i_max)
scan.setFootprintFactor(footprint) scan.setFootprintFactor(footprint)
scan.setAbsoluteAngularResolution(alpha_distr, d_ang)
simulation = ba.SpecularSimulation() simulation = ba.SpecularSimulation()
simulation.setScan(scan) simulation.setScan(scan)
alpha_distr = ba.DistributionGaussian(0.0, d_ang)
simulation.addParameterDistribution("*/Beam/InclinationAngle", alpha_distr,
n_points, n_sig)
return simulation return simulation
...@@ -100,11 +96,13 @@ def run_simulation(): ...@@ -100,11 +96,13 @@ def run_simulation():
def plot(results): def plot(results):
""" """
Plots data for several selected layers
:param results:
:return:
""" """
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
ba.plot_simulation_result(results, postpone_show=True, c='gray', linestyle="--") ba.plot_simulation_result(results, postpone_show=True)
genx_axis, genx_values = create_real_data() genx_axis, genx_values = create_real_data()
......
"""
An example of taking into account beam angular divergence
and beam footprint correction in reflectometry calculations
with BornAgain.
"""
import numpy as np
import bornagain as ba
from os import path
# input parameters
wavelength = 1.54 * ba.angstrom
alpha_i_min = 0.0 * ba.deg # min incident angle, deg
alpha_i_max = 2.0 * ba.deg # max incident angle, rad
beam_sample_ratio = 0.01 # beam-to-sample size ratio
# convolution parameters
d_ang = 0.01 * ba.deg # spread width for incident angle
n_sig = 3 # number of sigmas to convolve over
n_points = 25 # number of points to convolve over
# substrate (Si)
si_sld_real = 2.0704e-06 # \AA^{-2}
# layer parameters
n_repetitions = 10
# Ni
ni_sld_real = 9.4245e-06 # \AA^{-2}
d_ni = 70 * ba.angstrom
# Ti
ti_sld_real = -1.9493e-06 # \AA^{-2}
d_ti = 30 * ba.angstrom
def get_sample():
# defining materials
m_air = ba.MaterialBySLD("Air", 0.0, 0.0)
m_ni = ba.MaterialBySLD("Ni", ni_sld_real, 0.0)
m_ti = ba.MaterialBySLD("Ti", ti_sld_real, 0.0)
m_substrate = ba.MaterialBySLD("SiSubstrate", si_sld_real, 0.0)
air_layer = ba.Layer(m_air)
ni_layer = ba.Layer(m_ni, d_ni)
ti_layer = ba.Layer(m_ti, d_ti)
substrate_layer = ba.Layer(m_substrate)
multi_layer = ba.MultiLayer()
multi_layer.addLayer(air_layer)
for i in range(n_repetitions):
multi_layer.addLayer(ti_layer)
multi_layer.addLayer(ni_layer)
multi_layer.addLayer(substrate_layer)
return multi_layer
def create_real_data():
"""
Loading data from genx_angular_divergence.dat
"""
filepath = path.join(path.dirname(path.realpath(__file__)),
"genx_angular_divergence.dat.gz")
ax_values, real_data = np.loadtxt(filepath,
usecols=(0, 1), skiprows=3, unpack=True)
# translating axis values from double incident angle # to incident angle
ax_values *= 0.5
return ax_values, real_data
def get_simulation(scan_size=500):
"""
Returns a specular simulation with beam and detector defined.
"""
footprint = ba.FootprintFactorSquare(beam_sample_ratio)
alpha_distr = ba.RangedDistributionGaussian(n_points, n_sig)
scan = ba.AngularSpecScan(wavelength, scan_size, alpha_i_min, alpha_i_max)
scan.setFootprintFactor(footprint)
scan.setAbsoluteAngularResolution(alpha_distr, d_ang)
simulation = ba.SpecularSimulation()
simulation.setScan(scan)
return simulation
def run_simulation():
"""
Runs simulation and returns it.
"""
sample = get_sample()
simulation = get_simulation()
simulation.setSample(sample)
simulation.runSimulation()
return simulation.result()
def plot(results):
"""
:param results:
:return:
"""
from matplotlib import pyplot as plt
ba.plot_simulation_result(results, postpone_show=True)
genx_axis, genx_values = create_real_data()
plt.semilogy(genx_axis, genx_values, 'ko', markevery=300)
plt.legend(['BornAgain',
'GenX'],
loc='upper right')
plt.show()
if __name__ == '__main__':
results = run_simulation()
plot(results)
...@@ -54,19 +54,17 @@ def get_simulation(scan_size=500): ...@@ -54,19 +54,17 @@ def get_simulation(scan_size=500):
""" """
Returns a specular simulation with beam and detector defined. Returns a specular simulation with beam and detector defined.
""" """
# First argument of ba.DistributionGaussian is
# the mean value for distribution. alpha_distr = ba.RangedDistributionGaussian(n_points, n_sig)
# It should be zero in the case of incident angle distribution, wavelength_distr = ba.RangedDistributionGaussian(n_points, n_sig)
# otherwise an exception is thrown.
alpha_distr = ba.DistributionGaussian(0.0, d_ang)
wavelength_distr = ba.DistributionGaussian(wavelength, d_wl)
simulation = ba.SpecularSimulation()
scan = ba.AngularSpecScan(wavelength, scan_size, alpha_i_min, alpha_i_max) scan = ba.AngularSpecScan(wavelength, scan_size, alpha_i_min, alpha_i_max)
scan.setAbsoluteAngularResolution(alpha_distr, d_ang)
scan.setAbsoluteWavelengthResolution(wavelength_distr, d_wl)
simulation = ba.SpecularSimulation()
simulation.setScan(scan) simulation.setScan(scan)
simulation.addParameterDistribution("*/Beam/InclinationAngle",
alpha_distr, n_points, n_sig)
simulation.addParameterDistribution("*/Beam/Wavelength",
wavelength_distr, n_points, n_sig)
return simulation return simulation
...@@ -83,4 +81,4 @@ def run_simulation(): ...@@ -83,4 +81,4 @@ def run_simulation():
if __name__ == '__main__': if __name__ == '__main__':
results = run_simulation() results = run_simulation()
ba.plot_simulation_result(results, c='b') ba.plot_simulation_result(results)
"""
An example of taking into account beam angular and wavelength
divergence in reflectometry calculations with BornAgain.
"""
import bornagain as ba
# input parameters
wavelength = 1.54 * ba.angstrom
alpha_i_min = 0.0 * ba.deg # min incident angle, deg
alpha_i_max = 2.0 * ba.deg # max incident angle, rad
# convolution parameters
d_wl = 0.01 * wavelength # spread width for wavelength
d_ang = 0.01 * ba.deg # spread width for incident angle
n_sig = 3 # number of sigmas to convolve over
n_points = 25 # number of points to convolve over
# substrate (Si)
si_sld_real = 2.0704e-06 # \AA^{-2}
# layer parameters
n_repetitions = 10
# Ni
ni_sld_real = 9.4245e-06 # \AA^{-2}
d_ni = 70 * ba.angstrom # ni layer thickness (nm)
# Ti
ti_sld_real = -1.9493e-06 # \AA^{-2}
d_ti = 30 * ba.angstrom # ti layer thickness (nm)
def get_sample():
# defining materials
# this example implies beam divergence in the wavelength,
# thus MaterialBySLD must be used to provide correct result
m_air = ba.MaterialBySLD("Air", 0.0, 0.0)
m_ni = ba.MaterialBySLD("Ni", ni_sld_real, 0.0)
m_ti = ba.MaterialBySLD("Ti", ti_sld_real, 0.0)
m_substrate = ba.MaterialBySLD("SiSubstrate", si_sld_real, 0.0)
air_layer = ba.Layer(m_air)
ni_layer = ba.Layer(m_ni, d_ni)
ti_layer = ba.Layer(m_ti, d_ti)
substrate_layer = ba.Layer(m_substrate)
multi_layer = ba.MultiLayer()
multi_layer.addLayer(air_layer)
for i in range(n_repetitions):
multi_layer.addLayer(ti_layer)
multi_layer.addLayer(ni_layer)
multi_layer.addLayer(substrate_layer)
return multi_layer
def get_simulation(scan_size=500):
"""
Returns a specular simulation with beam and detector defined.
"""
alpha_distr = ba.RangedDistributionGaussian(n_points, n_sig)
wavelength_distr = ba.RangedDistributionGaussian(n_points, n_sig)
scan = ba.AngularSpecScan(wavelength, scan_size, alpha_i_min, alpha_i_max)
scan.setAbsoluteAngularResolution(alpha_distr, d_ang)
scan.setAbsoluteWavelengthResolution(wavelength_distr, d_wl)
simulation = ba.SpecularSimulation()
simulation.setScan(scan)
return simulation
def run_simulation():
"""
Runs simulation and returns it.
"""
sample = get_sample()
simulation = get_simulation()
simulation.setSample(sample)
simulation.runSimulation()
return simulation.result()
if __name__ == '__main__':
results = run_simulation()
ba.plot_simulation_result(results)
...@@ -73,7 +73,6 @@ set(test_cases ...@@ -73,7 +73,6 @@ set(test_cases
GaussianBeamFootprint GaussianBeamFootprint
SquareBeamFootprint SquareBeamFootprint
SpecularDivergentBeam SpecularDivergentBeam
SpecularDivergentBeamCopy
RelativeResolutionTOF RelativeResolutionTOF
OffSpecularResonator OffSpecularResonator
DepthProbeTest DepthProbeTest
......
...@@ -58,9 +58,7 @@ test_example("simulation/ex05_BeamAndDetector/ConstantBackground" 2e-10) ...@@ -58,9 +58,7 @@ test_example("simulation/ex05_BeamAndDetector/ConstantBackground" 2e-10)
test_example("simulation/ex06_Reflectometry/BasicSpecularSimulation" 2e-10) test_example("simulation/ex06_Reflectometry/BasicSpecularSimulation" 2e-10)
test_example("simulation/ex06_Reflectometry/BeamAngularDivergence" 2e-10) test_example("simulation/ex06_Reflectometry/BeamAngularDivergence" 2e-10)
test_example("simulation/ex06_Reflectometry/BeamAngularDivergence_copy" 2e-10)
test_example("simulation/ex06_Reflectometry/BeamFullDivergence" 2e-10) test_example("simulation/ex06_Reflectometry/BeamFullDivergence" 2e-10)
test_example("simulation/ex06_Reflectometry/BeamFullDivergence_copy" 2e-10)
test_example("simulation/ex06_Reflectometry/TimeOfFlightReflectometry" 2e-10) test_example("simulation/ex06_Reflectometry/TimeOfFlightReflectometry" 2e-10)
test_example("simulation/ex06_Reflectometry/TOFRWithResolution" 2e-10) test_example("simulation/ex06_Reflectometry/TOFRWithResolution" 2e-10)
......
...@@ -65,7 +65,6 @@ set(test_cases ...@@ -65,7 +65,6 @@ set(test_cases
OffSpecularResonator OffSpecularResonator
GaussianBeamFootprint GaussianBeamFootprint
SpecularDivergentBeam SpecularDivergentBeam
SpecularDivergentBeamCopy
HomogeneousTiNiSampleWithAbsorption HomogeneousTiNiSampleWithAbsorption
RelativeResolutionTOF RelativeResolutionTOF
) )
......
...@@ -445,12 +445,6 @@ StandardTestCatalogue::StandardTestCatalogue() ...@@ -445,12 +445,6 @@ StandardTestCatalogue::StandardTestCatalogue()
"HomogeneousMultilayerBuilder", "HomogeneousMultilayerBuilder",
1e-10); 1e-10);
add("SpecularDivergentBeamCopy",
"Simulates beam divergence both in wavelength and inclination angle",
"SpecularDivergentBeamCopy",
"HomogeneousMultilayerBuilder",
1e-10);
add("RelativeResolutionTOF", add("RelativeResolutionTOF",
"Simulates q-defined reflectometry with a fixed relative q resolution", "Simulates q-defined reflectometry with a fixed relative q resolution",
"TOFRWithRelativeResolution", "TOFRWithRelativeResolution",
......
File deleted
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment