Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Lucas Laplanche
EAM VCSEL
Commits
18d29aae
Commit
18d29aae
authored
Jun 09, 2021
by
Lucas Laplanche
Browse files
structures corrigées, interaction matlab ajoutée
parent
ec11f081
Changes
5
Hide whitespace changes
Inline
Side-by-side
calculation.py
View file @
18d29aae
...
...
@@ -18,11 +18,21 @@ import vertex_70 as vtx
def
refra_doping
(
bypass_dbr
=
True
,
electric_field
=
0.
,
wavelength
=
850e-9
):
sl
=
st
.
structure_eam_vcsel
(
eam_only
=
True
,
bypass_dbr
=
bypass_dbr
)
sl
=
op
.
algaas_super_lattice_refractive_index
(
sl
,
electric_field
,
wavelength
)
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
False
,
grading_type
=
'none'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
15e-9
,
l_vcsel_clad
=
15e-9
)
sl
=
op
.
algaas_super_lattice_refractive_index
(
sl
,
electric_field
,
wavelength
,
lengyel
=
True
)
plt
.
plot_refra_doping
(
sl
)
def
refra
(
bypass_dbr
=
False
,
electric_field
=
0.
,
wavelength
=
850e-9
):
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
False
,
eam_only
=
True
,
grading_type
=
'mean'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
15e-9
,
l_vcsel_clad
=
15e-9
)
sl
=
op
.
algaas_super_lattice_refractive_index
(
sl
,
electric_field
,
wavelength
,
lengyel
=
True
)
plt
.
plot_refra
(
sl
)
def
dbr_refra_doping
(
electric_field
=
0.
,
wavelength
=
850e-9
):
sl
=
pd
.
DataFrame
(
columns
=
[
'name'
,
'thickness'
,
'al'
,
'na'
,
'nd'
,
'refractive_index'
,
'ga6'
,
'ga11'
,
'al5'
,
'al12'
])
...
...
@@ -69,7 +79,7 @@ def reflectivity(bypass_dbr=False,
# wavelength in [m]
# wavelength must be a numpy array
for
i
in
tqdm
(
range
(
len
(
wavelength
))):
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
Tru
e
,
grading_type
=
'
none
'
,
mqw_alloy_type
=
'none'
,
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
False
,
eam_only
=
Fals
e
,
grading_type
=
'
mean
'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
l_eam_clad
,
l_vcsel_clad
=
l_vcsel_clad
)
sl
=
op
.
algaas_super_lattice_refractive_index
(
sl
,
electric_field
,
wavelength
[
i
],
lengyel
=
True
)
...
...
@@ -142,7 +152,7 @@ def reflectivity_heatmap(bypass_dbr=True,
def
electromagnetic_amplitude
(
bypass_dbr
=
False
,
electric_field
=
0.
,
wavelength
=
850e-9
,
algo
=
'transmission'
):
l_eam_clad
=
15e-9
l_vcsel_clad
=
15e-9
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
Tru
e
,
grading_type
=
'none'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
l_eam_clad
,
l_vcsel_clad
=
l_vcsel_clad
)
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
Fals
e
,
grading_type
=
'none'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
l_eam_clad
,
l_vcsel_clad
=
l_vcsel_clad
)
sl
=
op
.
algaas_super_lattice_refractive_index
(
sl
,
electric_field
,
wavelength
)
sl
=
pt
.
cut_in_equal_layers_thickness
(
sl
,
1e-8
)
...
...
macro.py
View file @
18d29aae
...
...
@@ -46,10 +46,10 @@ def reflectivity_eam_vcsel_clad_heatmap():
plt
.
plot_std_heatmap
(
l_eam_clad
,
l_vcsel_clad
,
r
)
def
structure_for_matlab
(
vcsel_only
=
Tru
e
,
bypass_dbr
=
False
,
wavelength
=
850e-9
):
l_eam_clad
=
15
e-9
def
structure_for_matlab
(
vcsel_only
=
Fals
e
,
bypass_dbr
=
False
,
wavelength
=
850e-9
):
l_eam_clad
=
8
e-9
l_vcsel_clad
=
15e-9
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
vcsel_only
,
grading_type
=
'
none
'
,
mqw_alloy_type
=
'none'
,
sl
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
bypass_dbr
,
vcsel_only
=
vcsel_only
,
grading_type
=
'
mean
'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
l_eam_clad
,
l_vcsel_clad
=
l_vcsel_clad
)
sl
=
op
.
algaas_super_lattice_refractive_index
(
sl
,
0.
,
wavelength
)
...
...
plot.py
View file @
18d29aae
...
...
@@ -153,6 +153,73 @@ def plot_refra_doping(sl):
fig
.
show
()
def
plot_refra
(
sl
):
# remove the substrate layer
sl
=
sl
.
drop
(
sl
.
shape
[
0
]
-
1
,
axis
=
0
)
# check wether the depth column exist
if
not
'depth'
in
sl
:
sl
.
insert
(
sl
.
shape
[
1
],
'depth'
,
value
=
np
.
nan
)
# duplicate each layer with a 0 thickness layer
# in order to have two points for each layer
# at the start and the end of each layer
for
i
in
range
(
sl
.
shape
[
0
]):
j
=
2
*
i
row_to_insert
=
sl
.
loc
[
j
]
row_to_insert
[
'thickness'
]
=
0.
sl
=
pt
.
insert_row
(
j
,
sl
,
row_to_insert
)
# calculate the depth of every layer
for
i
in
range
(
sl
.
shape
[
0
]):
sl
.
at
[
i
,
'depth'
]
=
sl
.
loc
[
0
:
i
,
'thickness'
].
sum
()
# create a figure
fig
=
go
.
Figure
()
# add the traces
fig
.
add_trace
(
go
.
Scatter
(
x
=
sl
[
'depth'
],
y
=
sl
[
'refractive_index'
].
apply
(
np
.
real
),
name
=
'refractive index'
))
# create axis objects
fig
.
update_layout
(
xaxis
=
dict
(
title
=
'depth [m]'
),
yaxis
=
dict
(
title
=
'refractive index'
,
titlefont
=
dict
(
color
=
'#1f77b4'
),
tickfont
=
dict
(
color
=
'#1f77b4'
)
),
)
# update layout properties
fig
.
update_layout
(
title_text
=
'refractive index along z axis'
,
width
=
1600
,
)
# show the figure
fig
.
show
()
def
plot_al_doping
(
sl
):
# remove the substrate layer
sl
=
sl
.
drop
(
sl
.
shape
[
0
]
-
1
,
axis
=
0
)
...
...
super_lattice_structure.py
View file @
18d29aae
...
...
@@ -10,7 +10,7 @@ import pandas_tools as pdt
def
structure_eam_vcsel
(
vcsel_only
=
False
,
#
eam_only = False,
eam_only
=
False
,
#eam_mqw_only = False,
air
=
True
,
...
...
@@ -71,18 +71,18 @@ def structure_eam_vcsel(vcsel_only = False,
vcsel_mqw
=
True
bot_vcsel_dbr
=
True
substrate
=
True
#
elif eam_only:
#
air = True
#
top_contact = True
#
top_eam_dbr = True
#
eam_mqw = True
#
bot_eam_dbr = True
#
middle_contact = True
#
shared_dbr = True
#
alox = False
#
vcsel_mqw = False
#
bot_vcsel_dbr = False
#
substrate = True
elif
eam_only
:
air
=
True
top_contact
=
True
top_eam_dbr
=
True
eam_mqw
=
True
bot_eam_dbr
=
True
middle_contact
=
True
shared_dbr
=
True
alox
=
False
vcsel_mqw
=
False
bot_vcsel_dbr
=
False
substrate
=
True
#elif eam_mqw_only:
# air = False
# top_contact = False
...
...
@@ -122,8 +122,7 @@ def structure_eam_vcsel(vcsel_only = False,
grading_type
=
grading_type
,
grading_width
=
grading_width
,
grading_period
=
grading_period
,
previous_structure_is_top_contact
=
True
,
next_structure_is_cladding
=
True
,
next_structure_is_eam_cladding
=
True
,
v_ga6
=
v_ga6
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
,
...
...
@@ -162,8 +161,8 @@ def structure_eam_vcsel(vcsel_only = False,
grading_type
=
grading_type
,
grading_width
=
grading_width
,
grading_period
=
grading_period
,
previous_structure_is_cladding
=
True
,
next_structure_is_contact
=
True
,
previous_structure_is_
eam_
cladding
=
True
,
next_structure_is_
mid_
contact
=
True
,
v_ga6
=
v_ga6
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
,
...
...
@@ -195,30 +194,18 @@ def structure_eam_vcsel(vcsel_only = False,
# shared distributed Bragg reflector
if
shared_dbr
:
if
alox
:
dbr
=
structure_dbr
(
period
=
shared_dbr_period
,
na
=
2e18
,
grading_type
=
grading_type
,
grading_width
=
grading_width
,
grading_period
=
grading_period
,
next_structure_is_alox
=
True
,
v_ga6
=
v_ga6
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
,
v_al12
=
v_al12
)
sl
=
sl
.
append
(
dbr
,
ignore_index
=
True
)
else
:
dbr
=
structure_dbr
(
period
=
shared_dbr_period
,
na
=
2e18
,
grading_type
=
grading_type
,
grading_width
=
grading_width
,
grading_period
=
grading_period
,
next_structure_is_contact
=
True
,
v_ga6
=
v_ga6
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
,
v_al12
=
v_al12
)
sl
=
sl
.
append
(
dbr
,
ignore_index
=
True
)
dbr
=
structure_dbr
(
period
=
shared_dbr_period
,
na
=
2e18
,
grading_type
=
grading_type
,
grading_width
=
grading_width
,
grading_period
=
grading_period
,
eam_only
=
eam_only
,
next_structure_is_alox
=
True
,
v_ga6
=
v_ga6
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
,
v_al12
=
v_al12
)
sl
=
sl
.
append
(
dbr
,
ignore_index
=
True
)
# aluminium oxide aperture
...
...
@@ -262,7 +249,7 @@ def structure_eam_vcsel(vcsel_only = False,
grading_type
=
grading_type
,
grading_width
=
grading_width
,
grading_period
=
grading_period
,
previous_structure_is_vcsel_c
ladding
=
True
,
previous_structure_is_vcsel_c
avity
=
True
,
v_ga6
=
v_ga6
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
,
...
...
@@ -364,14 +351,14 @@ def structure_dbr(period = 6,
grading_type
=
'none'
,
grading_width
=
20e-9
,
grading_period
=
10
,
previous_structure_is_cladding
=
False
,
next_structure_is_cladding
=
False
,
previous_structure_is_
eam_
cladding
=
False
,
next_structure_is_
eam_
cladding
=
False
,
previous_structure_is_top_contact
=
False
,
previous_structure_is_vcsel_cladding
=
False
,
next_structure_is_vcsel_cladding
=
False
,
next_structure_is_contact
=
False
,
previous_structure_is_vcsel_cavity
=
False
,
next_structure_is_mid_contact
=
False
,
next_structure_is_dbr
=
False
,
next_structure_is_alox
=
False
,
eam_only
=
False
,
l_dbr_low_al
=
L_15_AL_DBR
,
l_dbr_high_al
=
L_90_AL_DBR
,
v_ga6
=
100
,
...
...
@@ -415,7 +402,7 @@ def structure_dbr(period = 6,
grading_width
=
linear_grading_low_to_high_al
[
'thickness'
].
sum
()
# dbr layers
if
'linear'
in
grading_type
:
if
'linear'
or
'mean'
in
grading_type
:
low_al_layer
=
pd
.
DataFrame
([[
'dbr '
+
doping_type
+
' low Al ~ 15%'
,
l_dbr_low_al
-
grading_width
,
low_al
,
na
,
nd
,
False
,
True
,
False
,
True
]],
columns
=
[
'name'
,
'thickness'
,
'al'
,
'na'
,
'nd'
,
'ga6'
,
'ga11'
,
'al5'
,
'al12'
])
high_al_layer
=
pd
.
DataFrame
([[
'dbr '
+
doping_type
+
' high Al ~ 90%'
,
l_dbr_high_al
-
grading_width
,
high_al
,
na
,
nd
,
True
,
False
,
True
,
False
]],
...
...
@@ -435,14 +422,14 @@ def structure_dbr(period = 6,
# dbr
if
'linear'
in
grading_type
:
if
'linear'
or
'mean'
in
grading_type
:
# beginning
if
previous_structure_is_top_contact
:
sl
=
sl
.
append
(
linear_grading_low_to_high_al
,
ignore_index
=
True
)
sl
=
sl
.
append
(
high_al_three_half_grading
,
ignore_index
=
True
)
elif
previous_structure_is_cladding
:
elif
previous_structure_is_
eam_
cladding
:
sl
=
sl
.
append
(
high_al_one_side_grading
,
ignore_index
=
True
)
elif
previous_structure_is_vcsel_c
ladding
:
elif
previous_structure_is_vcsel_c
avity
:
sl
=
sl
.
append
(
high_al_layer
,
ignore_index
=
True
)
else
:
sl
=
sl
.
append
(
linear_grading_low_to_high_al
,
ignore_index
=
True
)
...
...
@@ -461,21 +448,24 @@ def structure_dbr(period = 6,
sl
=
sl
.
append
(
linear_grading_low_to_high_al
,
ignore_index
=
True
)
# ending
if
next_structure_is_contact
:
if
next_structure_is_
mid_
contact
:
sl
=
sl
.
append
(
high_al_layer
,
ignore_index
=
True
)
sl
=
sl
.
append
(
linear_grading_high_to_low_al
,
ignore_index
=
True
)
elif
next_structure_is_cladding
:
elif
next_structure_is_
eam_
cladding
:
sl
=
sl
.
append
(
high_al_one_side_grading
,
ignore_index
=
True
)
elif
next_structure_is_dbr
:
sl
=
sl
.
append
(
high_al_layer
,
ignore_index
=
True
)
sl
=
sl
.
append
(
linear_grading_high_to_low_al
,
ignore_index
=
True
)
sl
=
sl
.
append
(
low_al_layer
,
ignore_index
=
True
)
elif
next_structure_is_vcsel_cladding
:
sl
=
sl
.
append
(
high_al_layer
,
ignore_index
=
True
)
elif
next_structure_is_alox
:
pass
if
eam_only
:
if
'digital'
in
grading_type
:
sl
.
drop
(
sl
.
tail
(
grading_period
).
index
,
inplace
=
True
)
else
:
sl
.
drop
(
sl
.
tail
(
int
(
grading_period
/
2.
)).
index
,
inplace
=
True
)
else
:
sl
=
sl
.
append
(
high_al_
three_half_grading
,
ignore_index
=
True
)
sl
=
sl
.
append
(
high_al_
layer
,
ignore_index
=
True
)
sl
=
sl
.
append
(
linear_grading_high_to_low_al
,
ignore_index
=
True
)
elif
next_structure_is_alox
:
...
...
@@ -557,10 +547,11 @@ def structure_linear_grading(grading_type = 'linear digital',
columns
=
[
'name'
,
'thickness'
,
'al'
,
'na'
,
'nd'
,
'ga6'
,
'ga11'
,
'al5'
,
'al12'
]),
ignore_index
=
True
)
elif
'mean'
in
grading_type
:
al_content
=
(
low_al
+
high_al
)
/
2.
al_content
=
(
low_al
+
high_al
)
/
2.
# [1]
grading_width
=
grading_width
/
period
# [m]
sl
=
sl
.
append
(
pd
.
DataFrame
([[
'dbr '
+
doping_type
+
' linear slope grading'
,
grading_width
,
al_content
,
na
,
nd
,
False
,
False
,
False
,
False
]],
for
i
in
range
(
period
):
sl
=
sl
.
append
(
pd
.
DataFrame
([[
'dbr '
+
doping_type
+
' linear slope grading'
,
grading_width
,
al_content
,
na
,
nd
,
False
,
False
,
False
,
False
]],
columns
=
[
'name'
,
'thickness'
,
'al'
,
'na'
,
'nd'
,
'ga6'
,
'ga11'
,
'al5'
,
'al12'
]),
ignore_index
=
True
)
else
:
...
...
@@ -598,6 +589,11 @@ def structure_middle_contact(bypass_dbr = False,
high_al
=
v_al5
/
(
v_al5
+
v_ga6
)
# [1] 90% Al si tout va bien
# grading definition
linear_grading_low_to_high_al
=
structure_linear_grading
(
grading_type
=
grading_type
,
grading_width
=
grading_width
,
period
=
grading_period
,
v_ga11
=
v_ga11
,
v_al5
=
v_al5
)
linear_grading_high_to_low_al
=
structure_linear_grading
(
grading_type
=
grading_type
,
grading_width
=
grading_width
,
period
=
grading_period
,
...
...
@@ -606,6 +602,8 @@ def structure_middle_contact(bypass_dbr = False,
if
'linear'
in
grading_type
:
grading_width
=
linear_grading_high_to_low_al
[
'thickness'
].
sum
()
elif
'mean'
in
grading_type
:
pass
else
:
grading_width
=
0.
...
...
@@ -616,7 +614,7 @@ def structure_middle_contact(bypass_dbr = False,
columns
=
[
'name'
,
'thickness'
,
'al'
,
'na'
,
'nd'
,
'ga6'
,
'ga11'
,
'al5'
,
'al12'
]),
ignore_index
=
True
)
if
grading_type
==
'linear'
:
if
'linear'
in
grading_type
:
sl
=
sl
.
append
(
linear_grading_high_to_low_al
,
ignore_index
=
True
)
sl
=
sl
.
append
(
pd
.
DataFrame
([[
'middle contact'
,
l_low_al
-
grading_width
*
3
/
4
,
low_al
,
5e18
,
0.
,
False
,
True
,
False
,
True
]],
...
...
@@ -630,7 +628,7 @@ def structure_middle_contact(bypass_dbr = False,
# normal contact
else
:
if
'linear'
in
grading_type
:
if
'linear'
or
'mean'
in
grading_type
:
if
vcsel_only
:
if
'digital'
in
grading_type
:
sl
=
sl
.
append
(
linear_grading_high_to_low_al
[
grading_period
-
1
:
2
*
grading_period
-
1
],
ignore_index
=
True
)
...
...
xlsx_export.py
View file @
18d29aae
...
...
@@ -76,8 +76,8 @@ def eam_structures_description(document_folder=True):
def
vcsel_eam_structures_description
(
document_folder
=
False
):
# create the structures
vcsel_eam
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
False
,
vcsel_only
=
Tru
e
,
grading_type
=
'
none
'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
1
5
e-9
,
l_vcsel_clad
=
15e-9
)
vcsel_eam
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
False
,
vcsel_only
=
Fals
e
,
grading_type
=
'
mean
'
,
mqw_alloy_type
=
'none'
,
l_eam_clad
=
1
0
e-9
,
l_vcsel_clad
=
15e-9
)
vcsel_eam_dbr_bypass
=
st
.
structure_eam_vcsel
(
bypass_dbr
=
True
,
grading_type
=
'none'
,
mqw_alloy_type
=
'none'
)
# structures list
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment