From dfa12e74e3b7c30c1ce6e18c3e8dce3595f818d8 Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Fri, 12 Jul 2019 11:08:42 +0200
Subject: [PATCH] Add example for Polarized SANS

---
 .../ex07_Miscellaneous/PolarizedSANS.py       | 80 +++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 Examples/python/simulation/ex07_Miscellaneous/PolarizedSANS.py

diff --git a/Examples/python/simulation/ex07_Miscellaneous/PolarizedSANS.py b/Examples/python/simulation/ex07_Miscellaneous/PolarizedSANS.py
new file mode 100644
index 00000000000..2f8e4bdbe7c
--- /dev/null
+++ b/Examples/python/simulation/ex07_Miscellaneous/PolarizedSANS.py
@@ -0,0 +1,80 @@
+"""
+Simple example demonstrating how polarized SANS experiments can be
+simulated with BornAgain.
+"""
+
+import bornagain as ba
+from bornagain import deg, nm, kvector_t
+
+# Magnetization of the particle's core material (A/m)
+magnetization_core = kvector_t(0.0, 0.0, 1e7)
+
+
+def get_sample():
+    """
+    Returns a sample with a magnetic core-shell particle in a solvent.
+    """
+    # Defining Materials
+    mat_solvent = ba.HomogeneousMaterial("Solvent", 5e-6, 0.0)
+    mat_core = ba.HomogeneousMaterial("Core", 6e-6, 2e-8,
+                                      magnetization_core)
+    mat_shell = ba.HomogeneousMaterial("Shell", 1e-7, 2e-8)
+
+    # Defining Layer
+    solvent_layer = ba.Layer(mat_solvent)
+
+    # Defining particle layout with a core-shell particle
+    layout = ba.ParticleLayout()
+    core_sphere_ff = ba.FormFactorFullSphere(10*nm)
+    shell_sphere_ff = ba.FormFactorFullSphere(12*nm)
+    core = ba.Particle(mat_core, core_sphere_ff)
+    shell = ba.Particle(mat_shell, shell_sphere_ff)
+    position = kvector_t(0.0, 0.0, 2.0)
+    particleCoreShell = ba.ParticleCoreShell(shell, core, position)
+    layout.addParticle(particleCoreShell)
+
+    # Adding layout to layer
+    solvent_layer.addLayout(layout)
+
+    # Defining Multilayer with single layer
+    multiLayer = ba.MultiLayer()
+    multiLayer.addLayer(solvent_layer)
+    return multiLayer
+
+
+def get_simulation():
+    """
+    Returns a polarized SANS simulation
+    """
+    simulation = ba.GISASSimulation()
+
+    # Defining detector
+    simulation.setDetectorParameters(200, -3.0*deg, 3.0*deg, 200, -3.0*deg, 3.0*deg)
+
+    # Defining beam parameters
+    simulation.setBeamParameters(0.5*nm, 0.0*deg, 0.0*deg)
+    simulation.setBeamIntensity(1e12)
+
+    # Defining beam polarization and polarization analysis for spin-flip channel
+    analyzer_dir = kvector_t(0.0, 0.0, -1.0)
+    beampol = kvector_t(0.0, 0.0, 1.0)
+    simulation.setBeamPolarization(beampol)
+    simulation.setAnalyzerProperties(analyzer_dir, 1.0, 0.5)
+
+    return simulation
+
+
+def run_simulation():
+    """
+    Runs simulation and returns intensity map.
+    """
+    simulation = get_simulation()
+    simulation.setSample(get_sample())
+    simulation.runSimulation()
+    return simulation.result()
+
+
+if __name__ == '__main__': 
+    result = run_simulation()
+    ba.plot_simulation_result(result, cmap='jet', units=ba.AxesUnits.QSPACE,
+                              aspect='auto')
-- 
GitLab