def get_sample(): """ Returns a sample with cosine ripples on a substrate. The structure is modelled as a 2D Lattice. """ # defining materials m_vacuum = ba.HomogeneousMaterial("Vacuum", 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 ff = ba.FormFactorCosineRippleBox(100 * nm, 20 * nm, 4 * nm) particle = ba.Particle(m_particle, ff) particle_layout = ba.ParticleLayout() particle_layout.addParticle(particle, 1.0) 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, 0) interference.setDecayFunction(pdf) particle_layout.setInterferenceFunction(interference) # assemble the sample vacuum_layer = ba.Layer(m_vacuum) vacuum_layer.addLayout(particle_layout) substrate_layer = ba.Layer(m_substrate) multi_layer = ba.MultiLayer() multi_layer.addLayer(vacuum_layer) multi_layer.addLayer(substrate_layer) return multi_layer
def get_sample(radius=5.0 * nm, height=5.0 * nm, lattice_constant=10.0 * nm): """ Returns a sample with cylinders on a substrate, forming a rectangular lattice. """ 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) ff = ba.FormFactorCylinder(radius, height) cylinder = ba.Particle(m_particle, ff) particle_layout = ba.ParticleLayout() particle_layout.addParticle(cylinder) interference = ba.InterferenceFunction2DLattice(lattice_constant, lattice_constant, 90.0 * deg) pdf = ba.FTDecayFunction2DCauchy(50 * nm, 50 * nm) interference.setDecayFunction(pdf) particle_layout.setInterferenceFunction(interference) air_layer = ba.Layer(m_air) air_layer.addLayout(particle_layout) substrate_layer = ba.Layer(m_substrate, 0) multi_layer = ba.MultiLayer() multi_layer.addLayer(air_layer) multi_layer.addLayer(substrate_layer) return multi_layer
def get_sample(): """ Returns a sample with a grating on a substrate, modelled by triangular ripples forming a 1D Paracrystal. """ # 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 ripple2_ff = ba.FormFactorRipple2(100 * nm, 20 * nm, 4 * nm, -3.0 * nm) ripple = ba.Particle(m_particle, ripple2_ff) particle_layout = ba.ParticleLayout() particle_layout.addParticle(ripple, 1.0) interference = ba.InterferenceFunction2DLattice(200.0 * nm, 50.0 * nm, 90.0 * deg, 0.0 * deg) pdf = ba.FTDecayFunction2DGauss(1000. * nm / 2. / numpy.pi, 100. * nm / 2. / numpy.pi) interference.setDecayFunction(pdf) particle_layout.setInterferenceFunction(interference) # air layer with particles and substrate form multi layer air_layer = ba.Layer(m_ambience) air_layer.addLayout(particle_layout) substrate_layer = ba.Layer(m_substrate, 0) multi_layer = ba.MultiLayer() multi_layer.addLayer(air_layer) multi_layer.addLayer(substrate_layer) return multi_layer
def get_sample(): # Defining Materials material_1 = ba.HomogeneousMaterial("Air", 0.0, 0.0) material_2 = ba.MaterialBySLD("Au", 4.6665e-06, -1.6205e-08) material_3 = ba.MaterialBySLD("Si", 2.0737e-06, -2.3758e-11) # Defining Layers layer_1 = ba.Layer(material_1) layer_2 = ba.Layer(material_3) formFactor_1 = ba.FormFactorCone6(159.0 * nm, 640.0 * nm, 86.0 * deg) formFactor_2 = ba.FormFactorCone6(157.0 * nm, 640.0 * nm, 86.0 * deg) formFactor_3 = ba.FormFactorTruncatedSphere(115.0 * nm, 160.0 * nm, 0.0 * nm) particle_1 = ba.Particle(material_2, formFactor_1) particle_2 = ba.Particle(material_3, formFactor_2) particle_3 = ba.Particle(material_2, formFactor_3) particle_3_position = kvector_t(0.0 * nm, 0.0 * nm, 640.0 * nm) particle_3.setPosition(particle_3_position) # Defining Core Shell Particles particleCoreShell_1 = ba.ParticleCoreShell(particle_2, particle_1) particleCoreShell_1_rotation = ba.RotationZ(0 * deg) particleCoreShell_1.setRotation(particleCoreShell_1_rotation) # Defining composition of particles at specific positions particleComposition_1 = ba.ParticleComposition() particleComposition_1.addParticle(particleCoreShell_1) particleComposition_1.addParticle(particle_3) particleComposition_1_rotation = ba.RotationX(0.0 * deg) particleComposition_1.setRotation(particleComposition_1_rotation) # Defining Interference Functions interference_1 = ba.InterferenceFunction2DLattice( 1500.0 * nm, 1500.0 * nm, 120.0 * deg, i * deg) interference_1_pdf = ba.FTDecayFunction2DCauchy( 1000.0 * nm, 1000.0 * nm, 0.0 * deg) interference_1.setDecayFunction(interference_1_pdf) interference_1.setPositionVariance(500.0 * nm2) # Defining Particle Layouts and adding Particles layout_1 = ba.ParticleLayout() layout_1.addParticle(particleComposition_1, 1.0) layout_1.setInterferenceFunction(interference_1) layout_1.setTotalParticleSurfaceDensity(0.000001) # Adding layouts to layers layer_1.addLayout(layout_1) # Defining Multilayers multiLayer_1 = ba.MultiLayer() multiLayer_1.addLayer(layer_1) multiLayer_1.addLayer(layer_2) return multiLayer_1
def get_sample(): # Defining Materials m_air = ba.HomogeneousMaterial("Air", 0.0, 0.0) m_particle = ba.HomogeneousMaterial("Particle", 0.0006, 2e-08) m_substrate = ba.HomogeneousMaterial("Substrate", 6e-06, 2e-08) # Defining Layers l_air = ba.Layer(m_air) l_substrate = ba.Layer(m_substrate) # Defining Form Factors ff_sphere = ba.FormFactorFullSphere(particle_radius) # Defining composition of particles at specific positions particle_composition = ba.ParticleComposition() # compute number of particles in the vertical direction n = int((height - 2.0 * particle_radius) // lattice_length) # add particles to the particle composition for i in range(n + 1): particle = ba.Particle(m_particle, ff_sphere) particle_position = kvector_t(0.0 * nm, 0.0 * nm, i * lattice_length) particle.setPosition(particle_position) particle_composition.addParticle(particle) # Defining Interference Function interference = ba.InterferenceFunction2DLattice(lattice_length, lattice_length, 90.0 * deg, 0.0 * deg) interference_pdf = ba.FTDecayFunction2DCauchy(500.0 * nm, 500.0 * nm, 0.0 * deg) interference.setDecayFunction(interference_pdf) # interference.setPositionVariance(0.3) # uncomment to add position variance (2D!) # interference.setIntegrationOverXi(True) # uncomment to integrate over xi. Slow! # Defining Particle Layout and adding Particles layout = ba.ParticleLayout() layout.addParticle(particle_composition, 1.0) layout.setInterferenceFunction(interference) layout.setWeight(1.0) # Adding layout to layer l_air.addLayout(layout) # Defining Multilayers multilayer = ba.MultiLayer() multilayer.addLayer(l_air) multilayer.addLayer(l_substrate) # print(multilayer.parametersToString()) # uncomment to print sample parameters return multilayer
def get_sample(params): radius = params["radius"] length = params["length"] # Defining Materials material_1 = ba.HomogeneousMaterial("Air", 0.0, 0.0) material_2 = ba.HomogeneousMaterial("CoFe2O4", 2.0433e-05, 1.5253e-06) material_3 = ba.HomogeneousMaterial("SiO2", 5.43852457e-06, 5.43741763e-08) material_4 = ba.HomogeneousMaterial("Si", 5.78164999998e-06, 1.02295e-07) # Defining Layers layer_1 = ba.Layer(material_1) layer_2 = ba.Layer(material_3, 60) layer_3 = ba.Layer(material_4) # Defining Form Factors formFactor_1 = ba.FormFactorTruncatedSphere(radius * nm, 8.5 * nm, 0.0 * nm) # formFactor_1 = ba.FormFactorFullSphere(radius) # Defining Particles particle_1 = ba.Particle(material_2, formFactor_1) # Defining Interference Functions interference_1 = ba.InterferenceFunction2DLattice(length, length, 120.0 * deg, 0.0 * deg) interference_1_pdf = ba.FTDecayFunction2DCauchy(300.0 * nm, 100.0 * nm, 0.0 * deg) interference_1.setDecayFunction(interference_1_pdf) # Defining Particle Layouts and adding Particles layout_1 = ba.ParticleLayout() layout_1.addParticle(particle_1, 1.0) layout_1.setInterferenceFunction(interference_1) layout_1.setTotalParticleSurfaceDensity(0.000998875898252) # Adding layouts to layers layer_1.addLayout(layout_1) # Defining Multilayers multiLayer_1 = ba.MultiLayer() multiLayer_1.addLayer(layer_1) multiLayer_1.addLayer(layer_2) multiLayer_1.addLayer(layer_3) return multiLayer_1