From 0627f8e5d9f6989c18c4ef3a26c746dc4e01e19c Mon Sep 17 00:00:00 2001 From: Dmitry Yurov <d.yurov@fz-juelich.de> Date: Thu, 14 Nov 2019 16:36:30 +0100 Subject: [PATCH] Add example for polarized reflectometry --- .../BasicPolarizedReflectometry.py | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Examples/python/simulation/ex06_Reflectometry/BasicPolarizedReflectometry.py diff --git a/Examples/python/simulation/ex06_Reflectometry/BasicPolarizedReflectometry.py b/Examples/python/simulation/ex06_Reflectometry/BasicPolarizedReflectometry.py new file mode 100644 index 00000000000..164d8a072b6 --- /dev/null +++ b/Examples/python/simulation/ex06_Reflectometry/BasicPolarizedReflectometry.py @@ -0,0 +1,79 @@ +""" +An example of computing reflectivity on a +magnetized sample. +""" + +import bornagain as ba +from bornagain import deg, angstrom + + +def get_sample(): + """ + Defines sample and returns it + """ + + # creating materials + m_ambient = ba.MaterialBySLD("Ambient", 0.0, 0.0) + m_layer_mat = ba.MaterialBySLD("Layer", 1e-4, 1e-8, + ba.kvector_t(0.0, 1e8, 0.0)) + m_substrate = ba.MaterialBySLD("Substrate", 7e-5, 2e-6) + + # creating layers + ambient_layer = ba.Layer(m_ambient) + layer = ba.Layer(m_layer_mat, 10) + substrate_layer = ba.Layer(m_substrate) + + # creating multilayer + multi_layer = ba.MultiLayer() + multi_layer.addLayer(ambient_layer) + multi_layer.addLayer(layer) + multi_layer.addLayer(substrate_layer) + + return multi_layer + + +def get_simulation(scan_size=500): + """ + Defines and returns a specular simulation. + """ + simulation = ba.SpecularSimulation() + scan = ba.AngularSpecScan(1.54 * angstrom, scan_size, + 0.0 * deg, 5.0 * deg) + simulation.setScan(scan) + return simulation + + +def run_simulation(polarization=ba.kvector_t(0.0, 1.0, 0.0), + analyzer=ba.kvector_t(0.0, 1.0, 0.0)): + """ + Runs simulation and returns its result. + """ + sample = get_sample() + simulation = get_simulation() + + # adding polarization and analyzer operator + simulation.setBeamPolarization(polarization) + simulation.setAnalyzerProperties(analyzer, 1.0, 0.5) + + simulation.setSample(sample) + simulation.runSimulation() + return simulation.result() + + +def plot(pp, mm): + from matplotlib import pyplot as plt + + ba.plot_simulation_result(pp, postpone_show=True) + plt.semilogy(mm.axis(), mm.array()) + plt.legend(['Up-Up', 'Down-Down'], + loc='upper right') + + plt.show() + + +if __name__ == '__main__': + results_pp = run_simulation(ba.kvector_t(0.0, 1.0, 0.0), + ba.kvector_t(0.0, 1.0, 0.0)) + results_mm = run_simulation(ba.kvector_t(0.0, -1.0, 0.0), + ba.kvector_t(0.0, -1.0, 0.0)) + plot(results_pp, results_mm) -- GitLab