def update(val):
    global Mat1, Mat2
    n1 = sn1.val
    n2 = sn2.val
    Mat1 = MaterialTable.fromValue(n1)
    Mat2 = MaterialTable.fromValue(n2)
    i = 1
    while True:
        stack, d = getThicknesses(0.633, i)
        RT = TransferMatrix(stack, d).solveTransmission(0.633, 0, True)
        Rprime = RT[0] / (RT[0] + RT[1])
        if Rprime > 0.9999:
            print(Rprime, 'at', i)
            break
        if i > 100:
            break
        i += 1
    transmissions = TransferMatrix(stack, d).solveTransmission(wl, 0, True)
    reflectance = transmissions[:, 0] / (transmissions[:, 0] +
                                         transmissions[:, 1])
    l.set_ydata(reflectance)
Beispiel #2
0
#!/usr/bin/ipython3
import numpy as _np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from TMM import TransferMatrix
from material_table import MaterialTable
import scipy.constants as _const
from scipy.optimize import curve_fit
plt.ion()

air = MaterialTable.fromMaterial('air',0.4,1)
BK7 = MaterialTable.fromMaterial('BK7',0.4,1)
MgF2 = MaterialTable.fromMaterial('MgF2',0.4,1)
Ta2O5 = MaterialTable.fromMaterial('Ta2O5',0.4,1)

wl = _np.arange(0.4,1,0.001)

def getThicknesses(l=0.5,periods = 2):
	widths = []
	stack = [air] + [Ta2O5,MgF2]*periods + [BK7]
	TM = TransferMatrix(stack,[1,1]*periods)
	IM = [TM.getInterfacialMatrix(i,l,0,True) for i in range(-1,periods*2)]
	p0 = _np.mod(_np.angle(-IM[0][1,0]/IM[0][1,1]),2*_const.pi) # phase from immediate reflection
	phase = _np.mod(_np.angle(1-(IM[0][1,0]/IM[0][1,1])**2),2*_const.pi) # Phase change of thransmission through the first interface and back
	for i in range(periods*2):
		phase_diff = _np.mod(p0 - _np.mod(phase + _np.angle(-IM[i+1][1,0]/IM[i+1][1,1]),2*_const.pi),2*_const.pi)
		if (phase_diff < 1e-6):
			phase_diff = 2*_const.pi
		width = l*phase_diff/(4*_const.pi*TM.getLayer(i)[0].getRealN(l)) # 4pi/l *n*d = phase_diff
		widths.append(width)
		phase = _np.mod(phase+phase_diff+_np.angle(1-(IM[i+1][1,0]/IM[i+1][1,1])**2),2*_const.pi) # Phase change of thransmission through the ith interface and back
Beispiel #3
0
#!/usr/bin/ipython3
import numpy as _np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from TMM import TransferMatrix
from material_table import MaterialTable
import scipy.constants as _const
from scipy.optimize import curve_fit
from scipy.interpolate import interp1d
plt.ion()

AlAs = MaterialTable.fromCsv('AlAs.txt',
                             delimiter='\t',
                             skiprows=1,
                             wavelength_multiplier=1e-3)
SiO2 = MaterialTable.fromCsv('SiO2.txt',
                             delimiter='\t',
                             skiprows=1,
                             wavelength_multiplier=1e-3)
air = MaterialTable.fromMaterial('air')

TM = TransferMatrix([air, AlAs, SiO2, air], [0.01, 0.25])

ref = _np.loadtxt('air-AlAs_10-SiO2_250-air.csv', skiprows=1, delimiter='\t')
ref[:, 0] *= 1e-3
wl = ref[:, 0]

r, t = TM.solveTransmission(wl, 0, True).transpose()
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax2.plot(wl, t - ref[:, 1])
ax2.set_ylabel('Difference [a.u.]')
#!/usr/bin/ipython3
import numpy as _np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from TMM import TransferMatrix
from material_table import MaterialTable
import scipy.constants as _const
from scipy.optimize import curve_fit
import matplotlib.colors as colors

plt.ion()

air = MaterialTable.fromMaterial('air', 0.4, 1)
BK7 = MaterialTable.fromMaterial('BK7', 0.4, 1)
Au = MaterialTable.fromMaterial('Au', 0.4, 1)

wl = _np.arange(0.4, 1, 0.001)

depths = _np.linspace(0, 11, 1000)
Is = TransferMatrix([air] + [BK7, Au] * 5 + [BK7],
                    [0.5, 0.1] * 5).getIntensityProfile(wl,
                                                        0,
                                                        False,
                                                        zs=depths,
                                                        function=False)
cmap = plt.get_cmap('gnuplot')
norm = colors.LogNorm()
plt.figure()
plt.pcolormesh(wl, depths, Is[:, :, 0].transpose(), cmap=cmap, norm=norm)
plt.xlabel("$\lambda$ [$\mu$m]")
plt.ylabel("z [$\mu$m]")
#!/usr/bin/ipython3
import numpy as _np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from TMM import TransferMatrix
from material_table import MaterialTable
import scipy.constants as _const
from scipy.optimize import curve_fit
import matplotlib.colors as colors

plt.ion()

a = MaterialTable.fromValue(1)
b = MaterialTable.fromValue(2)

wl = _np.arange(0.4,1,0.001)


depths = _np.linspace(0,6,1000)
Is = TransferMatrix([a] + [a]*2 + [b]*30 + [b],[1]*2 + [0.1]*30).getIntensityProfile(wl,0,False,zs=depths,function=False)
cmap = plt.get_cmap('gnuplot')
norm = colors.LogNorm()
plt.figure()
plt.pcolormesh(wl,depths,Is[:,:,0].transpose(),cmap=cmap,norm=norm)
plt.colorbar()
plt.show()
plt.figure()
plt.pcolormesh(wl,depths,Is[:,:,1].transpose(),cmap=cmap,norm=norm)
plt.colorbar()
plt.show()
Beispiel #6
0
#!/usr/bin/ipython3
import numpy as _np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from TMM import TransferMatrix
from material_table import MaterialTable
import scipy.constants as _const
from scipy.optimize import curve_fit
import matplotlib.colors as colors
from numpy.random import permutation

plt.ion()

air = MaterialTable.fromMaterial('air', 0.4, 1)
BK7 = MaterialTable.fromMaterial('BK7', 0.4, 1)
MgF2 = MaterialTable.fromMaterial('MgF2', 0.4, 1)
Ta2O5 = MaterialTable.fromMaterial('Ta2O5', 0.4, 1)
AlAs = MaterialTable.fromMaterial('AlAs', 0.4, 1)
SiO2 = MaterialTable.fromMaterial('SiO2', 0.4, 1)

default = [MgF2, Ta2O5, AlAs, SiO2]

permutation_stack = []

for i in range(100):
    permutation_stack += list(permutation(default))

wl = _np.arange(0.4, 1, 0.005)


def getThicknesses(l=0.5, layers=2):
#!/usr/bin/ipython3
import numpy as _np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from TMM import TransferMatrix
from material_table import MaterialTable
import scipy.constants as _const
from scipy.optimize import curve_fit
plt.ion()

air = MaterialTable.fromMaterial('air', 0.4, 1)
BK7 = MaterialTable.fromMaterial('BK7', 0.4, 1)
Mat2 = MaterialTable.fromValue(5)
Mat1 = MaterialTable.fromValue(2)

wl = _np.arange(0.4, 1, 0.001)


def getThicknesses(l=0.5, periods=2):
    global Mat1, Mat2
    widths = []
    stack = [air] + [Mat1, Mat2] * periods + [BK7]
    TM = TransferMatrix(stack, [1, 1] * periods)
    IM = [
        TM.getInterfacialMatrix(i, l, 0, True) for i in range(-1, periods * 2)
    ]
    p0 = _np.mod(_np.angle(-IM[0][1, 0] / IM[0][1, 1]),
                 2 * _const.pi)  # phase from immediate reflection
    phase = _np.mod(
        _np.angle(1 - (IM[0][1, 0] / IM[0][1, 1])**2), 2 * _const.pi
    )  # Phase change of thransmission through the first interface and back