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