Generate Layout#
The first step is to create a layout and test manifest for your project, so that you can relate measurements and analyses back to your source layout.
You can generate the layout with any layout tool. In this notebook you can use kfactory.
Generate layout#
Kfactory allows you to write metadata directly into the cell.
You can download this layout.py file.
Generate design manifest#
In your sample GDS, you have the device settings annotated on the GDS. Here you can read them from the GDS and write a design manifest, which we can use to associate measurement data with the devices on the GDS. However, you can use any method you prefer to generate your test manifest.
c = kf.kcl["TOP"]
rib = c.kcl["RibLoss"]
ridge = c.kcl["RidgeLoss"]
csvpath = "design_manifest.csv"
with open(csvpath, "w") as f:
writer = csv.writer(f)
writer.writerow(
[
"cell",
"x",
"y",
"width_um",
"length_um",
"analysis",
"analysis_parameters",
]
)
rib_it = rib._kdb_cell.begin_instances_rec()
rib_it.targets = "cutback_rib_assembled*"
while not rib_it.at_end():
_c = c.kcl[rib_it.inst_cell().cell_index()]
_disp = (rib_it.trans() * rib_it.inst_trans()).disp
writer.writerow(
[
_c.name,
_disp.x,
_disp.y,
_c.settings["width"],
_c.settings["length"],
"[power_envelope]",
'[{"n": 10, "wvl_of_interest_nm": 1550}]',
]
)
rib_it.next()
ridge_it = ridge._kdb_cell.begin_instances_rec()
ridge_it.targets = "cutback_ridge_assembled*"
while not ridge_it.at_end():
_c = c.kcl[ridge_it.inst_cell().cell_index()]
_disp = (ridge_it.trans() * ridge_it.inst_trans()).disp
writer.writerow(
[
_c.name,
_disp.x,
_disp.y,
_c.settings["width"],
_c.settings["length"],
"[power_envelope]",
'[{"n": 10, "wvl_of_interest_nm": 1550}]',
]
)
ridge_it.next()
rib_it = rib._kdb_cell.begin_instances_rec()
You can take a look a the contents of the device manifest you created.
import pandas as pd
df = pd.read_csv(csvpath)
df
cell | x | y | width_um | length_um | analysis | analysis_parameters | |
---|---|---|---|---|---|---|---|
0 | cutback_rib_assembled_MFalse_W0p3_L0 | 20150 | 60150 | 0.3 | 0 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
1 | cutback_rib_assembled_MTrue_W0p3_L25000 | 1039250 | 60150 | 0.3 | 25000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
2 | cutback_rib_assembled_MFalse_W0p3_L5000 | 20150 | 204150 | 0.3 | 5000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
3 | cutback_rib_assembled_MTrue_W0p3_L20000 | 1039250 | 204150 | 0.3 | 20000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
4 | cutback_rib_assembled_MFalse_W0p3_L10000 | 20150 | 348150 | 0.3 | 10000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
5 | cutback_rib_assembled_MTrue_W0p3_L15000 | 1039250 | 348150 | 0.3 | 15000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
6 | cutback_rib_assembled_MFalse_W0p5_L0 | 20250 | 492250 | 0.5 | 0 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
7 | cutback_rib_assembled_MTrue_W0p5_L25000 | 1058750 | 492250 | 0.5 | 25000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
8 | cutback_rib_assembled_MFalse_W0p5_L5000 | 20250 | 646250 | 0.5 | 5000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
9 | cutback_rib_assembled_MTrue_W0p5_L20000 | 1058750 | 646250 | 0.5 | 20000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
10 | cutback_rib_assembled_MFalse_W0p5_L10000 | 20250 | 800250 | 0.5 | 10000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
11 | cutback_rib_assembled_MTrue_W0p5_L15000 | 1058750 | 800250 | 0.5 | 15000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
12 | cutback_rib_assembled_MFalse_W0p8_L0 | 20400 | 954400 | 0.8 | 0 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
13 | cutback_rib_assembled_MTrue_W0p8_L25000 | 1088000 | 954400 | 0.8 | 25000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
14 | cutback_rib_assembled_MFalse_W0p8_L5000 | 20400 | 1123400 | 0.8 | 5000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
15 | cutback_rib_assembled_MTrue_W0p8_L20000 | 1088000 | 1123400 | 0.8 | 20000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
16 | cutback_rib_assembled_MFalse_W0p8_L10000 | 20400 | 1292400 | 0.8 | 10000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
17 | cutback_rib_assembled_MTrue_W0p8_L15000 | 1088000 | 1292400 | 0.8 | 15000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
18 | cutback_ridge_assembled_MFalse_W0p3_L0 | 20150 | 60150 | 0.3 | 0 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
19 | cutback_ridge_assembled_MTrue_W0p3_L25000 | 1037250 | 60150 | 0.3 | 25000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
20 | cutback_ridge_assembled_MFalse_W0p3_L5000 | 20150 | 203150 | 0.3 | 5000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
21 | cutback_ridge_assembled_MTrue_W0p3_L20000 | 1037250 | 203150 | 0.3 | 20000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
22 | cutback_ridge_assembled_MFalse_W0p3_L10000 | 20150 | 346150 | 0.3 | 10000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
23 | cutback_ridge_assembled_MTrue_W0p3_L15000 | 1037250 | 346150 | 0.3 | 15000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
24 | cutback_ridge_assembled_MFalse_W0p5_L0 | 20250 | 489250 | 0.5 | 0 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
25 | cutback_ridge_assembled_MTrue_W0p5_L25000 | 1056750 | 489250 | 0.5 | 25000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
26 | cutback_ridge_assembled_MFalse_W0p5_L5000 | 20250 | 642250 | 0.5 | 5000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
27 | cutback_ridge_assembled_MTrue_W0p5_L20000 | 1056750 | 642250 | 0.5 | 20000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
28 | cutback_ridge_assembled_MFalse_W0p5_L10000 | 20250 | 795250 | 0.5 | 10000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
29 | cutback_ridge_assembled_MTrue_W0p5_L15000 | 1056750 | 795250 | 0.5 | 15000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
30 | cutback_ridge_assembled_MFalse_W0p8_L0 | 20400 | 948400 | 0.8 | 0 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
31 | cutback_ridge_assembled_MTrue_W0p8_L25000 | 1086000 | 948400 | 0.8 | 25000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
32 | cutback_ridge_assembled_MFalse_W0p8_L5000 | 20400 | 1116400 | 0.8 | 5000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
33 | cutback_ridge_assembled_MTrue_W0p8_L20000 | 1086000 | 1116400 | 0.8 | 20000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
34 | cutback_ridge_assembled_MFalse_W0p8_L10000 | 20400 | 1284400 | 0.8 | 10000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |
35 | cutback_ridge_assembled_MTrue_W0p8_L15000 | 1086000 | 1284400 | 0.8 | 15000 | [power_envelope] | [{"n": 10, "wvl_of_interest_nm": 1550}] |