def get_sample(): """ Returns a sample with rotated pyramids on top of a substrate. """ # 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 pyramid_ff = ba.FormFactorPyramid(10*nm, 5*nm, 54.73*deg) pyramid = ba.Particle(m_particle, pyramid_ff) transform = ba.RotationZ(45.*deg) particle_layout = ba.ParticleLayout() particle_layout.addParticle( pyramid, 1.0, ba.kvector_t(0.0, 0.0, 0.0), transform) air_layer = ba.Layer(m_ambience) air_layer.addLayout(particle_layout) substrate_layer = ba.Layer(m_substrate) multi_layer = ba.MultiLayer() multi_layer.addLayer(air_layer) multi_layer.addLayer(substrate_layer) return multi_layer
def get_sample(): """ Returns a sample with rotated pyramids on top of a substrate. """ # 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 pyramid_ff = ba.FormFactorPyramid(40*nm, 20*nm, 54.73*deg) pyramid = ba.Particle(m_particle, pyramid_ff) particle_layout = ba.ParticleLayout() # Option1: add rotational distribution manually # nrotations=100 # angles = np.linspace(0, 180, nrotations, endpoint=False) # for angle in angles: # transform = ba.RotationZ(angle*deg) # particle_layout.addParticle(pyramid, 1.0/nrotations, ba.kvector_t(0.0, 0.0, 0.0), transform) # use BornAgain distributions transform = ba.RotationZ(45.*deg) particle_layout.addParticle(pyramid, 1.0, ba.kvector_t(0.0, 0.0, 0.0), transform) air_layer = ba.Layer(m_ambience) air_layer.addLayout(particle_layout) substrate_layer = ba.Layer(m_substrate) multi_layer = ba.MultiLayer() multi_layer.addLayer(air_layer) multi_layer.addLayer(substrate_layer) # print(multi_layer.parametersToString()) return multi_layer
ba.FormFactorAnisoPyramid(20.0, 16.0, 13.0, 60.0 * deg), ba.FormFactorBox(20.0, 16.0, 13.0), ba.FormFactorCantellatedCube(15.0, 6.0), ba.FormFactorCone(10.0, 13.0, 60.0 * deg), ba.FormFactorCone6(10.0, 13.0, 60.0 * deg), ba.FormFactorCuboctahedron(20.0, 13.0, 0.7, 60.0 * deg), ba.FormFactorCylinder(8.0, 16.0), ba.FormFactorDodecahedron(5.0), ba.FormFactorEllipsoidalCylinder(8.0, 13.0, 16.0), ba.FormFactorFullSphere(8.0), ba.FormFactorFullSpheroid(10.0, 13.0), ba.FormFactorHemiEllipsoid(10.0, 6.0, 8.0), ba.FormFactorIcosahedron(8.0), ba.FormFactorPrism3(10.0, 13.0), ba.FormFactorPrism6(5.0, 11.0), ba.FormFactorPyramid(18.0, 13.0, 60.0 * deg), ba.FormFactorCosineRippleBox(27.0, 20.0, 14.0), ba.FormFactorSawtoothRippleBox(36.0, 25.0, 14.0, 3.0), ba.FormFactorTetrahedron(15.0, 6.0, 60.0 * deg), ba.FormFactorTruncatedCube(15.0, 6.0), ba.FormFactorTruncatedSphere(5.0, 7.0, 0), ba.FormFactorTruncatedSpheroid(7.5, 9.0, 1.2, 0), ] def get_sample(formfactor): """ Returns a one-layer sample that contains particles with given form factor. """ # defining materials m_vacuum = ba.HomogeneousMaterial("Vacuum", 0.0, 0.0)
""" Plot form factors. """ import bornagain as ba from bornagain import nanometer, degree import bornplot as bp det = bp.Detector( 200, 0, 5, 0, 5 ) n = 4 results = [] for i in range(n): omega=45*i/(n-1) title = r'$\omega=%d^\circ$' % omega ff = ba.FormFactorPyramid(10*nanometer, 4.2*nanometer, 60.0*degree) trafo = ba.RotationZ(omega*degree) data = bp.run_simulation(det,ff,trafo) results.append( bp.Result(i, data, title) ) bp.make_plot( results, det, "ff_Pyramid" )