From 9459d10c62e9e0542776a11d576ed0876bc4257a Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Thu, 22 Jan 2015 13:05:39 +0100
Subject: [PATCH] Added Wrote script to demonstrate Local Monodisperse
 Approximation

---
 .../ApproximationDA.py                        |  1 +
 .../ApproximationLMA.py                       | 95 +++++++++++++++++++
 2 files changed, 96 insertions(+)

diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationDA.py b/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationDA.py
index ffe2cc242ce..eb785b75803 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationDA.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationDA.py
@@ -40,6 +40,7 @@ def get_sample():
     particle_layout = ParticleLayout()
     particle_layout.addParticle(cylinder1, 0.0, 0.5)
     particle_layout.addParticle(cylinder2, 0.0, 0.5)
+    particle_layout.addInterferenceFunction(interference)
 
     air_layer = Layer(m_ambience)
     air_layer.addLayout(particle_layout)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationLMA.py b/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationLMA.py
index e69de29bb2d..302b9959cb7 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationLMA.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/ApproximationLMA.py
@@ -0,0 +1,95 @@
+"""
+Cylinders of two different sizes in Local Monodisperse Approximation
+"""
+import numpy
+import matplotlib
+import pylab
+from bornagain import *
+
+phi_min, phi_max = 0.0, 2.0
+alpha_min, alpha_max = 0.0, 2.0
+
+
+def get_sample():
+    """
+    Build and return the sample.
+    Cylinders come in two different sizes.
+    """
+    m_ambience = HomogeneousMaterial("Air", 0.0, 0.0)
+    m_substrate = HomogeneousMaterial("Substrate", 6e-6, 2e-8)
+    m_particle = HomogeneousMaterial("Particle", 6e-4, 2e-8)
+
+    # cylindrical particle 1
+    radius1 = 5*nanometer
+    height1 = radius1
+    cylinder_ff1 = FormFactorCylinder(radius1, height1)
+    cylinder1 = Particle(m_particle, cylinder_ff1)
+
+    # cylindrical particle 2
+    radius2 = 8*nanometer
+    height2 = radius2
+    cylinder_ff2 = FormFactorCylinder(radius2, height2)
+    cylinder2 = Particle(m_particle, cylinder_ff2)
+
+    # interference function1
+    interference1 = InterferenceFunctionRadialParaCrystal(16.0*nanometer, 1e3*nanometer)
+    pdf = FTDistribution1DGauss(3 * nanometer)
+    interference1.setProbabilityDistribution(pdf)
+
+    # interference function2
+    interference2 = InterferenceFunctionRadialParaCrystal(20.0*nanometer, 1e3*nanometer)
+    interference2.setProbabilityDistribution(pdf)
+
+     # assembling the sample
+    particle_layout1 = ParticleLayout()
+    particle_layout1.addParticle(cylinder1)
+    particle_layout1.addInterferenceFunction(interference1)
+
+    particle_layout2 = ParticleLayout()
+    particle_layout2.addParticle(cylinder2)
+    particle_layout2.addInterferenceFunction(interference2)
+
+    air_layer = Layer(m_ambience)
+    air_layer.addLayout(particle_layout1)
+    air_layer.addLayout(particle_layout2)
+    substrate_layer = Layer(m_substrate)
+    multi_layer = MultiLayer()
+    multi_layer.addLayer(air_layer)
+    multi_layer.addLayer(substrate_layer)
+    return multi_layer
+
+
+def get_simulation():
+    """
+    Create and return GISAXS simulation with beam and detector defined
+    """
+    simulation = Simulation()
+    simulation.setDetectorParameters(200, phi_min*degree, phi_max*degree, 200, alpha_min*degree, alpha_max*degree)
+    simulation.setBeamParameters(1.0*angstrom, 0.2*degree, 0.0*degree)
+    return simulation
+
+
+def run_simulation():
+    """
+    Run simulation and plot results
+    """
+    sample = get_sample()
+    simulation = get_simulation()
+    simulation.setSample(sample)
+    simulation.runSimulation()
+    result = simulation.getIntensityData().getArray() + 1  # for log scale
+
+    # showing the result
+    im = pylab.imshow(numpy.rot90(result, 1), norm=matplotlib.colors.LogNorm(),
+                 extent=[phi_min, phi_max, alpha_min, alpha_max], aspect='auto')
+    cb = pylab.colorbar(im)
+    cb.set_label(r'Intensity (arb. u.)', size=16)
+    pylab.xlabel(r'$\phi_f (^{\circ})$', fontsize=16)
+    pylab.ylabel(r'$\alpha_f (^{\circ})$', fontsize=16)
+    pylab.show()
+
+
+if __name__ == '__main__':
+    run_simulation()
+
+
-- 
GitLab