示例#1
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
#!/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]")
示例#3
0
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.]')
ax2.set_ylim([-5e-4, 5e-4])
ax1.plot(wl, ref[:, 1])
ax1.plot(wl, t)
ax1.set_ylabel('Transmittance [a.u.]')
示例#4
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):