In [ ]:
import os, sys
import numpy as np
from matplotlib import pyplot as plt
from tqdm import tqdm
import bornagain as ba
from bornagain import deg, angstrom, nm
In [ ]:
N_FRAMES = 100
In [ ]:
def run_simulation(xi=0.0):
# defining materials
m_air = ba.HomogeneousMaterial("Air", 0.0, 0.0 )
m_substrate = ba.HomogeneousMaterial("Substrate", 6e-6, 2e-8 )
m_particle = ba.HomogeneousMaterial("Particle", 6e-4, 2e-8 )
# particle
cylinder_ff = ba.FormFactorCylinder(10*nm, 5*nm)
cylinder = ba.Particle(m_particle, cylinder_ff)
layout = ba.ParticleLayout()
layout.addParticle(cylinder)
# interference function
lattice = ba.SquareLattice(25*nm, xi*deg)
interference = ba.InterferenceFunction2DLattice(lattice)
decay = ba.FTDecayFunction2DCauchy(1000*nm, 1000*nm)
interference.setDecayFunction(decay)
layout.setInterferenceFunction(interference)
# layers
air_layer = ba.Layer(m_air)
air_layer.addLayout(layout)
substrate_layer = ba.Layer(m_substrate)
# multilayer
multi_layer = ba.MultiLayer()
multi_layer.addLayer(air_layer)
multi_layer.addLayer(substrate_layer)
# build and run experiment
simulation = ba.GISASSimulation()
simulation.setDetectorParameters(100, -2.0*deg, 2.0*deg, 100, 0.0*deg, 4.0*deg)
simulation.setBeamParameters(1.38*angstrom, 0.5*deg, 0.0*deg)
simulation.setBeamIntensity(1e6)
# run simulation
simulation.setSample(multi_layer)
simulation.runSimulation()
return simulation.result()
In [ ]:
def calculate_xi(i):
return 0. + (90.0/N_FRAMES)*i
In [ ]:
fig = plt.figure(figsize=(10,10))
for i in tqdm(range(N_FRAMES)):
xi = calculate_xi(i)
result = run_simulation(xi)
array = np.log(result.array() + 1.0)
fig.clear()
im = plt.imshow(array, vmax=6,
extent=[-4.0, 4.0, 0, 8.0])
plt.xlabel(r'$\phi_f$', fontsize=20)
plt.ylabel(r'$\alpha_f$', fontsize=20)
plt.colorbar(im)
fname = '_tmp%03d.png'%i
fig.savefig(fname)
fig.clear()
os.system("mencoder 'mf://_tmp*.png' -mf type=png:fps=10 -ovc lavc -lavcopts vcodec=wmv2 -oac copy -o animation.mp4")
print("Removing temporary files")
os.system("rm _tmp*");
In [ ]:
!mplayer animation.mp4 -loop 0 > /dev/null 2>&1
In [ ]: