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
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
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))
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)