ElectroMagneticPython 2.2.1__py3-none-any.whl → 2.2.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- EMpy/RCWA.py +32 -12
- EMpy/__init__.py +10 -2
- EMpy/_version.py +24 -0
- EMpy/constants.py +0 -2
- EMpy/devices.py +8 -32
- EMpy/materials.py +1 -8
- EMpy/modesolvers/FD.py +34 -76
- EMpy/modesolvers/FMM.py +24 -23
- EMpy/modesolvers/__init__.py +1 -0
- EMpy/modesolvers/geometries.py +8 -9
- EMpy/transfer_matrix.py +10 -6
- EMpy/utils.py +12 -26
- electromagneticpython-2.2.4.dist-info/METADATA +99 -0
- electromagneticpython-2.2.4.dist-info/RECORD +45 -0
- {ElectroMagneticPython-2.2.1.dist-info → electromagneticpython-2.2.4.dist-info}/WHEEL +1 -1
- electromagneticpython-2.2.4.dist-info/top_level.txt +4 -0
- examples/ex_APRR.py +18 -0
- examples/ex_NRR.py +40 -0
- examples/ex_RCWA.py +95 -0
- examples/ex_RCWA_2.py +52 -0
- examples/ex_RCWA_3.py +58 -0
- examples/ex_SRR.py +23 -0
- examples/ex_laser_etch_monitor.py +241 -0
- examples/ex_modesolver.py +68 -0
- examples/ex_modesolver_2.py +58 -0
- examples/ex_modesolver_3.py +48 -0
- examples/ex_modesolver_4.py +43 -0
- examples/ex_modesolver_dch.py +296 -0
- examples/ex_modesolver_dch_anis.py +318 -0
- examples/ex_transfer_matrix.py +82 -0
- examples/ex_transfer_matrix_2.py +44 -0
- examples/ex_transfer_matrix_2.py.png +0 -0
- examples/ex_transfer_matrix_3.py +60 -0
- examples/lc_data.dat +27 -0
- examples/nk.py +1468 -0
- scripts/FDTD.py +741 -0
- tests/devices_test.py +31 -0
- tests/materials_test.py +1 -1
- tests/modesolvers_test.py +36 -0
- tests/transfer_matrix_test.py +134 -0
- tests/utils_test.py +9 -5
- EMpy/version.py +0 -1
- ElectroMagneticPython-2.2.1.dist-info/METADATA +0 -109
- ElectroMagneticPython-2.2.1.dist-info/RECORD +0 -22
- ElectroMagneticPython-2.2.1.dist-info/top_level.txt +0 -2
- {ElectroMagneticPython-2.2.1.dist-info → electromagneticpython-2.2.4.dist-info/licenses}/LICENSE +0 -0
examples/nk.py
ADDED
|
@@ -0,0 +1,1468 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
"""
|
|
3
|
+
Database file of functions to return refractive indices of various materials.
|
|
4
|
+
This file, nk.py should be in same dir as script, or in the python path somewhere.
|
|
5
|
+
|
|
6
|
+
All wavelengths are in MICRONS
|
|
7
|
+
|
|
8
|
+
After importing,
|
|
9
|
+
call `help( nk )` to see usage info.
|
|
10
|
+
call `dir( nk )` to list defined materials
|
|
11
|
+
call `help( nk.Si )` to see info on specific material model
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
Materials may be called from another script like so:
|
|
16
|
+
|
|
17
|
+
import nk
|
|
18
|
+
# Return the refractive index of SiO2 at the given wavelength(s):
|
|
19
|
+
>>> nk.SiO(1.550)
|
|
20
|
+
: 1.448333
|
|
21
|
+
|
|
22
|
+
You can pass/return multiple wavelengths/indices. They must in a numpy.array (not [list]), as so:
|
|
23
|
+
>>> nk.SiO( numpy.array([1.550, 1.551, 1.552]) )
|
|
24
|
+
: array([ 1.4483336 , 1.44832036, 1.44830712])
|
|
25
|
+
|
|
26
|
+
-- OR --
|
|
27
|
+
|
|
28
|
+
core_material = nk.SiN # Despite appearances, these are functions, not variables!
|
|
29
|
+
core_material( 1.550 ) # will give index at that wavelength
|
|
30
|
+
|
|
31
|
+
# Return the refractive index for the Alloy Al(0.92)Ga(0.08)As @ 1.550 micron wavelength:
|
|
32
|
+
>>> nk.AlGaAs(0.92, 1.550)
|
|
33
|
+
: 2.93059
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
Complex Refractive indices, in the form (n + i*k), can be requested from certain materials via the `k=True` argument, as so:
|
|
37
|
+
>>> nk.GaSb( 0.632 , k=True)
|
|
38
|
+
: (4.9285209602676332-0.69616573380335467j)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Materials may be defined in this file like so:
|
|
42
|
+
>>> cauchy = lambda p ,x: p[0] + p[1]/x**2 + p[2]/x**4
|
|
43
|
+
where cauchy is a defined lambda (in-line) fitting function, and p can be passed as a
|
|
44
|
+
list/tuple of 3 values to set the constants in the equations.
|
|
45
|
+
For SiO2 with the Cauchy fitting params of A=1.4764, B=0.0229, C=-0.012346 (for wavelength in microns):
|
|
46
|
+
>>> SiO2 = lambda x: cauchy([ 1.4764 , 0.02299 , -0.012346 ], x) # note x is still a passed variable.
|
|
47
|
+
>>> SiO2( 1.550 ) # in microns! (as defined by fitting params, above)
|
|
48
|
+
: 1.4764000095691965
|
|
49
|
+
|
|
50
|
+
See the GaAs_interp & GaSb_interp functions for examples of how to interpolate directly from raw tabulated data,
|
|
51
|
+
which can be found online for various materials at websites like:
|
|
52
|
+
http://www.filmetrics.com/refractive-index-database
|
|
53
|
+
https://refractiveindex.info
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
Originally written by Dustin Kleckner, U.C. Santa Barbara, 2008
|
|
57
|
+
Demis D. John: 2009 added some Cauchy fits for SiO2, Ta2O5, SiN
|
|
58
|
+
2012: Added some semiconductor alloys, such as GaAs, AlGaAs etc.
|
|
59
|
+
2014: Migrated some lambda functions over to full def() functions,
|
|
60
|
+
so that they have docstrings & wavelength range warnings.
|
|
61
|
+
2017: Added complex index (absorption) values to some functions via argument `k=True`.
|
|
62
|
+
Added interpolated data functions for GaAs & GaSb.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
######################################################
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
###########################
|
|
69
|
+
""" Import some modules """
|
|
70
|
+
###########################
|
|
71
|
+
import numpy as np # array math
|
|
72
|
+
import warnings # warn user if invalid parameter, but continue program
|
|
73
|
+
|
|
74
|
+
##############################################
|
|
75
|
+
""" Refractive Index models """
|
|
76
|
+
##############################################
|
|
77
|
+
|
|
78
|
+
lorentzian = (
|
|
79
|
+
lambda p, x: p[0]
|
|
80
|
+
+ p[1] * x
|
|
81
|
+
+ p[2] * 0.25 * p[3] ** 2 / ((x - p[4]) ** 2 + 0.25 * p[3] ** 2)
|
|
82
|
+
)
|
|
83
|
+
lorentzian.__doc__ = """ A Lorentzian on a linear background -- provides a much better fit than polynomial!"""
|
|
84
|
+
|
|
85
|
+
cauchy = lambda p, x: p[0] + p[1] / x**2 + p[2] / x**4
|
|
86
|
+
cauchy.__doc__ = """ 3-parameter lossless Cauchy fit, as used on the J.A.Woolam WVase Ellipsometer:"""
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
cauchy5 = lambda p, x: p[0] + p[1] / x**2 + p[2] / x**4 + p[3] / x**6 + p[4] / x**8
|
|
90
|
+
cauchy5.__doc__ = """ 5-parameter Cauchy fit """
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
cauchy2offset = lambda p, x: p[0] + p[1] / x**2 + p[2]
|
|
94
|
+
cauchy2offset.__doc__ = """ LiONiX (SiN): Cauchy model with birefringent offset
|
|
95
|
+
A + B/lambda^2 + C """
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
sellmeier = lambda p, x: np.sqrt(
|
|
99
|
+
p[0] + ((p[1] * x**2) / (x**2 - p[2] ** 2)) - p[3] * x**2
|
|
100
|
+
)
|
|
101
|
+
sellmeier.__doc__ = """ Sellmeier according to [1]
|
|
102
|
+
n^2 = offset + ((a*lambda^2)/(lambda^2 - b^2)) - c*lambda^2
|
|
103
|
+
where p[0], p[1], p[2], p[3] = offset, a, b, c respectively """
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def sellmeier1(p, x):
|
|
107
|
+
"""Sellmeier according to [2]: Mondry...Coldren: AlInGaAs on InP
|
|
108
|
+
n^2 = a + ( (b*lambda^2)/(lambda^2 - c^2) )
|
|
109
|
+
where p[0], p[1], p[2] = a, b, c respectively
|
|
110
|
+
|
|
111
|
+
Re-using `sellmeier()`, with C=0
|
|
112
|
+
"""
|
|
113
|
+
return sellmeier((p[0], p[1], p[2], 0), x)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
sellmeier5 = lambda p, x: np.sqrt(
|
|
117
|
+
p[0] + (p[1] * x**2 / (x**2 - p[2] ** 2)) + (p[3] * x**2 / (x**2 - p[4] ** 2))
|
|
118
|
+
)
|
|
119
|
+
sellmeier5.__doc__ = """ Sellmeier with 5 params -
|
|
120
|
+
#### CHECK THIS - maybe not good model - curvature doesn't look right
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
sellmeier7_1 = lambda p, x: np.sqrt(
|
|
125
|
+
1
|
|
126
|
+
+ p[0]
|
|
127
|
+
+ (p[1] * x**2 / (x**2 - p[2] ** 2))
|
|
128
|
+
+ (p[3] * x**2 / (x**2 - p[4] ** 2))
|
|
129
|
+
+ (p[5] * x**2 / (x**2 - p[6] ** 2))
|
|
130
|
+
)
|
|
131
|
+
sellmeier7_1.__doc__ = """ Sellmeier with 7 params and '1+...' """
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
sellmeier8_1 = lambda p, x: np.sqrt(
|
|
135
|
+
1
|
|
136
|
+
+ (p[0] * x**2 / (x**2 - p[1] ** 2))
|
|
137
|
+
+ (p[2] * x**2 / (x**2 - p[3] ** 2))
|
|
138
|
+
+ (p[4] * x**2 / (x**2 - p[5] ** 2))
|
|
139
|
+
+ (p[6] * x**2 / (x**2 - p[7] ** 2))
|
|
140
|
+
)
|
|
141
|
+
sellmeier8_1.__doc__ = """Sellmeier with 8 params and '1+...' """
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def fillfraction(base, fill):
|
|
145
|
+
"""Fill fraction, to reduce index of refraction"""
|
|
146
|
+
|
|
147
|
+
def f(x):
|
|
148
|
+
return (1.0 - fill) + fill * base(x)
|
|
149
|
+
|
|
150
|
+
return f
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
##############################################
|
|
154
|
+
## Other Utility Functions ##
|
|
155
|
+
# def wave(t, n):
|
|
156
|
+
# """
|
|
157
|
+
# return number of wavelengths (wavelength fraction), given
|
|
158
|
+
# t: thickness (um) &
|
|
159
|
+
# n: Refractive Index
|
|
160
|
+
# For example:
|
|
161
|
+
# Convert 10nm of InP to the wavelength-equivalent @ 1.410um:
|
|
162
|
+
# >>> wave( 0.010, n.InP(1.410) )
|
|
163
|
+
# """
|
|
164
|
+
# return t / (wl / n)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
# def thick(wave, n):
|
|
168
|
+
# """
|
|
169
|
+
# return thickness given
|
|
170
|
+
# wave: wave-fraction
|
|
171
|
+
# n: Refractive index
|
|
172
|
+
# For example:
|
|
173
|
+
# Convert 1/2-wave of InP to the thickness-equivalent @ 1.410um:
|
|
174
|
+
# >>> wave( 0.5, n.InP(1.410) )
|
|
175
|
+
# """
|
|
176
|
+
# return wave * (wl / n)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
##################################################
|
|
180
|
+
## Films: ##
|
|
181
|
+
##################################################
|
|
182
|
+
|
|
183
|
+
##################################################
|
|
184
|
+
## Metals & Alloys ##
|
|
185
|
+
##################################################
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def Si(wl):
|
|
189
|
+
"""
|
|
190
|
+
Calculate refractive index of Silicon at specified wavelength.
|
|
191
|
+
Valid from 0.400-1.200um
|
|
192
|
+
|
|
193
|
+
Silicon, from luxpop.com
|
|
194
|
+
Fit for 400-1200. RMS error: 9E-3
|
|
195
|
+
Error is more than others, maxing at around ~0.02
|
|
196
|
+
This is due to proximity of bandgap!
|
|
197
|
+
-- Dustin Kleckner, UCSB, ~2008
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
wl: wavelength in microns (float)
|
|
201
|
+
Returns:
|
|
202
|
+
Refractive index (float)
|
|
203
|
+
Raises:
|
|
204
|
+
Warning for wavelength out of model range
|
|
205
|
+
|
|
206
|
+
"""
|
|
207
|
+
check_wl(wl, 0.400, 1.200, "Si")
|
|
208
|
+
return lorentzian([3.72152, -1.83137e-4, 2.33148e5, 8.73460e-1, 2.50691e2], wl)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
# end def(Si)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def AlAs(wl):
|
|
215
|
+
"""
|
|
216
|
+
Calculate refractive index of AlAs at specified wavelength.
|
|
217
|
+
Valid from 0.56~2.2um
|
|
218
|
+
|
|
219
|
+
http://refractiveindex.info/legacy/?group=CRYSTALS&material=AlAs&option=HO&wavelength=1.050
|
|
220
|
+
|
|
221
|
+
Handbook of Optics, 2nd edition, Vol. 2. McGraw-Hill 1994
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
wl: wavelength in microns (float)
|
|
225
|
+
Returns:
|
|
226
|
+
Refractive index (float)
|
|
227
|
+
Raises:
|
|
228
|
+
Warning for wavelength out of model range
|
|
229
|
+
|
|
230
|
+
"""
|
|
231
|
+
check_wl(wl, 0.560, 2.300, "AlAs")
|
|
232
|
+
return sellmeier5((2.0792, 6.0840, 0.2822, 1.900, 27.62), wl)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def AlAs_interp(wl, k=False):
|
|
236
|
+
"""
|
|
237
|
+
Calculate refractive index of GaAs at specified wavelength with optional loss (k) returned as complex index, interpolated from tabulated data.
|
|
238
|
+
Valid from 206~2480nm
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
Tabulated data from:
|
|
242
|
+
http://www.filmetrics.com/refractive-index-database/AlAs/Aluminium-Arsenide
|
|
243
|
+
M. Garriga, P. Lautenschlager, M. Cardona, and K. Ploog, Solid State Commun. 61, 157 (1987) (UV data) and S. Adachi, J. Appl. Phys. 58, R1 (1985) (Vis and NIR data)
|
|
244
|
+
|
|
245
|
+
Uses Numpy interpolation to return values - will raise error if requested wavelength is outside range.
|
|
246
|
+
|
|
247
|
+
Args:
|
|
248
|
+
wl: wavelength in microns (float)
|
|
249
|
+
k : {True | False}, optional
|
|
250
|
+
False by default. If True, returns complex refractive indices.
|
|
251
|
+
Returns:
|
|
252
|
+
Refractive index (float), complex if k=True
|
|
253
|
+
Raises:
|
|
254
|
+
Warning for wavelength out of model range
|
|
255
|
+
|
|
256
|
+
"""
|
|
257
|
+
wl = np.atleast_1d(wl) # ensure arg is array
|
|
258
|
+
|
|
259
|
+
# raw data:
|
|
260
|
+
wls = 1e-3 * np.array(
|
|
261
|
+
[
|
|
262
|
+
221.0,
|
|
263
|
+
221.4300000000000068,
|
|
264
|
+
223.4199999999999875,
|
|
265
|
+
225.4499999999999886,
|
|
266
|
+
227.5200000000000102,
|
|
267
|
+
229.6299999999999955,
|
|
268
|
+
231.7800000000000011,
|
|
269
|
+
233.960000000000008,
|
|
270
|
+
236.1899999999999977,
|
|
271
|
+
238.460000000000008,
|
|
272
|
+
240.7800000000000011,
|
|
273
|
+
243.1399999999999864,
|
|
274
|
+
245.539999999999992,
|
|
275
|
+
248.0,
|
|
276
|
+
250.5099999999999909,
|
|
277
|
+
253.0600000000000023,
|
|
278
|
+
255.6699999999999875,
|
|
279
|
+
258.3299999999999841,
|
|
280
|
+
261.0500000000000114,
|
|
281
|
+
263.8299999999999841,
|
|
282
|
+
266.6700000000000159,
|
|
283
|
+
269.5699999999999932,
|
|
284
|
+
272.5299999999999727,
|
|
285
|
+
275.5600000000000023,
|
|
286
|
+
278.6499999999999773,
|
|
287
|
+
281.8199999999999932,
|
|
288
|
+
285.0600000000000023,
|
|
289
|
+
288.3700000000000045,
|
|
290
|
+
291.7599999999999909,
|
|
291
|
+
295.2400000000000091,
|
|
292
|
+
298.8000000000000114,
|
|
293
|
+
302.4399999999999977,
|
|
294
|
+
306.1700000000000159,
|
|
295
|
+
310.0,
|
|
296
|
+
313.9200000000000159,
|
|
297
|
+
317.9499999999999886,
|
|
298
|
+
322.0799999999999841,
|
|
299
|
+
326.3199999999999932,
|
|
300
|
+
330.6700000000000159,
|
|
301
|
+
335.1399999999999864,
|
|
302
|
+
339.7300000000000182,
|
|
303
|
+
344.4399999999999977,
|
|
304
|
+
349.3000000000000114,
|
|
305
|
+
354.2900000000000205,
|
|
306
|
+
359.4200000000000159,
|
|
307
|
+
364.7099999999999795,
|
|
308
|
+
370.1499999999999773,
|
|
309
|
+
375.7599999999999909,
|
|
310
|
+
381.5400000000000205,
|
|
311
|
+
387.5,
|
|
312
|
+
393.6499999999999773,
|
|
313
|
+
400.0,
|
|
314
|
+
406.5600000000000023,
|
|
315
|
+
413.3299999999999841,
|
|
316
|
+
420.339999999999975,
|
|
317
|
+
427.589999999999975,
|
|
318
|
+
435.089999999999975,
|
|
319
|
+
442.8600000000000136,
|
|
320
|
+
450.910000000000025,
|
|
321
|
+
459.2599999999999909,
|
|
322
|
+
467.9200000000000159,
|
|
323
|
+
476.9200000000000159,
|
|
324
|
+
486.2699999999999818,
|
|
325
|
+
496.0,
|
|
326
|
+
506.1200000000000045,
|
|
327
|
+
516.6699999999999591,
|
|
328
|
+
527.6599999999999682,
|
|
329
|
+
539.1299999999999955,
|
|
330
|
+
551.1100000000000136,
|
|
331
|
+
563.6399999999999864,
|
|
332
|
+
576.7400000000000091,
|
|
333
|
+
590.4800000000000182,
|
|
334
|
+
604.8799999999999955,
|
|
335
|
+
620.0,
|
|
336
|
+
635.8999999999999773,
|
|
337
|
+
652.6299999999999955,
|
|
338
|
+
670.2699999999999818,
|
|
339
|
+
688.8899999999999864,
|
|
340
|
+
708.57000000000005,
|
|
341
|
+
729.4099999999999682,
|
|
342
|
+
751.5199999999999818,
|
|
343
|
+
775.0,
|
|
344
|
+
800.0,
|
|
345
|
+
826.6699999999999591,
|
|
346
|
+
855.1699999999999591,
|
|
347
|
+
885.7100000000000364,
|
|
348
|
+
918.5199999999999818,
|
|
349
|
+
953.8500000000000227,
|
|
350
|
+
992.0,
|
|
351
|
+
1033.3299999999999272,
|
|
352
|
+
1078.2599999999999909,
|
|
353
|
+
1127.2699999999999818,
|
|
354
|
+
1180.9500000000000455,
|
|
355
|
+
1240.0,
|
|
356
|
+
1305.2599999999999909,
|
|
357
|
+
1377.7799999999999727,
|
|
358
|
+
1458.8199999999999363,
|
|
359
|
+
1550.0,
|
|
360
|
+
1653.3299999999999272,
|
|
361
|
+
1771.4300000000000637,
|
|
362
|
+
1907.6900000000000546,
|
|
363
|
+
2066.6700000000000728,
|
|
364
|
+
2254.5500000000001819,
|
|
365
|
+
2480.0,
|
|
366
|
+
]
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
check_wl(wl, np.min(wls), np.max(wls), "AlAs_interp")
|
|
370
|
+
|
|
371
|
+
ns = np.array(
|
|
372
|
+
[
|
|
373
|
+
1.3209299999999999,
|
|
374
|
+
1.3600000000000001,
|
|
375
|
+
1.3706,
|
|
376
|
+
1.3600000000000001,
|
|
377
|
+
1.3493999999999999,
|
|
378
|
+
1.3600000000000001,
|
|
379
|
+
1.4299999999999999,
|
|
380
|
+
1.53,
|
|
381
|
+
1.6363000000000001,
|
|
382
|
+
1.77,
|
|
383
|
+
1.96,
|
|
384
|
+
2.1600000000000001,
|
|
385
|
+
2.3169,
|
|
386
|
+
2.48,
|
|
387
|
+
2.6850000000000001,
|
|
388
|
+
2.9199999999999999,
|
|
389
|
+
3.1974999999999998,
|
|
390
|
+
3.48,
|
|
391
|
+
3.7387999999999999,
|
|
392
|
+
3.96,
|
|
393
|
+
4.1224999999999996,
|
|
394
|
+
4.2199999999999998,
|
|
395
|
+
4.2249999999999996,
|
|
396
|
+
4.1799999999999997,
|
|
397
|
+
4.1093999999999999,
|
|
398
|
+
4.04,
|
|
399
|
+
4.0099999999999998,
|
|
400
|
+
4.0099999999999998,
|
|
401
|
+
4.0355999999999996,
|
|
402
|
+
4.1100000000000003,
|
|
403
|
+
4.2680999999999996,
|
|
404
|
+
4.4699999999999998,
|
|
405
|
+
4.6905999999999999,
|
|
406
|
+
4.9199999999999999,
|
|
407
|
+
5.1605999999999996,
|
|
408
|
+
5.3499999999999996,
|
|
409
|
+
5.4218999999999999,
|
|
410
|
+
5.3899999999999997,
|
|
411
|
+
5.2093999999999996,
|
|
412
|
+
4.9900000000000002,
|
|
413
|
+
4.8449999999999998,
|
|
414
|
+
4.7199999999999998,
|
|
415
|
+
4.5944000000000003,
|
|
416
|
+
4.4800000000000004,
|
|
417
|
+
4.3856000000000002,
|
|
418
|
+
4.2999999999999998,
|
|
419
|
+
4.2163000000000004,
|
|
420
|
+
4.1299999999999999,
|
|
421
|
+
4.0293999999999999,
|
|
422
|
+
3.9300000000000002,
|
|
423
|
+
3.8450000000000002,
|
|
424
|
+
3.77,
|
|
425
|
+
3.7052,
|
|
426
|
+
3.6493000000000002,
|
|
427
|
+
3.6013000000000002,
|
|
428
|
+
3.5602999999999998,
|
|
429
|
+
3.5253000000000001,
|
|
430
|
+
3.4954999999999998,
|
|
431
|
+
3.4699,
|
|
432
|
+
3.4474999999999998,
|
|
433
|
+
3.4274,
|
|
434
|
+
3.4087999999999998,
|
|
435
|
+
3.3904999999999998,
|
|
436
|
+
3.3717999999999999,
|
|
437
|
+
3.3515999999999999,
|
|
438
|
+
3.3290000000000002,
|
|
439
|
+
3.3012999999999999,
|
|
440
|
+
3.2730000000000001,
|
|
441
|
+
3.2481,
|
|
442
|
+
3.2250000000000001,
|
|
443
|
+
3.2033999999999998,
|
|
444
|
+
3.1829999999999998,
|
|
445
|
+
3.1634000000000002,
|
|
446
|
+
3.145,
|
|
447
|
+
3.1280000000000001,
|
|
448
|
+
3.1120000000000001,
|
|
449
|
+
3.0966,
|
|
450
|
+
3.0819999999999999,
|
|
451
|
+
3.0686,
|
|
452
|
+
3.056,
|
|
453
|
+
3.0438000000000001,
|
|
454
|
+
3.032,
|
|
455
|
+
3.0207999999999999,
|
|
456
|
+
3.0099999999999998,
|
|
457
|
+
2.9996999999999998,
|
|
458
|
+
2.9900000000000002,
|
|
459
|
+
2.9813000000000001,
|
|
460
|
+
2.9729999999999999,
|
|
461
|
+
2.9647999999999999,
|
|
462
|
+
2.9569999999999999,
|
|
463
|
+
2.9498000000000002,
|
|
464
|
+
2.9430000000000001,
|
|
465
|
+
2.9363000000000001,
|
|
466
|
+
2.9300000000000002,
|
|
467
|
+
2.9243000000000001,
|
|
468
|
+
2.919,
|
|
469
|
+
2.9138000000000002,
|
|
470
|
+
2.9089999999999998,
|
|
471
|
+
2.9047999999999998,
|
|
472
|
+
2.9009999999999998,
|
|
473
|
+
2.8974000000000002,
|
|
474
|
+
2.8940000000000001,
|
|
475
|
+
2.8908999999999998,
|
|
476
|
+
2.8879999999999999,
|
|
477
|
+
]
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
ks = np.array(
|
|
481
|
+
[
|
|
482
|
+
2.4303080000000001e00,
|
|
483
|
+
2.7500000000000000e00,
|
|
484
|
+
2.8062999999999998e00,
|
|
485
|
+
2.8900000000000001e00,
|
|
486
|
+
2.9963000000000002e00,
|
|
487
|
+
3.1200000000000001e00,
|
|
488
|
+
3.2587999999999999e00,
|
|
489
|
+
3.3999999999999999e00,
|
|
490
|
+
3.5293999999999999e00,
|
|
491
|
+
3.6499999999999999e00,
|
|
492
|
+
3.7650000000000001e00,
|
|
493
|
+
3.8599999999999999e00,
|
|
494
|
+
3.9125000000000001e00,
|
|
495
|
+
3.9500000000000002e00,
|
|
496
|
+
4.0019000000000000e00,
|
|
497
|
+
4.0400000000000000e00,
|
|
498
|
+
4.0556000000000001e00,
|
|
499
|
+
4.0199999999999996e00,
|
|
500
|
+
3.8969000000000000e00,
|
|
501
|
+
3.7000000000000002e00,
|
|
502
|
+
3.4037999999999999e00,
|
|
503
|
+
3.0899999999999999e00,
|
|
504
|
+
2.8288000000000002e00,
|
|
505
|
+
2.6299999999999999e00,
|
|
506
|
+
2.5463000000000000e00,
|
|
507
|
+
2.5200000000000000e00,
|
|
508
|
+
2.5063000000000000e00,
|
|
509
|
+
2.5200000000000000e00,
|
|
510
|
+
2.5718999999999999e00,
|
|
511
|
+
2.6299999999999999e00,
|
|
512
|
+
2.6738000000000000e00,
|
|
513
|
+
2.6800000000000002e00,
|
|
514
|
+
2.6093999999999999e00,
|
|
515
|
+
2.4900000000000002e00,
|
|
516
|
+
2.3613000000000000e00,
|
|
517
|
+
2.1499999999999999e00,
|
|
518
|
+
1.7380000000000000e00,
|
|
519
|
+
1.3000000000000000e00,
|
|
520
|
+
9.8740000000000006e-01,
|
|
521
|
+
7.5200000000000000e-01,
|
|
522
|
+
6.1280000000000001e-01,
|
|
523
|
+
5.1900000000000002e-01,
|
|
524
|
+
4.1830000000000001e-01,
|
|
525
|
+
3.3400000000000002e-01,
|
|
526
|
+
2.7779999999999999e-01,
|
|
527
|
+
2.3300000000000001e-01,
|
|
528
|
+
1.8120000000000000e-01,
|
|
529
|
+
1.3900000000000001e-01,
|
|
530
|
+
1.2130000000000001e-01,
|
|
531
|
+
1.1500000000000000e-01,
|
|
532
|
+
1.1320000000000000e-01,
|
|
533
|
+
1.1300000000000000e-01,
|
|
534
|
+
1.1070000000000001e-01,
|
|
535
|
+
1.0240000000000000e-01,
|
|
536
|
+
8.0399999999999999e-02,
|
|
537
|
+
5.2999999999999999e-02,
|
|
538
|
+
2.3400000000000001e-02,
|
|
539
|
+
0.0000000000000000e00,
|
|
540
|
+
3.3000000000000000e-03,
|
|
541
|
+
0.0000000000000000e00,
|
|
542
|
+
0.0000000000000000e00,
|
|
543
|
+
0.0000000000000000e00,
|
|
544
|
+
0.0000000000000000e00,
|
|
545
|
+
0.0000000000000000e00,
|
|
546
|
+
0.0000000000000000e00,
|
|
547
|
+
0.0000000000000000e00,
|
|
548
|
+
0.0000000000000000e00,
|
|
549
|
+
0.0000000000000000e00,
|
|
550
|
+
0.0000000000000000e00,
|
|
551
|
+
0.0000000000000000e00,
|
|
552
|
+
0.0000000000000000e00,
|
|
553
|
+
0.0000000000000000e00,
|
|
554
|
+
0.0000000000000000e00,
|
|
555
|
+
0.0000000000000000e00,
|
|
556
|
+
0.0000000000000000e00,
|
|
557
|
+
0.0000000000000000e00,
|
|
558
|
+
0.0000000000000000e00,
|
|
559
|
+
0.0000000000000000e00,
|
|
560
|
+
0.0000000000000000e00,
|
|
561
|
+
0.0000000000000000e00,
|
|
562
|
+
0.0000000000000000e00,
|
|
563
|
+
0.0000000000000000e00,
|
|
564
|
+
0.0000000000000000e00,
|
|
565
|
+
0.0000000000000000e00,
|
|
566
|
+
0.0000000000000000e00,
|
|
567
|
+
0.0000000000000000e00,
|
|
568
|
+
0.0000000000000000e00,
|
|
569
|
+
0.0000000000000000e00,
|
|
570
|
+
0.0000000000000000e00,
|
|
571
|
+
0.0000000000000000e00,
|
|
572
|
+
0.0000000000000000e00,
|
|
573
|
+
0.0000000000000000e00,
|
|
574
|
+
0.0000000000000000e00,
|
|
575
|
+
0.0000000000000000e00,
|
|
576
|
+
0.0000000000000000e00,
|
|
577
|
+
0.0000000000000000e00,
|
|
578
|
+
0.0000000000000000e00,
|
|
579
|
+
0.0000000000000000e00,
|
|
580
|
+
0.0000000000000000e00,
|
|
581
|
+
0.0000000000000000e00,
|
|
582
|
+
0.0000000000000000e00,
|
|
583
|
+
0.0000000000000000e00,
|
|
584
|
+
0.0000000000000000e00,
|
|
585
|
+
0.0000000000000000e00,
|
|
586
|
+
]
|
|
587
|
+
)
|
|
588
|
+
|
|
589
|
+
ns = np.interp(wl, wls, ns)
|
|
590
|
+
ks = np.interp(wl, wls, ks)
|
|
591
|
+
if k:
|
|
592
|
+
return ns - 1j * ks
|
|
593
|
+
else:
|
|
594
|
+
return ns
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
# end def(AlAs_interp)
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
def GaAs(wl):
|
|
601
|
+
"""
|
|
602
|
+
Calculate refractive index of GaAs at specified wavelength for mid-Infra-Red
|
|
603
|
+
Valid from 1.4~11um
|
|
604
|
+
|
|
605
|
+
http://refractiveindex.info/legacy/?group=CRYSTALS&material=GaAs
|
|
606
|
+
|
|
607
|
+
Handbook of optics, 3rd ed., Vol. 4, mcgraw hill 2009
|
|
608
|
+
|
|
609
|
+
Args:
|
|
610
|
+
wl: wavelength in microns (float)
|
|
611
|
+
Returns:
|
|
612
|
+
Refractive index (float)
|
|
613
|
+
Raises:
|
|
614
|
+
Warning for wavelength out of model range
|
|
615
|
+
|
|
616
|
+
"""
|
|
617
|
+
check_wl(wl, 1.400, 12.0, "GaAs_mIR")
|
|
618
|
+
return sellmeier5((3.5, 7.4969, 0.4082, 1.9347, 37.17), wl)
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
# end def(GaAs_mIR)
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def GaAs_mIR(wl):
|
|
625
|
+
"""
|
|
626
|
+
Calculate refractive index of GaAs at specified wavelength.
|
|
627
|
+
Valid from 0.97~17 um
|
|
628
|
+
|
|
629
|
+
http://refractiveindex.info/?shelf=main&book=GaAs&page=Skauli
|
|
630
|
+
|
|
631
|
+
T. Skauli, P. S. Kuo, K. L. Vodopyanov, T. J. Pinguet, O. Levi, L. A. Eyres, J. S. Harris, M. M. Fejer, B. Gerard, L. Becouarn, and E. Lallier. Improved dispersion relations for GaAs and applications to nonlinear optics, J. Appl. Phys., 94, 6447-6455 (2003)
|
|
632
|
+
|
|
633
|
+
Args:
|
|
634
|
+
wl: wavelength in microns (float)
|
|
635
|
+
Returns:
|
|
636
|
+
Refractive index (float)
|
|
637
|
+
Raises:
|
|
638
|
+
Warning for wavelength out of model range
|
|
639
|
+
|
|
640
|
+
"""
|
|
641
|
+
check_wl(wl, 0.970, 17.50, "GaAs")
|
|
642
|
+
return sellmeier7_1(
|
|
643
|
+
(4.372514, 5.466742, 0.4431307, 0.02429960, 0.8746453, 1.957522, 36.9166), wl
|
|
644
|
+
)
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
# end def(GaAs)
|
|
648
|
+
# Should conditionally switch to mIR model depending on passed WL...
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
def GaAs_interp(wl, k=False):
|
|
652
|
+
"""
|
|
653
|
+
Calculate refractive index of GaAs at specified wavelength with optional loss (k) returned as complex index, interpolated from tabulated data.
|
|
654
|
+
Valid from 206~2066nm
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
Tabulated data from:
|
|
658
|
+
http://www.filmetrics.com/refractive-index-database/GaAs/Gallium-Arsenide
|
|
659
|
+
Reference: J. B. Theeten, D. E. Aspnes, and R. P. H. Chang, J. Appl. Phys. 49, 6097 (1978)
|
|
660
|
+
|
|
661
|
+
Uses Numpy interpolation to return values - will raise error if requested wavelength is outside range.
|
|
662
|
+
|
|
663
|
+
Args:
|
|
664
|
+
wl: wavelength in microns (float)
|
|
665
|
+
k : {True | False}, optional
|
|
666
|
+
False by default. If True, returns complex refractive indices.
|
|
667
|
+
Returns:
|
|
668
|
+
Refractive index (float), complex if k=True
|
|
669
|
+
Raises:
|
|
670
|
+
Warning for wavelength out of model range
|
|
671
|
+
|
|
672
|
+
"""
|
|
673
|
+
wl = np.atleast_1d(wl) # ensure arg is array
|
|
674
|
+
|
|
675
|
+
# raw data:
|
|
676
|
+
wls = 1e-3 * np.array(
|
|
677
|
+
[
|
|
678
|
+
206.6299999999999955,
|
|
679
|
+
210.1399999999999864,
|
|
680
|
+
213.7599999999999909,
|
|
681
|
+
217.5099999999999909,
|
|
682
|
+
221.3899999999999864,
|
|
683
|
+
225.4199999999999875,
|
|
684
|
+
229.5900000000000034,
|
|
685
|
+
233.9199999999999875,
|
|
686
|
+
238.4199999999999875,
|
|
687
|
+
243.0999999999999943,
|
|
688
|
+
247.960000000000008,
|
|
689
|
+
253.0200000000000102,
|
|
690
|
+
258.2900000000000205,
|
|
691
|
+
263.7900000000000205,
|
|
692
|
+
269.5199999999999818,
|
|
693
|
+
275.5099999999999909,
|
|
694
|
+
281.7699999999999818,
|
|
695
|
+
288.3299999999999841,
|
|
696
|
+
295.1899999999999977,
|
|
697
|
+
302.3899999999999864,
|
|
698
|
+
309.9499999999999886,
|
|
699
|
+
317.8999999999999773,
|
|
700
|
+
326.2599999999999909,
|
|
701
|
+
335.0799999999999841,
|
|
702
|
+
344.3899999999999864,
|
|
703
|
+
354.2300000000000182,
|
|
704
|
+
364.6499999999999773,
|
|
705
|
+
375.6999999999999886,
|
|
706
|
+
387.4399999999999977,
|
|
707
|
+
399.9399999999999977,
|
|
708
|
+
413.2699999999999818,
|
|
709
|
+
427.5199999999999818,
|
|
710
|
+
442.7900000000000205,
|
|
711
|
+
459.1899999999999977,
|
|
712
|
+
476.8500000000000227,
|
|
713
|
+
495.9200000000000159,
|
|
714
|
+
516.5800000000000409,
|
|
715
|
+
539.0399999999999636,
|
|
716
|
+
563.5499999999999545,
|
|
717
|
+
590.3799999999999955,
|
|
718
|
+
619.8999999999999773,
|
|
719
|
+
652.5299999999999727,
|
|
720
|
+
688.7799999999999727,
|
|
721
|
+
729.2899999999999636,
|
|
722
|
+
774.8700000000000045,
|
|
723
|
+
826.5299999999999727,
|
|
724
|
+
885.57000000000005,
|
|
725
|
+
953.6900000000000546,
|
|
726
|
+
1033.1700000000000728,
|
|
727
|
+
1127.0899999999999181,
|
|
728
|
+
1239.7999999999999545,
|
|
729
|
+
1377.5599999999999454,
|
|
730
|
+
1549.75,
|
|
731
|
+
1771.1400000000001,
|
|
732
|
+
2066.3299999999999272,
|
|
733
|
+
]
|
|
734
|
+
)
|
|
735
|
+
|
|
736
|
+
check_wl(wl, np.min(wls), np.max(wls), "GaAs_interp")
|
|
737
|
+
|
|
738
|
+
ns = np.array(
|
|
739
|
+
[
|
|
740
|
+
1.264,
|
|
741
|
+
1.288,
|
|
742
|
+
1.3109999999999999,
|
|
743
|
+
1.325,
|
|
744
|
+
1.349,
|
|
745
|
+
1.383,
|
|
746
|
+
1.4299999999999999,
|
|
747
|
+
1.4990000000000001,
|
|
748
|
+
1.599,
|
|
749
|
+
1.802,
|
|
750
|
+
2.2730000000000001,
|
|
751
|
+
2.8900000000000001,
|
|
752
|
+
3.3420000000000001,
|
|
753
|
+
3.5979999999999999,
|
|
754
|
+
3.7690000000000001,
|
|
755
|
+
3.9129999999999998,
|
|
756
|
+
4.0149999999999997,
|
|
757
|
+
3.9390000000000001,
|
|
758
|
+
3.8100000000000001,
|
|
759
|
+
3.6920000000000002,
|
|
760
|
+
3.601,
|
|
761
|
+
3.5379999999999998,
|
|
762
|
+
3.5009999999999999,
|
|
763
|
+
3.4849999999999999,
|
|
764
|
+
3.4950000000000001,
|
|
765
|
+
3.5310000000000001,
|
|
766
|
+
3.5960000000000001,
|
|
767
|
+
3.7090000000000001,
|
|
768
|
+
3.9380000000000002,
|
|
769
|
+
4.3730000000000002,
|
|
770
|
+
4.5090000000000003,
|
|
771
|
+
5.0519999999999996,
|
|
772
|
+
4.9589999999999996,
|
|
773
|
+
4.694,
|
|
774
|
+
4.492,
|
|
775
|
+
4.3330000000000002,
|
|
776
|
+
4.2050000000000001,
|
|
777
|
+
4.0999999999999996,
|
|
778
|
+
4.0129999999999999,
|
|
779
|
+
3.9399999999999999,
|
|
780
|
+
3.8780000000000001,
|
|
781
|
+
3.8260000000000001,
|
|
782
|
+
3.7850000000000001,
|
|
783
|
+
3.742,
|
|
784
|
+
3.7000000000000002,
|
|
785
|
+
3.6659999999999999,
|
|
786
|
+
3.6139999999999999,
|
|
787
|
+
3.5388000000000002,
|
|
788
|
+
3.492,
|
|
789
|
+
3.4546000000000001,
|
|
790
|
+
3.4232,
|
|
791
|
+
3.3965000000000001,
|
|
792
|
+
3.3736999999999999,
|
|
793
|
+
3.3542999999999998,
|
|
794
|
+
3.3378000000000001,
|
|
795
|
+
]
|
|
796
|
+
)
|
|
797
|
+
|
|
798
|
+
ks = np.array(
|
|
799
|
+
[
|
|
800
|
+
2.4720000000000000e00,
|
|
801
|
+
2.5569999999999999e00,
|
|
802
|
+
2.6250000000000000e00,
|
|
803
|
+
2.7100000000000000e00,
|
|
804
|
+
2.8149999999999999e00,
|
|
805
|
+
2.9359999999999999e00,
|
|
806
|
+
3.0790000000000002e00,
|
|
807
|
+
3.2549999999999999e00,
|
|
808
|
+
3.4840000000000000e00,
|
|
809
|
+
3.7949999999999999e00,
|
|
810
|
+
4.0839999999999996e00,
|
|
811
|
+
4.0469999999999997e00,
|
|
812
|
+
3.7700000000000000e00,
|
|
813
|
+
3.4520000000000000e00,
|
|
814
|
+
3.1690000000000000e00,
|
|
815
|
+
2.9190000000000000e00,
|
|
816
|
+
2.5630000000000002e00,
|
|
817
|
+
2.2599999999999998e00,
|
|
818
|
+
2.0690000000000000e00,
|
|
819
|
+
1.9690000000000001e00,
|
|
820
|
+
1.9199999999999999e00,
|
|
821
|
+
1.9039999999999999e00,
|
|
822
|
+
1.9090000000000000e00,
|
|
823
|
+
1.9310000000000000e00,
|
|
824
|
+
1.9650000000000001e00,
|
|
825
|
+
2.0129999999999999e00,
|
|
826
|
+
2.0760000000000001e00,
|
|
827
|
+
2.1619999999999999e00,
|
|
828
|
+
2.2879999999999998e00,
|
|
829
|
+
2.1459999999999999e00,
|
|
830
|
+
1.9480000000000000e00,
|
|
831
|
+
1.7210000000000001e00,
|
|
832
|
+
9.9099999999999999e-01,
|
|
833
|
+
6.9599999999999995e-01,
|
|
834
|
+
5.3900000000000003e-01,
|
|
835
|
+
4.4100000000000000e-01,
|
|
836
|
+
3.7100000000000000e-01,
|
|
837
|
+
3.2000000000000001e-01,
|
|
838
|
+
2.7600000000000002e-01,
|
|
839
|
+
2.3999999999999999e-01,
|
|
840
|
+
2.1099999999999999e-01,
|
|
841
|
+
1.7899999999999999e-01,
|
|
842
|
+
1.5100000000000000e-01,
|
|
843
|
+
1.1200000000000000e-01,
|
|
844
|
+
9.0999999999999998e-02,
|
|
845
|
+
8.0000000000000002e-02,
|
|
846
|
+
1.6999999999999999e-03,
|
|
847
|
+
0.0000000000000000e00,
|
|
848
|
+
0.0000000000000000e00,
|
|
849
|
+
0.0000000000000000e00,
|
|
850
|
+
0.0000000000000000e00,
|
|
851
|
+
0.0000000000000000e00,
|
|
852
|
+
0.0000000000000000e00,
|
|
853
|
+
0.0000000000000000e00,
|
|
854
|
+
0.0000000000000000e00,
|
|
855
|
+
]
|
|
856
|
+
)
|
|
857
|
+
|
|
858
|
+
ns = np.interp(wl, wls, ns)
|
|
859
|
+
ks = np.interp(wl, wls, ks)
|
|
860
|
+
if k:
|
|
861
|
+
return ns - 1j * ks
|
|
862
|
+
else:
|
|
863
|
+
return ns
|
|
864
|
+
|
|
865
|
+
|
|
866
|
+
# end def(GaAs_interp)
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
def GaSb_interp(wl, k=False):
|
|
870
|
+
"""
|
|
871
|
+
Calculate refractive index (complex) of GaSb at specified wavelength.
|
|
872
|
+
Valid from from 206.6 nm to 826.6 nm. Interpolation of raw tabulated data.
|
|
873
|
+
|
|
874
|
+
https://refractiveindex.info/?shelf=main&book=GaSb&page=Aspnes
|
|
875
|
+
|
|
876
|
+
D. E. Aspnes and A. A. Studna. Dielectric functions and optical parameters of Si, Ge, GaP, GaAs, GaSb, InP, InAs, and InSb from 1.5 to 6.0 eV, Phys. Rev. B, 27, 985-1009 (1983)
|
|
877
|
+
https://doi.org/10.1103/PhysRevB.27.985
|
|
878
|
+
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
Args:
|
|
882
|
+
wl: wavelength in microns (float)
|
|
883
|
+
k : {True | False}, optional
|
|
884
|
+
False by default. If True, returns complex refractive indices.
|
|
885
|
+
Returns:
|
|
886
|
+
Refractive index (float), complex if k=True
|
|
887
|
+
Raises:
|
|
888
|
+
Warning for wavelength out of model range
|
|
889
|
+
|
|
890
|
+
"""
|
|
891
|
+
wl = np.atleast_1d(wl) # ensure arg is array
|
|
892
|
+
|
|
893
|
+
# raw data:
|
|
894
|
+
wls = np.array(
|
|
895
|
+
[
|
|
896
|
+
0.2066,
|
|
897
|
+
0.2101,
|
|
898
|
+
0.2138,
|
|
899
|
+
0.2175,
|
|
900
|
+
0.2214,
|
|
901
|
+
0.2254,
|
|
902
|
+
0.2296,
|
|
903
|
+
0.2339,
|
|
904
|
+
0.2384,
|
|
905
|
+
0.2431,
|
|
906
|
+
0.248,
|
|
907
|
+
0.253,
|
|
908
|
+
0.2583,
|
|
909
|
+
0.2638,
|
|
910
|
+
0.2695,
|
|
911
|
+
0.2755,
|
|
912
|
+
0.2818,
|
|
913
|
+
0.2883,
|
|
914
|
+
0.2952,
|
|
915
|
+
0.3024,
|
|
916
|
+
0.31,
|
|
917
|
+
0.3179,
|
|
918
|
+
0.3263,
|
|
919
|
+
0.3351,
|
|
920
|
+
0.3444,
|
|
921
|
+
0.3542,
|
|
922
|
+
0.3647,
|
|
923
|
+
0.3757,
|
|
924
|
+
0.3875,
|
|
925
|
+
0.3999,
|
|
926
|
+
0.4133,
|
|
927
|
+
0.4275,
|
|
928
|
+
0.4428,
|
|
929
|
+
0.4592,
|
|
930
|
+
0.4769,
|
|
931
|
+
0.4959,
|
|
932
|
+
0.5165999999999999,
|
|
933
|
+
0.5391,
|
|
934
|
+
0.5636,
|
|
935
|
+
0.5904,
|
|
936
|
+
0.6199,
|
|
937
|
+
0.6525,
|
|
938
|
+
0.6888,
|
|
939
|
+
0.7292999999999999,
|
|
940
|
+
0.7749,
|
|
941
|
+
0.8266,
|
|
942
|
+
]
|
|
943
|
+
)
|
|
944
|
+
|
|
945
|
+
check_wl(wl, np.min(wls), np.max(wls), "GaSb_interp")
|
|
946
|
+
|
|
947
|
+
ns = np.array(
|
|
948
|
+
[
|
|
949
|
+
0.9350000000000001,
|
|
950
|
+
0.985,
|
|
951
|
+
1.022,
|
|
952
|
+
1.0620000000000001,
|
|
953
|
+
1.127,
|
|
954
|
+
1.212,
|
|
955
|
+
1.2989999999999999,
|
|
956
|
+
1.345,
|
|
957
|
+
1.3560000000000001,
|
|
958
|
+
1.3580000000000001,
|
|
959
|
+
1.369,
|
|
960
|
+
1.387,
|
|
961
|
+
1.4079999999999999,
|
|
962
|
+
1.444,
|
|
963
|
+
1.5029999999999999,
|
|
964
|
+
1.5860000000000001,
|
|
965
|
+
1.7230000000000001,
|
|
966
|
+
1.9890000000000001,
|
|
967
|
+
2.5219999999999998,
|
|
968
|
+
3.1000000000000001,
|
|
969
|
+
3.4500000000000002,
|
|
970
|
+
3.6200000000000001,
|
|
971
|
+
3.7010000000000001,
|
|
972
|
+
3.7480000000000002,
|
|
973
|
+
3.774,
|
|
974
|
+
3.7850000000000001,
|
|
975
|
+
3.794,
|
|
976
|
+
3.8079999999999998,
|
|
977
|
+
3.7999999999999998,
|
|
978
|
+
3.766,
|
|
979
|
+
3.7320000000000002,
|
|
980
|
+
3.7280000000000002,
|
|
981
|
+
3.7599999999999998,
|
|
982
|
+
3.8359999999999999,
|
|
983
|
+
3.984,
|
|
984
|
+
4.3120000000000003,
|
|
985
|
+
4.5129999999999999,
|
|
986
|
+
4.492,
|
|
987
|
+
4.5209999999999999,
|
|
988
|
+
4.7050000000000001,
|
|
989
|
+
5.2389999999999999,
|
|
990
|
+
5.0519999999999996,
|
|
991
|
+
4.8170000000000002,
|
|
992
|
+
4.6429999999999998,
|
|
993
|
+
4.5069999999999997,
|
|
994
|
+
4.3879999999999999,
|
|
995
|
+
]
|
|
996
|
+
)
|
|
997
|
+
|
|
998
|
+
ks = np.array(
|
|
999
|
+
[
|
|
1000
|
+
2.4159999999999999,
|
|
1001
|
+
2.444,
|
|
1002
|
+
2.4790000000000001,
|
|
1003
|
+
2.5350000000000001,
|
|
1004
|
+
2.6019999999999999,
|
|
1005
|
+
2.645,
|
|
1006
|
+
2.653,
|
|
1007
|
+
2.6379999999999999,
|
|
1008
|
+
2.645,
|
|
1009
|
+
2.6850000000000001,
|
|
1010
|
+
2.7509999999999999,
|
|
1011
|
+
2.8290000000000002,
|
|
1012
|
+
2.9279999999999999,
|
|
1013
|
+
3.0550000000000002,
|
|
1014
|
+
3.2080000000000002,
|
|
1015
|
+
3.3919999999999999,
|
|
1016
|
+
3.6280000000000001,
|
|
1017
|
+
3.923,
|
|
1018
|
+
4.1299999999999999,
|
|
1019
|
+
3.976,
|
|
1020
|
+
3.6429999999999998,
|
|
1021
|
+
3.323,
|
|
1022
|
+
3.069,
|
|
1023
|
+
2.8620000000000001,
|
|
1024
|
+
2.6899999999999999,
|
|
1025
|
+
2.5449999999999999,
|
|
1026
|
+
2.4300000000000002,
|
|
1027
|
+
2.319,
|
|
1028
|
+
2.21,
|
|
1029
|
+
2.1339999999999999,
|
|
1030
|
+
2.109,
|
|
1031
|
+
2.121,
|
|
1032
|
+
2.157,
|
|
1033
|
+
2.2109999999999999,
|
|
1034
|
+
2.2799999999999998,
|
|
1035
|
+
2.2850000000000001,
|
|
1036
|
+
1.962,
|
|
1037
|
+
1.7889999999999999,
|
|
1038
|
+
1.7470000000000001,
|
|
1039
|
+
1.8029999999999999,
|
|
1040
|
+
1.3779999999999999,
|
|
1041
|
+
0.829,
|
|
1042
|
+
0.611,
|
|
1043
|
+
0.485,
|
|
1044
|
+
0.416,
|
|
1045
|
+
0.344,
|
|
1046
|
+
]
|
|
1047
|
+
)
|
|
1048
|
+
|
|
1049
|
+
ns = np.interp(wl, wls, ns)
|
|
1050
|
+
ks = np.interp(wl, wls, ks)
|
|
1051
|
+
if k:
|
|
1052
|
+
return ns - 1j * ks
|
|
1053
|
+
else:
|
|
1054
|
+
return ns
|
|
1055
|
+
|
|
1056
|
+
|
|
1057
|
+
# end def(GaSb_interp)
|
|
1058
|
+
|
|
1059
|
+
|
|
1060
|
+
def InAs_fIR(wl):
|
|
1061
|
+
"""
|
|
1062
|
+
Calculate refractive index of InAs at specified wavelength for far-infra-red
|
|
1063
|
+
Valid from 3.7-31.3 um
|
|
1064
|
+
|
|
1065
|
+
http://refractiveindex.info/legacy/?group=CRYSTALS&material=InAs
|
|
1066
|
+
|
|
1067
|
+
Handbook of Optics, 2nd edition, Vol. 2. McGraw-Hill 1994
|
|
1068
|
+
|
|
1069
|
+
Args:
|
|
1070
|
+
wl: wavelength in microns (float)
|
|
1071
|
+
Returns:
|
|
1072
|
+
Refractive index (float)
|
|
1073
|
+
Raises:
|
|
1074
|
+
Warning for wavelength out of model range
|
|
1075
|
+
|
|
1076
|
+
"""
|
|
1077
|
+
check_wl(wl, 3.70, 31.30, "InAs_fIR")
|
|
1078
|
+
return sellmeier5((11.10, 0.71, 2.551, 2.75, 45.66), wl)
|
|
1079
|
+
|
|
1080
|
+
|
|
1081
|
+
# end def(InAs_fIR)
|
|
1082
|
+
|
|
1083
|
+
|
|
1084
|
+
def InAs(wl):
|
|
1085
|
+
"""
|
|
1086
|
+
Calculate refractive index of InAs at specified wavelength for far-infra-red
|
|
1087
|
+
Valid from from 0.5299 um to 1.907 um
|
|
1088
|
+
|
|
1089
|
+
http://www.filmetrics.com/refractive-index-database/InAs/Indium-Arsenide
|
|
1090
|
+
|
|
1091
|
+
Downloaded data file with index values from 0.200-2.0um, and did a Cauchy Fit from 0.530 to 1.9um
|
|
1092
|
+
Cauchy params: A=3.47230, B=0.0876377, C=0.0457569
|
|
1093
|
+
|
|
1094
|
+
Args:
|
|
1095
|
+
wl: wavelength in microns (float)
|
|
1096
|
+
Returns:
|
|
1097
|
+
Refractive index (float)
|
|
1098
|
+
Raises:
|
|
1099
|
+
Warning for wavelength out of model range
|
|
1100
|
+
|
|
1101
|
+
"""
|
|
1102
|
+
check_wl(wl, 0.5299, 1.907, "InAs")
|
|
1103
|
+
return cauchy((3.47230, 0.0876377, 0.0457569), wl)
|
|
1104
|
+
|
|
1105
|
+
|
|
1106
|
+
# end def(InAs)
|
|
1107
|
+
|
|
1108
|
+
|
|
1109
|
+
def InP(wl):
|
|
1110
|
+
"""
|
|
1111
|
+
Calculate refractive index of InP.
|
|
1112
|
+
Valid from from 0.950 um to ~10 um
|
|
1113
|
+
|
|
1114
|
+
http://refractiveindex.info/legacy/?group=CRYSTALS&material=InP
|
|
1115
|
+
|
|
1116
|
+
Handbook of Optics, 2nd edition, Vol. 2. McGraw-Hill 1994
|
|
1117
|
+
|
|
1118
|
+
Args:
|
|
1119
|
+
wl: wavelength in microns (float)
|
|
1120
|
+
Returns:
|
|
1121
|
+
Refractive index (float)
|
|
1122
|
+
Raises:
|
|
1123
|
+
Warning for wavelength out of model range
|
|
1124
|
+
|
|
1125
|
+
"""
|
|
1126
|
+
check_wl(wl, 0.950, 10.50, "InP")
|
|
1127
|
+
return sellmeier5((7.255, 2.316, 0.6263, 2.765, 32.935), wl)
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
# end def(InP)
|
|
1131
|
+
|
|
1132
|
+
|
|
1133
|
+
def GaP(wl):
|
|
1134
|
+
"""
|
|
1135
|
+
Calculate refractive index of GaP at specified wavelength.
|
|
1136
|
+
Valid from from 0.800 um to ~10 um
|
|
1137
|
+
|
|
1138
|
+
http://refractiveindex.info/legacy/?group=CRYSTALS&material=InP
|
|
1139
|
+
|
|
1140
|
+
Handbook of Optics, 2nd edition, Vol. 2. McGraw-Hill 1994
|
|
1141
|
+
|
|
1142
|
+
Args:
|
|
1143
|
+
wl: wavelength in microns (float)
|
|
1144
|
+
Returns:
|
|
1145
|
+
Refractive index (float)
|
|
1146
|
+
Raises:
|
|
1147
|
+
Warning for wavelength out of model range
|
|
1148
|
+
|
|
1149
|
+
"""
|
|
1150
|
+
check_wl(wl, 0.800, 10.50, "GaP")
|
|
1151
|
+
# wlmin = 0.800
|
|
1152
|
+
# wlmax = 10.50
|
|
1153
|
+
return sellmeier8_1((1.390, 0.172, 4.131, 0.234, 2.570, 0.345, 2.056, 27.52), wl)
|
|
1154
|
+
|
|
1155
|
+
|
|
1156
|
+
# end def(GaP)
|
|
1157
|
+
|
|
1158
|
+
|
|
1159
|
+
#######################
|
|
1160
|
+
### Ternary Alloys ###
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
def AlGaAs(x, wl):
|
|
1164
|
+
"""
|
|
1165
|
+
Returns the refractive index of Al(x)Ga(1-x)As at the specified wavelength, wl (in microns) and Aluminum content (x=0.0-1.0).
|
|
1166
|
+
Valid for 0.970 - 2.2 um
|
|
1167
|
+
|
|
1168
|
+
Calc'd by linear interpolation between AlAs() & GaAs().
|
|
1169
|
+
|
|
1170
|
+
Args:
|
|
1171
|
+
x: mole ratio of Al, as in: Al(x) Ga(1-x) As
|
|
1172
|
+
wl: wavelength in microns (float)
|
|
1173
|
+
Returns:
|
|
1174
|
+
Refractive index (float)
|
|
1175
|
+
Raises:
|
|
1176
|
+
Warning for wavelength out of model range
|
|
1177
|
+
"""
|
|
1178
|
+
check_wl(wl, 0.970, 2.20, "AlGaAs")
|
|
1179
|
+
return GaAs(wl) - (GaAs(wl) - AlAs(wl)) * x
|
|
1180
|
+
|
|
1181
|
+
|
|
1182
|
+
# end def(AlGaAs)
|
|
1183
|
+
|
|
1184
|
+
|
|
1185
|
+
def AlGaAs_interp(x, wl, k=False):
|
|
1186
|
+
"""
|
|
1187
|
+
Returns the refractive index of Al(x)Ga(1-x)As at the specified wavelength, wl (in microns) and Aluminum content (x=0.0-1.0).
|
|
1188
|
+
Returns complex value (including loss, k) if k==True.
|
|
1189
|
+
Uses interpolated GaAs_interp() & AlAs_interp().
|
|
1190
|
+
|
|
1191
|
+
Valid for wavelengths 0.206 - 2.066 um
|
|
1192
|
+
AlAs_interp: 0.206-2.480nm
|
|
1193
|
+
GaAs_interp: 0.206-2.066nm
|
|
1194
|
+
|
|
1195
|
+
Calc'd by linear interpolation between AlAs() & GaAs().
|
|
1196
|
+
|
|
1197
|
+
Args:
|
|
1198
|
+
x: mole ratio of Al, as in: Al(x) Ga(1-x) As
|
|
1199
|
+
wl: wavelength in microns (float)
|
|
1200
|
+
Returns:
|
|
1201
|
+
Refractive index (float)
|
|
1202
|
+
Raises:
|
|
1203
|
+
Exception ValueError for wavelength out of model range
|
|
1204
|
+
"""
|
|
1205
|
+
check_wl(wl, 0.206, 2.066, "AlGaAs_interp", fail=True)
|
|
1206
|
+
if k:
|
|
1207
|
+
GaAs = GaAs_interp(wl, k=True)
|
|
1208
|
+
AlAs = AlAs_interp(wl, k=True)
|
|
1209
|
+
return GaAs - (GaAs - AlAs) * x
|
|
1210
|
+
else:
|
|
1211
|
+
return GaAs_interp(wl) - (GaAs_interp(wl) - AlAs_interp(wl)) * x
|
|
1212
|
+
|
|
1213
|
+
|
|
1214
|
+
# end def(AlGaAs)
|
|
1215
|
+
|
|
1216
|
+
|
|
1217
|
+
def InGaAs(x, wl):
|
|
1218
|
+
"""
|
|
1219
|
+
Returns the index of In(1-x)Ga(x)As at the specified wavelength, wl (in microns) and Gallium content (x=0.0-1.0).
|
|
1220
|
+
Valid for 0.970 - 1.907 um.
|
|
1221
|
+
|
|
1222
|
+
Calc'd by linear interpolation between InAs() & GaAs().
|
|
1223
|
+
|
|
1224
|
+
Args:
|
|
1225
|
+
x: mole ratio of Gallium, as in: Ga(x) In(1-x) As
|
|
1226
|
+
wl: wavelength in microns (float)
|
|
1227
|
+
Returns:
|
|
1228
|
+
Refractive index (float)
|
|
1229
|
+
Raises:
|
|
1230
|
+
Warning for wavelength out of model range
|
|
1231
|
+
"""
|
|
1232
|
+
check_wl(wl, 0.970, 1.907, "InGaAs")
|
|
1233
|
+
# wlmin = 0.970
|
|
1234
|
+
# wlmax = 1.907
|
|
1235
|
+
return GaAs(wl) - (GaAs(wl) - InAs(wl)) * x
|
|
1236
|
+
|
|
1237
|
+
|
|
1238
|
+
# end def(InGaAs)
|
|
1239
|
+
|
|
1240
|
+
|
|
1241
|
+
def InGaP(x, wl):
|
|
1242
|
+
"""
|
|
1243
|
+
Returns the index of In(x)Ga(1-x)P at the specified wavelength, wl (in microns) and Gallium content (x=0.0-1.0).
|
|
1244
|
+
Valid for 0.950 - 1.907 um.
|
|
1245
|
+
|
|
1246
|
+
Calc'd by linear interpolation between InP() & GaP().
|
|
1247
|
+
Args:
|
|
1248
|
+
x: mole ratio of Indium, as in: In(x) Ga(1-x) P
|
|
1249
|
+
wl: wavelength in microns (float)
|
|
1250
|
+
Returns:
|
|
1251
|
+
Refractive index (float)
|
|
1252
|
+
Raises:
|
|
1253
|
+
Warning for wavelength out of model range
|
|
1254
|
+
"""
|
|
1255
|
+
check_wl(wl, 0.950, 1.907, "InGaP")
|
|
1256
|
+
return InP(wl) - (InP(wl) - GaP(wl)) * x
|
|
1257
|
+
|
|
1258
|
+
|
|
1259
|
+
# end def(InGaAs)
|
|
1260
|
+
|
|
1261
|
+
|
|
1262
|
+
def GaAsP(x, wl):
|
|
1263
|
+
"""
|
|
1264
|
+
Returns the refractive index of Ga(x)As(1-x)P at the specified wavelength, wl (in microns) and Gallium content (x=0.0-1.0).
|
|
1265
|
+
Valid for 0.970 - 2.2 um
|
|
1266
|
+
|
|
1267
|
+
Calc'd by linear interpolation between GaAs() & GaP().
|
|
1268
|
+
|
|
1269
|
+
Args:
|
|
1270
|
+
x: mole ratio of Ga, as in: Ga(x) As(1-x) P [float]
|
|
1271
|
+
wl: wavelength in microns [float]
|
|
1272
|
+
Returns:
|
|
1273
|
+
Refractive index [float]
|
|
1274
|
+
Raises:
|
|
1275
|
+
Warning for wavelength out of model range
|
|
1276
|
+
|
|
1277
|
+
"""
|
|
1278
|
+
check_wl(wl, 0.970, 2.20, "GaAsP")
|
|
1279
|
+
return GaAs(wl) - (GaAs(wl) - GaP(wl)) * x
|
|
1280
|
+
|
|
1281
|
+
|
|
1282
|
+
# end def(AlGaAs)
|
|
1283
|
+
|
|
1284
|
+
|
|
1285
|
+
##########################
|
|
1286
|
+
### Quaternary Alloys ###
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
def AlInGaAs(x, wl):
|
|
1290
|
+
"""
|
|
1291
|
+
Returns the refractive index of ~Al(x)Ga(1-x)In(1-x-y)As (lattice-matched to InP) at the specified wavelength, wl (in microns) and Aluminum content (x=0.0-1.0).
|
|
1292
|
+
|
|
1293
|
+
For lattice-matching, the actual mole ratio, x, is defined as so:
|
|
1294
|
+
InP-matched X: (Al48 In52 As)_X --> (Ga47 In53 As)_1-X
|
|
1295
|
+
|
|
1296
|
+
Valid for wavelengths: 0.900 - 2.100 um & x: 0.3 - 1.0
|
|
1297
|
+
|
|
1298
|
+
Calc'd by sellmeier equation, with params from:
|
|
1299
|
+
M. J. Mondry, D. I. Babic, J. E. Bowers, and L. A. Coldren, "Refractive indexes of (Al,Ga,In)As epilayers on InP for optoelectronic applications," Phot. Tech. Lett., vol. 4, no. 6, pp. 627-630, 1992
|
|
1300
|
+
|
|
1301
|
+
Parameters
|
|
1302
|
+
----------
|
|
1303
|
+
x: float
|
|
1304
|
+
Mole ratio of Al, as in: Al(x) Ga(1-x) In(1-x-y) As. Also varies In slightly for lattice-matching.
|
|
1305
|
+
|
|
1306
|
+
wl: float
|
|
1307
|
+
wavelength in microns.
|
|
1308
|
+
|
|
1309
|
+
Returns
|
|
1310
|
+
-------
|
|
1311
|
+
Refractive index [float]
|
|
1312
|
+
|
|
1313
|
+
Raises
|
|
1314
|
+
------
|
|
1315
|
+
Warning for wavelength out of model range
|
|
1316
|
+
|
|
1317
|
+
"""
|
|
1318
|
+
check_wl(wl, 0.900, 2.10, "AlInGaAs")
|
|
1319
|
+
|
|
1320
|
+
xmin = 0.3
|
|
1321
|
+
xmax = 1.0
|
|
1322
|
+
if (x < xmin) or (x > xmax):
|
|
1323
|
+
ErrStr = (
|
|
1324
|
+
"AlInGaAs(): Mole Ratio outside of model range (%f-%f um)." % (xmin, xmax)
|
|
1325
|
+
+ " Refractive Index value may not be accurate."
|
|
1326
|
+
)
|
|
1327
|
+
warnings.warn(ErrStr)
|
|
1328
|
+
|
|
1329
|
+
A = 9.689 - 1.012 * x # These params are in nanometers - must convert `wl`
|
|
1330
|
+
B = 1.590 - 0.376 * x
|
|
1331
|
+
C = 1102.4 - 702.0 * x + 330.4 * x**2
|
|
1332
|
+
return sellmeier1((A, B, C), wl * 1e3)
|
|
1333
|
+
|
|
1334
|
+
|
|
1335
|
+
##############################################
|
|
1336
|
+
## Dielectrics ##
|
|
1337
|
+
##############################################
|
|
1338
|
+
# J.A. Woolam: Thermally-oxidized Silicon (Thermal SiO2)
|
|
1339
|
+
JAW_ThermalSiO2 = lambda wl: sellmeier([1.3000, 0.81996, 0.10396, 0.01082], wl)
|
|
1340
|
+
JAW_ThermalSiO2.__doc__ = """SiO2, fused Silica (300-1200nm)
|
|
1341
|
+
C. M. Herzinger, B. Johs, W. A. McGahan, J. A. Woollam, and W. Paulson, "Ellipsometric determination of optical constants for silicon and thermally grown silicon dioxide via a multi-sample, multi-wavelength, multi-angle investigation", JAP, vol. 83, no. 6, pp. 3323-3336, 1998."""
|
|
1342
|
+
|
|
1343
|
+
FusedSiO2 = lambda wl: lorentzian(
|
|
1344
|
+
[1.45659, -8.07311e-6, 1.46187e-1, 2.12786e2, 1.05781e2], wl
|
|
1345
|
+
)
|
|
1346
|
+
FusedSiO2.__doc__ = (
|
|
1347
|
+
"Fused silica, values obtained from luxpop.com. Fit for 300-1200. RMS error: 2E-5"
|
|
1348
|
+
)
|
|
1349
|
+
|
|
1350
|
+
|
|
1351
|
+
## Ion-Beam Sputtered films (~350-2000nm)
|
|
1352
|
+
IBD_Ta2O5_DJ2007 = lambda wl: cauchy([2.1123, 0.018901, -0.016222], wl)
|
|
1353
|
+
IBD_Ta2O5_DJ2007.__doc__ = "Ion-Beam SPutter Dep'd Ta2O5 from 2007: A=2.1123 B=0.018901 C=-0.016222 n(1550nm) = 2.1123 dep.rate = 326.586 nm/2631.579 sec"
|
|
1354
|
+
IBD_SiO2_DJ2011 = lambda wl: cauchy([1.479, 0.00472, 1.3305e-5], wl)
|
|
1355
|
+
IBD_SiO2_DJ2011.__doc__ = "Ion-Beam Sputter Dep'd SiO2 from 2011"
|
|
1356
|
+
|
|
1357
|
+
IBD_SiN_DJ2010 = lambda wl: cauchy([2.003, 0.01954, 3.0014e-4], wl)
|
|
1358
|
+
IBD_SiN_DJ2010.__doc__ = "Ion-Beam Sputter Dep'd SiN 12/1/2010: A=2.003 // B=0.01954 // C=3.0014e-4 (0.776233 Ang/sec)"
|
|
1359
|
+
|
|
1360
|
+
|
|
1361
|
+
# PECVD Films
|
|
1362
|
+
PECVD_SiN = lambda wl: cauchy([1.818, 0.05071, -9.2297e-4], wl) # recipe:"Nitride2"
|
|
1363
|
+
PECVD_SiO = lambda wl: cauchy([1.469, 0.00508, -5.399e-5], wl) # recipe: "Oxide (HF)"
|
|
1364
|
+
|
|
1365
|
+
|
|
1366
|
+
def NbO(wl):
|
|
1367
|
+
"""
|
|
1368
|
+
Calculate refractive index of NbO at specified wavelength
|
|
1369
|
+
Valid from from 0.295 - 2.5 um
|
|
1370
|
+
|
|
1371
|
+
http://refractiveindex.info/?shelf=main&book=Nb2O5&page=Lemarchand
|
|
1372
|
+
|
|
1373
|
+
F. Lemarchand, private communications (2013). Measurement method described in:
|
|
1374
|
+
L. Gao, F. Lemarchand, and M. Lequime. Exploitation of multiple incidences spectrometric measurements for thin film reverse engineering, Opt. Express 20, 15734-15751 (2012)
|
|
1375
|
+
|
|
1376
|
+
Downloaded the data, and then performed a 3-param Cauchy fit.
|
|
1377
|
+
|
|
1378
|
+
|
|
1379
|
+
Args:
|
|
1380
|
+
wl: wavelength in microns (float)
|
|
1381
|
+
Returns:
|
|
1382
|
+
Refractive index (float)
|
|
1383
|
+
Raises:
|
|
1384
|
+
Warning for wavelength out of model range
|
|
1385
|
+
|
|
1386
|
+
"""
|
|
1387
|
+
check_wl(wl, 0.295, 2.50, "NbO")
|
|
1388
|
+
return cauchy((2.22686, 0.0214034, 0.00536459), wl)
|
|
1389
|
+
|
|
1390
|
+
|
|
1391
|
+
# end def(NbO)
|
|
1392
|
+
|
|
1393
|
+
|
|
1394
|
+
def a_Si(wl):
|
|
1395
|
+
"""
|
|
1396
|
+
Return refractive index for amorphous Silicon, E-Beam deposited (E-6 Torr).
|
|
1397
|
+
Measured by Shamsul Arafin's a-Si in mid-IR.
|
|
1398
|
+
|
|
1399
|
+
Valid from 2.254-4.959um (0.250-0.550eV)
|
|
1400
|
+
|
|
1401
|
+
S. Arafin, "Electrically-Pumped GaSb-Based Vertical-Cavity Surface-Emitting Lasers," 2015.
|
|
1402
|
+
Figure 5.5
|
|
1403
|
+
|
|
1404
|
+
Sellmeier: n^2 = A + (B * •^2 ) / (•^2 - C^2)
|
|
1405
|
+
A = 8.707
|
|
1406
|
+
B = 3.21466
|
|
1407
|
+
C = 0.44105
|
|
1408
|
+
|
|
1409
|
+
Parameters
|
|
1410
|
+
----------
|
|
1411
|
+
wl: wavelength in microns (float)
|
|
1412
|
+
|
|
1413
|
+
Returns
|
|
1414
|
+
-------
|
|
1415
|
+
Refractive index (float)
|
|
1416
|
+
|
|
1417
|
+
Raises
|
|
1418
|
+
------
|
|
1419
|
+
Warning for wavelength out of model range
|
|
1420
|
+
|
|
1421
|
+
"""
|
|
1422
|
+
check_wl(wl, 2.254, 4.959, "a_Si")
|
|
1423
|
+
return sellmeier1([8.707, 3.21466, 0.44105], wl)
|
|
1424
|
+
|
|
1425
|
+
|
|
1426
|
+
# end a_Si
|
|
1427
|
+
|
|
1428
|
+
|
|
1429
|
+
####################
|
|
1430
|
+
## Film aliases ##
|
|
1431
|
+
####################
|
|
1432
|
+
|
|
1433
|
+
SiO = JAW_ThermalSiO2
|
|
1434
|
+
SiN = PECVD_SiN
|
|
1435
|
+
|
|
1436
|
+
|
|
1437
|
+
############################
|
|
1438
|
+
## Internal Funcs ###
|
|
1439
|
+
############################
|
|
1440
|
+
|
|
1441
|
+
|
|
1442
|
+
def check_wl(wl, wl_low, wl_hi, func_name, fail=False):
|
|
1443
|
+
"""Raise a warning if the specified wavelength is out of range.
|
|
1444
|
+
|
|
1445
|
+
Parameters
|
|
1446
|
+
----------
|
|
1447
|
+
wl: (float or array) the wavelength to check
|
|
1448
|
+
wl_low: (float) minimum wavelength
|
|
1449
|
+
wl_hi: (float) maximum wavelength
|
|
1450
|
+
func_name: (str) name of the function being called - will be inserted into Warning message.
|
|
1451
|
+
fail : {Ture | False}, optional. If True, raise a ValueError exception instead of just a warning.
|
|
1452
|
+
"""
|
|
1453
|
+
wlmin = wl_low
|
|
1454
|
+
wlmax = wl_hi
|
|
1455
|
+
if np.any(wl < wlmin) or np.any(wl > wlmax):
|
|
1456
|
+
ErrStr = (
|
|
1457
|
+
str(func_name)
|
|
1458
|
+
+ "(): Wavelength (%s um) outside of model range (%f-%f um)."
|
|
1459
|
+
% (wl, wlmin, wlmax)
|
|
1460
|
+
+ " Refractive Index value may not be accurate."
|
|
1461
|
+
)
|
|
1462
|
+
if fail:
|
|
1463
|
+
raise ValueError(ErrStr)
|
|
1464
|
+
else:
|
|
1465
|
+
warnings.warn(ErrStr)
|
|
1466
|
+
|
|
1467
|
+
|
|
1468
|
+
# end check_wl()
|