Commit 3a9fd56f authored by Lucas Laplanche's avatar Lucas Laplanche
Browse files

ajout structure vcsel-eam

parent 7b8713a6
OBJECTIFS
Faire la structure en python. (reste les claddings du vcsel)
Calculer pour plusieurs épaisseurs de cladding ( cladding du vcsel? dj7?) l'amplitude du champ électromagnétique et comparer avec la publication de Krassimir.
Présenter à Ghuillem et CHristophe le résultat.
Traiter les courbes mesurées de la refléctivité temporelle.
Les comparer aux calculs théoriques.
Calculer la réflectivité temporelle des deux structures totales.
Planifier les épitaxies des deux vcsels eam, et du substrat nid pour les tlms.
Faire l'épitaxie.
Faire la présentation pour la réunion.
QUESTIONS
Concernant le couplage vcsel et modulateur, est-ce que seul le cladding des puits quantiques (du vcsel et/ou du modulateur) on une influence?
Si oui alors modifier l'épaisseur des puits et des barrières de confinement n'a pas d'influence.
Je remarque que Krassimir et Ludovic on mis un grading autour de la cavité du vcsel, ne devrais-je pas faire de même avec l'EAM?
Est-ce que c'est ok si je remplace le grading du vcsel par mon grading de 90nm? (90 nm de 0% à 100%)?
La couche AlOx a soit-disant 98% d'aluminium, comment la fabrique-t-on? Dois-je considérer dans les calculs qu'elle fait 90%, 98%, 100%?
PRESENTATION
Rappel des faits.
Matrices de diffusions.
Reflectivités temporelles.
FTIR EAM.
AFM EAM.
Caractérisations de l'AC450CT.
TLM si terminées.
......@@ -155,8 +155,210 @@ def structure_eam(air = True,
def structure_eam_vcsel(air = True,
eam_mqw = True,
vcsel_mqw = True,
top_eam_dbr = True,
bot_eam_dbr = True,
shared_dbr = True,
bot_vcsel_dbr = True,
bypass_dbr = False,
contact = True,
alox = True,
substrate = True,
amount_eam_qw = 25,
amount_vcsel_qw = 2,
l_qw = 8.27e-9,
l_cb_low_al = 2.2e-9,
l_cb_high_al = 0.3e-9,
l_clad_low_al = 2.2e-9,
l_clad_high_al = 0.3e-9,
top_eam_dbr_period = 6,
bot_eam_dbr_period = 8,
shared_dbr_period = 12,
bot_vcsel_period = 35,
grading_type = 'linear',
grading_width = 20e-9,
grading_period = 10,
v_ga6 = 100,
v_ga11 = 850,
v_al5 = 900,
v_al12 = 150):
# times are in [s]
# speeds are in [nm/h]
# super lattice
sl = pd.DataFrame(columns = ['name', 'thickness', 'al', 'na', 'nd', 'refractive_index', 'ga6', 'ga11', 'al5', 'al12'])
# air
if air:
sl = sl.append(pd.DataFrame([['air', 100e-9, 0., 0., 0., False, False, False, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
# top contact
if contact:
sl = sl.append(pd.DataFrame([['top contact', 50e-9, 0., 0., 5e18, False, True, False, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
# top distributed Bragg reflector
if top_eam_dbr:
dbr = structure_dbr(period = top_eam_dbr_period,
nd = 2e18,
grading = grading_type,
grading_width = grading_width,
grading_period = grading_period,
previous_structure_is_top_contact = True,
next_structure_is_cladding = True,
v_ga6 = v_ga6,
v_ga11 = v_ga11,
v_al5 = v_al5,
v_al12 = v_al12)
sl = sl.append(dbr, ignore_index=True)
# eam mqw
if eam_mqw:
mqw = structure_mqw(amount_qw = amount_eam_qw,
l_qw = l_qw,
l_cb_low_al = l_cb_low_al,
l_cb_high_al = l_cb_high_al,
l_clad_low_al = l_clad_low_al,
l_clad_high_al = l_clad_high_al,
bypass_dbr = bypass_dbr,
v_ga6 = v_ga6,
v_ga11 = v_ga11,
v_al12 = v_al12)
sl = sl.append(mqw, ignore_index = True)
# middle contact
if contact & bypass_dbr:
middle_contact, previous_layer_is_dbr = structure_middle_contact(bypass_dbr = bypass_dbr,
grading_type = grading_type,
grading_width = grading_width,
grading_period = grading_period)
sl = sl.append(middle_contact, ignore_index=True)
# bottom distributed Bragg reflector
if bot_eam_dbr & (not bypass_dbr):
dbr = structure_dbr(period = bot_eam_dbr_period,
na = 2e18,
grading = grading_type,
grading_width = grading_width,
grading_period = grading_period,
previous_structure_is_cladding = True,
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)
elif bot_eam_dbr & bypass_dbr:
dbr = structure_dbr(period = bot_eam_dbr_period,
na = 2e18,
grading = grading_type,
grading_width = grading_width,
grading_period = grading_period,
next_structure_is_dbr = True,
v_ga6 = v_ga6,
v_ga11 = v_ga11,
v_al5 = v_al5,
v_al12 = v_al12)
sl = sl.append(dbr, ignore_index=True)
# middle contact
if contact & (not bypass_dbr):
middle_contact, previous_layer_is_dbr = structure_middle_contact(bypass_dbr = bypass_dbr,
grading_type = grading_type,
grading_width = grading_width,
grading_period = grading_period)
sl = sl.append(middle_contact, ignore_index=True)
# shared distributed Bragg reflector
if shared_dbr:
dbr = structure_dbr(period = shared_dbr_period,
na = 2e18,
grading = grading_type,
grading_width = grading_width,
grading_period = grading_period,
next_structure_is_vcsel_cladding = 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
if alox:
alox_layers = structure_alox()
sl = sl.append(alox_layers, ignore_index=True)
# vcsel mqw
if vcsel_mqw:
linear_grading_low_to_high_al = structure_linear_grading(grading_width=90e-9,
period=40,
na=0.,
nd=0.,
v_ga11=v_ga11,
v_al5=v_al5)
linear_grading_high_to_low_al = linear_grading_low_to_high_al[::-1].copy()
mqw = structure_mqw(amount_qw=amount_vcsel_qw,
vcsel=True,
l_qw=l_qw,
l_cb_low_al=l_cb_low_al,
l_cb_high_al=l_cb_high_al,
l_clad_low_al=l_clad_low_al,
l_clad_high_al=l_clad_high_al,
v_ga6=v_ga6,
v_ga11=v_ga11,
v_al12=v_al12)
sl = sl.append(linear_grading_high_to_low_al, ignore_index=True)
sl = sl.append(mqw, ignore_index=True)
sl = sl.append(linear_grading_low_to_high_al, ignore_index=True)
# bottom distributed Bragg reflector
if bot_vcsel_dbr:
dbr = structure_dbr(period=bot_vcsel_period,
na=0.,
nd=2e18,
grading=grading_type,
grading_width=grading_width,
grading_period=grading_period,
previous_structure_is_vcsel_cladding=True,
v_ga6=v_ga6,
v_ga11=v_ga11,
v_al5=v_al5,
v_al12=v_al12)
sl = sl.append(dbr, ignore_index=True)
# substrate
if substrate:
sl = sl.append(pd.DataFrame([['substrate', 600e-6, 0., 0., 0., False, False, False, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
return sl
def structure_mqw(amount_qw = 25,
bypass_dbr = True,
vcsel=False,
l_qw = 8.27e-9,
l_cb_low_al = 2.2e-9,
l_cb_high_al = 0.3e-9,
......@@ -176,10 +378,16 @@ def structure_mqw(amount_qw = 25,
# structure properties
if bypass_dbr:
amount_clad = 1
if vcsel:
if bypass_dbr:
amount_clad = 1
else:
amount_clad = 1
else:
amount_clad = 1
if bypass_dbr:
amount_clad = 1
else:
amount_clad = 1
l_qw = true_epitaxy_thickness(l_qw, v_ga6, ga6=True)
l_cb_low_al = true_epitaxy_thickness(l_cb_low_al, v_ga11 +v_al12, ga11=True, al12=True)
......@@ -248,6 +456,8 @@ def structure_dbr(period = 6,
previous_structure_is_cladding = False,
next_structure_is_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,
next_structure_is_dbr = False,
l_dbr_low_al = 61.3e-9,
......@@ -283,13 +493,12 @@ def structure_dbr(period = 6,
# grading definition
linear_grading_low_to_high_al = structure_linear_grading(grading_width = grading_width,
period = grading_period,
low_al = low_al,
high_al = high_al,
na = na,
nd = nd,
v_ga11 = v_ga11,
v_al5 = v_al5)
linear_grading_high_to_low_al = linear_grading_low_to_high_al[::-1].copy()
# not sure if needed
grading_width = linear_grading_low_to_high_al['thickness'].sum()
# dbr layers
......@@ -320,6 +529,8 @@ def structure_dbr(period = 6,
sl = sl.append(high_al_three_half_grading, ignore_index=True)
elif previous_structure_is_cladding:
sl = sl.append(high_al_one_side_grading, ignore_index=True)
elif previous_structure_is_vcsel_cladding:
sl = sl.append(high_al_layer, ignore_index=True)
else:
sl = sl.append(linear_grading_low_to_high_al, ignore_index=True)
sl = sl.append(high_al_layer, ignore_index=True)
......@@ -346,6 +557,8 @@ def structure_dbr(period = 6,
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)
else:
sl = sl.append(high_al_three_half_grading, ignore_index=True)
sl = sl.append(linear_grading_high_to_low_al, ignore_index=True)
......@@ -365,13 +578,13 @@ def structure_dbr(period = 6,
def structure_linear_grading(grading_width = 20e-9,
period = 10,
low_al = 0.15,
high_al = 0.9,
low_al = 0.,
high_al = 1.,
na = 2e18,
nd = 0.,
v_ga11 = 850,
v_al5 = 900):
# width is in [nm]
# width is in [m]
# al contents are unitary [1]
# dopings are in [at/cm3]
# speeds are in [nm/h]
......@@ -391,10 +604,10 @@ def structure_linear_grading(grading_width = 20e-9,
# grading
for i in range(period):
layer_al_content = low_al +((i +1) * (high_al -low_al) / (period +1)) # [1]
bi_layer_thickness = grading_width / period # [nm]
bi_layer_thickness = grading_width / period # [m]
al_thickness = layer_al_content * bi_layer_thickness # [nm]
ga_thickness = (1 -layer_al_content) * bi_layer_thickness # [nm]
al_thickness = layer_al_content * bi_layer_thickness # [m]
ga_thickness = (1 -layer_al_content) * bi_layer_thickness # [m]
sl = sl.append(pd.DataFrame([['dbr ' +doping_type +' linear grading', true_epitaxy_thickness(al_thickness, v_al5, al5=True), 1., na, nd, False, False, True, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
......@@ -481,6 +694,51 @@ def structure_middle_contact(bypass_dbr = False,
return sl, previous_layer_is_dbr
def structure_alox(period = 10,
alox_thickness = 30e-9,
end_thickness = 55e-9,
alox_mean_al = 0.98,
low_al = 0.9,
high_al = 1.,
v_ga6 = 100,
v_al5 = 900):
# width is in [m]
# al contents are unitary [1]
# dopings are in [at/cm3]
# speeds are in [nm/h]
# super lattice
sl = pd.DataFrame(columns = ['name', 'thickness', 'al', 'na', 'nd', 'refractive_index', 'ga6', 'ga11', 'al5', 'al12'])
# parameters
al_90 = v_al5 / (v_al5 + v_ga6) # [1] 90% Al si tout va bien
bi_layer_thickness = alox_thickness / period # [m]
al_thickness = bi_layer_thickness * (alox_mean_al - low_al) / (high_al - low_al) # [m]
al_90_thickness = bi_layer_thickness - al_thickness # [m]
# digital alloy
for i in range(period):
sl = sl.append(pd.DataFrame([['AlOx 90% Al', true_epitaxy_thickness(al_90_thickness, v_al5 + v_ga6, al5=True, ga6=True), al_90, 2e18, 0., True, False, True, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
sl = sl.append(pd.DataFrame([['AlOx 100% Al', true_epitaxy_thickness(al_thickness, v_al5, al5=True), 1., 2e18, 0., False, False, True, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
sl = sl.append(pd.DataFrame([['AlOx 90% Al',
true_epitaxy_thickness(end_thickness, v_al5 + v_ga6, al5=True, ga6=True), al_90, 2e18, 0., True, False, True, False]],
columns=['name', 'thickness', 'al', 'na', 'nd', 'ga6', 'ga11', 'al5', 'al12']),
ignore_index=True)
return sl
def structure_zandbergen():
......@@ -559,11 +817,11 @@ def time(growth_speed, thickness):
def true_epitaxy_thickness(expected_thickness,
corrected_growth_speed,
ga6=False,
ga11=False,
al5=False,
al12=False):
corrected_growth_speed,
ga6=False,
ga11=False,
al5=False,
al12=False):
# the epitaxial growth rate is not the same as the commanded growth rate
# this function convert the command expected thickness
# to the true epitaxial growth rate
......
......@@ -26,19 +26,19 @@ def eam_structures_description(document_folder=True):
writer = pd.ExcelWriter('eam_structures_layers.xlsx', engine='xlsxwriter')
# get the xlsxwriter workbook objects
workbook = writer.book
#workbook = writer.book
# sheets list
sheets = ['eam 1', 'eam 2 bypass dbr']
# colors formatting
highlight_yellow = workbook.add_format({'bg_color': '#FFFF99'})
highlight_light_blue = workbook.add_format({'bg_color': '#99FFFF'})
highlight_blue = workbook.add_format({'bg_color': '#99CCFF'})
highlight_violet = workbook.add_format({'bg_color': '#9999FF'})
highlight_red = workbook.add_format({'bg_color': '#FF99CC'})
highlight_green = workbook.add_format({'bg_color': '#99FF99'})
highlight_white = workbook.add_format({'bg_color': '#FFFFFF'})
#highlight_yellow = workbook.add_format({'bg_color': '#FFFF99'})
#highlight_light_blue = workbook.add_format({'bg_color': '#99FFFF'})
#highlight_blue = workbook.add_format({'bg_color': '#99CCFF'})
#highlight_violet = workbook.add_format({'bg_color': '#9999FF'})
#highlight_red = workbook.add_format({'bg_color': '#FF99CC'})
#highlight_green = workbook.add_format({'bg_color': '#99FF99'})
#highlight_white = workbook.add_format({'bg_color': '#FFFFFF'})
for i in range(len(eams)):
# write the sheets
......@@ -46,31 +46,96 @@ def eam_structures_description(document_folder=True):
# color highlighting of lines
# get the xlsxwriter worksheet objects
worksheet = writer.sheets[sheets[i]]
"""
for col in range(eams[i].shape[1]):
for row in range(eams[i].shape[0]):
name = eams[i].at[i, 'name']
# blank case
if 'contact' in name:
worksheet.write(row +1, col, None, highlight_yellow)
elif 'quantum' in name:
worksheet.write(row +1, col, None, highlight_red)
elif 'barrier' in name:
worksheet.write(row +1, col, None, highlight_light_blue)
elif 'grading' in name:
worksheet.write(row +1, col, None, highlight_light_blue)
elif 'dbr' in name:
worksheet.write(row +1, col, None, highlight_blue)
elif 'clad' in name:
worksheet.write(row +1, col, None, highlight_green)
elif 'substrate' in name:
worksheet.write(row + 1, col, None, highlight_violet)
else:
worksheet.write(row + 1, col, None, highlight_white)
"""
#worksheet = writer.sheets[sheets[i]]
#for col in range(eams[i].shape[1]):
# for row in range(eams[i].shape[0]):
# name = eams[i].at[i, 'name']
#
# # blank case
# if 'contact' in name:
# worksheet.write(row +1, col, None, highlight_yellow)
# elif 'quantum' in name:
# worksheet.write(row +1, col, None, highlight_red)
# elif 'barrier' in name:
# worksheet.write(row +1, col, None, highlight_light_blue)
# elif 'grading' in name:
# worksheet.write(row +1, col, None, highlight_light_blue)
# elif 'dbr' in name:
# worksheet.write(row +1, col, None, highlight_blue)
# elif 'clad' in name:
# worksheet.write(row +1, col, None, highlight_green)
# elif 'substrate' in name:
# worksheet.write(row + 1, col, None, highlight_violet)
# else:
# worksheet.write(row + 1, col, None, highlight_white)
# output the file
writer.save()
def vcsel_eam_structures_description(document_folder=True):
# create the structures
vcsel_eam = st.structure_eam_vcsel()
vcsel_eam_dbr_bypass = st.structure_eam_vcsel(bypass_dbr=True)
# structures list
vcsel_eams = [vcsel_eam, vcsel_eam_dbr_bypass]
# calculate the refraction index
for i in range(len(vcsel_eams)):
vcsel_eams[i] = op.algaas_super_lattice_refractive_index(vcsel_eams[i], 0., 850e-9)
# create the xlsx document
if document_folder:
writer = pd.ExcelWriter('Z:\\Documents\\' +'vcsel_eam_structures_layers.xlsx', engine='xlsxwriter')
else:
writer = pd.ExcelWriter('vcsel_eam_structures_layers.xlsx', engine='xlsxwriter')
# get the xlsxwriter workbook objects
#workbook = writer.book
# sheets list
sheets = ['vcsel-eam 1', 'vcsel-eam 2 bypass dbr']
# colors formatting
#highlight_yellow = workbook.add_format({'bg_color': '#FFFF99'})
#highlight_light_blue = workbook.add_format({'bg_color': '#99FFFF'})
#highlight_blue = workbook.add_format({'bg_color': '#99CCFF'})
#highlight_violet = workbook.add_format({'bg_color': '#9999FF'})
#highlight_red = workbook.add_format({'bg_color': '#FF99CC'})
#highlight_green = workbook.add_format({'bg_color': '#99FF99'})
#highlight_white = workbook.add_format({'bg_color': '#FFFFFF'})
for i in range(len(vcsel_eams)):
# write the sheets
vcsel_eams[i].to_excel(writer, sheet_name=sheets[i])
# color highlighting of lines
# get the xlsxwriter worksheet objects
#worksheet = writer.sheets[sheets[i]]
#for col in range(eams[i].shape[1]):
# for row in range(eams[i].shape[0]):
# name = eams[i].at[i, 'name']
#
# # blank case
# if 'contact' in name:
# worksheet.write(row +1, col, None, highlight_yellow)
# elif 'quantum' in name:
# worksheet.write(row +1, col, None, highlight_red)
# elif 'barrier' in name:
# worksheet.write(row +1, col, None, highlight_light_blue)
# elif 'grading' in name:
# worksheet.write(row +1, col, None, highlight_light_blue)
# elif 'dbr' in name:
# worksheet.write(row +1, col, None, highlight_blue)
# elif 'clad' in name:
# worksheet.write(row +1, col, None, highlight_green)
# elif 'substrate' in name:
# worksheet.write(row + 1, col, None, highlight_violet)
# else:
# worksheet.write(row + 1, col, None, highlight_white)
# output the file
writer.save()
\ No newline at end of file
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