Commit 18d29aae authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

structures corrigées, interaction matlab ajoutée

parent ec11f081
......@@ -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=True, grading_type='none', mqw_alloy_type='none',
sl = st.structure_eam_vcsel(bypass_dbr=bypass_dbr, vcsel_only=False, eam_only=False, 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=True, 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=False, 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)
......
......@@ -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=True, bypass_dbr=False, wavelength=850e-9):
l_eam_clad = 15e-9
def structure_for_matlab(vcsel_only=False, bypass_dbr=False, wavelength=850e-9):
l_eam_clad = 8e-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)
......
......@@ -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)
......
......@@ -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_cladding=True,
previous_structure_is_vcsel_cavity=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_cladding:
elif previous_structure_is_vcsel_cavity:
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)
......
......@@ -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=True, grading_type='none', mqw_alloy_type='none',
l_eam_clad=15e-9, l_vcsel_clad=15e-9)
vcsel_eam = st.structure_eam_vcsel(bypass_dbr=False, vcsel_only=False, grading_type='mean', mqw_alloy_type='none',
l_eam_clad=10e-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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment