-
Wuttke, Joachim authoredWuttke, Joachim authored
fit2d.py 1.32 KiB
#!/usr/bin/env python3
"""
Minimal working fit examples: finds radius of sphere in Born approximation.
"""
import bornagain as ba
from bornagain import deg, nm
def get_simulation(P):
"""
Returns GISAS simulation for given set of parameters.
"""
radius = P["radius"]
sphere = ba.Particle(ba.RefractiveMaterial("Particle", 6e-4, 2e-8),
ba.Sphere(radius))
layer = ba.Layer(ba.RefractiveMaterial("Vacuum", 0, 0))
layer.addLayout(ba.ParticleLayout(sphere))
sample = ba.MultiLayer()
sample.addLayer(layer)
n = 100
beam = ba.Beam(1, 0.1*nm, 0.2*deg)
detector = ba.Detector2Dfw(2*deg, 2*deg, n, n, 0, 1*deg)
simulation = ba.ScatteringSimulation(beam, sample, detector)
return simulation
def fake_data():
"""
Generating "experimental" data by running simulation with default parameters.
"""
simulation = get_simulation({'radius': 5 * nm})
result = simulation.simulate()
return result
if __name__ == '__main__':
data = fake_data()
fit_objective = ba.FitObjective()
fit_objective.addFitPair(get_simulation, data)
fit_objective.initPrint(10)
P = ba.Parameters()
P.add("radius", 4. * nm, min=0.01)
minimizer = ba.Minimizer()
result = minimizer.minimize(fit_objective.evaluate, P)
fit_objective.finalize(result)