## 2D lattice with position variance

A position variance parameter describes fluctuations of particle position around lattice points. It gives rise to an attenuation factor of Debye-Waller type.

It can be set using the method setPositionVariance(variance) of class Interference2DLattice. The argument variance is in nm$^2$.

By default the variance is zero.

### Example: square lattice without and with variance

A square lattice of hemispheres on a substrate, for different lattice orientation angles xi.

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85  #!/usr/bin/env python3 """ """ import bornagain as ba from bornagain import ba_plot as bp, deg, nm from matplotlib import pyplot as plt def get_sample(hasVariance, xi): # Define materials m_air = ba.RefractiveMaterial("Air", 0, 0) m_particle = ba.RefractiveMaterial("Particle", 0.0006, 2e-08) m_substrate = ba.RefractiveMaterial("Substrate", 6e-06, 2e-08) # Define particles R = 2.5*nm ff = ba.Spheroid(R, R) particle = ba.Particle(m_particle, ff) # Define interference function lattice = ba.SquareLattice2D(10*nm, xi) interference = ba.Interference2DLattice(lattice) interference_pdf = ba.Profile2DCauchy(500*nm, 500*nm, 0) interference.setDecayFunction(interference_pdf) if hasVariance: interference.setPositionVariance(0.3*nm) # Define particle layout layout = ba.ParticleLayout() layout.addParticle(particle) layout.setInterference(interference) # Define layers l_air = ba.Layer(m_air) l_air.addLayout(layout) l_substrate = ba.Layer(m_substrate) # Define sample sample = ba.MultiLayer() sample.addLayer(l_air) sample.addLayer(l_substrate) return sample def get_simulation(sample): n = bp.simargs['n'] beam = ba.Beam(1e8, 0.1*nm, 0.2*deg) det = ba.SphericalDetector(n, -2*deg, 2*deg, n, 0, 3*deg) return ba.ScatteringSimulation(beam, sample, det) def run_one(hasVariance, xi, nPlot, title): sample = get_sample(hasVariance, xi) simulation = get_simulation(sample) result = simulation.simulate() plt.subplot(3, 2, nPlot) return bp.plot_simres(result, title=title, intensity_max=3e7, intensity_min=3e0, zlabel=None, aspect='equal', with_cb=False) if __name__ == '__main__': bp.parse_args(sim_n=200) fig, axs = plt.subplots(3, 2, figsize=(10, 13)) xi1 = 5*deg xi2 = 15*deg im = run_one(False, 0*deg, 1, r"$\xi=0^\circ$, fixed positions") run_one(True, 0*deg, 2, r"position variance 0.3 nm") run_one(False, xi1, 3, r"$\xi=5^\circ$, fixed positions") run_one(True, xi1, 4, r"position variance 0.3 nm") run_one(False, xi2, 5, r"$\xi=15^\circ$, fixed positions") run_one(True, xi2, 6, r"position variance 0.3 nm") plt.subplots_adjust(bottom=0.05, left=0.1) plt.colorbar(im, cax=plt.axes([0.93, 0.36, 0.03, 0.21])) bp.show_or_export() 
Examples/scatter2d/PositionVariance.py