Cosine ripples on Rectangular Lattice

Scattering from elongated particles distributed along a two-dimensional rectangular lattice.

• Each particle has a sinusoidal profile ("Ripple1" form factor) with a length of 100 nm, a width of 20 nm and a height of 4 nm.
• They are placed along a rectangular lattice on top of a substrate.
• This lattice is characterized by a lattice length of 200 nm in the direction of the long axis of the particles and of 50 nm in the perpendicular direction.
• The lattice's base vectors coincide with the reference cartesian frame.
• The wavelength is equal to 1.6 Å.
• The incident angles are αi = 0.3° and Φi = 0°.
Real-space model:
Intensity Image:
Python Script:
```"""
Cosine ripple on a 2D lattice
"""
import numpy
import bornagain as ba
from bornagain import deg, angstrom, nm

def get_sample():
"""
Returns a sample with cosine ripples on a substrate.
The structure is modelled as a 2D Lattice.
"""
# defining materials
m_ambience = 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)

# collection of particles
ripple1_ff = ba.FormFactorRipple1(100*nm, 20*nm, 4*nm)
ripple = ba.Particle(m_particle, ripple1_ff)

particle_layout = ba.ParticleLayout()

interference = ba.InterferenceFunction2DLattice(
200.0*nm, 50.0*nm, 90.0*deg, 0.0*deg)
pdf = ba.FTDecayFunction2DCauchy(
1000.*nm/2./numpy.pi, 100.*nm/2./numpy.pi)
interference.setDecayFunction(pdf)
particle_layout.setInterferenceFunction(interference)

# assemble the sample
air_layer = ba.Layer(m_ambience)
substrate_layer = ba.Layer(m_substrate)
multi_layer = ba.MultiLayer()

return multi_layer

def get_simulation():
"""
characterizing the input beam and output detector
"""
simulation = ba.GISASSimulation()
simulation.setDetectorParameters(100, -1.5*deg, 1.5*deg,
100, 0.0*deg, 2.5*deg)
simulation.setBeamParameters(1.6*angstrom, 0.3*deg, 0.0*deg)
return simulation

def run_simulation():
"""
Runs simulation and returns intensity map.
"""
simulation = get_simulation()
simulation.setSample(get_sample())
simulation.runSimulation()
return simulation.getIntensityData()

if __name__ == '__main__':
result = run_simulation()
ba.plot_intensity_data(result)

```