L = Berreman4x4.RepeatedLayers([L_TiO2, L_SiO2], 8, 0, 1) # To reduce the number of printed characters in the numbers: # numpy.set_printoptions(suppress=True, precision=3) Kx = 0.0 # Structure s = Berreman4x4.Structure(front, [L], back) # Calculation (lbda1, lbda2) = (1.1e-6, 2.5e-6) lbda_list = numpy.linspace(lbda1, lbda2, 200) data = numpy.array([s.getJones(Kx, 2*pi/lbda) for lbda in lbda_list]) r = Berreman4x4.extractCoefficient(data, 'r_ss') R = abs(r)**2 t = Berreman4x4.extractCoefficient(data, 't_ss') T = s.getPowerTransmissionCorrection(Kx) * abs(t)**2 # Plotting fig = pyplot.figure() ax = fig.add_subplot("111") ax.plot(lbda_list, R, label="$R$") ax.plot(lbda_list, T, label="$T$") ax.legend(loc='center right') ax.set_xlabel(r"Wavelength $\lambda$ (m)") ax.set_ylabel(r"Power reflection $R$ or transmission $T$") ax.set_title(r"Bragg mirror: Air/{TiO$_2$/SiO$_2$}x8/TiO$_2$/Glass")
def plotTransmission(label): """Plots power transmission vs. wavenumber.""" data = numpy.array([s.getJones(Kx,k0) for k0 in k0_list]) t_pp = Berreman4x4.extractCoefficient(data, 't_pp') T = abs(t_pp)**2 # valid if back and front media are identical ax.plot(k0_list, T, 'x', label=label)
"'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() ############################################################################## # We reproduce figure 6.17
from Berreman4x4 import c, pi, e_y, C, D, invC, invD import matplotlib.pyplot as pyplot ############################################################################ # Structure # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.6) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.7) Dn = ne-no n_med = (ne + no)/2 LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) # ne along z R = Berreman4x4.rotation_v_theta(e_y, pi/2) # rotation round y LC = LC.rotated(R) # apply rotation from z to x # Cholesteric pitch: p = 0.65e-6 # One half turn of a right-handed helix: TN = Berreman4x4.TwistedMaterial(LC, p/2, angle=+pi, div=25) # Inhomogeneous layer, repeated layer, and structure IL = Berreman4x4.InhomogeneousLayer(TN) N = 5 # number half pitch repetitions h = N * p/2 L = Berreman4x4.RepeatedLayers([IL], N) s = Berreman4x4.Structure(front, [L], back) # Normal incidence: Kx = 0.0
#!/usr/bin/python # encoding: utf-8 # Berreman4x4 example # Author: O. Castany # Simple example: reflection on an air/glass interface, at normal indicence. print("*** Air / glass interface ***\n") import numpy, Berreman4x4 from Berreman4x4 import c, pi # Materials: air = Berreman4x4.IsotropicNonDispersiveMaterial(1.0) glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.5) # Half-spaces: front = Berreman4x4.IsotropicHalfSpace(air) back = Berreman4x4.IsotropicHalfSpace(glass) # Structure: s = Berreman4x4.Structure(front, [], back) # Incidence angle (Kx = n sin(Φ): Kx = 0.0 print("When the basis is the linear polarizations ('p','s')...") J = s.getJones(Kx, k0=1e6) (Jr, Jt) = J print("Jones matrix for reflection (Jr):")
"'Spectroscopic Ellipsometry',\nby H. Fujiwara.\n") print("*** Air / anisotropic sample ***") print("We reproduce figure 6.16, p. 238...") # Orientations of the anisotropic substrate Phi_E = pi/2 # 1st Euler angle Theta_E_list = [0, pi/4, pi/2] # 2nd Eulet angle # Incidence angles Phi_i_list = numpy.linspace(0, 0.999*pi/2, 37) # array of Phi_i values Phi_i_deg = Phi_i_list*180/pi Kx_list = front.get_Kx_from_Phi(Phi_i_list) # array of Kx values data = [] for Theta_E in Theta_E_list: R = Berreman4x4.rotation_Euler((Phi_E, Theta_E, 0)) back.setMaterial(uniaxialMaterialRef.rotated(R)) l = [] for Kx in Kx_list: Jr = s.getJones(Kx)[0] l.append(Berreman4x4.extractEllipsoParam(Jr)) data.append(l) data = numpy.array(data) fig = pyplot.figure() ax = fig.add_subplot(111) ax.plot(Phi_i_deg, data[:,:,0,0].T) ax.set_xlabel(r"$\theta_i$") ax.set_ylabel(r"$\Psi_{pp}$") pyplot.tight_layout()
We consider a birefringence Δn = 0.10 and a thickness d = 4.33 µm. The first minimum should be at λ = 500 nm, or k0 = 1.257e7 m⁻¹. Note: Gooch-Tarry law does not take into account interferences between the two glass substrates. A glass with n = 1.55 minimizes the interferences. """ # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.55) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.6) Dn = ne-no LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) R = Berreman4x4.rotation_v_theta(e_y, pi/2) LC = LC.rotated(R) d = 4.33e-6 TN = Berreman4x4.TwistedMaterial(LC, d) # Inhomogeneous layer IL = Berreman4x4.InhomogeneousLayer(TN) # Structure s = Berreman4x4.Structure(front, [IL], back) # Normal incidence: Kx = 0.0 # Calculation parameters (lbda_min, lbda_max) = (200e-9, 1) # (m)
We consider a birefringence Δn = 0.10 and a thickness d = 4.33 µm. The first minimum should be at λ = 500 nm, or k0 = 1.257e7 m⁻¹. Note: Gooch-Tarry law does not take into account interferences between the two glass substrates. A glass with n = 1.55 minimizes the interferences. """ # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.55) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.6) Dn = ne-no LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) R = Berreman4x4.rotation_v_theta([0,1,0], pi/2) LC = LC.rotated(R) d = 4.33e-6 TN = Berreman4x4.TwistedMaterial(LC, d) # Inhomogeneous layer IL = Berreman4x4.InhomogeneousLayer(TN) # IL.setMethod("symplectic","Padé",3) # Structure s = Berreman4x4.Structure(front, [IL], back) # Normal incidence: Kx = 0.0 # Calculation
import numpy, Berreman4x4 from Berreman4x4 import c, pi from numpy import exp, cos, arcsin, real, sqrt import matplotlib.pyplot as pyplot print("\n*** Glass / Air ***\n") ############################################################################ # Structure definition # Refractive indices n_f = 1.5 n_b = 1.0 # Materials: glass = Berreman4x4.IsotropicNonDispersiveMaterial(n_f) air = Berreman4x4.IsotropicNonDispersiveMaterial(n_b) # Layer and half-spaces: front = Berreman4x4.IsotropicHalfSpace(glass) 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)
- liquid crystal aligned along x at z=0. - input and output polarizers aligned parallel to x Gooch-Tarry law gives: T_pp = sin²(pi/2·√(1+u²)) / (1+u²), with u = 2dΔn/λ. The transmission minima are given by u = ((2m)²-1)^{-1/2} = √(3),√(15),√(35),… We consider a birefringence Δn = 0.10 and a thickness d = 4.33 µm. The first minimum should be at λ = 500 nm, or k0 = 1.257e7 m⁻¹. Note: Gooch-Tarry law does not take into account interferences between the two glass substrates. A glass with n = 1.55 minimizes the interferences. """ # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.55) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.6) Dn = ne - no LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) R = Berreman4x4.rotation_v_theta(e_y, pi / 2) LC = LC.rotated(R) d = 4.33e-6 TN = Berreman4x4.TwistedMaterial(LC, d) # Inhomogeneous layer IL = Berreman4x4.InhomogeneousLayer(TN) # Structure
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)
#!/usr/bin/python # encoding: utf-8 # Berreman4x4 example # Author: O. Castany # The simplest example: a homogeneous glass layer in air import numpy, Berreman4x4 from Berreman4x4 import c, pi import matplotlib.pyplot as pyplot print("\n*** Air / glass / air ***\n") # Materials: air = Berreman4x4.IsotropicNonDispersiveMaterial(1.0) glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.5) # Layer and half-spaces: layer = Berreman4x4.HomogeneousIsotropicLayer(glass) front = back = Berreman4x4.IsotropicHalfSpace(air) # Structure: s = Berreman4x4.Structure(front, [layer], back) # Wavelength and wavenumber: lbda = 1e-6 k0 = 2*pi/lbda # Incidence angle (Kx = n sin(Φ): Kx = 0.5
numpy.set_printoptions(suppress=True, precision=4) n_i = 1.0 # incident medium is air n_o = 2.0 # ordinary index of thin layer n_e = 2.5 # extraordinary index of thin layer w = 3.04e15 # pulsation (rad/s) Phi_i = 70*pi/180 # 70° indicence angle (rad) d = 0.1e-6 # thin layer thickness (m) # Orientation of the anisotropy of the thin layer Phi_E = pi/4 # 1st Euler angle Theta_E = pi/4 # 2nd Eulet angle print("\n*** Air / anisotropic film / silicon substrate ***") filmMaterialRef = Berreman4x4.UniaxialNonDispersiveMaterial(n_o,n_e) R = Berreman4x4.rotation_Euler((Phi_E, Theta_E, 0)) filmMaterial = filmMaterialRef.rotated(R) print("\nPermittivity tensor of the anisotropic film (eq 6.63, p. 241):") print(filmMaterial.getTensor()) """ matrix([[ 4.5625, -0.5625, 0.7955], [-0.5625, 4.5625, -0.7955], [ 0.7955, -0.7955, 5.125 ]]) """ air = Berreman4x4.IsotropicNonDispersiveMaterial(n_i) front = Berreman4x4.IsotropicHalfSpace(air) # Front half-space Kx = front.get_Kx_from_Phi(Phi_i) print("\nValue of Kx: {:.4f}".format(Kx)) """ Kx = 0.9397
# Berreman4x4 example # Author: O. Castany, C. Molinaro # Example of a cholesteric liquid crystal import numpy, Berreman4x4 from numpy import sin, sqrt, abs, exp from Berreman4x4 import c, pi, e_y import matplotlib.pyplot as pyplot ############################################################################ # Structure # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.6) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.7) Dn = ne-no n_med = (ne + no)/2 LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) # ne along z R = Berreman4x4.rotation_v_theta(e_y, pi/2) # rotation round y LC = LC.rotated(R) # apply rotation from z to x # Cholesteric pitch: p = 0.65e-6 # One half turn of a right-handed helix: TN = Berreman4x4.TwistedMaterial(LC, p/2, angle=+pi, div=25) # Inhomogeneous layer, repeated layer, and structure
Kx = 0.0 print("When the basis is the linear polarizations ('p','s')...") J = s.getJones(Kx, k0=1e6) (Jr, Jt) = J print("Jones matrix for reflection (Jr):") print(Jr) print("Jones matrix for transmission (Jt):") print(Jt) """ (matrix([[-0.2, 0. ], matrix([[ 0.8, 0. ], [ 0. , -0.2]]), [ 0. , 0.8]])) """ print("\nWhen the basis is the circular polarizations ('L','R')...") Jc = Berreman4x4.circularJones(J) (Jcr,Jct) = Jc print("Jones matrix for reflection (Jcr):") print(Jcr) print("Jones matrix for transmission (Jct):") print(Jct) """ array([[ 0.0+0.j, -0.2+0.j], array([[ 0.8+0.j, 0.0+0.j], [-0.2+0.j, 0.0+0.j]]) [ 0.0+0.j, 0.8+0.j]]) """ print( """ In a reflexion, the handedness of an elliptic polarization is reversed, so the matrix 'Jcr' is anti-diagonal. """)
import numpy, Berreman4x4 from numpy import sin, sqrt, abs from Berreman4x4 import c, pi, e_y import matplotlib.pyplot as pyplot # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.55) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.7) Dn = ne-no n_med = (ne + no)/2 LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) # ne along z R = Berreman4x4.rotation_v_theta(e_y, pi/2) # rotation of pi/2 along y LC = LC.rotated(R) # apply rotation from z to x # Cholesteric pitch (m): p = 0.65e-6 # One half turn of a right-handed helix: TN = Berreman4x4.TwistedMaterial(LC, p/2, angle=+pi, div=35) # Inhomogeneous layer, repeated layer, and structure IL = Berreman4x4.InhomogeneousLayer(TN) N = 15 # number half pitch repetitions h = N * p/2 L = Berreman4x4.RepeatedLayers([IL], N) s = Berreman4x4.Structure(front, [L], back) # Normal incidence: Kx = 0.0
# Verification of the code against results presented in Fujiwara's book # p. 237 (section 6.4.1). We reproduce figures 6.16 and 6.17. import numpy, Berreman4x4 from Berreman4x4 import c, pi import matplotlib.pyplot as pyplot n_i = 1.0 # incident medium is air n_o = 2.0 # ordinary index of thin layer n_e = 2.5 # extraordinary index of thin layer ############################################################################## # Setting up the structure # Front half-space (air) air = Berreman4x4.IsotropicNonDispersiveMaterial(n_i) front = Berreman4x4.IsotropicHalfSpace(air) # Anisotropic substrate uniaxialMaterialRef = Berreman4x4.UniaxialNonDispersiveMaterial(n_o, n_e) back = Berreman4x4.HalfSpace() s = Berreman4x4.Structure(front, [], back) ############################################################################## # 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...")
if len(sys.argv) > 1 and (sys.argv[1] == '-h' or sys.argv[1] == '--help'): print("Usage: interface-reflection.py [-h, --help] n1 n2\n") sys.exit() if len(sys.argv) > 2: (n1, n2) = map(float, sys.argv[1:3]) else: (n1, n2) = (1.0, 1.5) # default values print("\n*** Interface n1 = {:} / n2 = {:} ***\n".format(n1, n2)) ############################################################################ # Structure definition # Materials medium1 = Berreman4x4.IsotropicNonDispersiveMaterial(n1) medium2 = Berreman4x4.IsotropicNonDispersiveMaterial(n2) # Half-spaces front = Berreman4x4.IsotropicHalfSpace(medium1) back = Berreman4x4.IsotropicHalfSpace(medium2) # Structure s = Berreman4x4.Structure(front, [], back) # Parameters for the calculation lbda = 1e-6 k0 = 2 * pi / lbda Phi_i = numpy.linspace(0, pi / 2 * 0.9999) # range for the incidence angles ############################################################################
t2_th_p= (abs((t_bs_p*t_sf_p*exp(1j*kz_s*d)) \ /(1+r_bs_p*r_sf_p*exp(2j*kz_s*d))))**2 correction = real(n_b*cos(Phi_b)/(n_f*cos(Phi_list.astype(complex)))) # This is a correction term used in R +T*correction = 1 T_th_s = t2_th_s*correction T_th_p = t2_th_p*correction ############################################################################ # Calculation with Berreman4x4 data = numpy.array([s.getJones(kx,k0) for kx in Kx]) data = abs(data)**2 R_p = Berreman4x4.extractCoefficient(data, 'r_pp') R_s = Berreman4x4.extractCoefficient(data, 'r_ss') t2_p = Berreman4x4.extractCoefficient(data, 't_pp') t2_s = Berreman4x4.extractCoefficient(data, 't_ss') T_s = t2_s*correction T_p = t2_p*correction ############################################################################ # Plotting fig = pyplot.figure(figsize=(12., 6.)) pyplot.rcParams['axes.color_cycle'] = ['b','g','r','c','b','g'] ax = fig.add_axes([0.1, 0.1, 0.7, 0.8]) y = numpy.vstack((R_s,R_p,t2_s,t2_p,T_s,T_p)).T legend1 = ("R_s","R_p","t2_s","t2_p","T_s","T_p") lines1 = ax.plot(Kx, y)
import numpy, Berreman4x4 from numpy import sin, sqrt, abs from Berreman4x4 import c, pi import matplotlib.pyplot as pyplot # Materials glass = Berreman4x4.IsotropicNonDispersiveMaterial(1.55) front = back = Berreman4x4.IsotropicHalfSpace(glass) # Liquid crystal oriented along the x direction (no, ne) = (1.5, 1.7) Dn = ne-no n_med = (ne + no)/2 LC = Berreman4x4.UniaxialNonDispersiveMaterial(no, ne) # ne along z R = Berreman4x4.rotation_v_theta([0,1,0], pi/2) # rotation of pi/2 along y LC = LC.rotated(R) # apply rotation from z to x # Cholesteric pitch: p = 0.65e-6 # One half turn of a right-handed helix: TN = Berreman4x4.TwistedMaterial(LC, p/2, angle=+pi, div=35) # Inhomogeneous layer, repeated layer, and structure IL = Berreman4x4.InhomogeneousLayer(TN) N = 15 # number half pitch repetitions h = N * p/2 L = Berreman4x4.RepeatedLayers([IL], N) s = Berreman4x4.Structure(front, [L], back) # Normal incidence: Kx = 0.0
/ (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 = numpy.array([s.getJones(Kx, 2*pi/lbda) for lbda in lbda_list]) r_ss = Berreman4x4.extractCoefficient(data, 'r_ss') R_ss_0 = abs(r_ss)**2 # Incidence angle Phi_i = pi/4, 's' and 'p' polarizations Kx = front.get_Kx_from_Phi(pi/4) data = numpy.array([s.getJones(Kx, 2*pi/lbda) for lbda in lbda_list]) r_ss = Berreman4x4.extractCoefficient(data, 'r_ss') r_pp = Berreman4x4.extractCoefficient(data, 'r_pp') R_ss = abs(r_ss)**2 R_pp = abs(r_pp)**2 ############################################################################ # Plotting fig = pyplot.figure(figsize=(12., 6.)) pyplot.rcParams['axes.color_cycle'] = ['b','g','r'] ax = fig.add_axes([0.1, 0.1, 0.7, 0.8])
from Berreman4x4 import c, pi from numpy import exp, cos, arcsin, real, sqrt import matplotlib.pyplot as pyplot print("\n*** Glass1 / Air / Glass2 ***\n") ############################################################################ # Structure definition # Refractive indices n_f = 1.5 n_s = 1.0 n_b = 1.7 # Materials: glass1 = Berreman4x4.IsotropicNonDispersiveMaterial(n_f) air = Berreman4x4.IsotropicNonDispersiveMaterial(n_s) glass2 = Berreman4x4.IsotropicNonDispersiveMaterial(n_b) # Layer and half-spaces: front = Berreman4x4.IsotropicHalfSpace(glass1) layer = Berreman4x4.HomogeneousIsotropicLayer(air) back = Berreman4x4.IsotropicHalfSpace(glass2) # Structure: s = Berreman4x4.Structure(front, [layer], back) # Wavelength and wavenumber: lbda = 1e-6 k0 = 2 * pi / lbda Phi_i = pi / 2 * 0.6 # Incidence angle (higher than the limit angle)
import numpy, Berreman4x4 import scipy.linalg import matplotlib.pyplot as pyplot from Berreman4x4 import c, pi from numpy import newaxis, exp, sin print("\n*** TiO2/SiO2 Bragg mirror ***\n") ############################################################################ # Structure definition # Front and back materials n_a = 1.0 n_g = 1.5 air = Berreman4x4.IsotropicNonDispersiveMaterial(n_a) glass = Berreman4x4.IsotropicNonDispersiveMaterial(n_g) front = Berreman4x4.IsotropicHalfSpace(air) back = Berreman4x4.IsotropicHalfSpace(glass) # Materials for a SiO2/TiO2 Bragg mirror lbda0 = 1.550e-6 k0 = 2 * pi / lbda0 nr_SiO2 = 1.47 nr_TiO2 = 2.23 alpha_SiO2 = 0e2 # (m⁻¹) alpha_TiO2 = 42e2 # (m⁻¹) ni_SiO2 = alpha_SiO2 * lbda0 / (4 * pi) ni_TiO2 = alpha_TiO2 * lbda0 / (4 * pi) n_SiO2 = nr_SiO2 + 1j * ni_SiO2
# reduces the number of printed figures in numbers: numpy.set_printoptions(suppress=True, precision=4) n_i = 1.0 # incident medium is air n_o = 2.0 # ordinary index of thin layer n_e = 2.5 # extraordinary index of thin layer w = 3.04e15 # pulsation (rad/s) Phi_i = 70 * pi / 180 # 70° indicence angle (rad) d = 0.1e-6 # thin layer thickness (m) # Orientation of the anisotropy of the thin layer Phi_E = pi / 4 # 1st Euler angle Theta_E = pi / 4 # 2nd Eulet angle print("\n*** Air / anisotropic film / silicon substrate ***") filmMaterialRef = Berreman4x4.UniaxialNonDispersiveMaterial(n_o, n_e) R = Berreman4x4.rotation_Euler((Phi_E, Theta_E, 0)) filmMaterial = filmMaterialRef.rotated(R) print("\nPermittivity tensor of the anisotropic film (eq 6.63, p. 241):") print(filmMaterial.getTensor()) """ matrix([[ 4.5625, -0.5625, 0.7955], [-0.5625, 4.5625, -0.7955], [ 0.7955, -0.7955, 5.125 ]]) """ air = Berreman4x4.IsotropicNonDispersiveMaterial(n_i) front = Berreman4x4.IsotropicHalfSpace(air) # Front half-space Kx = front.get_Kx_from_Phi(Phi_i) print("\nValue of Kx: {:.4f}".format(Kx)) """