Пример #1
0
 def update_FTs(self):
     dFTs = [] # differential = SLD - (avg. SLD)
     FTs = []
     for sl in self.sublayers:
         dFT = zeros((self.qx.shape[0], self.qy.shape[1]), dtype=complex128)
         #FT = zeros((self.qx.shape[0], self.qy.shape[0]), dtype=complex128)
         qx = self.qx[:,:,0]
         qy = self.qy[:,:,0]
         shapes = sl[0]
         for shape in shapes:
             dFT += greens_form_shape(shape.points, qx, qy) * (shape.sld)
         dFT += greens_form_shape(self.matrix.points, qx, qy) * (self.matrix.sld)
         FT = dFT.copy()
         FTs.append(FT) # do this before subtracting avg. SLD
         dFT += greens_form_shape(self.matrix.points, qx, qy) * (-sl[1]) # subtract FT of average SLD
         dFTs.append(dFT)
     self.FTs = FTs
     self.dFTs = dFTs
Пример #2
0
 def update_FTs(self):
     dFTs = []  # differential = SLD - (avg. SLD)
     FTs = []
     for sl in self.sublayers:
         dFT = zeros((self.qx.shape[0], self.qy.shape[1]), dtype=complex128)
         #FT = zeros((self.qx.shape[0], self.qy.shape[0]), dtype=complex128)
         qx = self.qx[:, :, 0]
         qy = self.qy[:, :, 0]
         shapes = sl[0]
         for shape in shapes:
             dFT += greens_form_shape(shape.points, qx, qy) * (shape.sld)
         dFT += greens_form_shape(self.matrix.points, qx,
                                  qy) * (self.matrix.sld)
         FT = dFT.copy()
         FTs.append(FT)  # do this before subtracting avg. SLD
         dFT += greens_form_shape(self.matrix.points, qx, qy) * (
             -sl[1])  # subtract FT of average SLD
         dFTs.append(dFT)
     self.FTs = FTs
     self.dFTs = dFTs
Пример #3
0
front_sld = 0.0 # air
back_sld = pi/(wavelength**2) * 2.0 * 5.0e-6 # substrate
back_sldi = pi/(wavelength**2) * 2.0 * 7.0e-8 # absorption in substrate

qz = linspace(0.01, 0.21, 501)
qy = linspace(-0.1, 0.1, 500)
qx = ones_like(qy, dtype=complex128) * 1e-8

SLDArray =  [ [0,0,0], # air
              [avg_sld, thickness, avg_sldi], # sample
              [matrix_sld, sublayer_thickness, matrix_sldi], # full matrix layer under cylinders
              [back_sld, 0, back_sldi] ]

FT = zeros_like(qx, dtype=complex128)
for cyl in clipped_cylinders:
    FT += greens_form_shape(cyl.points, qx, qy) * (cyl.sld)

FT += greens_form_shape(matrix.points, qx, qy) * (matrix.sld)
FT += greens_form_shape(matrix.points, qx, qy) * (-avg_sld)

SLDArray = array(SLDArray)

def calc_gisans(alpha_in, show_plot=True):

    #alpha_in = 0.25 # incoming beam angle

    kz_in_0 = 2*pi/wavelength * sin(alpha_in * pi/180.0)
    kz_out_0 = kz_in - qz

    wf_in = dwbaWavefunction(kz_in_0, SLDArray)
    wf_out = dwbaWavefunction(-kz_out_0, conj(SLDArray))
Пример #4
0
qz = linspace(0.01, 0.21, 501)
qy = linspace(-0.1, 0.1, 500)
qx = ones_like(qy, dtype=complex128) * 1e-8

SLDArray = [
    [0, 0, 0],  # air
    [avg_sld, thickness, avg_sldi],  # sample
    [matrix_sld, sublayer_thickness,
     matrix_sldi],  # full matrix layer under cylinders
    [back_sld, 0, back_sldi]
]

FT = zeros_like(qx, dtype=complex128)
for cyl in clipped_cylinders:
    FT += greens_form_shape(cyl.points, qx, qy) * (cyl.sld)

FT += greens_form_shape(matrix.points, qx, qy) * (matrix.sld)
FT += greens_form_shape(matrix.points, qx, qy) * (-avg_sld)

SLDArray = array(SLDArray)


def calc_gisans(alpha_in, show_plot=True):

    #alpha_in = 0.25 # incoming beam angle

    kz_in_0 = 2 * pi / wavelength * sin(alpha_in * pi / 180.0)
    kz_out_0 = kz_in - qz

    wf_in = dwbaWavefunction(kz_in_0, SLDArray)