# We reproduce figure 6.16 print("\nWe reproduce results from section 6.4.1 in " + "'Spectroscopic Ellipsometry',\nby H. Fujiwara.\n") print("*** Air / anisotropic sample ***") print("We reproduce figure 6.16, p. 238...") # Orientations of the anisotropic substrate Φ_E = pi / 2 # 1st Euler angle θ_E_list = [0, pi / 4, pi / 2] # 2nd Eulet angle # Incidence angles Φ_i_list = numpy.linspace(0, 0.999 * pi / 2, 300) # array of Φ_i values Φ_i_deg = Φ_i_list * 180 / pi Kx_list = front.get_Kx_from_Phi(Φ_i_list) # array of Kx values data = Berreman4x4.DataList() for θ_E in θ_E_list: R = Berreman4x4.rotation_Euler((Φ_E, θ_E, 0)) back.setMaterial(uniaxialMaterialRef.rotated(R)) data.append([s.evaluate(Kx) for Kx in Kx_list]) Psi = data.get('Ψ') fig = pyplot.figure() ax = fig.add_subplot(111) ax.plot(Φ_i_deg, Psi.T) ax.set_xlabel(r"$\theta_i$") ax.set_ylabel(r"$\Psi_{pp}$") pyplot.tight_layout()
/ (1 + r_ab[p-1] * U(p)*exp(2j*kz[p]*d[p])) return res return U(0) # Power reflexion coefficient for different incidence angles and polarisations R_th_ss_0 = (abs(ReflectionCoeff(0, 's')))**2 # Phi_i = 0 R_th_ss = (abs(ReflectionCoeff(pi / 4, 's')))**2 # Phi_i = pi/4 R_th_pp = (abs(ReflectionCoeff(pi / 4, 'p')))**2 ############################################################################ # Calculation with Berreman4x4 # Incidence angle Phi_i = 0, 's' polarization Kx = front.get_Kx_from_Phi(0) data = Berreman4x4.DataList( [s.evaluate(Kx, 2 * pi / lbda) for lbda in lbda_list]) R_ss_0 = data.get('R_ss') # Incidence angle Phi_i = pi/4, 's' and 'p' polarizations Kx = front.get_Kx_from_Phi(pi / 4) data = Berreman4x4.DataList( [s.evaluate(Kx, 2 * pi / lbda) for lbda in lbda_list]) R_ss = data.get('R_ss') R_pp = data.get('R_pp') ############################################################################ # Plotting fig = pyplot.figure(figsize=(12., 6.)) pyplot.rcParams['axes.prop_cycle'] = pyplot.cycler('color', 'bgr') ax = fig.add_axes([0.1, 0.1, 0.7, 0.8])
# Reflection and transmission coefficients, polarisation s and p R_th_ss = abs(r_s)**2 R_th_pp = abs(r_p)**2 t2_th_ss = abs(t_s)**2 t2_th_pp = abs(t_p)**2 # The power transmission coefficient is T = Re(kz2/kz1) × |t|^2 correction = numpy.real(kz2 / kz1) T_th_ss = correction * t2_th_ss T_th_pp = correction * t2_th_pp ############################################################################ # Calculation with Berreman4x4 Kx_list = front.get_Kx_from_Phi(Phi_i, k0) data = Berreman4x4.DataList([s.evaluate(Kx, k0) for Kx in Kx_list]) # Extraction of the power coefficients for name in ['R_ss', 'R_pp', 't_ss', 't_pp', 't_ss', 't_pp', 'T_ss', 'T_pp']: exec("{0:} = data.get('{0:}')".format(name)) t2_ss = data.get('t_ss')**2 t2_pp = data.get('t_pp')**2 ############################################################################ # Plotting fig = pyplot.figure(figsize=(12., 6.)) pyplot.rcParams['axes.prop_cycle'] = pyplot.cycler('color', 'bgrcbg') ax = fig.add_axes([0.1, 0.1, 0.7, 0.8]) d = numpy.vstack((R_ss, R_pp, t2_ss, t2_pp, T_ss, T_pp)).T lines1 = ax.plot(Kx_list, d)
back = Berreman4x4.IsotropicHalfSpace(air) # Structure: s = Berreman4x4.Structure(front, [], back) # Wavelength and wavenumber: lbda = 1e-6 k0 = 2 * pi / lbda # Variation of incidence angle Phi_list = numpy.linspace(0, pi / 2 * 0.999) Kx = front.get_Kx_from_Phi(Phi_list) ############################################################################ # Calculation with Berreman4x4 data = Berreman4x4.DataList([s.evaluate(kx, k0) for kx in Kx]) R_p = data.get('R_pp') R_s = data.get('R_ss') T_p = data.get('T_pp') T_s = data.get('T_ss') ############################################################################ # Plotting fig = pyplot.figure(figsize=(12., 6.)) pyplot.rcParams['axes.prop_cycle'] = pyplot.cycler('color', 'bgrcbg') ax = fig.add_axes([0.1, 0.1, 0.7, 0.8]) y = numpy.vstack((R_s, R_p)).T legend = ("R_s", "R_p") # lines = ax.plot(Kx, y)
def plotTransmission(label): """Plots power transmission vs. wavenumber.""" data = Berreman4x4.DataList([s.evaluate(Kx, k0) for k0 in k0_list]) T = data.get('T_pp') ax.plot(k0_list, T, 'x', label=label)
q = 2*pi/p alpha = q/k0 epsilon = (no**2+ne**2)/2 delta = (no**2-ne**2)/2 n2 = sqrt((alpha**2 + epsilon \ - sqrt(4*epsilon*alpha**2+delta**2)).astype(complex)) w = 1j*(ne**2-n2**2-alpha**2)/(2*alpha*n2) # not k0/c A = -2j*k0*n2*h R_th = abs((w**2+1)*(1-exp(-2j*k0*n2*h)) \ / (2*w*(1+exp(-2j*k0*n2*h)) \ - 1j*(w**2-1)*(1-exp(-2j*k0*n2*h))))**2 ############################################################################ # Calculation with Berreman4x4 data = Berreman4x4.DataList([s.evaluate(Kx,_k0) for _k0 in k0]) # Jones matrices for the circular wave basis # Right-circular wave is reflected in the stop-band # R_LR, T_LR close to zero R_RR = data.get('R_RR') ############################################################################ # Plotting fig = pyplot.figure() ax = fig.add_subplot("111") ax.plot(lbda, R_RR, label='R_RR') ax.plot(lbda, R_th, 'r', label='R_th') ax.legend(loc='center right', bbox_to_anchor=(1.00, 0.50))
Kx = 0.0 # Calculation parameters lbda_min, lbda_max = 0.8e-6, 1.2e-6 # (m) lbda_B = p * n_med lbda_list = numpy.linspace(lbda_min, lbda_max, 100) k0_list = 2 * pi / lbda_list ############################################################################ # Analytical calculation for the maximal reflection R_th = numpy.tanh(Dn / n_med * pi * h / p)**2 lbda_B1, lbda_B2 = p * no, p * ne ############################################################################ # Calculation with Berreman4x4 data = Berreman4x4.DataList([s.evaluate(Kx, k0) for k0 in k0_list]) T_pp = data.get('T_pp') T_ps = data.get('T_ps') T_ss = data.get('T_ss') T_sp = data.get('T_sp') # Transmission coefficients for incident unpolarized light: T_pn = 0.5 * (T_pp + T_ps) T_sn = 0.5 * (T_sp + T_ss) T_nn = T_sn + T_pn # Transmission coefficients for 's' and 'p' polarized light, with # unpolarized measurement. T_ns = T_ps + T_ss T_np = T_pp + T_sp