AtomicDen_RingVec = np.vectorize(AtomicDen_Ring) # %% Derived Values ######################################################### k = 2 * np.pi * 10**(3) / lamda # Wave number [um-1] # %% Input Field: Point Object Field ######################################### # Define Array ================================================================ ROI_rad = 1.5 * max(w0, Rad_airy) # radius of ROI, defines small ROI [um] x = np.linspace(-ROI_rad, ROI_rad, Nx) y = np.linspace(-ROI_rad, ROI_rad, Ny) [X1, Y1] = np.meshgrid(x, y) R1 = np.sqrt(X1**2 + Y1**2) # Generating Data ============================================================= E1 = GB.PointSourceVec(1, R1[:, :], 0, w0, k) I1 = GB.BeamInt(E1, P) # Generating the PSF, ASF = sqrt(PSF) and generating the Image ================ ASF = OE.ASF(X1, Y1, Rad_airy, kind='airy') def func(x): return np.sum(OE.ImageViaPSF(X1, Y1, E1, ASF, norm=x)) - np.sum(I1) norm = optimize.fsolve(func, 1 / np.sum(ASF)) I1_blur = OE.ImageViaPSF(X1, Y1, E1, ASF, norm=norm) figure = plotAll3(11, X1, Y1, I1, (norm * ASF), I1_blur, ROI_rad, 1, 1, NA=NA) cwd = os.getcwd() os.chdir(startUp.saveDir) figure.set_size_inches(10, 5)
raise Exception('GreenSheet::CircularAperture::I, X and Y should have same dimensions.') r0 = r0*10**3 x0 = x0*10**3 y0 = y0*10**3 X = X-x0 Y = Y-y0 R = np.sqrt(X**2+Y**2) E[R>r0] = 0 return E # %% Input Beam ############################################################### # Generating Data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% X1 = X[:,:,0] Y1 = Y[:,:,0] E1 = GB.PlaneWaveFieldVec(1,R[:,:,0],0,w0,k) I1 = GB.BeamInt(E1,P) # Generating Fit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% I1 = I1.astype(float) p0 = [np.max(I1),0,0,w0,w0] [params1,_] = optimize.curve_fit(GB.GaussBeamFit, [X1,Y1], I1.ravel(), p0=p0) I1_fit = GB.GaussBeamFit([X1,Y1],*params1).reshape(Ny,Nx) figure = plotGaussianBeam(1,X1,Y1,I1,I1_fit,params1,1,1) cwd = os.getcwd() os.chdir(startUp.saveDir) figure.set_size_inches(10, 7) figure.savefig('GS_inputBeam.png') os.chdir(cwd) # %% Cylindrical Lens f1 = -40 mm ############################################# # Generating Data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [E2, X2, Y2] = OE.CylLensAction(E1,X1,Y1,k,f1,FocusingAxis = 'Y')
r0 = r0 * 10**3 x0 = x0 * 10**3 y0 = y0 * 10**3 X = X - x0 Y = Y - y0 R = np.sqrt(X**2 + Y**2) E[R > r0] = 0 return E # %% Input Beam ############################################################### # Generating Data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% X1 = X[:, :, 0] Y1 = Y[:, :, 0] E1 = GB.PlaneWaveFieldVec(1, R[:, :, 0], 0, w0, k) I1 = GB.BeamInt(E1, P) # Generating Fit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% I1 = I1.astype(float) p0 = [np.max(I1), 0, 0, w0, w0] [params1, _] = optimize.curve_fit(GB.GaussBeamFit, [X1, Y1], I1.ravel(), p0=p0) I1_fit = GB.GaussBeamFit([X1, Y1], *params1).reshape(Ny, Nx) figure = plotGaussianBeam(1, X1, Y1, I1, I1_fit, params1, 1, 1) cwd = os.getcwd() os.chdir(startUp.saveDir) figure.set_size_inches(10, 7) figure.savefig('GS_inputBeam.png') os.chdir(cwd) # %% Cylindrical Lens f_cyY1 ################################################# # Generating Data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [E2, X2, Y2] = OE.CylLensAction(E1,
r0 = r0 * 10**3 x0 = x0 * 10**3 y0 = y0 * 10**3 X = X - x0 Y = Y - y0 R = np.sqrt(X**2 + Y**2) E[R > r0] = 0 return E # %% PROBE Field: Input Probe Beam ############################################ #Generating Data ============================================================== X1 = X_L[:, :, 0] Y1 = Y_L[:, :, 0] E1 = GB.PlaneWaveFieldVec(1, R_L[:, :, 0], 0, w0, k) I1 = GB.BeamInt(E1, P) #Generating Fit =============================================================== I1 = I1.astype(float) p0 = [np.max(I1), 0, 0, w0, w0] [params1, _] = optimize.curve_fit(GB.GaussBeamFit, [X1, Y1], I1.ravel(), p0=p0) I1_fit = GB.GaussBeamFit([X1, Y1], *params1).reshape(Ny, Nx) plotGaussianBeam(1, X1, Y1, I1, ROI_rad_L, 1.5, 1.5, Fit=I1_fit, params=params1)