|
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
index 87a6797..290e3fa 100644
--- a/docs/build/html/searchindex.js
+++ b/docs/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"ADC_STD_2x2": [[35, "adc-std-2x2"]], "AED_Ring_PIN": [[25, "aed-ring-pin"]], "AED_ring": [[41, "aed-ring"]], "AMZI_W": [[4, "amzi-w"]], "Active": [[23, null]], "BS_tdc": [[35, "bs-tdc"]], "Brag_WDM": [[31, "brag-wdm"]], "Bragg": [[34, "bragg"]], "Bragg_apodized": [[34, "bragg-apodized"]], "CROW_AED": [[28, "crow-aed"]], "CROW_Circular_ring": [[28, "crow-circular-ring"]], "CROW_Eul_RCK": [[28, "crow-eul-rck"]], "CROW_Eul_Ring": [[28, "crow-eul-ring"]], "CROW_STD_Adddrop": [[28, "crow-std-adddrop"]], "CROW_STD_Allpass": [[28, "crow-std-allpass"]], "Clothoid": [[11, "clothoid"]], "Components": [[16, null]], "Components:": [[0, null]], "Composites": [[7, null]], "Conchoid": [[11, "conchoid"]], "Cross": [[36, "cross"]], "Cross_Sine": [[36, "cross-sine"]], "DC": [[35, "dc"]], "DC_bend": [[35, "dc-bend"]], "DC_pX_3sg": [[35, "dc-px-3sg"]], "DEVICE_2X2_FDTD_INIT": [[18, "device-2x2-fdtd-init"]], "DEVICE_COUPLER": [[18, "device-coupler"]], "DEVICE_PORTS": [[18, "device-ports"]], "DEVICE_RING_BUS": [[18, "device-ring-bus"]], "EC_dual_layer_px3": [[21, "ec-dual-layer-px3"]], "EULER_CROW_BUS": [[18, "euler-crow-bus"]], "EULER_CROW_INTER_CP": [[18, "euler-crow-inter-cp"]], "Electronics": [[9, null]], "Elipse": [[15, "elipse"]], "Elipse_dual": [[15, "elipse-dual"]], "FA": [[37, "fa"]], "GC_STD_1D": [[37, "gc-std-1d"]], "GC_STD_2D": [[37, "gc-std-2d"]], "GC_SiN_Si_Dual_Layer": [[26, "gc-sin-si-dual-layer"]], "Geometry": [[12, null]], "Grating_2D_Hole": [[37, "grating-2d-hole"]], "Grating_2D_Hole_3Rec": [[37, "grating-2d-hole-3rec"]], "Grating_2D_Hole_4Rec": [[37, "grating-2d-hole-4rec"]], "Heater_NDoped": [[22, "heater-ndoped"]], "ISL": [[8, "isl"]], "LoopMirror": [[2, "loopmirror"]], "MDM": [[35, "mdm"]], "MMI_ML": [[39, "mmi-ml"]], "MMI_STD": [[39, "mmi-std"]], "MRR_AED": [[30, "mrr-aed"]], "MRR_DW_Adddrop": [[30, "mrr-dw-adddrop"]], "MRR_DW_Allpass": [[30, "mrr-dw-allpass"]], "MRR_MM_Adddrop": [[30, "mrr-mm-adddrop"]], "MRR_MM_Allpass": [[30, "mrr-mm-allpass"]], "MRR_STD_Adddrop": [[30, "mrr-std-adddrop"]], "MRR_STD_Allpass": [[30, "mrr-std-allpass"]], "MRR_STD_Ring": [[30, "mrr-std-ring"]], "MZI": [[3, "mzi"]], "MZI_2st_ubend": [[3, "mzi-2st-ubend"]], "MZI_Butterfly": [[3, "mzi-butterfly"]], "MZI_Eubend": [[3, "mzi-eubend"]], "MZI_NS": [[3, "mzi-ns"]], "MZI_NS_ubend": [[3, "mzi-ns-ubend"]], "MZI_Ubend": [[3, "mzi-ubend"]], "MZI_mesh_Parl": [[4, "mzi-mesh-parl"]], "MZI_mesh_Tri": [[4, "mzi-mesh-tri"]], "MZI_mesh_U": [[4, "mzi-mesh-u"]], "MonitorParas": [[18, "monitorparas"]], "Nano_ant": [[37, "nano-ant"]], "Others": [[17, null]], "PAD": [[8, "pad"]], "PADs": [[8, "pads"]], "PBS_3wg": [[32, "pbs-3wg"]], "PIN_MRR_MM_Adddrop": [[25, "pin-mrr-mm-adddrop"]], "PIN_MRR_MM_Allpass": [[25, "pin-mrr-mm-allpass"]], "PIN_MRR_STD_Allpass": [[25, "pin-mrr-std-allpass"]], "PSR": [[43, "psr"]], "PSR_1x2": [[31, "psr-1x2"]], "PS_2st": [[31, "ps-2st"]], "PS_2st_Straight": [[31, "ps-2st-straight"]], "PS_PIN": [[22, "ps-pin"]], "Passive": [[29, null]], "Pic": [[38, null]], "PortParas": [[18, "portparas"]], "Primitives": [[27, null]], "RESONATOR": [[18, "resonator"]], "RING_PHASE": [[18, "ring-phase"]], "Racetrack": [[14, "racetrack"]], "RacetrackResonator": [[40, "racetrackresonator"]], "Racetrack_MM_Adddrop": [[40, "racetrack-mm-adddrop"]], "Racetrack_MM_Allpass": [[40, "racetrack-mm-allpass"]], "Racetrack_STD_Allpass": [[40, "racetrack-std-allpass"]], "Route": [[22, "route"], [25, "route"], [30, "route"], [40, "route"], [44, "route"]], "SOCR": [[30, "socr"]], "SOCR_Adiabatic": [[30, "socr-adiabatic"]], "SOCR_Adiabatic_Cband": [[30, "socr-adiabatic-cband"]], "SOCR_Cband": [[30, "socr-cband"]], "STD_CROW_V": [[28, "std-crow-v"]], "STD_PIC_Rings": [[41, "std-pic-rings"]], "STD_Ring_PIN": [[25, "std-ring-pin"]], "STD_ring_AMZI_adddrop": [[30, "std-ring-amzi-adddrop"]], "SimuDataFigurePlot": [[18, "simudatafigureplot"]], "Simulation": [[19, null]], "Spiral_Cicle_MM": [[42, "spiral-cicle-mm"]], "Spiral_Cicle_STD": [[42, "spiral-cicle-std"]], "Spiral_Rect_STD": [[42, "spiral-rect-std"]], "SplittingTree": [[5, "splittingtree"]], "Taper": [[37, "taper"]], "UMat_2x2_S": [[4, "umat-2x2-s"]], "Vias": [[8, "vias"]], "Vias_arc": [[8, "vias-arc"]], "WGDoped": [[24, "wgdoped"]], "W_waveguide": [[4, "w-waveguide"]], "YBranch": [[33, "ybranch"]], "Ybranch_3wg": [[33, "ybranch-3wg"]], "circle": [[15, "circle"]], "gds_lib_load": [[10, "gds-lib-load"]], "generate_gds_lib": [[10, "generate-gds-lib"]], "hole": [[15, "hole"]], "ic_exception": [[44, "ic-exception"]], "mxPIC Handbook": [[0, null]], "mx_bend": [[15, "mx-bend"]], "mxpic.components.basic": [[1, null]], "mxpic.components.composites.LoopMirror": [[2, null]], "mxpic.components.composites.MZI": [[3, null]], "mxpic.components.composites.MZI_mesh": [[4, null]], "mxpic.components.composites.SptTree": [[5, null]], "mxpic.components.composites.advance": [[6, null]], "mxpic.components.electronics.eic_units": [[8, null]], "mxpic.components.gds_devices": [[10, null]], "mxpic.components.geometry.curves": [[11, null]], "mxpic.components.geometry.polygons": [[13, null]], "mxpic.components.geometry.racetrack": [[14, null]], "mxpic.components.geometry.rings": [[15, null]], "mxpic.components.others.simulation.DualPortElements": [[18, null]], "mxpic.components.pins": [[20, null]], "mxpic.components.primitives.EC_dual_layer_px3": [[21, null]], "mxpic.components.primitives.active.dev_ps": [[22, null]], "mxpic.components.primitives.active.pin_wg": [[24, null]], "mxpic.components.primitives.active.rings": [[25, null]], "mxpic.components.primitives.grating_couplers": [[26, null]], "mxpic.components.primitives.passive.crows": [[28, null]], "mxpic.components.primitives.passive.rings": [[30, null]], "mxpic.components.primitives.passive.unit": [[31, null]], "mxpic.components.primitives.pic.PBS": [[32, null]], "mxpic.components.primitives.pic.YBS": [[33, null]], "mxpic.components.primitives.pic.bragg": [[34, null]], "mxpic.components.primitives.pic.couplers": [[35, null]], "mxpic.components.primitives.pic.cross": [[36, null]], "mxpic.components.primitives.pic.gratings": [[37, null]], "mxpic.components.primitives.pic.mmi": [[39, null]], "mxpic.components.primitives.pic.racetrack": [[40, null]], "mxpic.components.primitives.pic.rings": [[41, null]], "mxpic.components.primitives.pic.spiral": [[42, null]], "mxpic.components.primitives.pic.taper": [[43, null]], "mxpic.components.routing": [[44, null]], "ring_bus_wg": [[35, "ring-bus-wg"]], "spiral": [[42, "spiral"]], "spiral_circle": [[42, "spiral-circle"]], "spiral_rectangle": [[42, "spiral-rectangle"]], "strt_round_courner": [[13, "strt-round-courner"]], "taper_xs2xs": [[43, "taper-xs2xs"]], "transition": [[43, "transition"]], "tuple_to_complex": [[18, "tuple-to-complex"]], "waveguide": [[31, "waveguide"]], "waveguide_PIN": [[24, "waveguide-pin"]]}, "docnames": ["index", "mxpic/components/basic", "mxpic/components/composites/LoopMirror", "mxpic/components/composites/MZI", "mxpic/components/composites/MZI_mesh", "mxpic/components/composites/SptTree", "mxpic/components/composites/advance", "mxpic/components/composites/index", "mxpic/components/electronics/eic_units", "mxpic/components/electronics/index", "mxpic/components/gds_devices", "mxpic/components/geometry/curves", "mxpic/components/geometry/index", "mxpic/components/geometry/polygons", "mxpic/components/geometry/racetrack", "mxpic/components/geometry/rings", "mxpic/components/index", "mxpic/components/others/index", "mxpic/components/others/simulation/DualPortElements", "mxpic/components/others/simulation/index", "mxpic/components/pins", "mxpic/components/primitives/EC_dual_layer_px3", "mxpic/components/primitives/active/dev_ps", "mxpic/components/primitives/active/index", "mxpic/components/primitives/active/pin_wg", "mxpic/components/primitives/active/rings", "mxpic/components/primitives/grating_couplers", "mxpic/components/primitives/index", "mxpic/components/primitives/passive/crows", "mxpic/components/primitives/passive/index", "mxpic/components/primitives/passive/rings", "mxpic/components/primitives/passive/unit", "mxpic/components/primitives/pic/PBS", "mxpic/components/primitives/pic/YBS", "mxpic/components/primitives/pic/bragg", "mxpic/components/primitives/pic/couplers", "mxpic/components/primitives/pic/cross", "mxpic/components/primitives/pic/gratings", "mxpic/components/primitives/pic/index", "mxpic/components/primitives/pic/mmi", "mxpic/components/primitives/pic/racetrack", "mxpic/components/primitives/pic/rings", "mxpic/components/primitives/pic/spiral", "mxpic/components/primitives/pic/taper", "mxpic/components/routing"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["index.md", "mxpic/components/basic.md", "mxpic/components/composites/LoopMirror.md", "mxpic/components/composites/MZI.md", "mxpic/components/composites/MZI_mesh.md", "mxpic/components/composites/SptTree.md", "mxpic/components/composites/advance.md", "mxpic/components/composites/index.md", "mxpic/components/electronics/eic_units.md", "mxpic/components/electronics/index.md", "mxpic/components/gds_devices.md", "mxpic/components/geometry/curves.md", "mxpic/components/geometry/index.md", "mxpic/components/geometry/polygons.md", "mxpic/components/geometry/racetrack.md", "mxpic/components/geometry/rings.md", "mxpic/components/index.md", "mxpic/components/others/index.md", "mxpic/components/others/simulation/DualPortElements.md", "mxpic/components/others/simulation/index.md", "mxpic/components/pins.md", "mxpic/components/primitives/EC_dual_layer_px3.md", "mxpic/components/primitives/active/dev_ps.md", "mxpic/components/primitives/active/index.md", "mxpic/components/primitives/active/pin_wg.md", "mxpic/components/primitives/active/rings.md", "mxpic/components/primitives/grating_couplers.md", "mxpic/components/primitives/index.md", "mxpic/components/primitives/passive/crows.md", "mxpic/components/primitives/passive/index.md", "mxpic/components/primitives/passive/rings.md", "mxpic/components/primitives/passive/unit.md", "mxpic/components/primitives/pic/PBS.md", "mxpic/components/primitives/pic/YBS.md", "mxpic/components/primitives/pic/bragg.md", "mxpic/components/primitives/pic/couplers.md", "mxpic/components/primitives/pic/cross.md", "mxpic/components/primitives/pic/gratings.md", "mxpic/components/primitives/pic/index.md", "mxpic/components/primitives/pic/mmi.md", "mxpic/components/primitives/pic/racetrack.md", "mxpic/components/primitives/pic/rings.md", "mxpic/components/primitives/pic/spiral.md", "mxpic/components/primitives/pic/taper.md", "mxpic/components/routing.md"], "indexentries": {"a_ht (mxpic.components.primitives.passive.crows.std_crow_v attribute)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V.A_ht", false]], "adc_std_2x2 (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2", false]], "add_pin() (mxpic.components.gds_devices.gds_lib_load method)": [[10, "mxpic.components.gds_devices.gds_lib_load.add_pin", false]], "aed_ring (class in mxpic.components.primitives.pic.rings)": [[41, "mxpic.components.primitives.pic.rings.AED_ring", false]], "aed_ring_pin (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.AED_Ring_PIN", false]], "amzi_w (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W", false]], "bend_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_mine", false]], "bend_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_mine", false]], "bend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_p2p", false]], "bend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_p2p", false]], "bend_route() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_route", false]], "bend_route() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_route", false]], "bend_route_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_route_p2p", false]], "bend_route_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_route_p2p", false]], "bend_strt_bend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_strt_bend_p2p", false]], "bend_strt_bend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_strt_bend_p2p", false]], "bend_strt_bend_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_strt_bend_p2p_mine", false]], "bend_strt_bend_p2p_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_strt_bend_p2p_mine", false]], "brag_wdm (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.Brag_WDM", false]], "bragg (class in mxpic.components.primitives.pic.bragg)": [[34, "mxpic.components.primitives.pic.bragg.Bragg", false]], "bragg_apodized (class in mxpic.components.primitives.pic.bragg)": [[34, "mxpic.components.primitives.pic.bragg.Bragg_apodized", false]], "bs_tdc (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.BS_tdc", false]], "cell (mxpic.components.composites.loopmirror.loopmirror attribute)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror.cell", false]], "cell (mxpic.components.composites.mzi.mzi attribute)": [[3, "mxpic.components.composites.MZI.MZI.cell", false]], "cell (mxpic.components.composites.mzi.mzi_2st_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_butterfly attribute)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.cell", false]], "cell (mxpic.components.composites.mzi.mzi_eubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Eubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Ubend.cell", false]], "cell (mxpic.components.composites.mzi_mesh.amzi_w attribute)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_parl attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_tri attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_u attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.cell", false]], "cell (mxpic.components.composites.mzi_mesh.umat_2x2_s attribute)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.cell", false]], "cell (mxpic.components.composites.mzi_mesh.w_waveguide attribute)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.cell", false]], "cell (mxpic.components.composites.spttree.splittingtree attribute)": [[5, "mxpic.components.composites.SptTree.SplittingTree.cell", false]], "cell (mxpic.components.primitives.active.dev_ps.ps_pin attribute)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN.cell", false]], "cell (mxpic.components.primitives.pic.spiral.spiral_circle attribute)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle.cell", false]], "circle (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.circle", false]], "clothoid (class in mxpic.components.geometry.curves)": [[11, "mxpic.components.geometry.curves.Clothoid", false]], "conchoid (class in mxpic.components.geometry.curves)": [[11, "mxpic.components.geometry.curves.Conchoid", false]], "connpatch() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.connPatch", false]], "connpatch() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.connPatch", false]], "cross (class in mxpic.components.primitives.pic.cross)": [[36, "mxpic.components.primitives.pic.cross.Cross", false]], "cross_sine (class in mxpic.components.primitives.pic.cross)": [[36, "mxpic.components.primitives.pic.cross.Cross_Sine", false]], "crow_aed (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_AED", false]], "crow_circular_ring (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_Circular_ring", false]], "crow_eul_rck (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_Eul_RCK", false]], "crow_eul_ring (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_Eul_Ring", false]], "crow_std_adddrop (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_STD_Adddrop", false]], "crow_std_allpass (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_STD_Allpass", false]], "dc (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.DC", false]], "dc_bend (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.DC_bend", false]], "dc_px_3sg (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.DC_pX_3sg", false]], "device_2x2_fdtd_init() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_2X2_FDTD_INIT", false]], "device_coupler (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_COUPLER", false]], "device_ports (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS", false]], "device_ring_bus (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_RING_BUS", false]], "ec_dual_layer_px3 (class in mxpic.components.primitives.ec_dual_layer_px3)": [[21, "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3", false]], "elipse (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.Elipse", false]], "elipse_dual (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.Elipse_dual", false]], "euler_crow_bus (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.EULER_CROW_BUS", false]], "euler_crow_inter_cp (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.EULER_CROW_INTER_CP", false]], "fa (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.FA", false]], "folderpath (mxpic.components.others.simulation.dualportelements.device_ports attribute)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS.FolderPath", false]], "gc_sin_si_dual_layer (class in mxpic.components.primitives.grating_couplers)": [[26, "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer", false]], "gc_std_1d (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D", false]], "gc_std_2d (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D", false]], "gds_lib_load (class in mxpic.components.gds_devices)": [[10, "mxpic.components.gds_devices.gds_lib_load", false]], "generate_2pi_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_2pi_gds", false]], "generate_eic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_eic_gds", false]], "generate_eic_gds() (mxpic.components.primitives.passive.rings.mrr_aed method)": [[30, "mxpic.components.primitives.passive.rings.MRR_AED.generate_eic_gds", false]], "generate_eic_gds() (mxpic.components.primitives.pic.racetrack.racetrack_std_allpass method)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass.generate_eic_gds", false]], "generate_eic_part() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_eic_part", false]], "generate_eic_part() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_eic_part", false]], "generate_err() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_err", false]], "generate_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.mzi_mesh_u method)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.umat_2x2_s method)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.w_waveguide method)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.generate_gds", false]], "generate_gds() (mxpic.components.composites.spttree.splittingtree method)": [[5, "mxpic.components.composites.SptTree.SplittingTree.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.pad method)": [[8, "mxpic.components.electronics.eic_units.PAD.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.pads method)": [[8, "mxpic.components.electronics.eic_units.PADs.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.vias method)": [[8, "mxpic.components.electronics.eic_units.Vias.generate_gds", false]], "generate_gds() (mxpic.components.geometry.curves.clothoid method)": [[11, "mxpic.components.geometry.curves.Clothoid.generate_gds", false]], "generate_gds() (mxpic.components.geometry.racetrack.racetrack method)": [[14, "mxpic.components.geometry.racetrack.Racetrack.generate_gds", false]], "generate_gds() (mxpic.components.geometry.rings.elipse method)": [[15, "mxpic.components.geometry.rings.Elipse.generate_gds", false]], "generate_gds() (mxpic.components.geometry.rings.elipse_dual method)": [[15, "mxpic.components.geometry.rings.Elipse_dual.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.dev_ps.heater_ndoped method)": [[22, "mxpic.components.primitives.active.dev_ps.Heater_NDoped.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.dev_ps.ps_pin method)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.pin_wg.waveguide_pin method)": [[24, "mxpic.components.primitives.active.pin_wg.waveguide_PIN.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.pin_wg.wgdoped method)": [[24, "mxpic.components.primitives.active.pin_wg.WGDoped.generate_gds", false]], "generate_gds() (mxpic.components.primitives.ec_dual_layer_px3.ec_dual_layer_px3 method)": [[21, "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3.generate_gds", false]], "generate_gds() (mxpic.components.primitives.grating_couplers.gc_sin_si_dual_layer method)": [[26, "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.std_ring_amzi_adddrop method)": [[30, "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.unit.ps_2st method)": [[31, "mxpic.components.primitives.passive.unit.PS_2st.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.unit.ps_2st_straight method)": [[31, "mxpic.components.primitives.passive.unit.PS_2st_Straight.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.dc_bend method)": [[35, "mxpic.components.primitives.pic.couplers.DC_bend.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.dc_px_3sg method)": [[35, "mxpic.components.primitives.pic.couplers.DC_pX_3sg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.ring_bus_wg method)": [[35, "mxpic.components.primitives.pic.couplers.ring_bus_wg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.cross.cross method)": [[36, "mxpic.components.primitives.pic.cross.Cross.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole method)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole_3rec method)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole_4rec method)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.taper method)": [[37, "mxpic.components.primitives.pic.gratings.Taper.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.mmi.mmi_ml method)": [[39, "mxpic.components.primitives.pic.mmi.MMI_ML.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.pbs.pbs_3wg method)": [[32, "mxpic.components.primitives.pic.PBS.PBS_3wg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.racetrack.racetrackresonator method)": [[40, "mxpic.components.primitives.pic.racetrack.RacetrackResonator.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral method)": [[42, "mxpic.components.primitives.pic.spiral.spiral.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_rectangle method)": [[42, "mxpic.components.primitives.pic.spiral.spiral_rectangle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.ybs.ybranch method)": [[33, "mxpic.components.primitives.pic.YBS.YBranch.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.ybs.ybranch_3wg method)": [[33, "mxpic.components.primitives.pic.YBS.Ybranch_3wg.generate_gds", false]], "generate_gds_error() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds_error", false]], "generate_gds_lib() (in module mxpic.components.gds_devices)": [[10, "mxpic.components.gds_devices.generate_gds_lib", false]], "generate_gds_positive() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds_positive", false]], "generate_imp_gds() (mxpic.components.primitives.active.rings.aed_ring_pin method)": [[25, "mxpic.components.primitives.active.rings.AED_Ring_PIN.generate_imp_gds", false]], "generate_mzi_gds() (mxpic.components.primitives.active.dev_ps.ps_pin method)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN.generate_mzi_gds", false]], "generate_negative() (mxpic.components.primitives.pic.bragg.bragg_apodized method)": [[34, "mxpic.components.primitives.pic.bragg.Bragg_apodized.generate_negative", false]], "generate_negative() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_negative", false]], "generate_negative() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_negative", false]], "generate_pic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_pic_gds", false]], "generate_pic_gds() (mxpic.components.primitives.pic.rings.aed_ring method)": [[41, "mxpic.components.primitives.pic.rings.AED_ring.generate_pic_gds", false]], "generate_pic_part() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_pic_part", false]], "generate_pic_part() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_pic_part", false]], "generate_positive() (mxpic.components.primitives.pic.bragg.bragg_apodized method)": [[34, "mxpic.components.primitives.pic.bragg.Bragg_apodized.generate_positive", false]], "generate_positive() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_positive", false]], "generate_positive() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_positive", false]], "generate_test_dev() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_test_dev", false]], "generate_test_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_test_gds", false]], "generate_test_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.active.dev_ps.heater_ndoped method)": [[22, "mxpic.components.primitives.active.dev_ps.Heater_NDoped.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.unit.brag_wdm method)": [[31, "mxpic.components.primitives.passive.unit.Brag_WDM.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.unit.psr_1x2 method)": [[31, "mxpic.components.primitives.passive.unit.PSR_1x2.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc method)": [[35, "mxpic.components.primitives.pic.couplers.DC.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc_bend method)": [[35, "mxpic.components.primitives.pic.couplers.DC_bend.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc_px_3sg method)": [[35, "mxpic.components.primitives.pic.couplers.DC_pX_3sg.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.mdm method)": [[35, "mxpic.components.primitives.pic.couplers.MDM.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.cross.cross method)": [[36, "mxpic.components.primitives.pic.cross.Cross.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.mmi.mmi_ml method)": [[39, "mxpic.components.primitives.pic.mmi.MMI_ML.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.rings.aed_ring method)": [[41, "mxpic.components.primitives.pic.rings.AED_ring.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.ybs.ybranch_3wg method)": [[33, "mxpic.components.primitives.pic.YBS.Ybranch_3wg.generate_test_gds", false]], "generate_test_mzi_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_test_mzi_gds", false]], "grating_2d_hole (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole", false]], "grating_2d_hole_3rec (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec", false]], "grating_2d_hole_4rec (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec", false]], "heater_ndoped (class in mxpic.components.primitives.active.dev_ps)": [[22, "mxpic.components.primitives.active.dev_ps.Heater_NDoped", false]], "hole (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.hole", false]], "ic_exception() (in module mxpic.components.routing)": [[44, "mxpic.components.routing.ic_exception", false]], "isl (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.ISL", false]], "line_mm() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.line_mm", false]], "line_mm() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.line_mm", false]], "loopmirror (class in mxpic.components.composites.loopmirror)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror", false]], "mdm (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.MDM", false]], "mmi_ml (class in mxpic.components.primitives.pic.mmi)": [[39, "mxpic.components.primitives.pic.mmi.MMI_ML", false]], "mmi_std (class in mxpic.components.primitives.pic.mmi)": [[39, "mxpic.components.primitives.pic.mmi.MMI_STD", false]], "module": [[1, "module-mxpic.components.basic", false], [2, "module-mxpic.components.composites.LoopMirror", false], [3, "module-mxpic.components.composites.MZI", false], [4, "module-mxpic.components.composites.MZI_mesh", false], [5, "module-mxpic.components.composites.SptTree", false], [6, "module-mxpic.components.composites.advance", false], [8, "module-mxpic.components.electronics.eic_units", false], [10, "module-mxpic.components.gds_devices", false], [11, "module-mxpic.components.geometry.curves", false], [13, "module-mxpic.components.geometry.polygons", false], [14, "module-mxpic.components.geometry.racetrack", false], [15, "module-mxpic.components.geometry.rings", false], [18, "module-mxpic.components.others.simulation.DualPortElements", false], [20, "module-mxpic.components.pins", false], [21, "module-mxpic.components.primitives.EC_dual_layer_px3", false], [22, "module-mxpic.components.primitives.active.dev_ps", false], [24, "module-mxpic.components.primitives.active.pin_wg", false], [25, "module-mxpic.components.primitives.active.rings", false], [26, "module-mxpic.components.primitives.grating_couplers", false], [28, "module-mxpic.components.primitives.passive.crows", false], [30, "module-mxpic.components.primitives.passive.rings", false], [31, "module-mxpic.components.primitives.passive.unit", false], [32, "module-mxpic.components.primitives.pic.PBS", false], [33, "module-mxpic.components.primitives.pic.YBS", false], [34, "module-mxpic.components.primitives.pic.bragg", false], [35, "module-mxpic.components.primitives.pic.couplers", false], [36, "module-mxpic.components.primitives.pic.cross", false], [37, "module-mxpic.components.primitives.pic.gratings", false], [39, "module-mxpic.components.primitives.pic.mmi", false], [40, "module-mxpic.components.primitives.pic.racetrack", false], [41, "module-mxpic.components.primitives.pic.rings", false], [42, "module-mxpic.components.primitives.pic.spiral", false], [43, "module-mxpic.components.primitives.pic.taper", false], [44, "module-mxpic.components.routing", false]], "monitorparas() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.MonitorParas", false]], "mrr_aed (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_AED", false]], "mrr_dw_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_DW_Adddrop", false]], "mrr_dw_allpass (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_DW_Allpass", false]], "mrr_mm_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_MM_Adddrop", false]], "mrr_mm_allpass (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_MM_Allpass", false]], "mrr_std_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_STD_Adddrop", false]], "mrr_std_allpass (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_STD_Allpass", false]], "mrr_std_ring (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_STD_Ring", false]], "mx_bend (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.mx_bend", false]], "mxpic.components.basic": [[1, "module-mxpic.components.basic", false]], "mxpic.components.composites.advance": [[6, "module-mxpic.components.composites.advance", false]], "mxpic.components.composites.loopmirror": [[2, "module-mxpic.components.composites.LoopMirror", false]], "mxpic.components.composites.mzi": [[3, "module-mxpic.components.composites.MZI", false]], "mxpic.components.composites.mzi_mesh": [[4, "module-mxpic.components.composites.MZI_mesh", false]], "mxpic.components.composites.spttree": [[5, "module-mxpic.components.composites.SptTree", false]], "mxpic.components.electronics.eic_units": [[8, "module-mxpic.components.electronics.eic_units", false]], "mxpic.components.gds_devices": [[10, "module-mxpic.components.gds_devices", false]], "mxpic.components.geometry.curves": [[11, "module-mxpic.components.geometry.curves", false]], "mxpic.components.geometry.polygons": [[13, "module-mxpic.components.geometry.polygons", false]], "mxpic.components.geometry.racetrack": [[14, "module-mxpic.components.geometry.racetrack", false]], "mxpic.components.geometry.rings": [[15, "module-mxpic.components.geometry.rings", false]], "mxpic.components.others.simulation.dualportelements": [[18, "module-mxpic.components.others.simulation.DualPortElements", false]], "mxpic.components.pins": [[20, "module-mxpic.components.pins", false]], "mxpic.components.primitives.active.dev_ps": [[22, "module-mxpic.components.primitives.active.dev_ps", false]], "mxpic.components.primitives.active.pin_wg": [[24, "module-mxpic.components.primitives.active.pin_wg", false]], "mxpic.components.primitives.active.rings": [[25, "module-mxpic.components.primitives.active.rings", false]], "mxpic.components.primitives.ec_dual_layer_px3": [[21, "module-mxpic.components.primitives.EC_dual_layer_px3", false]], "mxpic.components.primitives.grating_couplers": [[26, "module-mxpic.components.primitives.grating_couplers", false]], "mxpic.components.primitives.passive.crows": [[28, "module-mxpic.components.primitives.passive.crows", false]], "mxpic.components.primitives.passive.rings": [[30, "module-mxpic.components.primitives.passive.rings", false]], "mxpic.components.primitives.passive.unit": [[31, "module-mxpic.components.primitives.passive.unit", false]], "mxpic.components.primitives.pic.bragg": [[34, "module-mxpic.components.primitives.pic.bragg", false]], "mxpic.components.primitives.pic.couplers": [[35, "module-mxpic.components.primitives.pic.couplers", false]], "mxpic.components.primitives.pic.cross": [[36, "module-mxpic.components.primitives.pic.cross", false]], "mxpic.components.primitives.pic.gratings": [[37, "module-mxpic.components.primitives.pic.gratings", false]], "mxpic.components.primitives.pic.mmi": [[39, "module-mxpic.components.primitives.pic.mmi", false]], "mxpic.components.primitives.pic.pbs": [[32, "module-mxpic.components.primitives.pic.PBS", false]], "mxpic.components.primitives.pic.racetrack": [[40, "module-mxpic.components.primitives.pic.racetrack", false]], "mxpic.components.primitives.pic.rings": [[41, "module-mxpic.components.primitives.pic.rings", false]], "mxpic.components.primitives.pic.spiral": [[42, "module-mxpic.components.primitives.pic.spiral", false]], "mxpic.components.primitives.pic.taper": [[43, "module-mxpic.components.primitives.pic.taper", false]], "mxpic.components.primitives.pic.ybs": [[33, "module-mxpic.components.primitives.pic.YBS", false]], "mxpic.components.routing": [[44, "module-mxpic.components.routing", false]], "mzi (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI", false]], "mzi_2st_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend", false]], "mzi_butterfly (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly", false]], "mzi_eubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Eubend", false]], "mzi_mesh_parl (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl", false]], "mzi_mesh_tri (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri", false]], "mzi_mesh_u (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U", false]], "mzi_ns (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS", false]], "mzi_ns_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend", false]], "mzi_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Ubend", false]], "nano_ant (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant", false]], "opt_euler() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle.opt_euler", false]], "pad (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.PAD", false]], "pads (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.PADs", false]], "pbs_3wg (class in mxpic.components.primitives.pic.pbs)": [[32, "mxpic.components.primitives.pic.PBS.PBS_3wg", false]], "pin_mrr_mm_adddrop (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.PIN_MRR_MM_Adddrop", false]], "pin_mrr_mm_allpass (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.PIN_MRR_MM_Allpass", false]], "pin_mrr_std_allpass (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.PIN_MRR_STD_Allpass", false]], "portparas() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.PortParas", false]], "ps_2st (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.PS_2st", false]], "ps_2st_straight (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.PS_2st_Straight", false]], "ps_pin (class in mxpic.components.primitives.active.dev_ps)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN", false]], "psr (class in mxpic.components.primitives.pic.taper)": [[43, "mxpic.components.primitives.pic.taper.PSR", false]], "psr_1x2 (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.PSR_1x2", false]], "racetrack (class in mxpic.components.geometry.racetrack)": [[14, "mxpic.components.geometry.racetrack.Racetrack", false]], "racetrack_mm_adddrop (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_MM_Adddrop", false]], "racetrack_mm_allpass (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_MM_Allpass", false]], "racetrack_std_allpass (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass", false]], "racetrackresonator (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.RacetrackResonator", false]], "resonator (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.RESONATOR", false]], "ring_bus_wg (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.ring_bus_wg", false]], "ring_phase (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.RING_PHASE", false]], "route (class in mxpic.components.primitives.active.dev_ps)": [[22, "mxpic.components.primitives.active.dev_ps.Route", false]], "route (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.Route", false]], "route (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.Route", false]], "route (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Route", false]], "route (class in mxpic.components.routing)": [[44, "mxpic.components.routing.Route", false]], "rt_bend() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.rt_bend", false]], "rt_bend() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.rt_bend", false]], "sbend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.sbend_p2p", false]], "sbend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.sbend_p2p", false]], "sbend_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.sbend_p2p_mine", false]], "sbend_p2p_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.sbend_p2p_mine", false]], "sbend_route() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.sbend_route", false]], "sbend_route() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.sbend_route", false]], "simudatafigureplot() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.SimuDataFigurePlot", false]], "socr (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR", false]], "socr_adiabatic (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic", false]], "socr_adiabatic_cband (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic_Cband", false]], "socr_cband (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Cband", false]], "spiral (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.spiral", false]], "spiral_cicle_mm (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM", false]], "spiral_cicle_std (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD", false]], "spiral_circle (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle", false]], "spiral_rect_std (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.Spiral_Rect_STD", false]], "spiral_rectangle (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.spiral_rectangle", false]], "splittingtree (class in mxpic.components.composites.spttree)": [[5, "mxpic.components.composites.SptTree.SplittingTree", false]], "std_crow_v (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V", false]], "std_pic_rings (class in mxpic.components.primitives.pic.rings)": [[41, "mxpic.components.primitives.pic.rings.STD_PIC_Rings", false]], "std_ring_amzi_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop", false]], "std_ring_pin (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.STD_Ring_PIN", false]], "strt() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt", false]], "strt() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt", false]], "strt_bend_strt_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_bend_strt_p2p_mine", false]], "strt_bend_strt_p2p_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_bend_strt_p2p_mine", false]], "strt_mm() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_mm", false]], "strt_mm() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_mm", false]], "strt_mm_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_mm_p2p", false]], "strt_mm_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_mm_p2p", false]], "strt_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_p2p", false]], "strt_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_p2p", false]], "strt_round_courner (class in mxpic.components.geometry.polygons)": [[13, "mxpic.components.geometry.polygons.strt_round_courner", false]], "szvia (mxpic.components.electronics.eic_units.vias attribute)": [[8, "mxpic.components.electronics.eic_units.Vias.szVia", false]], "taper (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Taper", false]], "taper() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.taper", false]], "taper() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.taper", false]], "taper_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.taper_p2p", false]], "taper_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.taper_p2p", false]], "taper_xs2xs (class in mxpic.components.primitives.pic.taper)": [[43, "mxpic.components.primitives.pic.taper.taper_xs2xs", false]], "transition (class in mxpic.components.primitives.pic.taper)": [[43, "mxpic.components.primitives.pic.taper.transition", false]], "tube_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.tube_mine", false]], "tube_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.tube_mine", false]], "tuple_to_complex() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.tuple_to_complex", false]], "ubend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.ubend_p2p", false]], "ubend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.ubend_p2p", false]], "ubend_route() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.ubend_route", false]], "ubend_route() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.ubend_route", false]], "umat_2x2_s (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S", false]], "vias (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.Vias", false]], "vias_arc (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.Vias_arc", false]], "w_waveguide (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide", false]], "waveguide (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.waveguide", false]], "waveguide_pin (class in mxpic.components.primitives.active.pin_wg)": [[24, "mxpic.components.primitives.active.pin_wg.waveguide_PIN", false]], "wgdoped (class in mxpic.components.primitives.active.pin_wg)": [[24, "mxpic.components.primitives.active.pin_wg.WGDoped", false]], "ybranch (class in mxpic.components.primitives.pic.ybs)": [[33, "mxpic.components.primitives.pic.YBS.YBranch", false]], "ybranch_3wg (class in mxpic.components.primitives.pic.ybs)": [[33, "mxpic.components.primitives.pic.YBS.Ybranch_3wg", false]]}, "objects": {"mxpic.components": [[1, 0, 0, "-", "basic"], [10, 0, 0, "-", "gds_devices"], [20, 0, 0, "-", "pins"], [44, 0, 0, "-", "routing"]], "mxpic.components.composites": [[2, 0, 0, "-", "LoopMirror"], [3, 0, 0, "-", "MZI"], [4, 0, 0, "-", "MZI_mesh"], [5, 0, 0, "-", "SptTree"], [6, 0, 0, "-", "advance"]], "mxpic.components.composites.LoopMirror": [[2, 1, 1, "", "LoopMirror"]], "mxpic.components.composites.LoopMirror.LoopMirror": [[2, 2, 1, "", "cell"]], "mxpic.components.composites.MZI": [[3, 1, 1, "", "MZI"], [3, 1, 1, "", "MZI_2st_ubend"], [3, 1, 1, "", "MZI_Butterfly"], [3, 1, 1, "", "MZI_Eubend"], [3, 1, 1, "", "MZI_NS"], [3, 1, 1, "", "MZI_NS_ubend"], [3, 1, 1, "", "MZI_Ubend"]], "mxpic.components.composites.MZI.MZI": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_2st_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Butterfly": [[3, 2, 1, "", "cell"], [3, 3, 1, "", "generate_gds"], [3, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI.MZI_Eubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh": [[4, 1, 1, "", "AMZI_W"], [4, 1, 1, "", "MZI_mesh_Parl"], [4, 1, 1, "", "MZI_mesh_Tri"], [4, 1, 1, "", "MZI_mesh_U"], [4, 1, 1, "", "UMat_2x2_S"], [4, 1, 1, "", "W_waveguide"]], "mxpic.components.composites.MZI_mesh.AMZI_W": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"], [4, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_U": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.UMat_2x2_S": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.W_waveguide": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.SptTree": [[5, 1, 1, "", "SplittingTree"]], "mxpic.components.composites.SptTree.SplittingTree": [[5, 2, 1, "", "cell"], [5, 3, 1, "", "generate_gds"]], "mxpic.components.electronics": [[8, 0, 0, "-", "eic_units"]], "mxpic.components.electronics.eic_units": [[8, 1, 1, "", "ISL"], [8, 1, 1, "", "PAD"], [8, 1, 1, "", "PADs"], [8, 1, 1, "", "Vias"], [8, 1, 1, "", "Vias_arc"]], "mxpic.components.electronics.eic_units.PAD": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.PADs": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.Vias": [[8, 3, 1, "", "generate_gds"], [8, 2, 1, "", "szVia"]], "mxpic.components.gds_devices": [[10, 1, 1, "", "gds_lib_load"], [10, 4, 1, "", "generate_gds_lib"]], "mxpic.components.gds_devices.gds_lib_load": [[10, 3, 1, "", "add_pin"]], "mxpic.components.geometry": [[11, 0, 0, "-", "curves"], [13, 0, 0, "-", "polygons"], [14, 0, 0, "-", "racetrack"], [15, 0, 0, "-", "rings"]], "mxpic.components.geometry.curves": [[11, 1, 1, "", "Clothoid"], [11, 1, 1, "", "Conchoid"]], "mxpic.components.geometry.curves.Clothoid": [[11, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.polygons": [[13, 1, 1, "", "strt_round_courner"]], "mxpic.components.geometry.racetrack": [[14, 1, 1, "", "Racetrack"]], "mxpic.components.geometry.racetrack.Racetrack": [[14, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings": [[15, 1, 1, "", "Elipse"], [15, 1, 1, "", "Elipse_dual"], [15, 1, 1, "", "circle"], [15, 1, 1, "", "hole"], [15, 1, 1, "", "mx_bend"]], "mxpic.components.geometry.rings.Elipse": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings.Elipse_dual": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.others.simulation": [[18, 0, 0, "-", "DualPortElements"]], "mxpic.components.others.simulation.DualPortElements": [[18, 4, 1, "", "DEVICE_2X2_FDTD_INIT"], [18, 1, 1, "", "DEVICE_COUPLER"], [18, 1, 1, "", "DEVICE_PORTS"], [18, 1, 1, "", "DEVICE_RING_BUS"], [18, 1, 1, "", "EULER_CROW_BUS"], [18, 1, 1, "", "EULER_CROW_INTER_CP"], [18, 4, 1, "", "MonitorParas"], [18, 4, 1, "", "PortParas"], [18, 1, 1, "", "RESONATOR"], [18, 1, 1, "", "RING_PHASE"], [18, 4, 1, "", "SimuDataFigurePlot"], [18, 4, 1, "", "tuple_to_complex"]], "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS": [[18, 2, 1, "", "FolderPath"]], "mxpic.components.primitives": [[21, 0, 0, "-", "EC_dual_layer_px3"], [26, 0, 0, "-", "grating_couplers"]], "mxpic.components.primitives.EC_dual_layer_px3": [[21, 1, 1, "", "EC_dual_layer_px3"]], "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3": [[21, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active": [[22, 0, 0, "-", "dev_ps"], [24, 0, 0, "-", "pin_wg"], [25, 0, 0, "-", "rings"]], "mxpic.components.primitives.active.dev_ps": [[22, 1, 1, "", "Heater_NDoped"], [22, 1, 1, "", "PS_PIN"], [22, 1, 1, "", "Route"]], "mxpic.components.primitives.active.dev_ps.Heater_NDoped": [[22, 3, 1, "", "generate_gds"], [22, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.active.dev_ps.PS_PIN": [[22, 2, 1, "", "cell"], [22, 3, 1, "", "generate_gds"], [22, 3, 1, "", "generate_mzi_gds"]], "mxpic.components.primitives.active.pin_wg": [[24, 1, 1, "", "WGDoped"], [24, 1, 1, "", "waveguide_PIN"]], "mxpic.components.primitives.active.pin_wg.WGDoped": [[24, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.pin_wg.waveguide_PIN": [[24, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.rings": [[25, 1, 1, "", "AED_Ring_PIN"], [25, 1, 1, "", "PIN_MRR_MM_Adddrop"], [25, 1, 1, "", "PIN_MRR_MM_Allpass"], [25, 1, 1, "", "PIN_MRR_STD_Allpass"], [25, 1, 1, "", "Route"], [25, 1, 1, "", "STD_Ring_PIN"]], "mxpic.components.primitives.active.rings.AED_Ring_PIN": [[25, 3, 1, "", "generate_imp_gds"]], "mxpic.components.primitives.grating_couplers": [[26, 1, 1, "", "GC_SiN_Si_Dual_Layer"]], "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer": [[26, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive": [[28, 0, 0, "-", "crows"], [30, 0, 0, "-", "rings"], [31, 0, 0, "-", "unit"]], "mxpic.components.primitives.passive.crows": [[28, 1, 1, "", "CROW_AED"], [28, 1, 1, "", "CROW_Circular_ring"], [28, 1, 1, "", "CROW_Eul_RCK"], [28, 1, 1, "", "CROW_Eul_Ring"], [28, 1, 1, "", "CROW_STD_Adddrop"], [28, 1, 1, "", "CROW_STD_Allpass"], [28, 1, 1, "", "STD_CROW_V"]], "mxpic.components.primitives.passive.crows.STD_CROW_V": [[28, 2, 1, "", "A_ht"], [28, 3, 1, "", "generate_eic_gds"], [28, 3, 1, "", "generate_pic_gds"]], "mxpic.components.primitives.passive.rings": [[30, 1, 1, "", "MRR_AED"], [30, 1, 1, "", "MRR_DW_Adddrop"], [30, 1, 1, "", "MRR_DW_Allpass"], [30, 1, 1, "", "MRR_MM_Adddrop"], [30, 1, 1, "", "MRR_MM_Allpass"], [30, 1, 1, "", "MRR_STD_Adddrop"], [30, 1, 1, "", "MRR_STD_Allpass"], [30, 1, 1, "", "MRR_STD_Ring"], [30, 1, 1, "", "Route"], [30, 1, 1, "", "SOCR"], [30, 1, 1, "", "SOCR_Adiabatic"], [30, 1, 1, "", "SOCR_Adiabatic_Cband"], [30, 1, 1, "", "SOCR_Cband"], [30, 1, 1, "", "STD_ring_AMZI_adddrop"]], "mxpic.components.primitives.passive.rings.MRR_AED": [[30, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.passive.rings.Route": [[30, 3, 1, "", "bend_mine"], [30, 3, 1, "", "bend_p2p"], [30, 3, 1, "", "bend_route"], [30, 3, 1, "", "bend_route_p2p"], [30, 3, 1, "", "bend_strt_bend_p2p"], [30, 3, 1, "", "bend_strt_bend_p2p_mine"], [30, 3, 1, "", "connPatch"], [30, 3, 1, "", "line_mm"], [30, 3, 1, "", "rt_bend"], [30, 3, 1, "", "sbend_p2p"], [30, 3, 1, "", "sbend_p2p_mine"], [30, 3, 1, "", "sbend_route"], [30, 3, 1, "", "strt"], [30, 3, 1, "", "strt_bend_strt_p2p_mine"], [30, 3, 1, "", "strt_mm"], [30, 3, 1, "", "strt_mm_p2p"], [30, 3, 1, "", "strt_p2p"], [30, 3, 1, "", "taper"], [30, 3, 1, "", "taper_p2p"], [30, 3, 1, "", "tube_mine"], [30, 3, 1, "", "ubend_p2p"], [30, 3, 1, "", "ubend_route"]], "mxpic.components.primitives.passive.rings.SOCR": [[30, 3, 1, "", "generate_2pi_gds"], [30, 3, 1, "", "generate_eic_part"], [30, 3, 1, "", "generate_gds"], [30, 3, 1, "", "generate_pic_part"], [30, 3, 1, "", "generate_test_gds"], [30, 3, 1, "", "generate_test_mzi_gds"]], "mxpic.components.primitives.passive.rings.SOCR_Adiabatic": [[30, 3, 1, "", "generate_eic_part"], [30, 3, 1, "", "generate_gds"], [30, 3, 1, "", "generate_pic_part"]], "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop": [[30, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit": [[31, 1, 1, "", "Brag_WDM"], [31, 1, 1, "", "PSR_1x2"], [31, 1, 1, "", "PS_2st"], [31, 1, 1, "", "PS_2st_Straight"], [31, 1, 1, "", "waveguide"]], "mxpic.components.primitives.passive.unit.Brag_WDM": [[31, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PSR_1x2": [[31, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PS_2st": [[31, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit.PS_2st_Straight": [[31, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic": [[32, 0, 0, "-", "PBS"], [33, 0, 0, "-", "YBS"], [34, 0, 0, "-", "bragg"], [35, 0, 0, "-", "couplers"], [36, 0, 0, "-", "cross"], [37, 0, 0, "-", "gratings"], [39, 0, 0, "-", "mmi"], [40, 0, 0, "-", "racetrack"], [41, 0, 0, "-", "rings"], [42, 0, 0, "-", "spiral"], [43, 0, 0, "-", "taper"]], "mxpic.components.primitives.pic.PBS": [[32, 1, 1, "", "PBS_3wg"]], "mxpic.components.primitives.pic.PBS.PBS_3wg": [[32, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS": [[33, 1, 1, "", "YBranch"], [33, 1, 1, "", "Ybranch_3wg"]], "mxpic.components.primitives.pic.YBS.YBranch": [[33, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS.Ybranch_3wg": [[33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.bragg": [[34, 1, 1, "", "Bragg"], [34, 1, 1, "", "Bragg_apodized"]], "mxpic.components.primitives.pic.bragg.Bragg_apodized": [[34, 3, 1, "", "generate_negative"], [34, 3, 1, "", "generate_positive"]], "mxpic.components.primitives.pic.couplers": [[35, 1, 1, "", "ADC_STD_2x2"], [35, 1, 1, "", "BS_tdc"], [35, 1, 1, "", "DC"], [35, 1, 1, "", "DC_bend"], [35, 1, 1, "", "DC_pX_3sg"], [35, 1, 1, "", "MDM"], [35, 1, 1, "", "ring_bus_wg"]], "mxpic.components.primitives.pic.couplers.ADC_STD_2x2": [[35, 3, 1, "", "generate_err"], [35, 3, 1, "", "generate_gds"], [35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC": [[35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_bend": [[35, 3, 1, "", "generate_gds"], [35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_pX_3sg": [[35, 3, 1, "", "generate_gds"], [35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.MDM": [[35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.ring_bus_wg": [[35, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.cross": [[36, 1, 1, "", "Cross"], [36, 1, 1, "", "Cross_Sine"]], "mxpic.components.primitives.pic.cross.Cross": [[36, 3, 1, "", "generate_gds"], [36, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings": [[37, 1, 1, "", "FA"], [37, 1, 1, "", "GC_STD_1D"], [37, 1, 1, "", "GC_STD_2D"], [37, 1, 1, "", "Grating_2D_Hole"], [37, 1, 1, "", "Grating_2D_Hole_3Rec"], [37, 1, 1, "", "Grating_2D_Hole_4Rec"], [37, 1, 1, "", "Nano_ant"], [37, 1, 1, "", "Taper"]], "mxpic.components.primitives.pic.gratings.GC_STD_1D": [[37, 3, 1, "", "generate_negative"], [37, 3, 1, "", "generate_positive"], [37, 3, 1, "", "generate_test_dev"]], "mxpic.components.primitives.pic.gratings.GC_STD_2D": [[37, 3, 1, "", "generate_negative"], [37, 3, 1, "", "generate_positive"], [37, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Nano_ant": [[37, 3, 1, "", "generate_gds"], [37, 3, 1, "", "generate_gds_error"], [37, 3, 1, "", "generate_gds_positive"]], "mxpic.components.primitives.pic.gratings.Taper": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.mmi": [[39, 1, 1, "", "MMI_ML"], [39, 1, 1, "", "MMI_STD"]], "mxpic.components.primitives.pic.mmi.MMI_ML": [[39, 3, 1, "", "generate_gds"], [39, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.racetrack": [[40, 1, 1, "", "RacetrackResonator"], [40, 1, 1, "", "Racetrack_MM_Adddrop"], [40, 1, 1, "", "Racetrack_MM_Allpass"], [40, 1, 1, "", "Racetrack_STD_Allpass"], [40, 1, 1, "", "Route"]], "mxpic.components.primitives.pic.racetrack.RacetrackResonator": [[40, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass": [[40, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.pic.rings": [[41, 1, 1, "", "AED_ring"], [41, 1, 1, "", "STD_PIC_Rings"]], "mxpic.components.primitives.pic.rings.AED_ring": [[41, 3, 1, "", "generate_pic_gds"], [41, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.spiral": [[42, 1, 1, "", "Spiral_Cicle_MM"], [42, 1, 1, "", "Spiral_Cicle_STD"], [42, 1, 1, "", "Spiral_Rect_STD"], [42, 1, 1, "", "spiral"], [42, 1, 1, "", "spiral_circle"], [42, 1, 1, "", "spiral_rectangle"]], "mxpic.components.primitives.pic.spiral.spiral": [[42, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.spiral.spiral_circle": [[42, 2, 1, "", "cell"], [42, 3, 1, "", "generate_gds"], [42, 3, 1, "", "opt_euler"]], "mxpic.components.primitives.pic.spiral.spiral_rectangle": [[42, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.taper": [[43, 1, 1, "", "PSR"], [43, 1, 1, "", "taper_xs2xs"], [43, 1, 1, "", "transition"]], "mxpic.components.routing": [[44, 1, 1, "", "Route"], [44, 4, 1, "", "ic_exception"]], "mxpic.components.routing.Route": [[44, 3, 1, "", "bend_mine"], [44, 3, 1, "", "bend_p2p"], [44, 3, 1, "", "bend_route"], [44, 3, 1, "", "bend_route_p2p"], [44, 3, 1, "", "bend_strt_bend_p2p"], [44, 3, 1, "", "bend_strt_bend_p2p_mine"], [44, 3, 1, "", "connPatch"], [44, 3, 1, "", "line_mm"], [44, 3, 1, "", "rt_bend"], [44, 3, 1, "", "sbend_p2p"], [44, 3, 1, "", "sbend_p2p_mine"], [44, 3, 1, "", "sbend_route"], [44, 3, 1, "", "strt"], [44, 3, 1, "", "strt_bend_strt_p2p_mine"], [44, 3, 1, "", "strt_mm"], [44, 3, 1, "", "strt_mm_p2p"], [44, 3, 1, "", "strt_p2p"], [44, 3, 1, "", "taper"], [44, 3, 1, "", "taper_p2p"], [44, 3, 1, "", "tube_mine"], [44, 3, 1, "", "ubend_p2p"], [44, 3, 1, "", "ubend_route"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function"}, "terms": {"": [30, 44], "0": [2, 3, 4, 8, 10, 11, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "001": [11, 14, 15, 41], "01": [39, 40, 41, 43], "02": 35, "05": [15, 30, 42], "1": [3, 8, 11, 13, 18, 21, 22, 24, 25, 28, 30, 31, 33, 34, 35, 36, 37, 39, 42, 43, 44], "10": [3, 4, 5, 8, 11, 13, 14, 15, 24, 25, 28, 30, 31, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "100": [8, 14, 21, 22, 24, 30, 35], "10000": 11, "10001": 18, "101": 18, "11": [8, 32], "110": 37, "12": 21, "120": 8, "120degre": [], "1310nm": [], "140": 31, "15": [3, 4, 21, 28, 31, 33, 34, 35, 40, 43], "150": [3, 31], "1500nm": [], "1550nm": [], "16": 5, "1600nm": [], "18": [33, 41], "180": [25, 42], "1by": [], "1d": 37, "1um": [], "1x2": 31, "2": [4, 8, 18, 21, 22, 24, 25, 26, 30, 31, 33, 35, 36, 37, 39, 40, 41, 42, 43, 44], "20": [2, 4, 11, 22, 25, 28, 30, 31, 32, 33, 35, 37, 40, 41, 42, 44], "200": [21, 24, 34], "200nm": [], "2021": [], "2022": [], "2026": [], "22": [18, 35], "25": [4, 24, 26, 32, 37], "250": 30, "270": [25, 30], "28": [], "2d": 37, "2st": 31, "2um": [], "2x2": [4, 35], "3": [4, 8, 15, 18, 25, 28, 30, 32, 33, 34, 36, 37, 39, 44], "30": [3, 4, 24, 25, 26, 28, 30, 31, 35, 37, 40, 41, 43], "300": [35, 37], "33": 35, "35": [24, 25, 28, 35, 39, 41], "360": 15, "38": 28, "3db": [], "3rec": 37, "3sg": 35, "3um": [], "3wg": [32, 33], "4": [11, 18, 24, 25, 26, 28, 30, 33, 36, 37, 44], "40": [3, 26, 30, 31, 35, 43, 44], "400": [21, 33, 35, 36], "41": 37, "45": [2, 3, 4, 10, 11, 15, 21, 22, 25, 28, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43], "450nm": [], "4rec": 37, "5": [3, 4, 8, 11, 13, 14, 18, 22, 24, 26, 28, 30, 31, 32, 34, 35, 36, 37, 39, 42, 43, 44], "50": [4, 8, 21, 30, 31, 37, 39, 40, 42, 44], "500": 22, "510nm": [], "55": [25, 30, 31, 32, 35, 41, 43], "57": 37, "5um": [], "6": [4, 15, 18, 21, 25, 30, 33, 36, 37], "60": [8, 22], "61": 35, "64": [8, 13, 35], "65": [25, 28, 41], "7": [31, 32], "75": 3, "8": [4, 8, 21, 24, 25, 28, 31, 33, 35, 37], "80": [4, 8, 33, 35], "800": 22, "88": 35, "9": [25, 26, 30, 31, 41], "90": [8, 22, 25, 30, 40, 44], "908": [], "913": [], "96": [], "A": [11, 35], "AED": [25, 28, 30, 41], "If": [2, 3, 4, 5, 30, 44], "The": [30, 44], "_description_": 24, "_type_": 24, "a0": [], "a1": [5, 18], "a1_att": [28, 30, 40, 41], "a1_cp": [28, 30, 40, 41], "a2": 18, "a2_att": [28, 30, 40, 41], "a2_cp": [28, 30, 40, 41], "a_anti": 35, "a_anti_rfl": 26, "a_att": [25, 28, 30, 33, 40], "a_bend": 32, "a_cp": [25, 28, 30, 40], "a_gc_tap": 26, "a_ht": [25, 28, 30], "a_imp_in": 25, "a_imp_out": 25, "a_tap": 37, "abandon": 22, "absent": 8, "account": [30, 44], "activ": [16, 27], "acut": [], "ad": [4, 30, 37, 44], "adapt": [], "adapt_width": [22, 25, 30, 40, 44], "adapt_x": [22, 25, 30, 40, 44], "adc": 35, "adc_std_2x2": 38, "add": [2, 3, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "add_pin": 10, "adddrop": [25, 28, 30, 40], "adiabat": [21, 30], "adjac": [], "advanc": [7, 16], "aed_r": [30, 38], "aed_ring_pin": 23, "after": [], "air": 21, "air_trench": 21, "al": [], "align": [4, 30, 44], "all": [30, 44], "allpass": [25, 28, 30, 40], "alon": [], "along": 4, "alreadi": 30, "altern": [], "amax": [30, 44], "amf": [], "amf_ipkiss_pdk": [], "amf_pdk": [], "amzi": [4, 30], "amzi_w": 7, "an": [30, 44], "analysi": 37, "angl": [2, 15, 21, 22, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41, 44], "angle_til": 21, "ani": [2, 3, 4, 5, 24, 25, 28, 30, 31, 35, 37, 40, 41, 42], "anoth": [30, 44], "antenna": [], "anti": [], "apertur": [], "apod": 34, "aport": 18, "append": [], "appli": 44, "ar": 5, "arc": [], "area": 8, "arg": 15, "arm": [3, 4], "arm_sine_width": 39, "around": [2, 3], "arrai": 37, "arrow": [30, 44], "assembl": [], "associ": 21, "assum": [30, 44], "asymmetr": [3, 4], "attach": [30, 44], "attribut": 5, "auto": [], "autom": 0, "automat": [30, 44], "avoid": [30, 44], "axi": [], "b": [2, 3, 4, 34, 35], "b1": [5, 18], "b2": [5, 18], "back": 21, "balanc": [30, 44], "band": 30, "base": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "basic": [0, 16], "bdc": [], "beam": [2, 3, 4], "beam_splitt": [], "befor": [30, 44], "begin": [30, 44], "begin_flat": 11, "behavior": 4, "bend": [2, 3, 4, 5, 15, 21, 30, 35, 42, 44], "bend_cel": 14, "bend_dc": 35, "bend_heat": 4, "bend_min": [30, 44], "bend_p2p": [30, 44], "bend_radiu": 5, "bend_rout": [30, 44], "bend_route_p2p": [30, 44], "bend_straight_bend_p2p": [30, 44], "bend_strt_bend": [30, 44], "bend_strt_bend_p2p": [30, 44], "bend_strt_bend_p2p_min": [30, 44], "bendendflag": [30, 44], "bent": 4, "beol": 21, "between": [3, 4, 5, 21, 24, 25, 28, 30, 31, 40, 44], "binari": 5, "block": 6, "bodi": [], "bool": [2, 3, 4, 5, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "boolean": [], "both": [3, 4], "box": [5, 21], "brag": 31, "brag_wdm": 29, "bragg": [27, 31, 38], "bragg_apod": 38, "branch": 5, "broadband": 35, "broadcast": [], "bs1": 3, "bs2": 3, "bs3": 3, "bs_tdc": 38, "bsb": [30, 44], "bu": [3, 4, 28, 35], "build": [6, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "built": [2, 4, 5], "bus_dop": 25, "bus_ord": 28, "butterfli": 3, "c": 30, "calcul": [], "can": [15, 30, 37, 44], "cband": [], "cell": [2, 3, 4, 5, 10, 13, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "cell_attribut": 41, "cell_nam": [10, 22, 30, 37], "cell_transit": [], "cell_xs_transit": [24, 25, 30, 40, 41, 42], "cellnam": 35, "cellsreus": 10, "center": 15, "central": [21, 42], "chamfer": [30, 44], "channel": 5, "chip": 21, "cicl": 42, "circl": [12, 35, 37, 42], "circular": [15, 28, 35], "circumscrib": [], "clad": [2, 3, 21, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "cladmateri": 18, "class": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "clear": 21, "clothoid": 12, "clothoid_ord": 35, "code": [30, 44], "coerc": 5, "column": [], "common": 4, "compact": 3, "compens": [3, 4], "complet": [], "compon": [7, 9, 12, 17, 19, 23, 27, 29, 38], "composit": [0, 16, 28, 31], "conchoid": 12, "condit": 44, "configur": [], "connect": [28, 30, 44], "connpatch": [30, 44], "constant": [], "constraint": [], "contact": 4, "contain": [], "continu": [25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "contrast": 21, "control": [], "conveni": [3, 6], "convert": 21, "core": 21, "corner": [25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "correspond": [], "cosin": [], "count": [37, 39, 42], "coupl": [21, 30], "coupler": [2, 21, 27, 37, 38], "cp": [30, 44], "creat": [26, 30, 44], "cross": [2, 3, 4, 21, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43], "cross_nam": 8, "cross_sin": 38, "crow": [6, 27, 29], "crow_a": 29, "crow_circular_r": 29, "crow_custom": 28, "crow_eul_r": 29, "crow_eul_rck": 29, "crow_std_adddrop": 29, "crow_std_allpass": 29, "crx_te_1310": [], "crx_te_1550": [], "ct_pitch": 22, "cubic": [], "cumec": [], "cumec_csip130cu": [], "cumec_pdk": [], "cumec_sip130cu_pdk": [], "curv": [12, 16], "curvatur": 21, "custom": [], "cycl": 42, "d2wg_list": 22, "d_arm": [3, 4], "d_hole": [], "d_port": [3, 4], "da_tran": 35, "dac": [28, 30, 35], "dc": [3, 4, 38], "dc_bend": 38, "dc_bend_20_80_cband": [], "dc_bend_4_96_cband": [], "dc_bend_50_50_cband": [], "dc_px3_50_50_cband": [], "dc_px_3sg": 38, "dc_te_1550": [], "debug": [], "deep": 21, "default": [2, 3, 4, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "defin": 37, "define_typ": 37, "definit": [24, 25, 28, 30, 31, 40], "deflect": [], "degre": [2, 21, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41], "demultiplex": 31, "depend": [24, 25, 30, 40, 41, 42], "depth": [], "deriv": [], "describ": [30, 44], "design": 30, "detail": [], "detch": [], "determin": [], "dev_nam": 18, "dev_p": [23, 27], "devic": [18, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "device_2x2_fdtd_init": 19, "device_coupl": 19, "device_port": 19, "device_ring_bu": 19, "devnam": 18, "diamet": [], "differ": [], "differenti": [3, 4], "diffract": [], "dimens": 21, "direct": [2, 30, 35, 44], "directional_coupl": [], "disabl": [3, 4], "disconnect": [30, 44], "discret": [], "disk": 15, "distanc": 3, "divis": [], "dl": [3, 4], "dl_amzi": [3, 4], "dl_arm": 30, "dl_cal": 11, "dl_ht": 4, "dl_p2p": [25, 28, 30, 35, 40, 41], "dl_tran": 35, "dl_wg": 11, "dlc": 35, "dlx": [14, 28, 40], "dly": [14, 28, 40], "dmin": 42, "do": [], "doc": [22, 25, 30, 40, 44], "document": 0, "doe": [30, 44], "dofirst": [30, 44], "dope": 22, "dope_offset": 24, "dope_ovlp": 24, "dostrfirst": [30, 44], "dp_in": 39, "dp_out": 39, "draw": [3, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "dt": 34, "dual": [21, 26], "dual_bu": 25, "dual_ht": 3, "dualportel": [17, 19], "dummi": 21, "dure": 3, "duti": [], "duty_cycl": 37, "dw": [30, 35], "dw_toler": 43, "dx": 18, "dx_gc2gc": [33, 35, 36, 37, 39, 41], "dx_hole": [15, 37], "dx_offset": 31, "dxgc2gc": [3, 4], "dy": 18, "dy_gc2gc": [33, 35, 39, 41], "dy_hol": [15, 37], "dygc2gc": [3, 4], "dz": 18, "e": 21, "each": 4, "eas": [], "ec_1550": [], "ec_dual_layer_px3": [16, 27], "ec_te_1550": [], "edg": [8, 21], "edge1": [30, 44], "edge2": [30, 44], "edgepoint": [30, 44], "effici": [], "eic_unit": [9, 16], "either": [], "electr": [25, 28, 30, 31], "electron": [0, 16], "element": [30, 44], "elips": 12, "elipse_du": 12, "ellipt": 15, "enabl": 4, "end": [15, 30, 44], "end_angl": [30, 44], "end_patch": [11, 35], "enforc": [], "entir": [], "entranc": [], "entri": [], "epin_di": 30, "epin_dx": 30, "epin_ht_di": 25, "epin_ht_dx": 25, "equal": [], "err": 35, "err_asi": 33, "et": [], "eta_d": 34, "eta_etch": [34, 37], "etch": 37, "etch_depth": 37, "etch_shap": 34, "etch_typ": [34, 37], "eul": 28, "euler": [3, 35], "euler_anti_bend": 35, "euler_bend": [31, 42], "euler_crow_bu": 19, "euler_crow_inter_cp": 19, "euler_point": 35, "euler_sbend": 42, "euler_transist": 35, "euler_trasit": [25, 28, 30, 40, 41], "evalu": [], "everi": [], "exactli": [], "exampl": [30, 44], "except": 44, "exclus": 21, "excurs": 4, "exit": [], "expect": [], "explicit": 4, "export": 6, "export_plt": [30, 44], "expos": [], "extens": 21, "extern": [], "extra": [30, 44], "f": [30, 44], "fa": 38, "fabric": 35, "facet": 21, "fallback": [30, 44], "fals": [3, 4, 5, 8, 11, 15, 18, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "fan": [], "fanout": [], "fcw_tre": 37, "fdtd": 18, "fdtd_height": 18, "fdtdbuild": 18, "featur": [2, 3], "feed": [], "fetch": [34, 37], "fiber": [21, 37], "fiber_coupl": 37, "field": [], "field_sampl": 18, "file": 15, "fill": [], "filler": [], "final": 21, "final_flat": 11, "first": [3, 21, 30, 44], "float": [2, 3, 4, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44], "fold": 3, "folderpath": 18, "follow": [], "footprint": [], "forc": [], "form": [], "four": [], "fraction": [], "from": [2, 4, 5, 30, 44], "function": [30, 44], "futur": 37, "g": [21, 30, 44], "g0": 35, "g1": 35, "gaolei": [], "gap": [24, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41, 42, 44], "gap0": 35, "gap1": [28, 30, 35, 40, 41], "gap2": [28, 30, 40, 41], "gap_bu": 28, "gap_cp": 28, "gap_crow": 28, "gap_n_i": 25, "gap_p_i": 25, "gap_teeth_si": 26, "gap_teeth_sin": 26, "gc": [3, 4, 22, 26, 30, 31, 33, 35, 36, 37, 39, 41], "gc2gc_dx": 31, "gc2gc_dy": 31, "gc2gc_length": [22, 30], "gc_in": 31, "gc_offset": 22, "gc_sin_si_dual_lay": 27, "gc_std_1d": 38, "gc_std_2d": 38, "gc_te_1310": [], "gc_te_1550": [], "gc_tm_1310": [], "gc_tm_1550": [], "gd": [5, 21, 24, 30, 35, 37], "gds_devic": [0, 16], "gds_lib_gener": [], "gds_lib_load": 16, "ge": [], "gener": [2, 3, 4, 5, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "generate_2pi_gd": 30, "generate_eic_gd": [28, 30, 40], "generate_eic_part": 30, "generate_err": 35, "generate_gd": [3, 4, 5, 8, 11, 14, 15, 21, 22, 24, 26, 30, 31, 32, 33, 35, 36, 37, 39, 40, 42], "generate_gds_error": 37, "generate_gds_lib": 16, "generate_gds_posit": 37, "generate_imp_gd": 25, "generate_mzi_gd": 22, "generate_neg": [34, 37], "generate_pic_gd": [28, 41], "generate_pic_part": 30, "generate_posit": [34, 37], "generate_test_dev": 37, "generate_test_gd": [3, 4, 22, 30, 31, 33, 35, 36, 37, 39, 41], "generate_test_mzi_gd": 30, "geo": [30, 44], "geometr": 13, "geometri": [0, 2, 3, 4, 16, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "getch_tr": 37, "give": [30, 44], "glass": 18, "go": 37, "gpd_1550": [], "gpuon": 18, "grate": [27, 31, 38], "grating_2d_hol": 38, "grating_2d_hole_3rec": 38, "grating_2d_hole_4rec": 38, "grating_coupl": [16, 27], "grating_unit": 37, "grid": [4, 30, 44], "gridpatch": [30, 44], "gridsnap": [30, 44], "gt_diamet": 37, "gt_layer": 37, "gt_vector": 37, "guid": [30, 44], "h": [], "half": [], "handl": 3, "heater": [3, 4, 22, 24, 25, 28, 30, 31, 40], "heater_length": 22, "heater_ndop": 23, "heater_width": 22, "height": 18, "helper": [4, 13], "hgl_pdk_a": [], "high": [21, 22], "hole": [12, 37], "hole_shap": [15, 37], "horizont": [], "horsesho": [30, 44], "ht_notch_dual": [25, 30], "ht_rot": 30, "ht_same_sid": 4, "ht_shift": 28, "hu": [], "huang": [], "i": [2, 3, 4, 5, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "ic": [30, 44], "ic_except": 16, "ictyp": [30, 44], "ident": [], "identifi": [21, 24, 25, 26, 28, 30, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43], "if_open": 22, "ignor": [30, 44], "im": [30, 44], "imec": 37, "imecas_pdk": [], "imecas_pdk2": [], "implant": 25, "implement": [], "import": [30, 44], "in_out_align": 42, "includ": [], "index": 21, "individu": [], "info": [30, 44], "inherit": [], "initi": [8, 21], "inner": 3, "innermost": [], "input": [3, 4, 21], "insert": [], "insid": [], "instanc": [26, 30, 44], "instanti": [3, 8, 10, 22, 25, 30, 40, 44], "instead": [], "instrcutpath": 18, "instruct": 18, "int": [3, 4, 5, 22, 24, 25, 28, 30, 31, 32, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "interact": [], "interconnect": [22, 25, 30, 40, 44], "interfac": [3, 4], "interfer": [], "interferomet": [3, 4, 22], "intern": [3, 4], "interpol": [], "introduc": [30, 44], "io": [], "iri": [15, 25, 30, 41], "irx": [15, 25, 30, 41], "isl": [3, 4, 9, 25, 28, 30, 31], "isl_left": 28, "isl_low": 4, "isl_right": 28, "isl_upp": 4, "isol": [3, 4, 25, 28, 30, 31], "its": [30, 44], "jump": [30, 44], "junction": 22, "keep": [], "kei": [], "kr": 11, "l": [3, 30, 33, 36], "l0": 3, "l1": 31, "l12": [3, 31], "l2": 31, "l_ar": 37, "l_arm": [3, 4, 39], "l_attach": 33, "l_box_end": 21, "l_compens": 4, "l_cp": 35, "l_end": [21, 36, 37], "l_end_si": 26, "l_end_sin": 26, "l_field_cent": 37, "l_heater": [4, 31], "l_ht": [3, 24, 31], "l_in": 21, "l_in_tp": 33, "l_inner": 3, "l_mmi": 39, "l_patch": [3, 4], "l_port": 43, "l_tail": 37, "l_taper": [24, 37, 43], "l_tilt": [25, 28, 30, 40, 41], "l_tp": [3, 30, 31], "l_wg": [4, 22, 24, 31], "la": 15, "laid": [], "later": [30, 44], "layer": [11, 13, 14, 15, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "layer_d": 43, "layer_dt": 21, "layer_dum_exl_b": 21, "layer_fetch": 43, "layer_height": 18, "layer_metch": 43, "layer_ox_open": 26, "layer_si_etch": 26, "layer_si_slab": 26, "layer_si_teeth": 26, "layer_sin_etch": 26, "layer_sin_slab": [21, 26], "layer_sin_teeth": 26, "layer_top_cov": 21, "layer_u": 43, "layermap": 10, "layernam": [30, 44], "layout": [2, 3, 4, 5, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "lb": 15, "lb0": 35, "lc1": 35, "lc2": 35, "lcp": [32, 33], "ld": 35, "least": [], "len": [], "length": [3, 4, 8, 13, 21, 24, 25, 26, 28, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43, 44], "length1": [30, 44], "length2": [30, 44], "level": 5, "liang": [], "lib_nam": 10, "lib_path": 10, "libpath": 18, "librari": 0, "like": [], "line_mm": [30, 44], "linear": [30, 37, 44], "link": [], "list": [22, 24, 26, 28, 33, 36, 37, 39, 43], "ll": [30, 44], "lmax": 8, "lmin": 42, "ln": 3, "ln1": 3, "ln2": 3, "locat": 15, "logic": 37, "longer": [30, 44], "longitudin": [], "loop": 2, "loopmirror": [7, 16], "lower": [4, 5], "lower_isl": 31, "lp1": 35, "lpatch": 42, "lport": 42, "lr": [30, 44], "ls1": 3, "ls2": 3, "lstart": [30, 44], "lt": 35, "lt_bu": 35, "lt_cp": 35, "lt_rib": 43, "lt_slab": 43, "ltot": [30, 44], "ltp": [3, 4, 30, 31, 42, 44], "ltp1": [21, 43], "ltp2": [21, 43], "ltp3": 21, "ltp_bu": [25, 28, 30, 40, 41], "ltp_mm": [30, 44], "ltp_port": [24, 42], "ltran": 43, "lu": 35, "lumer": 18, "lumericalpath": 18, "lx_end": 37, "lx_port": 37, "lx_side": 37, "lx_sq": 15, "lx_taper": 37, "ly_end": 37, "ly_port": 37, "ly_sid": 37, "ly_sq": 15, "ly_tap": 37, "mach": [3, 4, 22], "made": [30, 44], "mai": [], "main": [], "manag": 21, "manual": [], "margin": [], "marker": [22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "master": [], "match": [], "materi": 18, "matter": [30, 44], "max_theta": 37, "maximum": [3, 30, 44], "mdm": [31, 38], "mdm_adc_te1_1550": [], "mdm_adc_te2_1550": [], "mdm_adc_te3_1550": [], "mean": [], "measur": [], "mesh": 4, "mesh_ord": 18, "mesh_typ": 4, "metal": [3, 4, 8, 24, 25, 28, 30, 31, 40], "metch": 37, "micrometr": [], "micron": [2, 3, 4, 5, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "mid_offset": 30, "midpoint": 21, "minimum": [3, 42], "mirror": 2, "mitig": [], "ml": 39, "mm": [25, 30, 40, 42], "mm_rout": [30, 44], "mmg_1d_d14um_1550_2mod": [], "mmi": [22, 27, 30, 38], "mmi_1x2_te_1310": [], "mmi_1x2_te_1550": [], "mmi_2x2_te_1310": [], "mmi_2x2_te_1550": [], "mmi_ml": 38, "mmi_sine_width": 39, "mmi_std": 38, "mode": [22, 25, 30, 31, 40, 44], "mode_radiu": 37, "modeidx": 18, "model": [30, 44], "modul": 30, "mohanti": [], "monitor": [], "monitorpara": 19, "mono": [], "mrr": [25, 30], "mrr_a": [25, 29], "mrr_dw_adddrop": 29, "mrr_dw_allpass": 29, "mrr_mm_adddrop": 29, "mrr_mm_allpass": 29, "mrr_std_adddrop": 29, "mrr_std_allpass": 29, "mrr_std_ring": 29, "msg": 44, "multi": [], "multimod": 30, "multimode_interferomet": [], "multiplex": 31, "must": [], "mx_bend": 12, "mx_frame_lib": 15, "mxpic": [7, 9, 12, 16, 17, 19, 23, 27, 29, 38], "mxpic_handbook": [], "myself": [30, 44], "mzi": [4, 7, 16], "mzi_2st_ubend": 7, "mzi_butterfli": 7, "mzi_eubend": 7, "mzi_mesh": [7, 16], "mzi_mesh_parl": 7, "mzi_mesh_tri": 7, "mzi_mesh_u": 7, "mzi_n": 7, "mzi_ns_ubend": 7, "mzi_offset": 22, "mzi_ubend": 7, "n": [22, 25, 34], "n_bend": 4, "n_in": 39, "n_layer_list": 22, "n_out": 39, "n_point": [13, 15, 36], "n_port": 4, "n_teeth_si": 26, "n_teeth_sin": 26, "name": [2, 3, 4, 8, 10, 11, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "nano": [], "nano_": 38, "nanoantenna": 37, "nat": [], "nazca": [2, 3, 4, 5, 30, 44], "nd": [30, 44], "ndarrai": 33, "nearest": 5, "need": [5, 30, 44], "neg": [15, 30, 44], "nest": 3, "new": [30, 44], "nitrid": 21, "nld": 24, "node": [30, 44], "nois": 30, "nomin": 3, "non": 37, "none": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43, 44], "normal": 30, "np": [22, 24, 25, 33], "num": [8, 36, 37], "num_i": 37, "num_socr": 30, "num_x": 37, "number": [4, 5, 30, 37, 44], "nw": [22, 24], "object": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "offset": [4, 15, 22, 25, 30, 40, 41, 44], "offset_a": 15, "offset_b": 15, "offset_i": [15, 25, 30, 41], "offset_x": [15, 25, 30, 41], "omit": [3, 4, 5], "op": [], "open": 21, "oper": [3, 18], "opt_eul": 42, "optic": [2, 3, 4, 5, 21, 37], "optim": 42, "option": [2, 3, 4, 5, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "order": [], "ori": [15, 25, 30, 41], "ori_teeth_offset": 26, "orient": [30, 44], "original_funct": [30, 44], "orthogon": [30, 44], "orx": [15, 25, 30, 41], "other": [0, 16, 19], "out": [], "outer": 3, "outer_isl": 3, "outermost": [], "output": [3, 4, 5, 30, 44], "output_numb": 5, "output_pitch": 5, "over": 30, "overal": [], "overrid": [3, 4], "oxid": 21, "oxide_facet": 21, "p": [25, 31], "p_ar": 37, "p_in_n_out": 25, "p_layer_list": 22, "packag": [30, 44], "pad": [9, 21, 22], "pad_60_80": [], "pad_opt": 21, "pair": [], "palik": 18, "para": [], "parabol": 37, "parallel": [30, 44], "parallelogram": 4, "paramet": [2, 3, 4, 5, 8, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "parametr": [], "part": [], "pass": 4, "passiv": [16, 27], "patch": [2, 3, 4, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44], "path": 18, "pattern": 24, "pb": [27, 38], "pbs_1550": [], "pbs_3wg": 38, "pcb": [22, 25, 30, 40, 44], "pd_cband_cel": [], "pdk": [], "pdk_path": [], "per": [], "perform": [], "period": [4, 34, 37], "phase": [4, 22, 30, 37], "photon": 0, "photoresist": 37, "physic": [], "pic": [16, 27], "pin": [0, 3, 4, 5, 16, 18, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "pin1": [30, 44], "pin2": [30, 44], "pin_mrr_mm_adddrop": 23, "pin_mrr_mm_allpass": 23, "pin_mrr_std_allpass": 23, "pin_nam": 10, "pin_wg": [23, 27], "pinstyl": [22, 25, 30, 40, 44], "pitch": [3, 4, 5, 37], "place": [4, 15, 30, 44], "placement": 4, "planar": [], "plane": [], "pld": 24, "point": [30, 44], "polar": [31, 43], "polygon": [12, 15, 16], "polysi_diamet": 37, "polysi_lay": 37, "polysi_vector": 37, "polysilicon": [], "port": [3, 4, 18], "port_align": 4, "port_angl": 42, "port_dist": 18, "port_nam": 18, "port_radiu": 18, "port_symmetr": 35, "port_width": 18, "portpara": 19, "ports_extend": 18, "posit": [3, 30, 37, 44], "possibl": [30, 44], "power": [5, 35], "pp": [22, 24, 25], "pre": [], "preced": [], "preset": [], "primit": [0, 11, 14, 15, 16, 23, 29, 38], "profil": [], "provid": [2, 30, 44], "ps_2st": 29, "ps_2st_straight": 29, "ps_pin": 23, "psr": [31, 38], "psr_1x2": 29, "psr_unit": 43, "purpos": [], "put": [30, 44], "pw": [22, 24], "px": [35, 37], "px_type": 35, "py": [15, 37], "quickstart": [], "qy_pdk_a": [], "r": [8, 11, 42], "r0": [11, 28, 33, 35, 40, 42], "r0_rck": 40, "r1": [28, 40], "r1_att": [28, 30, 40, 41], "r1_att_min": [28, 30, 40, 41], "r1_cp": [28, 30, 40, 41], "r1_rck": 40, "r2": 28, "r2_att": [28, 30, 40, 41], "r2_att_min": [28, 30, 40, 41], "r2_cp": [28, 30, 40, 41], "r_att": [25, 28, 30, 33, 40], "r_att_min": [25, 28, 30, 40], "r_bend": [3, 4, 14, 21, 30, 31, 32, 39, 41, 42], "r_compens": 4, "r_cp": [25, 28, 35], "r_hole": 15, "r_in": 35, "r_max_anti": 35, "r_max_tran": 35, "r_min_anti": 35, "r_out": 30, "r_outer": 28, "r_ratio_mamnu": 42, "r_rck": 40, "r_ring": [18, 25, 28, 30, 41], "r_teeth_ori_si": 26, "r_teeth_ori_sin": 26, "racetrack": [12, 16, 27, 38], "racetrack_mm_adddrop": 38, "racetrack_mm_allpass": 38, "racetrack_std_allpass": 38, "racetrackreson": 38, "radian": [], "radiu": [2, 3, 4, 5, 13, 15, 18, 21, 22, 25, 26, 28, 30, 31, 32, 33, 35, 40, 41, 42, 44], "radius1": [30, 44], "radius2": [30, 44], "rais": 44, "rang": 15, "ratio": [], "ratt": 40, "rbend": 33, "rc_point": 8, "rc_radiu": 8, "rc_ratio": [], "rck": 28, "rd0": 35, "rd1": 35, "re": [8, 11, 14, 15, 30, 33, 35, 36, 39, 40, 41, 42, 43], "reach": [], "rect": 42, "rectangl": [34, 42], "rectangular": [], "reduc": 21, "ref": [30, 44], "refer": [30, 44], "reflect": 21, "reflector": 2, "reflector_vector": 37, "region": [3, 37], "regist": [], "renam": 10, "repeat": [4, 5], "repetit": [37, 39, 42], "res_eic": 30, "reserv": [], "resolut": [3, 15], "reson": 19, "respect": 21, "result": [30, 37, 44], "return": [2, 24, 30, 44], "reus": 3, "reusabl": [], "revers": 4, "rib": [24, 43], "rib2strip": 42, "rib_tap": 24, "rib_tr": 43, "right": [30, 44], "ring": [6, 12, 16, 23, 27, 28, 29, 35, 38], "ring_bus_wg": 38, "ring_phas": 19, "rl": [30, 44], "rm_ratio": [], "rmax": [3, 11, 35], "rmax_bend": 42, "rmin": [3, 31, 35], "rmin_bend": 42, "rmin_bend_cent": 42, "rmin_eul": 42, "robust": [], "root": [], "rotat": [31, 43], "rout": [0, 2, 3, 4, 5, 16, 21, 23, 29, 38], "row": 8, "row_offset": 8, "rr": [30, 44], "rt_bend": [30, 44], "ru0": 35, "ru1": 35, "run": 18, "runfdtd": 18, "sa": [8, 24], "same": 4, "sampl": [], "sample_build": [], "sample_point": 18, "sample_step": 37, "saveflag": 18, "sbend": [30, 44], "sbend_p2p": [30, 44], "sbend_p2p_min": [30, 44], "sbend_rout": [30, 44], "sbend_typ": 35, "scaffold": [], "scalar": [], "scale": [], "scheme": [], "search": 3, "second": [3, 21, 30, 44], "secondari": 21, "section": [2, 3, 4, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "sector": [], "sector_gc": 37, "see": [], "segment": [], "selector": [], "self": [], "separ": [], "sequenc": [], "set": [30, 44], "setch": [], "shape": [4, 30, 31, 37, 42, 43, 44], "share": [], "sharp": [2, 3, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "sharp_patch": [2, 3, 11, 15, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44], "sharp_path": [30, 44], "shift": [3, 22, 30, 44], "shifter": [4, 22], "shortest": [30, 44], "should": [], "show": [3, 4, 5], "show_pin": [3, 4, 5, 8, 11, 15, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "showpin": [30, 44], "si": [18, 26], "side": [2, 4], "sidelob": [30, 44], "sidewai": [30, 44], "sidewya": [30, 44], "silicon": [0, 18], "simpl": [5, 13], "simu_x": 18, "simubox": 18, "simudatafigureplot": 19, "simul": [16, 17, 37], "simupath": 18, "sin": [21, 26], "sin_rib_wg": 21, "sine": [11, 15, 36, 43], "singl": [], "single_end": 35, "sio2": 18, "size": [21, 30, 44], "slab": 21, "slab_width": 22, "small": [], "socr": 29, "socr_adiabat": 29, "socr_adiabatic_cband": 29, "socr_cband": 29, "soi": 21, "sourc": [], "sourcemod": 18, "sp_cont": 25, "sp_isl_met": 8, "sp_isl_wg": 8, "sp_sc": 24, "sp_via_i2m": 24, "sp_via_x": 8, "space": [4, 8, 24, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41, 42], "specif": [30, 44], "speed": 22, "sphinx": [], "spiral": [11, 27, 38], "spiral_cicle_mm": 38, "spiral_cicle_std": 38, "spiral_circl": 38, "spiral_ord": 11, "spiral_rect_std": 38, "spiral_rectangl": 38, "spline": [], "split": [5, 35], "splitter": [2, 3, 4, 5, 31, 43], "splittingtre": 7, "spot": 21, "spttree": [7, 16], "squar": [], "stage": 3, "stand": [], "standard": 4, "start": [15, 30, 44], "std": [25, 28, 30, 35, 37, 39, 40, 41, 42], "std_crow_v": 29, "std_pic_r": 38, "std_ring_amzi_adddrop": 29, "std_ring_pin": 23, "step": [], "stop": 15, "str": [2, 3, 4, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "straight": [3, 4, 30, 31, 44], "strict_condit": 42, "strip": [2, 3, 4, 11, 14, 15, 18, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "strip_cor": [24, 37], "strip_tr": 43, "strong": 30, "strt": [30, 44], "strt_bend_strt_p2p": [30, 44], "strt_bend_strt_p2p_min": [30, 44], "strt_mm": [30, 44], "strt_mm_p2p": [30, 44], "strt_p2p": [30, 44], "strt_round_courn": 12, "structur": [3, 15, 37], "stub": [3, 4, 5], "style": 3, "success": [], "suffix": [], "sun": [], "suppli": [], "support": [], "suppr": 30, "swap": 4, "symbol": [30, 44], "symmetr": [30, 35, 44], "symmetri": [], "symmetric_bu": 35, "sz": 8, "sz_bu": 28, "sz_ring": 28, "sz_via_i2m": 24, "szvia": 8, "t": [11, 18, 30, 44], "take": [30, 44], "taken": [30, 44], "taper": [3, 4, 21, 27, 30, 38, 44], "taper_length": 37, "taper_p2p": [30, 44], "taper_xs2x": 38, "target": [], "tdc": 35, "te": [], "teeth": [], "teeth_numb": 37, "templat": [], "termin": [], "tessel": [], "test": 22, "theta_arc": [30, 35], "theta_ext": 35, "theta_start": [8, 15], "theta_stop": [8, 15], "thi": [21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "thin_attach": 31, "third": 21, "three": 3, "through": [], "throughout": [], "tilt": 21, "tip": 21, "toctre": [], "toler": 35, "tooth": [], "top": 21, "topologi": 4, "total": 4, "tp_angl": 35, "transit": [21, 38], "translat": [30, 44], "tree": 5, "trench": [3, 21, 25, 28, 30, 31], "triangl": 4, "triangular": 4, "true": [2, 3, 4, 8, 10, 11, 15, 18, 22, 24, 25, 28, 30, 31, 32, 33, 35, 37, 39, 40, 41, 42, 44], "tube": [30, 44], "tube_min": [30, 44], "tunabl": [], "tupl": [30, 44], "tuple_to_complex": 19, "turn": [], "two": [3, 5, 30, 44], "twod_grat": [], "type": [2, 3, 4, 5, 15, 24, 30, 37, 44], "type_tap": 37, "u": [3, 30, 44], "ubend": [30, 44], "ubend_offset": 31, "ubend_p2p": [30, 44], "ubend_rout": [30, 44], "um": [30, 44], "umat_2x2_": 7, "uniform": [], "uninstanti": [], "uniqu": [21, 24, 25, 26, 28, 30, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43], "unit": [4, 27, 29, 37], "unit_mesh_2x2": 4, "univers": 4, "unless": [30, 44], "upper": 4, "upper_isl": 31, "us": [2, 3, 4, 5, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "util": 13, "v": 28, "valu": [5, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "varnam": [22, 25, 30, 40, 44], "vector": 37, "versatil": [], "vertic": [3, 4], "via": [3, 4, 9, 24, 25, 28, 30, 31, 40], "via_cel": 8, "via_h2m": [3, 4, 24, 25, 28, 30, 31, 40], "via_i2m": 25, "via_s2m": [8, 24], "vias_arc": 9, "visibl": [], "w": [4, 8, 11, 14, 33, 34, 36, 43], "w0": [28, 33, 35, 40], "w0_rck": 40, "w0_ring": 30, "w1": [3, 28, 31, 33, 35, 40], "w1_bu": [28, 30, 40, 41], "w1_rck": 40, "w1_ring": 30, "w1_slab": 21, "w1_tp": 32, "w2": [3, 31], "w2_bu": [28, 30, 40, 41], "w2_tp": 32, "w_1": 43, "w_2": 43, "w_arm": [3, 4, 39], "w_arm_min": 3, "w_bend_cent": 42, "w_bend_port": 42, "w_box": 21, "w_box_end": 21, "w_bu": [25, 28, 30, 35, 40], "w_cp": [30, 35], "w_dt": 21, "w_end": [11, 36], "w_grow_rib": 43, "w_grow_strip": 43, "w_gt": 37, "w_heater": [3, 25, 28, 30, 31], "w_ht": [3, 4, 24, 40], "w_i": [24, 25], "w_in": [21, 30, 35], "w_itr": 24, "w_m": 32, "w_metal": [3, 4, 25, 28, 30, 31], "w_metal_pn": 24, "w_mid_slab": 21, "w_mmi": 39, "w_mt": [24, 40], "w_n": [24, 25], "w_n_ct": 24, "w_ncont": 25, "w_out": [30, 35], "w_ovlp": 25, "w_p": [24, 25], "w_p_ct": 24, "w_pcont": 25, "w_plus_max": 22, "w_port": [24, 26, 31, 33, 39, 42], "w_ram": 4, "w_rck": 40, "w_rib": 43, "w_ring": [25, 28, 30, 41], "w_slab": 22, "w_teeth_si": 26, "w_teeth_sin": 26, "w_term": 41, "w_tip_cor": 21, "w_tip_slab": 21, "w_tran": 35, "w_waveguid": 7, "w_wg": [2, 3, 4, 22, 24, 25, 28, 30, 31, 32, 33, 35, 37, 39, 40, 41], "w_wg_slab": 22, "wa": [15, 28], "wa0": 35, "wa1": 35, "wai": [], "waveguid": [2, 3, 4, 21, 24, 28, 29, 30, 44], "waveguide1": [], "waveguide2": [], "waveguide_pin": 23, "wavelength": [], "wb": [15, 28], "wb0": 35, "wb1": 35, "wb_in": 35, "wb_out": 35, "wd0": 35, "wd1": 35, "wd_in": 35, "wd_out": 35, "wdm": 31, "welcom": 0, "wg": 35, "wg_ltp": 35, "wgdope": 23, "when": [4, 5, 30, 44], "where": [30, 44], "whether": [22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "which": [30, 44], "wideband": [], "width": [2, 3, 4, 8, 10, 13, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "width1": [30, 37, 44], "width2": [30, 37, 44], "width2_mm": [30, 44], "width_mm": [30, 44], "width_typ": [11, 15, 28], "with_txt": 10, "within": [], "wl": 18, "wmin_bend": 42, "wrapper": [3, 4, 37], "write": 18, "written": [], "wu0": 35, "wu1": 35, "wu_in": 35, "wu_out": 35, "x": [8, 10, 11, 14, 15, 18, 22, 24, 25, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 42, 43, 44], "x_space": 8, "xout_offset": 39, "xs2x": 43, "xs_1": 43, "xs_2": 43, "xs_cont_wg": [24, 25], "xs_heater": [3, 4, 24, 25, 28, 30, 31], "xs_ht": [3, 24, 40], "xs_l1": 8, "xs_l2": 8, "xs_metal": [3, 4, 24, 25, 28, 30, 31], "xs_metal_imp": 25, "xs_mt": [24, 40], "xs_n": [24, 25], "xs_ncont": [24, 25], "xs_open": 37, "xs_p": [24, 25], "xs_pad": 8, "xs_pcont": [24, 25], "xs_pn_ct": 24, "xs_port": 24, "xs_ring": [25, 28, 30], "xs_sa": 24, "xs_sin": 21, "xs_trench": 21, "xs_via_h2m": 24, "xs_via_s2m": 24, "xs_wg": [2, 3, 4, 24, 28, 30, 31, 35, 37], "xsection": [30, 44], "xya": 10, "y": [5, 18, 30, 44], "y_cut": 15, "y_space": 8, "yb": [27, 38], "ybranch": [5, 38], "ybranch_3wg": 38, "ybranch_t": [], "you": [], "your": [], "z": 18, "zehnder": [3, 4, 22], "\u00b5m": [], "\u03c0": []}, "titles": ["mxPIC Handbook", "mxpic.components.basic", "mxpic.components.composites.LoopMirror", "mxpic.components.composites.MZI", "mxpic.components.composites.MZI_mesh", "mxpic.components.composites.SptTree", "mxpic.components.composites.advance", "Composites", "mxpic.components.electronics.eic_units", "Electronics", "mxpic.components.gds_devices", "mxpic.components.geometry.curves", "Geometry", "mxpic.components.geometry.polygons", "mxpic.components.geometry.racetrack", "mxpic.components.geometry.rings", "Components", "Others", "mxpic.components.others.simulation.DualPortElements", "Simulation", "mxpic.components.pins", "mxpic.components.primitives.EC_dual_layer_px3", "mxpic.components.primitives.active.dev_ps", "Active", "mxpic.components.primitives.active.pin_wg", "mxpic.components.primitives.active.rings", "mxpic.components.primitives.grating_couplers", "Primitives", "mxpic.components.primitives.passive.crows", "Passive", "mxpic.components.primitives.passive.rings", "mxpic.components.primitives.passive.unit", "mxpic.components.primitives.pic.PBS", "mxpic.components.primitives.pic.YBS", "mxpic.components.primitives.pic.bragg", "mxpic.components.primitives.pic.couplers", "mxpic.components.primitives.pic.cross", "mxpic.components.primitives.pic.gratings", "Pic", "mxpic.components.primitives.pic.mmi", "mxpic.components.primitives.pic.racetrack", "mxpic.components.primitives.pic.rings", "mxpic.components.primitives.pic.spiral", "mxpic.components.primitives.pic.taper", "mxpic.components.routing"], "titleterms": {"activ": [22, 23, 24, 25], "adc_std_2x2": 35, "advanc": 6, "aed_r": 41, "aed_ring_pin": 25, "amf_pdk": [], "amzi_w": 4, "autom": [], "basic": 1, "beam_splitt": [], "brag_wdm": 31, "bragg": 34, "bragg_apod": 34, "bs_tdc": 35, "circl": 15, "clothoid": 11, "compon": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "composit": [2, 3, 4, 5, 6, 7], "conchoid": 11, "coupler": 35, "cross": 36, "cross_sin": 36, "crow": 28, "crow_a": 28, "crow_circular_r": 28, "crow_eul_r": 28, "crow_eul_rck": 28, "crow_std_adddrop": 28, "crow_std_allpass": 28, "crx_te_1310": [], "crx_te_1550": [], "cumec_pdk": [], "curv": 11, "dc": 35, "dc_bend": 35, "dc_bend_20_80_cband": [], "dc_bend_4_96_cband": [], "dc_bend_50_50_cband": [], "dc_px3_50_50_cband": [], "dc_px_3sg": 35, "dc_te_1550": [], "dev_p": 22, "device_2x2_fdtd_init": 18, "device_coupl": 18, "device_port": 18, "device_ring_bu": 18, "directional_coupl": [], "document": [], "dualportel": 18, "ec_1550": [], "ec_dual_layer_px3": 21, "ec_te_1550": [], "eic_unit": 8, "electron": [8, 9], "elips": 15, "elipse_du": 15, "euler_crow_bu": 18, "euler_crow_inter_cp": 18, "fa": 37, "gc_sin_si_dual_lay": 26, "gc_std_1d": 37, "gc_std_2d": 37, "gc_te_1310": [], "gc_te_1550": [], "gc_tm_1310": [], "gc_tm_1550": [], "gds_devic": 10, "gds_lib_load": 10, "generate_gds_lib": 10, "geometri": [11, 12, 13, 14, 15], "gpd_1550": [], "grate": 37, "grating_2d_hol": 37, "grating_2d_hole_3rec": 37, "grating_2d_hole_4rec": 37, "grating_coupl": 26, "handbook": 0, "heater_ndop": 22, "hgl_pdk_a": [], "hole": 15, "ic_except": 44, "imecas_pdk": [], "isl": 8, "librari": [], "loopmirror": 2, "mdm": 35, "mdm_adc_te1_1550": [], "mdm_adc_te2_1550": [], "mdm_adc_te3_1550": [], "mmg_1d_d14um_1550_2mod": [], "mmi": 39, "mmi_1x2_te_1310": [], "mmi_1x2_te_1550": [], "mmi_2x2_te_1310": [], "mmi_2x2_te_1550": [], "mmi_ml": 39, "mmi_std": 39, "monitorpara": 18, "mrr_a": 30, "mrr_dw_adddrop": 30, "mrr_dw_allpass": 30, "mrr_mm_adddrop": 30, "mrr_mm_allpass": 30, "mrr_std_adddrop": 30, "mrr_std_allpass": 30, "mrr_std_ring": 30, "multimode_interferomet": [], "mx_bend": 15, "mxpic": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 18, 20, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "mzi": 3, "mzi_2st_ubend": 3, "mzi_butterfli": 3, "mzi_eubend": 3, "mzi_mesh": 4, "mzi_mesh_parl": 4, "mzi_mesh_tri": 4, "mzi_mesh_u": 4, "mzi_n": 3, "mzi_ns_ubend": 3, "mzi_ubend": 3, "nano_": 37, "other": [17, 18], "pad": 8, "pad_60_80": [], "passiv": [28, 29, 30, 31], "pb": 32, "pbs_1550": [], "pbs_3wg": 32, "pd_cband_cel": [], "pdk": [], "photon": [], "pic": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43], "pin": 20, "pin_mrr_mm_adddrop": 25, "pin_mrr_mm_allpass": 25, "pin_mrr_std_allpass": 25, "pin_wg": 24, "polygon": 13, "portpara": 18, "primit": [21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "ps_2st": 31, "ps_2st_straight": 31, "ps_pin": 22, "psr": 43, "psr_1x2": 31, "qy_pdk_a": [], "racetrack": [14, 40], "racetrack_mm_adddrop": 40, "racetrack_mm_allpass": 40, "racetrack_std_allpass": 40, "racetrackreson": 40, "reson": 18, "ring": [15, 25, 30, 41], "ring_bus_wg": 35, "ring_phas": 18, "rout": [22, 25, 30, 40, 44], "silicon": [], "simudatafigureplot": 18, "simul": [18, 19], "socr": 30, "socr_adiabat": 30, "socr_adiabatic_cband": 30, "socr_cband": 30, "spiral": 42, "spiral_cicle_mm": 42, "spiral_cicle_std": 42, "spiral_circl": 42, "spiral_rect_std": 42, "spiral_rectangl": 42, "splittingtre": 5, "spttree": 5, "std_crow_v": 28, "std_pic_r": 41, "std_ring_amzi_adddrop": 30, "std_ring_pin": 25, "strt_round_courn": 13, "structur": [], "taper": [37, 43], "taper_xs2x": 43, "templat": [], "transit": 43, "tuple_to_complex": 18, "umat_2x2_": 4, "unit": 31, "via": 8, "vias_arc": 8, "w_waveguid": 4, "waveguid": 31, "waveguide_pin": 24, "welcom": [], "wgdope": 24, "yb": 33, "ybranch": 33, "ybranch_3wg": 33, "ybranch_t": []}})
\ No newline at end of file
+Search.setIndex({"alltitles": {"ADC_STD_2x2": [[33, "adc-std-2x2"]], "AED_Ring_PIN": [[24, "aed-ring-pin"]], "AED_ring": [[40, "aed-ring"]], "AMZI_W": [[4, "amzi-w"]], "Active": [[22, null]], "BS_tdc": [[33, "bs-tdc"]], "Brag_WDM": [[29, "brag-wdm"]], "Bragg": [[32, "bragg"]], "Bragg_apodized": [[32, "bragg-apodized"]], "CROW_AED": [[26, "crow-aed"]], "CROW_Circular_ring": [[26, "crow-circular-ring"]], "CROW_Eul_RCK": [[26, "crow-eul-rck"]], "CROW_Eul_Ring": [[26, "crow-eul-ring"]], "CROW_STD_Adddrop": [[26, "crow-std-adddrop"]], "CROW_STD_Allpass": [[26, "crow-std-allpass"]], "Clothoid": [[11, "clothoid"]], "Components": [[16, null]], "Components:": [[0, null]], "Composites": [[7, null]], "Conchoid": [[11, "conchoid"]], "Cross": [[34, "cross"]], "Cross_Sine": [[34, "cross-sine"]], "DC": [[33, "dc"]], "DC_bend": [[33, "dc-bend"]], "DC_pX_3sg": [[33, "dc-px-3sg"]], "DEVICE_2X2_FDTD_INIT": [[18, "device-2x2-fdtd-init"]], "DEVICE_COUPLER": [[18, "device-coupler"]], "DEVICE_PORTS": [[18, "device-ports"]], "DEVICE_RING_BUS": [[18, "device-ring-bus"]], "EC_dual_layer_px3": [[35, "ec-dual-layer-px3"]], "EULER_CROW_BUS": [[18, "euler-crow-bus"]], "EULER_CROW_INTER_CP": [[18, "euler-crow-inter-cp"]], "Electronics": [[9, null]], "Elipse": [[15, "elipse"]], "Elipse_dual": [[15, "elipse-dual"]], "FA": [[36, "fa"]], "GC_STD_1D": [[36, "gc-std-1d"]], "GC_STD_2D": [[36, "gc-std-2d"]], "GC_SiN_Si_Dual_Layer": [[36, "gc-sin-si-dual-layer"]], "Geometry": [[12, null]], "Grating_2D_Hole": [[36, "grating-2d-hole"]], "Grating_2D_Hole_3Rec": [[36, "grating-2d-hole-3rec"]], "Grating_2D_Hole_4Rec": [[36, "grating-2d-hole-4rec"]], "Heater_NDoped": [[21, "heater-ndoped"]], "ISL": [[8, "isl"]], "LoopMirror": [[2, "loopmirror"]], "MDM": [[33, "mdm"]], "MMI_ML": [[38, "mmi-ml"]], "MMI_STD": [[38, "mmi-std"]], "MRR_AED": [[28, "mrr-aed"]], "MRR_DW_Adddrop": [[28, "mrr-dw-adddrop"]], "MRR_DW_Allpass": [[28, "mrr-dw-allpass"]], "MRR_MM_Adddrop": [[28, "mrr-mm-adddrop"]], "MRR_MM_Allpass": [[28, "mrr-mm-allpass"]], "MRR_STD_Adddrop": [[28, "mrr-std-adddrop"]], "MRR_STD_Allpass": [[28, "mrr-std-allpass"]], "MRR_STD_Ring": [[28, "mrr-std-ring"]], "MZI": [[3, "mzi"]], "MZI_2st_ubend": [[3, "mzi-2st-ubend"]], "MZI_Butterfly": [[3, "mzi-butterfly"]], "MZI_Eubend": [[3, "mzi-eubend"]], "MZI_NS": [[3, "mzi-ns"]], "MZI_NS_ubend": [[3, "mzi-ns-ubend"]], "MZI_Ubend": [[3, "mzi-ubend"]], "MZI_mesh_Parl": [[4, "mzi-mesh-parl"]], "MZI_mesh_Tri": [[4, "mzi-mesh-tri"]], "MZI_mesh_U": [[4, "mzi-mesh-u"]], "MonitorParas": [[18, "monitorparas"]], "Nano_ant": [[36, "nano-ant"]], "Others": [[17, null]], "PAD": [[8, "pad"]], "PADs": [[8, "pads"]], "PBS_3wg": [[30, "pbs-3wg"]], "PIN_MRR_MM_Adddrop": [[24, "pin-mrr-mm-adddrop"]], "PIN_MRR_MM_Allpass": [[24, "pin-mrr-mm-allpass"]], "PIN_MRR_STD_Allpass": [[24, "pin-mrr-std-allpass"]], "PSR": [[42, "psr"]], "PSR_1x2": [[29, "psr-1x2"]], "PS_2st": [[29, "ps-2st"]], "PS_2st_Straight": [[29, "ps-2st-straight"]], "PS_PIN": [[21, "ps-pin"]], "Passive": [[27, null]], "Pic": [[37, null]], "PortParas": [[18, "portparas"]], "Primitives": [[25, null]], "RESONATOR": [[18, "resonator"]], "RING_PHASE": [[18, "ring-phase"]], "Racetrack": [[14, "racetrack"]], "RacetrackResonator": [[39, "racetrackresonator"]], "Racetrack_MM_Adddrop": [[39, "racetrack-mm-adddrop"]], "Racetrack_MM_Allpass": [[39, "racetrack-mm-allpass"]], "Racetrack_STD_Allpass": [[39, "racetrack-std-allpass"]], "Route": [[21, "route"], [24, "route"], [28, "route"], [39, "route"], [43, "route"]], "SOCR": [[28, "socr"]], "SOCR_Adiabatic": [[28, "socr-adiabatic"]], "SOCR_Adiabatic_Cband": [[28, "socr-adiabatic-cband"]], "SOCR_Cband": [[28, "socr-cband"]], "STD_CROW_V": [[26, "std-crow-v"]], "STD_PIC_Rings": [[40, "std-pic-rings"]], "STD_Ring_PIN": [[24, "std-ring-pin"]], "STD_ring_AMZI_adddrop": [[28, "std-ring-amzi-adddrop"]], "SimuDataFigurePlot": [[18, "simudatafigureplot"]], "Simulation": [[19, null]], "Spiral_Cicle_MM": [[41, "spiral-cicle-mm"]], "Spiral_Cicle_STD": [[41, "spiral-cicle-std"]], "Spiral_Rect_STD": [[41, "spiral-rect-std"]], "SplittingTree": [[5, "splittingtree"]], "Taper": [[36, "taper"]], "UMat_2x2_S": [[4, "umat-2x2-s"]], "Vias": [[8, "vias"]], "Vias_arc": [[8, "vias-arc"]], "WGDoped": [[23, "wgdoped"]], "W_waveguide": [[4, "w-waveguide"]], "YBranch": [[31, "ybranch"]], "Ybranch_3wg": [[31, "ybranch-3wg"]], "circle": [[15, "circle"]], "gds_lib_load": [[10, "gds-lib-load"]], "generate_gds_lib": [[10, "generate-gds-lib"]], "hole": [[15, "hole"]], "ic_exception": [[43, "ic-exception"]], "mxPIC Handbook": [[0, null]], "mx_bend": [[15, "mx-bend"]], "mxpic.components.basic": [[1, null]], "mxpic.components.composites.LoopMirror": [[2, null]], "mxpic.components.composites.MZI": [[3, null]], "mxpic.components.composites.MZI_mesh": [[4, null]], "mxpic.components.composites.SptTree": [[5, null]], "mxpic.components.composites.advance": [[6, null]], "mxpic.components.electronics.eic_units": [[8, null]], "mxpic.components.gds_devices": [[10, null]], "mxpic.components.geometry.curves": [[11, null]], "mxpic.components.geometry.polygons": [[13, null]], "mxpic.components.geometry.racetrack": [[14, null]], "mxpic.components.geometry.rings": [[15, null]], "mxpic.components.others.simulation.DualPortElements": [[18, null]], "mxpic.components.pins": [[20, null]], "mxpic.components.primitives.active.dev_ps": [[21, null]], "mxpic.components.primitives.active.pin_wg": [[23, null]], "mxpic.components.primitives.active.rings": [[24, null]], "mxpic.components.primitives.passive.crows": [[26, null]], "mxpic.components.primitives.passive.rings": [[28, null]], "mxpic.components.primitives.passive.unit": [[29, null]], "mxpic.components.primitives.pic.PBS": [[30, null]], "mxpic.components.primitives.pic.YBS": [[31, null]], "mxpic.components.primitives.pic.bragg": [[32, null]], "mxpic.components.primitives.pic.couplers": [[33, null]], "mxpic.components.primitives.pic.cross": [[34, null]], "mxpic.components.primitives.pic.edge_couplers": [[35, null]], "mxpic.components.primitives.pic.gratings": [[36, null]], "mxpic.components.primitives.pic.mmi": [[38, null]], "mxpic.components.primitives.pic.racetrack": [[39, null]], "mxpic.components.primitives.pic.rings": [[40, null]], "mxpic.components.primitives.pic.spiral": [[41, null]], "mxpic.components.primitives.pic.taper": [[42, null]], "mxpic.components.routing": [[43, null]], "ring_bus_wg": [[33, "ring-bus-wg"]], "spiral": [[41, "spiral"]], "spiral_circle": [[41, "spiral-circle"]], "spiral_rectangle": [[41, "spiral-rectangle"]], "strt_round_courner": [[13, "strt-round-courner"]], "taper_xs2xs": [[42, "taper-xs2xs"]], "transition": [[42, "transition"]], "tuple_to_complex": [[18, "tuple-to-complex"]], "waveguide": [[29, "waveguide"]], "waveguide_PIN": [[23, "waveguide-pin"]]}, "docnames": ["index", "mxpic/components/basic", "mxpic/components/composites/LoopMirror", "mxpic/components/composites/MZI", "mxpic/components/composites/MZI_mesh", "mxpic/components/composites/SptTree", "mxpic/components/composites/advance", "mxpic/components/composites/index", "mxpic/components/electronics/eic_units", "mxpic/components/electronics/index", "mxpic/components/gds_devices", "mxpic/components/geometry/curves", "mxpic/components/geometry/index", "mxpic/components/geometry/polygons", "mxpic/components/geometry/racetrack", "mxpic/components/geometry/rings", "mxpic/components/index", "mxpic/components/others/index", "mxpic/components/others/simulation/DualPortElements", "mxpic/components/others/simulation/index", "mxpic/components/pins", "mxpic/components/primitives/active/dev_ps", "mxpic/components/primitives/active/index", "mxpic/components/primitives/active/pin_wg", "mxpic/components/primitives/active/rings", "mxpic/components/primitives/index", "mxpic/components/primitives/passive/crows", "mxpic/components/primitives/passive/index", "mxpic/components/primitives/passive/rings", "mxpic/components/primitives/passive/unit", "mxpic/components/primitives/pic/PBS", "mxpic/components/primitives/pic/YBS", "mxpic/components/primitives/pic/bragg", "mxpic/components/primitives/pic/couplers", "mxpic/components/primitives/pic/cross", "mxpic/components/primitives/pic/edge_couplers", "mxpic/components/primitives/pic/gratings", "mxpic/components/primitives/pic/index", "mxpic/components/primitives/pic/mmi", "mxpic/components/primitives/pic/racetrack", "mxpic/components/primitives/pic/rings", "mxpic/components/primitives/pic/spiral", "mxpic/components/primitives/pic/taper", "mxpic/components/routing"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["index.md", "mxpic/components/basic.md", "mxpic/components/composites/LoopMirror.md", "mxpic/components/composites/MZI.md", "mxpic/components/composites/MZI_mesh.md", "mxpic/components/composites/SptTree.md", "mxpic/components/composites/advance.md", "mxpic/components/composites/index.md", "mxpic/components/electronics/eic_units.md", "mxpic/components/electronics/index.md", "mxpic/components/gds_devices.md", "mxpic/components/geometry/curves.md", "mxpic/components/geometry/index.md", "mxpic/components/geometry/polygons.md", "mxpic/components/geometry/racetrack.md", "mxpic/components/geometry/rings.md", "mxpic/components/index.md", "mxpic/components/others/index.md", "mxpic/components/others/simulation/DualPortElements.md", "mxpic/components/others/simulation/index.md", "mxpic/components/pins.md", "mxpic/components/primitives/active/dev_ps.md", "mxpic/components/primitives/active/index.md", "mxpic/components/primitives/active/pin_wg.md", "mxpic/components/primitives/active/rings.md", "mxpic/components/primitives/index.md", "mxpic/components/primitives/passive/crows.md", "mxpic/components/primitives/passive/index.md", "mxpic/components/primitives/passive/rings.md", "mxpic/components/primitives/passive/unit.md", "mxpic/components/primitives/pic/PBS.md", "mxpic/components/primitives/pic/YBS.md", "mxpic/components/primitives/pic/bragg.md", "mxpic/components/primitives/pic/couplers.md", "mxpic/components/primitives/pic/cross.md", "mxpic/components/primitives/pic/edge_couplers.md", "mxpic/components/primitives/pic/gratings.md", "mxpic/components/primitives/pic/index.md", "mxpic/components/primitives/pic/mmi.md", "mxpic/components/primitives/pic/racetrack.md", "mxpic/components/primitives/pic/rings.md", "mxpic/components/primitives/pic/spiral.md", "mxpic/components/primitives/pic/taper.md", "mxpic/components/routing.md"], "indexentries": {"a_ht (mxpic.components.primitives.passive.crows.std_crow_v attribute)": [[26, "mxpic.components.primitives.passive.crows.STD_CROW_V.A_ht", false]], "adc_std_2x2 (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2", false]], "aed_ring (class in mxpic.components.primitives.pic.rings)": [[40, "mxpic.components.primitives.pic.rings.AED_ring", false]], "aed_ring_pin (class in mxpic.components.primitives.active.rings)": [[24, "mxpic.components.primitives.active.rings.AED_Ring_PIN", false]], "amzi_w (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W", false]], "bend_mine() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.bend_mine", false]], "bend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.bend_p2p", false]], "bend_route() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.bend_route", false]], "bend_route_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.bend_route_p2p", false]], "bend_strt_bend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.bend_strt_bend_p2p", false]], "bend_strt_bend_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.bend_strt_bend_p2p_mine", false]], "brag_wdm (class in mxpic.components.primitives.passive.unit)": [[29, "mxpic.components.primitives.passive.unit.Brag_WDM", false]], "bragg (class in mxpic.components.primitives.pic.bragg)": [[32, "mxpic.components.primitives.pic.bragg.Bragg", false]], "bragg_apodized (class in mxpic.components.primitives.pic.bragg)": [[32, "mxpic.components.primitives.pic.bragg.Bragg_apodized", false]], "bs_tdc (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.BS_tdc", false]], "cell (mxpic.components.composites.loopmirror.loopmirror attribute)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror.cell", false]], "cell (mxpic.components.composites.mzi.mzi attribute)": [[3, "mxpic.components.composites.MZI.MZI.cell", false]], "cell (mxpic.components.composites.mzi.mzi_2st_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_butterfly attribute)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.cell", false]], "cell (mxpic.components.composites.mzi.mzi_eubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Eubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Ubend.cell", false]], "cell (mxpic.components.composites.mzi_mesh.amzi_w attribute)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_parl attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_tri attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_u attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.cell", false]], "cell (mxpic.components.composites.mzi_mesh.umat_2x2_s attribute)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.cell", false]], "cell (mxpic.components.composites.mzi_mesh.w_waveguide attribute)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.cell", false]], "cell (mxpic.components.composites.spttree.splittingtree attribute)": [[5, "mxpic.components.composites.SptTree.SplittingTree.cell", false]], "cell (mxpic.components.primitives.active.dev_ps.ps_pin attribute)": [[21, "mxpic.components.primitives.active.dev_ps.PS_PIN.cell", false]], "cell (mxpic.components.primitives.pic.spiral.spiral_circle attribute)": [[41, "mxpic.components.primitives.pic.spiral.spiral_circle.cell", false]], "circle (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.circle", false]], "clothoid (class in mxpic.components.geometry.curves)": [[11, "mxpic.components.geometry.curves.Clothoid", false]], "conchoid (class in mxpic.components.geometry.curves)": [[11, "mxpic.components.geometry.curves.Conchoid", false]], "connpatch() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.connPatch", false]], "cross (class in mxpic.components.primitives.pic.cross)": [[34, "mxpic.components.primitives.pic.cross.Cross", false]], "cross_sine (class in mxpic.components.primitives.pic.cross)": [[34, "mxpic.components.primitives.pic.cross.Cross_Sine", false]], "crow_aed (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.CROW_AED", false]], "crow_circular_ring (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.CROW_Circular_ring", false]], "crow_eul_rck (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.CROW_Eul_RCK", false]], "crow_eul_ring (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.CROW_Eul_Ring", false]], "crow_std_adddrop (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.CROW_STD_Adddrop", false]], "crow_std_allpass (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.CROW_STD_Allpass", false]], "dc (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.DC", false]], "dc_bend (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.DC_bend", false]], "dc_px_3sg (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.DC_pX_3sg", false]], "device_2x2_fdtd_init() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_2X2_FDTD_INIT", false]], "device_coupler (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_COUPLER", false]], "device_ports (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS", false]], "device_ring_bus (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_RING_BUS", false]], "ec_dual_layer_px3 (class in mxpic.components.primitives.pic.edge_couplers)": [[35, "mxpic.components.primitives.pic.edge_couplers.EC_dual_layer_px3", false]], "elipse (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.Elipse", false]], "elipse_dual (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.Elipse_dual", false]], "euler_crow_bus (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.EULER_CROW_BUS", false]], "euler_crow_inter_cp (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.EULER_CROW_INTER_CP", false]], "fa (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.FA", false]], "folderpath (mxpic.components.others.simulation.dualportelements.device_ports attribute)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS.FolderPath", false]], "gc_sin_si_dual_layer (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.GC_SiN_Si_Dual_Layer", false]], "gc_std_1d (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_1D", false]], "gc_std_2d (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_2D", false]], "generate_2pi_gds() (mxpic.components.primitives.passive.rings.socr method)": [[28, "mxpic.components.primitives.passive.rings.SOCR.generate_2pi_gds", false]], "generate_eic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[26, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_eic_gds", false]], "generate_eic_gds() (mxpic.components.primitives.passive.rings.mrr_aed method)": [[28, "mxpic.components.primitives.passive.rings.MRR_AED.generate_eic_gds", false]], "generate_eic_gds() (mxpic.components.primitives.pic.racetrack.racetrack_std_allpass method)": [[39, "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass.generate_eic_gds", false]], "generate_eic_part() (mxpic.components.primitives.passive.rings.socr method)": [[28, "mxpic.components.primitives.passive.rings.SOCR.generate_eic_part", false]], "generate_eic_part() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[28, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_eic_part", false]], "generate_err() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[33, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_err", false]], "generate_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.mzi_mesh_u method)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.umat_2x2_s method)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.w_waveguide method)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.generate_gds", false]], "generate_gds() (mxpic.components.composites.spttree.splittingtree method)": [[5, "mxpic.components.composites.SptTree.SplittingTree.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.pad method)": [[8, "mxpic.components.electronics.eic_units.PAD.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.pads method)": [[8, "mxpic.components.electronics.eic_units.PADs.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.vias method)": [[8, "mxpic.components.electronics.eic_units.Vias.generate_gds", false]], "generate_gds() (mxpic.components.geometry.curves.clothoid method)": [[11, "mxpic.components.geometry.curves.Clothoid.generate_gds", false]], "generate_gds() (mxpic.components.geometry.rings.elipse method)": [[15, "mxpic.components.geometry.rings.Elipse.generate_gds", false]], "generate_gds() (mxpic.components.geometry.rings.elipse_dual method)": [[15, "mxpic.components.geometry.rings.Elipse_dual.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.dev_ps.heater_ndoped method)": [[21, "mxpic.components.primitives.active.dev_ps.Heater_NDoped.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.dev_ps.ps_pin method)": [[21, "mxpic.components.primitives.active.dev_ps.PS_PIN.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.pin_wg.waveguide_pin method)": [[23, "mxpic.components.primitives.active.pin_wg.waveguide_PIN.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.pin_wg.wgdoped method)": [[23, "mxpic.components.primitives.active.pin_wg.WGDoped.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.socr method)": [[28, "mxpic.components.primitives.passive.rings.SOCR.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[28, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.std_ring_amzi_adddrop method)": [[28, "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.unit.ps_2st method)": [[29, "mxpic.components.primitives.passive.unit.PS_2st.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.unit.ps_2st_straight method)": [[29, "mxpic.components.primitives.passive.unit.PS_2st_Straight.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[33, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.dc_bend method)": [[33, "mxpic.components.primitives.pic.couplers.DC_bend.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.dc_px_3sg method)": [[33, "mxpic.components.primitives.pic.couplers.DC_pX_3sg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.ring_bus_wg method)": [[33, "mxpic.components.primitives.pic.couplers.ring_bus_wg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.cross.cross method)": [[34, "mxpic.components.primitives.pic.cross.Cross.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.edge_couplers.ec_dual_layer_px3 method)": [[35, "mxpic.components.primitives.pic.edge_couplers.EC_dual_layer_px3.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.gc_sin_si_dual_layer method)": [[36, "mxpic.components.primitives.pic.gratings.GC_SiN_Si_Dual_Layer.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole method)": [[36, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole_3rec method)": [[36, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole_4rec method)": [[36, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[36, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.taper method)": [[36, "mxpic.components.primitives.pic.gratings.Taper.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.mmi.mmi_ml method)": [[38, "mxpic.components.primitives.pic.mmi.MMI_ML.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.pbs.pbs_3wg method)": [[30, "mxpic.components.primitives.pic.PBS.PBS_3wg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.racetrack.racetrackresonator method)": [[39, "mxpic.components.primitives.pic.racetrack.RacetrackResonator.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral method)": [[41, "mxpic.components.primitives.pic.spiral.spiral.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[41, "mxpic.components.primitives.pic.spiral.spiral_circle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_rectangle method)": [[41, "mxpic.components.primitives.pic.spiral.spiral_rectangle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.ybs.ybranch method)": [[31, "mxpic.components.primitives.pic.YBS.YBranch.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.ybs.ybranch_3wg method)": [[31, "mxpic.components.primitives.pic.YBS.Ybranch_3wg.generate_gds", false]], "generate_gds_error() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[36, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds_error", false]], "generate_gds_positive() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[36, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds_positive", false]], "generate_imp_gds() (mxpic.components.primitives.active.rings.aed_ring_pin method)": [[24, "mxpic.components.primitives.active.rings.AED_Ring_PIN.generate_imp_gds", false]], "generate_mzi_gds() (mxpic.components.primitives.active.dev_ps.ps_pin method)": [[21, "mxpic.components.primitives.active.dev_ps.PS_PIN.generate_mzi_gds", false]], "generate_negative() (mxpic.components.primitives.pic.bragg.bragg_apodized method)": [[32, "mxpic.components.primitives.pic.bragg.Bragg_apodized.generate_negative", false]], "generate_negative() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_negative", false]], "generate_negative() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_negative", false]], "generate_pic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[26, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_pic_gds", false]], "generate_pic_gds() (mxpic.components.primitives.pic.rings.aed_ring method)": [[40, "mxpic.components.primitives.pic.rings.AED_ring.generate_pic_gds", false]], "generate_pic_part() (mxpic.components.primitives.passive.rings.socr method)": [[28, "mxpic.components.primitives.passive.rings.SOCR.generate_pic_part", false]], "generate_pic_part() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[28, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_pic_part", false]], "generate_positive() (mxpic.components.primitives.pic.bragg.bragg_apodized method)": [[32, "mxpic.components.primitives.pic.bragg.Bragg_apodized.generate_positive", false]], "generate_positive() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_positive", false]], "generate_positive() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_positive", false]], "generate_test_dev() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_test_dev", false]], "generate_test_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_test_gds", false]], "generate_test_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.active.dev_ps.heater_ndoped method)": [[21, "mxpic.components.primitives.active.dev_ps.Heater_NDoped.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.rings.socr method)": [[28, "mxpic.components.primitives.passive.rings.SOCR.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.unit.brag_wdm method)": [[29, "mxpic.components.primitives.passive.unit.Brag_WDM.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.unit.psr_1x2 method)": [[29, "mxpic.components.primitives.passive.unit.PSR_1x2.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[33, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc method)": [[33, "mxpic.components.primitives.pic.couplers.DC.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc_bend method)": [[33, "mxpic.components.primitives.pic.couplers.DC_bend.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc_px_3sg method)": [[33, "mxpic.components.primitives.pic.couplers.DC_pX_3sg.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.mdm method)": [[33, "mxpic.components.primitives.pic.couplers.MDM.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.cross.cross method)": [[34, "mxpic.components.primitives.pic.cross.Cross.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[36, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.mmi.mmi_ml method)": [[38, "mxpic.components.primitives.pic.mmi.MMI_ML.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.rings.aed_ring method)": [[40, "mxpic.components.primitives.pic.rings.AED_ring.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.ybs.ybranch_3wg method)": [[31, "mxpic.components.primitives.pic.YBS.Ybranch_3wg.generate_test_gds", false]], "generate_test_mzi_gds() (mxpic.components.primitives.passive.rings.socr method)": [[28, "mxpic.components.primitives.passive.rings.SOCR.generate_test_mzi_gds", false]], "grating_2d_hole (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole", false]], "grating_2d_hole_3rec (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec", false]], "grating_2d_hole_4rec (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec", false]], "heater_ndoped (class in mxpic.components.primitives.active.dev_ps)": [[21, "mxpic.components.primitives.active.dev_ps.Heater_NDoped", false]], "hole (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.hole", false]], "isl (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.ISL", false]], "line_mm() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.line_mm", false]], "loopmirror (class in mxpic.components.composites.loopmirror)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror", false]], "mdm (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.MDM", false]], "mmi_ml (class in mxpic.components.primitives.pic.mmi)": [[38, "mxpic.components.primitives.pic.mmi.MMI_ML", false]], "mmi_std (class in mxpic.components.primitives.pic.mmi)": [[38, "mxpic.components.primitives.pic.mmi.MMI_STD", false]], "module": [[2, "module-mxpic.components.composites.LoopMirror", false], [3, "module-mxpic.components.composites.MZI", false], [4, "module-mxpic.components.composites.MZI_mesh", false], [5, "module-mxpic.components.composites.SptTree", false], [8, "module-mxpic.components.electronics.eic_units", false], [11, "module-mxpic.components.geometry.curves", false], [15, "module-mxpic.components.geometry.rings", false], [18, "module-mxpic.components.others.simulation.DualPortElements", false], [21, "module-mxpic.components.primitives.active.dev_ps", false], [23, "module-mxpic.components.primitives.active.pin_wg", false], [24, "module-mxpic.components.primitives.active.rings", false], [26, "module-mxpic.components.primitives.passive.crows", false], [28, "module-mxpic.components.primitives.passive.rings", false], [29, "module-mxpic.components.primitives.passive.unit", false], [30, "module-mxpic.components.primitives.pic.PBS", false], [31, "module-mxpic.components.primitives.pic.YBS", false], [32, "module-mxpic.components.primitives.pic.bragg", false], [33, "module-mxpic.components.primitives.pic.couplers", false], [34, "module-mxpic.components.primitives.pic.cross", false], [35, "module-mxpic.components.primitives.pic.edge_couplers", false], [36, "module-mxpic.components.primitives.pic.gratings", false], [38, "module-mxpic.components.primitives.pic.mmi", false], [39, "module-mxpic.components.primitives.pic.racetrack", false], [40, "module-mxpic.components.primitives.pic.rings", false], [41, "module-mxpic.components.primitives.pic.spiral", false], [42, "module-mxpic.components.primitives.pic.taper", false]], "monitorparas() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.MonitorParas", false]], "mrr_aed (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_AED", false]], "mrr_dw_adddrop (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_DW_Adddrop", false]], "mrr_dw_allpass (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_DW_Allpass", false]], "mrr_mm_adddrop (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_MM_Adddrop", false]], "mrr_mm_allpass (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_MM_Allpass", false]], "mrr_std_adddrop (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_STD_Adddrop", false]], "mrr_std_allpass (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_STD_Allpass", false]], "mrr_std_ring (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.MRR_STD_Ring", false]], "mx_bend (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.mx_bend", false]], "mxpic.components.composites.loopmirror": [[2, "module-mxpic.components.composites.LoopMirror", false]], "mxpic.components.composites.mzi": [[3, "module-mxpic.components.composites.MZI", false]], "mxpic.components.composites.mzi_mesh": [[4, "module-mxpic.components.composites.MZI_mesh", false]], "mxpic.components.composites.spttree": [[5, "module-mxpic.components.composites.SptTree", false]], "mxpic.components.electronics.eic_units": [[8, "module-mxpic.components.electronics.eic_units", false]], "mxpic.components.geometry.curves": [[11, "module-mxpic.components.geometry.curves", false]], "mxpic.components.geometry.rings": [[15, "module-mxpic.components.geometry.rings", false]], "mxpic.components.others.simulation.dualportelements": [[18, "module-mxpic.components.others.simulation.DualPortElements", false]], "mxpic.components.primitives.active.dev_ps": [[21, "module-mxpic.components.primitives.active.dev_ps", false]], "mxpic.components.primitives.active.pin_wg": [[23, "module-mxpic.components.primitives.active.pin_wg", false]], "mxpic.components.primitives.active.rings": [[24, "module-mxpic.components.primitives.active.rings", false]], "mxpic.components.primitives.passive.crows": [[26, "module-mxpic.components.primitives.passive.crows", false]], "mxpic.components.primitives.passive.rings": [[28, "module-mxpic.components.primitives.passive.rings", false]], "mxpic.components.primitives.passive.unit": [[29, "module-mxpic.components.primitives.passive.unit", false]], "mxpic.components.primitives.pic.bragg": [[32, "module-mxpic.components.primitives.pic.bragg", false]], "mxpic.components.primitives.pic.couplers": [[33, "module-mxpic.components.primitives.pic.couplers", false]], "mxpic.components.primitives.pic.cross": [[34, "module-mxpic.components.primitives.pic.cross", false]], "mxpic.components.primitives.pic.edge_couplers": [[35, "module-mxpic.components.primitives.pic.edge_couplers", false]], "mxpic.components.primitives.pic.gratings": [[36, "module-mxpic.components.primitives.pic.gratings", false]], "mxpic.components.primitives.pic.mmi": [[38, "module-mxpic.components.primitives.pic.mmi", false]], "mxpic.components.primitives.pic.pbs": [[30, "module-mxpic.components.primitives.pic.PBS", false]], "mxpic.components.primitives.pic.racetrack": [[39, "module-mxpic.components.primitives.pic.racetrack", false]], "mxpic.components.primitives.pic.rings": [[40, "module-mxpic.components.primitives.pic.rings", false]], "mxpic.components.primitives.pic.spiral": [[41, "module-mxpic.components.primitives.pic.spiral", false]], "mxpic.components.primitives.pic.taper": [[42, "module-mxpic.components.primitives.pic.taper", false]], "mxpic.components.primitives.pic.ybs": [[31, "module-mxpic.components.primitives.pic.YBS", false]], "mzi (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI", false]], "mzi_2st_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend", false]], "mzi_butterfly (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly", false]], "mzi_eubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Eubend", false]], "mzi_mesh_parl (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl", false]], "mzi_mesh_tri (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri", false]], "mzi_mesh_u (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U", false]], "mzi_ns (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS", false]], "mzi_ns_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend", false]], "mzi_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Ubend", false]], "nano_ant (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.Nano_ant", false]], "opt_euler() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[41, "mxpic.components.primitives.pic.spiral.spiral_circle.opt_euler", false]], "pad (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.PAD", false]], "pads (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.PADs", false]], "pbs_3wg (class in mxpic.components.primitives.pic.pbs)": [[30, "mxpic.components.primitives.pic.PBS.PBS_3wg", false]], "pin_mrr_mm_adddrop (class in mxpic.components.primitives.active.rings)": [[24, "mxpic.components.primitives.active.rings.PIN_MRR_MM_Adddrop", false]], "pin_mrr_mm_allpass (class in mxpic.components.primitives.active.rings)": [[24, "mxpic.components.primitives.active.rings.PIN_MRR_MM_Allpass", false]], "pin_mrr_std_allpass (class in mxpic.components.primitives.active.rings)": [[24, "mxpic.components.primitives.active.rings.PIN_MRR_STD_Allpass", false]], "portparas() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.PortParas", false]], "ps_2st (class in mxpic.components.primitives.passive.unit)": [[29, "mxpic.components.primitives.passive.unit.PS_2st", false]], "ps_2st_straight (class in mxpic.components.primitives.passive.unit)": [[29, "mxpic.components.primitives.passive.unit.PS_2st_Straight", false]], "ps_pin (class in mxpic.components.primitives.active.dev_ps)": [[21, "mxpic.components.primitives.active.dev_ps.PS_PIN", false]], "psr (class in mxpic.components.primitives.pic.taper)": [[42, "mxpic.components.primitives.pic.taper.PSR", false]], "psr_1x2 (class in mxpic.components.primitives.passive.unit)": [[29, "mxpic.components.primitives.passive.unit.PSR_1x2", false]], "racetrack_mm_adddrop (class in mxpic.components.primitives.pic.racetrack)": [[39, "mxpic.components.primitives.pic.racetrack.Racetrack_MM_Adddrop", false]], "racetrack_mm_allpass (class in mxpic.components.primitives.pic.racetrack)": [[39, "mxpic.components.primitives.pic.racetrack.Racetrack_MM_Allpass", false]], "racetrack_std_allpass (class in mxpic.components.primitives.pic.racetrack)": [[39, "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass", false]], "racetrackresonator (class in mxpic.components.primitives.pic.racetrack)": [[39, "mxpic.components.primitives.pic.racetrack.RacetrackResonator", false]], "resonator (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.RESONATOR", false]], "ring_bus_wg (class in mxpic.components.primitives.pic.couplers)": [[33, "mxpic.components.primitives.pic.couplers.ring_bus_wg", false]], "ring_phase (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.RING_PHASE", false]], "route (class in mxpic.components.primitives.active.dev_ps)": [[21, "mxpic.components.primitives.active.dev_ps.Route", false]], "route (class in mxpic.components.primitives.active.rings)": [[24, "mxpic.components.primitives.active.rings.Route", false]], "route (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.Route", false]], "route (class in mxpic.components.primitives.pic.racetrack)": [[39, "mxpic.components.primitives.pic.racetrack.Route", false]], "rt_bend() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.rt_bend", false]], "sbend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.sbend_p2p", false]], "sbend_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.sbend_p2p_mine", false]], "sbend_route() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.sbend_route", false]], "simudatafigureplot() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.SimuDataFigurePlot", false]], "socr (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.SOCR", false]], "socr_adiabatic (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic", false]], "socr_adiabatic_cband (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic_Cband", false]], "socr_cband (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.SOCR_Cband", false]], "spiral (class in mxpic.components.primitives.pic.spiral)": [[41, "mxpic.components.primitives.pic.spiral.spiral", false]], "spiral_cicle_mm (class in mxpic.components.primitives.pic.spiral)": [[41, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM", false]], "spiral_cicle_std (class in mxpic.components.primitives.pic.spiral)": [[41, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD", false]], "spiral_circle (class in mxpic.components.primitives.pic.spiral)": [[41, "mxpic.components.primitives.pic.spiral.spiral_circle", false]], "spiral_rect_std (class in mxpic.components.primitives.pic.spiral)": [[41, "mxpic.components.primitives.pic.spiral.Spiral_Rect_STD", false]], "spiral_rectangle (class in mxpic.components.primitives.pic.spiral)": [[41, "mxpic.components.primitives.pic.spiral.spiral_rectangle", false]], "splittingtree (class in mxpic.components.composites.spttree)": [[5, "mxpic.components.composites.SptTree.SplittingTree", false]], "std_crow_v (class in mxpic.components.primitives.passive.crows)": [[26, "mxpic.components.primitives.passive.crows.STD_CROW_V", false]], "std_pic_rings (class in mxpic.components.primitives.pic.rings)": [[40, "mxpic.components.primitives.pic.rings.STD_PIC_Rings", false]], "std_ring_amzi_adddrop (class in mxpic.components.primitives.passive.rings)": [[28, "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop", false]], "std_ring_pin (class in mxpic.components.primitives.active.rings)": [[24, "mxpic.components.primitives.active.rings.STD_Ring_PIN", false]], "strt() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.strt", false]], "strt_bend_strt_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.strt_bend_strt_p2p_mine", false]], "strt_mm() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.strt_mm", false]], "strt_mm_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.strt_mm_p2p", false]], "strt_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.strt_p2p", false]], "szvia (mxpic.components.electronics.eic_units.vias attribute)": [[8, "mxpic.components.electronics.eic_units.Vias.szVia", false]], "taper (class in mxpic.components.primitives.pic.gratings)": [[36, "mxpic.components.primitives.pic.gratings.Taper", false]], "taper() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.taper", false]], "taper_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.taper_p2p", false]], "taper_xs2xs (class in mxpic.components.primitives.pic.taper)": [[42, "mxpic.components.primitives.pic.taper.taper_xs2xs", false]], "transition (class in mxpic.components.primitives.pic.taper)": [[42, "mxpic.components.primitives.pic.taper.transition", false]], "tube_mine() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.tube_mine", false]], "tuple_to_complex() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.tuple_to_complex", false]], "ubend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.ubend_p2p", false]], "ubend_route() (mxpic.components.primitives.passive.rings.route method)": [[28, "mxpic.components.primitives.passive.rings.Route.ubend_route", false]], "umat_2x2_s (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S", false]], "vias (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.Vias", false]], "vias_arc (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.Vias_arc", false]], "w_waveguide (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide", false]], "waveguide (class in mxpic.components.primitives.passive.unit)": [[29, "mxpic.components.primitives.passive.unit.waveguide", false]], "waveguide_pin (class in mxpic.components.primitives.active.pin_wg)": [[23, "mxpic.components.primitives.active.pin_wg.waveguide_PIN", false]], "wgdoped (class in mxpic.components.primitives.active.pin_wg)": [[23, "mxpic.components.primitives.active.pin_wg.WGDoped", false]], "ybranch (class in mxpic.components.primitives.pic.ybs)": [[31, "mxpic.components.primitives.pic.YBS.YBranch", false]], "ybranch_3wg (class in mxpic.components.primitives.pic.ybs)": [[31, "mxpic.components.primitives.pic.YBS.Ybranch_3wg", false]]}, "objects": {"mxpic.components": [[1, 0, 0, "-", "basic"], [10, 0, 0, "-", "gds_devices"], [20, 0, 0, "-", "pins"], [43, 0, 0, "-", "routing"]], "mxpic.components.composites": [[2, 0, 0, "-", "LoopMirror"], [3, 0, 0, "-", "MZI"], [4, 0, 0, "-", "MZI_mesh"], [5, 0, 0, "-", "SptTree"], [6, 0, 0, "-", "advance"]], "mxpic.components.composites.LoopMirror": [[2, 1, 1, "", "LoopMirror"]], "mxpic.components.composites.LoopMirror.LoopMirror": [[2, 2, 1, "", "cell"]], "mxpic.components.composites.MZI": [[3, 1, 1, "", "MZI"], [3, 1, 1, "", "MZI_2st_ubend"], [3, 1, 1, "", "MZI_Butterfly"], [3, 1, 1, "", "MZI_Eubend"], [3, 1, 1, "", "MZI_NS"], [3, 1, 1, "", "MZI_NS_ubend"], [3, 1, 1, "", "MZI_Ubend"]], "mxpic.components.composites.MZI.MZI": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_2st_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Butterfly": [[3, 2, 1, "", "cell"], [3, 3, 1, "", "generate_gds"], [3, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI.MZI_Eubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh": [[4, 1, 1, "", "AMZI_W"], [4, 1, 1, "", "MZI_mesh_Parl"], [4, 1, 1, "", "MZI_mesh_Tri"], [4, 1, 1, "", "MZI_mesh_U"], [4, 1, 1, "", "UMat_2x2_S"], [4, 1, 1, "", "W_waveguide"]], "mxpic.components.composites.MZI_mesh.AMZI_W": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"], [4, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_U": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.UMat_2x2_S": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.W_waveguide": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.SptTree": [[5, 1, 1, "", "SplittingTree"]], "mxpic.components.composites.SptTree.SplittingTree": [[5, 2, 1, "", "cell"], [5, 3, 1, "", "generate_gds"]], "mxpic.components.electronics": [[8, 0, 0, "-", "eic_units"]], "mxpic.components.electronics.eic_units": [[8, 1, 1, "", "ISL"], [8, 1, 1, "", "PAD"], [8, 1, 1, "", "PADs"], [8, 1, 1, "", "Vias"], [8, 1, 1, "", "Vias_arc"]], "mxpic.components.electronics.eic_units.PAD": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.PADs": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.Vias": [[8, 3, 1, "", "generate_gds"], [8, 2, 1, "", "szVia"]], "mxpic.components.gds_devices": [[10, 1, 1, "", "gds_lib_load"], [10, 4, 1, "", "generate_gds_lib"]], "mxpic.components.gds_devices.gds_lib_load": [[10, 3, 1, "", "add_pin"]], "mxpic.components.geometry": [[11, 0, 0, "-", "curves"], [13, 0, 0, "-", "polygons"], [14, 0, 0, "-", "racetrack"], [15, 0, 0, "-", "rings"]], "mxpic.components.geometry.curves": [[11, 1, 1, "", "Clothoid"], [11, 1, 1, "", "Conchoid"]], "mxpic.components.geometry.curves.Clothoid": [[11, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.polygons": [[13, 1, 1, "", "strt_round_courner"]], "mxpic.components.geometry.racetrack": [[14, 1, 1, "", "Racetrack"]], "mxpic.components.geometry.racetrack.Racetrack": [[14, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings": [[15, 1, 1, "", "Elipse"], [15, 1, 1, "", "Elipse_dual"], [15, 1, 1, "", "circle"], [15, 1, 1, "", "hole"], [15, 1, 1, "", "mx_bend"]], "mxpic.components.geometry.rings.Elipse": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings.Elipse_dual": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.others.simulation": [[18, 0, 0, "-", "DualPortElements"]], "mxpic.components.others.simulation.DualPortElements": [[18, 4, 1, "", "DEVICE_2X2_FDTD_INIT"], [18, 1, 1, "", "DEVICE_COUPLER"], [18, 1, 1, "", "DEVICE_PORTS"], [18, 1, 1, "", "DEVICE_RING_BUS"], [18, 1, 1, "", "EULER_CROW_BUS"], [18, 1, 1, "", "EULER_CROW_INTER_CP"], [18, 4, 1, "", "MonitorParas"], [18, 4, 1, "", "PortParas"], [18, 1, 1, "", "RESONATOR"], [18, 1, 1, "", "RING_PHASE"], [18, 4, 1, "", "SimuDataFigurePlot"], [18, 4, 1, "", "tuple_to_complex"]], "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS": [[18, 2, 1, "", "FolderPath"]], "mxpic.components.primitives.active": [[21, 0, 0, "-", "dev_ps"], [23, 0, 0, "-", "pin_wg"], [24, 0, 0, "-", "rings"]], "mxpic.components.primitives.active.dev_ps": [[21, 1, 1, "", "Heater_NDoped"], [21, 1, 1, "", "PS_PIN"], [21, 1, 1, "", "Route"]], "mxpic.components.primitives.active.dev_ps.Heater_NDoped": [[21, 3, 1, "", "generate_gds"], [21, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.active.dev_ps.PS_PIN": [[21, 2, 1, "", "cell"], [21, 3, 1, "", "generate_gds"], [21, 3, 1, "", "generate_mzi_gds"]], "mxpic.components.primitives.active.pin_wg": [[23, 1, 1, "", "WGDoped"], [23, 1, 1, "", "waveguide_PIN"]], "mxpic.components.primitives.active.pin_wg.WGDoped": [[23, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.pin_wg.waveguide_PIN": [[23, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.rings": [[24, 1, 1, "", "AED_Ring_PIN"], [24, 1, 1, "", "PIN_MRR_MM_Adddrop"], [24, 1, 1, "", "PIN_MRR_MM_Allpass"], [24, 1, 1, "", "PIN_MRR_STD_Allpass"], [24, 1, 1, "", "Route"], [24, 1, 1, "", "STD_Ring_PIN"]], "mxpic.components.primitives.active.rings.AED_Ring_PIN": [[24, 3, 1, "", "generate_imp_gds"]], "mxpic.components.primitives.passive": [[26, 0, 0, "-", "crows"], [28, 0, 0, "-", "rings"], [29, 0, 0, "-", "unit"]], "mxpic.components.primitives.passive.crows": [[26, 1, 1, "", "CROW_AED"], [26, 1, 1, "", "CROW_Circular_ring"], [26, 1, 1, "", "CROW_Eul_RCK"], [26, 1, 1, "", "CROW_Eul_Ring"], [26, 1, 1, "", "CROW_STD_Adddrop"], [26, 1, 1, "", "CROW_STD_Allpass"], [26, 1, 1, "", "STD_CROW_V"]], "mxpic.components.primitives.passive.crows.STD_CROW_V": [[26, 2, 1, "", "A_ht"], [26, 3, 1, "", "generate_eic_gds"], [26, 3, 1, "", "generate_pic_gds"]], "mxpic.components.primitives.passive.rings": [[28, 1, 1, "", "MRR_AED"], [28, 1, 1, "", "MRR_DW_Adddrop"], [28, 1, 1, "", "MRR_DW_Allpass"], [28, 1, 1, "", "MRR_MM_Adddrop"], [28, 1, 1, "", "MRR_MM_Allpass"], [28, 1, 1, "", "MRR_STD_Adddrop"], [28, 1, 1, "", "MRR_STD_Allpass"], [28, 1, 1, "", "MRR_STD_Ring"], [28, 1, 1, "", "Route"], [28, 1, 1, "", "SOCR"], [28, 1, 1, "", "SOCR_Adiabatic"], [28, 1, 1, "", "SOCR_Adiabatic_Cband"], [28, 1, 1, "", "SOCR_Cband"], [28, 1, 1, "", "STD_ring_AMZI_adddrop"]], "mxpic.components.primitives.passive.rings.MRR_AED": [[28, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.passive.rings.Route": [[28, 3, 1, "", "bend_mine"], [28, 3, 1, "", "bend_p2p"], [28, 3, 1, "", "bend_route"], [28, 3, 1, "", "bend_route_p2p"], [28, 3, 1, "", "bend_strt_bend_p2p"], [28, 3, 1, "", "bend_strt_bend_p2p_mine"], [28, 3, 1, "", "connPatch"], [28, 3, 1, "", "line_mm"], [28, 3, 1, "", "rt_bend"], [28, 3, 1, "", "sbend_p2p"], [28, 3, 1, "", "sbend_p2p_mine"], [28, 3, 1, "", "sbend_route"], [28, 3, 1, "", "strt"], [28, 3, 1, "", "strt_bend_strt_p2p_mine"], [28, 3, 1, "", "strt_mm"], [28, 3, 1, "", "strt_mm_p2p"], [28, 3, 1, "", "strt_p2p"], [28, 3, 1, "", "taper"], [28, 3, 1, "", "taper_p2p"], [28, 3, 1, "", "tube_mine"], [28, 3, 1, "", "ubend_p2p"], [28, 3, 1, "", "ubend_route"]], "mxpic.components.primitives.passive.rings.SOCR": [[28, 3, 1, "", "generate_2pi_gds"], [28, 3, 1, "", "generate_eic_part"], [28, 3, 1, "", "generate_gds"], [28, 3, 1, "", "generate_pic_part"], [28, 3, 1, "", "generate_test_gds"], [28, 3, 1, "", "generate_test_mzi_gds"]], "mxpic.components.primitives.passive.rings.SOCR_Adiabatic": [[28, 3, 1, "", "generate_eic_part"], [28, 3, 1, "", "generate_gds"], [28, 3, 1, "", "generate_pic_part"]], "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop": [[28, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit": [[29, 1, 1, "", "Brag_WDM"], [29, 1, 1, "", "PSR_1x2"], [29, 1, 1, "", "PS_2st"], [29, 1, 1, "", "PS_2st_Straight"], [29, 1, 1, "", "waveguide"]], "mxpic.components.primitives.passive.unit.Brag_WDM": [[29, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PSR_1x2": [[29, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PS_2st": [[29, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit.PS_2st_Straight": [[29, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic": [[30, 0, 0, "-", "PBS"], [31, 0, 0, "-", "YBS"], [32, 0, 0, "-", "bragg"], [33, 0, 0, "-", "couplers"], [34, 0, 0, "-", "cross"], [35, 0, 0, "-", "edge_couplers"], [36, 0, 0, "-", "gratings"], [38, 0, 0, "-", "mmi"], [39, 0, 0, "-", "racetrack"], [40, 0, 0, "-", "rings"], [41, 0, 0, "-", "spiral"], [42, 0, 0, "-", "taper"]], "mxpic.components.primitives.pic.PBS": [[30, 1, 1, "", "PBS_3wg"]], "mxpic.components.primitives.pic.PBS.PBS_3wg": [[30, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS": [[31, 1, 1, "", "YBranch"], [31, 1, 1, "", "Ybranch_3wg"]], "mxpic.components.primitives.pic.YBS.YBranch": [[31, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS.Ybranch_3wg": [[31, 3, 1, "", "generate_gds"], [31, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.bragg": [[32, 1, 1, "", "Bragg"], [32, 1, 1, "", "Bragg_apodized"]], "mxpic.components.primitives.pic.bragg.Bragg_apodized": [[32, 3, 1, "", "generate_negative"], [32, 3, 1, "", "generate_positive"]], "mxpic.components.primitives.pic.couplers": [[33, 1, 1, "", "ADC_STD_2x2"], [33, 1, 1, "", "BS_tdc"], [33, 1, 1, "", "DC"], [33, 1, 1, "", "DC_bend"], [33, 1, 1, "", "DC_pX_3sg"], [33, 1, 1, "", "MDM"], [33, 1, 1, "", "ring_bus_wg"]], "mxpic.components.primitives.pic.couplers.ADC_STD_2x2": [[33, 3, 1, "", "generate_err"], [33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC": [[33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_bend": [[33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_pX_3sg": [[33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.MDM": [[33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.ring_bus_wg": [[33, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.cross": [[34, 1, 1, "", "Cross"], [34, 1, 1, "", "Cross_Sine"]], "mxpic.components.primitives.pic.cross.Cross": [[34, 3, 1, "", "generate_gds"], [34, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.edge_couplers": [[35, 1, 1, "", "EC_dual_layer_px3"]], "mxpic.components.primitives.pic.edge_couplers.EC_dual_layer_px3": [[35, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings": [[36, 1, 1, "", "FA"], [36, 1, 1, "", "GC_STD_1D"], [36, 1, 1, "", "GC_STD_2D"], [36, 1, 1, "", "GC_SiN_Si_Dual_Layer"], [36, 1, 1, "", "Grating_2D_Hole"], [36, 1, 1, "", "Grating_2D_Hole_3Rec"], [36, 1, 1, "", "Grating_2D_Hole_4Rec"], [36, 1, 1, "", "Nano_ant"], [36, 1, 1, "", "Taper"]], "mxpic.components.primitives.pic.gratings.GC_STD_1D": [[36, 3, 1, "", "generate_negative"], [36, 3, 1, "", "generate_positive"], [36, 3, 1, "", "generate_test_dev"]], "mxpic.components.primitives.pic.gratings.GC_STD_2D": [[36, 3, 1, "", "generate_negative"], [36, 3, 1, "", "generate_positive"], [36, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings.GC_SiN_Si_Dual_Layer": [[36, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole": [[36, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec": [[36, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec": [[36, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Nano_ant": [[36, 3, 1, "", "generate_gds"], [36, 3, 1, "", "generate_gds_error"], [36, 3, 1, "", "generate_gds_positive"]], "mxpic.components.primitives.pic.gratings.Taper": [[36, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.mmi": [[38, 1, 1, "", "MMI_ML"], [38, 1, 1, "", "MMI_STD"]], "mxpic.components.primitives.pic.mmi.MMI_ML": [[38, 3, 1, "", "generate_gds"], [38, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.racetrack": [[39, 1, 1, "", "RacetrackResonator"], [39, 1, 1, "", "Racetrack_MM_Adddrop"], [39, 1, 1, "", "Racetrack_MM_Allpass"], [39, 1, 1, "", "Racetrack_STD_Allpass"], [39, 1, 1, "", "Route"]], "mxpic.components.primitives.pic.racetrack.RacetrackResonator": [[39, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass": [[39, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.pic.rings": [[40, 1, 1, "", "AED_ring"], [40, 1, 1, "", "STD_PIC_Rings"]], "mxpic.components.primitives.pic.rings.AED_ring": [[40, 3, 1, "", "generate_pic_gds"], [40, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.spiral": [[41, 1, 1, "", "Spiral_Cicle_MM"], [41, 1, 1, "", "Spiral_Cicle_STD"], [41, 1, 1, "", "Spiral_Rect_STD"], [41, 1, 1, "", "spiral"], [41, 1, 1, "", "spiral_circle"], [41, 1, 1, "", "spiral_rectangle"]], "mxpic.components.primitives.pic.spiral.spiral": [[41, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.spiral.spiral_circle": [[41, 2, 1, "", "cell"], [41, 3, 1, "", "generate_gds"], [41, 3, 1, "", "opt_euler"]], "mxpic.components.primitives.pic.spiral.spiral_rectangle": [[41, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.taper": [[42, 1, 1, "", "PSR"], [42, 1, 1, "", "taper_xs2xs"], [42, 1, 1, "", "transition"]], "mxpic.components.routing": [[43, 1, 1, "", "Route"], [43, 4, 1, "", "ic_exception"]], "mxpic.components.routing.Route": [[43, 3, 1, "", "bend_mine"], [43, 3, 1, "", "bend_p2p"], [43, 3, 1, "", "bend_route"], [43, 3, 1, "", "bend_route_p2p"], [43, 3, 1, "", "bend_strt_bend_p2p"], [43, 3, 1, "", "bend_strt_bend_p2p_mine"], [43, 3, 1, "", "connPatch"], [43, 3, 1, "", "line_mm"], [43, 3, 1, "", "rt_bend"], [43, 3, 1, "", "sbend_p2p"], [43, 3, 1, "", "sbend_p2p_mine"], [43, 3, 1, "", "sbend_route"], [43, 3, 1, "", "strt"], [43, 3, 1, "", "strt_bend_strt_p2p_mine"], [43, 3, 1, "", "strt_mm"], [43, 3, 1, "", "strt_mm_p2p"], [43, 3, 1, "", "strt_p2p"], [43, 3, 1, "", "taper"], [43, 3, 1, "", "taper_p2p"], [43, 3, 1, "", "tube_mine"], [43, 3, 1, "", "ubend_p2p"], [43, 3, 1, "", "ubend_route"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function"}, "terms": {"": [28, 43], "0": [2, 3, 4, 8, 10, 11, 14, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "001": [11, 14, 15, 40], "01": [38, 39, 40, 42], "02": 33, "05": [15, 28, 41], "1": [3, 8, 11, 13, 18, 21, 23, 24, 26, 28, 29, 31, 32, 33, 34, 35, 36, 38, 41, 42, 43], "10": [3, 4, 5, 8, 11, 13, 14, 15, 23, 24, 26, 28, 29, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "100": [8, 14, 21, 23, 28, 33, 35], "10000": 11, "10001": 18, "101": 18, "11": [8, 30], "110": 36, "12": 35, "120": 8, "120degre": [], "1310nm": [], "140": 29, "15": [3, 4, 26, 29, 31, 32, 33, 35, 39, 42], "150": [3, 29], "1500nm": [], "1550nm": [], "16": 5, "1600nm": [], "18": [31, 40], "180": [24, 41], "1by": [], "1d": 36, "1um": [], "1x2": 29, "2": [4, 8, 18, 21, 23, 24, 28, 29, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "20": [2, 4, 11, 21, 24, 26, 28, 29, 30, 31, 33, 36, 39, 40, 41, 43], "200": [23, 32, 35], "200nm": [], "2021": [], "2022": [], "2026": [], "22": [18, 33], "25": [4, 23, 30, 36], "250": 28, "270": [24, 28], "28": [], "2d": 36, "2st": 29, "2um": [], "2x2": [4, 33], "3": [4, 8, 15, 18, 24, 26, 28, 30, 31, 32, 34, 36, 38, 43], "30": [3, 4, 23, 24, 26, 28, 29, 33, 36, 39, 40, 42], "300": [33, 36], "33": 33, "35": [23, 24, 26, 33, 38, 40], "360": 15, "38": 26, "3db": [], "3rec": 36, "3sg": 33, "3um": [], "3wg": [30, 31], "4": [11, 18, 23, 24, 26, 28, 31, 34, 36, 43], "40": [3, 28, 29, 33, 36, 42, 43], "400": [31, 33, 34, 35], "41": 36, "45": [2, 3, 4, 10, 11, 15, 21, 24, 26, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42], "450nm": [], "4rec": 36, "5": [3, 4, 8, 11, 13, 14, 18, 21, 23, 26, 28, 29, 30, 32, 33, 34, 36, 38, 41, 42, 43], "50": [4, 8, 28, 29, 35, 36, 38, 39, 41, 43], "500": 21, "510nm": [], "55": [24, 28, 29, 30, 33, 40, 42], "57": 36, "5um": [], "6": [4, 15, 18, 24, 28, 31, 34, 35, 36], "60": [8, 21], "61": 33, "64": [8, 13, 33], "65": [24, 26, 40], "7": [29, 30], "75": 3, "8": [4, 8, 23, 24, 26, 29, 31, 33, 35, 36], "80": [4, 8, 31, 33], "800": 21, "88": 33, "9": [24, 28, 29, 36, 40], "90": [8, 21, 24, 28, 39, 43], "908": [], "913": [], "96": [], "A": [11, 33], "AED": [24, 26, 28, 40], "If": [2, 3, 4, 5, 28, 43], "The": [28, 43], "_description_": 23, "_type_": 23, "a0": [], "a1": 5, "a1_att": [26, 28, 39, 40], "a1_cp": [26, 28, 39, 40], "a2": [], "a2_att": [26, 28, 39, 40], "a2_cp": [26, 28, 39, 40], "a_anti": 33, "a_anti_rfl": 36, "a_att": [24, 26, 28, 31, 39], "a_bend": 30, "a_cp": [24, 26, 28, 39], "a_gc_tap": 36, "a_ht": [24, 26, 28], "a_imp_in": 24, "a_imp_out": 24, "a_tap": 36, "abandon": 21, "absent": 8, "account": [28, 43], "activ": [16, 25], "acut": [], "ad": [4, 28, 36, 43], "adapt": [], "adapt_width": [21, 24, 28, 39, 43], "adapt_x": [21, 24, 28, 39, 43], "adc": 33, "adc_std_2x2": 37, "add": [2, 3, 24, 26, 28, 30, 31, 33, 38, 39, 40, 41], "add_pin": 10, "adddrop": [24, 26, 28, 39], "adiabat": [28, 35], "adjac": [], "advanc": [7, 16], "aed_r": [28, 37], "aed_ring_pin": 22, "after": [], "air": 35, "air_trench": 35, "al": [], "align": [4, 28, 43], "all": [28, 43], "allpass": [24, 26, 28, 39], "alon": [], "along": 4, "alreadi": 28, "altern": [], "amax": [28, 43], "amf": [], "amf_ipkiss_pdk": [], "amf_pdk": [], "amzi": [4, 28], "amzi_w": 7, "an": [28, 43], "analysi": 36, "angl": [2, 15, 21, 24, 26, 28, 30, 31, 33, 35, 36, 39, 40, 43], "angle_til": 35, "ani": [2, 3, 4, 5, 23, 24, 26, 28, 29, 33, 36, 39, 40, 41], "anoth": [28, 43], "antenna": [], "anti": [], "apertur": [], "apod": 32, "aport": 18, "append": [], "appli": 43, "ar": 5, "arc": [], "area": 8, "arg": 15, "arm": [3, 4], "arm_sine_width": 38, "around": [2, 3], "arrai": 36, "arrow": [28, 43], "assembl": [], "associ": 35, "assum": [28, 43], "asymmetr": [3, 4], "attach": [28, 43], "attribut": 5, "auto": [], "autom": 0, "automat": [28, 43], "avoid": [28, 43], "axi": [], "b": [2, 3, 4, 32, 33], "b1": 5, "b2": 5, "back": 35, "balanc": [28, 43], "band": 28, "base": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "basic": [0, 16], "bdc": [], "beam": [2, 3, 4], "beam_splitt": [], "befor": [28, 43], "begin": [28, 43], "begin_flat": 11, "behavior": 4, "bend": [2, 3, 4, 5, 15, 28, 33, 35, 41, 43], "bend_cel": 14, "bend_dc": 33, "bend_heat": 4, "bend_min": [28, 43], "bend_p2p": [28, 43], "bend_radiu": 5, "bend_rout": [28, 43], "bend_route_p2p": [28, 43], "bend_straight_bend_p2p": [28, 43], "bend_strt_bend": [28, 43], "bend_strt_bend_p2p": [28, 43], "bend_strt_bend_p2p_min": [28, 43], "bendendflag": [28, 43], "bent": 4, "beol": 35, "between": [3, 4, 5, 23, 24, 26, 28, 29, 35, 39, 43], "binari": 5, "block": 6, "bodi": [], "bool": [2, 3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "boolean": [], "both": [3, 4], "box": [5, 35], "brag": 29, "brag_wdm": 27, "bragg": [25, 29, 37], "bragg_apod": 37, "branch": 5, "broadband": 33, "broadcast": [], "bs1": 3, "bs2": 3, "bs3": 3, "bs_tdc": 37, "bsb": [28, 43], "bu": [3, 4, 26, 33], "build": [6, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42], "built": [2, 4, 5], "bus_dop": 24, "bus_ord": 26, "butterfli": 3, "c": 28, "calcul": [], "can": [15, 28, 36, 43], "cband": [], "cell": [2, 3, 4, 5, 10, 13, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "cell_attribut": 40, "cell_nam": [10, 21, 28, 36], "cell_transit": [], "cell_xs_transit": [23, 24, 28, 39, 40, 41], "cellnam": 33, "cellsreus": 10, "center": 15, "central": [35, 41], "chamfer": [28, 43], "channel": 5, "chip": 35, "cicl": 41, "circl": [12, 33, 36, 41], "circular": [15, 26, 33], "circumscrib": [], "clad": [2, 3, 24, 26, 28, 30, 31, 33, 35, 38, 39, 40, 41], "cladmateri": 18, "class": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "clear": 35, "clothoid": 12, "clothoid_ord": 33, "code": [28, 43], "coerc": 5, "column": [], "common": 4, "compact": 3, "compens": [3, 4], "complet": [], "compon": [7, 9, 12, 17, 19, 22, 25, 27, 37], "composit": [0, 16, 26, 29], "conchoid": 12, "condit": 43, "configur": [], "connect": [26, 28, 43], "connpatch": [28, 43], "constant": [], "constraint": [], "contact": 4, "contain": [], "continu": [24, 26, 28, 30, 31, 33, 38, 39, 40, 41], "contrast": 35, "control": [], "conveni": [3, 6], "convert": 35, "core": 35, "corner": [24, 26, 28, 30, 31, 33, 38, 39, 40, 41], "correspond": [], "cosin": [], "count": [36, 38, 41], "coupl": [28, 35], "coupler": [2, 25, 35, 36, 37], "cp": [28, 43], "creat": [28, 36, 43], "cross": [2, 3, 4, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42], "cross_nam": 8, "cross_sin": 37, "crow": [6, 25, 27], "crow_a": 27, "crow_circular_r": 27, "crow_custom": 26, "crow_eul_r": 27, "crow_eul_rck": 27, "crow_std_adddrop": 27, "crow_std_allpass": 27, "crx_te_1310": [], "crx_te_1550": [], "ct_pitch": 21, "cubic": [], "cumec": [], "cumec_csip130cu": [], "cumec_pdk": [], "cumec_sip130cu_pdk": [], "curv": [12, 16], "curvatur": 35, "custom": [], "cycl": 41, "d2wg_list": 21, "d_arm": [3, 4], "d_hole": [], "d_port": [3, 4], "da_tran": 33, "dac": [26, 28, 33], "dc": [3, 4, 37], "dc_bend": 37, "dc_bend_20_80_cband": [], "dc_bend_4_96_cband": [], "dc_bend_50_50_cband": [], "dc_px3_50_50_cband": [], "dc_px_3sg": 37, "dc_te_1550": [], "debug": [], "deep": 35, "default": [2, 3, 4, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "defin": 36, "define_typ": 36, "definit": [23, 24, 26, 28, 29, 39], "deflect": [], "degre": [2, 24, 26, 28, 30, 31, 33, 35, 36, 39, 40], "demultiplex": 29, "depend": [23, 24, 28, 39, 40, 41], "depth": [], "deriv": [], "describ": [28, 43], "design": 28, "detail": [], "detch": [], "determin": [], "dev_nam": 18, "dev_p": [22, 25], "devic": [18, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42], "device_2x2_fdtd_init": 19, "device_coupl": 19, "device_port": 19, "device_ring_bu": 19, "devnam": 18, "diamet": [], "differ": [], "differenti": [3, 4], "diffract": [], "dimens": 35, "direct": [2, 28, 33, 43], "directional_coupl": [], "disabl": [3, 4], "disconnect": [28, 43], "discret": [], "disk": 15, "distanc": 3, "divis": [], "dl": [3, 4], "dl_amzi": [3, 4], "dl_arm": 28, "dl_cal": 11, "dl_ht": 4, "dl_p2p": [24, 26, 28, 33, 39, 40], "dl_tran": 33, "dl_wg": 11, "dlc": 33, "dlx": [14, 26, 39], "dly": [14, 26, 39], "dmin": 41, "do": [], "doc": [21, 24, 28, 39, 43], "document": 0, "doe": [28, 43], "dofirst": [28, 43], "dope": 21, "dope_offset": 23, "dope_ovlp": 23, "dostrfirst": [28, 43], "dp_in": 38, "dp_out": 38, "draw": [3, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "dt": 32, "dual": [35, 36], "dual_bu": 24, "dual_ht": 3, "dualportel": [17, 19], "dummi": 35, "dure": 3, "duti": [], "duty_cycl": 36, "dw": [28, 33], "dw_toler": 42, "dx": 18, "dx_gc2gc": [31, 33, 34, 36, 38, 40], "dx_hole": [15, 36], "dx_offset": 29, "dxgc2gc": [3, 4], "dy": 18, "dy_gc2gc": [31, 33, 38, 40], "dy_hol": [15, 36], "dygc2gc": [3, 4], "dz": 18, "e": 35, "each": 4, "eas": [], "ec_1550": [], "ec_dual_layer_px3": 37, "ec_te_1550": [], "edg": [8, 35], "edge1": [28, 43], "edge2": [28, 43], "edge_coupl": [25, 37], "edgepoint": [28, 43], "effici": [], "eic_unit": [9, 16], "either": [], "electr": [24, 26, 28, 29], "electron": [0, 16], "element": [28, 43], "elips": 12, "elipse_du": 12, "ellipt": 15, "enabl": 4, "end": [15, 28, 43], "end_angl": [28, 43], "end_patch": [11, 33], "enforc": [], "entir": [], "entranc": [], "entri": [], "epin_di": 28, "epin_dx": 28, "epin_ht_di": 24, "epin_ht_dx": 24, "equal": [], "err": 33, "err_asi": 31, "et": [], "eta_d": 32, "eta_etch": [32, 36], "etch": 36, "etch_depth": 36, "etch_shap": 32, "etch_typ": [32, 36], "eul": 26, "euler": [3, 33], "euler_anti_bend": 33, "euler_bend": [29, 41], "euler_crow_bu": 19, "euler_crow_inter_cp": 19, "euler_point": 33, "euler_sbend": 41, "euler_transist": 33, "euler_trasit": [24, 26, 28, 39, 40], "evalu": [], "everi": [], "exactli": [], "exampl": [28, 43], "except": 43, "exclus": 35, "excurs": 4, "exit": [], "expect": [], "explicit": 4, "export": 6, "export_plt": [28, 43], "expos": [], "extens": 35, "extern": [], "extra": [28, 43], "f": [28, 43], "fa": 37, "fabric": 33, "facet": 35, "fallback": [28, 43], "fals": [3, 4, 5, 8, 11, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "fan": [], "fanout": [], "fcw_tre": 36, "fdtd": 18, "fdtd_height": 18, "fdtdbuild": 18, "featur": [2, 3], "feed": [], "fetch": [32, 36], "fiber": [35, 36], "fiber_coupl": 36, "field": [], "field_sampl": 18, "file": 15, "fill": [], "filler": [], "final": 35, "final_flat": 11, "first": [3, 28, 35, 43], "float": [2, 3, 4, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 35, 36, 38, 39, 40, 41, 42, 43], "fold": 3, "folderpath": 18, "follow": [], "footprint": [], "forc": [], "form": [], "four": [], "fraction": [], "from": [2, 4, 5, 28, 43], "function": [28, 43], "futur": 36, "g": [28, 35, 43], "g0": 33, "g1": 33, "gaolei": [], "gap": [23, 24, 26, 28, 30, 31, 33, 36, 39, 40, 41, 43], "gap0": 33, "gap1": [26, 28, 33, 39, 40], "gap2": [26, 28, 39, 40], "gap_bu": 26, "gap_cp": 26, "gap_crow": 26, "gap_n_i": 24, "gap_p_i": 24, "gap_teeth_si": 36, "gap_teeth_sin": 36, "gc": [3, 4, 21, 28, 29, 31, 33, 34, 36, 38, 40], "gc2gc_dx": 29, "gc2gc_dy": 29, "gc2gc_length": [21, 28], "gc_in": 29, "gc_offset": 21, "gc_sin_si_dual_lay": 37, "gc_std_1d": 37, "gc_std_2d": 37, "gc_te_1310": [], "gc_te_1550": [], "gc_tm_1310": [], "gc_tm_1550": [], "gd": [5, 23, 28, 33, 35, 36], "gds_devic": [0, 16], "gds_lib_gener": [], "gds_lib_load": 16, "ge": [], "gener": [2, 3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "generate_2pi_gd": 28, "generate_eic_gd": [26, 28, 39], "generate_eic_part": 28, "generate_err": 33, "generate_gd": [3, 4, 5, 8, 11, 14, 15, 21, 23, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 41], "generate_gds_error": 36, "generate_gds_lib": 16, "generate_gds_posit": 36, "generate_imp_gd": 24, "generate_mzi_gd": 21, "generate_neg": [32, 36], "generate_pic_gd": [26, 40], "generate_pic_part": 28, "generate_posit": [32, 36], "generate_test_dev": 36, "generate_test_gd": [3, 4, 21, 28, 29, 31, 33, 34, 36, 38, 40], "generate_test_mzi_gd": 28, "geo": [28, 43], "geometr": 13, "geometri": [0, 2, 3, 4, 16, 24, 26, 28, 30, 31, 33, 38, 39, 40, 41], "getch_tr": 36, "give": [28, 43], "glass": 18, "go": 36, "gpd_1550": [], "gpuon": 18, "grate": [25, 29, 37], "grating_2d_hol": 37, "grating_2d_hole_3rec": 37, "grating_2d_hole_4rec": 37, "grating_coupl": [], "grating_unit": 36, "grid": [4, 28, 43], "gridpatch": [28, 43], "gridsnap": [28, 43], "gt_diamet": 36, "gt_layer": 36, "gt_vector": 36, "guid": [28, 43], "h": [], "half": [], "handl": 3, "heater": [3, 4, 21, 23, 24, 26, 28, 29, 39], "heater_length": 21, "heater_ndop": 22, "heater_width": 21, "height": 18, "helper": [4, 13], "hgl_pdk_a": [], "high": [21, 35], "hole": [12, 36], "hole_shap": [15, 36], "horizont": [], "horsesho": [28, 43], "ht_notch_dual": [24, 28], "ht_rot": 28, "ht_same_sid": 4, "ht_shift": 26, "hu": [], "huang": [], "i": [2, 3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "ic": [28, 43], "ic_except": 16, "ictyp": [28, 43], "ident": [], "identifi": [23, 24, 26, 28, 30, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42], "if_open": 21, "ignor": [28, 43], "im": [28, 43], "imec": 36, "imecas_pdk": [], "imecas_pdk2": [], "implant": 24, "implement": [], "import": [28, 43], "in_out_align": 41, "includ": [], "index": 35, "individu": [], "info": [28, 43], "inherit": [], "initi": [8, 35], "inner": 3, "innermost": [], "input": [3, 4, 35], "insert": [], "insid": [], "instanc": [28, 36, 43], "instanti": [3, 8, 10, 21, 24, 28, 39, 43], "instead": [], "instrcutpath": 18, "instruct": 18, "int": [3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "interact": [], "interconnect": [21, 24, 28, 39, 43], "interfac": [3, 4], "interfer": [], "interferomet": [3, 4, 21], "intern": [3, 4], "interpol": [], "introduc": [28, 43], "io": [], "iri": [15, 24, 28, 40], "irx": [15, 24, 28, 40], "isl": [3, 4, 9, 24, 26, 28, 29], "isl_left": 26, "isl_low": 4, "isl_right": 26, "isl_upp": 4, "isol": [3, 4, 24, 26, 28, 29], "its": [28, 43], "jump": [28, 43], "junction": 21, "keep": [], "kei": [], "kr": 11, "l": [3, 28, 31, 34], "l0": 3, "l1": 29, "l12": [3, 29], "l2": 29, "l_ar": 36, "l_arm": [3, 4, 38], "l_attach": 31, "l_box_end": 35, "l_compens": 4, "l_cp": 33, "l_end": [34, 35, 36], "l_end_si": 36, "l_end_sin": 36, "l_field_cent": 36, "l_heater": [4, 29], "l_ht": [3, 23, 29], "l_in": 35, "l_in_tp": 31, "l_inner": 3, "l_mmi": 38, "l_patch": [3, 4], "l_port": 42, "l_tail": 36, "l_taper": [23, 36, 42], "l_tilt": [24, 26, 28, 39, 40], "l_tp": [3, 28, 29], "l_wg": [4, 21, 23, 29], "la": 15, "laid": [], "later": [28, 43], "layer": [11, 13, 14, 15, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "layer_d": 42, "layer_dt": 35, "layer_dum_exl_b": 35, "layer_fetch": 42, "layer_height": 18, "layer_metch": 42, "layer_ox_open": 36, "layer_si_etch": 36, "layer_si_slab": 36, "layer_si_teeth": 36, "layer_sin_etch": 36, "layer_sin_slab": [35, 36], "layer_sin_teeth": 36, "layer_top_cov": 35, "layer_u": 42, "layermap": 10, "layernam": [28, 43], "layout": [2, 3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42], "lb": 15, "lb0": 33, "lc1": 33, "lc2": 33, "lcp": [30, 31], "ld": 33, "least": [], "len": [], "length": [3, 4, 8, 13, 23, 24, 26, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "length1": [28, 43], "length2": [28, 43], "level": 5, "liang": [], "lib_nam": 10, "lib_path": 10, "libpath": 18, "librari": 0, "like": [], "line_mm": [28, 43], "linear": [28, 36, 43], "link": [], "list": [21, 23, 26, 31, 34, 36, 38, 42], "ll": [28, 43], "lmax": 8, "lmin": 41, "ln": 3, "ln1": 3, "ln2": 3, "locat": 15, "logic": 36, "longer": [28, 43], "longitudin": [], "loop": 2, "loopmirror": [7, 16], "lower": [4, 5], "lower_isl": 29, "lp1": 33, "lpatch": 41, "lport": 41, "lr": [28, 43], "ls1": 3, "ls2": 3, "lstart": [28, 43], "lt": 33, "lt_bu": 33, "lt_cp": 33, "lt_rib": 42, "lt_slab": 42, "ltot": [28, 43], "ltp": [3, 4, 28, 29, 41, 43], "ltp1": [35, 42], "ltp2": [35, 42], "ltp3": 35, "ltp_bu": [24, 26, 28, 39, 40], "ltp_mm": [28, 43], "ltp_port": [23, 41], "ltran": 42, "lu": 33, "lumer": 18, "lumericalpath": 18, "lx_end": 36, "lx_port": 36, "lx_side": 36, "lx_sq": 15, "lx_taper": 36, "ly_end": 36, "ly_port": 36, "ly_sid": 36, "ly_sq": 15, "ly_tap": 36, "mach": [3, 4, 21], "made": [28, 43], "mai": [], "main": [], "manag": 35, "manual": [], "margin": [], "marker": [21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42], "master": [], "match": [], "materi": 18, "matter": [28, 43], "max_theta": 36, "maximum": [3, 28, 43], "mdm": [29, 37], "mdm_adc_te1_1550": [], "mdm_adc_te2_1550": [], "mdm_adc_te3_1550": [], "mean": [], "measur": [], "mesh": 4, "mesh_ord": 18, "mesh_typ": 4, "metal": [3, 4, 8, 23, 24, 26, 28, 29, 39], "metch": 36, "micrometr": [], "micron": [2, 3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42], "mid_offset": 28, "midpoint": 35, "minimum": [3, 41], "mirror": 2, "mitig": [], "ml": 38, "mm": [24, 28, 39, 41], "mm_rout": [28, 43], "mmg_1d_d14um_1550_2mod": [], "mmi": [21, 25, 28, 37], "mmi_1x2_te_1310": [], "mmi_1x2_te_1550": [], "mmi_2x2_te_1310": [], "mmi_2x2_te_1550": [], "mmi_ml": 37, "mmi_sine_width": 38, "mmi_std": 37, "mode": [21, 24, 28, 29, 39, 43], "mode_radiu": 36, "modeidx": 18, "model": [28, 43], "modul": 28, "mohanti": [], "monitor": [], "monitorpara": 19, "mono": [], "mrr": [24, 28], "mrr_a": [24, 27], "mrr_dw_adddrop": 27, "mrr_dw_allpass": 27, "mrr_mm_adddrop": 27, "mrr_mm_allpass": 27, "mrr_std_adddrop": 27, "mrr_std_allpass": 27, "mrr_std_ring": 27, "msg": 43, "multi": [], "multimod": 28, "multimode_interferomet": [], "multiplex": 29, "must": [], "mx_bend": 12, "mx_frame_lib": 15, "mxpic": [7, 9, 12, 16, 17, 19, 22, 25, 27, 37], "mxpic_handbook": [], "myself": [28, 43], "mzi": [4, 7, 16], "mzi_2st_ubend": 7, "mzi_butterfli": 7, "mzi_eubend": 7, "mzi_mesh": [7, 16], "mzi_mesh_parl": 7, "mzi_mesh_tri": 7, "mzi_mesh_u": 7, "mzi_n": 7, "mzi_ns_ubend": 7, "mzi_offset": 21, "mzi_ubend": 7, "n": [21, 24, 32], "n_bend": 4, "n_in": 38, "n_layer_list": 21, "n_out": 38, "n_point": [13, 15, 34], "n_port": 4, "n_teeth_si": 36, "n_teeth_sin": 36, "name": [2, 3, 4, 8, 10, 11, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "nano": [], "nano_": 37, "nanoantenna": 36, "nat": [], "nazca": [2, 3, 4, 5, 28, 43], "nd": [28, 43], "ndarrai": 31, "nearest": 5, "need": [5, 28, 43], "neg": [15, 28, 43], "nest": 3, "new": [28, 43], "nitrid": 35, "nld": 23, "node": [28, 43], "nois": 28, "nomin": 3, "non": 36, "none": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "normal": 28, "np": [21, 23, 24, 31], "num": [8, 34, 36], "num_i": 36, "num_socr": 28, "num_x": 36, "number": [4, 5, 28, 36, 43], "nw": [21, 23], "object": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 23, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42], "offset": [4, 15, 21, 24, 28, 39, 40, 43], "offset_a": 15, "offset_b": 15, "offset_i": [15, 24, 28, 40], "offset_x": [15, 24, 28, 40], "omit": [3, 4, 5], "op": [], "open": 35, "oper": [3, 18], "opt_a1": 18, "opt_a2": 18, "opt_b1": 18, "opt_b2": 18, "opt_eul": 41, "optic": [2, 3, 4, 5, 35, 36], "optim": 41, "option": [2, 3, 4, 5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "order": [], "ori": [15, 24, 28, 40], "ori_teeth_offset": 36, "orient": [28, 43], "original_funct": [28, 43], "orthogon": [28, 43], "orx": [15, 24, 28, 40], "other": [0, 16, 19], "out": [], "outer": 3, "outer_isl": 3, "outermost": [], "output": [3, 4, 5, 28, 43], "output_numb": 5, "output_pitch": 5, "over": 28, "overal": [], "overrid": [3, 4], "oxid": 35, "oxide_facet": 35, "p": [24, 29], "p_ar": 36, "p_in_n_out": 24, "p_layer_list": 21, "packag": [28, 43], "pad": [9, 21, 35], "pad_60_80": [], "pad_opt": 35, "pair": [], "palik": 18, "para": [], "parabol": 36, "parallel": [28, 43], "parallelogram": 4, "paramet": [2, 3, 4, 5, 8, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "parametr": [], "part": [], "pass": 4, "passiv": [16, 25], "patch": [2, 3, 4, 24, 26, 28, 30, 31, 33, 38, 39, 40, 41, 43], "path": 18, "pattern": 23, "pb": [25, 37], "pbs_1550": [], "pbs_3wg": 37, "pcb": [21, 24, 28, 39, 43], "pd_cband_cel": [], "pdk": [], "pdk_path": [], "per": [], "perform": [], "period": [4, 32, 36], "phase": [4, 21, 28, 36], "photon": 0, "photoresist": 36, "physic": [], "pic": [16, 25], "pin": [0, 3, 4, 5, 16, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "pin1": [28, 43], "pin2": [28, 43], "pin_mrr_mm_adddrop": 22, "pin_mrr_mm_allpass": 22, "pin_mrr_std_allpass": 22, "pin_nam": 10, "pin_wg": [22, 25], "pinstyl": [21, 24, 28, 39, 43], "pitch": [3, 4, 5, 36], "place": [4, 15, 28, 43], "placement": 4, "planar": [], "plane": [], "pld": 23, "point": [28, 43], "polar": [29, 42], "polygon": [12, 15, 16], "polysi_diamet": 36, "polysi_lay": 36, "polysi_vector": 36, "polysilicon": [], "port": [3, 4, 18], "port_align": 4, "port_angl": 41, "port_dist": 18, "port_nam": 18, "port_radiu": 18, "port_symmetr": 33, "port_width": 18, "portpara": 19, "ports_extend": 18, "posit": [3, 28, 36, 43], "possibl": [28, 43], "power": [5, 33], "pp": [21, 23, 24], "pre": [], "preced": [], "preset": [], "primit": [0, 11, 14, 15, 16, 22, 27, 37], "profil": [], "provid": [2, 28, 43], "ps_2st": 27, "ps_2st_straight": 27, "ps_pin": 22, "psr": [29, 37], "psr_1x2": 27, "psr_unit": 42, "purpos": [], "put": [28, 43], "pw": [21, 23], "px": [33, 36], "px_type": 33, "py": [15, 36], "quickstart": [], "qy_pdk_a": [], "r": [8, 11, 41], "r0": [11, 26, 31, 33, 39, 41], "r0_rck": 39, "r1": [26, 39], "r1_att": [26, 28, 39, 40], "r1_att_min": [26, 28, 39, 40], "r1_cp": [26, 28, 39, 40], "r1_rck": 39, "r2": 26, "r2_att": [26, 28, 39, 40], "r2_att_min": [26, 28, 39, 40], "r2_cp": [26, 28, 39, 40], "r_att": [24, 26, 28, 31, 39], "r_att_min": [24, 26, 28, 39], "r_bend": [3, 4, 14, 28, 29, 30, 35, 38, 40, 41], "r_compens": 4, "r_cp": [24, 26, 33], "r_hole": 15, "r_in": 33, "r_max_anti": 33, "r_max_tran": 33, "r_min_anti": 33, "r_out": 28, "r_outer": 26, "r_ratio_mamnu": 41, "r_rck": 39, "r_ring": [18, 24, 26, 28, 40], "r_teeth_ori_si": 36, "r_teeth_ori_sin": 36, "racetrack": [12, 16, 25, 37], "racetrack_mm_adddrop": 37, "racetrack_mm_allpass": 37, "racetrack_std_allpass": 37, "racetrackreson": 37, "radian": [], "radiu": [2, 3, 4, 5, 13, 15, 18, 21, 24, 26, 28, 29, 30, 31, 33, 35, 36, 39, 40, 41, 43], "radius1": [28, 43], "radius2": [28, 43], "rais": 43, "rang": 15, "ratio": [], "ratt": 39, "rbend": 31, "rc_point": 8, "rc_radiu": 8, "rc_ratio": [], "rck": 26, "rd0": 33, "rd1": 33, "re": [8, 11, 14, 15, 28, 31, 33, 34, 38, 39, 40, 41, 42], "reach": [], "rect": 41, "rectangl": [32, 41], "rectangular": [], "reduc": 35, "ref": [28, 43], "refer": [28, 43], "reflect": 35, "reflector": 2, "reflector_vector": 36, "region": [3, 36], "regist": [], "renam": 10, "repeat": [4, 5], "repetit": [36, 38, 41], "res_eic": 28, "reserv": [], "resolut": [3, 15], "reson": 19, "respect": 35, "result": [28, 36, 43], "return": [2, 23, 28, 43], "reus": 3, "reusabl": [], "revers": 4, "rib": [23, 42], "rib2strip": 41, "rib_tap": 23, "rib_tr": 42, "right": [28, 43], "ring": [6, 12, 16, 22, 25, 26, 27, 33, 37], "ring_bus_wg": 37, "ring_phas": 19, "rl": [28, 43], "rm_ratio": [], "rmax": [3, 11, 33], "rmax_bend": 41, "rmin": [3, 29, 33], "rmin_bend": 41, "rmin_bend_cent": 41, "rmin_eul": 41, "robust": [], "root": [], "rotat": [29, 42], "rout": [0, 2, 3, 4, 5, 16, 22, 27, 35, 37], "row": 8, "row_offset": 8, "rr": [28, 43], "rt_bend": [28, 43], "ru0": 33, "ru1": 33, "run": 18, "runfdtd": 18, "sa": [8, 23], "same": 4, "sampl": [], "sample_build": [], "sample_point": 18, "sample_step": 36, "saveflag": 18, "sbend": [28, 43], "sbend_p2p": [28, 43], "sbend_p2p_min": [28, 43], "sbend_rout": [28, 43], "sbend_typ": 33, "scaffold": [], "scalar": [], "scale": [], "scheme": [], "search": 3, "second": [3, 28, 35, 43], "secondari": 35, "section": [2, 3, 4, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "sector": [], "sector_gc": 36, "see": [], "segment": [], "selector": [], "self": [], "separ": [], "sequenc": [], "set": [28, 43], "setch": [], "shape": [4, 28, 29, 36, 41, 42, 43], "share": [], "sharp": [2, 3, 24, 26, 28, 30, 31, 33, 38, 39, 40, 41], "sharp_patch": [2, 3, 11, 15, 24, 26, 28, 30, 31, 33, 38, 39, 40, 41, 43], "sharp_path": [28, 43], "shift": [3, 21, 28, 43], "shifter": [4, 21], "shortest": [28, 43], "should": [], "show": [3, 4, 5], "show_pin": [3, 4, 5, 8, 11, 15, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42], "showpin": [28, 43], "si": [18, 36], "side": [2, 4], "sidelob": [28, 43], "sidewai": [28, 43], "sidewya": [28, 43], "silicon": [0, 18], "simpl": [5, 13], "simu_x": 18, "simubox": 18, "simudatafigureplot": 19, "simul": [16, 17, 36], "simupath": 18, "sin": [35, 36], "sin_rib_wg": 35, "sine": [11, 15, 34, 42], "singl": [], "single_end": 33, "sio2": 18, "size": [28, 35, 43], "slab": 35, "slab_width": 21, "small": [], "socr": 27, "socr_adiabat": 27, "socr_adiabatic_cband": 27, "socr_cband": 27, "soi": 35, "sourc": [], "sourcemod": 18, "sp_cont": 24, "sp_isl_met": 8, "sp_isl_wg": 8, "sp_sc": 23, "sp_via_i2m": 23, "sp_via_x": 8, "space": [4, 8, 23, 24, 26, 28, 30, 31, 33, 36, 39, 40, 41], "specif": [28, 43], "speed": 21, "sphinx": [], "spiral": [11, 25, 37], "spiral_cicle_mm": 37, "spiral_cicle_std": 37, "spiral_circl": 37, "spiral_ord": 11, "spiral_rect_std": 37, "spiral_rectangl": 37, "spline": [], "split": [5, 33], "splitter": [2, 3, 4, 5, 29, 42], "splittingtre": 7, "spot": 35, "spttree": [7, 16], "squar": [], "stage": 3, "stand": [], "standard": 4, "start": [15, 28, 43], "std": [24, 26, 28, 33, 36, 38, 39, 40, 41], "std_crow_v": 27, "std_pic_r": 37, "std_ring_amzi_adddrop": 27, "std_ring_pin": 22, "step": [], "stop": 15, "str": [2, 3, 4, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "straight": [3, 4, 28, 29, 43], "strict_condit": 41, "strip": [2, 3, 4, 11, 14, 15, 18, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "strip_cor": [23, 36], "strip_tr": 42, "strong": 28, "strt": [28, 43], "strt_bend_strt_p2p": [28, 43], "strt_bend_strt_p2p_min": [28, 43], "strt_mm": [28, 43], "strt_mm_p2p": [28, 43], "strt_p2p": [28, 43], "strt_round_courn": 12, "structur": [3, 15, 36], "stub": [3, 4, 5], "style": 3, "success": [], "suffix": [], "sun": [], "suppli": [], "support": [], "suppr": 28, "swap": 4, "symbol": [28, 43], "symmetr": [28, 33, 43], "symmetri": [], "symmetric_bu": 33, "sz": 8, "sz_bu": 26, "sz_ring": 26, "sz_via_i2m": 23, "szvia": 8, "t": [11, 18, 28, 43], "take": [28, 43], "taken": [28, 43], "taper": [3, 4, 25, 28, 35, 37, 43], "taper_length": 36, "taper_p2p": [28, 43], "taper_xs2x": 37, "target": [], "tdc": 33, "te": [], "teeth": [], "teeth_numb": 36, "templat": [], "termin": [], "tessel": [], "test": 21, "theta_arc": [28, 33], "theta_ext": 33, "theta_start": [8, 15], "theta_stop": [8, 15], "thi": [21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "thin_attach": 29, "third": 35, "three": 3, "through": [], "throughout": [], "tilt": 35, "tip": 35, "toctre": [], "toler": 33, "tooth": [], "top": 35, "topologi": 4, "total": 4, "tp_angl": 33, "transit": [35, 37], "translat": [28, 43], "tree": 5, "trench": [3, 24, 26, 28, 29, 35], "triangl": 4, "triangular": 4, "true": [2, 3, 4, 8, 10, 11, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 33, 36, 38, 39, 40, 41, 43], "tube": [28, 43], "tube_min": [28, 43], "tunabl": [], "tupl": [28, 43], "tuple_to_complex": 19, "turn": [], "two": [3, 5, 28, 43], "twod_grat": [], "type": [2, 3, 4, 5, 15, 23, 28, 36, 43], "type_tap": 36, "u": [3, 28, 43], "ubend": [28, 43], "ubend_offset": 29, "ubend_p2p": [28, 43], "ubend_rout": [28, 43], "um": [28, 43], "umat_2x2_": 7, "uniform": [], "uninstanti": [], "uniqu": [23, 24, 26, 28, 30, 31, 33, 34, 35, 36, 38, 39, 40, 41, 42], "unit": [4, 25, 27, 36], "unit_mesh_2x2": 4, "univers": 4, "unless": [28, 43], "upper": 4, "upper_isl": 29, "us": [2, 3, 4, 5, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "util": 13, "v": 26, "valu": [5, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42, 43], "varnam": [21, 24, 28, 39, 43], "vector": 36, "versatil": [], "vertic": [3, 4], "via": [3, 4, 9, 23, 24, 26, 28, 29, 39], "via_cel": 8, "via_h2m": [3, 4, 23, 24, 26, 28, 29, 39], "via_i2m": 24, "via_s2m": [8, 23], "vias_arc": 9, "visibl": [], "w": [4, 8, 11, 14, 31, 32, 34, 42], "w0": [26, 31, 33, 39], "w0_rck": 39, "w0_ring": 28, "w1": [3, 26, 29, 31, 33, 39], "w1_bu": [26, 28, 39, 40], "w1_rck": 39, "w1_ring": 28, "w1_slab": 35, "w1_tp": 30, "w2": [3, 29], "w2_bu": [26, 28, 39, 40], "w2_tp": 30, "w_1": 42, "w_2": 42, "w_arm": [3, 4, 38], "w_arm_min": 3, "w_bend_cent": 41, "w_bend_port": 41, "w_box": 35, "w_box_end": 35, "w_bu": [24, 26, 28, 33, 39], "w_cp": [28, 33], "w_dt": 35, "w_end": [11, 34], "w_grow_rib": 42, "w_grow_strip": 42, "w_gt": 36, "w_heater": [3, 24, 26, 28, 29], "w_ht": [3, 4, 23, 39], "w_i": [23, 24], "w_in": [28, 33, 35], "w_itr": 23, "w_m": 30, "w_metal": [3, 4, 24, 26, 28, 29], "w_metal_pn": 23, "w_mid_slab": 35, "w_mmi": 38, "w_mt": [23, 39], "w_n": [23, 24], "w_n_ct": 23, "w_ncont": 24, "w_out": [28, 33], "w_ovlp": 24, "w_p": [23, 24], "w_p_ct": 23, "w_pcont": 24, "w_plus_max": 21, "w_port": [23, 29, 31, 36, 38, 41], "w_ram": 4, "w_rck": 39, "w_rib": 42, "w_ring": [24, 26, 28, 40], "w_slab": 21, "w_teeth_si": 36, "w_teeth_sin": 36, "w_term": 40, "w_tip_cor": 35, "w_tip_slab": 35, "w_tran": 33, "w_waveguid": 7, "w_wg": [2, 3, 4, 21, 23, 24, 26, 28, 29, 30, 31, 33, 36, 38, 39, 40], "w_wg_slab": 21, "wa": [15, 26], "wa0": 33, "wa1": 33, "wai": [], "waveguid": [2, 3, 4, 23, 26, 27, 28, 35, 43], "waveguide1": [], "waveguide2": [], "waveguide_pin": 22, "wavelength": [], "wb": [15, 26], "wb0": 33, "wb1": 33, "wb_in": 33, "wb_out": 33, "wd0": 33, "wd1": 33, "wd_in": 33, "wd_out": 33, "wdm": 29, "welcom": 0, "wg": 33, "wg_ltp": 33, "wgdope": 22, "when": [4, 5, 28, 43], "where": [28, 43], "whether": [21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 40, 41, 42], "which": [28, 43], "wideband": [], "width": [2, 3, 4, 8, 10, 13, 15, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "width1": [28, 36, 43], "width2": [28, 36, 43], "width2_mm": [28, 43], "width_mm": [28, 43], "width_typ": [11, 15, 26], "with_txt": 10, "within": [], "wl": 18, "wmin_bend": 41, "wrapper": [3, 4, 36], "write": 18, "written": [], "wu0": 33, "wu1": 33, "wu_in": 33, "wu_out": 33, "x": [8, 10, 11, 14, 15, 18, 21, 23, 24, 28, 29, 30, 31, 32, 33, 34, 38, 39, 40, 41, 42, 43], "x_space": 8, "xout_offset": 38, "xs2x": 42, "xs_1": 42, "xs_2": 42, "xs_cont_wg": [23, 24], "xs_heater": [3, 4, 23, 24, 26, 28, 29], "xs_ht": [3, 23, 39], "xs_l1": 8, "xs_l2": 8, "xs_metal": [3, 4, 23, 24, 26, 28, 29], "xs_metal_imp": 24, "xs_mt": [23, 39], "xs_n": [23, 24], "xs_ncont": [23, 24], "xs_open": 36, "xs_p": [23, 24], "xs_pad": 8, "xs_pcont": [23, 24], "xs_pn_ct": 23, "xs_port": 23, "xs_ring": [24, 26, 28], "xs_sa": 23, "xs_sin": 35, "xs_trench": 35, "xs_via_h2m": 23, "xs_via_s2m": 23, "xs_wg": [2, 3, 4, 23, 26, 28, 29, 33, 36], "xsection": [28, 43], "xya": 10, "y": [5, 18, 28, 43], "y_cut": 15, "y_space": 8, "yb": [25, 37], "ybranch": [5, 37], "ybranch_3wg": 37, "ybranch_t": [], "you": [], "your": [], "z": 18, "zehnder": [3, 4, 21], "\u00b5m": [], "\u03c0": []}, "titles": ["mxPIC Handbook", "mxpic.components.basic", "mxpic.components.composites.LoopMirror", "mxpic.components.composites.MZI", "mxpic.components.composites.MZI_mesh", "mxpic.components.composites.SptTree", "mxpic.components.composites.advance", "Composites", "mxpic.components.electronics.eic_units", "Electronics", "mxpic.components.gds_devices", "mxpic.components.geometry.curves", "Geometry", "mxpic.components.geometry.polygons", "mxpic.components.geometry.racetrack", "mxpic.components.geometry.rings", "Components", "Others", "mxpic.components.others.simulation.DualPortElements", "Simulation", "mxpic.components.pins", "mxpic.components.primitives.active.dev_ps", "Active", "mxpic.components.primitives.active.pin_wg", "mxpic.components.primitives.active.rings", "Primitives", "mxpic.components.primitives.passive.crows", "Passive", "mxpic.components.primitives.passive.rings", "mxpic.components.primitives.passive.unit", "mxpic.components.primitives.pic.PBS", "mxpic.components.primitives.pic.YBS", "mxpic.components.primitives.pic.bragg", "mxpic.components.primitives.pic.couplers", "mxpic.components.primitives.pic.cross", "mxpic.components.primitives.pic.edge_couplers", "mxpic.components.primitives.pic.gratings", "Pic", "mxpic.components.primitives.pic.mmi", "mxpic.components.primitives.pic.racetrack", "mxpic.components.primitives.pic.rings", "mxpic.components.primitives.pic.spiral", "mxpic.components.primitives.pic.taper", "mxpic.components.routing"], "titleterms": {"activ": [21, 22, 23, 24], "adc_std_2x2": 33, "advanc": 6, "aed_r": 40, "aed_ring_pin": 24, "amf_pdk": [], "amzi_w": 4, "autom": [], "basic": 1, "beam_splitt": [], "brag_wdm": 29, "bragg": 32, "bragg_apod": 32, "bs_tdc": 33, "circl": 15, "clothoid": 11, "compon": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 16, 18, 20, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "composit": [2, 3, 4, 5, 6, 7], "conchoid": 11, "coupler": 33, "cross": 34, "cross_sin": 34, "crow": 26, "crow_a": 26, "crow_circular_r": 26, "crow_eul_r": 26, "crow_eul_rck": 26, "crow_std_adddrop": 26, "crow_std_allpass": 26, "crx_te_1310": [], "crx_te_1550": [], "cumec_pdk": [], "curv": 11, "dc": 33, "dc_bend": 33, "dc_bend_20_80_cband": [], "dc_bend_4_96_cband": [], "dc_bend_50_50_cband": [], "dc_px3_50_50_cband": [], "dc_px_3sg": 33, "dc_te_1550": [], "dev_p": 21, "device_2x2_fdtd_init": 18, "device_coupl": 18, "device_port": 18, "device_ring_bu": 18, "directional_coupl": [], "document": [], "dualportel": 18, "ec_1550": [], "ec_dual_layer_px3": 35, "ec_te_1550": [], "edge_coupl": 35, "eic_unit": 8, "electron": [8, 9], "elips": 15, "elipse_du": 15, "euler_crow_bu": 18, "euler_crow_inter_cp": 18, "fa": 36, "gc_sin_si_dual_lay": 36, "gc_std_1d": 36, "gc_std_2d": 36, "gc_te_1310": [], "gc_te_1550": [], "gc_tm_1310": [], "gc_tm_1550": [], "gds_devic": 10, "gds_lib_load": 10, "generate_gds_lib": 10, "geometri": [11, 12, 13, 14, 15], "gpd_1550": [], "grate": 36, "grating_2d_hol": 36, "grating_2d_hole_3rec": 36, "grating_2d_hole_4rec": 36, "grating_coupl": [], "handbook": 0, "heater_ndop": 21, "hgl_pdk_a": [], "hole": 15, "ic_except": 43, "imecas_pdk": [], "isl": 8, "librari": [], "loopmirror": 2, "mdm": 33, "mdm_adc_te1_1550": [], "mdm_adc_te2_1550": [], "mdm_adc_te3_1550": [], "mmg_1d_d14um_1550_2mod": [], "mmi": 38, "mmi_1x2_te_1310": [], "mmi_1x2_te_1550": [], "mmi_2x2_te_1310": [], "mmi_2x2_te_1550": [], "mmi_ml": 38, "mmi_std": 38, "monitorpara": 18, "mrr_a": 28, "mrr_dw_adddrop": 28, "mrr_dw_allpass": 28, "mrr_mm_adddrop": 28, "mrr_mm_allpass": 28, "mrr_std_adddrop": 28, "mrr_std_allpass": 28, "mrr_std_ring": 28, "multimode_interferomet": [], "mx_bend": 15, "mxpic": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 18, 20, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43], "mzi": 3, "mzi_2st_ubend": 3, "mzi_butterfli": 3, "mzi_eubend": 3, "mzi_mesh": 4, "mzi_mesh_parl": 4, "mzi_mesh_tri": 4, "mzi_mesh_u": 4, "mzi_n": 3, "mzi_ns_ubend": 3, "mzi_ubend": 3, "nano_": 36, "other": [17, 18], "pad": 8, "pad_60_80": [], "passiv": [26, 27, 28, 29], "pb": 30, "pbs_1550": [], "pbs_3wg": 30, "pd_cband_cel": [], "pdk": [], "photon": [], "pic": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], "pin": 20, "pin_mrr_mm_adddrop": 24, "pin_mrr_mm_allpass": 24, "pin_mrr_std_allpass": 24, "pin_wg": 23, "polygon": 13, "portpara": 18, "primit": [21, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42], "ps_2st": 29, "ps_2st_straight": 29, "ps_pin": 21, "psr": 42, "psr_1x2": 29, "qy_pdk_a": [], "racetrack": [14, 39], "racetrack_mm_adddrop": 39, "racetrack_mm_allpass": 39, "racetrack_std_allpass": 39, "racetrackreson": 39, "reson": 18, "ring": [15, 24, 28, 40], "ring_bus_wg": 33, "ring_phas": 18, "rout": [21, 24, 28, 39, 43], "silicon": [], "simudatafigureplot": 18, "simul": [18, 19], "socr": 28, "socr_adiabat": 28, "socr_adiabatic_cband": 28, "socr_cband": 28, "spiral": 41, "spiral_cicle_mm": 41, "spiral_cicle_std": 41, "spiral_circl": 41, "spiral_rect_std": 41, "spiral_rectangl": 41, "splittingtre": 5, "spttree": 5, "std_crow_v": 26, "std_pic_r": 40, "std_ring_amzi_adddrop": 28, "std_ring_pin": 24, "strt_round_courn": 13, "structur": [], "taper": [36, 42], "taper_xs2x": 42, "templat": [], "transit": 42, "tuple_to_complex": 18, "umat_2x2_": 4, "unit": 29, "via": 8, "vias_arc": 8, "w_waveguid": 4, "waveguid": 29, "waveguide_pin": 23, "welcom": [], "wgdope": 23, "yb": 31, "ybranch": 31, "ybranch_3wg": 31, "ybranch_t": []}})
\ No newline at end of file
diff --git a/docs/source/images/active/AED_Ring_PIN.png b/docs/source/images/active/AED_Ring_PIN.png
index 04d7151..2288c55 100644
Binary files a/docs/source/images/active/AED_Ring_PIN.png and b/docs/source/images/active/AED_Ring_PIN.png differ
diff --git a/docs/source/images/active/Heater_NDoped.png b/docs/source/images/active/Heater_NDoped.png
index 3b2cfd8..6c71ff3 100644
Binary files a/docs/source/images/active/Heater_NDoped.png and b/docs/source/images/active/Heater_NDoped.png differ
diff --git a/docs/source/images/active/PIN_MRR_MM_Adddrop.png b/docs/source/images/active/PIN_MRR_MM_Adddrop.png
index 9ac8089..2e15651 100644
Binary files a/docs/source/images/active/PIN_MRR_MM_Adddrop.png and b/docs/source/images/active/PIN_MRR_MM_Adddrop.png differ
diff --git a/docs/source/images/active/PIN_MRR_MM_Allpass.png b/docs/source/images/active/PIN_MRR_MM_Allpass.png
index 57c1444..099ec2e 100644
Binary files a/docs/source/images/active/PIN_MRR_MM_Allpass.png and b/docs/source/images/active/PIN_MRR_MM_Allpass.png differ
diff --git a/docs/source/images/active/PIN_MRR_STD_Allpass.png b/docs/source/images/active/PIN_MRR_STD_Allpass.png
index cd4de93..5a4845b 100644
Binary files a/docs/source/images/active/PIN_MRR_STD_Allpass.png and b/docs/source/images/active/PIN_MRR_STD_Allpass.png differ
diff --git a/docs/source/images/active/PS_PIN.png b/docs/source/images/active/PS_PIN.png
index c36920e..e9888c8 100644
Binary files a/docs/source/images/active/PS_PIN.png and b/docs/source/images/active/PS_PIN.png differ
diff --git a/docs/source/images/active/STD_Ring_PIN.png b/docs/source/images/active/STD_Ring_PIN.png
index 3550754..d9e011c 100644
Binary files a/docs/source/images/active/STD_Ring_PIN.png and b/docs/source/images/active/STD_Ring_PIN.png differ
diff --git a/docs/source/images/active/WGDoped.png b/docs/source/images/active/WGDoped.png
index 0f2ed71..6124108 100644
Binary files a/docs/source/images/active/WGDoped.png and b/docs/source/images/active/WGDoped.png differ
diff --git a/docs/source/images/active/waveguide_PIN.png b/docs/source/images/active/waveguide_PIN.png
index e6ca13a..f48ac76 100644
Binary files a/docs/source/images/active/waveguide_PIN.png and b/docs/source/images/active/waveguide_PIN.png differ
diff --git a/docs/source/images/passive/Brag_WDM.png b/docs/source/images/passive/Brag_WDM.png
index a3d8bbd..8cedf20 100644
Binary files a/docs/source/images/passive/Brag_WDM.png and b/docs/source/images/passive/Brag_WDM.png differ
diff --git a/docs/source/images/passive/CROW_AED.png b/docs/source/images/passive/CROW_AED.png
index b18b4a0..393ac13 100644
Binary files a/docs/source/images/passive/CROW_AED.png and b/docs/source/images/passive/CROW_AED.png differ
diff --git a/docs/source/images/passive/CROW_Eul_RCK.png b/docs/source/images/passive/CROW_Eul_RCK.png
index 4d3802d..33c4961 100644
Binary files a/docs/source/images/passive/CROW_Eul_RCK.png and b/docs/source/images/passive/CROW_Eul_RCK.png differ
diff --git a/docs/source/images/passive/CROW_Eul_Ring.png b/docs/source/images/passive/CROW_Eul_Ring.png
index ffe4412..e4531d5 100644
Binary files a/docs/source/images/passive/CROW_Eul_Ring.png and b/docs/source/images/passive/CROW_Eul_Ring.png differ
diff --git a/docs/source/images/passive/CROW_STD_Adddrop.png b/docs/source/images/passive/CROW_STD_Adddrop.png
index eda53e4..927e8df 100644
Binary files a/docs/source/images/passive/CROW_STD_Adddrop.png and b/docs/source/images/passive/CROW_STD_Adddrop.png differ
diff --git a/docs/source/images/passive/CROW_STD_Allpass.png b/docs/source/images/passive/CROW_STD_Allpass.png
index b657058..aeb4eb2 100644
Binary files a/docs/source/images/passive/CROW_STD_Allpass.png and b/docs/source/images/passive/CROW_STD_Allpass.png differ
diff --git a/docs/source/images/passive/MRR_DW_Adddrop.png b/docs/source/images/passive/MRR_DW_Adddrop.png
index 6516148..7a4d81a 100644
Binary files a/docs/source/images/passive/MRR_DW_Adddrop.png and b/docs/source/images/passive/MRR_DW_Adddrop.png differ
diff --git a/docs/source/images/passive/MRR_DW_Allpass.png b/docs/source/images/passive/MRR_DW_Allpass.png
index f016ad6..1b1b1d1 100644
Binary files a/docs/source/images/passive/MRR_DW_Allpass.png and b/docs/source/images/passive/MRR_DW_Allpass.png differ
diff --git a/docs/source/images/passive/MRR_MM_Adddrop.png b/docs/source/images/passive/MRR_MM_Adddrop.png
index 15e1867..653dd75 100644
Binary files a/docs/source/images/passive/MRR_MM_Adddrop.png and b/docs/source/images/passive/MRR_MM_Adddrop.png differ
diff --git a/docs/source/images/passive/MRR_MM_Allpass.png b/docs/source/images/passive/MRR_MM_Allpass.png
index 4e6a5c9..b309450 100644
Binary files a/docs/source/images/passive/MRR_MM_Allpass.png and b/docs/source/images/passive/MRR_MM_Allpass.png differ
diff --git a/docs/source/images/passive/MRR_STD_Adddrop.png b/docs/source/images/passive/MRR_STD_Adddrop.png
index 2d29ced..26e1fa2 100644
Binary files a/docs/source/images/passive/MRR_STD_Adddrop.png and b/docs/source/images/passive/MRR_STD_Adddrop.png differ
diff --git a/docs/source/images/passive/MRR_STD_Allpass.png b/docs/source/images/passive/MRR_STD_Allpass.png
index 118f983..9a3550a 100644
Binary files a/docs/source/images/passive/MRR_STD_Allpass.png and b/docs/source/images/passive/MRR_STD_Allpass.png differ
diff --git a/docs/source/images/passive/PSR_1x2.png b/docs/source/images/passive/PSR_1x2.png
index c75ed8e..6101536 100644
Binary files a/docs/source/images/passive/PSR_1x2.png and b/docs/source/images/passive/PSR_1x2.png differ
diff --git a/docs/source/images/passive/PS_2st.png b/docs/source/images/passive/PS_2st.png
index f5f9156..47ec3e5 100644
Binary files a/docs/source/images/passive/PS_2st.png and b/docs/source/images/passive/PS_2st.png differ
diff --git a/docs/source/images/passive/PS_2st_Straight.png b/docs/source/images/passive/PS_2st_Straight.png
index 51bb9dd..7e81b2c 100644
Binary files a/docs/source/images/passive/PS_2st_Straight.png and b/docs/source/images/passive/PS_2st_Straight.png differ
diff --git a/docs/source/images/passive/STD_ring_AMZI_adddrop.png b/docs/source/images/passive/STD_ring_AMZI_adddrop.png
index dd9260d..d539238 100644
Binary files a/docs/source/images/passive/STD_ring_AMZI_adddrop.png and b/docs/source/images/passive/STD_ring_AMZI_adddrop.png differ
diff --git a/docs/source/images/passive/waveguide.png b/docs/source/images/passive/waveguide.png
index aefd9ac..4463673 100644
Binary files a/docs/source/images/passive/waveguide.png and b/docs/source/images/passive/waveguide.png differ
diff --git a/docs/source/images/pic/ADC_STD_2x2.png b/docs/source/images/pic/ADC_STD_2x2.png
index 2bdd6e6..ef2b39b 100644
Binary files a/docs/source/images/pic/ADC_STD_2x2.png and b/docs/source/images/pic/ADC_STD_2x2.png differ
diff --git a/docs/source/images/pic/AED_ring.png b/docs/source/images/pic/AED_ring.png
index 62a79a2..0cff387 100644
Binary files a/docs/source/images/pic/AED_ring.png and b/docs/source/images/pic/AED_ring.png differ
diff --git a/docs/source/images/pic/BS_tdc.png b/docs/source/images/pic/BS_tdc.png
index bd602c8..0cd5d4b 100644
Binary files a/docs/source/images/pic/BS_tdc.png and b/docs/source/images/pic/BS_tdc.png differ
diff --git a/docs/source/images/pic/Bragg.png b/docs/source/images/pic/Bragg.png
index a704faf..7493404 100644
Binary files a/docs/source/images/pic/Bragg.png and b/docs/source/images/pic/Bragg.png differ
diff --git a/docs/source/images/pic/Bragg_apodized.png b/docs/source/images/pic/Bragg_apodized.png
index e7be6d0..fb40830 100644
Binary files a/docs/source/images/pic/Bragg_apodized.png and b/docs/source/images/pic/Bragg_apodized.png differ
diff --git a/docs/source/images/pic/Cross.png b/docs/source/images/pic/Cross.png
index 9f68d6d..85ace85 100644
Binary files a/docs/source/images/pic/Cross.png and b/docs/source/images/pic/Cross.png differ
diff --git a/docs/source/images/pic/Cross_Sine.png b/docs/source/images/pic/Cross_Sine.png
index 11d94a0..73bbd77 100644
Binary files a/docs/source/images/pic/Cross_Sine.png and b/docs/source/images/pic/Cross_Sine.png differ
diff --git a/docs/source/images/pic/DC.png b/docs/source/images/pic/DC.png
index 5733b54..2b56245 100644
Binary files a/docs/source/images/pic/DC.png and b/docs/source/images/pic/DC.png differ
diff --git a/docs/source/images/pic/DC_bend.png b/docs/source/images/pic/DC_bend.png
index c6fa387..0b00d64 100644
Binary files a/docs/source/images/pic/DC_bend.png and b/docs/source/images/pic/DC_bend.png differ
diff --git a/docs/source/images/pic/DC_pX_3sg.png b/docs/source/images/pic/DC_pX_3sg.png
index 60fdd99..2ad97c3 100644
Binary files a/docs/source/images/pic/DC_pX_3sg.png and b/docs/source/images/pic/DC_pX_3sg.png differ
diff --git a/docs/source/images/pic/EC_dual_layer_px3.png b/docs/source/images/pic/EC_dual_layer_px3.png
new file mode 100644
index 0000000..9a2d240
Binary files /dev/null and b/docs/source/images/pic/EC_dual_layer_px3.png differ
diff --git a/docs/source/images/pic/MDM.png b/docs/source/images/pic/MDM.png
index 7c469d6..4943879 100644
Binary files a/docs/source/images/pic/MDM.png and b/docs/source/images/pic/MDM.png differ
diff --git a/docs/source/images/pic/MMI_ML.png b/docs/source/images/pic/MMI_ML.png
index cc25e60..6a6c22f 100644
Binary files a/docs/source/images/pic/MMI_ML.png and b/docs/source/images/pic/MMI_ML.png differ
diff --git a/docs/source/images/pic/MMI_STD.png b/docs/source/images/pic/MMI_STD.png
index af3a34b..1be761c 100644
Binary files a/docs/source/images/pic/MMI_STD.png and b/docs/source/images/pic/MMI_STD.png differ
diff --git a/docs/source/images/pic/PBS_3wg.png b/docs/source/images/pic/PBS_3wg.png
index 47ac7f9..22dd035 100644
Binary files a/docs/source/images/pic/PBS_3wg.png and b/docs/source/images/pic/PBS_3wg.png differ
diff --git a/docs/source/images/pic/PSR.png b/docs/source/images/pic/PSR.png
index 884d166..cae0a0b 100644
Binary files a/docs/source/images/pic/PSR.png and b/docs/source/images/pic/PSR.png differ
diff --git a/docs/source/images/pic/RacetrackResonator.png b/docs/source/images/pic/RacetrackResonator.png
index 0724714..8621a98 100644
Binary files a/docs/source/images/pic/RacetrackResonator.png and b/docs/source/images/pic/RacetrackResonator.png differ
diff --git a/docs/source/images/pic/Racetrack_MM_Adddrop.png b/docs/source/images/pic/Racetrack_MM_Adddrop.png
index d68d9b7..38aa1d3 100644
Binary files a/docs/source/images/pic/Racetrack_MM_Adddrop.png and b/docs/source/images/pic/Racetrack_MM_Adddrop.png differ
diff --git a/docs/source/images/pic/Racetrack_MM_Allpass.png b/docs/source/images/pic/Racetrack_MM_Allpass.png
index 3841212..c298720 100644
Binary files a/docs/source/images/pic/Racetrack_MM_Allpass.png and b/docs/source/images/pic/Racetrack_MM_Allpass.png differ
diff --git a/docs/source/images/pic/Racetrack_STD_Allpass.png b/docs/source/images/pic/Racetrack_STD_Allpass.png
index cdae78e..16cba4e 100644
Binary files a/docs/source/images/pic/Racetrack_STD_Allpass.png and b/docs/source/images/pic/Racetrack_STD_Allpass.png differ
diff --git a/docs/source/images/pic/STD_PIC_Rings.png b/docs/source/images/pic/STD_PIC_Rings.png
index 6f919d7..0d55332 100644
Binary files a/docs/source/images/pic/STD_PIC_Rings.png and b/docs/source/images/pic/STD_PIC_Rings.png differ
diff --git a/docs/source/images/pic/Spiral_Cicle_MM.png b/docs/source/images/pic/Spiral_Cicle_MM.png
index 3b168c7..4f37029 100644
Binary files a/docs/source/images/pic/Spiral_Cicle_MM.png and b/docs/source/images/pic/Spiral_Cicle_MM.png differ
diff --git a/docs/source/images/pic/Spiral_Cicle_STD.png b/docs/source/images/pic/Spiral_Cicle_STD.png
index d6e4bc8..f5bc254 100644
Binary files a/docs/source/images/pic/Spiral_Cicle_STD.png and b/docs/source/images/pic/Spiral_Cicle_STD.png differ
diff --git a/docs/source/images/pic/Spiral_Rect_STD.png b/docs/source/images/pic/Spiral_Rect_STD.png
index 3b8b9e6..218829f 100644
Binary files a/docs/source/images/pic/Spiral_Rect_STD.png and b/docs/source/images/pic/Spiral_Rect_STD.png differ
diff --git a/docs/source/images/pic/YBranch.png b/docs/source/images/pic/YBranch.png
index fefb931..fbc2d5f 100644
Binary files a/docs/source/images/pic/YBranch.png and b/docs/source/images/pic/YBranch.png differ
diff --git a/docs/source/images/pic/Ybranch_3wg.png b/docs/source/images/pic/Ybranch_3wg.png
index 18887d0..454eda2 100644
Binary files a/docs/source/images/pic/Ybranch_3wg.png and b/docs/source/images/pic/Ybranch_3wg.png differ
diff --git a/docs/source/images/pic/ring_bus_wg.png b/docs/source/images/pic/ring_bus_wg.png
index a8b3a25..ae80d31 100644
Binary files a/docs/source/images/pic/ring_bus_wg.png and b/docs/source/images/pic/ring_bus_wg.png differ
diff --git a/docs/source/images/pic/spiral.png b/docs/source/images/pic/spiral.png
index d6b5d03..48f7ccd 100644
Binary files a/docs/source/images/pic/spiral.png and b/docs/source/images/pic/spiral.png differ
diff --git a/docs/source/images/pic/spiral_circle.png b/docs/source/images/pic/spiral_circle.png
index 6a5157e..579973a 100644
Binary files a/docs/source/images/pic/spiral_circle.png and b/docs/source/images/pic/spiral_circle.png differ
diff --git a/docs/source/images/pic/spiral_rectangle.png b/docs/source/images/pic/spiral_rectangle.png
index 8e6e73f..4c6adbc 100644
Binary files a/docs/source/images/pic/spiral_rectangle.png and b/docs/source/images/pic/spiral_rectangle.png differ
diff --git a/docs/source/images/pic/taper_xs2xs.png b/docs/source/images/pic/taper_xs2xs.png
index 571ed0b..202075f 100644
Binary files a/docs/source/images/pic/taper_xs2xs.png and b/docs/source/images/pic/taper_xs2xs.png differ
diff --git a/docs/source/images/pic/transition.png b/docs/source/images/pic/transition.png
index 07f9c58..49185aa 100644
Binary files a/docs/source/images/pic/transition.png and b/docs/source/images/pic/transition.png differ
diff --git a/docs/source/mxpic/components/primitives/ADC_STD_2x2.png b/docs/source/mxpic/components/primitives/ADC_STD_2x2.png
deleted file mode 100644
index 74e800f..0000000
Binary files a/docs/source/mxpic/components/primitives/ADC_STD_2x2.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/BS_tdc.png b/docs/source/mxpic/components/primitives/BS_tdc.png
deleted file mode 100644
index cca00f3..0000000
Binary files a/docs/source/mxpic/components/primitives/BS_tdc.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/DC.png b/docs/source/mxpic/components/primitives/DC.png
deleted file mode 100644
index 3fc001a..0000000
Binary files a/docs/source/mxpic/components/primitives/DC.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/DC_bend.png b/docs/source/mxpic/components/primitives/DC_bend.png
deleted file mode 100644
index f68d998..0000000
Binary files a/docs/source/mxpic/components/primitives/DC_bend.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/DC_pX_3sg.png b/docs/source/mxpic/components/primitives/DC_pX_3sg.png
deleted file mode 100644
index a21782c..0000000
Binary files a/docs/source/mxpic/components/primitives/DC_pX_3sg.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md
deleted file mode 100644
index 73c6493..0000000
--- a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# mxpic.components.primitives.EC_dual_layer_px3
-
-```{eval-rst}
-.. automodule:: mxpic.components.primitives.EC_dual_layer_px3
- :no-members:
-```
-
-## EC_dual_layer_px3
-
-```{eval-rst}
-.. autoclass:: mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3
- :members:
- :undoc-members:
- :show-inheritance:
-```
diff --git a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.png b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.png
deleted file mode 100644
index 489d4fd..0000000
Binary files a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/GC_STD_1D.png b/docs/source/mxpic/components/primitives/GC_STD_1D.png
deleted file mode 100644
index ccd07ce..0000000
Binary files a/docs/source/mxpic/components/primitives/GC_STD_1D.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/GC_STD_2D.png b/docs/source/mxpic/components/primitives/GC_STD_2D.png
deleted file mode 100644
index ba0bf2c..0000000
Binary files a/docs/source/mxpic/components/primitives/GC_STD_2D.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Grating_2D_Hole.png b/docs/source/mxpic/components/primitives/Grating_2D_Hole.png
deleted file mode 100644
index 2320eb6..0000000
Binary files a/docs/source/mxpic/components/primitives/Grating_2D_Hole.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/MDM.png b/docs/source/mxpic/components/primitives/MDM.png
deleted file mode 100644
index 4fc73ba..0000000
Binary files a/docs/source/mxpic/components/primitives/MDM.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/MMI_ML.png b/docs/source/mxpic/components/primitives/MMI_ML.png
deleted file mode 100644
index c886a18..0000000
Binary files a/docs/source/mxpic/components/primitives/MMI_ML.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/MMI_STD.png b/docs/source/mxpic/components/primitives/MMI_STD.png
deleted file mode 100644
index 91c18cc..0000000
Binary files a/docs/source/mxpic/components/primitives/MMI_STD.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Nano_ant.png b/docs/source/mxpic/components/primitives/Nano_ant.png
deleted file mode 100644
index 6e21c0d..0000000
Binary files a/docs/source/mxpic/components/primitives/Nano_ant.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Spiral_Cicle_MM.png b/docs/source/mxpic/components/primitives/Spiral_Cicle_MM.png
deleted file mode 100644
index e498b86..0000000
Binary files a/docs/source/mxpic/components/primitives/Spiral_Cicle_MM.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Spiral_Cicle_STD.png b/docs/source/mxpic/components/primitives/Spiral_Cicle_STD.png
deleted file mode 100644
index d1d2b88..0000000
Binary files a/docs/source/mxpic/components/primitives/Spiral_Cicle_STD.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Spiral_Rect_STD.png b/docs/source/mxpic/components/primitives/Spiral_Rect_STD.png
deleted file mode 100644
index ecf9369..0000000
Binary files a/docs/source/mxpic/components/primitives/Spiral_Rect_STD.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Taper.png b/docs/source/mxpic/components/primitives/Taper.png
deleted file mode 100644
index f8b619c..0000000
Binary files a/docs/source/mxpic/components/primitives/Taper.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/YBranch.png b/docs/source/mxpic/components/primitives/YBranch.png
deleted file mode 100644
index ee4394e..0000000
Binary files a/docs/source/mxpic/components/primitives/YBranch.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/Ybranch_3wg.png b/docs/source/mxpic/components/primitives/Ybranch_3wg.png
deleted file mode 100644
index cde08d3..0000000
Binary files a/docs/source/mxpic/components/primitives/Ybranch_3wg.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/grating_couplers.md b/docs/source/mxpic/components/primitives/grating_couplers.md
deleted file mode 100644
index 5f7343f..0000000
--- a/docs/source/mxpic/components/primitives/grating_couplers.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# mxpic.components.primitives.grating_couplers
-
-```{eval-rst}
-.. automodule:: mxpic.components.primitives.grating_couplers
- :no-members:
-```
-
-## GC_SiN_Si_Dual_Layer
-
-```{eval-rst}
-.. autoclass:: mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer
- :members:
- :undoc-members:
- :show-inheritance:
-```
diff --git a/docs/source/mxpic/components/primitives/index.md b/docs/source/mxpic/components/primitives/index.md
index 56eff7b..9de4e4f 100644
--- a/docs/source/mxpic/components/primitives/index.md
+++ b/docs/source/mxpic/components/primitives/index.md
@@ -6,6 +6,4 @@
active/index
passive/index
pic/index
-EC_dual_layer_px3
-grating_couplers
```
diff --git a/docs/source/mxpic/components/primitives/pic/edge_couplers.md b/docs/source/mxpic/components/primitives/pic/edge_couplers.md
new file mode 100644
index 0000000..7c59517
--- /dev/null
+++ b/docs/source/mxpic/components/primitives/pic/edge_couplers.md
@@ -0,0 +1,19 @@
+# mxpic.components.primitives.pic.edge_couplers
+
+```{eval-rst}
+.. automodule:: mxpic.components.primitives.pic.edge_couplers
+ :no-members:
+```
+
+## EC_dual_layer_px3
+
+```{eval-rst}
+.. image:: ../../../../images/pic/EC_dual_layer_px3.png
+ :align: center
+ :width: 600px
+
+.. autoclass:: mxpic.components.primitives.pic.edge_couplers.EC_dual_layer_px3
+ :members:
+ :undoc-members:
+ :show-inheritance:
+```
diff --git a/docs/source/mxpic/components/primitives/pic/gratings.md b/docs/source/mxpic/components/primitives/pic/gratings.md
index eb9b2ee..b665008 100644
--- a/docs/source/mxpic/components/primitives/pic/gratings.md
+++ b/docs/source/mxpic/components/primitives/pic/gratings.md
@@ -68,6 +68,15 @@
:show-inheritance:
```
+## GC_SiN_Si_Dual_Layer
+
+```{eval-rst}
+.. autoclass:: mxpic.components.primitives.pic.gratings.GC_SiN_Si_Dual_Layer
+ :members:
+ :undoc-members:
+ :show-inheritance:
+```
+
## FA
```{eval-rst}
diff --git a/docs/source/mxpic/components/primitives/pic/index.md b/docs/source/mxpic/components/primitives/pic/index.md
index 6166f71..d04776d 100644
--- a/docs/source/mxpic/components/primitives/pic/index.md
+++ b/docs/source/mxpic/components/primitives/pic/index.md
@@ -8,6 +8,7 @@ YBS
bragg
couplers
cross
+edge_couplers
gratings
mmi
racetrack
diff --git a/docs/source/mxpic/components/primitives/ring_bus_wg.png b/docs/source/mxpic/components/primitives/ring_bus_wg.png
deleted file mode 100644
index 1600145..0000000
Binary files a/docs/source/mxpic/components/primitives/ring_bus_wg.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/spiral.png b/docs/source/mxpic/components/primitives/spiral.png
deleted file mode 100644
index d72b82b..0000000
Binary files a/docs/source/mxpic/components/primitives/spiral.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/spiral_circle.png b/docs/source/mxpic/components/primitives/spiral_circle.png
deleted file mode 100644
index 3b36483..0000000
Binary files a/docs/source/mxpic/components/primitives/spiral_circle.png and /dev/null differ
diff --git a/docs/source/mxpic/components/primitives/spiral_rectangle.png b/docs/source/mxpic/components/primitives/spiral_rectangle.png
deleted file mode 100644
index c45a6b1..0000000
Binary files a/docs/source/mxpic/components/primitives/spiral_rectangle.png and /dev/null differ
diff --git a/mxpic/components/composites/LoopMirror.py b/mxpic/components/composites/LoopMirror.py
index 5426537..743aab9 100644
--- a/mxpic/components/composites/LoopMirror.py
+++ b/mxpic/components/composites/LoopMirror.py
@@ -50,10 +50,16 @@ class LoopMirror():
if (BS==None):
BS = DC(w_cp=0.45,gap=0.2,w_wg=w_wg,L_cp=10,R0=10,angle=20,xs=xs_wg,sharp_patch=True)
BS_Inst = BS.cell.put(0,0,0) ## middle
- D_port = np.abs(BS_Inst.pin['b1'].y - BS_Inst.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: D_port = np.abs(BS_Inst.pin['b1'].y - BS_Inst.pin['b2'].y)
+ D_port = np.abs(BS_Inst.pin['opt_b1'].y - BS_Inst.pin['opt_b2'].y)
pic = Route(radius=Radius,width=w_wg,xs=xs_wg)
- BU = nd.bend(radius=Radius,width=w_wg,xs=xs_wg,angle=angle).put('a0',BS_Inst.pin['b1'],flip=0)
- BD = nd.bend(radius=Radius,width=w_wg,xs=xs_wg,angle=angle).put('a0',BS_Inst.pin['b2'],flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BU = nd.bend(radius=Radius,width=w_wg,xs=xs_wg,angle=angle).put('a0',BS_Inst.pin['b1'],flip=0)
+ BU = nd.bend(radius=Radius,width=w_wg,xs=xs_wg,angle=angle).put('a0',BS_Inst.pin['opt_b1'],flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BD = nd.bend(radius=Radius,width=w_wg,xs=xs_wg,angle=angle).put('a0',BS_Inst.pin['b2'],flip=1)
+ BD = nd.bend(radius=Radius,width=w_wg,xs=xs_wg,angle=angle).put('a0',BS_Inst.pin['opt_b2'],flip=1)
R_loop = (Radius+D_port/2)/np.cos(angle/180*np.pi) - Radius
@@ -64,8 +70,12 @@ class LoopMirror():
(a1,b1), (a2,b2),c1,c2 = growx
if (layers.find('CLD')!=-1):
### middle patch
- nd.strt(length=(R_loop+w_wg*a1+b1)*(1+np.sin((180-angle)/180*np.pi))+(Radius)*np.sin(angle/180*np.pi),width=2*(R_loop+w_wg*a1+b1),layer=layers).put(BS_Inst.pin['b1'].x,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=(R_loop+w_wg*a1+b1)*(1+np.sin((180-angle)/180*np.pi))+(Radius)*np.sin(angle/180*np.pi),width=2*(R_loop+w_wg*a1+b1),layer=layers).put(BS_Inst.pin['b1'].x,0,0)
+ nd.strt(length=(R_loop+w_wg*a1+b1)*(1+np.sin((180-angle)/180*np.pi))+(Radius)*np.sin(angle/180*np.pi),width=2*(R_loop+w_wg*a1+b1),layer=layers).put(BS_Inst.pin['opt_b1'].x,0,0)
- nd.Pin(name='a1',pin=BS_Inst.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS_Inst.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS_Inst.pin['opt_a1'],type="optical:").put()
self.cell = C
diff --git a/mxpic/components/composites/MZI.py b/mxpic/components/composites/MZI.py
index 3bee002..b28a207 100644
--- a/mxpic/components/composites/MZI.py
+++ b/mxpic/components/composites/MZI.py
@@ -179,12 +179,20 @@ class MZI:
cell_BS = __BS_generate__(BS=BS,xs=xs_wg,func_name="mxpic::functional::MZI")
cell_BS2 = __BS_generate__(BS=BS2,xs=xs_wg,func_name="mxpic::functional::MZI")
- dY1 = np.abs(cell_BS.pin['b1'].y - cell_BS.pin['b2'].y)
- dY2 = np.abs(cell_BS2.pin['b1'].y - cell_BS2.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY1 = np.abs(cell_BS.pin['b1'].y - cell_BS.pin['b2'].y)
+ dY1 = np.abs(cell_BS.pin['opt_b1'].y - cell_BS.pin['opt_b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY2 = np.abs(cell_BS2.pin['b1'].y - cell_BS2.pin['b2'].y)
+ dY2 = np.abs(cell_BS2.pin['opt_b1'].y - cell_BS2.pin['opt_b2'].y)
# dX = np.abs(cell_BS.pin['a1'].x - cell_BS.pin['b1'].x)
- BS1 = cell_BS.put('b1',-L_arm/2-R_bend*2-2.5,dY1/2,180)
- BS2 = cell_BS2.put('b2', L_arm/2+R_bend*2+2.5,dY2/2,0,flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS1 = cell_BS.put('b1',-L_arm/2-R_bend*2-2.5,dY1/2,180)
+ BS1 = cell_BS.put('opt_b1',-L_arm/2-R_bend*2-2.5,dY1/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS2 = cell_BS2.put('b2', L_arm/2+R_bend*2+2.5,dY2/2,0,flip=0)
+ BS2 = cell_BS2.put('opt_b2', L_arm/2+R_bend*2+2.5,dY2/2,0,flip=0)
pic = Route(width=w_wg,radius=R_bend,xs=xs_wg,adapt_width=True,adapt_xs=True)
@@ -197,53 +205,93 @@ class MZI:
# print("DEBUG - A")
- if ('a2' in pin_in_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_in_name):
+ if ('opt_a2' in pin_in_name):
if (D_port==None):
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
- nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a2'])
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a2'])
+ nd.strt(length=0.005,width=BS1.pin['opt_a2'].width,xs=self.xs_wg).put(BS1.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a1'])
+ nd.strt(length=0.005,width=BS1.pin['opt_a2'].width,xs=self.xs_wg).put(BS1.pin['opt_a1'])
elif(isinstance(D_port,int) or isinstance(D_port,float)):
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a1'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a1'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['opt_a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['opt_a1'].y)),
original_function=not sharp_patch).put(flip=1)
- nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a2'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a2'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['opt_a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['opt_a2'].y)),
original_function=not sharp_patch).put(flip=0)
- nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else:
raise Exception("ERROR:: In , type error")
else :
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
pin_out_name = []
for str,Pin in cell_BS2.ic_pins():
pin_out_name = pin_out_name+[str]
- if ('a2' in pin_out_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_out_name):
+ if ('opt_a2' in pin_out_name):
if (D_port==None):
- nd.Pin(name='b2',pin=BS2.pin['a1']).put()
- nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a2'])
- nd.Pin(name='b1',pin=BS2.pin['a2']).put()
- nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a2'])
+ nd.strt(length=0.005,width=BS2.pin['opt_a2'].width,xs=self.xs_wg).put(BS2.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a2']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a1'])
+ nd.strt(length=0.005,width=BS2.pin['opt_a2'].width,xs=self.xs_wg).put(BS2.pin['opt_a1'])
elif(isinstance(D_port,int) or isinstance(D_port,float)):
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a1'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a1'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['opt_a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['opt_a1'].y)),
original_function=not sharp_patch).put(flip=0)
- nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a2'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a2'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['opt_a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['opt_a2'].y)),
original_function=not sharp_patch).put(flip=1)
- nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else:
raise Exception("ERROR:: In , type error")
else :
- nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a1'],type="optical:").put()
@@ -277,10 +325,18 @@ class MZI:
Ltp=self.Ltp
).cell.put(0,-D_arm/2,0)
- pic.sbend_p2p(pin1=BS1.pin['b1'],pin2=arm_upper.pin['a1'],arrow=False,original_function=not sharp_patch).put()
- pic.sbend_p2p(pin1=BS1.pin['b2'],pin2=arm_down.pin['a1'],arrow=False,original_function=not sharp_patch).put()
- pic.sbend_p2p(pin1=BS2.pin['b2'],pin2=arm_upper.pin['b1'],arrow=False,original_function=not sharp_patch).put()
- pic.sbend_p2p(pin1=BS2.pin['b1'],pin2=arm_down.pin['b1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=BS1.pin['b1'],pin2=arm_upper.pin['a1'],arrow=False,original_function=not sharp_patch).put()
+ pic.sbend_p2p(pin1=BS1.pin['opt_b1'],pin2=arm_upper.pin['opt_a1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=BS1.pin['b2'],pin2=arm_down.pin['a1'],arrow=False,original_function=not sharp_patch).put()
+ pic.sbend_p2p(pin1=BS1.pin['opt_b2'],pin2=arm_down.pin['opt_a1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=BS2.pin['b2'],pin2=arm_upper.pin['b1'],arrow=False,original_function=not sharp_patch).put()
+ pic.sbend_p2p(pin1=BS2.pin['opt_b2'],pin2=arm_upper.pin['opt_b1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=BS2.pin['b1'],pin2=arm_down.pin['b1'],arrow=False,original_function=not sharp_patch).put()
+ pic.sbend_p2p(pin1=BS2.pin['opt_b1'],pin2=arm_down.pin['opt_b1'],arrow=False,original_function=not sharp_patch).put()
for str,Pin in arm_upper.ic_pins():
@@ -296,7 +352,9 @@ class MZI:
nd.put_stub()
self.cell = C
- self.L = np.abs(self.cell.pin['a1'].x-self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x-self.cell.pin['b1'].x)
+ self.L = np.abs(self.cell.pin['opt_a1'].x-self.cell.pin['opt_b1'].x)
class MZI_NS:
"""Nested-straight MZI composite with taperable arm widths.
@@ -392,9 +450,13 @@ class MZI_NS:
pic_strip = Route(radius=R_bend,width=w_wg,xs=xs_wg)
- _L_ = abs(BS.pin['a1'].x-BS.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _L_ = abs(BS.pin['a1'].x-BS.pin['b1'].x)
+ _L_ = abs(BS.pin['opt_a1'].x-BS.pin['opt_b1'].x)
- _W_ = abs(BS.pin['b1'].y-BS.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _W_ = abs(BS.pin['b1'].y-BS.pin['b2'].y)
+ _W_ = abs(BS.pin['opt_b1'].y-BS.pin['opt_b2'].y)
@@ -403,10 +465,16 @@ class MZI_NS:
via_h2m=via_h2m,
isl=isl,
L_ht=L_ht)
- PS_U = PS.cell.put('a1',-PS.L_arm/2,D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: PS_U = PS.cell.put('a1',-PS.L_arm/2,D_arm/2,0)
+ PS_U = PS.cell.put('opt_a1',-PS.L_arm/2,D_arm/2,0)
- BS1 = BS.put('b1',-R_bend*2-L_patch-PS.L_arm/2,_W_/2,180)
- BS2 = BS.put('b2', R_bend*2+L_patch+PS.L_arm/2,_W_/2,0,flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS1 = BS.put('b1',-R_bend*2-L_patch-PS.L_arm/2,_W_/2,180)
+ BS1 = BS.put('opt_b1',-R_bend*2-L_patch-PS.L_arm/2,_W_/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS2 = BS.put('b2', R_bend*2+L_patch+PS.L_arm/2,_W_/2,0,flip=0)
+ BS2 = BS.put('opt_b2', R_bend*2+L_patch+PS.L_arm/2,_W_/2,0,flip=0)
pic = Route(width=w_wg,radius=R_bend,xs=xs_wg,adapt_width=True,adapt_xs=True)
@@ -416,39 +484,73 @@ class MZI_NS:
pin_in_name = pin_in_name+[str]
# pin_in_name.append(str)
- if ('a2' in pin_in_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_in_name):
+ if ('opt_a2' in pin_in_name):
if (D_port==None):
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
- nd.Pin(name='b2',pin=BS2.pin['a2']).put()
- nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['a2']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a1'],type="optical:").put()
elif(isinstance(D_port,int) or isinstance(D_port,float)):
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a1'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a1'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['opt_a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['opt_a1'].y)),
original_function=not sharp_patch).put(flip=1)
- nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a2'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a2'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['opt_a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['opt_a2'].y)),
original_function=not sharp_patch).put(flip=0)
- nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a1'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a1'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['opt_a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['opt_a1'].y)),
original_function=not sharp_patch).put(flip=0)
- nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a2'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a2'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['opt_a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['opt_a2'].y)),
original_function=not sharp_patch).put(flip=1)
- nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else:
raise Exception("ERROR:: In , type error")
else :
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a1'],type="optical:").put()
# print("SEGEMENT")
- pic_strip.sbend_p2p(pin1=PS_U.pin['a1'],pin2=BS1.pin['b1'],Lstart=L_patch/4).put()
- pic_strip.sbend_p2p(pin1=PS_U.pin['b1'],pin2=BS2.pin['b2'],Lstart=L_patch/4).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=PS_U.pin['a1'],pin2=BS1.pin['b1'],Lstart=L_patch/4).put()
+ pic_strip.sbend_p2p(pin1=PS_U.pin['opt_a1'],pin2=BS1.pin['opt_b1'],Lstart=L_patch/4).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=PS_U.pin['b1'],pin2=BS2.pin['b2'],Lstart=L_patch/4).put()
+ pic_strip.sbend_p2p(pin1=PS_U.pin['opt_b1'],pin2=BS2.pin['opt_b2'],Lstart=L_patch/4).put()
if (dual_ht==False):
w_ht_D = 0
@@ -458,10 +560,16 @@ class MZI_NS:
via_h2m=via_h2m,
isl=isl,
L_ht=L_ht)
- PS_D = PS.cell.put('a1',-PS.L_arm/2,-D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: PS_D = PS.cell.put('a1',-PS.L_arm/2,-D_arm/2,0)
+ PS_D = PS.cell.put('opt_a1',-PS.L_arm/2,-D_arm/2,0)
- pic_strip.sbend_p2p(pin1=PS_D.pin['a1'],pin2=BS1.pin['b2'],Lstart=L_patch/4).put()
- pic_strip.sbend_p2p(pin1=PS_D.pin['b1'],pin2=BS2.pin['b1'],Lstart=L_patch/4).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=PS_D.pin['a1'],pin2=BS1.pin['b2'],Lstart=L_patch/4).put()
+ pic_strip.sbend_p2p(pin1=PS_D.pin['opt_a1'],pin2=BS1.pin['opt_b2'],Lstart=L_patch/4).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=PS_D.pin['b1'],pin2=BS2.pin['b1'],Lstart=L_patch/4).put()
+ pic_strip.sbend_p2p(pin1=PS_D.pin['opt_b1'],pin2=BS2.pin['opt_b1'],Lstart=L_patch/4).put()
if (w_heater>0):
nd.Pin(name='ep1',pin=PS_U.pin['ep1']).put()
@@ -566,15 +674,27 @@ class MZI_NS_ubend:
pic = Route(radius=R_bend,width=w_wg,xs=xs_wg)
- _L_ = abs(BS.pin['a1'].x-BS.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _L_ = abs(BS.pin['a1'].x-BS.pin['b1'].x)
+ _L_ = abs(BS.pin['opt_a1'].x-BS.pin['opt_b1'].x)
- _W_ = abs(BS.pin['b1'].y-BS.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _W_ = abs(BS.pin['b1'].y-BS.pin['b2'].y)
+ _W_ = abs(BS.pin['opt_b1'].y-BS.pin['opt_b2'].y)
- BS1 = BS.put('b1',-R_bend*2-L_patch/2,_W_/2,180)
- BS2 = BS.put('b2', R_bend*2+L_patch/2,_W_/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS1 = BS.put('b1',-R_bend*2-L_patch/2,_W_/2,180)
+ BS1 = BS.put('opt_b1',-R_bend*2-L_patch/2,_W_/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS2 = BS.put('b2', R_bend*2+L_patch/2,_W_/2,0)
+ BS2 = BS.put('opt_b2', R_bend*2+L_patch/2,_W_/2,0)
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a1'],type="optical:").put()
""" Plcaing b2 pin """
pin_in_name = []
@@ -582,37 +702,75 @@ class MZI_NS_ubend:
pin_in_name = pin_in_name+[str]
# pin_in_name.append(str)
- if ('a2' in pin_in_name):
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
- nd.Pin(name='b2',pin=BS2.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_in_name):
+ if ('opt_a2' in pin_in_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['a2']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_a2'],type="optical:").put()
if (D_port==None):
- nd.Pin(name='b2',pin=BS2.pin['a1']).put()
- nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=xs_wg).put(BS2.pin['a2'])
- nd.Pin(name='b1',pin=BS2.pin['a2']).put()
- nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=xs_wg).put(BS2.pin['a1'])
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
- nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=xs_wg).put(BS1.pin['a2'])
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=xs_wg).put(BS1.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=xs_wg).put(BS2.pin['a2'])
+ nd.strt(length=0.005,width=BS2.pin['opt_a2'].width,xs=xs_wg).put(BS2.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a2']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=xs_wg).put(BS2.pin['a1'])
+ nd.strt(length=0.005,width=BS2.pin['opt_a2'].width,xs=xs_wg).put(BS2.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=xs_wg).put(BS1.pin['a2'])
+ nd.strt(length=0.005,width=BS1.pin['opt_a2'].width,xs=xs_wg).put(BS1.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=xs_wg).put(BS1.pin['a1'])
+ nd.strt(length=0.005,width=BS1.pin['opt_a2'].width,xs=xs_wg).put(BS1.pin['opt_a1'])
elif(isinstance(D_port,int) or isinstance(D_port,float)):
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a1'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a1'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['opt_a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['opt_a1'].y)),
original_function=not sharp_patch).put(flip=0)
- nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a2'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['a2'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS2.pin['opt_a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS2.pin['opt_a2'].y)),
original_function=not sharp_patch).put(flip=1)
- nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a1'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a1'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['opt_a1'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['opt_a1'].y)),
original_function=not sharp_patch).put(flip=1)
- nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a2'].y)),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['a2'].y)),
+ temp = pic.sbend_route(radius=R_bend,width=w_wg,pin=BS1.pin['opt_a2'],length1=L_patch/4,length2=L_patch/4,offset=abs(D_port/2-abs(BS1.pin['opt_a2'].y)),
original_function=not sharp_patch).put(flip=0)
- nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else:
raise Exception("ERROR:: In , type error")
@@ -621,9 +779,15 @@ class MZI_NS_ubend:
L12=L12,L_tp=Ltp,w_heater=w_ht,
via_h2m=via_h2m,
isl=isl,
- L_ht=L_ht).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b1'].y+L_patch/4+R_bend,90)
- pic.bend_route_p2p(pin1=PS_L1.pin['a1'],pin2=BS1.pin['b1']).put()
- pic.bend_route_p2p(pin1=PS_L1.pin['b1'],pin2=BS2.pin['b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L_ht=L_ht).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b1'].y+L_patch/4+R_bend,90)
+ L_ht=L_ht).cell.put('opt_a1',BS1.pin['opt_b1'].x+L_patch/4+R_bend,BS1.pin['opt_b1'].y+L_patch/4+R_bend,90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.bend_route_p2p(pin1=PS_L1.pin['a1'],pin2=BS1.pin['b1']).put()
+ pic.bend_route_p2p(pin1=PS_L1.pin['opt_a1'],pin2=BS1.pin['opt_b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.bend_route_p2p(pin1=PS_L1.pin['b1'],pin2=BS2.pin['b2']).put()
+ pic.bend_route_p2p(pin1=PS_L1.pin['opt_b1'],pin2=BS2.pin['opt_b2']).put()
if (dual_ht):
w_ht_d=w_ht
@@ -633,9 +797,15 @@ class MZI_NS_ubend:
L12=L12,L_tp=Ltp,w_heater=w_ht_d,
via_h2m=via_h2m,
isl=isl,
- L_ht=L_ht).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b2'].y-L_patch/4-R_bend,-90,flip=1)
- pic.bend_route_p2p(pin1=PS_L2.pin['a1'],pin2=BS1.pin['b2']).put()
- pic.bend_route_p2p(pin1=PS_L2.pin['b1'],pin2=BS2.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L_ht=L_ht).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b2'].y-L_patch/4-R_bend,-90,flip=1)
+ L_ht=L_ht).cell.put('opt_a1',BS1.pin['opt_b1'].x+L_patch/4+R_bend,BS1.pin['opt_b2'].y-L_patch/4-R_bend,-90,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.bend_route_p2p(pin1=PS_L2.pin['a1'],pin2=BS1.pin['b2']).put()
+ pic.bend_route_p2p(pin1=PS_L2.pin['opt_a1'],pin2=BS1.pin['opt_b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.bend_route_p2p(pin1=PS_L2.pin['b1'],pin2=BS2.pin['b1']).put()
+ pic.bend_route_p2p(pin1=PS_L2.pin['opt_b1'],pin2=BS2.pin['opt_b1']).put()
if (w_ht>0):
nd.Pin(name='ep1',pin=PS_L1.pin['ep1']).put()
@@ -723,47 +893,97 @@ class MZI_2st_ubend:
pic_strip = Route(radius=R_bend,width=w_wg,xs=xs_wg)
- _L1_ = abs(BS1.pin['a1'].x-BS1.pin['b1'].x)
- _L2_ = abs(BS2.pin['a1'].x-BS2.pin['b1'].x)
- _L3_ = abs(BS3.pin['a1'].x-BS3.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _L1_ = abs(BS1.pin['a1'].x-BS1.pin['b1'].x)
+ _L1_ = abs(BS1.pin['opt_a1'].x-BS1.pin['opt_b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _L2_ = abs(BS2.pin['a1'].x-BS2.pin['b1'].x)
+ _L2_ = abs(BS2.pin['opt_a1'].x-BS2.pin['opt_b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _L3_ = abs(BS3.pin['a1'].x-BS3.pin['b1'].x)
+ _L3_ = abs(BS3.pin['opt_a1'].x-BS3.pin['opt_b1'].x)
- _W1_ = abs(BS1.pin['b1'].y-BS1.pin['b2'].y)
- _W2_ = abs(BS2.pin['b1'].y-BS2.pin['b2'].y)
- _W3_ = abs(BS3.pin['b1'].y-BS3.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _W1_ = abs(BS1.pin['b1'].y-BS1.pin['b2'].y)
+ _W1_ = abs(BS1.pin['opt_b1'].y-BS1.pin['opt_b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _W2_ = abs(BS2.pin['b1'].y-BS2.pin['b2'].y)
+ _W2_ = abs(BS2.pin['opt_b1'].y-BS2.pin['opt_b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: _W3_ = abs(BS3.pin['b1'].y-BS3.pin['b2'].y)
+ _W3_ = abs(BS3.pin['opt_b1'].y-BS3.pin['opt_b2'].y)
- BSM = BS2.put('a1',-_L2_/2,_W2_/2,0)
- BS1 = BS1.put('b1',-_L2_/2-R_bend*4-L_patch,_W2_/2,180)
- BS2 = BS3.put('a1', _L2_/2+R_bend*4+L_patch,_W2_/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BSM = BS2.put('a1',-_L2_/2,_W2_/2,0)
+ BSM = BS2.put('opt_a1',-_L2_/2,_W2_/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS1 = BS1.put('b1',-_L2_/2-R_bend*4-L_patch,_W2_/2,180)
+ BS1 = BS1.put('opt_b1',-_L2_/2-R_bend*4-L_patch,_W2_/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS2 = BS3.put('a1', _L2_/2+R_bend*4+L_patch,_W2_/2,0)
+ BS2 = BS3.put('opt_a1', _L2_/2+R_bend*4+L_patch,_W2_/2,0)
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
- nd.Pin(name='b1',pin=BS2.pin['b1']).put()
- nd.Pin(name='b2',pin=BS2.pin['b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['b1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_b1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['b2']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_b2'],type="optical:").put()
PS_L1 = PS_2st(xs_wg=xs_wg,w_wg=w_wg,w1=w1,w2=w2,L1=Ln1/2+L0,L2=L0,R_bend=R_bend,L_wg=0.25,
via_h2m=via_h2m,isl=isl,
- L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b1'].y+L_patch/4+R_bend,90)
- pic_strip.bend_route_p2p(pin1=PS_L1.pin['a1'],pin2=BS1.pin['b1']).put()
- pic_strip.bend_route_p2p(pin1=PS_L1.pin['b1'],pin2=BSM.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b1'].y+L_patch/4+R_bend,90)
+ L12=L12,L_tp=Ltp,w_heater=0).cell.put('opt_a1',BS1.pin['opt_b1'].x+L_patch/4+R_bend,BS1.pin['opt_b1'].y+L_patch/4+R_bend,90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_L1.pin['a1'],pin2=BS1.pin['b1']).put()
+ pic_strip.bend_route_p2p(pin1=PS_L1.pin['opt_a1'],pin2=BS1.pin['opt_b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_L1.pin['b1'],pin2=BSM.pin['a1']).put()
+ pic_strip.bend_route_p2p(pin1=PS_L1.pin['opt_b1'],pin2=BSM.pin['opt_a1']).put()
PS_L2 = PS_2st(xs_wg=xs_wg,w_wg=w_wg,w1=w2,w2=w1,L1=Ls1/2+L0,L2=L0,R_bend=R_bend,L_wg=0.25,
via_h2m=via_h2m,isl=isl,
- L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b2'].y-L_patch/4-R_bend,-90,flip=1)
- pic_strip.bend_route_p2p(pin1=PS_L2.pin['a1'],pin2=BS1.pin['b2']).put()
- pic_strip.bend_route_p2p(pin1=PS_L2.pin['b1'],pin2=BSM.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BS1.pin['b1'].x+L_patch/4+R_bend,BS1.pin['b2'].y-L_patch/4-R_bend,-90,flip=1)
+ L12=L12,L_tp=Ltp,w_heater=0).cell.put('opt_a1',BS1.pin['opt_b1'].x+L_patch/4+R_bend,BS1.pin['opt_b2'].y-L_patch/4-R_bend,-90,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_L2.pin['a1'],pin2=BS1.pin['b2']).put()
+ pic_strip.bend_route_p2p(pin1=PS_L2.pin['opt_a1'],pin2=BS1.pin['opt_b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_L2.pin['b1'],pin2=BSM.pin['a2']).put()
+ pic_strip.bend_route_p2p(pin1=PS_L2.pin['opt_b1'],pin2=BSM.pin['opt_a2']).put()
PS_R1 = PS_2st(xs_wg=xs_wg,w_wg=w_wg,w1=w2,w2=w1,L1=Ln2/2+L0,L2=L0,R_bend=R_bend,L_wg=0.25,
via_h2m=via_h2m,isl=isl,
- L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BSM.pin['b1'].x+L_patch/4+R_bend,BSM.pin['b1'].y+L_patch/4+R_bend,90)
- pic_strip.bend_route_p2p(pin1=PS_R1.pin['b1'],pin2=BS2.pin['a1']).put()
- pic_strip.bend_route_p2p(pin1=PS_R1.pin['a1'],pin2=BSM.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BSM.pin['b1'].x+L_patch/4+R_bend,BSM.pin['b1'].y+L_patch/4+R_bend,90)
+ L12=L12,L_tp=Ltp,w_heater=0).cell.put('opt_a1',BSM.pin['opt_b1'].x+L_patch/4+R_bend,BSM.pin['opt_b1'].y+L_patch/4+R_bend,90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_R1.pin['b1'],pin2=BS2.pin['a1']).put()
+ pic_strip.bend_route_p2p(pin1=PS_R1.pin['opt_b1'],pin2=BS2.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_R1.pin['a1'],pin2=BSM.pin['b1']).put()
+ pic_strip.bend_route_p2p(pin1=PS_R1.pin['opt_a1'],pin2=BSM.pin['opt_b1']).put()
PS_R2 = PS_2st(xs_wg=xs_wg,w_wg=w_wg,w1=w1,w2=w2,L1=Ls2/2+L0,L2=L0,R_bend=R_bend,L_wg=0.25,
via_h2m=via_h2m,isl=isl,
- L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BSM.pin['b1'].x+L_patch/4+R_bend,BSM.pin['b2'].y-L_patch/4-R_bend,-90,flip=1)
- pic_strip.bend_route_p2p(pin1=PS_R2.pin['b1'],pin2=BS2.pin['a2']).put()
- pic_strip.bend_route_p2p(pin1=PS_R2.pin['a1'],pin2=BSM.pin['b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L12=L12,L_tp=Ltp,w_heater=0).cell.put('a1',BSM.pin['b1'].x+L_patch/4+R_bend,BSM.pin['b2'].y-L_patch/4-R_bend,-90,flip=1)
+ L12=L12,L_tp=Ltp,w_heater=0).cell.put('opt_a1',BSM.pin['opt_b1'].x+L_patch/4+R_bend,BSM.pin['opt_b2'].y-L_patch/4-R_bend,-90,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_R2.pin['b1'],pin2=BS2.pin['a2']).put()
+ pic_strip.bend_route_p2p(pin1=PS_R2.pin['opt_b1'],pin2=BS2.pin['opt_a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route_p2p(pin1=PS_R2.pin['a1'],pin2=BSM.pin['b2']).put()
+ pic_strip.bend_route_p2p(pin1=PS_R2.pin['opt_a1'],pin2=BSM.pin['opt_b2']).put()
self.cell = C
@@ -841,28 +1061,56 @@ class MZI_Eubend:
R90_eff = EUB_90.sz[0]
R180_eff = EUB_180.sz[1]
- BS1 = BS.put('b1',-R90_eff-R180_eff/2-L_patch/2,BS.pin['b1'].y,180)
- BS2 = BS.put('b1', R90_eff+R180_eff/2+L_patch/2,BS.pin['b1'].y,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS1 = BS.put('b1',-R90_eff-R180_eff/2-L_patch/2,BS.pin['b1'].y,180)
+ BS1 = BS.put('opt_b1',-R90_eff-R180_eff/2-L_patch/2,BS.pin['opt_b1'].y,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS2 = BS.put('b1', R90_eff+R180_eff/2+L_patch/2,BS.pin['b1'].y,0,flip=1)
+ BS2 = BS.put('opt_b1', R90_eff+R180_eff/2+L_patch/2,BS.pin['opt_b1'].y,0,flip=1)
- tl = nd.strt(length=L_patch/2,xs=xs_wg,width=BS1.pin['b1'].width).put(BS1.pin['b1'])
- EUB_90.cell.put('a1',tl.pin['b0'],flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: tl = nd.strt(length=L_patch/2,xs=xs_wg,width=BS1.pin['b1'].width).put(BS1.pin['b1'])
+ tl = nd.strt(length=L_patch/2,xs=xs_wg,width=BS1.pin['opt_b1'].width).put(BS1.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: EUB_90.cell.put('a1',tl.pin['b0'],flip=0)
+ EUB_90.cell.put('opt_a1',tl.pin['b0'],flip=0)
nd.strt(length=L_arm/2+dL_Amzi/2,xs=xs_wg,width=w_arm).put()
tl = EUB_180.cell.put(flip=1)
- tr = nd.strt(length=abs(tl.pin['b1'].x-BS2.pin['b1'].x)-R90_eff,xs=xs_wg,width=BS2.pin['b1'].width).put(BS2.pin['b1'])
- tr = EUB_90.cell.put('a1',tr.pin['b0'],flip=1)
- nd.strt(length=abs(tr.pin['b1'].y - tl.pin['b1'].y),xs=xs_wg,width=w_arm).put(tr.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: tr = nd.strt(length=abs(tl.pin['b1'].x-BS2.pin['b1'].x)-R90_eff,xs=xs_wg,width=BS2.pin['b1'].width).put(BS2.pin['b1'])
+ tr = nd.strt(length=abs(tl.pin['opt_b1'].x-BS2.pin['opt_b1'].x)-R90_eff,xs=xs_wg,width=BS2.pin['opt_b1'].width).put(BS2.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: tr = EUB_90.cell.put('a1',tr.pin['b0'],flip=1)
+ tr = EUB_90.cell.put('opt_a1',tr.pin['b0'],flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=abs(tr.pin['b1'].y - tl.pin['b1'].y),xs=xs_wg,width=w_arm).put(tr.pin['b1'])
+ nd.strt(length=abs(tr.pin['opt_b1'].y - tl.pin['opt_b1'].y),xs=xs_wg,width=w_arm).put(tr.pin['opt_b1'])
- tl = nd.strt(length=L_patch/2,xs=xs_wg,width=BS1.pin['b2'].width).put(BS1.pin['b2'])
- EUB_90.cell.put('a1',tl.pin['b0'],flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: tl = nd.strt(length=L_patch/2,xs=xs_wg,width=BS1.pin['b2'].width).put(BS1.pin['b2'])
+ tl = nd.strt(length=L_patch/2,xs=xs_wg,width=BS1.pin['opt_b2'].width).put(BS1.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: EUB_90.cell.put('a1',tl.pin['b0'],flip=1)
+ EUB_90.cell.put('opt_a1',tl.pin['b0'],flip=1)
nd.strt(length=L_arm/2,xs=xs_wg,width=w_arm).put()
tl = EUB_180.cell.put(flip=0)
- tr = nd.strt(length=abs(tl.pin['b1'].x-BS2.pin['b2'].x)-R90_eff,xs=xs_wg,width=BS2.pin['b2'].width).put(BS2.pin['b2'])
- tr = EUB_90.cell.put('a1',tr.pin['b0'],flip=0)
- nd.strt(length=abs(tr.pin['b1'].y - tl.pin['b1'].y),xs=xs_wg,width=w_arm).put(tr.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: tr = nd.strt(length=abs(tl.pin['b1'].x-BS2.pin['b2'].x)-R90_eff,xs=xs_wg,width=BS2.pin['b2'].width).put(BS2.pin['b2'])
+ tr = nd.strt(length=abs(tl.pin['opt_b1'].x-BS2.pin['opt_b2'].x)-R90_eff,xs=xs_wg,width=BS2.pin['opt_b2'].width).put(BS2.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: tr = EUB_90.cell.put('a1',tr.pin['b0'],flip=0)
+ tr = EUB_90.cell.put('opt_a1',tr.pin['b0'],flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=abs(tr.pin['b1'].y - tl.pin['b1'].y),xs=xs_wg,width=w_arm).put(tr.pin['b1'])
+ nd.strt(length=abs(tr.pin['opt_b1'].y - tl.pin['opt_b1'].y),xs=xs_wg,width=w_arm).put(tr.pin['opt_b1'])
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a1'],type="optical:").put()
""" Plcaing b2 pin """
pin_in_name = []
@@ -870,9 +1118,15 @@ class MZI_Eubend:
pin_in_name = pin_in_name+[str]
# pin_in_name.append(str)
- if ('a2' in pin_in_name):
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
- nd.Pin(name='b2',pin=BS2.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_in_name):
+ if ('opt_a2' in pin_in_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['a2']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_a2'],type="optical:").put()
self.cell = C
@@ -1081,11 +1335,19 @@ class MZI_Butterfly:
pic_strip = Route(radius=self.R_bend,width=self.w_wg,width2_mm=self.w_arm,sharp_patch=self.sharp_patch,
xs=self.xs_wg)
- dY_BS1 = abs(self.BS.pin['b1'].y - self.BS.pin['b2'].y)
- BS1 = self.BS.put('b1',-self.R_bend-self.L_inner/2,dY_BS1/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_BS1 = abs(self.BS.pin['b1'].y - self.BS.pin['b2'].y)
+ dY_BS1 = abs(self.BS.pin['opt_b1'].y - self.BS.pin['opt_b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS1 = self.BS.put('b1',-self.R_bend-self.L_inner/2,dY_BS1/2,180)
+ BS1 = self.BS.put('opt_b1',-self.R_bend-self.L_inner/2,dY_BS1/2,180)
- dY_BS2 = abs(self.BS2.pin['b1'].y - self.BS2.pin['b2'].y)
- BS2 = self.BS2.put('b2',self.R_bend+self.L_inner/2,dY_BS2/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_BS2 = abs(self.BS2.pin['b1'].y - self.BS2.pin['b2'].y)
+ dY_BS2 = abs(self.BS2.pin['opt_b1'].y - self.BS2.pin['opt_b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS2 = self.BS2.put('b2',self.R_bend+self.L_inner/2,dY_BS2/2,0)
+ BS2 = self.BS2.put('opt_b2',self.R_bend+self.L_inner/2,dY_BS2/2,0)
# print("BS1=%.3f BS2=%.3f" %(dY_BS1,dY_BS2))
@@ -1093,13 +1355,23 @@ class MZI_Butterfly:
HT_U = waveguide(w_heater=self.w_heater,L_wg=LU,L_heater=LU,
w_wg=self.w_arm,Ltp=self.Ltp,w_port=self.w_wg,
isl=self.isl,w_metal=self.w_metal,
- via_h2m=self.via_h2m).cell.put('a1',-LU/2,dY_BS1/2+self.R_bend*4+self.L_patch,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: via_h2m=self.via_h2m).cell.put('a1',-LU/2,dY_BS1/2+self.R_bend*4+self.L_patch,0)
+ via_h2m=self.via_h2m).cell.put('opt_a1',-LU/2,dY_BS1/2+self.R_bend*4+self.L_patch,0)
- pic_strip.ubend_route(pin=BS1.pin['b1'],length=self.L_patch/2,offset=self.R_bend*2).put()
- pic_strip.ubend_p2p(pin2=HT_U.pin['a1'],length=self.L_patch/2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_route(pin=BS1.pin['b1'],length=self.L_patch/2,offset=self.R_bend*2).put()
+ pic_strip.ubend_route(pin=BS1.pin['opt_b1'],length=self.L_patch/2,offset=self.R_bend*2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_p2p(pin2=HT_U.pin['a1'],length=self.L_patch/2).put()
+ pic_strip.ubend_p2p(pin2=HT_U.pin['opt_a1'],length=self.L_patch/2).put()
- pic_strip.ubend_route(pin=BS2.pin['b2'],length=self.L_patch/2,offset=self.R_bend*2).put(flip=1)
- pic_strip.ubend_p2p(pin2=HT_U.pin['b1'],length=self.L_patch/2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_route(pin=BS2.pin['b2'],length=self.L_patch/2,offset=self.R_bend*2).put(flip=1)
+ pic_strip.ubend_route(pin=BS2.pin['opt_b2'],length=self.L_patch/2,offset=self.R_bend*2).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_p2p(pin2=HT_U.pin['b1'],length=self.L_patch/2).put()
+ pic_strip.ubend_p2p(pin2=HT_U.pin['opt_b1'],length=self.L_patch/2).put()
if (self.w_heater>0):
nd.Pin(name="ep1",pin=HT_U.pin['ep1']).put()
@@ -1113,17 +1385,27 @@ class MZI_Butterfly:
HT_D = waveguide(w_heater=w_ht_d,L_wg=LD,L_heater=LD,
w_wg=self.w_arm,Ltp=self.Ltp,w_port=self.w_wg,
isl=self.isl,
- via_h2m=self.via_h2m).cell.put('a1',-LD/2,-dY_BS1/2-self.R_bend*4-self.L_patch,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: via_h2m=self.via_h2m).cell.put('a1',-LD/2,-dY_BS1/2-self.R_bend*4-self.L_patch,0)
+ via_h2m=self.via_h2m).cell.put('opt_a1',-LD/2,-dY_BS1/2-self.R_bend*4-self.L_patch,0)
if (w_ht_d>0 and self.dual_ht):
nd.Pin(name="ep2",pin=HT_D.pin['ep1']).put()
nd.Pin(name="en2",pin=HT_D.pin['en1']).put()
- pic_strip.ubend_route(pin=BS1.pin['b2'],length=self.L_patch/2,offset=self.R_bend*2).put(flip=1)
- pic_strip.ubend_p2p(pin2=HT_D.pin['a1'],length=self.L_patch/2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_route(pin=BS1.pin['b2'],length=self.L_patch/2,offset=self.R_bend*2).put(flip=1)
+ pic_strip.ubend_route(pin=BS1.pin['opt_b2'],length=self.L_patch/2,offset=self.R_bend*2).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_p2p(pin2=HT_D.pin['a1'],length=self.L_patch/2).put()
+ pic_strip.ubend_p2p(pin2=HT_D.pin['opt_a1'],length=self.L_patch/2).put()
- pic_strip.ubend_route(pin=BS2.pin['b1'],length=self.L_patch/2,offset=self.R_bend*2).put()
- pic_strip.ubend_p2p(pin2=HT_D.pin['b1'],length=self.L_patch/2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_route(pin=BS2.pin['b1'],length=self.L_patch/2,offset=self.R_bend*2).put()
+ pic_strip.ubend_route(pin=BS2.pin['opt_b1'],length=self.L_patch/2,offset=self.R_bend*2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.ubend_p2p(pin2=HT_D.pin['b1'],length=self.L_patch/2).put()
+ pic_strip.ubend_p2p(pin2=HT_D.pin['opt_b1'],length=self.L_patch/2).put()
""" Placing Input and Output ports """
@@ -1132,53 +1414,101 @@ class MZI_Butterfly:
for str,Pin in self.BS.ic_pins():
pin_in_name = pin_in_name+[str]
- if ('a2' in pin_in_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_in_name):
+ if ('opt_a2' in pin_in_name):
if (self.D_port==None):
- nd.Pin(name='a2',pin=BS1.pin['a2']).put()
- nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a2'])
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
- nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BS1.pin['a2']).put()
+ nd.Pin(name='opt_a2',pin=BS1.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a2'])
+ nd.strt(length=0.005,width=BS1.pin['opt_a2'].width,xs=self.xs_wg).put(BS1.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS1.pin['a2'].width,xs=self.xs_wg).put(BS1.pin['a1'])
+ nd.strt(length=0.005,width=BS1.pin['opt_a2'].width,xs=self.xs_wg).put(BS1.pin['opt_a1'])
elif(isinstance(self.D_port,int) or isinstance(self.D_port,float)):
- temp = pic_strip.sbend_route(pin=BS1.pin['a1'],length1=self.L_patch/4,length2=self.L_patch/4,
- offset=abs(self.D_port/2-abs(BS1.pin['a1'].y))).put(flip=1)
- nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic_strip.sbend_route(pin=BS1.pin['a1'],length1=self.L_patch/4,length2=self.L_patch/4,
+ temp = pic_strip.sbend_route(pin=BS1.pin['opt_a1'],length1=self.L_patch/4,length2=self.L_patch/4,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: offset=abs(self.D_port/2-abs(BS1.pin['a1'].y))).put(flip=1)
+ offset=abs(self.D_port/2-abs(BS1.pin['opt_a1'].y))).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic_strip.sbend_route(pin=BS1.pin['a2'],length1=self.L_patch/4,length2=self.L_patch/4,
- offset=abs(self.D_port/2-abs(BS1.pin['a2'].y))).put(flip=0)
- nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic_strip.sbend_route(pin=BS1.pin['a2'],length1=self.L_patch/4,length2=self.L_patch/4,
+ temp = pic_strip.sbend_route(pin=BS1.pin['opt_a2'],length1=self.L_patch/4,length2=self.L_patch/4,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: offset=abs(self.D_port/2-abs(BS1.pin['a2'].y))).put(flip=0)
+ offset=abs(self.D_port/2-abs(BS1.pin['opt_a2'].y))).put(flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else:
raise Exception("ERROR:: In , type error")
else :
- nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BS1.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BS1.pin['opt_a1'],type="optical:").put()
pin_out_name = []
for str,Pin in self.BS2.ic_pins():
pin_out_name = pin_out_name+[str]
- if ('a2' in pin_out_name):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ('a2' in pin_out_name):
+ if ('opt_a2' in pin_out_name):
if (self.D_port==None):
- nd.Pin(name='b2',pin=BS2.pin['a1']).put()
- nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a2'])
- nd.Pin(name='b1',pin=BS2.pin['a2']).put()
- nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b2',pin=BS2.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a2'])
+ nd.strt(length=0.005,width=BS2.pin['opt_a2'].width,xs=self.xs_wg).put(BS2.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a2']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a2'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.strt(length=0.005,width=BS2.pin['a2'].width,xs=self.xs_wg).put(BS2.pin['a1'])
+ nd.strt(length=0.005,width=BS2.pin['opt_a2'].width,xs=self.xs_wg).put(BS2.pin['opt_a1'])
elif(isinstance(self.D_port,int) or isinstance(self.D_port,float)):
- temp = pic_strip.sbend_route(pin=BS2.pin['a2'],length1=self.L_patch/4,length2=self.L_patch/4,
- offset=abs(self.D_port/2-abs(BS2.pin['a1'].y))).put(flip=0)
- nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic_strip.sbend_route(pin=BS2.pin['a2'],length1=self.L_patch/4,length2=self.L_patch/4,
+ temp = pic_strip.sbend_route(pin=BS2.pin['opt_a2'],length1=self.L_patch/4,length2=self.L_patch/4,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: offset=abs(self.D_port/2-abs(BS2.pin['a1'].y))).put(flip=0)
+ offset=abs(self.D_port/2-abs(BS2.pin['opt_a1'].y))).put(flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b1',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
- temp = pic_strip.sbend_route(pin=BS2.pin['a1'],length1=self.L_patch/4,length2=self.L_patch/4,
- offset=abs(self.D_port/2-abs(BS2.pin['a2'].y))).put(flip=1)
- nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = pic_strip.sbend_route(pin=BS2.pin['a1'],length1=self.L_patch/4,length2=self.L_patch/4,
+ temp = pic_strip.sbend_route(pin=BS2.pin['opt_a1'],length1=self.L_patch/4,length2=self.L_patch/4,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: offset=abs(self.D_port/2-abs(BS2.pin['a2'].y))).put(flip=1)
+ offset=abs(self.D_port/2-abs(BS2.pin['opt_a2'].y))).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b2',pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else:
raise Exception("ERROR:: In , type error")
else :
- nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BS2.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=BS2.pin['opt_a1'],type="optical:").put()
return C
@@ -1204,29 +1534,51 @@ class MZI_Butterfly:
GC2Instr = gc_cell.put(pin_gc,dXgc2gc,0,0)
""" Placing GC inputs """
- if ("a2" in self.cell.pin):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("a2" in self.cell.pin):
+ if ("opt_a2" in self.cell.pin):
GC3Instr = gc_cell.put(pin_gc,0,dYgc2gc,180)
- if ("b2" in self.cell.pin):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("b2" in self.cell.pin):
+ if ("opt_b2" in self.cell.pin):
GC4Instr = gc_cell.put(pin_gc,dXgc2gc,dYgc2gc,0)
- dYcell = abs(self.cell.pin['b1'].y - self.cell.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dYcell = abs(self.cell.pin['b1'].y - self.cell.pin['b2'].y)
+ dYcell = abs(self.cell.pin['opt_b1'].y - self.cell.pin['opt_b2'].y)
dYoffset = -(dYcell - dYgc2gc)/2
else:
dYoffset = 0
- dXcell = abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dXcell = abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ dXcell = abs(self.cell.pin['opt_a1'].x - self.cell.pin['opt_b1'].x)
dXoffset = -(dXcell - dXgc2gc)/2
- cellInstr = self.cell.put('a1',dXoffset,dYoffset,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cellInstr = self.cell.put('a1',dXoffset,dYoffset,0,flip=1)
+ cellInstr = self.cell.put('opt_a1',dXoffset,dYoffset,0,flip=1)
pic = Route(xs=self.xs_wg,width=w_wg,radius=R_bend,sharp_patch=self.sharp_patch)
- pic.sbend_p2p(pin1=cellInstr.pin['a1'],pin2=GC1Instr.pin[pin_gc]).put()
- pic.sbend_p2p(pin1=cellInstr.pin['b1'],pin2=GC2Instr.pin[pin_gc]).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['a1'],pin2=GC1Instr.pin[pin_gc]).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_a1'],pin2=GC1Instr.pin[pin_gc]).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['b1'],pin2=GC2Instr.pin[pin_gc]).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_b1'],pin2=GC2Instr.pin[pin_gc]).put()
- if ("a2" in cellInstr.pin):
- pic.sbend_p2p(pin1=cellInstr.pin['a2'],pin2=GC3Instr.pin[pin_gc]).put()
- if ("b2" in cellInstr.pin):
- pic.sbend_p2p(pin1=cellInstr.pin['b2'],pin2=GC4Instr.pin[pin_gc]).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("a2" in cellInstr.pin):
+ if ("opt_a2" in cellInstr.pin):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['a2'],pin2=GC3Instr.pin[pin_gc]).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_a2'],pin2=GC3Instr.pin[pin_gc]).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("b2" in cellInstr.pin):
+ if ("opt_b2" in cellInstr.pin):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['b2'],pin2=GC4Instr.pin[pin_gc]).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_b2'],pin2=GC4Instr.pin[pin_gc]).put()
return C
diff --git a/mxpic/components/composites/MZI_mesh.py b/mxpic/components/composites/MZI_mesh.py
index 73667d3..061540d 100644
--- a/mxpic/components/composites/MZI_mesh.py
+++ b/mxpic/components/composites/MZI_mesh.py
@@ -175,11 +175,19 @@ class W_waveguide:
# ISL(xs=self.xs_isl,width=self.w_isl,length=L_isl_side).cell.put('a1',self.L_wg,self.w_metal/2+self.sp_isl_xs,90)
if (self.reverse):
- nd.Pin(name='b1',pin=wg_begin.pin['a0']).put()
- nd.Pin(name='a1',pin=wg_end.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=wg_begin.pin['a0']).put()
+ nd.Pin(name='opt_b1',pin=wg_begin.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=wg_end.pin['b0']).put()
+ nd.Pin(name='opt_a1',pin=wg_end.pin['b0'],type="optical:").put()
else :
- nd.Pin(name='a1',pin=wg_begin.pin['a0']).put()
- nd.Pin(name='b1',pin=wg_end.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=wg_begin.pin['a0']).put()
+ nd.Pin(name='opt_a1',pin=wg_begin.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=wg_end.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=wg_end.pin['b0'],type="optical:").put()
return C
@@ -324,13 +332,21 @@ class UMat_2x2_S:
with nd.Cell(name=self.name,instantiate=instantiate) as MZI_Unit:
pic_strip = Route(radius=self.R_bend,width=self.w_wg,xs=self.xs_wg)
- self.dL_BS = np.abs(self.BS.pin['a1'].x - self.BS.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.dL_BS = np.abs(self.BS.pin['a1'].x - self.BS.pin['b1'].x)
+ self.dL_BS = np.abs(self.BS.pin['opt_a1'].x - self.BS.pin['opt_b1'].x)
## 2023.1.21 modified
- dY_BS = abs(self.BS.pin['b1'].y - self.BS.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_BS = abs(self.BS.pin['b1'].y - self.BS.pin['b2'].y)
+ dY_BS = abs(self.BS.pin['opt_b1'].y - self.BS.pin['opt_b2'].y)
- BS_L = self.BS.put('b1',-2*self.R_bend - self.L_arm/2-1,dY_BS/2,180)
- BS_R = self.BS.put('a2', 2*self.R_bend + self.L_arm/2+1,dY_BS/2,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS_L = self.BS.put('b1',-2*self.R_bend - self.L_arm/2-1,dY_BS/2,180)
+ BS_L = self.BS.put('opt_b1',-2*self.R_bend - self.L_arm/2-1,dY_BS/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS_R = self.BS.put('a2', 2*self.R_bend + self.L_arm/2+1,dY_BS/2,0,flip=1)
+ BS_R = self.BS.put('opt_a2', 2*self.R_bend + self.L_arm/2+1,dY_BS/2,0,flip=1)
if (self.bend_heaters):
wg_ht = W_waveguide(L_wg=self.L_arm,w_wg=self.w_wg,xs_wg=self.xs_wg,dL=self.dL_ht,R_bend=self.R_bend,
@@ -361,35 +377,75 @@ class UMat_2x2_S:
xs_heater=self.xs_heater,xs_metal=self.xs_metal).cell
if (self.ht_same_side):
- wg_U = wg_oht.put('a1',-self.L_arm/2,self.D_arm/2,0)
- wg_D = wg_ht.put('a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_U = wg_oht.put('a1',-self.L_arm/2,self.D_arm/2,0)
+ wg_U = wg_oht.put('opt_a1',-self.L_arm/2,self.D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_D = wg_ht.put('a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
+ wg_D = wg_ht.put('opt_a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
else:
- wg_U = wg_ht.put('a1',-self.L_arm/2,self.D_arm/2,0)
- wg_D = wg_oht.put('a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_U = wg_ht.put('a1',-self.L_arm/2,self.D_arm/2,0)
+ wg_U = wg_ht.put('opt_a1',-self.L_arm/2,self.D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_D = wg_oht.put('a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
+ wg_D = wg_oht.put('opt_a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
- pic_strip.sbend_p2p(pin1=BS_L.pin['b1'],pin2=wg_U.pin['a1']).put()
- pic_strip.sbend_p2p(pin1=BS_L.pin['b2'],pin2=wg_D.pin['a1']).put()
- pic_strip.sbend_p2p(pin1=BS_R.pin['a2'],pin2=wg_U.pin['b1']).put()
- pic_strip.sbend_p2p(pin1=BS_R.pin['a1'],pin2=wg_D.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_L.pin['b1'],pin2=wg_U.pin['a1']).put()
+ pic_strip.sbend_p2p(pin1=BS_L.pin['opt_b1'],pin2=wg_U.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_L.pin['b2'],pin2=wg_D.pin['a1']).put()
+ pic_strip.sbend_p2p(pin1=BS_L.pin['opt_b2'],pin2=wg_D.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_R.pin['a2'],pin2=wg_U.pin['b1']).put()
+ pic_strip.sbend_p2p(pin1=BS_R.pin['opt_a2'],pin2=wg_U.pin['opt_b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_R.pin['a1'],pin2=wg_D.pin['b1']).put()
+ pic_strip.sbend_p2p(pin1=BS_R.pin['opt_a1'],pin2=wg_D.pin['opt_b1']).put()
- ps_U = wg_oht.put('b1',BS_L.pin['a1'].x-self.R_bend*2-1,self.D_arm/2,180,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ps_U = wg_oht.put('b1',BS_L.pin['a1'].x-self.R_bend*2-1,self.D_arm/2,180,flip=1)
+ ps_U = wg_oht.put('opt_b1',BS_L.pin['opt_a1'].x-self.R_bend*2-1,self.D_arm/2,180,flip=1)
- ps_D = wg_ht.put('b1',BS_L.pin['a1'].x-self.R_bend*2-1,-self.D_arm/2,180,flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ps_D = wg_ht.put('b1',BS_L.pin['a1'].x-self.R_bend*2-1,-self.D_arm/2,180,flip=0)
+ ps_D = wg_ht.put('opt_b1',BS_L.pin['opt_a1'].x-self.R_bend*2-1,-self.D_arm/2,180,flip=0)
- pic_strip.sbend_p2p(pin1=ps_U.pin['b1'],pin2=BS_L.pin['a1']).put()
- pic_strip.sbend_p2p(pin1=ps_D.pin['b1'],pin2=BS_L.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=ps_U.pin['b1'],pin2=BS_L.pin['a1']).put()
+ pic_strip.sbend_p2p(pin1=ps_U.pin['opt_b1'],pin2=BS_L.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=ps_D.pin['b1'],pin2=BS_L.pin['a2']).put()
+ pic_strip.sbend_p2p(pin1=ps_D.pin['opt_b1'],pin2=BS_L.pin['opt_a2']).put()
- patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b2'].x+self.R_bend*2+1, self.D_arm/2,0)
- patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b1'].x+self.R_bend*2+1,-self.D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b2'].x+self.R_bend*2+1, self.D_arm/2,0)
+ patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['opt_b2'].x+self.R_bend*2+1, self.D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b1'].x+self.R_bend*2+1,-self.D_arm/2,0)
+ patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['opt_b1'].x+self.R_bend*2+1,-self.D_arm/2,0)
- pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_R.pin['b2']).put()
- pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_R.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_R.pin['b2']).put()
+ pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_R.pin['opt_b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_R.pin['b1']).put()
+ pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_R.pin['opt_b1']).put()
- nd.Pin(name='a1',pin=ps_U.pin['a1'].move(-0.05,0,0),width=self.w_wg).put()
- nd.Pin(name='a2',pin=ps_D.pin['a1'].move(-0.05,0,0),width=self.w_wg).put()
- nd.Pin(name='b1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
- nd.Pin(name='b2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=ps_U.pin['a1'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_a1',pin=ps_U.pin['opt_a1'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=ps_D.pin['a1'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_a2',pin=ps_D.pin['opt_a1'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_b1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_b2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
nd.Pin(name='ep1',pin=ps_D.pin['ep1']).put()
nd.Pin(name='en1',pin=ps_D.pin['en1']).put()
@@ -401,8 +457,12 @@ class UMat_2x2_S:
nd.Pin(name='ep2',pin=wg_U.pin['ep1']).put()
nd.Pin(name='en2',pin=wg_U.pin['en1']).put()
- dX_unit = abs(ps_U.pin['a1'].x - patch_U.pin['b0'].x)
- dY_unit = abs(ps_U.pin['a1'].y - ps_D.pin['a1'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dX_unit = abs(ps_U.pin['a1'].x - patch_U.pin['b0'].x)
+ dX_unit = abs(ps_U.pin['opt_a1'].x - patch_U.pin['b0'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_unit = abs(ps_U.pin['a1'].y - ps_D.pin['a1'].y)
+ dY_unit = abs(ps_U.pin['opt_a1'].y - ps_D.pin['opt_a1'].y)
return MZI_Unit
@@ -569,8 +629,12 @@ class MZI_mesh_U:
strip.bend_route(radius=R_compensate,angle=90).put()
strip_output = strip.strt(length=0.2).put()
- nd.Pin(name='a1',width=self.w_wg).put(strip_input.pin['a0'])
- nd.Pin(name='b1',width=self.w_wg).put(strip_output.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_wg).put(strip_input.pin['a0'])
+ nd.Pin(name='opt_a1',width=self.w_wg,type="optical:").put(strip_input.pin['a0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_wg).put(strip_output.pin['b0'])
+ nd.Pin(name='opt_b1',width=self.w_wg,type="optical:").put(strip_output.pin['b0'])
nd.Pin(name='a0',width=self.w_wg).put(strip_input.pin['a0'])
nd.Pin(name='b0',width=self.w_wg).put(strip_output.pin['b0'])
return ICell
@@ -583,8 +647,12 @@ class MZI_mesh_U:
rows = self.n_ports-1
pic_strip = Route(radius=self.R_bend,width=self.w_wg,xs='strip')
- dX_unit = abs(self.MZI_unit.pin['a1'].x-self.MZI_unit.pin['b1'].x)
- dY_unit = abs(self.MZI_unit.pin['a1'].y-self.MZI_unit.pin['a2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dX_unit = abs(self.MZI_unit.pin['a1'].x-self.MZI_unit.pin['b1'].x)
+ dX_unit = abs(self.MZI_unit.pin['opt_a1'].x-self.MZI_unit.pin['opt_b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_unit = abs(self.MZI_unit.pin['a1'].y-self.MZI_unit.pin['a2'].y)
+ dY_unit = abs(self.MZI_unit.pin['opt_a1'].y-self.MZI_unit.pin['opt_a2'].y)
x_spacing = dX_unit ## incase of overlapping
y_spacing = dY_unit ## incase of overlapping
x_list = []
@@ -622,10 +690,16 @@ class MZI_mesh_U:
if (c_idx>=1 and r_idx==1): ### This will not happen in Triangle cases
# pic_strip.sbend_p2p(pin1=pin_up_pre,pin2=INSTR.pin['a1']).put()
pic_strip.strt(pin=pin_up_pre,length=self.L_arm).put()
- bend_compensate = self.cell_compensate.put('a1',nd.Pin().put(),flip=True)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: bend_compensate = self.cell_compensate.put('a1',nd.Pin().put(),flip=True)
+ bend_compensate = self.cell_compensate.put('opt_a1',nd.Pin().put(),flip=True)
pic_strip.sbend_p2p(
- pin1=bend_compensate.pin['b1'],
- pin2=INSTR.pin['a1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=bend_compensate.pin['b1'],
+ pin1=bend_compensate.pin['opt_b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=INSTR.pin['a1']
+ pin2=INSTR.pin['opt_a1']
).put()
# self.cell_offset.put(flip=1)
# self.cell_offset.put(flip=0)
@@ -636,10 +710,16 @@ class MZI_mesh_U:
if (c_idx>=1 and r_idx==rows):
if self.mesh_type=='parallelogram':
pic_strip.strt(pin=pin_down_pre,length=self.L_arm).put()
- bend_compensate = self.cell_compensate.put('a1',nd.Pin().put())
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: bend_compensate = self.cell_compensate.put('a1',nd.Pin().put())
+ bend_compensate = self.cell_compensate.put('opt_a1',nd.Pin().put())
pic_strip.sbend_p2p(
- pin1=bend_compensate.pin['b1'],
- pin2=INSTR.pin['a2']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=bend_compensate.pin['b1'],
+ pin1=bend_compensate.pin['opt_b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=INSTR.pin['a2']
+ pin2=INSTR.pin['opt_a2']
).put()
# self.cell_offset.put(flip=1)
# self.cell_offset.put(flip=0)
@@ -649,77 +729,151 @@ class MZI_mesh_U:
# pic_strip.sbend_p2p(pin2=pin_down_pre).put()
elif self.mesh_type=='triangle':
pic_strip.strt(pin=pin_down_pre,length=self.L_arm).put()
- bend_compensate = self.cell_compensate.put('a1',nd.Pin().put())
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: bend_compensate = self.cell_compensate.put('a1',nd.Pin().put())
+ bend_compensate = self.cell_compensate.put('opt_a1',nd.Pin().put())
pic_strip.sbend_p2p(
- pin1=bend_compensate.pin['b1'],
- pin2=INSTR.pin['a2']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=bend_compensate.pin['b1'],
+ pin1=bend_compensate.pin['opt_b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=INSTR.pin['a2']
+ pin2=INSTR.pin['opt_a2']
).put()
# pic_strip.sbend_p2p(pin1=pin_down_pre,pin2=INSTR.pin['a2']).put()
- pin_down_pre = INSTR.pin['b2']
- pin_up_pre = INSTR.pin['b1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_down_pre = INSTR.pin['b2']
+ pin_down_pre = INSTR.pin['opt_b2']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_up_pre = INSTR.pin['b1']
+ pin_up_pre = INSTR.pin['opt_b1']
""" recongizing pins """
if (self.mesh_type=='triangle'):
if (c_idx==0):
- pin_a_list.append(INSTR.pin['a1'])
- x_list.append(INSTR.pin['a1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a1'])
+ pin_a_list.append(INSTR.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a1'].x)
+ x_list.append(INSTR.pin['opt_a1'].x)
if (c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b1'])
- x_list.append(INSTR.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b1'])
+ pin_b_list.append(INSTR.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b1'].x)
+ x_list.append(INSTR.pin['opt_b1'].x)
if (r_idx==rows):
if (c_idx==0):
- pin_a_list.append(INSTR.pin['a2'])
- x_list.append(INSTR.pin['a2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a2'])
+ pin_a_list.append(INSTR.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a2'].x)
+ x_list.append(INSTR.pin['opt_a2'].x)
elif (c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b2'])
- x_list.append(INSTR.pin['b2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b2'])
+ pin_b_list.append(INSTR.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b2'].x)
+ x_list.append(INSTR.pin['opt_b2'].x)
else :
if (np.mod(self.n_ports,2)==1):
if (np.mod(r_idx,2)==1):
if (c_idx==0):
- pin_a_list.append(INSTR.pin['a1'])
- x_list.append(INSTR.pin['a1'].x)
- pin_a_list.append(INSTR.pin['a2'])
- x_list.append(INSTR.pin['a2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a1'])
+ pin_a_list.append(INSTR.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a1'].x)
+ x_list.append(INSTR.pin['opt_a1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a2'])
+ pin_a_list.append(INSTR.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a2'].x)
+ x_list.append(INSTR.pin['opt_a2'].x)
if (c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b1'])
- x_list.append(INSTR.pin['b1'].x)
- pin_b_list.append(INSTR.pin['b2'])
- x_list.append(INSTR.pin['b2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b1'])
+ pin_b_list.append(INSTR.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b1'].x)
+ x_list.append(INSTR.pin['opt_b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b2'])
+ pin_b_list.append(INSTR.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b2'].x)
+ x_list.append(INSTR.pin['opt_b2'].x)
elif (r_idx==rows):
if (c_idx==0):
- pin_a_list.append(INSTR.pin['a2'])
- x_list.append(INSTR.pin['a2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a2'])
+ pin_a_list.append(INSTR.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a2'].x)
+ x_list.append(INSTR.pin['opt_a2'].x)
elif (c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b2'])
- x_list.append(INSTR.pin['b2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b2'])
+ pin_b_list.append(INSTR.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b2'].x)
+ x_list.append(INSTR.pin['opt_b2'].x)
else :
if (np.mod(r_idx,2)==0 and c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b1'])
- x_list.append(INSTR.pin['b1'].x)
- pin_b_list.append(INSTR.pin['b2'])
- x_list.append(INSTR.pin['b2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b1'])
+ pin_b_list.append(INSTR.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b1'].x)
+ x_list.append(INSTR.pin['opt_b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b2'])
+ pin_b_list.append(INSTR.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b2'].x)
+ x_list.append(INSTR.pin['opt_b2'].x)
if (np.mod(r_idx,2)==1 and c_idx==0):
- pin_a_list.append(INSTR.pin['a1'])
- x_list.append(INSTR.pin['a1'].x)
- pin_a_list.append(INSTR.pin['a2'])
- x_list.append(INSTR.pin['a2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a1'])
+ pin_a_list.append(INSTR.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a1'].x)
+ x_list.append(INSTR.pin['opt_a1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a_list.append(INSTR.pin['a2'])
+ pin_a_list.append(INSTR.pin['opt_a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['a2'].x)
+ x_list.append(INSTR.pin['opt_a2'].x)
if (r_idx==rows and c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b2'])
- x_list.append(INSTR.pin['b2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b2'])
+ pin_b_list.append(INSTR.pin['opt_b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b2'].x)
+ x_list.append(INSTR.pin['opt_b2'].x)
if (r_idx==1 and c_idx==cols-1):
- pin_b_list.append(INSTR.pin['b1'])
- x_list.append(INSTR.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b_list.append(INSTR.pin['b1'])
+ pin_b_list.append(INSTR.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_list.append(INSTR.pin['b1'].x)
+ x_list.append(INSTR.pin['opt_b1'].x)
xmax = np.max(x_list)
xmin = np.min(x_list)
@@ -735,10 +889,14 @@ class MZI_mesh_U:
for _num_ in range(num_compensate_cell) :
self.cell_compensate.put()
nd.strt(
- length=abs(self.MZI_unit.pin['a1'].x-self.MZI_unit.pin['b1'].x)-abs(self.cell_compensate.pin['a1'].x-self.cell_compensate.pin['b1'].x),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: length=abs(self.MZI_unit.pin['a1'].x-self.MZI_unit.pin['b1'].x)-abs(self.cell_compensate.pin['a1'].x-self.cell_compensate.pin['b1'].x),
+ length=abs(self.MZI_unit.pin['opt_a1'].x-self.MZI_unit.pin['opt_b1'].x)-abs(self.cell_compensate.pin['opt_a1'].x-self.cell_compensate.pin['opt_b1'].x),
width=self.w_wg, xs=self.xs_wg
).put()
- nd.Pin(name='a'+str(itn+1),pin=nd.Pin().put(),width=0.45).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a'+str(itn+1),pin=nd.Pin().put(),width=0.45).put()
+ nd.Pin(name='opt_a'+str(itn+1),pin=nd.Pin().put(),width=0.45,type="optical:").put()
nd.strt(length=0.2,width=self.w_wg,xs=self.xs_wg).put(pin_b_list[itn])
num_compensate_cell = len(pin_a_list)-2-itn
@@ -746,10 +904,14 @@ class MZI_mesh_U:
for _num_ in range(num_compensate_cell) :
self.cell_compensate.put(flip=True)
nd.strt(
- length=abs(self.MZI_unit.pin['a1'].x-self.MZI_unit.pin['b1'].x)-abs(self.cell_compensate.pin['a1'].x-self.cell_compensate.pin['b1'].x),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: length=abs(self.MZI_unit.pin['a1'].x-self.MZI_unit.pin['b1'].x)-abs(self.cell_compensate.pin['a1'].x-self.cell_compensate.pin['b1'].x),
+ length=abs(self.MZI_unit.pin['opt_a1'].x-self.MZI_unit.pin['opt_b1'].x)-abs(self.cell_compensate.pin['opt_a1'].x-self.cell_compensate.pin['opt_b1'].x),
width=self.w_wg, xs=self.xs_wg
).put()
- nd.Pin(name='b'+str(itn+1),pin=nd.Pin().put(),width=0.45).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b'+str(itn+1),pin=nd.Pin().put(),width=0.45).put()
+ nd.Pin(name='opt_b'+str(itn+1),pin=nd.Pin().put(),width=0.45,type="optical:").put()
elif self.mesh_type == "parallelogram" :
for itn in range(0,len(pin_a_list)):
@@ -757,17 +919,25 @@ class MZI_mesh_U:
nd.strt(length=self.L_arm,width=self.w_wg,xs=self.xs_wg).put(pin_a_list[itn])
temp = self.cell_compensate.put()
temp = nd.strt(length=abs(xmin-temp.pin['b0'].x),width=self.w_wg,xs=self.xs_wg).put()
- nd.Pin(name='a'+str(itn+1) ,width=0.45, pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a'+str(itn+1) ,width=0.45, pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_a'+str(itn+1) ,width=0.45, pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else :
- nd.Pin(name='a'+str(itn+1) ,width=0.45).put(pin_a_list[itn])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a'+str(itn+1) ,width=0.45).put(pin_a_list[itn])
+ nd.Pin(name='opt_a'+str(itn+1) ,width=0.45,type="optical:").put(pin_a_list[itn])
if np.abs(xmax-pin_b_list[itn].x)>0.001 :
nd.strt(length=self.L_arm,width=self.w_wg,xs=self.xs_wg).put(pin_b_list[itn])
temp = self.cell_compensate.put(flip=(itn==0))
temp = nd.strt(length=abs(xmax-temp.pin['b0'].x)+0.001,width=self.w_wg,xs=self.xs_wg).put()
- nd.Pin(name='b'+str(itn+1) ,width=0.45, pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b'+str(itn+1) ,width=0.45, pin=temp.pin['b0'].move(-0.05,0,0)).put()
+ nd.Pin(name='opt_b'+str(itn+1) ,width=0.45, pin=temp.pin['b0'].move(-0.05,0,0),type="optical:").put()
else :
- nd.Pin(name='b'+str(itn+1) ,width=0.45).put(pin_b_list[itn])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b'+str(itn+1) ,width=0.45).put(pin_b_list[itn])
+ nd.Pin(name='opt_b'+str(itn+1) ,width=0.45,type="optical:").put(pin_b_list[itn])
print("## ===== %s mesh DONE ===== ##" % (self.mesh_type))
@@ -922,18 +1092,28 @@ class AMZI_W:
pic_strip = Route(radius=self.R_bend,width=self.w_wg,xs=self.xs_wg)
- self.dL_BS = np.abs(self.BS.pin['a1'].x - self.BS.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.dL_BS = np.abs(self.BS.pin['a1'].x - self.BS.pin['b1'].x)
+ self.dL_BS = np.abs(self.BS.pin['opt_a1'].x - self.BS.pin['opt_b1'].x)
- dY_BS = abs(self.BS.pin['b1'].y - self.BS.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_BS = abs(self.BS.pin['b1'].y - self.BS.pin['b2'].y)
+ dY_BS = abs(self.BS.pin['opt_b1'].y - self.BS.pin['opt_b2'].y)
- dYarm = self.D_arm/2 - self.BS.pin['b1'].y
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dYarm = self.D_arm/2 - self.BS.pin['b1'].y
+ dYarm = self.D_arm/2 - self.BS.pin['opt_b1'].y
dLmin = np.sqrt(abs(self.R_bend**2 - (self.R_bend-dYarm)**2))*2
if (dLmin>2*self.R_bend):
dLmin = 2*self.R_bend
- BS_L = self.BS.put('b1',-dLmin - self.L_arm/2-1,dY_BS/2,180)
- BS_R = self.BS.put('a2', dLmin + self.L_arm/2+1,dY_BS/2,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS_L = self.BS.put('b1',-dLmin - self.L_arm/2-1,dY_BS/2,180)
+ BS_L = self.BS.put('opt_b1',-dLmin - self.L_arm/2-1,dY_BS/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: BS_R = self.BS.put('a2', dLmin + self.L_arm/2+1,dY_BS/2,0,flip=1)
+ BS_R = self.BS.put('opt_a2', dLmin + self.L_arm/2+1,dY_BS/2,0,flip=1)
wg_ht = W_waveguide(L_wg=self.L_arm,w_wg=self.w_wg,xs_wg=self.xs_wg,
dL=self.dL_ht+self.dL_AMZI/2/self.n_bend,R_bend=self.R_bend,
@@ -953,32 +1133,68 @@ class AMZI_W:
).cell
- wg_U = wg_ht.put('a1',-self.L_arm/2,self.D_arm/2,0)
- wg_D = wg_oht.put('a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_U = wg_ht.put('a1',-self.L_arm/2,self.D_arm/2,0)
+ wg_U = wg_ht.put('opt_a1',-self.L_arm/2,self.D_arm/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_D = wg_oht.put('a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
+ wg_D = wg_oht.put('opt_a1',-self.L_arm/2,-self.D_arm/2,0,flip=1)
- pic_strip.sbend_p2p(pin1=BS_L.pin['b1'],pin2=wg_U.pin['a1']).put()
- pic_strip.sbend_p2p(pin1=BS_L.pin['b2'],pin2=wg_D.pin['a1']).put()
- pic_strip.sbend_p2p(pin1=BS_R.pin['a2'],pin2=wg_U.pin['b1']).put()
- pic_strip.sbend_p2p(pin1=BS_R.pin['a1'],pin2=wg_D.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_L.pin['b1'],pin2=wg_U.pin['a1']).put()
+ pic_strip.sbend_p2p(pin1=BS_L.pin['opt_b1'],pin2=wg_U.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_L.pin['b2'],pin2=wg_D.pin['a1']).put()
+ pic_strip.sbend_p2p(pin1=BS_L.pin['opt_b2'],pin2=wg_D.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_R.pin['a2'],pin2=wg_U.pin['b1']).put()
+ pic_strip.sbend_p2p(pin1=BS_R.pin['opt_a2'],pin2=wg_U.pin['opt_b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=BS_R.pin['a1'],pin2=wg_D.pin['b1']).put()
+ pic_strip.sbend_p2p(pin1=BS_R.pin['opt_a1'],pin2=wg_D.pin['opt_b1']).put()
- patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_L.pin['a2'].x-self.R_bend*2-1, self.D_port/2,180)
- patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_L.pin['a1'].x-self.R_bend*2-1,-self.D_port/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_L.pin['a2'].x-self.R_bend*2-1, self.D_port/2,180)
+ patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_L.pin['opt_a2'].x-self.R_bend*2-1, self.D_port/2,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_L.pin['a1'].x-self.R_bend*2-1,-self.D_port/2,180)
+ patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_L.pin['opt_a1'].x-self.R_bend*2-1,-self.D_port/2,180)
- pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_L.pin['a1']).put()
- pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_L.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_L.pin['a1']).put()
+ pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_L.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_L.pin['a2']).put()
+ pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_L.pin['opt_a2']).put()
- nd.Pin(name='a1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
- nd.Pin(name='a2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_a1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_a2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
- patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b2'].x+self.R_bend*2+1, self.D_port/2,0)
- patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b1'].x+self.R_bend*2+1,-self.D_port/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b2'].x+self.R_bend*2+1, self.D_port/2,0)
+ patch_U = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['opt_b2'].x+self.R_bend*2+1, self.D_port/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['b1'].x+self.R_bend*2+1,-self.D_port/2,0)
+ patch_D = nd.strt(length=0.5,width=self.w_wg,xs=self.xs_wg).put('a0',BS_R.pin['opt_b1'].x+self.R_bend*2+1,-self.D_port/2,0)
- pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_R.pin['b2']).put()
- pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_R.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_R.pin['b2']).put()
+ pic_strip.sbend_p2p(pin1=patch_U.pin['a0'],pin2=BS_R.pin['opt_b2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_R.pin['b1']).put()
+ pic_strip.sbend_p2p(pin1=patch_D.pin['a0'],pin2=BS_R.pin['opt_b1']).put()
- nd.Pin(name='b1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
- nd.Pin(name='b2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_b1',pin=patch_U.pin['b0'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg).put()
+ nd.Pin(name='opt_b2',pin=patch_D.pin['b0'].move(-0.05,0,0),width=self.w_wg,type="optical:").put()
if (self.w_ht>0):
nd.Pin(name='ep1',pin=wg_U.pin['ep1']).put()
@@ -1003,23 +1219,37 @@ class AMZI_W:
GC3Instr = gc_cell.put('g1',0,-dYgc2gc,180)
GC4Instr = gc_cell.put('g1',dXgc2gc,-dYgc2gc,0)
- dYcell = abs(self.cell.pin['a1'].y - self.cell.pin['a2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dYcell = abs(self.cell.pin['a1'].y - self.cell.pin['a2'].y)
+ dYcell = abs(self.cell.pin['opt_a1'].y - self.cell.pin['opt_a2'].y)
dYoffset = (dYcell - dYgc2gc)/2
- dXcell = abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dXcell = abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ dXcell = abs(self.cell.pin['opt_a1'].x - self.cell.pin['opt_b1'].x)
dXoffset = -(dXcell - dXgc2gc)/2
- cellInstr = self.cell.put('a1',dXoffset,dYoffset,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cellInstr = self.cell.put('a1',dXoffset,dYoffset,0)
+ cellInstr = self.cell.put('opt_a1',dXoffset,dYoffset,0)
pic = Route(xs=self.xs_wg,width=w_wg,radius=R_bend)
- pic.sbend_p2p(pin1=cellInstr.pin['a1'],pin2=GC1Instr.pin['g1']).put()
- pic.sbend_p2p(pin1=cellInstr.pin['b1'],pin2=GC2Instr.pin['g1']).put()
- pic.sbend_p2p(pin1=cellInstr.pin['a2'],pin2=GC3Instr.pin['g1']).put()
- pic.sbend_p2p(pin1=cellInstr.pin['b2'],pin2=GC4Instr.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['a1'],pin2=GC1Instr.pin['g1']).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_a1'],pin2=GC1Instr.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['b1'],pin2=GC2Instr.pin['g1']).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_b1'],pin2=GC2Instr.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['a2'],pin2=GC3Instr.pin['g1']).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_a2'],pin2=GC3Instr.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic.sbend_p2p(pin1=cellInstr.pin['b2'],pin2=GC4Instr.pin['g1']).put()
+ pic.sbend_p2p(pin1=cellInstr.pin['opt_b2'],pin2=GC4Instr.pin['g1']).put()
diff --git a/mxpic/components/composites/SptTree.py b/mxpic/components/composites/SptTree.py
index 74302c8..c0df3a5 100644
--- a/mxpic/components/composites/SptTree.py
+++ b/mxpic/components/composites/SptTree.py
@@ -44,9 +44,13 @@ class SplittingTree():
# self.yb_length = ybranch.length
- self.yb_length = np.abs(self.yb_cell.pin['a1'].x - self.yb_cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.yb_length = np.abs(self.yb_cell.pin['a1'].x - self.yb_cell.pin['b1'].x)
+ self.yb_length = np.abs(self.yb_cell.pin['opt_a1'].x - self.yb_cell.pin['opt_b1'].x)
# self.yb_width = ybranch.width
- self.yb_width = np.abs(self.yb_cell.pin['b1'].y - self.yb_cell.pin['b2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.yb_width = np.abs(self.yb_cell.pin['b1'].y - self.yb_cell.pin['b2'].y)
+ self.yb_width = np.abs(self.yb_cell.pin['opt_b1'].y - self.yb_cell.pin['opt_b2'].y)
self.w_wg = ybranch.w_wg
self.output_number = output_number
@@ -85,29 +89,49 @@ class SplittingTree():
for yb_index in range(np.power(2, level_index)):
y_cur = y_pitch * ((np.power(2, level_index)-1)/2 - yb_index)
# Put the Y-branch
- cell_dic[str(level_index)+str(yb_index)] = self.yb_cell.put('a1', x_cur, y_cur)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dic[str(level_index)+str(yb_index)] = self.yb_cell.put('a1', x_cur, y_cur)
+ cell_dic[str(level_index)+str(yb_index)] = self.yb_cell.put('opt_a1', x_cur, y_cur)
# Do the routing
stripe_class.sbend_p2p(
- pin1=cell_dic[str(level_index-1)+str(yb_index//2)].pin['b'+str(yb_index%2+1)],
- pin2=cell_dic[str(level_index)+str(yb_index)].pin['a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=cell_dic[str(level_index-1)+str(yb_index//2)].pin['b'+str(yb_index%2+1)],
+ pin1=cell_dic[str(level_index-1)+str(yb_index//2)].pin['opt_b'+str(yb_index%2+1)],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=cell_dic[str(level_index)+str(yb_index)].pin['a1'],
+ pin2=cell_dic[str(level_index)+str(yb_index)].pin['opt_a1'],
Lstart=1,
arrow=False
).put()
## Put pins
nd.Pin(name="a0").put(0, 0, 180)
- nd.Pin(name="a1",width=self.w_wg).put(0, 0, 180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1",width=self.w_wg).put(0, 0, 180)
+ nd.Pin(name="opt_a1",width=self.w_wg,type="optical:").put(0, 0, 180)
level_index = int(self.level_number-1)
for yb_index in range(np.power(2, level_index)):
nd.Pin(
- name="b"+str(2*yb_index+1),
- width=self.w_wg
- ).put(cell_dic[str(level_index)+str(yb_index)].pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: name="b"+str(2*yb_index+1),
+ name="opt_b"+str(2*yb_index+1),
+ width=self.w_wg,
+ type="optical:"
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ).put(cell_dic[str(level_index)+str(yb_index)].pin['b1'])
+ ).put(cell_dic[str(level_index)+str(yb_index)].pin['opt_b1'])
nd.Pin(
- name="b"+str(2*yb_index+2),
- width=self.w_wg
- ).put(cell_dic[str(level_index)+str(yb_index)].pin['b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: name="b"+str(2*yb_index+2),
+ name="opt_b"+str(2*yb_index+2),
+ width=self.w_wg,
+ type="optical:"
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ).put(cell_dic[str(level_index)+str(yb_index)].pin['b2'])
+ ).put(cell_dic[str(level_index)+str(yb_index)].pin['opt_b2'])
nd.Pin(name="b0").put(
- cell_dic[str(level_index)+str(yb_index)].pin['b2'].x,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dic[str(level_index)+str(yb_index)].pin['b2'].x,
+ cell_dic[str(level_index)+str(yb_index)].pin['opt_b2'].x,
0,
0
)
@@ -130,7 +154,13 @@ class SplittingTree():
nd.strt(length=0.2, width=self.w_wg, layer=(1001, 2)).put(self.yb_length, -self.yb_width/2, 180)
## Put pins
nd.Pin(name="a0", width=self.w_wg).put(0, 0, 180)
- nd.Pin(name="a1", width=self.w_wg).put(0, 0, 180)
- nd.Pin(name="b1", width=self.w_wg).put(self.yb_length, self.yb_width/2, 0)
- nd.Pin(name="b2", width=self.w_wg).put(self.yb_length, -self.yb_width/2, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1", width=self.w_wg).put(0, 0, 180)
+ nd.Pin(name="opt_a1", width=self.w_wg,type="optical:").put(0, 0, 180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1", width=self.w_wg).put(self.yb_length, self.yb_width/2, 0)
+ nd.Pin(name="opt_b1", width=self.w_wg,type="optical:").put(self.yb_length, self.yb_width/2, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b2", width=self.w_wg).put(self.yb_length, -self.yb_width/2, 0)
+ nd.Pin(name="opt_b2", width=self.w_wg,type="optical:").put(self.yb_length, -self.yb_width/2, 0)
self.yb_cell = C
diff --git a/mxpic/components/electronics/eic_units.py b/mxpic/components/electronics/eic_units.py
index 0815520..5f703d2 100644
--- a/mxpic/components/electronics/eic_units.py
+++ b/mxpic/components/electronics/eic_units.py
@@ -44,8 +44,16 @@ class ISL:
else :
nd.strt(length=length*(a1-a2)+(b1-b2),width=width*(a1-a2)+(b1-b2),layer=layers).put(-(b1-b2)/2,0,0)
- nd.Pin(name='a1').put(0,0,180)
- nd.Pin(name='b1').put(length,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1').put(0,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='opt_a1').put(0,0,180)
+ nd.Pin(name='ele_a1',type="electrical:").put(0,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1').put(length,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='opt_b1').put(length,0,0)
+ nd.Pin(name='ele_b1',type="electrical:").put(length,0,0)
self.cell = C
""" Internal Logic revised """
@@ -256,8 +264,16 @@ class Vias:
nd.Pin('a0',io=0,width=self.area[0]).put(0,0,0)
nd.Pin('b0',io=1,width=self.area[1]).put(-0,0,180)
- nd.Pin('a1',io=0,width=self.area[0]).put(self.area[0]/2,0,0)
- nd.Pin('b1',io=1,width=self.area[1]).put(-self.area[0]/2,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin('a1',io=0,width=self.area[0]).put(self.area[0]/2,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin('opt_a1',io=0,width=self.area[0]).put(self.area[0]/2,0,0)
+ nd.Pin('ele_a1',io=0,width=self.area[0],type="electrical:").put(self.area[0]/2,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin('b1',io=1,width=self.area[1]).put(-self.area[0]/2,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin('opt_b1',io=1,width=self.area[1]).put(-self.area[0]/2,0,180)
+ nd.Pin('ele_b1',io=1,width=self.area[1],type="electrical:").put(-self.area[0]/2,0,180)
if (self.show_pins):
nd.put_stub()
@@ -431,8 +447,16 @@ class Vias_arc:
circle(radius=R_cur,width=w_via,theta_start=A_start/pi*180,theta_stop=A_stop/pi*180,xs=xs,res=res,
).cell.put(0,0,0)
- nd.Pin(name='b1').put(R*np.cos(theta_stop/180*pi),R*np.sin(theta_stop/180*pi),90+theta_stop)
- nd.Pin(name='a1').put(R*np.cos(theta_start/180*pi),R*np.sin(theta_start/180*pi),-90+theta_start)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1').put(R*np.cos(theta_stop/180*pi),R*np.sin(theta_stop/180*pi),90+theta_stop)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='opt_b1').put(R*np.cos(theta_stop/180*pi),R*np.sin(theta_stop/180*pi),90+theta_stop)
+ nd.Pin(name='ele_b1',type="electrical:").put(R*np.cos(theta_stop/180*pi),R*np.sin(theta_stop/180*pi),90+theta_stop)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1').put(R*np.cos(theta_start/180*pi),R*np.sin(theta_start/180*pi),-90+theta_start)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='opt_a1').put(R*np.cos(theta_start/180*pi),R*np.sin(theta_start/180*pi),-90+theta_start)
+ nd.Pin(name='ele_a1',type="electrical:").put(R*np.cos(theta_start/180*pi),R*np.sin(theta_start/180*pi),-90+theta_start)
A_mid = (theta_start+theta_stop)/2
nd.Pin(name='c1').put(R*np.cos(A_mid/180*pi),R*np.sin(A_mid/180*pi),A_mid)
diff --git a/mxpic/components/geometry/curves.py b/mxpic/components/geometry/curves.py
index 2835f5d..896c707 100644
--- a/mxpic/components/geometry/curves.py
+++ b/mxpic/components/geometry/curves.py
@@ -155,8 +155,12 @@ class Conchoid:
_my_polygon(layer_wg=layers,vtx=vtx).put(0,0,0)
Rmax = T*kR+R0
- nd.Pin(name="a1").put(R0,0,-90)
- nd.Pin(name="b1").put(Rmax*np.cos(T),Rmax*np.sin(T),(T/np.pi*180+90))
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1").put(R0,0,-90)
+ nd.Pin(name="opt_a1",type="optical:").put(R0,0,-90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1").put(Rmax*np.cos(T),Rmax*np.sin(T),(T/np.pi*180+90))
+ nd.Pin(name="opt_b1",type="optical:").put(Rmax*np.cos(T),Rmax*np.sin(T),(T/np.pi*180+90))
self.L = L
self.cell =C
@@ -418,8 +422,12 @@ class Clothoid:
nd.Pin(name='a0',width=self.w[0],type="Optical:").put(self.x[0],self.y[0],self.A[0]+180)
nd.Pin(name='b0',width=self.w[-1],type="Optical:").put(self.x[-1],self.y[-1],self.A[-1])
- nd.Pin(name='a1',width=self.w[0],type="Optical:").put(self.x[0],self.y[0],self.A[0]+180)
- nd.Pin(name='b1',width=self.w[-1],type="Optical:").put(self.x[-1],self.y[-1],self.A[-1])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w[0],type="Optical:").put(self.x[0],self.y[0],self.A[0]+180)
+ nd.Pin(name='opt_a1',width=self.w[0],type="optical:").put(self.x[0],self.y[0],self.A[0]+180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w[-1],type="Optical:").put(self.x[-1],self.y[-1],self.A[-1])
+ nd.Pin(name='opt_b1',width=self.w[-1],type="optical:").put(self.x[-1],self.y[-1],self.A[-1])
elif(self.layer!=None) : ## if definition is in xsections
vtx_wg = _line2wg_(x=self.x,y=self.y,wu=self.w/2,wd= self.w/2,theta=self.theta,n_points=self.n_points)
@@ -429,8 +437,12 @@ class Clothoid:
nd.Pin(name='a0',width=self.w[0],type="Optical:").put(self.x[0],self.y[0],self.A[0]+180)
nd.Pin(name='b0',width=self.w[-1],type="Optical:").put(self.x[-1],self.y[-1],self.A[-1])
- nd.Pin(name='a1',width=self.w[0],type="Optical:").put(self.x[0],self.y[0],self.A[0]+180)
- nd.Pin(name='b1',width=self.w[-1],type="Optical:").put(self.x[-1],self.y[-1],self.A[-1])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w[0],type="Optical:").put(self.x[0],self.y[0],self.A[0]+180)
+ nd.Pin(name='opt_a1',width=self.w[0],type="optical:").put(self.x[0],self.y[0],self.A[0]+180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w[-1],type="Optical:").put(self.x[-1],self.y[-1],self.A[-1])
+ nd.Pin(name='opt_b1',width=self.w[-1],type="optical:").put(self.x[-1],self.y[-1],self.A[-1])
else:
raise Exception("ERROR: In , not defined")
diff --git a/mxpic/components/geometry/racetrack.py b/mxpic/components/geometry/racetrack.py
index 8ec26de..bd9d247 100644
--- a/mxpic/components/geometry/racetrack.py
+++ b/mxpic/components/geometry/racetrack.py
@@ -41,8 +41,12 @@ class Racetrack:
self.bend_cell = bend_cell
- self.A_bend = np.abs(bend_cell.pin['a1'].a - bend_cell.pin['b1'].a)
- self.w = [bend_cell.pin['b1'].width,bend_cell.pin['a1'].width]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.A_bend = np.abs(bend_cell.pin['a1'].a - bend_cell.pin['b1'].a)
+ self.A_bend = np.abs(bend_cell.pin['opt_a1'].a - bend_cell.pin['opt_b1'].a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.w = [bend_cell.pin['b1'].width,bend_cell.pin['a1'].width]
+ self.w = [bend_cell.pin['opt_b1'].width,bend_cell.pin['opt_a1'].width]
self.w_crack = 0.002
diff --git a/mxpic/components/geometry/rings.py b/mxpic/components/geometry/rings.py
index a1dcede..2a3e315 100644
--- a/mxpic/components/geometry/rings.py
+++ b/mxpic/components/geometry/rings.py
@@ -88,8 +88,12 @@ class circle :
_my_polygon(layer_wg=layers,vtx=vtx,vtx_not=vtx_cut).put(0,0,0)
- nd.Pin(name='a1',width=width,xs=xs).put(radius*np.cos(theta_start/180*np.pi),radius*np.sin(theta_start/180*np.pi),theta_start-90)
- nd.Pin(name='b1',width=width,xs=xs).put(radius*np.cos(theta_stop/180*np.pi),radius*np.sin(theta_stop/180*np.pi),theta_stop+90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=width,xs=xs).put(radius*np.cos(theta_start/180*np.pi),radius*np.sin(theta_start/180*np.pi),theta_start-90)
+ nd.Pin(name='opt_a1',width=width,xs=xs,type="optical:").put(radius*np.cos(theta_start/180*np.pi),radius*np.sin(theta_start/180*np.pi),theta_start-90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=width,xs=xs).put(radius*np.cos(theta_stop/180*np.pi),radius*np.sin(theta_stop/180*np.pi),theta_stop+90)
+ nd.Pin(name='opt_b1',width=width,xs=xs,type="optical:").put(radius*np.cos(theta_stop/180*np.pi),radius*np.sin(theta_stop/180*np.pi),theta_stop+90)
else:
theta = np.linspace(theta_start,theta_stop,n_points)
@@ -128,8 +132,12 @@ class circle :
""" """
_my_polygon(layer_wg=layer,vtx=vtx,vtx_not=vtx_cut).put(0,0,0)
- nd.Pin(name='a1',width=width,layer=layer).put(radius*np.cos(theta_start/180*np.pi),radius*np.sin(theta_start/180*np.pi),theta_start-90)
- nd.Pin(name='b1',width=width,layer=layer).put(radius*np.cos(theta_stop/180*np.pi),radius*np.sin(theta_stop/180*np.pi),theta_stop+90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=width,layer=layer).put(radius*np.cos(theta_start/180*np.pi),radius*np.sin(theta_start/180*np.pi),theta_start-90)
+ nd.Pin(name='opt_a1',width=width,layer=layer,type="optical:").put(radius*np.cos(theta_start/180*np.pi),radius*np.sin(theta_start/180*np.pi),theta_start-90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=width,layer=layer).put(radius*np.cos(theta_stop/180*np.pi),radius*np.sin(theta_stop/180*np.pi),theta_stop+90)
+ nd.Pin(name='opt_b1',width=width,layer=layer,type="optical:").put(radius*np.cos(theta_stop/180*np.pi),radius*np.sin(theta_stop/180*np.pi),theta_stop+90)
self.vtx = vtx
self.sz = [radius*2,radius*2]
@@ -318,8 +326,12 @@ class Elipse_dual :
else:
_my_polygon(layer_wg=layers,vtx=vtx,vtx_not=vtx_cut).put(0,0,0)
- nd.Pin(name='a1').put((Ox[0]+Ix[0])/2,(Oy[0]+Iy[0])/2,theta[0]-90)
- nd.Pin(name='b1').put((Ox[-1]+Ix[-1])/2,(Oy[-1]+Iy[-1])/2,theta[-1]+90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1').put((Ox[0]+Ix[0])/2,(Oy[0]+Iy[0])/2,theta[0]-90)
+ nd.Pin(name='opt_a1',type="optical:").put((Ox[0]+Ix[0])/2,(Oy[0]+Iy[0])/2,theta[0]-90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1').put((Ox[-1]+Ix[-1])/2,(Oy[-1]+Iy[-1])/2,theta[-1]+90)
+ nd.Pin(name='opt_b1',type="optical:").put((Ox[-1]+Ix[-1])/2,(Oy[-1]+Iy[-1])/2,theta[-1]+90)
return C
@@ -418,8 +430,12 @@ class Elipse:
Ain = np.angle(nx[0]+1j*ny[0])/pi*180
Aout = np.angle(nx[-1]+1j*ny[-1])/pi*180
- nd.Pin(name='a1').put(Ox[0]/2+Ix[0]/2,Oy[0]/2+Iy[0]/2,Ain-90)
- nd.Pin(name='b1').put(Ox[-1]/2+Ix[-1]/2,Oy[-1]/2+Iy[-1]/2,Aout+90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1').put(Ox[0]/2+Ix[0]/2,Oy[0]/2+Iy[0]/2,Ain-90)
+ nd.Pin(name='opt_a1',type="optical:").put(Ox[0]/2+Ix[0]/2,Oy[0]/2+Iy[0]/2,Ain-90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1').put(Ox[-1]/2+Ix[-1]/2,Oy[-1]/2+Iy[-1]/2,Aout+90)
+ nd.Pin(name='opt_b1',type="optical:").put(Ox[-1]/2+Ix[-1]/2,Oy[-1]/2+Iy[-1]/2,Aout+90)
nd.Pin(name='a0').put(0,0,180)
nd.Pin(name='b0').put(0,0,0)
diff --git a/mxpic/components/others/simulation/DualPortElements.py b/mxpic/components/others/simulation/DualPortElements.py
index 94f9919..592554e 100644
--- a/mxpic/components/others/simulation/DualPortElements.py
+++ b/mxpic/components/others/simulation/DualPortElements.py
@@ -123,7 +123,9 @@ def DEVICE_2X2_FDTD_INIT(fdtd,run=False,instrcutPATH=None,LibPATH=None):
def tuple_to_complex(t):
return complex(t[0], t[1])
-def SimuDataFigurePlot(simuPath,devName,saveFlag=True,ports=["a1","b1"]):
+## revised in 2026.06.07 by Qin Yue
+# legacy: def SimuDataFigurePlot(simuPath,devName,saveFlag=True,ports=["a1","b1"]):
+def SimuDataFigurePlot(simuPath,devName,saveFlag=True,ports=["opt_a1","opt_b1"]):
if (simuPath.endswith("\\")):
pass
@@ -173,20 +175,30 @@ def SimuDataFigurePlot(simuPath,devName,saveFlag=True,ports=["a1","b1"]):
ax[0,idx].pcolor(np.real(E_mag))
""" Plotting the port transmission """
- if ("b1" in ports and "a1" in ports):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("b1" in ports and "a1" in ports):
+ if ("opt_b1" in ports and "opt_a1" in ports):
dataDict["Ephase_11"] = np.squeeze(data["Ephase_11"][()])
- Trans_11 = dataDict["b1"]["trans"]
- Tmodes = dataDict["b1"]["modes"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Trans_11 = dataDict["b1"]["trans"]
+ Trans_11 = dataDict["opt_b1"]["trans"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Tmodes = dataDict["b1"]["modes"]
+ Tmodes = dataDict["opt_b1"]["modes"]
ax1 = ax[1,0]
ax2 = ax[2,0]
ax1.set_title("a_1 to b_1 trans [Through]")
- ax1.plot(dataDict["a1"]["wl"]*1e+6,Trans_11,linewidth=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ax1.plot(dataDict["a1"]["wl"]*1e+6,Trans_11,linewidth=3)
+ ax1.plot(dataDict["opt_a1"]["wl"]*1e+6,Trans_11,linewidth=3)
""" plotting the eigen mode decomposition """
dataSZ = np.shape(Tmodes)
- plt_wl = dataDict["a1"]["wl"]*1e+6
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: plt_wl = dataDict["a1"]["wl"]*1e+6
+ plt_wl = dataDict["opt_a1"]["wl"]*1e+6
dataPlt = []
@@ -206,20 +218,30 @@ def SimuDataFigurePlot(simuPath,devName,saveFlag=True,ports=["a1","b1"]):
ax2.plot(plt_wl,Trans_dB,label=f"mode_{pltIdx}",linewidth=3)
- if ("b2" in ports and "a1" in ports):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("b2" in ports and "a1" in ports):
+ if ("opt_b2" in ports and "opt_a1" in ports):
dataDict["Ephase_21"] = np.squeeze(data["Ephase_11"][()])
- Trans_21 = dataDict["b2"]["trans"]
- Tmodes = dataDict["b2"]["modes"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Trans_21 = dataDict["b2"]["trans"]
+ Trans_21 = dataDict["opt_b2"]["trans"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Tmodes = dataDict["b2"]["modes"]
+ Tmodes = dataDict["opt_b2"]["modes"]
ax1 = ax[1,1]
ax2 = ax[2,1]
ax1.set_title("a_1 to b_1 trans [Through]")
- ax1.plot(dataDict["a1"]["wl"]*1e+6,Trans_21)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ax1.plot(dataDict["a1"]["wl"]*1e+6,Trans_21)
+ ax1.plot(dataDict["opt_a1"]["wl"]*1e+6,Trans_21)
""" plotting the eigen mode decomposition """
dataSZ = np.shape(Tmodes)
- plt_wl = dataDict["a1"]["wl"]*1e+6
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: plt_wl = dataDict["a1"]["wl"]*1e+6
+ plt_wl = dataDict["opt_a1"]["wl"]*1e+6
dataPlt = []
@@ -238,15 +260,23 @@ def SimuDataFigurePlot(simuPath,devName,saveFlag=True,ports=["a1","b1"]):
Trans_dB = 10*np.log10(_data_)
ax2.plot(plt_wl,Trans_dB,label=f"mode_{pltIdx}",linewidth=3)
- if ("a2" in ports and "a1" in ports):
- Refl_21 = dataDict["a2"]["trans"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("a2" in ports and "a1" in ports):
+ if ("opt_a2" in ports and "opt_a1" in ports):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Refl_21 = dataDict["a2"]["trans"]
+ Refl_21 = dataDict["opt_a2"]["trans"]
# fig,ax = plt.subplots(3,2,6)
ax[1,2].set_title("a_1 to a_2 trans [Replection]")
- ax[1,2].plot(dataDict["a1"]["wl"]*1e+6,Refl_21,linewidth=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ax[1,2].plot(dataDict["a1"]["wl"]*1e+6,Refl_21,linewidth=3)
+ ax[1,2].plot(dataDict["opt_a1"]["wl"]*1e+6,Refl_21,linewidth=3)
ax2 = ax[2,2]
Trans_dB = 10*np.log10(Refl_21)
- ax2.plot(dataDict["a1"]["wl"]*1e+6,Trans_dB,linewidth=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ax2.plot(dataDict["a1"]["wl"]*1e+6,Trans_dB,linewidth=3)
+ ax2.plot(dataDict["opt_a1"]["wl"]*1e+6,Trans_dB,linewidth=3)
if (saveFlag):
""" in CPU mode, there will be no folder """
@@ -268,10 +298,14 @@ class DEVICE_PORTS:
CladMaterial: str = "SiO2 (Glass) - Palik",
modeIdx: list=[1,2,3,4],
sourceMode: int = 1,
- ports_extend: list=["a1"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ports_extend: list=["a1"],
+ ports_extend: list=["opt_a1"],
SimuBox: Any = None,
- port_radius: dict={"a1":0},
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_radius: dict={"a1":0},
+ port_radius: dict={"opt_a1":0},
sample_points: int = 101,
Field_sample: int = 3,
@@ -279,7 +313,9 @@ class DEVICE_PORTS:
LumericalPATH: Any = None,
runFDTD: bool = False,
GPUOn: bool = True,
- port_names: list = ["a1","b1","a2","b2"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_names: list = ["a1","b1","a2","b2"],
+ port_names: list = ["opt_a1","opt_b1","opt_a2","opt_b2"],
) -> None:
@@ -344,18 +380,32 @@ class DEVICE_PORTS:
""" port Z for propagation recording """
ports = jsonFile["ports"]
- dx = abs(ports["a1"]["x"] - ports["b1"]["x"])
- cX = (ports["a1"]["x"] + ports["b1"]["x"])/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dx = abs(ports["a1"]["x"] - ports["b1"]["x"])
+ dx = abs(ports["opt_a1"]["x"] - ports["opt_b1"]["x"])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cX = (ports["a1"]["x"] + ports["b1"]["x"])/2
+ cX = (ports["opt_a1"]["x"] + ports["opt_b1"]["x"])/2
- if ("b2" in jsonFile["ports"]["names"]):
- dy = abs(ports["b1"]["y"] - ports["b2"]["y"])
- cY = (ports["b1"]["y"] + ports["b2"]["y"])/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if ("b2" in jsonFile["ports"]["names"]):
+ if ("opt_b2" in jsonFile["ports"]["names"]):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dy = abs(ports["b1"]["y"] - ports["b2"]["y"])
+ dy = abs(ports["opt_b1"]["y"] - ports["opt_b2"]["y"])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cY = (ports["b1"]["y"] + ports["b2"]["y"])/2
+ cY = (ports["opt_b1"]["y"] + ports["opt_b2"]["y"])/2
elif (SimuBox is not None):
dy = SimuBox["dy"]
- cY = ports["b1"]["y"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cY = ports["b1"]["y"]
+ cY = ports["opt_b1"]["y"]
else:
dy = 0
- cY = ports["b1"]["y"]
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cY = ports["b1"]["y"]
+ cY = ports["opt_b1"]["y"]
FDTD = {}
@@ -526,36 +576,64 @@ class DEVICE_RING_BUS(DEVICE_PORTS):
raise Exception("ERROR :: not recongized")
- dx = abs(cell_dev.pin["a1"].x - cell_dev.pin["b1"].x)+port_width
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dx = abs(cell_dev.pin["a1"].x - cell_dev.pin["b1"].x)+port_width
+ dx = abs(cell_dev.pin["opt_a1"].x - cell_dev.pin["opt_b1"].x)+port_width
if (Aport is None):
- if (cell_dev.pin['b1'].x > r_ring):
- cell_dev.pin['b2'] = nd.Pin(name="b2").put(r_ring,0, 90)
- cell_dev.pin['a2'] = nd.Pin(name="a2").put(-r_ring,0, 90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if (cell_dev.pin['b1'].x > r_ring):
+ if (cell_dev.pin['opt_b1'].x > r_ring):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['b2'] = nd.Pin(name="b2").put(r_ring,0, 90)
+ cell_dev.pin['opt_b2'] = nd.Pin(name="opt_b2",type="optical:").put(r_ring,0, 90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['a2'] = nd.Pin(name="a2").put(-r_ring,0, 90)
+ cell_dev.pin['opt_a2'] = nd.Pin(name="opt_a2",type="optical:").put(-r_ring,0, 90)
else:
- x = cell_dev.pin['b1'].x
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x = cell_dev.pin['b1'].x
+ x = cell_dev.pin['opt_b1'].x
y = -np.sqrt(r_ring**2 - x**2)
a = np.arcsin(x/r_ring)/np.pi*180
- dy_ports = abs(y-cell_dev.pin['b1'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dy_ports = abs(y-cell_dev.pin['b1'].y)
+ dy_ports = abs(y-cell_dev.pin['opt_b1'].y)
if (dy_ports > port_distance):
- y = cell_dev.pin['b1'].y + port_distance
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: y = cell_dev.pin['b1'].y + port_distance
+ y = cell_dev.pin['opt_b1'].y + port_distance
x = np.sqrt(r_ring**2 - (abs(y))**2)
a = np.arcsin(x/r_ring)/np.pi*180
- cell_dev.pin['b2'] = nd.Pin(name="b2").put( x,y, a)
- cell_dev.pin['a2'] = nd.Pin(name="a2").put(-x,y,180-a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['b2'] = nd.Pin(name="b2").put( x,y, a)
+ cell_dev.pin['opt_b2'] = nd.Pin(name="opt_b2",type="optical:").put( x,y, a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['a2'] = nd.Pin(name="a2").put(-x,y,180-a)
+ cell_dev.pin['opt_a2'] = nd.Pin(name="opt_a2",type="optical:").put(-x,y,180-a)
else :
- cell_dev.pin['b2'] = nd.Pin(name="b2").put( x,y, a)
- cell_dev.pin['a2'] = nd.Pin(name="a2").put(-x,y,180-a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['b2'] = nd.Pin(name="b2").put( x,y, a)
+ cell_dev.pin['opt_b2'] = nd.Pin(name="opt_b2",type="optical:").put( x,y, a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['a2'] = nd.Pin(name="a2").put(-x,y,180-a)
+ cell_dev.pin['opt_a2'] = nd.Pin(name="opt_a2",type="optical:").put(-x,y,180-a)
else :
- cell_dev.pin['b2'] = nd.Pin(name="b2").put( r_ring*np.sin(Aport/180*np.pi),-r_ring*np.cos(Aport/180*np.pi), Aport)
- cell_dev.pin['a2'] = nd.Pin(name="a2").put(-r_ring*np.sin(Aport/180*np.pi),-r_ring*np.cos(Aport/180*np.pi), Aport)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['b2'] = nd.Pin(name="b2").put( r_ring*np.sin(Aport/180*np.pi),-r_ring*np.cos(Aport/180*np.pi), Aport)
+ cell_dev.pin['opt_b2'] = nd.Pin(name="opt_b2",type="optical:").put( r_ring*np.sin(Aport/180*np.pi),-r_ring*np.cos(Aport/180*np.pi), Aport)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell_dev.pin['a2'] = nd.Pin(name="a2").put(-r_ring*np.sin(Aport/180*np.pi),-r_ring*np.cos(Aport/180*np.pi), Aport)
+ cell_dev.pin['opt_a2'] = nd.Pin(name="opt_a2",type="optical:").put(-r_ring*np.sin(Aport/180*np.pi),-r_ring*np.cos(Aport/180*np.pi), Aport)
- yMax = cell_dev.pin['b2'].y
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: yMax = cell_dev.pin['b2'].y
+ yMax = cell_dev.pin['opt_b2'].y
yMin = -r_ring - port_width
dy = abs(yMax - yMin)
@@ -570,10 +648,14 @@ class DEVICE_RING_BUS(DEVICE_PORTS):
super().__init__(dev_name=dev_name, device=device, simu_xs=simu_xs, port_width=port_width, path=path, wl=wl,
mesh_order=mesh_order, layer_heights=layer_heights,
FDTD_height=FDTD_height, material=material, CladMaterial=CladMaterial,
- modeIdx=modeIdx, ports_extend=["a1","b1"], SimuBox = {"dx":dx,"dy":dy,"y":cy}, port_radius={"a2":r_ring,"b2":r_ring},
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: modeIdx=modeIdx, ports_extend=["a1","b1"], SimuBox = {"dx":dx,"dy":dy,"y":cy}, port_radius={"a2":r_ring,"b2":r_ring},
+ modeIdx=modeIdx, ports_extend=["opt_a1","opt_b1"], SimuBox = {"dx":dx,"dy":dy,"y":cy}, port_radius={"opt_a2":r_ring,"opt_b2":r_ring},
sample_points=sample_points,FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,
GPUOn=GPUOn,
- port_names = ["a1","b1","a2","b2"],)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_names = ["a1","b1","a2","b2"],)
+ port_names = ["opt_a1","opt_b1","opt_a2","opt_b2"],)
class DEVICE_COUPLER(DEVICE_PORTS):
@@ -590,9 +672,13 @@ class DEVICE_COUPLER(DEVICE_PORTS):
) -> None:
super().__init__(dev_name, device, simu_xs, port_width, path, wl, mesh_order,
- layer_heights, FDTD_height, material, CladMaterial, modeIdx, ports_extend=["a1","a2","b1","b2"],SimuBox=None,port_radius={},
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: layer_heights, FDTD_height, material, CladMaterial, modeIdx, ports_extend=["a1","a2","b1","b2"],SimuBox=None,port_radius={},
+ layer_heights, FDTD_height, material, CladMaterial, modeIdx, ports_extend=["opt_a1","opt_a2","opt_b1","opt_b2"],SimuBox=None,port_radius={},
sample_points=sample_points,FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,GPUOn=GPUOn,
- port_names = ["a1","b1","a2","b2"],sourceMode=sourceMode)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_names = ["a1","b1","a2","b2"],sourceMode=sourceMode)
+ port_names = ["opt_a1","opt_b1","opt_a2","opt_b2"],sourceMode=sourceMode)
class EULER_CROW_INTER_CP(DEVICE_PORTS):
def __init__(self, dev_name: str, device: Any, simu_xs: str="strip",
@@ -612,17 +698,29 @@ class EULER_CROW_INTER_CP(DEVICE_PORTS):
""" The pins reconized in here is ra1,ra2,ra3,ra4 and rb1,rb2,rb3,rb4 """
newDev = device
- newDev.cell.pin['a1'] = device.cell.pin['ra2']
- newDev.cell.pin['a2'] = device.cell.pin['rb2']
- newDev.cell.pin['b1'] = device.cell.pin['ra4']
- newDev.cell.pin['b2'] = device.cell.pin['rb4']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: newDev.cell.pin['a1'] = device.cell.pin['ra2']
+ newDev.cell.pin['opt_a1'] = device.cell.pin['ra2']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: newDev.cell.pin['a2'] = device.cell.pin['rb2']
+ newDev.cell.pin['opt_a2'] = device.cell.pin['rb2']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: newDev.cell.pin['b1'] = device.cell.pin['ra4']
+ newDev.cell.pin['opt_b1'] = device.cell.pin['ra4']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: newDev.cell.pin['b2'] = device.cell.pin['rb4']
+ newDev.cell.pin['opt_b2'] = device.cell.pin['rb4']
- port_radius = {"a1":device.R1, "a2": device.R1, "b1":-device.R1, "b2":-device.R1}
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_radius = {"a1":device.R1, "a2": device.R1, "b1":-device.R1, "b2":-device.R1}
+ port_radius = {"opt_a1":device.R1, "opt_a2": device.R1, "opt_b1":-device.R1, "opt_b2":-device.R1}
super().__init__(dev_name, newDev, simu_xs, port_width, path, wl, mesh_order, layer_heights, FDTD_height, material, CladMaterial, modeIdx,
ports_extend=[],
SimuBox=SimuBox, port_radius=port_radius, sample_points=sample_points,
- FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["a1","b1","a2","b2"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["a1","b1","a2","b2"],
+ FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["opt_a1","opt_b1","opt_a2","opt_b2"],
GPUOn=GPUOn)
class EULER_CROW_BUS(DEVICE_PORTS):
@@ -644,24 +742,38 @@ class EULER_CROW_BUS(DEVICE_PORTS):
newDev = device
# newDev.cell.pin['a1'] = device.cell.pin['ra2']
- newDev.cell.pin['a2'] = device.cell.pin['ra2']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: newDev.cell.pin['a2'] = device.cell.pin['ra2']
+ newDev.cell.pin['opt_a2'] = device.cell.pin['ra2']
# newDev.cell.pin['b1'] = device.cell.pin['ra4']
- newDev.cell.pin['b2'] = device.cell.pin['ra4']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: newDev.cell.pin['b2'] = device.cell.pin['ra4']
+ newDev.cell.pin['opt_b2'] = device.cell.pin['ra4']
- port_radius = {"a2": device.R1, "b2":-device.R1}
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_radius = {"a2": device.R1, "b2":-device.R1}
+ port_radius = {"opt_a2": device.R1, "opt_b2":-device.R1}
if (SimuBox is None):
- yMax = newDev.cell.pin['b2'].y
- yMin = newDev.cell.pin['b1'].y - newDev.ring_cell[0].sz[1]/2 - port_width/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: yMax = newDev.cell.pin['b2'].y
+ yMax = newDev.cell.pin['opt_b2'].y
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: yMin = newDev.cell.pin['b1'].y - newDev.ring_cell[0].sz[1]/2 - port_width/2
+ yMin = newDev.cell.pin['opt_b1'].y - newDev.ring_cell[0].sz[1]/2 - port_width/2
SimuBox = {}
SimuBox["dy"] = yMax - yMin
SimuBox["y"] = (yMax+yMin)/2
super().__init__(dev_name, newDev, simu_xs, port_width, path, wl, mesh_order, layer_heights, FDTD_height, material, CladMaterial, modeIdx,
- ports_extend=["a1","b1"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ports_extend=["a1","b1"],
+ ports_extend=["opt_a1","opt_b1"],
SimuBox=SimuBox, port_radius=port_radius, sample_points=sample_points,
- FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["a1","b1","a2","b2"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["a1","b1","a2","b2"],
+ FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["opt_a1","opt_b1","opt_a2","opt_b2"],
GPUOn=GPUOn)
@@ -672,15 +784,21 @@ class RESONATOR(DEVICE_PORTS):
mesh_order: int=5, layer_heights: list=[0.22],
FDTD_height: int=2, material: str="Si (Silicon) - Palik", CladMaterial: str="SiO2 (Glass) - Palik",
modeIdx: list=[1, 2, 3, 4],
- ports_extend: list=["a1"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ports_extend: list=["a1"],
+ ports_extend: list=["opt_a1"],
sample_points: int=10001,
SimuBox: Any=None,
FDTDBuild: bool = False,
LumericalPATH: Any = None,
runFDTD: bool = False) -> None:
super().__init__(dev_name, device, simu_xs, port_width, path, wl, mesh_order, layer_heights, FDTD_height, material, CladMaterial,
- modeIdx, ports_extend=["a1","a2","b1","b2"], SimuBox=SimuBox, port_radius=[], sample_points=sample_points,
- FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["a1","b1","a2","b2"],)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: modeIdx, ports_extend=["a1","a2","b1","b2"], SimuBox=SimuBox, port_radius=[], sample_points=sample_points,
+ modeIdx, ports_extend=["opt_a1","opt_a2","opt_b1","opt_b2"], SimuBox=SimuBox, port_radius=[], sample_points=sample_points,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["a1","b1","a2","b2"],)
+ FDTDBuild=FDTDBuild,LumericalPATH=LumericalPATH,runFDTD=runFDTD,port_names = ["opt_a1","opt_b1","opt_a2","opt_b2"],)
class RING_PHASE(DEVICE_PORTS):
def __init__(self, dev_name: str, device: Any, simu_xs: str="strip",
@@ -691,7 +809,9 @@ class RING_PHASE(DEVICE_PORTS):
CladMaterial: str="SiO2 (Glass) - Palik",
modeIdx: list=[1, 2, 3, 4],
SimuBox: Any=None,
- port_radius: dict={ "a1": 0 },
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port_radius: dict={ "a1": 0 },
+ port_radius: dict={ "opt_a1": 0 },
sample_points: int=101,
FDTDBuild: bool=False,
LumericalPATH: Any=None,
@@ -707,13 +827,21 @@ class RING_PHASE(DEVICE_PORTS):
elif (isinstance(device,nd.Cell)):
dev_cell = device
- dev_cell.pin['a1'] = dev_cell.pin['r1']
- dev_cell.pin['b1'] = dev_cell.pin['r3']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dev_cell.pin['a1'] = dev_cell.pin['r1']
+ dev_cell.pin['opt_a1'] = dev_cell.pin['r1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dev_cell.pin['b1'] = dev_cell.pin['r3']
+ dev_cell.pin['opt_b1'] = dev_cell.pin['r3']
- dy = abs(dev_cell.pin['a1'].y - dev_cell.pin['b1'].y )
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dy = abs(dev_cell.pin['a1'].y - dev_cell.pin['b1'].y )
+ dy = abs(dev_cell.pin['opt_a1'].y - dev_cell.pin['opt_b1'].y )
- cy = (dev_cell.pin['a1'].y + dev_cell.pin['b1'].y)/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cy = (dev_cell.pin['a1'].y + dev_cell.pin['b1'].y)/2
+ cy = (dev_cell.pin['opt_a1'].y + dev_cell.pin['opt_b1'].y)/2
if (SimuBox is None):
SimuBox = {}
SimuBox["dy"] = dy
@@ -728,7 +856,9 @@ class RING_PHASE(DEVICE_PORTS):
super().__init__(dev_name, dev_cell, simu_xs, port_width, path, wl, mesh_order, layer_heights,
FDTD_height, material, CladMaterial, modeIdx, ports_extend=[],
SimuBox=SimuBox, port_radius=port_radius, sample_points=sample_points,
- FDTDBuild=FDTDBuild, LumericalPATH=LumericalPATH, runFDTD=runFDTD, port_names=["a1","b1"],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: FDTDBuild=FDTDBuild, LumericalPATH=LumericalPATH, runFDTD=runFDTD, port_names=["a1","b1"],
+ FDTDBuild=FDTDBuild, LumericalPATH=LumericalPATH, runFDTD=runFDTD, port_names=["opt_a1","opt_b1"],
GPUOn = GPUOn)
diff --git a/mxpic/components/others/simulation/Lumerical/GDS_SIMU_DEVICE_2X2.lsf b/mxpic/components/others/simulation/Lumerical/GDS_SIMU_DEVICE_2X2.lsf
index 72cd5ed..bc86d97 100644
--- a/mxpic/components/others/simulation/Lumerical/GDS_SIMU_DEVICE_2X2.lsf
+++ b/mxpic/components/others/simulation/Lumerical/GDS_SIMU_DEVICE_2X2.lsf
@@ -113,7 +113,9 @@ function FUNC_DEVICE_2X2(instPath)
## adding input ports
- input_struct = ports.a1;
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: input_struct = ports.a1;
+ input_struct = ports.opt_a1;
if (input_struct.a < 0) { input_struct.a = input_struct.a + 360; }
if ( 45<=input_struct.a and input_struct.a<135 )
@@ -148,7 +150,9 @@ function FUNC_DEVICE_2X2(instPath)
input_phi = 0;
}
- mx_mode_source('a1_input',[input_struct.x,input_struct.y,zOffset]*1e-6,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mx_mode_source('a1_input',[input_struct.x,input_struct.y,zOffset]*1e-6,
+ mx_mode_source('opt_a1_input',[input_struct.x,input_struct.y,zOffset]*1e-6,
portsSZ,inputType,0,
[abs(input_struct.radius)*1e-6,sign(input_struct.radius)*sign(inputType)*90],FDTD.sourceMode,FDTD.wl*1e-6);
set("theta",input_theta);
@@ -249,28 +253,52 @@ for (idx=1;idx<=length(portList);idx=idx+1)
}
-if (find(portList=="a1") and find(portList=="b1")){
- Ephase_11 = unwrap(angle(b1.Ecenter) - angle(a1.Ecenter));
- Hphase_11 = unwrap(angle(b1.Hcenter) - angle(a1.Hcenter));
+## revised in 2026.06.07 by Qin Yue
+# legacy: if (find(portList=="a1") and find(portList=="b1")){
+if (find(portList=="opt_a1") and find(portList=="opt_b1")){
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Ephase_11 = unwrap(angle(b1.Ecenter) - angle(a1.Ecenter));
+ Ephase_11 = unwrap(angle(opt_b1.Ecenter) - angle(opt_a1.Ecenter));
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Hphase_11 = unwrap(angle(b1.Hcenter) - angle(a1.Hcenter));
+ Hphase_11 = unwrap(angle(opt_b1.Hcenter) - angle(opt_a1.Hcenter));
save_cmd = save_cmd + "Ephase_11" + "," + "Hphase_11" + ",";
}
-if (find(portList=="a2") and find(portList=="b2")){
- Ephase_22 = unwrap(angle(b2.Ecenter) - angle(a2.Ecenter));
- Hphase_22 = unwrap(angle(b2.Hcenter) - angle(a2.Hcenter));
+## revised in 2026.06.07 by Qin Yue
+# legacy: if (find(portList=="a2") and find(portList=="b2")){
+if (find(portList=="opt_a2") and find(portList=="opt_b2")){
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Ephase_22 = unwrap(angle(b2.Ecenter) - angle(a2.Ecenter));
+ Ephase_22 = unwrap(angle(opt_b2.Ecenter) - angle(opt_a2.Ecenter));
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Hphase_22 = unwrap(angle(b2.Hcenter) - angle(a2.Hcenter));
+ Hphase_22 = unwrap(angle(opt_b2.Hcenter) - angle(opt_a2.Hcenter));
save_cmd = save_cmd + "Ephase_22" + "," + "Hphase_22" + ",";
}
-if (find(portList=="a1") and find(portList=="b2")){
- Ephase_12 = unwrap(angle(b2.Ecenter) - angle(a1.Ecenter));
- Hphase_12 = unwrap(angle(b2.Hcenter) - angle(a1.Hcenter));
+## revised in 2026.06.07 by Qin Yue
+# legacy: if (find(portList=="a1") and find(portList=="b2")){
+if (find(portList=="opt_a1") and find(portList=="opt_b2")){
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Ephase_12 = unwrap(angle(b2.Ecenter) - angle(a1.Ecenter));
+ Ephase_12 = unwrap(angle(opt_b2.Ecenter) - angle(opt_a1.Ecenter));
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Hphase_12 = unwrap(angle(b2.Hcenter) - angle(a1.Hcenter));
+ Hphase_12 = unwrap(angle(opt_b2.Hcenter) - angle(opt_a1.Hcenter));
save_cmd = save_cmd + "Ephase_12" + "," + "Hphase_12" + ",";
}
-if (find(portList=="a2") and find(portList=="b1")){
- Ephase_21 = unwrap(angle(b1.Ecenter) - angle(a2.Ecenter));
- Hphase_21 = unwrap(angle(b1.Hcenter) - angle(a2.Hcenter));
+## revised in 2026.06.07 by Qin Yue
+# legacy: if (find(portList=="a2") and find(portList=="b1")){
+if (find(portList=="opt_a2") and find(portList=="opt_b1")){
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Ephase_21 = unwrap(angle(b1.Ecenter) - angle(a2.Ecenter));
+ Ephase_21 = unwrap(angle(opt_b1.Ecenter) - angle(opt_a2.Ecenter));
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Hphase_21 = unwrap(angle(b1.Hcenter) - angle(a2.Hcenter));
+ Hphase_21 = unwrap(angle(opt_b1.Hcenter) - angle(opt_a2.Hcenter));
save_cmd = save_cmd + "Ephase_21" + "," + "Hphase_21" + ",";
}
@@ -283,7 +311,7 @@ Ez = getresult("z1","Ez");
savefname = devName+"_results.mat";
-#matlabsave(savefname,b1,b2,z1);
+# legacy: #matlabsave(savefname,b1,b2,z1);
eval("matlabsave(savefname,"+save_cmd+"z1);");
@@ -292,4 +320,3 @@ eval("matlabsave(savefname,"+save_cmd+"z1);");
-
diff --git a/mxpic/components/primitives/active/dev_ps.py b/mxpic/components/primitives/active/dev_ps.py
index 5c9e570..4ca91c7 100644
--- a/mxpic/components/primitives/active/dev_ps.py
+++ b/mxpic/components/primitives/active/dev_ps.py
@@ -150,8 +150,12 @@ class Heater_NDoped():
)
## Add pin
nd.Pin(name='a0').put(wg_input.pin['b0'])
- nd.Pin(name='a1', width=self.w_wg).put(wg_input.pin['b0'])
- nd.Pin(name='b1', width=self.w_wg).put(wg_output.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1', width=self.w_wg).put(wg_input.pin['b0'])
+ nd.Pin(name='opt_a1', width=self.w_wg,type="optical:").put(wg_input.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1', width=self.w_wg).put(wg_output.pin['b0'])
+ nd.Pin(name='opt_b1', width=self.w_wg,type="optical:").put(wg_output.pin['b0'])
nd.Pin(name='ep1', width=abs(metal_l.pin['a0'].y-metal_l.pin['b0'].y)).put(
metal_l.pin['a0'].x, (metal_l.pin['a0'].y+metal_l.pin['b0'].y)/2, 180
)
@@ -169,40 +173,64 @@ class Heater_NDoped():
stripe = Route(radius=5, width=gc.w_wg, xs='strip')
gc_input = gc.cell.put('g1',0,gc_offset,180)
gc_output = gc.cell.put('g1',gc2gc_length,gc_offset,0)
- mmi_input = mmi.cell.put('a1',20,0,0)
- mmi_output = mmi.cell.put('a1', gc_output.pin['g1'].x-20,0, 180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_input = mmi.cell.put('a1',20,0,0)
+ mmi_input = mmi.cell.put('opt_a1',20,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_output = mmi.cell.put('a1', gc_output.pin['g1'].x-20,0, 180)
+ mmi_output = mmi.cell.put('opt_a1', gc_output.pin['g1'].x-20,0, 180)
stripe.sbend_p2p(
pin1=gc_input.pin['g1'],
- pin2=mmi_input.pin['a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=mmi_input.pin['a1'],
+ pin2=mmi_input.pin['opt_a1'],
Lstart=5,
arrow=False
).put()
stripe.sbend_p2p(
pin1=gc_output.pin['g1'],
- pin2=mmi_output.pin['a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=mmi_output.pin['a1'],
+ pin2=mmi_output.pin['opt_a1'],
Lstart=5,
arrow=False
).put()
# Connect upper arm
- ps = self.cell.put('a1',mmi_input.pin['b1'].x+40,mzi_offset)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ps = self.cell.put('a1',mmi_input.pin['b1'].x+40,mzi_offset)
+ ps = self.cell.put('opt_a1',mmi_input.pin['opt_b1'].x+40,mzi_offset)
stripe.sbend_route_p2p(
- pin1=mmi_input.pin['b1'],
- pin2=ps.pin['a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_input.pin['b1'],
+ pin1=mmi_input.pin['opt_b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=ps.pin['a1'],
+ pin2=ps.pin['opt_a1'],
arrow=False
).put()
stripe.sbend_route_p2p(
- pin1=mmi_output.pin['b2'],
- pin2=ps.pin['b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output.pin['b2'],
+ pin1=mmi_output.pin['opt_b2'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=ps.pin['b1'],
+ pin2=ps.pin['opt_b1'],
arrow=False
).put()
# Connect lower arm
stripe.strt_p2p(
- pin1=mmi_input.pin['b2'],
- pin2=mmi_output.pin['b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_input.pin['b2'],
+ pin1=mmi_input.pin['opt_b2'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=mmi_output.pin['b1'],
+ pin2=mmi_output.pin['opt_b1'],
arrow=False
).put()
## Put CT heater
- ps_ct = self.cell.put('a1',ps.pin['a1'].x,ps.pin['a1'].y+ct_pitch,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ps_ct = self.cell.put('a1',ps.pin['a1'].x,ps.pin['a1'].y+ct_pitch,0)
+ ps_ct = self.cell.put('opt_a1',ps.pin['opt_a1'].x,ps.pin['opt_a1'].y+ct_pitch,0)
## Put pins
nd.Pin(name="ep1", pin=ps.pin['ep1']).put()
nd.Pin(name="en1", pin=ps.pin['en1']).put()
@@ -306,9 +334,15 @@ class PS_PIN() :
nd.add_layer2xsection(xsection='slab2strip_pin', layer='STRIP_CLD', leftedge=(0.5,self.w_slab*2), rightedge=(-0.5,-self.w_slab*2), overwrite=True)
taper_strip2slab = taper_xs2xs(xs_1='strip',xs_2='slab2strip_pin',L_taper=10,w_1=self.w_wg,w_2=self.w_wg_slab, L_port=0.2)
taper_slab2strip = taper_xs2xs(xs_1='slab2strip_pin',xs_2='strip',L_taper=10,w_1=self.w_wg_slab, w_2=self.w_wg,L_port=0.2)
- taper_input = taper_strip2slab.cell.put('a1',0,0,0)
- wg_ps = slab.strt(length=self.l_wg,arrow=False).put(taper_input.pin['b1'])
- taper_output = taper_slab2strip.cell.put('a1',wg_ps.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: taper_input = taper_strip2slab.cell.put('a1',0,0,0)
+ taper_input = taper_strip2slab.cell.put('opt_a1',0,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wg_ps = slab.strt(length=self.l_wg,arrow=False).put(taper_input.pin['b1'])
+ wg_ps = slab.strt(length=self.l_wg,arrow=False).put(taper_input.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: taper_output = taper_slab2strip.cell.put('a1',wg_ps.pin['b0'])
+ taper_output = taper_slab2strip.cell.put('opt_a1',wg_ps.pin['b0'])
''' Add doping area near the waveguide '''
l_edge = 1
@@ -317,10 +351,18 @@ class PS_PIN() :
p_layer_temp = self.p_layer_list[_index_]
n_layer_temp = self.n_layer_list[_index_]
doping_polygon = [
- (taper_input.pin['b1'].x+l_edge, self.w_wg_slab/2+d2wg_temp),
- (taper_output.pin['a1'].x-l_edge, self.w_wg_slab/2+d2wg_temp),
- (taper_output.pin['a1'].x-l_edge, self.w_plus_max),
- (taper_input.pin['b1'].x+l_edge, self.w_plus_max)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: (taper_input.pin['b1'].x+l_edge, self.w_wg_slab/2+d2wg_temp),
+ (taper_input.pin['opt_b1'].x+l_edge, self.w_wg_slab/2+d2wg_temp),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: (taper_output.pin['a1'].x-l_edge, self.w_wg_slab/2+d2wg_temp),
+ (taper_output.pin['opt_a1'].x-l_edge, self.w_wg_slab/2+d2wg_temp),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: (taper_output.pin['a1'].x-l_edge, self.w_plus_max),
+ (taper_output.pin['opt_a1'].x-l_edge, self.w_plus_max),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: (taper_input.pin['b1'].x+l_edge, self.w_plus_max)
+ (taper_input.pin['opt_b1'].x+l_edge, self.w_plus_max)
]
nd.Polygon(points=doping_polygon, layer=p_layer_temp).put(0,0)
nd.Polygon(points=doping_polygon, layer=n_layer_temp).put(0,0,flop=True)
@@ -332,15 +374,23 @@ class PS_PIN() :
xs_l1="sa", xs_l2="metal", show_pins=False
)
vias_p = vias.cell.put(
- taper_input.pin['b1'].x+self.l_wg/2, (self.w_plus_max+self.d2wg_list[-1]+self.w_wg_slab/2)/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: taper_input.pin['b1'].x+self.l_wg/2, (self.w_plus_max+self.d2wg_list[-1]+self.w_wg_slab/2)/2
+ taper_input.pin['opt_b1'].x+self.l_wg/2, (self.w_plus_max+self.d2wg_list[-1]+self.w_wg_slab/2)/2
)
vias_n = vias.cell.put(
- taper_input.pin['b1'].x+self.l_wg/2, -(self.w_plus_max+self.d2wg_list[-1]+self.w_wg_slab/2)/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: taper_input.pin['b1'].x+self.l_wg/2, -(self.w_plus_max+self.d2wg_list[-1]+self.w_wg_slab/2)/2
+ taper_input.pin['opt_b1'].x+self.l_wg/2, -(self.w_plus_max+self.d2wg_list[-1]+self.w_wg_slab/2)/2
)
''' Add Pins '''
- nd.Pin(name='a1',width=self.w_wg).put(taper_input.pin['a1'])
- nd.Pin(name='b1',width=self.w_wg).put(taper_output.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_wg).put(taper_input.pin['a1'])
+ nd.Pin(name='opt_a1',width=self.w_wg,type="optical:").put(taper_input.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_wg).put(taper_output.pin['b1'])
+ nd.Pin(name='opt_b1',width=self.w_wg,type="optical:").put(taper_output.pin['opt_b1'])
nd.Pin(name="ep1", width=self.w_plus_max-(self.d2wg_list[-1]+self.w_wg_slab/2)-0.2*2).put(vias_p.pin['a0'])
nd.Pin(name="en1", width=self.w_plus_max-(self.d2wg_list[-1]+self.w_wg_slab/2)-0.2*2).put(vias_n.pin['a0'])
# nd.put_stub()
@@ -351,52 +401,90 @@ class PS_PIN() :
Generating a Mach-Zehnder Interferometer for testing the PIN phase shifter.
'''
with nd.Cell(name=self.cell_name+"_MZI", instantiate=False) as ICell :
- mmi_input = mmi.cell.put('a1',0,0,0)
- pin2test = self.cell.put('a1', mmi_input.pin['b1'].move(60,100,0))
- mmi_bottom = mmi.cell.put('a1', pin2test.pin['b1'].x+10, mmi_input.pin['b2'].y, 0)
- mmi_up = mmi.cell.put('a1', pin2test.pin['b1'].move(10,0,0))
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_input = mmi.cell.put('a1',0,0,0)
+ mmi_input = mmi.cell.put('opt_a1',0,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2test = self.cell.put('a1', mmi_input.pin['b1'].move(60,100,0))
+ pin2test = self.cell.put('opt_a1', mmi_input.pin['opt_b1'].move(60,100,0))
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_bottom = mmi.cell.put('a1', pin2test.pin['b1'].x+10, mmi_input.pin['b2'].y, 0)
+ mmi_bottom = mmi.cell.put('opt_a1', pin2test.pin['opt_b1'].x+10, mmi_input.pin['opt_b2'].y, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_up = mmi.cell.put('a1', pin2test.pin['b1'].move(10,0,0))
+ mmi_up = mmi.cell.put('opt_a1', pin2test.pin['opt_b1'].move(10,0,0))
mmi_middle = mmi.cell.put(
- 'a1',
- mmi_bottom.pin['b1'].x+mmi.length+25,
- mmi_up.pin['b2'].y/2+mmi_bottom.pin['b1'].y/2,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: 'a1',
+ 'opt_a1',
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_bottom.pin['b1'].x+mmi.length+25,
+ mmi_bottom.pin['opt_b1'].x+mmi.length+25,
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_up.pin['b2'].y/2+mmi_bottom.pin['b1'].y/2,
+ mmi_up.pin['opt_b2'].y/2+mmi_bottom.pin['opt_b1'].y/2,
180
)
''' Wg routing '''
strip = Route(radius=10, width=self.w_wg, xs='strip')
- strip.strt_p2p(pin1=mmi_input.pin['b2'],pin2=mmi_bottom.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt_p2p(pin1=mmi_input.pin['b2'],pin2=mmi_bottom.pin['a1'],arrow=False).put()
+ strip.strt_p2p(pin1=mmi_input.pin['opt_b2'],pin2=mmi_bottom.pin['opt_a1'],arrow=False).put()
# strip.sbend_p2p(pin1=mmi_input.pin['b1'],pin2=pin2test.pin['a1'],Lstart=1,arrow=False).put()
strip.sbend_p2p(
- pin1=mmi_input.pin['b1'],pin2=nd.Pin().put(mmi_input.pin['b1'].x+11,pin2test.pin['a1'].y,180),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_input.pin['b1'],pin2=nd.Pin().put(mmi_input.pin['b1'].x+11,pin2test.pin['a1'].y,180),
+ pin1=mmi_input.pin['opt_b1'],pin2=nd.Pin().put(mmi_input.pin['opt_b1'].x+11,pin2test.pin['opt_a1'].y,180),
radius=5, Lstart=0.5, arrow=False
).put()
strip.sbend_p2p(
- pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+22,mmi_input.pin['b1'].y+1,180),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+22,mmi_input.pin['b1'].y+1,180),
+ pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['opt_b1'].x+22,mmi_input.pin['opt_b1'].y+1,180),
radius=5, Lstart=0.5, arrow=False
).put()
strip.sbend_p2p(
- pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+33,pin2test.pin['a1'].y,180),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+33,pin2test.pin['a1'].y,180),
+ pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['opt_b1'].x+33,pin2test.pin['opt_a1'].y,180),
radius=5, Lstart=0.5, arrow=False
).put()
strip.sbend_p2p(
- pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+44,mmi_input.pin['b1'].y+1,180),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+44,mmi_input.pin['b1'].y+1,180),
+ pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['opt_b1'].x+44,mmi_input.pin['opt_b1'].y+1,180),
radius=5, Lstart=0.5, arrow=False
).put()
strip.sbend_p2p(
- pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+55,pin2test.pin['a1'].y,180),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['b1'].x+55,pin2test.pin['a1'].y,180),
+ pin1=nd.Pin().put(),pin2=nd.Pin().put(mmi_input.pin['opt_b1'].x+55,pin2test.pin['opt_a1'].y,180),
radius=5, Lstart=0.5, arrow=False
).put()
- strip.strt_p2p(pin1=nd.Pin().put(),pin2=pin2test.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt_p2p(pin1=nd.Pin().put(),pin2=pin2test.pin['a1'],arrow=False).put()
+ strip.strt_p2p(pin1=nd.Pin().put(),pin2=pin2test.pin['opt_a1'],arrow=False).put()
# strip.sbend(radius=5,offset=-abs(pin2test.pin['a1'].y-mmi_input.pin['b1'].y),arrow=False).put()
- strip.strt_p2p(pin1=mmi_up.pin['a1'],pin2=pin2test.pin['b1'],arrow=False).put()
- strip.sbend_p2p(pin1=mmi_up.pin['b2'],pin2=mmi_middle.pin['b2'],Lstart=0.5,radius=10,arrow=False).put()
- strip.sbend_p2p(pin1=mmi_bottom.pin['b1'],pin2=mmi_middle.pin['b1'],Lstart=2.5,radius=10,arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt_p2p(pin1=mmi_up.pin['a1'],pin2=pin2test.pin['b1'],arrow=False).put()
+ strip.strt_p2p(pin1=mmi_up.pin['opt_a1'],pin2=pin2test.pin['opt_b1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.sbend_p2p(pin1=mmi_up.pin['b2'],pin2=mmi_middle.pin['b2'],Lstart=0.5,radius=10,arrow=False).put()
+ strip.sbend_p2p(pin1=mmi_up.pin['opt_b2'],pin2=mmi_middle.pin['opt_b2'],Lstart=0.5,radius=10,arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.sbend_p2p(pin1=mmi_bottom.pin['b1'],pin2=mmi_middle.pin['b1'],Lstart=2.5,radius=10,arrow=False).put()
+ strip.sbend_p2p(pin1=mmi_bottom.pin['opt_b1'],pin2=mmi_middle.pin['opt_b1'],Lstart=2.5,radius=10,arrow=False).put()
''' Add pads '''
pad_ground = pad.cell.put(
- mmi_input.pin['b1'].x+40+30+50,mmi_input.pin['b1'].y+5+40-4,0
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_input.pin['b1'].x+40+30+50,mmi_input.pin['b1'].y+5+40-4,0
+ mmi_input.pin['opt_b1'].x+40+30+50,mmi_input.pin['opt_b1'].y+5+40-4,0
)
pad_signal = pad.cell.put(
- mmi_input.pin['b1'].x+40+30+100+50,mmi_input.pin['b1'].y+5+40-4,0
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_input.pin['b1'].x+40+30+100+50,mmi_input.pin['b1'].y+5+40-4,0
+ mmi_input.pin['opt_b1'].x+40+30+100+50,mmi_input.pin['opt_b1'].y+5+40-4,0
)
''' Metal Connecting '''
@@ -427,13 +515,21 @@ class PS_PIN() :
)
)
''' Put output gratings '''
- strip.strt(length=60,arrow=False).put(mmi_input.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt(length=60,arrow=False).put(mmi_input.pin['a1'])
+ strip.strt(length=60,arrow=False).put(mmi_input.pin['opt_a1'])
gc.cell.put('g1')
- strip.strt(length=60,arrow=False).put(mmi_up.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt(length=60,arrow=False).put(mmi_up.pin['b1'])
+ strip.strt(length=60,arrow=False).put(mmi_up.pin['opt_b1'])
gc.cell.put('g1')
- strip.strt(length=100,arrow=False).put(mmi_middle.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt(length=100,arrow=False).put(mmi_middle.pin['a1'])
+ strip.strt(length=100,arrow=False).put(mmi_middle.pin['opt_a1'])
gc.cell.put('g1')
- strip.strt(length=60,arrow=False).put(mmi_bottom.pin['b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: strip.strt(length=60,arrow=False).put(mmi_bottom.pin['b2'])
+ strip.strt(length=60,arrow=False).put(mmi_bottom.pin['opt_b2'])
gc.cell.put('g1')
return ICell
diff --git a/mxpic/components/primitives/active/pin_wg.py b/mxpic/components/primitives/active/pin_wg.py
index 0fff99f..42fd1a5 100644
--- a/mxpic/components/primitives/active/pin_wg.py
+++ b/mxpic/components/primitives/active/pin_wg.py
@@ -181,11 +181,19 @@ class waveguide_PIN:
if (self.rib_taper):
tp_L = taper_xs2xs(xs_1='temp',xs_2=self.xs_port,L_taper=self.L_taper,w_1=self.w_wg,w_2=self.w_wg).cell.put(core.pin['a0'])
tp_R = taper_xs2xs(xs_1='temp',xs_2=self.xs_port,L_taper=self.L_taper,w_1=self.w_wg,w_2=self.w_wg).cell.put(core.pin['b0'])
- nd.Pin(name='a1',pin=tp_L.pin['b0']).put()
- nd.Pin(name='b1',pin=tp_R.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=tp_L.pin['b0']).put()
+ nd.Pin(name='opt_a1',pin=tp_L.pin['b0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=tp_R.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=tp_R.pin['b0'],type="optical:").put()
else:
- nd.Pin(name='a1',pin=core.pin['a0']).put()
- nd.Pin(name='b1',pin=core.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=core.pin['a0']).put()
+ nd.Pin(name='opt_a1',pin=core.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=core.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=core.pin['b0'],type="optical:").put()
## adding p doping area
_y_ = self.w_itr/2
@@ -476,12 +484,28 @@ class WGDoped():
xs1 = self.cell_xs_transition.put('a0',coreOUT.pin['b0'])
xs2 = self.cell_xs_transition.put('a0',coreIN.pin['a0'])
- xs1.raise_pins(['b0'],['a1'])
- xs2.raise_pins(['b0'],['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: xs1.raise_pins(['b0'],['a1'])
+ xs1.raise_pins(['b0'],['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ C.pin['opt_a1'].type = "optical:"
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: xs2.raise_pins(['b0'],['b1'])
+ xs2.raise_pins(['b0'],['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ C.pin['opt_b1'].type = "optical:"
else:
- coreIN.raise_pins(['a0'],['b1'])
- coreOUT.raise_pins(['b0'],['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: coreIN.raise_pins(['a0'],['b1'])
+ coreIN.raise_pins(['a0'],['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ C.pin['opt_b1'].type = "optical:"
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: coreOUT.raise_pins(['b0'],['a1'])
+ coreOUT.raise_pins(['b0'],['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ C.pin['opt_a1'].type = "optical:"
# nd.put_stub()
return C
diff --git a/mxpic/components/primitives/active/rings.py b/mxpic/components/primitives/active/rings.py
index 33f70dc..d93c4c2 100644
--- a/mxpic/components/primitives/active/rings.py
+++ b/mxpic/components/primitives/active/rings.py
@@ -590,7 +590,9 @@ class AED_Ring_PIN(MRR_AED): ## Finished in 2022.11.23
spacing=self.via_i2m.spacing,
sp_via_xs=self.via_i2m.sp_via_xs,
instantiate=self.via_i2m.instantiate,
- ).cell.put(INSTR.pin['a1'].x+self.w_metal/2+self.sp_cont,INSTR.pin['a1'].y,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ).cell.put(INSTR.pin['a1'].x+self.w_metal/2+self.sp_cont,INSTR.pin['a1'].y,180)
+ ).cell.put(INSTR.pin['opt_a1'].x+self.w_metal/2+self.sp_cont,INSTR.pin['opt_a1'].y,180)
BUS_VIA_R = Vias(xs=self.via_i2m.xs,area=[self.w_metal,BUS_IMP.w_wg-self.sp_cont*2],
xs_l1=self.via_i2m.xs_l1,
@@ -599,21 +601,47 @@ class AED_Ring_PIN(MRR_AED): ## Finished in 2022.11.23
spacing=self.via_i2m.spacing,
sp_via_xs=self.via_i2m.sp_via_xs,
instantiate=self.via_i2m.instantiate,
- ).cell.put(INSTR.pin['b1'].x-self.w_metal/2-self.sp_cont,INSTR.pin['b1'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ).cell.put(INSTR.pin['b1'].x-self.w_metal/2-self.sp_cont,INSTR.pin['b1'].y)
+ ).cell.put(INSTR.pin['opt_b1'].x-self.w_metal/2-self.sp_cont,INSTR.pin['opt_b1'].y)
- if (abs(BUS_VIA_L.pin['a0'].x) > abs(VIA_LO.pin['b1'].x)):
- temp = eic_mt.bend(pin=VIA_LO.pin['b1'],angle=360-VIA_LO.pin['b1'].a,arrow=False).put(flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if (abs(BUS_VIA_L.pin['a0'].x) > abs(VIA_LO.pin['b1'].x)):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if (abs(BUS_VIA_L.pin['a0'].x) > abs(VIA_LO.pin['opt_b1'].x)):
+ if (abs(BUS_VIA_L.pin['a0'].x) > abs(VIA_LO.pin['ele_b1'].x)):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_LO.pin['b1'],angle=360-VIA_LO.pin['b1'].a,arrow=False).put(flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_LO.pin['opt_b1'],angle=360-VIA_LO.pin['opt_b1'].a,arrow=False).put(flip=0)
+ temp = eic_mt.bend(pin=VIA_LO.pin['ele_b1'],angle=360-VIA_LO.pin['ele_b1'].a,arrow=False).put(flip=0)
eic_mt.ubend_p2p(pin2=BUS_VIA_L.pin['a0'],arrow=False).put()
else :
- eic_mt.strt_bend_strt_p2p(pin1=VIA_LO.pin['b1'],pin2=BUS_VIA_L.pin['a0'].move(0,0,90),arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin1=VIA_LO.pin['b1'],pin2=BUS_VIA_L.pin['a0'].move(0,0,90),arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin1=VIA_LO.pin['opt_b1'],pin2=BUS_VIA_L.pin['a0'].move(0,0,90),arrow=False).put()
+ eic_mt.strt_bend_strt_p2p(pin1=VIA_LO.pin['ele_b1'],pin2=BUS_VIA_L.pin['a0'].move(0,0,90),arrow=False).put()
- if (abs(BUS_VIA_R.pin['a0'].x) > abs(VIA_RO.pin['a1'].x)):
- temp = eic_mt.bend(pin=VIA_RO.pin['a1'],angle=VIA_RO.pin['a1'].a-180,arrow=False).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if (abs(BUS_VIA_R.pin['a0'].x) > abs(VIA_RO.pin['a1'].x)):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if (abs(BUS_VIA_R.pin['a0'].x) > abs(VIA_RO.pin['opt_a1'].x)):
+ if (abs(BUS_VIA_R.pin['a0'].x) > abs(VIA_RO.pin['ele_a1'].x)):
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_RO.pin['a1'],angle=VIA_RO.pin['a1'].a-180,arrow=False).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_RO.pin['opt_a1'],angle=VIA_RO.pin['opt_a1'].a-180,arrow=False).put(flip=1)
+ temp = eic_mt.bend(pin=VIA_RO.pin['ele_a1'],angle=VIA_RO.pin['ele_a1'].a-180,arrow=False).put(flip=1)
eic_mt.ubend_p2p(pin2=BUS_VIA_R.pin['a0'],arrow=False).put()
else :
- eic_mt.strt_bend_strt_p2p(pin1=VIA_RO.pin['a1'],pin2=BUS_VIA_R.pin['a0'].move(0,0,-90),arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin1=VIA_RO.pin['a1'],pin2=BUS_VIA_R.pin['a0'].move(0,0,-90),arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin1=VIA_RO.pin['opt_a1'],pin2=BUS_VIA_R.pin['a0'].move(0,0,-90),arrow=False).put()
+ eic_mt.strt_bend_strt_p2p(pin1=VIA_RO.pin['ele_a1'],pin2=BUS_VIA_R.pin['a0'].move(0,0,-90),arrow=False).put()
nd.Pin(name='en3',width=BUS_IMP.wg_Ltp-self.sp_cont*2).put(BUS_VIA_L.pin['a0'].x,BUS_VIA_L.pin['a0'].y,-90)
nd.Pin(name='en4',width=BUS_IMP.wg_Ltp-self.sp_cont*2).put(BUS_VIA_R.pin['a0'].x,BUS_VIA_R.pin['a0'].y,-90)
@@ -660,25 +688,53 @@ class AED_Ring_PIN(MRR_AED): ## Finished in 2022.11.23
xs_l2=self.via_i2m.xs_l2,
sz=self.via_i2m.sz,spacing=self.via_i2m.spacing,
sp_via_xs=self.via_i2m.sp_via_xs,
- ).cell.put(INSTR.pin['a1'].x+self.w_metal/2+self.sp_cont,INSTR.pin['a1'].y,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ).cell.put(INSTR.pin['a1'].x+self.w_metal/2+self.sp_cont,INSTR.pin['a1'].y,180)
+ ).cell.put(INSTR.pin['opt_a1'].x+self.w_metal/2+self.sp_cont,INSTR.pin['opt_a1'].y,180)
BUS_VIA_R = Vias(xs=self.via_i2m.xs,area=[self.w_metal,BUS_IMP.w_wg-self.sp_cont*2],
xs_l1=self.via_i2m.xs_l1,
xs_l2=self.via_i2m.xs_l2,
sp_via_xs=self.via_i2m.sp_via_xs,
- sz=self.via_i2m.sz,spacing=self.via_i2m.spacing).cell.put(INSTR.pin['b1'].x-self.w_metal/2-self.sp_cont,INSTR.pin['b1'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: sz=self.via_i2m.sz,spacing=self.via_i2m.spacing).cell.put(INSTR.pin['b1'].x-self.w_metal/2-self.sp_cont,INSTR.pin['b1'].y)
+ sz=self.via_i2m.sz,spacing=self.via_i2m.spacing).cell.put(INSTR.pin['opt_b1'].x-self.w_metal/2-self.sp_cont,INSTR.pin['opt_b1'].y)
- eic_mt.bend(pin=VIA_LO.pin['a1'],angle=VIA_LO.pin['a1'].a-90,arrow=False).put(flip=1)
- eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_L.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.bend(pin=VIA_LO.pin['a1'],angle=VIA_LO.pin['a1'].a-90,arrow=False).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.bend(pin=VIA_LO.pin['opt_a1'],angle=VIA_LO.pin['opt_a1'].a-90,arrow=False).put(flip=1)
+ eic_mt.bend(pin=VIA_LO.pin['ele_a1'],angle=VIA_LO.pin['ele_a1'].a-90,arrow=False).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_L.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_L.pin['opt_a1'],arrow=False).put()
+ eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_L.pin['ele_a1'],arrow=False).put()
- eic_mt.bend(pin=VIA_RO.pin['b1'],angle=90-VIA_RO.pin['b1'].a).put(flip=0)
- eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_R.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.bend(pin=VIA_RO.pin['b1'],angle=90-VIA_RO.pin['b1'].a).put(flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.bend(pin=VIA_RO.pin['opt_b1'],angle=90-VIA_RO.pin['opt_b1'].a).put(flip=0)
+ eic_mt.bend(pin=VIA_RO.pin['ele_b1'],angle=90-VIA_RO.pin['ele_b1'].a).put(flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_R.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_R.pin['opt_a1'],arrow=False).put()
+ eic_mt.strt_bend_strt_p2p(pin2=BUS_VIA_R.pin['ele_a1'],arrow=False).put()
else :
- temp = eic_mt.bend(pin=VIA_LO.pin['b1'],angle=VIA_LO.pin['b1'].a-270,arrow=False).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_LO.pin['b1'],angle=VIA_LO.pin['b1'].a-270,arrow=False).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_LO.pin['opt_b1'],angle=VIA_LO.pin['opt_b1'].a-270,arrow=False).put(flip=1)
+ temp = eic_mt.bend(pin=VIA_LO.pin['ele_b1'],angle=VIA_LO.pin['ele_b1'].a-270,arrow=False).put(flip=1)
nd.Pin(name='en3',width=w_cont_out-self.sp_cont*2+ovlp,pin=temp.pin['b0']).put()
- temp = eic_mt.bend(pin=VIA_RO.pin['a1'],angle=270-VIA_RO.pin['a1'].a,arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_RO.pin['a1'],angle=270-VIA_RO.pin['a1'].a,arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = eic_mt.bend(pin=VIA_RO.pin['opt_a1'],angle=270-VIA_RO.pin['opt_a1'].a,arrow=False).put()
+ temp = eic_mt.bend(pin=VIA_RO.pin['ele_a1'],angle=270-VIA_RO.pin['ele_a1'].a,arrow=False).put()
nd.Pin(name='en4',width=w_cont_out-self.sp_cont*2+ovlp,pin=temp.pin['b0']).put()
diff --git a/mxpic/components/primitives/grating_couplers.py b/mxpic/components/primitives/grating_couplers.py
deleted file mode 100644
index 931f87a..0000000
--- a/mxpic/components/primitives/grating_couplers.py
+++ /dev/null
@@ -1,192 +0,0 @@
-import nazca as nd
-import numpy as np
-import math
-import pandas as pd
-
-from ...routing import Route
-from ..geometry import _my_polygon,circle,Clothoid,hole
-from ...basic import __cell_arg__
-
-
-class GC_SiN_Si_Dual_Layer:
- """
- GC SiN Si Dual Layer primitive component.
-
- This component builds the GC SiN Si Dual Layer layout cell.
-
- Parameters
- ----------
- name : str, optional
- Unique identifier for the device cell. Default is None.
- w_teeth_SiN : list or float, optional
- Width parameter in microns. Default is 0.5.
- gap_teeth_SiN : list or float, optional
- Spacing or gap parameter in microns. Default is 0.5.
- w_teeth_Si : list or float, optional
- Width parameter in microns. Default is 0.5.
- gap_teeth_Si : list or float, optional
- Spacing or gap parameter in microns. Default is 0.5.
- ori_teeth_offset : float, optional
- Value for the ori_teeth_offset parameter. Default is 5.0.
- n_teeth_Si : float, optional
- Value for the n_teeth_Si parameter. Default is 30.
- n_teeth_SiN : float, optional
- Value for the n_teeth_SiN parameter. Default is 30.
- A_gc_taper : float, optional
- Angle parameter in degrees. Default is 25.0.
- R_teeth_ori_SiN : float, optional
- Radius parameter in microns. Default is 40.0.
- R_teeth_ori_Si : float, optional
- Radius parameter in microns. Default is 40.0.
- L_end_Si : float, optional
- Length parameter in microns. Default is 0.2.
- L_end_SiN : float, optional
- Length parameter in microns. Default is 5.0.
- w_port : float, optional
- Width parameter in microns. Default is 0.9.
- A_anti_rfl : float, optional
- Angle parameter in degrees. Default is 4.0.
- layer_SiN_slab : str, optional
- Layer or cross-section name used by the device. Default is None.
- layer_Si_slab : str, optional
- Layer or cross-section name used by the device. Default is None.
- layer_Si_teeth : str, optional
- Layer or cross-section name used by the device. Default is None.
- layer_SiN_teeth : str, optional
- Layer or cross-section name used by the device. Default is None.
- layer_SiN_etch : str, optional
- Layer or cross-section name used by the device. Default is None.
- layer_Si_etch : str, optional
- Layer or cross-section name used by the device. Default is None.
- layer_ox_open : str, optional
- Layer or cross-section name used by the device. Default is None.
- """
- def __init__(self,
- name:str=None,
- w_teeth_SiN:'list|float' = 0.5,
- gap_teeth_SiN:'list|float' = 0.5,
- w_teeth_Si:'list|float' = 0.5,
- gap_teeth_Si:'list|float' = 0.5,
- ori_teeth_offset:float = 5.0,
- n_teeth_Si:float=30,
- n_teeth_SiN:float=30,
- A_gc_taper:float=25.0,
- R_teeth_ori_SiN:float=40.0,
- R_teeth_ori_Si:float=40.0,
- L_end_Si:float=0.2,
- L_end_SiN:float=5.0,
-
- w_port : float = 0.9,
-
- A_anti_rfl:float = 4.0,
- layer_SiN_slab:str=None,
- layer_Si_slab:str=None,
- layer_Si_teeth:str=None,
- layer_SiN_teeth:str=None,
- layer_SiN_etch:str=None,
- layer_Si_etch:str=None,
- layer_ox_open:str=None,
- ):
-
- self.name = name
- self.w_teeth_SiN = w_teeth_SiN
- self.gap_teeth_SiN = gap_teeth_SiN
- self.w_teeth_Si = w_teeth_Si
- self.gap_teeth_Si = gap_teeth_Si
- self.ori_teeth_offset = ori_teeth_offset
-
- self.n_teeth_SiN = n_teeth_SiN
- self.n_teeth_Si = n_teeth_Si
-
- self.A_gc_taper = A_gc_taper
-
- self.w_port = w_port
-
- self.L_end_Si = L_end_Si
- self.L_end_SiN = L_end_SiN
-
- self.A_anti_rfl = A_anti_rfl
-
- self.R_teeth_ori_SiN = R_teeth_ori_SiN
- self.R_teeth_ori_Si = R_teeth_ori_Si
-
- self.layer_SiN_slab = layer_SiN_slab
- self.layer_Si_slab = layer_Si_slab
- self.layer_Si_teeth = layer_Si_teeth
- self.layer_SiN_teeth = layer_SiN_teeth
- self.layer_SiN_etch = layer_SiN_etch
- self.layer_Si_etch = layer_Si_etch
- self.layer_ox_open = layer_ox_open
-
- self.cell = self.generate_gds()
-
- def generate_gds(self):
- """ creating instance cell or not """
- if (self.name is None) : self.instantiate = False
- else : self.instantiate = True
-
- """ """
- if (isinstance(self.w_teeth_SiN,list) or isinstance(self.w_teeth_SiN,np.ndarray)):
- n_teeth_SiN = len(self.w_teeth_SiN)
- elif (isinstance(self.w_teeth_SiN,float)):
- n_teeth_SiN = self.n_teeth_SiN
- w_teeth_SiN = [w_teeth_SiN]*n_teeth_SiN
-
- """ """
- if (isinstance(self.w_teeth_Si,list) or isinstance(self.w_teeth_Si,np.ndarray)):
- n_teeth_Si = len(self.w_teeth_Si)
- elif (isinstance(self.w_teeth_Si,float)):
- n_teeth_Si = self.n_teeth_Si
- w_teeth_Si = [w_teeth_Si]*n_teeth_Si
-
- with nd.Cell(instantiate=self.instantiate, name=self.name) as C:
-
- """ Creating SiN layer grating """
- ## whole area where the grating area covered
- L_gc = self.R_teeth_ori_SiN + self.L_end_SiN + sum(self.w_teeth_SiN) + sum(self.gap_teeth_SiN)
-
- w_box_gc = L_gc*np.sin(self.A_gc_taper/2*np.pi/180)*2
- L_box_gc = L_gc*np.cos(self.A_gc_taper/2*np.pi/180)
- x_slab = [0,L_box_gc,L_gc+w_box_gc*np.sin(self.A_anti_rfl*np.pi/180),L_gc,L_box_gc,0]
- y_slab = [self.w_port/2,w_box_gc/2,w_box_gc/2,-w_box_gc/2,-w_box_gc/2,-self.w_port/2]
-
- _my_polygon(layer_wg=self.layer_SiN_slab,vtx=np.c_[x_slab,y_slab]).put(0,0,0)
-
- # circle(radius=self.R_teeth_ori_SiN/2,angle=self.A_gc_taper,layer=self.layer_SiN_slab,
- # width=self.R_teeth_ori_SiN).cell.put(0,0,-self.A_gc_taper/2)
-
- A_etch_ext = 4
- ## Placing teeth
- r_in = self.R_teeth_ori_SiN
- for idxT in range(0,n_teeth_SiN):
- r_out = r_in + self.gap_teeth_SiN[idxT]
-
- circle(radius=(r_out+r_in)/2,angle=self.A_gc_taper+A_etch_ext,layer=self.layer_SiN_etch,
- width=self.gap_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2-A_etch_ext/2)
-
- r_in = r_out + self.w_teeth_SiN[idxT]
-
- """ Creating Si layer grating """
-
- w_Si_slab = sum(self.w_teeth_Si)+sum(self.gap_teeth_Si)
- R_Si_slab = self.R_teeth_ori_Si+w_Si_slab/2
- circle(radius=R_Si_slab,angle=self.A_gc_taper,layer=self.layer_Si_slab,
- width=w_Si_slab).cell.put(0,0,-self.A_gc_taper/2)
-
- ## Placing teeth
- r_in = self.R_teeth_ori_Si
- for idxT in range(0,n_teeth_Si):
- r_out = r_in + self.gap_teeth_Si[idxT]
-
- if (self.layer_Si_etch is not None):
- circle(radius=(r_out+r_in)/2,angle=self.A_gc_taper+A_etch_ext,layer=self.layer_Si_etch,
- width=self.gap_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2-A_etch_ext/2)
- elif (self.layer_Si_teeth is not None):
- circle(radius=r_out+(self.w_teeth_Si[idxT])/2,angle=self.A_gc_taper,layer=self.layer_Si_teeth,
- width=self.w_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2)
-
- r_in = r_out + self.w_teeth_Si[idxT]
-
- return C
-
-
diff --git a/mxpic/components/primitives/passive/crows.py b/mxpic/components/primitives/passive/crows.py
index b0946a2..14cb42d 100644
--- a/mxpic/components/primitives/passive/crows.py
+++ b/mxpic/components/primitives/passive/crows.py
@@ -235,8 +235,12 @@ class STD_CROW_V:
# instr.raise_pins(['r1','r2','r3','r4'],['ra1','ra2','ra3','ra4'])
# print(self.sz_ring,self.w_ring,self.gap_cp[0])
BUS_d = self.bus_cell[0].put(0,-self.sz_ring[0][1]/2-self.w_ring[0][1]/2-self.w_bus/2-self.gap_cp[0])
- nd.Pin(name='a1',pin=BUS_d.pin['a1']).put()
- nd.Pin(name='b1',pin=BUS_d.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=BUS_d.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=BUS_d.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=BUS_d.pin['b1']).put()
+ nd.Pin(name='opt_b1',pin=BUS_d.pin['opt_b1'],type="optical:").put()
dy = 0
for _idx_ in range(0,len(self.gap_crows)):
@@ -253,8 +257,12 @@ class STD_CROW_V:
if (len(self.gap_cp)==2):
BUS_u = self.bus_cell[1].put(0,dy+self.sz_ring[-1][1]/2+self.w_ring[-1][1]/2+self.w_bus/2+self.gap_cp[1],flip=1)
- nd.Pin(name='a2',pin=BUS_u.pin['a1']).put()
- nd.Pin(name='b2',pin=BUS_u.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=BUS_u.pin['a1']).put()
+ nd.Pin(name='opt_a2',pin=BUS_u.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=BUS_u.pin['b1']).put()
+ nd.Pin(name='opt_b2',pin=BUS_u.pin['opt_b1'],type="optical:").put()
except Exception as ex:
print("ERROR :: ",ex)
diff --git a/mxpic/components/primitives/passive/rings.py b/mxpic/components/primitives/passive/rings.py
index c1c93b7..cb67b6a 100644
--- a/mxpic/components/primitives/passive/rings.py
+++ b/mxpic/components/primitives/passive/rings.py
@@ -7,9 +7,9 @@ from ...basic import __xs_exist__
from ...geometry import *
import nazca.interconnects as IC
-class Route(IC.Interconnect):
- pass
-# from ...routing import *
+# class Route(IC.Interconnect):
+# pass
+from ...routing import Route
from .unit import *
@@ -182,8 +182,12 @@ class SOCR():
wg.taper(width1=self.w_cp, width2=self.w_wg, length=4.5, arrow=False).put()
wg_in = wg.strt(width=self.w_wg,length=0.5,arrow=False).put()
## Add pins
- nd.Pin(name="a1", width=self.w_wg).put(wg_in.pin['b0'])
- nd.Pin(name="b1", width=self.w_wg).put(wg_out.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1", width=self.w_wg).put(wg_in.pin['b0'])
+ nd.Pin(name="opt_a1", width=self.w_wg,type="optical:").put(wg_in.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1", width=self.w_wg).put(wg_out.pin['b0'])
+ nd.Pin(name="opt_b1", width=self.w_wg,type="optical:").put(wg_out.pin['b0'])
## Add patch
if self.sharp_patch and (layer_cld_name != "dump"):
# if hasattr(self.tapeout, "LAYER_STRIP_CLD"):
@@ -258,8 +262,12 @@ class SOCR():
pic = self.cell_pic.put(0, 0)
eic = self.cell_eic.put(0, 0)
## Add pins
- nd.Pin(name="a1", width=self.w_wg).put(pic.pin['a1'])
- nd.Pin(name="b1", width=self.w_wg).put(pic.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1", width=self.w_wg).put(pic.pin['a1'])
+ nd.Pin(name="opt_a1", width=self.w_wg,type="optical:").put(pic.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1", width=self.w_wg).put(pic.pin['b1'])
+ nd.Pin(name="opt_b1", width=self.w_wg,type="optical:").put(pic.pin['opt_b1'])
nd.Pin(name="ep1", width=eic.pin['ep1'].width).put(eic.pin['ep1'])
nd.Pin(name="en1", width=eic.pin['en1'].width).put(eic.pin['en1'])
if self.show_pins:
@@ -268,13 +276,21 @@ class SOCR():
def generate_2pi_gds(self, gap=10):
with nd.Cell(name=self.cell.cell_name+"_2pi", instantiate=False) as C:
- socr_1 = self.cell.put('a1',0,0,0)
- socr_2 = self.cell.put('a1', socr_1.pin['b1'].move(gap,0,0))
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: socr_1 = self.cell.put('a1',0,0,0)
+ socr_1 = self.cell.put('opt_a1',0,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: socr_2 = self.cell.put('a1', socr_1.pin['b1'].move(gap,0,0))
+ socr_2 = self.cell.put('opt_a1', socr_1.pin['opt_b1'].move(gap,0,0))
stripe = Route(xs='strip', width=self.w_wg, radius=5)
metal1 = Route(xs='metal', width=6, radius=0)
stripe.strt_p2p(
- pin1=socr_1.pin['b1'].move(-0.1,0,0),
- pin2=socr_2.pin['a1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=socr_1.pin['b1'].move(-0.1,0,0),
+ pin1=socr_1.pin['opt_b1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_2.pin['a1'].move(-0.1,0,0),
+ pin2=socr_2.pin['opt_a1'].move(-0.1,0,0),
arrow=False
).put()
metal1.strt_p2p(
@@ -282,8 +298,12 @@ class SOCR():
pin2=socr_2.pin['ep1'],
arrow=False
).put()
- nd.Pin(name='a1', width=self.w_wg).put(socr_1.pin['a1'])
- nd.Pin(name='b1', width=self.w_wg).put(socr_2.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1', width=self.w_wg).put(socr_1.pin['a1'])
+ nd.Pin(name='opt_a1', width=self.w_wg,type="optical:").put(socr_1.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1', width=self.w_wg).put(socr_2.pin['b1'])
+ nd.Pin(name='opt_b1', width=self.w_wg,type="optical:").put(socr_2.pin['opt_b1'])
nd.Pin(name='ep1',pin=socr_1.pin['ep1'].move(0,0,-90)).put()
nd.Pin(name='en1',pin=socr_2.pin['en1'].move(0,0, 90)).put()
return C
@@ -292,68 +312,116 @@ class SOCR():
with nd.Cell(name=self.cell.cell_name+"_test_mzi", instantiate=False) as C:
gc_input = gc.cell.put('g1', 0, 0, 180)
gc_output_mid = gc.cell.put('g1', gc2gc_length+mid_offset, 0, 0)
- mmi_input = mmi.cell.put('a1', 20, 0, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_input = mmi.cell.put('a1', 20, 0, 0)
+ mmi_input = mmi.cell.put('opt_a1', 20, 0, 0)
stripe = Route(xs='strip', width=gc.w_wg, radius=5)
# Connect input gc with first mmi
- stripe.strt_p2p(pin1=gc_input.pin['g1'], pin2=mmi_input.pin['a1'], arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.strt_p2p(pin1=gc_input.pin['g1'], pin2=mmi_input.pin['a1'], arrow=False).put()
+ stripe.strt_p2p(pin1=gc_input.pin['g1'], pin2=mmi_input.pin['opt_a1'], arrow=False).put()
# Connect the upper arm
- self.length = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.length = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ self.length = self.cell.pin['opt_b1'].x - self.cell.pin['opt_a1'].x
socr_cell = []
for _index_ in range(num_socr):
- cell = self.cell.put('a1', mmi_input.pin['b1'].x+30+(self.length+5)*_index_, 40, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell = self.cell.put('a1', mmi_input.pin['b1'].x+30+(self.length+5)*_index_, 40, 0)
+ cell = self.cell.put('opt_a1', mmi_input.pin['opt_b1'].x+30+(self.length+5)*_index_, 40, 0)
socr_cell.append(cell)
# socr_cell = pd.concat(socr_cell,cell)
if _index_>=1:
stripe.strt_p2p(
- pin1=socr_cell[_index_-1].pin['b1'].move(-0.1,0,0),
- pin2=socr_cell[_index_].pin['a1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=socr_cell[_index_-1].pin['b1'].move(-0.1,0,0),
+ pin1=socr_cell[_index_-1].pin['opt_b1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_cell[_index_].pin['a1'].move(-0.1,0,0),
+ pin2=socr_cell[_index_].pin['opt_a1'].move(-0.1,0,0),
arrow=False
).put()
nd.Pin(name="ep"+str(_index_+1),pin=cell.pin['ep1']).put()
nd.Pin(name="en"+str(_index_+1),pin=cell.pin['en1']).put()
stripe.sbend_p2p(
- pin1=mmi_input.pin['b1'],
- pin2=socr_cell[0].pin['a1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_input.pin['b1'],
+ pin1=mmi_input.pin['opt_b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_cell[0].pin['a1'].move(-0.1,0,0),
+ pin2=socr_cell[0].pin['opt_a1'].move(-0.1,0,0),
Lstart=1,
arrow=False).put()
- mmi_output_up = mmi.cell.put('a1', socr_cell[-1].pin['b1'].x+30, socr_cell[-1].pin['b1'].y, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_output_up = mmi.cell.put('a1', socr_cell[-1].pin['b1'].x+30, socr_cell[-1].pin['b1'].y, 0)
+ mmi_output_up = mmi.cell.put('opt_a1', socr_cell[-1].pin['opt_b1'].x+30, socr_cell[-1].pin['opt_b1'].y, 0)
stripe.strt_p2p(
- pin1=mmi_output_up.pin['a1'],
- pin2=socr_cell[-1].pin['b1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output_up.pin['a1'],
+ pin1=mmi_output_up.pin['opt_a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_cell[-1].pin['b1'].move(-0.1,0,0),
+ pin2=socr_cell[-1].pin['opt_b1'].move(-0.1,0,0),
arrow=False).put()
- gc_output_up = gc.cell.put('g1', gc2gc_length, mmi_output_up.pin['b1'].y, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: gc_output_up = gc.cell.put('g1', gc2gc_length, mmi_output_up.pin['b1'].y, 0)
+ gc_output_up = gc.cell.put('g1', gc2gc_length, mmi_output_up.pin['opt_b1'].y, 0)
stripe.strt_p2p(
- pin1=mmi_output_up.pin['b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output_up.pin['b1'],
+ pin1=mmi_output_up.pin['opt_b1'],
pin2=gc_output_up.pin['g1'],
arrow=False).put()
# Connect the below arm
- mmi_output_below = mmi.cell.put('a1', socr_cell[-1].pin['b1'].x+30, -socr_cell[-1].pin['b1'].y, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_output_below = mmi.cell.put('a1', socr_cell[-1].pin['b1'].x+30, -socr_cell[-1].pin['b1'].y, 0)
+ mmi_output_below = mmi.cell.put('opt_a1', socr_cell[-1].pin['opt_b1'].x+30, -socr_cell[-1].pin['opt_b1'].y, 0)
stripe.sbend_p2p(
- pin1=mmi_input.pin['b2'],
- pin2=mmi_output_below.pin['a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_input.pin['b2'],
+ pin1=mmi_input.pin['opt_b2'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=mmi_output_below.pin['a1'],
+ pin2=mmi_output_below.pin['opt_a1'],
Lstart=1,
arrow=False).put()
- gc_output_below = gc.cell.put('g1', gc2gc_length, mmi_output_below.pin['b2'].y, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: gc_output_below = gc.cell.put('g1', gc2gc_length, mmi_output_below.pin['b2'].y, 0)
+ gc_output_below = gc.cell.put('g1', gc2gc_length, mmi_output_below.pin['opt_b2'].y, 0)
stripe.strt_p2p(
- pin1=mmi_output_below.pin['b2'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output_below.pin['b2'],
+ pin1=mmi_output_below.pin['opt_b2'],
pin2=gc_output_below.pin['g1'],
arrow=False).put()
# Combine upper and below arm together to do the coherence detection
- mmi_output_mid = mmi.cell.put('a1', mmi_output_below.pin['b1'].x+mmi.length+20, gc_output_mid.pin['g1'].y, 180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mmi_output_mid = mmi.cell.put('a1', mmi_output_below.pin['b1'].x+mmi.length+20, gc_output_mid.pin['g1'].y, 180)
+ mmi_output_mid = mmi.cell.put('opt_a1', mmi_output_below.pin['opt_b1'].x+mmi.length+20, gc_output_mid.pin['g1'].y, 180)
stripe.strt_p2p(
- pin1=mmi_output_mid.pin['a1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output_mid.pin['a1'],
+ pin1=mmi_output_mid.pin['opt_a1'],
pin2=gc_output_mid.pin['g1'],
arrow=False).put()
stripe.sbend_p2p(
- pin1=mmi_output_up.pin['b2'],
- pin2=mmi_output_mid.pin['b2'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output_up.pin['b2'],
+ pin1=mmi_output_up.pin['opt_b2'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=mmi_output_mid.pin['b2'],
+ pin2=mmi_output_mid.pin['opt_b2'],
Lstart=1,
arrow=False).put()
stripe.sbend_p2p(
- pin1=mmi_output_below.pin['b1'],
- pin2=mmi_output_mid.pin['b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=mmi_output_below.pin['b1'],
+ pin1=mmi_output_below.pin['opt_b1'],
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=mmi_output_mid.pin['b1'],
+ pin2=mmi_output_mid.pin['opt_b1'],
Lstart=1,
arrow=False).put()
if show_pins : nd.put_stub()
@@ -367,27 +435,39 @@ class SOCR():
gc_output = gc.cell.put('g1',gc2gc_length, 0, 0)
stripe = Route(xs='strip', width=gc.w_wg, radius=5)
# Add test structure
- self.length = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.length = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ self.length = self.cell.pin['opt_b1'].x - self.cell.pin['opt_a1'].x
socr_cell = []
for _index_ in range(num_socr):
- cell = self.cell.put('a1', gc_input.pin['g1'].x+10+(self.length+5)*_index_, 0, 0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: cell = self.cell.put('a1', gc_input.pin['g1'].x+10+(self.length+5)*_index_, 0, 0)
+ cell = self.cell.put('opt_a1', gc_input.pin['g1'].x+10+(self.length+5)*_index_, 0, 0)
socr_cell.append(cell)
# socr_cell = pd.concat(socr_cell,[cell])
if _index_>=1:
stripe.strt_p2p(
- pin1=socr_cell[_index_-1].pin['b1'].move(-0.1,0,0),
- pin2=socr_cell[_index_].pin['a1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin1=socr_cell[_index_-1].pin['b1'].move(-0.1,0,0),
+ pin1=socr_cell[_index_-1].pin['opt_b1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_cell[_index_].pin['a1'].move(-0.1,0,0),
+ pin2=socr_cell[_index_].pin['opt_a1'].move(-0.1,0,0),
arrow=False).put()
if num_socr>=1:
stripe.strt_p2p(
pin1=gc_input.pin['g1'],
- pin2=socr_cell[0].pin['a1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_cell[0].pin['a1'].move(-0.1,0,0),
+ pin2=socr_cell[0].pin['opt_a1'].move(-0.1,0,0),
arrow=False).put()
stripe.strt_p2p(
pin1=gc_output.pin['g1'],
- pin2=socr_cell[-1].pin['b1'].move(-0.1,0,0),
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin2=socr_cell[-1].pin['b1'].move(-0.1,0,0),
+ pin2=socr_cell[-1].pin['opt_b1'].move(-0.1,0,0),
arrow=False).put()
else:
stripe.strt_p2p(
@@ -610,8 +690,12 @@ class SOCR_Adiabatic(SOCR):
nd.Polygon(points=rect_poly, layer=layer_cld_name).put(0,0)
nd.Polygon(points=rect_poly, layer=layer_cld_name).put(0,0,flip=True)
## Add pins
- nd.Pin(name="a1", width=self.w_wg).put(wg_in.pin['b0'])
- nd.Pin(name="b1", width=self.w_wg).put(wg_out.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1", width=self.w_wg).put(wg_in.pin['b0'])
+ nd.Pin(name="opt_a1", width=self.w_wg,type="optical:").put(wg_in.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1", width=self.w_wg).put(wg_out.pin['b0'])
+ nd.Pin(name="opt_b1", width=self.w_wg,type="optical:").put(wg_out.pin['b0'])
if self.show_pins:
nd.put_stub()
self.cell = C
@@ -994,12 +1078,18 @@ class MRR_AED(AED_ring):
if (self.isl!=None):
if (self.w2_bus>0):
- L_isl = np.abs(self.cell_pic.pin['a1'].y - self.cell_pic.pin['a2'].y) - self.isl.sp_isl_wg*2 - self.w_wg
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L_isl = np.abs(self.cell_pic.pin['a1'].y - self.cell_pic.pin['a2'].y) - self.isl.sp_isl_wg*2 - self.w_wg
+ L_isl = np.abs(self.cell_pic.pin['opt_a1'].y - self.cell_pic.pin['opt_a2'].y) - self.isl.sp_isl_wg*2 - self.w_wg
else:
- L_isl = np.abs(self.ORy - self.cell_pic.pin['a1'].y) - self.isl.sp_isl_wg - self.w_wg/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L_isl = np.abs(self.ORy - self.cell_pic.pin['a1'].y) - self.isl.sp_isl_wg - self.w_wg/2
+ L_isl = np.abs(self.ORy - self.cell_pic.pin['opt_a1'].y) - self.isl.sp_isl_wg - self.w_wg/2
- y_isl = self.cell_pic.pin['a1'].y + self.isl.sp_isl_wg + self.w_wg/2
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: y_isl = self.cell_pic.pin['a1'].y + self.isl.sp_isl_wg + self.w_wg/2
+ y_isl = self.cell_pic.pin['opt_a1'].y + self.isl.sp_isl_wg + self.w_wg/2
if (L_isl>self.isl.width):
x_isl = self.ORx+self.isl.sp_isl_metal+self.isl.width/2
@@ -2174,13 +2264,25 @@ class STD_ring_AMZI_adddrop:
pic_strip = Route(radius=self.R_bend,width=self.w_wg,xs=self.xs_wg)
- nd.Pin(name='a2',pin=cp_D.pin['a1']).put()
- nd.Pin(name='a1',pin=cp_L.pin['b1']).put()
- nd.Pin(name='b2',pin=cp_R.pin['a1']).put()
- nd.Pin(name='b1',pin=cp_U.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=cp_D.pin['a1']).put()
+ nd.Pin(name='opt_a2',pin=cp_D.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=cp_L.pin['b1']).put()
+ nd.Pin(name='opt_a1',pin=cp_L.pin['opt_b1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=cp_R.pin['a1']).put()
+ nd.Pin(name='opt_b2',pin=cp_R.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=cp_U.pin['b1']).put()
+ nd.Pin(name='opt_b1',pin=cp_U.pin['opt_b1'],type="optical:").put()
- x_BOX = abs(cp_D.pin['a1'].x - cp_R.pin['a1'].x)*np.sqrt(2)
- y_BOX = abs(cp_D.pin['a1'].y - cp_R.pin['a1'].y)*np.sqrt(2)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: x_BOX = abs(cp_D.pin['a1'].x - cp_R.pin['a1'].x)*np.sqrt(2)
+ x_BOX = abs(cp_D.pin['opt_a1'].x - cp_R.pin['opt_a1'].x)*np.sqrt(2)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: y_BOX = abs(cp_D.pin['a1'].y - cp_R.pin['a1'].y)*np.sqrt(2)
+ y_BOX = abs(cp_D.pin['opt_a1'].y - cp_R.pin['opt_a1'].y)*np.sqrt(2)
if (sharp_patch):
nd.strt(layer="STRIP_CLD",length=x_BOX/2,width=y_BOX).put(0,0,45)
@@ -2202,11 +2304,19 @@ class STD_ring_AMZI_adddrop:
# via = Vias(xs=self.xs_via_h2m,xs_l1=self.xs_metal,xs_l2=self.xs_heater,sz=self.sz_via_h2m,spacing=self.sp_via_h2m,area=self.w_metal).cell
- V1_UR = via.put(HT_UR.pin['a1'].x,HT_UR.pin['a1'].y,45)
- V2_UR = via.put(HT_UR.pin['b1'].x,HT_UR.pin['b1'].y,45)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: V1_UR = via.put(HT_UR.pin['a1'].x,HT_UR.pin['a1'].y,45)
+ V1_UR = via.put(HT_UR.pin['opt_a1'].x,HT_UR.pin['opt_a1'].y,45)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: V2_UR = via.put(HT_UR.pin['b1'].x,HT_UR.pin['b1'].y,45)
+ V2_UR = via.put(HT_UR.pin['opt_b1'].x,HT_UR.pin['opt_b1'].y,45)
- V1_DL = via.put(HT_DL.pin['a1'].x,HT_DL.pin['a1'].y,45)
- V2_DL = via.put(HT_DL.pin['b1'].x,HT_DL.pin['b1'].y,45)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: V1_DL = via.put(HT_DL.pin['a1'].x,HT_DL.pin['a1'].y,45)
+ V1_DL = via.put(HT_DL.pin['opt_a1'].x,HT_DL.pin['opt_a1'].y,45)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: V2_DL = via.put(HT_DL.pin['b1'].x,HT_DL.pin['b1'].y,45)
+ V2_DL = via.put(HT_DL.pin['opt_b1'].x,HT_DL.pin['opt_b1'].y,45)
eic_m = Route(radius=self.w_metal/2,width=self.w_metal,xs=self.xs_metal,PCB=True)
@@ -2216,7 +2326,9 @@ class STD_ring_AMZI_adddrop:
nd.Pin(name='ep1',pin=V1_DL.pin['a0']).put()
""" Generating the heaters for MZI part """
- uoffst = np.sqrt(abs(cp_U.pin['a1'].x - cp_L.pin['a1'].x)**2 + abs(cp_U.pin['a1'].y - cp_L.pin['a1'].y)**2)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: uoffst = np.sqrt(abs(cp_U.pin['a1'].x - cp_L.pin['a1'].x)**2 + abs(cp_U.pin['a1'].y - cp_L.pin['a1'].y)**2)
+ uoffst = np.sqrt(abs(cp_U.pin['opt_a1'].x - cp_L.pin['opt_a1'].x)**2 + abs(cp_U.pin['opt_a1'].y - cp_L.pin['opt_a1'].y)**2)
HT = waveguide(w_heater=self.w_heater,xs_heater=self.xs_heater,
via_h2m=self.via_h2m,
isl = self.isl,
@@ -2228,8 +2340,12 @@ class STD_ring_AMZI_adddrop:
L_wg=self.dL_arm+uoffst+(np.pi-2)*self.R_bend,
L_heater=uoffst+(np.pi-2)*self.R_bend+self.dL_arm/2)
- HT_U = HT.cell.put('a1',cp_L.pin['a1'])
- HT_D = HT.cell.put('a1',cp_R.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: HT_U = HT.cell.put('a1',cp_L.pin['a1'])
+ HT_U = HT.cell.put('opt_a1',cp_L.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: HT_D = HT.cell.put('a1',cp_R.pin['b1'])
+ HT_D = HT.cell.put('opt_a1',cp_R.pin['opt_b1'])
nd.Pin(name='ep2',pin=HT_U.pin['ep1'].move(0,0,90)).put()
nd.Pin(name='en2',pin=HT_U.pin['en1'].move(0,0,-90)).put()
diff --git a/mxpic/components/primitives/passive/unit.py b/mxpic/components/primitives/passive/unit.py
index 3c5597a..4679a4d 100644
--- a/mxpic/components/primitives/passive/unit.py
+++ b/mxpic/components/primitives/passive/unit.py
@@ -125,8 +125,12 @@ class waveguide:
nd.taper(length=Ltp,width1=w_port,width2=w_wg,xs=xs_wg).put(-L_wg/2,0,0)
nd.strt(length=L_wg-2*Ltp,width=w_wg,xs=xs_wg).put()
nd.taper(length=Ltp,width2=w_port,width1=w_wg,xs=xs_wg).put()
- nd.Pin(name='a1',width=w_wg).put(-L_wg/2,0,180)
- nd.Pin(name='b1',width=w_wg).put( L_wg/2,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=w_wg).put(-L_wg/2,0,180)
+ nd.Pin(name='opt_a1',width=w_wg,type="optical:").put(-L_wg/2,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=w_wg).put( L_wg/2,0,0)
+ nd.Pin(name='opt_b1',width=w_wg,type="optical:").put( L_wg/2,0,0)
L_heater = np.min([L_wg,L_heater])
### placing heaters
@@ -170,8 +174,12 @@ class waveguide:
wg_in = nd.strt(length=L_wg_side,width=w_wg,xs=xs_wg).put(-ubend_offset/2,0,90)
bd.cell.put(flip=1)
wg_out = nd.strt(length=L_wg_side,width=w_wg,xs=xs_wg).put()
- nd.Pin(name='a1',width=w_wg,pin=wg_in.pin['a0']).put()
- nd.Pin(name='b1',width=w_wg,pin=wg_out.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=w_wg,pin=wg_in.pin['a0']).put()
+ nd.Pin(name='opt_a1',width=w_wg,pin=wg_in.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=w_wg,pin=wg_out.pin['b0']).put()
+ nd.Pin(name='opt_b1',width=w_wg,pin=wg_out.pin['b0'],type="optical:").put()
else:
R_ht = R_bend
L_wg_mid = ubend_offset-R_bend*2
@@ -181,8 +189,12 @@ class waveguide:
nd.strt(length=L_wg_mid,width=w_wg,xs=xs_wg).put()
nd.bend(radius=R_bend,width=w_wg,xs=xs_wg).put(flip=1)
wg_out = nd.strt(length=L_wg_side,width=w_wg,xs=xs_wg).put()
- nd.Pin(name='a1',width=w_wg,pin=wg_in.pin['a0']).put()
- nd.Pin(name='b1',width=w_wg,pin=wg_out.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=w_wg,pin=wg_in.pin['a0']).put()
+ nd.Pin(name='opt_a1',width=w_wg,pin=wg_in.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=w_wg,pin=wg_out.pin['b0']).put()
+ nd.Pin(name='opt_b1',width=w_wg,pin=wg_out.pin['b0'],type="optical:").put()
L_heater = np.max([L_wg_mid+R_bend+w_metal*2,L_heater])
L_heater = np.min([L_wg,L_heater])
@@ -412,8 +424,12 @@ class PS_2st:
VIA_L.pin['b0'].y+self.w_metal/2+self.isl.sp_isl_metal + L_side,0)
- nd.Pin(name='a1',pin=start.pin['a0']).put()
- nd.Pin(name='b1',pin=end.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=start.pin['a0']).put()
+ nd.Pin(name='opt_a1',pin=start.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=end.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=end.pin['b0'],type="optical:").put()
return C
@@ -565,8 +581,12 @@ class PS_2st_Straight:
""" Placing Isolation trench with the parameter pack """
- nd.Pin(name='a1',pin=start.pin['a0']).put()
- nd.Pin(name='b1',pin=end.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=start.pin['a0']).put()
+ nd.Pin(name='opt_a1',pin=start.pin['a0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=end.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=end.pin['b0'],type="optical:").put()
return C
@@ -600,21 +620,35 @@ class PSR_1x2:
with nd.Cell(instantiate=False) as C:
- PSR_inst = PSR_cell.put('a1',0,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: PSR_inst = PSR_cell.put('a1',0,0,0)
+ PSR_inst = PSR_cell.put('opt_a1',0,0,0)
- MDM_inst = MDM_cell.put('b1',PSR_inst.pin['b1'].x+L_tp,PSR_inst.pin['b1'].y,PSR_inst.pin['b1'].a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: MDM_inst = MDM_cell.put('b1',PSR_inst.pin['b1'].x+L_tp,PSR_inst.pin['b1'].y,PSR_inst.pin['b1'].a)
+ MDM_inst = MDM_cell.put('opt_b1',PSR_inst.pin['opt_b1'].x+L_tp,PSR_inst.pin['opt_b1'].y,PSR_inst.pin['opt_b1'].a)
# taper_xs2xs(xs_1=MDM_inst.pin['b1'].xs,xs_2=PSR_inst.pin['b1'].xs,w_1=MDM_inst.pin['b1'].width,w_2=PSR_inst.pin['b1'].width,L_taper=L_tp).cell.put(MDM_inst.pin['b1'])
- nd.taper(length=L_tp,width1=PSR_inst.pin['b1'].width,width2=MDM_inst.pin['b1'].width,xs=xs).put(PSR_inst.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(length=L_tp,width1=PSR_inst.pin['b1'].width,width2=MDM_inst.pin['b1'].width,xs=xs).put(PSR_inst.pin['b1'])
+ nd.taper(length=L_tp,width1=PSR_inst.pin['opt_b1'].width,width2=MDM_inst.pin['opt_b1'].width,xs=xs).put(PSR_inst.pin['opt_b1'])
- nd.Pin(name='a1',pin=PSR_inst.pin['a1']).put()
- nd.Pin(name='b1',pin=MDM_inst.pin['a1']).put()
- nd.Pin(name='b2',pin=MDM_inst.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=PSR_inst.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=PSR_inst.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=MDM_inst.pin['a1']).put()
+ nd.Pin(name='opt_b1',pin=MDM_inst.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=MDM_inst.pin['a2']).put()
+ nd.Pin(name='opt_b2',pin=MDM_inst.pin['opt_a2'],type="optical:").put()
if (show_pins):
nd.put_stub(pinsize=2)
self.cell = C
- self.L = np.abs(self.cell.pin['a1'].x - np.max([self.cell.pin['b1'].x,self.cell.pin['b2'].x]))
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x - np.max([self.cell.pin['b1'].x,self.cell.pin['b2'].x]))
+ self.L = np.abs(self.cell.pin['opt_a1'].x - np.max([self.cell.pin['opt_b1'].x,self.cell.pin['opt_b2'].x]))
def generate_test_gds(self,gc,gc_IN=None,gc2gc_dX=140,gc2gc_dY=40):
with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C:
@@ -634,9 +668,15 @@ class PSR_1x2:
PSR_test = self.cell.put(-self.L/2,0,0)
stripe=Route(radius=10, width=self.w_wg, xs="strip")
- stripe.taper_p2p(pin1=PSR_test.pin['a1'],pin2=GC_I.pin['g1'],arrow=False).put()
- stripe.sbend_p2p(pin1=PSR_test.pin['b1'],pin2=GC_OU.pin['g1'],arrow=False).put()
- stripe.sbend_p2p(pin1=PSR_test.pin['b2'],pin2=GC_OD.pin['g1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.taper_p2p(pin1=PSR_test.pin['a1'],pin2=GC_I.pin['g1'],arrow=False).put()
+ stripe.taper_p2p(pin1=PSR_test.pin['opt_a1'],pin2=GC_I.pin['g1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=PSR_test.pin['b1'],pin2=GC_OU.pin['g1'],arrow=False).put()
+ stripe.sbend_p2p(pin1=PSR_test.pin['opt_b1'],pin2=GC_OU.pin['g1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=PSR_test.pin['b2'],pin2=GC_OD.pin['g1'],arrow=False).put()
+ stripe.sbend_p2p(pin1=PSR_test.pin['opt_b2'],pin2=GC_OD.pin['g1'],arrow=False).put()
return C
@@ -669,20 +709,34 @@ class Brag_WDM:
with nd.Cell(instantiate=False) as C:
- Brag_inst = Brag_cell.put('a1',0,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Brag_inst = Brag_cell.put('a1',0,0,0)
+ Brag_inst = Brag_cell.put('opt_a1',0,0,0)
- MDM_inst = MDM_cell.put('b1',Brag_inst.pin['a1'].x-L_tp,Brag_inst.pin['a1'].y,Brag_inst.pin['a1'].a)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: MDM_inst = MDM_cell.put('b1',Brag_inst.pin['a1'].x-L_tp,Brag_inst.pin['a1'].y,Brag_inst.pin['a1'].a)
+ MDM_inst = MDM_cell.put('opt_b1',Brag_inst.pin['opt_a1'].x-L_tp,Brag_inst.pin['opt_a1'].y,Brag_inst.pin['opt_a1'].a)
- nd.taper(length=L_tp,width1=Brag_inst.pin['b1'].width,width2=MDM_inst.pin['b1'].width,xs='strip').put(Brag_inst.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(length=L_tp,width1=Brag_inst.pin['b1'].width,width2=MDM_inst.pin['b1'].width,xs='strip').put(Brag_inst.pin['a1'])
+ nd.taper(length=L_tp,width1=Brag_inst.pin['opt_b1'].width,width2=MDM_inst.pin['opt_b1'].width,xs='strip').put(Brag_inst.pin['opt_a1'])
- nd.Pin(name='b1',pin=Brag_inst.pin['b1']).put()
- nd.Pin(name='a1',pin=MDM_inst.pin['a1']).put()
- nd.Pin(name='b2',pin=MDM_inst.pin['a2']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=Brag_inst.pin['b1']).put()
+ nd.Pin(name='opt_b1',pin=Brag_inst.pin['opt_b1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=MDM_inst.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=MDM_inst.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=MDM_inst.pin['a2']).put()
+ nd.Pin(name='opt_b2',pin=MDM_inst.pin['opt_a2'],type="optical:").put()
if (show_pins):
nd.put_stub(pinsize=2)
self.cell = C
- self.L = np.abs(self.cell.pin['a1'].x - np.max([self.cell.pin['b1'].x,self.cell.pin['b2'].x]))
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x - np.max([self.cell.pin['b1'].x,self.cell.pin['b2'].x]))
+ self.L = np.abs(self.cell.pin['opt_a1'].x - np.max([self.cell.pin['opt_b1'].x,self.cell.pin['opt_b2'].x]))
def generate_test_gds(self,gc,gc2gc_dX=140,gc2gc_dY=40,dX_offset=50):
with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C:
@@ -697,13 +751,21 @@ class Brag_WDM:
GC_O1 = gc_cell.put('g1', gc2gc_dX/2,0,0)
GC_O2 = gc_cell.put('g1', gc2gc_dX/2+dX_offset,-gc2gc_dY,0)
- INSTR = self.cell.put('a1',-self.L/2,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: INSTR = self.cell.put('a1',-self.L/2,0,0)
+ INSTR = self.cell.put('opt_a1',-self.L/2,0,0)
stripe=Route(radius=10, width=self.w_wg, xs="strip")
- stripe.taper_p2p(pin1=INSTR.pin['a1'],pin2=GC_I.pin['g1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.taper_p2p(pin1=INSTR.pin['a1'],pin2=GC_I.pin['g1'],arrow=False).put()
+ stripe.taper_p2p(pin1=INSTR.pin['opt_a1'],pin2=GC_I.pin['g1'],arrow=False).put()
- stripe.taper(pin=INSTR.pin['b1'],width1=INSTR.pin['b1'].width,width2=GC_O1.pin['g1'].width,length=10,arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.taper(pin=INSTR.pin['b1'],width1=INSTR.pin['b1'].width,width2=GC_O1.pin['g1'].width,length=10,arrow=False).put()
+ stripe.taper(pin=INSTR.pin['opt_b1'],width1=INSTR.pin['opt_b1'].width,width2=GC_O1.pin['g1'].width,length=10,arrow=False).put()
stripe.sbend_p2p(pin2=GC_O1.pin['g1'],arrow=False).put()
- stripe.ubend_p2p(pin1=INSTR.pin['b2'],pin2=GC_O2.pin['g1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.ubend_p2p(pin1=INSTR.pin['b2'],pin2=GC_O2.pin['g1'],arrow=False).put()
+ stripe.ubend_p2p(pin1=INSTR.pin['opt_b2'],pin2=GC_O2.pin['g1'],arrow=False).put()
return C
diff --git a/mxpic/components/primitives/pic/PBS.py b/mxpic/components/primitives/pic/PBS.py
index 683b909..976971e 100644
--- a/mxpic/components/primitives/pic/PBS.py
+++ b/mxpic/components/primitives/pic/PBS.py
@@ -95,8 +95,12 @@ class PBS_3wg:
Att_D = nd.taper(length=5,width1=self.w2_tp,width2=self.w_wg,xs=self.xs).put(Att_D.pin['b0'])
Att_U = nd.taper(length=5,width1=self.w1_tp,width2=self.w_wg,xs=self.xs).put(Att_U.pin['b0'])
- nd.Pin(name='a1',pin=Att_U.pin['b0']).put()
- nd.Pin(name='a2',pin=Att_D.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=Att_U.pin['b0']).put()
+ nd.Pin(name='opt_a1',pin=Att_U.pin['b0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=Att_D.pin['b0']).put()
+ nd.Pin(name='opt_a2',pin=Att_D.pin['b0'],type="optical:").put()
nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(Att_U.pin['b0'].x-w_crack/2,Att_U.pin['b0'].y,0)
nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(Att_D.pin['b0'].x-w_crack/2,Att_D.pin['b0'].y,0)
@@ -111,8 +115,12 @@ class PBS_3wg:
Att_D = nd.taper(length=5,width1=self.w1_tp,width2=self.w_wg,xs=self.xs).put(Att_D.pin['b0'])
Att_U = nd.taper(length=5,width1=self.w2_tp,width2=self.w_wg,xs=self.xs).put(Att_U.pin['b0'])
- nd.Pin(name='b1',pin=Att_U.pin['b0']).put()
- nd.Pin(name='b2',pin=Att_D.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=Att_U.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=Att_U.pin['b0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=Att_D.pin['b0']).put()
+ nd.Pin(name='opt_b2',pin=Att_D.pin['b0'],type="optical:").put()
nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(Att_U.pin['b0'].x-w_crack/2,Att_U.pin['b0'].y,0)
nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(Att_D.pin['b0'].x-w_crack/2,Att_D.pin['b0'].y,0)
diff --git a/mxpic/components/primitives/pic/YBS.py b/mxpic/components/primitives/pic/YBS.py
index ca4d7f7..6c32963 100644
--- a/mxpic/components/primitives/pic/YBS.py
+++ b/mxpic/components/primitives/pic/YBS.py
@@ -116,15 +116,29 @@ class YBranch:
vtx = np.c_[vtx_x,vtx_y]
_my_polygon(layer_wg=layers,vtx=vtx).put(0,0,0)
- temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('a1',self.L,self.w[-1]/2 - self.w_port/2,0)
- temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('a1',temp.pin['b1'],flip=1)
- nd.Pin(name='b1',width=self.w_port).put(temp.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('a1',self.L,self.w[-1]/2 - self.w_port/2,0)
+ temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('opt_a1',self.L,self.w[-1]/2 - self.w_port/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('a1',temp.pin['b1'],flip=1)
+ temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('opt_a1',temp.pin['opt_b1'],flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_port).put(temp.pin['b1'])
+ nd.Pin(name='opt_b1',width=self.w_port,type="optical:").put(temp.pin['opt_b1'])
- temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('a1',self.L,-self.w[-1]/2 + self.w_port/2,0,flip=1)
- temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('a1',temp.pin['b1'],flip=0)
- nd.Pin(name='b2',width=self.w_port).put(temp.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('a1',self.L,-self.w[-1]/2 + self.w_port/2,0,flip=1)
+ temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('opt_a1',self.L,-self.w[-1]/2 + self.w_port/2,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('a1',temp.pin['b1'],flip=0)
+ temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('opt_a1',temp.pin['opt_b1'],flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',width=self.w_port).put(temp.pin['b1'])
+ nd.Pin(name='opt_b2',width=self.w_port,type="optical:").put(temp.pin['opt_b1'])
- nd.Pin(name='a1',width=self.w[0]).put(0,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w[0]).put(0,0,180)
+ nd.Pin(name='opt_a1',width=self.w[0],type="optical:").put(0,0,180)
if (show_pins):
nd.put_stub()
@@ -227,7 +241,9 @@ class Ybranch_3wg:
self.L_in_tp = L_in_tp
self.cell = self.generate_gds(sharp_patch=sharp_patch)
- self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ self.L = np.abs(self.cell.pin['opt_a1'].x - self.cell.pin['opt_b1'].x)
def generate_gds(self,sharp_patch,err_asy=0):
with nd.Cell(instantiate=self.instantiate,name=self.name) as C:
@@ -248,19 +264,25 @@ class Ybranch_3wg:
t_d = nd.taper(width2=w0,width1=w1,length=Lcp,xs=xs).put(0,-(w1/2+w0/2+gap),0)
t_in = nd.taper(width1=w_wg,width2=w0,length=L_in_tp,xs=xs).put(-L_in_tp,0,0)
t_in = nd.strt(width=w_wg,length=L_attach,xs=xs).put(t_in.pin['a0'],flip=0)
- nd.Pin(name='a1',pin=t_in.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=t_in.pin['b0']).put()
+ nd.Pin(name='opt_a1',pin=t_in.pin['b0'],type="optical:").put()
au = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(t_u.pin['b0'],flip=0)
au = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(au.pin['b0'],flip=1)
au = nd.taper(width1=w0,width2=w_wg,length=L_in_tp,xs=xs).put(au.pin['b0'],flip=0)
au = nd.strt(width=w_wg,length=L_attach,xs=xs).put(au.pin['b0'],flip=0)
- nd.Pin(name='b1',pin=au.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=au.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=au.pin['b0'],type="optical:").put()
ad = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(t_d.pin['b0'],flip=1)
ad = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(ad.pin['b0'],flip=0)
ad = nd.taper(width1=w0,width2=w_wg,length=L_in_tp,xs=xs).put(ad.pin['b0'],flip=0)
ad = nd.strt(width=w_wg,length=L_attach,xs=xs).put(ad.pin['b0'],flip=0)
- nd.Pin(name='b2',pin=ad.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=ad.pin['b0']).put()
+ nd.Pin(name='opt_b2',pin=ad.pin['b0'],type="optical:").put()
if (sharp_patch==True):
@@ -279,7 +301,9 @@ class Ybranch_3wg:
gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::Ybranch_3wg::generate_test_gds")
- inst = self.cell.put('a1',-self.L/2,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: inst = self.cell.put('a1',-self.L/2,0,0)
+ inst = self.cell.put('opt_a1',-self.L/2,0,0)
gc_In = gc_cell.put('g1',-dX_gc2gc/2,0,180)
gc_O1 = gc_cell.put('g1',dX_gc2gc/2, dY_gc2gc/2,0)
@@ -287,10 +311,16 @@ class Ybranch_3wg:
pic_strip = Route(radius=Rbend,width=self.w_wg,xs=self.xs)
pic_strip.taper(pin=gc_O1.pin['g1'],width1=gc_O1.pin['g1'].width,width2=self.w_wg,length=5,arrow=False)
- pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['b1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['b1'],arrow=False).put()
+ pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['opt_b1'],arrow=False).put()
pic_strip.taper(pin=gc_O2.pin['g1'],width1=gc_O2.pin['g1'].width,width2=self.w_wg,length=5,arrow=False)
- pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['b2'],arrow=False).put()
- pic_strip.taper_p2p(pin1=gc_In.pin['g1'],pin2=inst.pin['a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['b2'],arrow=False).put()
+ pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['opt_b2'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.taper_p2p(pin1=gc_In.pin['g1'],pin2=inst.pin['a1'],arrow=False).put()
+ pic_strip.taper_p2p(pin1=gc_In.pin['g1'],pin2=inst.pin['opt_a1'],arrow=False).put()
return C
diff --git a/mxpic/components/primitives/pic/__init__.py b/mxpic/components/primitives/pic/__init__.py
index f2d875f..4cc3c8f 100644
--- a/mxpic/components/primitives/pic/__init__.py
+++ b/mxpic/components/primitives/pic/__init__.py
@@ -29,4 +29,6 @@ from .PBS import PBS_3wg
from .YBS import YBranch,Ybranch_3wg
-from .racetrack import RacetrackResonator,Racetrack_MM_Adddrop,Racetrack_MM_Allpass,Racetrack_STD_Allpass
\ No newline at end of file
+from .racetrack import RacetrackResonator,Racetrack_MM_Adddrop,Racetrack_MM_Allpass,Racetrack_STD_Allpass
+
+from .edge_couplers import EC_dual_layer_px3
\ No newline at end of file
diff --git a/mxpic/components/primitives/pic/bragg.py b/mxpic/components/primitives/pic/bragg.py
index be599d1..79179dd 100644
--- a/mxpic/components/primitives/pic/bragg.py
+++ b/mxpic/components/primitives/pic/bragg.py
@@ -134,8 +134,12 @@ class Bragg_apodized:
nd.strt(length=self.Period*(1-self.eta_etch),width=self.dT,xs=self.xs).put(_X_,_Y_,0)
nd.strt(length=self.Period*(1-self.eta_etch),width=self.dT,xs=self.xs).put(_X_+ds,-_Y_,0)
- nd.Pin(name='a1',pin=INSTR.pin['a0'],width=self.w).put()
- nd.Pin(name='b1',pin=INSTR.pin['b0'],width=self.w).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=INSTR.pin['a0'],width=self.w).put()
+ nd.Pin(name='opt_a1',pin=INSTR.pin['a0'],width=self.w,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=INSTR.pin['b0'],width=self.w).put()
+ nd.Pin(name='opt_b1',pin=INSTR.pin['b0'],width=self.w,type="optical:").put()
if (self.show_pins):
nd.put_stub(pinsize=3)
return C
@@ -147,8 +151,12 @@ class Bragg_apodized:
L_brg = self.Period*self.N
INSTR = nd.strt(length=L_brg,width=self.w,xs=self.xs).put(0,0,0)
- nd.Pin(name='a1',pin=INSTR.pin['a0'],width=self.w).put()
- nd.Pin(name='b1',pin=INSTR.pin['b0'],width=self.w).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=INSTR.pin['a0'],width=self.w).put()
+ nd.Pin(name='opt_a1',pin=INSTR.pin['a0'],width=self.w,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=INSTR.pin['b0'],width=self.w).put()
+ nd.Pin(name='opt_b1',pin=INSTR.pin['b0'],width=self.w,type="optical:").put()
for idx in range(0,self.N):
_X_ = idx*self.Period + (1-self.eta_etch)*self.Period
_Y_ = w_core/2 + self.dT/2
diff --git a/mxpic/components/primitives/pic/couplers.py b/mxpic/components/primitives/pic/couplers.py
index 90f65dd..7652feb 100644
--- a/mxpic/components/primitives/pic/couplers.py
+++ b/mxpic/components/primitives/pic/couplers.py
@@ -167,8 +167,12 @@ class ring_bus_wg :
w=[self.w_bus,self.w_bus,self.w_trans,(self.w_trans+self.w_wg)/2,self.w_wg],xs=self.xs,
spiral_order=[1,self.clothoid_order,1,1],
sharp_patch=sharp_patch,end_patch=self.end_patch)
- ar = cp.cell.put('a1',0,0,0).pin['b1']
- al = cp.cell.put('a1',0,0,180,flip=1).pin['b1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ar = cp.cell.put('a1',0,0,0).pin['b1']
+ ar = cp.cell.put('opt_a1',0,0,0).pin['opt_b1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: al = cp.cell.put('a1',0,0,180,flip=1).pin['b1']
+ al = cp.cell.put('opt_a1',0,0,180,flip=1).pin['opt_b1']
nd.strt(length=w_crack,width=self.w_bus,xs=self.xs).put(-w_crack/2,0,0)
nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(ar.x-w_crack/2,ar.y,0)
@@ -183,8 +187,12 @@ class ring_bus_wg :
cp = circle(xs=self.xs,radius=self.R_cp, width = self.w_bus, theta_start = 270-self.dAc/2, theta_stop=270+self.dAc/2,res=self.res,
# n_points=self.n_points,
sharp_patch=sharp_patch).cell.put(0,self.R_cp,0)
- al = cp.pin['a1']
- ar = cp.pin['b1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: al = cp.pin['a1']
+ al = cp.pin['opt_a1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ar = cp.pin['b1']
+ ar = cp.pin['opt_b1']
self.L = self.L + self.R_cp*self.dAc/180*np.pi
@@ -201,8 +209,12 @@ class ring_bus_wg :
Anti = circle(xs=self.xs,radius=self.R_max_anti, width = self.w_trans, theta_start = 90, theta_stop=90+self.A_anti,res=self.res,
# n_points=self.n_points,
sharp_patch=sharp_patch)
- ar = Anti.cell.put('b1',TR.pin['b0']).pin['a1']
- al = Anti.cell.put('b1',TL.pin['b0'],flip=1).pin['a1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: ar = Anti.cell.put('b1',TR.pin['b0']).pin['a1']
+ ar = Anti.cell.put('opt_b1',TR.pin['b0']).pin['opt_a1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: al = Anti.cell.put('b1',TL.pin['b0'],flip=1).pin['a1']
+ al = Anti.cell.put('opt_b1',TL.pin['b0'],flip=1).pin['opt_a1']
self.L = self.L + self.R_max_anti*self.A_anti*2*180/np.pi
@@ -221,8 +233,12 @@ class ring_bus_wg :
self.L = self.L + dL_patch*2
# self.dL_patch = dL_patch
- nd.Pin(name='a1',pin=TPL.pin['b0'],width=self.w_wg).put()
- nd.Pin(name='b1',pin=TPR.pin['b0'],width=self.w_wg).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=TPL.pin['b0'],width=self.w_wg).put()
+ nd.Pin(name='opt_a1',pin=TPL.pin['b0'],width=self.w_wg,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=TPR.pin['b0'],width=self.w_wg).put()
+ nd.Pin(name='opt_b1',pin=TPR.pin['b0'],width=self.w_wg,type="optical:").put()
nd.strt(length=0.1,width=TPL.pin['b0'].width,xs=self.xs).put(TPL.pin['b0'].move(-0.05,0,0))
nd.strt(length=0.1,width=TPR.pin['b0'].width,xs=self.xs).put(TPR.pin['b0'].move(-0.05,0,0))
@@ -400,7 +416,9 @@ class ADC_STD_2x2:
self.tp_angle = tp_angle
self.sharp_patch = sharp_patch
self.cell = self.generate_gds(err=0,show_pins=show_pins)
- self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ self.L = np.abs(self.cell.pin['opt_a1'].x - self.cell.pin['opt_b1'].x)
def generate_gds(self,err=0,show_pins=False):
@@ -445,7 +463,9 @@ class ADC_STD_2x2:
# attach_in = circle(angle=self.angle,radius=self.Rd0,width=self.wd0+err,xs=self.xs).cell.put('a1',0,vtx_lower_y[0]/2+vtx_lower_y[-1]/2,180,flip=0)
# attach_in = circle(angle=self.angle,radius=self.Rd0,width=self.wd0+err,xs=self.xs).cell.put('b1',attach_in.pin['b1'],flip=0)
- pin_a2=nd.taper(width1=self.wd0+err,width2=self.wd_in,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a2=nd.taper(width1=self.wd0+err,width2=self.wd_in,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ pin_a2=nd.taper(width1=self.wd0+err,width2=self.wd_in,length=Ltp,xs=self.xs).put(attach_in.pin['opt_b1']).pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_a2.width).put()
else :
@@ -455,7 +475,9 @@ class ADC_STD_2x2:
pin_a2 = nd.taper(xs=self.xs,length=Ltp,width1=self.wd0+err,width2=self.wd_in).put(temp.pin['b0']).pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_a2.width).put()
- nd.Pin(name='a2',width=self.wd_in,pin=pin_a2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',width=self.wd_in,pin=pin_a2).put()
+ nd.Pin(name='opt_a2',width=self.wd_in,pin=pin_a2,type="optical:").put()
if (self.Rd1!=0):
## placing the adiabatic bend attachment to lower waveguide, output port, label 1
@@ -476,7 +498,9 @@ class ADC_STD_2x2:
# attach_in = circle(angle=self.angle,radius=self.Rd1,width=self.wd1+err,xs=self.xs).cell.put('a1',self.Ld,vtx_lower_y[1]/2+vtx_lower_y[-2]/2,0,flip=1)
# attach_in = circle(angle=self.angle,radius=self.Rd1,width=self.wd1+err,xs=self.xs).cell.put('b1',attach_in.pin['b1'],flip=1)
- pin_b2=nd.taper(width1=self.wd1+err,width2=self.wd_out,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b2=nd.taper(width1=self.wd1+err,width2=self.wd_out,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ pin_b2=nd.taper(width1=self.wd1+err,width2=self.wd_out,length=Ltp,xs=self.xs).put(attach_in.pin['opt_b1']).pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_b2.width).put()
_dX_ = abs(pin_b2.x - self.Ld)
@@ -488,7 +512,9 @@ class ADC_STD_2x2:
pin_b2 = nd.taper(xs=self.xs,length=Ltp,width1=self.wd1+err,width2=self.wd_out).put().pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_b2.width).put()
- nd.Pin(name='b2',width=self.wd_out,pin=pin_b2).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',width=self.wd_out,pin=pin_b2).put()
+ nd.Pin(name='opt_b2',width=self.wd_out,pin=pin_b2,type="optical:").put()
if (self.Ru0!=0):
@@ -511,7 +537,9 @@ class ADC_STD_2x2:
# attach_in = circle(angle=self.angle,radius=self.Ru0,width=self.wu0+err,xs=self.xs).cell.put('a1',0,vtx_upper_y[0]/2+vtx_upper_y[-1]/2,180,flip=1)
# attach_in = circle(angle=self.angle,radius=self.Ru0,width=self.wu0+err,xs=self.xs).cell.put('b1',attach_in.pin['b1'],flip=1)
- pin_a1=nd.taper(width1=self.wu0+err,width2=self.wu_in,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_a1=nd.taper(width1=self.wu0+err,width2=self.wu_in,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ pin_a1=nd.taper(width1=self.wu0+err,width2=self.wu_in,length=Ltp,xs=self.xs).put(attach_in.pin['opt_b1']).pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_a1.width).put()
_dX_ = abs(pin_a1.x)
@@ -523,7 +551,9 @@ class ADC_STD_2x2:
pin_a1 = nd.taper(xs=self.xs,length=Ltp,width1=self.wu0+err,width2=self.wu_in).put().pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_a1.width).put()
- nd.Pin(name='a1',width=self.wu_in,pin=pin_a1).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.wu_in,pin=pin_a1).put()
+ nd.Pin(name='opt_a1',width=self.wu_in,pin=pin_a1,type="optical:").put()
if (self.Ru1!=0):
if (self.sbend_type=='euler'):
@@ -546,7 +576,9 @@ class ADC_STD_2x2:
# attach_in = circle(angle=self.angle,radius=self.Ru1,width=self.wu1+err,xs=self.xs).cell.put('a1',self.Lu,vtx_upper_y[1]/2+vtx_upper_y[-2]/2,0,flip=0)
# attach_in = circle(angle=self.angle,radius=self.Ru1,width=self.wu1+err,xs=self.xs).cell.put('b1',attach_in.pin['b1'],flip=0)
- pin_b1=nd.taper(width1=self.wu1+err,width2=self.wu_out,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_b1=nd.taper(width1=self.wu1+err,width2=self.wu_out,length=Ltp,xs=self.xs).put(attach_in.pin['b1']).pin['b0']
+ pin_b1=nd.taper(width1=self.wu1+err,width2=self.wu_out,length=Ltp,xs=self.xs).put(attach_in.pin['opt_b1']).pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_b1.width).put()
else :
Ltp = np.max([5,np.abs(self.wu1+err-self.wu_out)/np.tan(self.tp_angle/180*pi)])
@@ -555,7 +587,9 @@ class ADC_STD_2x2:
pin_b1 = nd.taper(xs=self.xs,length=Ltp,width1=self.wu1+err,width2=self.wu_out).put().pin['b0']
patch = nd.strt(xs=self.xs,length=0.01,width=pin_b1.width).put()
- nd.Pin(name='b1',width=self.wu_out,pin=pin_b1).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.wu_out,pin=pin_b1).put()
+ nd.Pin(name='opt_b1',width=self.wu_out,pin=pin_b1,type="optical:").put()
dY1 = np.abs(pin_a1.y-pin_a2.y)
dX1 = np.abs(pin_a1.x-pin_a2.x)
@@ -576,10 +610,18 @@ class ADC_STD_2x2:
# nd.strt(length=L_patch,width=W_patch,layer=layers).put(np.min([pin_b1.x,pin_b2.x]),(pin_b1.y+self.wu_out/2-self.wd_out/2+pin_b2.y)/2,0)
if show_pins:
- nd.put_stub(pinname='a1',pinsize=3)
- nd.put_stub(pinname='a2',pinsize=3)
- nd.put_stub(pinname='b1',pinsize=3)
- nd.put_stub(pinname='b2',pinsize=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.put_stub(pinname='a1',pinsize=3)
+ nd.put_stub(pinname='opt_a1',pinsize=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.put_stub(pinname='a2',pinsize=3)
+ nd.put_stub(pinname='opt_a2',pinsize=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.put_stub(pinname='b1',pinsize=3)
+ nd.put_stub(pinname='opt_b1',pinsize=3)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.put_stub(pinname='b2',pinsize=3)
+ nd.put_stub(pinname='opt_b2',pinsize=3)
return C
@@ -597,24 +639,34 @@ class ADC_STD_2x2:
else :
raise Exception("ERROR: In , is not recongized as a cell")
- inst = self.cell.put('a1',-self.L/2,self.cell.pin['a1'].y,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: inst = self.cell.put('a1',-self.L/2,self.cell.pin['a1'].y,0)
+ inst = self.cell.put('opt_a1',-self.L/2,self.cell.pin['opt_a1'].y,0)
pic_strip = Route(radius=15,width=self.wu_in,xs=self.xs)
GT_U_In = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc/2,180)
nd.taper(width1=GT_U_In.pin['g1'].width,width2=self.wu_in,length=5,xs=self.xs).put(GT_U_In.pin['g1'])
- pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['a1']).put()
+ pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['opt_a1']).put()
GT_D_In = gc_cell.put('g1',-dX_gc2gc/2,-dY_gc2gc/2,180)
nd.taper(width1=GT_D_In.pin['g1'].width,width2=self.wd_in,length=5,xs=self.xs).put(GT_D_In.pin['g1'])
- pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['a2'],width=self.wd_in).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['a2'],width=self.wd_in).put()
+ pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['opt_a2'],width=self.wd_in).put()
GT_U_Out = gc_cell.put('g1', dX_gc2gc/2,dY_gc2gc/2,0)
nd.taper(width1=GT_U_Out.pin['g1'].width,width2=self.wu_out,length=5,xs=self.xs).put(GT_U_Out.pin['g1'])
- pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['b1'],width=self.wu_out).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['b1'],width=self.wu_out).put()
+ pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['opt_b1'],width=self.wu_out).put()
GT_D_Out = gc_cell.put('g1', dX_gc2gc/2,-dY_gc2gc/2,0)
nd.taper(width1=GT_D_Out.pin['g1'].width,width2=self.wd_out,length=5,xs=self.xs).put(GT_D_Out.pin['g1'])
- pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['b2'],width=self.wd_out).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['b2'],width=self.wd_out).put()
+ pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['opt_b2'],width=self.wd_out).put()
return C
@@ -707,28 +759,48 @@ class DC(ADC_STD_2x2):
gc_OU = gc_cell.put('g1',dX_gc2gc,-dY_gc2gc,0)
gc_OD = gc_cell.put('g1',dX_gc2gc,0,0)
# Put DC
- inst = self.cell.put('a1',-self.L/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: inst = self.cell.put('a1',-self.L/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
+ inst = self.cell.put('opt_a1',-self.L/2+dX_gc2gc/2,self.cell.pin['opt_a1'].y-dY_gc2gc/2,0)
# Connect all the ports
stripe=Route(radius=self.Ru0, width=self.wu_in, xs="strip")
- if (abs(inst.pin['b1'].y - inst.pin['b2'].y)<10) :
- temp = stripe.sbend_route(pin=inst.pin['a1'],offset=5).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: if (abs(inst.pin['b1'].y - inst.pin['b2'].y)<10) :
+ if (abs(inst.pin['opt_b1'].y - inst.pin['opt_b2'].y)<10) :
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = stripe.sbend_route(pin=inst.pin['a1'],offset=5).put(flip=1)
+ temp = stripe.sbend_route(pin=inst.pin['opt_a1'],offset=5).put(flip=1)
stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put()
- temp = stripe.sbend_route(pin=inst.pin['a2'],offset=5).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = stripe.sbend_route(pin=inst.pin['a2'],offset=5).put()
+ temp = stripe.sbend_route(pin=inst.pin['opt_a2'],offset=5).put()
stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put()
- temp = stripe.sbend_route(pin=inst.pin['b1'],offset=5).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = stripe.sbend_route(pin=inst.pin['b1'],offset=5).put()
+ temp = stripe.sbend_route(pin=inst.pin['opt_b1'],offset=5).put()
stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put()
- temp = stripe.sbend_route(pin=inst.pin['b2'],offset=5).put(flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = stripe.sbend_route(pin=inst.pin['b2'],offset=5).put(flip=1)
+ temp = stripe.sbend_route(pin=inst.pin['opt_b2'],offset=5).put(flip=1)
stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put()
else :
- stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['a1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['a2'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['b1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['b2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['a1'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['opt_a1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['opt_a2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['b1'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['opt_b1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['b2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['opt_b2'],arrow=False,original_function=not sharp_patch).put()
return C
class BS_tdc(ADC_STD_2x2):
@@ -941,7 +1013,9 @@ class MDM(ADC_STD_2x2):
Rd0=R0,Rd1=R0,
angle=angle)
- self.L = np.abs(self.cell.pin['a1'].x-self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x-self.cell.pin['b1'].x)
+ self.L = np.abs(self.cell.pin['opt_a1'].x-self.cell.pin['opt_b1'].x)
def generate_test_gds(self,gc,dX_gc2gc=300,dY_gc2gc=40,sharp_patch=True):
with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C:
@@ -949,10 +1023,16 @@ class MDM(ADC_STD_2x2):
gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::MDM::generate_test_gds")
# Put DC
- L_taper = (np.abs(self.cell.pin['a1'].width-gc_cell.pin['g1'].width))/np.tan(2/180*pi)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: L_taper = (np.abs(self.cell.pin['a1'].width-gc_cell.pin['g1'].width))/np.tan(2/180*pi)
+ L_taper = (np.abs(self.cell.pin['opt_a1'].width-gc_cell.pin['g1'].width))/np.tan(2/180*pi)
- mdm_In = self.cell.put('b1',-dX_gc2gc/2 + self.L + 25+L_taper,0,180)
- mdm_Out = self.cell.put('b1', dX_gc2gc/2 - self.L - 25-L_taper,0,0,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mdm_In = self.cell.put('b1',-dX_gc2gc/2 + self.L + 25+L_taper,0,180)
+ mdm_In = self.cell.put('opt_b1',-dX_gc2gc/2 + self.L + 25+L_taper,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: mdm_Out = self.cell.put('b1', dX_gc2gc/2 - self.L - 25-L_taper,0,0,flip=1)
+ mdm_Out = self.cell.put('opt_b1', dX_gc2gc/2 - self.L - 25-L_taper,0,0,flip=1)
GC_IU = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc/2,180)
@@ -962,16 +1042,26 @@ class MDM(ADC_STD_2x2):
# # Connect all the ports
stripe=Route(radius=10, width=self.w_wg, xs="strip")
- nd.taper(width1=mdm_In.pin['a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_In.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(width1=mdm_In.pin['a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_In.pin['a1'])
+ nd.taper(width1=mdm_In.pin['opt_a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_In.pin['opt_a1'])
stripe.sbend_p2p(pin2=GC_IU.pin['g1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=GC_ID.pin['g1'],pin2=mdm_In.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=GC_ID.pin['g1'],pin2=mdm_In.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=GC_ID.pin['g1'],pin2=mdm_In.pin['opt_a2'],arrow=False,original_function=not sharp_patch).put()
- nd.taper(width1=mdm_Out.pin['a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_Out.pin['a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(width1=mdm_Out.pin['a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_Out.pin['a1'])
+ nd.taper(width1=mdm_Out.pin['opt_a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_Out.pin['opt_a1'])
stripe.sbend_p2p(pin1=GC_OU.pin['g1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=GC_OD.pin['g1'],pin2=mdm_Out.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=GC_OD.pin['g1'],pin2=mdm_Out.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=GC_OD.pin['g1'],pin2=mdm_Out.pin['opt_a2'],arrow=False,original_function=not sharp_patch).put()
- stripe.taper_p2p(pin1=mdm_In.pin['b1'],pin2=mdm_Out.pin['b1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.taper_p2p(pin1=mdm_In.pin['b1'],pin2=mdm_Out.pin['b1'],arrow=False).put()
+ stripe.taper_p2p(pin1=mdm_In.pin['opt_b1'],pin2=mdm_Out.pin['opt_b1'],arrow=False).put()
return C
@@ -1095,10 +1185,18 @@ class DC_bend :
## Put pins
nd.Pin(name="a0", width=self.w_wg).put((port_in1.pin['b0'].x+port_in2.pin['b0'].x)/2, (port_in1.pin['b0'].y+port_in2.pin['b0'].y)/2, 180)
- nd.Pin(name="a1", width=self.w_wg).put(port_in1.pin['b0'])
- nd.Pin(name="a2", width=self.w_wg).put(port_in2.pin['b0'])
- nd.Pin(name="b1", width=self.w_wg).put(port_out1.pin['b0'])
- nd.Pin(name="b2", width=self.w_wg).put(port_out2.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1", width=self.w_wg).put(port_in1.pin['b0'])
+ nd.Pin(name="opt_a1", width=self.w_wg,type="optical:").put(port_in1.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a2", width=self.w_wg).put(port_in2.pin['b0'])
+ nd.Pin(name="opt_a2", width=self.w_wg,type="optical:").put(port_in2.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1", width=self.w_wg).put(port_out1.pin['b0'])
+ nd.Pin(name="opt_b1", width=self.w_wg,type="optical:").put(port_out1.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b2", width=self.w_wg).put(port_out2.pin['b0'])
+ nd.Pin(name="opt_b2", width=self.w_wg,type="optical:").put(port_out2.pin['b0'])
self.width = np.abs(port_out1.pin['b0'].y - port_out2.pin['b0'].y)
self.length = np.abs(port_out1.pin['b0'].x - port_in1.pin['b0'].x)
if self.show_pins:
@@ -1144,15 +1242,27 @@ class DC_bend :
gc_OU = gc_cell.put('g1',dX_gc2gc,-dY_gc2gc,0)
gc_OD = gc_cell.put('g1',dX_gc2gc,0,0)
# Put DC
- dL_DC = self.cell.pin['b1'].x - self.cell.pin['a1'].x
- inst = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dL_DC = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ dL_DC = self.cell.pin['opt_b1'].x - self.cell.pin['opt_a1'].x
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: inst = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
+ inst = self.cell.put('opt_a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['opt_a1'].y-dY_gc2gc/2,0)
# Connect all the ports
stripe=Route(radius=10, width=self.w_wg, xs="strip")
- stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['a1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['a2'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['b1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['b2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['a1'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['opt_a1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['opt_a2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['b1'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['opt_b1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['b2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['opt_b2'],arrow=False,original_function=not sharp_patch).put()
return C
@@ -1237,7 +1347,9 @@ class DC_pX_3sg:
self.cellU = cells[2]
self.cellD = cells[1]
- self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x)
+ self.L = np.abs(self.cell.pin['opt_a1'].x - self.cell.pin['opt_b1'].x)
self.length = self.L
def generate_gds(self,err=0):
@@ -1261,7 +1373,9 @@ class DC_pX_3sg:
cp_u_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=0)
cp_u_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put()
- nd.Pin(name='a1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width).put()
+ nd.Pin(name='opt_a1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width,type="optical:").put()
## middle segment phase shifter
if self.pX_type == "symmetric":
@@ -1280,7 +1394,9 @@ class DC_pX_3sg:
cp_u_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=1)
cp_u_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put()
- nd.Pin(name='b1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width).put()
+ nd.Pin(name='opt_b1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width,type="optical:").put()
nd.Pin(name='b0').put(cp_u.pin['b0'])
@@ -1299,7 +1415,9 @@ class DC_pX_3sg:
cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put()
# cp_d_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put()
- nd.Pin(name='a2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width).put()
+ nd.Pin(name='opt_a2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width,type="optical:").put()
## middle segment phase shifter
if self.pX_type == "symmetric":
@@ -1323,7 +1441,9 @@ class DC_pX_3sg:
else:
cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=1)
- nd.Pin(name='b2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width).put()
+ nd.Pin(name='opt_b2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width,type="optical:").put()
nd.Pin(name='b0').put(cp_d.pin['b0'])
@@ -1331,8 +1451,12 @@ class DC_pX_3sg:
wgUp = CUP.put(0,(w_cp/2+gap/2),0)
wgDown = CDOWN.put(0,-(w_cp/2+gap/2),0)
- wgUp.raise_pins(['a1','b1'],['a1','b1'])
- wgDown.raise_pins(['a2','b2'],['a2','b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wgUp.raise_pins(['a1','b1'],['a1','b1'])
+ wgUp.raise_pins(['opt_a1','opt_b1'],['opt_a1','opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: wgDown.raise_pins(['a2','b2'],['a2','b2'])
+ wgDown.raise_pins(['opt_a2','opt_b2'],['opt_a2','opt_b2'])
nd.Pin(name='a0').put((self.Lc1+self.Lc2+self.Lp1+self.Lt*2)/2,0,180)
nd.Pin(name='b0').put((self.Lc1+self.Lc2+self.Lp1+self.Lt*2)/2,0,0)
@@ -1355,15 +1479,27 @@ class DC_pX_3sg:
gc_OU = gc_cell.put('g1',dX_gc2gc,-dY_gc2gc,0)
gc_OD = gc_cell.put('g1',dX_gc2gc,0,0)
# Put DC
- dL_DC = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dL_DC = self.cell.pin['b1'].x - self.cell.pin['a1'].x
+ dL_DC = self.cell.pin['opt_b1'].x - self.cell.pin['opt_a1'].x
# inst = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
- DC_pX3 = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: DC_pX3 = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0)
+ DC_pX3 = self.cell.put('opt_a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['opt_a1'].y-dY_gc2gc/2,0)
# Connect all the ports
stripe=Route(radius=10, width=self.w_wg, xs="strip")
- stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=DC_pX3.pin['a1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=DC_pX3.pin['a2'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=DC_pX3.pin['b1'],arrow=False,original_function=not sharp_patch).put()
- stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=DC_pX3.pin['b2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=DC_pX3.pin['a1'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=DC_pX3.pin['opt_a1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=DC_pX3.pin['a2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=DC_pX3.pin['opt_a2'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=DC_pX3.pin['b1'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=DC_pX3.pin['opt_b1'],arrow=False,original_function=not sharp_patch).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=DC_pX3.pin['b2'],arrow=False,original_function=not sharp_patch).put()
+ stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=DC_pX3.pin['opt_b2'],arrow=False,original_function=not sharp_patch).put()
return C
diff --git a/mxpic/components/primitives/pic/cross.py b/mxpic/components/primitives/pic/cross.py
index ff7dcd5..89cba11 100644
--- a/mxpic/components/primitives/pic/cross.py
+++ b/mxpic/components/primitives/pic/cross.py
@@ -69,10 +69,18 @@ class Cross:
_my_polygon(layer_wg=layers,vtx=vtx).put(0,L_arm,-90)
_my_polygon(layer_wg=layers,vtx=vtx).put(L_arm,0,180)
- nd.Pin(name='a1',width=self.w[0]).put(-L_arm,0,180)
- nd.Pin(name='a2',width=self.w[0]).put( 0,-L_arm,-90)
- nd.Pin(name='b2',width=self.w[0]).put( 0, L_arm, 90)
- nd.Pin(name='b1',width=self.w[0]).put( L_arm,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w[0]).put(-L_arm,0,180)
+ nd.Pin(name='opt_a1',width=self.w[0],type="optical:").put(-L_arm,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',width=self.w[0]).put( 0,-L_arm,-90)
+ nd.Pin(name='opt_a2',width=self.w[0],type="optical:").put( 0,-L_arm,-90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',width=self.w[0]).put( 0, L_arm, 90)
+ nd.Pin(name='opt_b2',width=self.w[0],type="optical:").put( 0, L_arm, 90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w[0]).put( L_arm,0,0)
+ nd.Pin(name='opt_b1',width=self.w[0],type="optical:").put( L_arm,0,0)
if (show_pins):
nd.put_stub()
@@ -99,12 +107,20 @@ class Cross:
pin_pre = gc_In.pin['g1']
for _idx_ in range(0,num):
inst = self.cell.put('a0',_idx_*dX - (num/2 - 1/2)*dX)
- pic_strip.strt_p2p(pin1=pin_pre,pin2=inst.pin['a1'],arrow=False).put()
- pin_pre = inst.pin['b1']
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.strt_p2p(pin1=pin_pre,pin2=inst.pin['a1'],arrow=False).put()
+ pic_strip.strt_p2p(pin1=pin_pre,pin2=inst.pin['opt_a1'],arrow=False).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pin_pre = inst.pin['b1']
+ pin_pre = inst.pin['opt_b1']
- nd.taper(length=L_end/2,width1=self.w[0],width2=w_end,xs=self.xs).put(inst.pin['b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(length=L_end/2,width1=self.w[0],width2=w_end,xs=self.xs).put(inst.pin['b2'])
+ nd.taper(length=L_end/2,width1=self.w[0],width2=w_end,xs=self.xs).put(inst.pin['opt_b2'])
nd.strt(length=L_end/2,width=w_end,xs=self.xs).put()
- nd.taper(length=L_end/2,width1=self.w[0],width2=w_end,xs=self.xs).put(inst.pin['a2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(length=L_end/2,width1=self.w[0],width2=w_end,xs=self.xs).put(inst.pin['a2'])
+ nd.taper(length=L_end/2,width1=self.w[0],width2=w_end,xs=self.xs).put(inst.pin['opt_a2'])
nd.strt(length=L_end/2,width=w_end,xs=self.xs).put()
gc_Out = gc_cell.put('g1', dX_gc2gc/2,0,0)
diff --git a/mxpic/components/primitives/EC_dual_layer_px3.py b/mxpic/components/primitives/pic/edge_couplers.py
similarity index 96%
rename from mxpic/components/primitives/EC_dual_layer_px3.py
rename to mxpic/components/primitives/pic/edge_couplers.py
index 54c03c5..ce99d75 100644
--- a/mxpic/components/primitives/EC_dual_layer_px3.py
+++ b/mxpic/components/primitives/pic/edge_couplers.py
@@ -1,7 +1,7 @@
import nazca as nd
import numpy as np
-from ..geometry import _my_polygon
+from ...geometry import _my_polygon
class EC_dual_layer_px3():
"""
@@ -126,7 +126,11 @@ class EC_dual_layer_px3():
L_EC = self.Ltp1+self.Ltp2+self.Ltp3+self.L_end
nd.strt(layer = self.layer_dum_exl_be,width=75,length=self.L_in + L_EC).put(0,0,0)
- port.raise_pins(['b0','b0'],['a0','a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: port.raise_pins(['b0','b0'],['a0','a1'])
+ port.raise_pins(['b0','b0'],['a0','opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ EC_core.pin['opt_a1'].type = "optical:"
""" === 1.2 Building cladding waveguide === """
@@ -241,7 +245,9 @@ class EC_dual_layer_px3():
with nd.Cell(name=self.name,instantiate=self.instantiate) as C:
inst = EC_core.put('b0',0,0,180+self.angle_tile)
- inst.raise_pins(['a1','a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: inst.raise_pins(['a1','a1'])
+ inst.raise_pins(['opt_a1','opt_a1'])
nd.Pin(name="b0").put(0,0,0)
return C
diff --git a/mxpic/components/primitives/pic/gratings.py b/mxpic/components/primitives/pic/gratings.py
index 9f785c5..1d1bbd7 100644
--- a/mxpic/components/primitives/pic/gratings.py
+++ b/mxpic/components/primitives/pic/gratings.py
@@ -241,8 +241,12 @@ class Taper() :
linear_taper = strip.taper(
length=self.length,width1=self.width1,width2=self.width2,patch=True).put(0,0,0)
output_strt = strip.strt(length=0.5,width=self.width2).put()
- nd.Pin(name="a1",width=self.width1).put(linear_taper.pin['a0'])
- nd.Pin(name="b1",width=self.width2).put(output_strt.pin['b0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="a1",width=self.width1).put(linear_taper.pin['a0'])
+ nd.Pin(name="opt_a1",width=self.width1,type="optical:").put(linear_taper.pin['a0'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1",width=self.width2).put(output_strt.pin['b0'])
+ nd.Pin(name="opt_b1",width=self.width2,type="optical:").put(output_strt.pin['b0'])
else :
c2 = self.width1/2
c1 = (c2 - self.width2/2) / np.power(self.length, self.order)
@@ -273,8 +277,12 @@ class Taper() :
nd.strt(length=0.5, width=self.width2, xs='strip').put(self.length,0,0)
- nd.Pin(name='a1',width=self.width1).put(0,0,180)
- nd.Pin(name="b1",width=self.width2).put(self.length+0.5,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.width1).put(0,0,180)
+ nd.Pin(name='opt_a1',width=self.width1,type="optical:").put(0,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name="b1",width=self.width2).put(self.length+0.5,0,0)
+ nd.Pin(name="opt_b1",width=self.width2,type="optical:").put(self.length+0.5,0,0)
if self.show_pins :
nd.put_stub()
return ic
@@ -366,8 +374,12 @@ class Grating_2D_Hole() :
)
'''Generate the taper output.'''
taper = Taper(width1=self.w_gt, width2=self.w_wg, length=self.l_taper, type=self.type_taper)
- taper_horizontal = taper.cell.put('a1', self.w_gt/2,0,0)
- taper_vertical = taper.cell.put('a1',0,self.w_gt/2,90)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: taper_horizontal = taper.cell.put('a1', self.w_gt/2,0,0)
+ taper_horizontal = taper.cell.put('opt_a1', self.w_gt/2,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: taper_vertical = taper.cell.put('a1',0,self.w_gt/2,90)
+ taper_vertical = taper.cell.put('opt_a1',0,self.w_gt/2,90)
'''Generate the diffraction etched region.'''
theta_list = np.linspace(0, 2*np.pi, 32)
gt_ring_poly = [
@@ -383,8 +395,12 @@ class Grating_2D_Hole() :
polygon=polysi_ring_poly, vector=self.polysi_vector, layer=self.polysi_layer
).put(self.w_gt/2, self.w_gt/2)
'''Put the pin location'''
- nd.Pin(name='g1').put(taper_horizontal.pin['b1'])
- nd.Pin(name='g2').put(taper_vertical.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='g1').put(taper_horizontal.pin['b1'])
+ nd.Pin(name='g1').put(taper_horizontal.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='g2').put(taper_vertical.pin['b1'])
+ nd.Pin(name='g2').put(taper_vertical.pin['opt_b1'])
# nd.put_stub()
return ic
@@ -1257,6 +1273,191 @@ class GC_STD_1D:
nd.strt(xs=self.xs_wg,width=self.w_wg,length=dX_gc2gc).put(-dX_gc2gc/2,0,0)
return C
+
+class GC_SiN_Si_Dual_Layer:
+ """
+ GC SiN Si Dual Layer primitive component.
+
+ This component builds the GC SiN Si Dual Layer layout cell.
+
+ Parameters
+ ----------
+ name : str, optional
+ Unique identifier for the device cell. Default is None.
+ w_teeth_SiN : list or float, optional
+ Width parameter in microns. Default is 0.5.
+ gap_teeth_SiN : list or float, optional
+ Spacing or gap parameter in microns. Default is 0.5.
+ w_teeth_Si : list or float, optional
+ Width parameter in microns. Default is 0.5.
+ gap_teeth_Si : list or float, optional
+ Spacing or gap parameter in microns. Default is 0.5.
+ ori_teeth_offset : float, optional
+ Value for the ori_teeth_offset parameter. Default is 5.0.
+ n_teeth_Si : float, optional
+ Value for the n_teeth_Si parameter. Default is 30.
+ n_teeth_SiN : float, optional
+ Value for the n_teeth_SiN parameter. Default is 30.
+ A_gc_taper : float, optional
+ Angle parameter in degrees. Default is 25.0.
+ R_teeth_ori_SiN : float, optional
+ Radius parameter in microns. Default is 40.0.
+ R_teeth_ori_Si : float, optional
+ Radius parameter in microns. Default is 40.0.
+ L_end_Si : float, optional
+ Length parameter in microns. Default is 0.2.
+ L_end_SiN : float, optional
+ Length parameter in microns. Default is 5.0.
+ w_port : float, optional
+ Width parameter in microns. Default is 0.9.
+ A_anti_rfl : float, optional
+ Angle parameter in degrees. Default is 4.0.
+ layer_SiN_slab : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ layer_Si_slab : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ layer_Si_teeth : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ layer_SiN_teeth : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ layer_SiN_etch : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ layer_Si_etch : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ layer_ox_open : str, optional
+ Layer or cross-section name used by the device. Default is None.
+ """
+ def __init__(self,
+ name:str=None,
+ w_teeth_SiN:'list|float' = 0.5,
+ gap_teeth_SiN:'list|float' = 0.5,
+ w_teeth_Si:'list|float' = 0.5,
+ gap_teeth_Si:'list|float' = 0.5,
+ ori_teeth_offset:float = 5.0,
+ n_teeth_Si:float=30,
+ n_teeth_SiN:float=30,
+ A_gc_taper:float=25.0,
+ R_teeth_ori_SiN:float=40.0,
+ R_teeth_ori_Si:float=40.0,
+ L_end_Si:float=0.2,
+ L_end_SiN:float=5.0,
+
+ w_port : float = 0.9,
+
+ A_anti_rfl:float = 4.0,
+ layer_SiN_slab:str=None,
+ layer_Si_slab:str=None,
+ layer_Si_teeth:str=None,
+ layer_SiN_teeth:str=None,
+ layer_SiN_etch:str=None,
+ layer_Si_etch:str=None,
+ layer_ox_open:str=None,
+ ):
+
+ self.name = name
+ self.w_teeth_SiN = w_teeth_SiN
+ self.gap_teeth_SiN = gap_teeth_SiN
+ self.w_teeth_Si = w_teeth_Si
+ self.gap_teeth_Si = gap_teeth_Si
+ self.ori_teeth_offset = ori_teeth_offset
+
+ self.n_teeth_SiN = n_teeth_SiN
+ self.n_teeth_Si = n_teeth_Si
+
+ self.A_gc_taper = A_gc_taper
+
+ self.w_port = w_port
+
+ self.L_end_Si = L_end_Si
+ self.L_end_SiN = L_end_SiN
+
+ self.A_anti_rfl = A_anti_rfl
+
+ self.R_teeth_ori_SiN = R_teeth_ori_SiN
+ self.R_teeth_ori_Si = R_teeth_ori_Si
+
+ self.layer_SiN_slab = layer_SiN_slab
+ self.layer_Si_slab = layer_Si_slab
+ self.layer_Si_teeth = layer_Si_teeth
+ self.layer_SiN_teeth = layer_SiN_teeth
+ self.layer_SiN_etch = layer_SiN_etch
+ self.layer_Si_etch = layer_Si_etch
+ self.layer_ox_open = layer_ox_open
+
+ self.cell = self.generate_gds()
+
+ def generate_gds(self):
+ """ creating instance cell or not """
+ if (self.name is None) : self.instantiate = False
+ else : self.instantiate = True
+
+ """ """
+ if (isinstance(self.w_teeth_SiN,list) or isinstance(self.w_teeth_SiN,np.ndarray)):
+ n_teeth_SiN = len(self.w_teeth_SiN)
+ elif (isinstance(self.w_teeth_SiN,float)):
+ n_teeth_SiN = self.n_teeth_SiN
+ w_teeth_SiN = [w_teeth_SiN]*n_teeth_SiN
+
+ """ """
+ if (isinstance(self.w_teeth_Si,list) or isinstance(self.w_teeth_Si,np.ndarray)):
+ n_teeth_Si = len(self.w_teeth_Si)
+ elif (isinstance(self.w_teeth_Si,float)):
+ n_teeth_Si = self.n_teeth_Si
+ w_teeth_Si = [w_teeth_Si]*n_teeth_Si
+
+ with nd.Cell(instantiate=self.instantiate, name=self.name) as C:
+
+ """ Creating SiN layer grating """
+ ## whole area where the grating area covered
+ L_gc = self.R_teeth_ori_SiN + self.L_end_SiN + sum(self.w_teeth_SiN) + sum(self.gap_teeth_SiN)
+
+ w_box_gc = L_gc*np.sin(self.A_gc_taper/2*np.pi/180)*2
+ L_box_gc = L_gc*np.cos(self.A_gc_taper/2*np.pi/180)
+ x_slab = [0,L_box_gc,L_gc+w_box_gc*np.sin(self.A_anti_rfl*np.pi/180),L_gc,L_box_gc,0]
+ y_slab = [self.w_port/2,w_box_gc/2,w_box_gc/2,-w_box_gc/2,-w_box_gc/2,-self.w_port/2]
+
+ _my_polygon(layer_wg=self.layer_SiN_slab,vtx=np.c_[x_slab,y_slab]).put(0,0,0)
+
+ # circle(radius=self.R_teeth_ori_SiN/2,angle=self.A_gc_taper,layer=self.layer_SiN_slab,
+ # width=self.R_teeth_ori_SiN).cell.put(0,0,-self.A_gc_taper/2)
+
+ A_etch_ext = 4
+ ## Placing teeth
+ r_in = self.R_teeth_ori_SiN
+ for idxT in range(0,n_teeth_SiN):
+ r_out = r_in + self.gap_teeth_SiN[idxT]
+
+ circle(radius=(r_out+r_in)/2,angle=self.A_gc_taper+A_etch_ext,layer=self.layer_SiN_etch,
+ width=self.gap_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2-A_etch_ext/2)
+
+ r_in = r_out + self.w_teeth_SiN[idxT]
+
+ """ Creating Si layer grating """
+
+ w_Si_slab = sum(self.w_teeth_Si)+sum(self.gap_teeth_Si)
+ R_Si_slab = self.R_teeth_ori_Si+w_Si_slab/2
+ circle(radius=R_Si_slab,angle=self.A_gc_taper,layer=self.layer_Si_slab,
+ width=w_Si_slab).cell.put(0,0,-self.A_gc_taper/2)
+
+ ## Placing teeth
+ r_in = self.R_teeth_ori_Si
+ for idxT in range(0,n_teeth_Si):
+ r_out = r_in + self.gap_teeth_Si[idxT]
+
+ if (self.layer_Si_etch is not None):
+ circle(radius=(r_out+r_in)/2,angle=self.A_gc_taper+A_etch_ext,layer=self.layer_Si_etch,
+ width=self.gap_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2-A_etch_ext/2)
+ elif (self.layer_Si_teeth is not None):
+ circle(radius=r_out+(self.w_teeth_Si[idxT])/2,angle=self.A_gc_taper,layer=self.layer_Si_teeth,
+ width=self.w_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2)
+
+ r_in = r_out + self.w_teeth_Si[idxT]
+
+ return C
+
+
+
+
class FA:
"""
FA primitive component.
diff --git a/mxpic/components/primitives/pic/mmi.py b/mxpic/components/primitives/pic/mmi.py
index 5380129..a469617 100644
--- a/mxpic/components/primitives/pic/mmi.py
+++ b/mxpic/components/primitives/pic/mmi.py
@@ -125,8 +125,12 @@ class MMI_ML:
_my_polygon(layer_wg=layers,vtx=vtx).put(0,0,0)
- nd.Pin(name='a1',width=Wsg[0]).put(0,0,180)
- nd.Pin(name='b1',width=Wsg[-1]).put(L,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=Wsg[0]).put(0,0,180)
+ nd.Pin(name='opt_a1',width=Wsg[0],type="optical:").put(0,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=Wsg[-1]).put(L,0,0)
+ nd.Pin(name='opt_b1',width=Wsg[-1],type="optical:").put(L,0,0)
""" For central MMI """
L_mmi = 0
@@ -159,17 +163,31 @@ class MMI_ML:
L = max(Lsg_mmi)+b1*2
nd.strt(length=L,layer=layers,width=w).put(-b1,0,0)
- nd.Pin(name='a1',width=Wsg_mmi[0]).put(0,0,180)
- nd.Pin(name='b1',width=Wsg_mmi[-1]).put(L_mmi,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=Wsg_mmi[0]).put(0,0,180)
+ nd.Pin(name='opt_a1',width=Wsg_mmi[0],type="optical:").put(0,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=Wsg_mmi[-1]).put(L_mmi,0,0)
+ nd.Pin(name='opt_b1',width=Wsg_mmi[-1],type="optical:").put(L_mmi,0,0)
for idx_in in range(0,self.N_in):
- Arm_inst = Arm.put('b1',0,self.Dp_in*(-idx_in+(self.N_in-1)/2),180)
- nd.Pin(name='a'+str(round(idx_in+1)),pin=Arm_inst.pin['a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Arm_inst = Arm.put('b1',0,self.Dp_in*(-idx_in+(self.N_in-1)/2),180)
+ Arm_inst = Arm.put('opt_b1',0,self.Dp_in*(-idx_in+(self.N_in-1)/2),180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a'+str(round(idx_in+1)),pin=Arm_inst.pin['a1']).put()
+ nd.Pin(name='opt_a'+str(round(idx_in+1)),pin=Arm_inst.pin['opt_a1'],type="optical:").put()
for idx_in in range(0,self.N_out):
- Arm_inst = Arm.put('b1',L_mmi,self.Dp_out*(-idx_in+(self.N_out-1)/2),0)
- nd.Pin(name='b'+str(round(idx_in+1)),pin=Arm_inst.pin['a1']).put()
- MMI.put('a1',0,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: Arm_inst = Arm.put('b1',L_mmi,self.Dp_out*(-idx_in+(self.N_out-1)/2),0)
+ Arm_inst = Arm.put('opt_b1',L_mmi,self.Dp_out*(-idx_in+(self.N_out-1)/2),0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b'+str(round(idx_in+1)),pin=Arm_inst.pin['a1']).put()
+ nd.Pin(name='opt_b'+str(round(idx_in+1)),pin=Arm_inst.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: MMI.put('a1',0,0,0)
+ MMI.put('opt_a1',0,0,0)
if (show_pins):
nd.put_stub()
@@ -190,12 +208,16 @@ class MMI_ML:
pic_strip = Route(width=self.w_arm[0],radius=R_bend,xs=self.xs)
for idx_in in range(0,self.N_in):
GC = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc*(-idx_in + (self.N_in-1)/2),180)
- pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['a'+str(idx_in+1)],Lstart=dX_gc2gc/10).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['a'+str(idx_in+1)],Lstart=dX_gc2gc/10).put()
+ pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['opt_a'+str(idx_in+1)],Lstart=dX_gc2gc/10).put()
for idx_in in range(0,self.N_out):
toggle = np.mod(idx_in,2)-0.5
GC = gc_cell.put('g1', dX_gc2gc/2+Xout_offset*toggle,dY_gc2gc*(-idx_in + (self.N_out-1)/2),0)
- pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['b'+str(idx_in+1)],Lstart=dX_gc2gc/10).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['b'+str(idx_in+1)],Lstart=dX_gc2gc/10).put()
+ pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['opt_b'+str(idx_in+1)],Lstart=dX_gc2gc/10).put()
return C
diff --git a/mxpic/components/primitives/pic/racetrack.py b/mxpic/components/primitives/pic/racetrack.py
index 9d2b4a2..0a0d2b0 100644
--- a/mxpic/components/primitives/pic/racetrack.py
+++ b/mxpic/components/primitives/pic/racetrack.py
@@ -206,11 +206,15 @@ class RacetrackResonator:
self.cell_bus = bus.cell
bus_instr = bus.cell.put(0,-self.dLy/2-bend_cell.sz[1]-self.w0/2-self.w1_bus/2-self.gap1,0)
- bus_instr.raise_pins(['a1','b1'],['a1','b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: bus_instr.raise_pins(['a1','b1'],['a1','b1'])
+ bus_instr.raise_pins(['opt_a1','opt_b1'],['opt_a1','opt_b1'])
if (self.w2_bus > 0):
bus_instr = bus.cell.put(0, self.dLy/2+bend_cell.sz[1]+self.w0/2+self.w2_bus/2+self.gap2,0,flip=1)
- bus_instr.raise_pins(['a1','b1'],['a2','b2'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: bus_instr.raise_pins(['a1','b1'],['a2','b2'])
+ bus_instr.raise_pins(['opt_a1','opt_b1'],['opt_a2','opt_b2'])
return C
diff --git a/mxpic/components/primitives/pic/rings.py b/mxpic/components/primitives/pic/rings.py
index fef014e..873d267 100644
--- a/mxpic/components/primitives/pic/rings.py
+++ b/mxpic/components/primitives/pic/rings.py
@@ -222,13 +222,25 @@ class AED_ring :
elif(hasattr(self.cell_xs_transition,'cell')):
cell_trans = self.cell_xs_transition.cell
- temp = cell_trans.put(bus.pin['a1'])
- nd.Pin(name='a1',pin=temp.pin['b0']).put()
- temp = cell_trans.put(bus.pin['b1'])
- nd.Pin(name='b1',pin=temp.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = cell_trans.put(bus.pin['a1'])
+ temp = cell_trans.put(bus.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=temp.pin['b0']).put()
+ nd.Pin(name='opt_a1',pin=temp.pin['b0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = cell_trans.put(bus.pin['b1'])
+ temp = cell_trans.put(bus.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=temp.pin['b0']).put()
+ nd.Pin(name='opt_b1',pin=temp.pin['b0'],type="optical:").put()
else:
- nd.Pin(name='a1',pin=bus.pin['a1']).put()
- nd.Pin(name='b1',pin=bus.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',pin=bus.pin['a1']).put()
+ nd.Pin(name='opt_a1',pin=bus.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',pin=bus.pin['b1']).put()
+ nd.Pin(name='opt_b1',pin=bus.pin['opt_b1'],type="optical:").put()
if show_pins:
nd.put_stub()
@@ -259,13 +271,25 @@ class AED_ring :
elif(hasattr(self.cell_xs_transition,'cell')):
cell_trans = self.cell_xs_transition.cell
- temp = cell_trans.put(bus.pin['a1'])
- nd.Pin(name='a2',pin=temp.pin['b0']).put()
- temp = cell_trans.put(bus.pin['b1'])
- nd.Pin(name='b2',pin=temp.pin['b0']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = cell_trans.put(bus.pin['a1'])
+ temp = cell_trans.put(bus.pin['opt_a1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=temp.pin['b0']).put()
+ nd.Pin(name='opt_a2',pin=temp.pin['b0'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: temp = cell_trans.put(bus.pin['b1'])
+ temp = cell_trans.put(bus.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=temp.pin['b0']).put()
+ nd.Pin(name='opt_b2',pin=temp.pin['b0'],type="optical:").put()
else:
- nd.Pin(name='a2',pin=bus.pin['a1']).put()
- nd.Pin(name='b2',pin=bus.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a2',pin=bus.pin['a1']).put()
+ nd.Pin(name='opt_a2',pin=bus.pin['opt_a1'],type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b2',pin=bus.pin['b1']).put()
+ nd.Pin(name='opt_b2',pin=bus.pin['opt_b1'],type="optical:").put()
if show_pins:
nd.put_stub()
@@ -293,23 +317,45 @@ class AED_ring :
pic_strip = Route(width=w_wg,radius=R_bend,xs=xs,MM_route=False)
if (self.w2_bus>0):
- dX_c = abs(test_cell.pin['a1'].y - test_cell.pin['a2'].y)
- dY_c = abs(test_cell.pin['a1'].x - test_cell.pin['a2'].x)
- INSTR = test_cell.put('a1',GC1.pin['g1'].x + dX_gc2gc/2-dX_c/2-R_bend-offset,GC1.pin['g1'].y-R_bend-1,-90,flip=0)
- pic_strip.bend_p2p(pin1=INSTR.pin['a1'],pin2=GC1.pin['g1']).put()
- pic_strip.bend_p2p(pin1=INSTR.pin['a2'],pin2=GC2.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dX_c = abs(test_cell.pin['a1'].y - test_cell.pin['a2'].y)
+ dX_c = abs(test_cell.pin['opt_a1'].y - test_cell.pin['opt_a2'].y)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dY_c = abs(test_cell.pin['a1'].x - test_cell.pin['a2'].x)
+ dY_c = abs(test_cell.pin['opt_a1'].x - test_cell.pin['opt_a2'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: INSTR = test_cell.put('a1',GC1.pin['g1'].x + dX_gc2gc/2-dX_c/2-R_bend-offset,GC1.pin['g1'].y-R_bend-1,-90,flip=0)
+ INSTR = test_cell.put('opt_a1',GC1.pin['g1'].x + dX_gc2gc/2-dX_c/2-R_bend-offset,GC1.pin['g1'].y-R_bend-1,-90,flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_p2p(pin1=INSTR.pin['a1'],pin2=GC1.pin['g1']).put()
+ pic_strip.bend_p2p(pin1=INSTR.pin['opt_a1'],pin2=GC1.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_p2p(pin1=INSTR.pin['a2'],pin2=GC2.pin['g1']).put()
+ pic_strip.bend_p2p(pin1=INSTR.pin['opt_a2'],pin2=GC2.pin['g1']).put()
GC3 = GC.put('g1',GC2.pin['g1'].x,GC2.pin['g1'].y-dY_gc2gc,0)
- pic_strip.bend_p2p(pin1=INSTR.pin['b1'],pin2=GC3.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_p2p(pin1=INSTR.pin['b1'],pin2=GC3.pin['g1']).put()
+ pic_strip.bend_p2p(pin1=INSTR.pin['opt_b1'],pin2=GC3.pin['g1']).put()
- pic_strip.bend_route(pin=INSTR.pin['b2'],length1=0.5,length2=0.5).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.bend_route(pin=INSTR.pin['b2'],length1=0.5,length2=0.5).put()
+ pic_strip.bend_route(pin=INSTR.pin['opt_b2'],length1=0.5,length2=0.5).put()
pic_strip.taper(width2=w_term,length=15).put()
else:
- dX_c = abs(test_cell.pin['a1'].x - test_cell.pin['b1'].x)
- INSTR = test_cell.put('a1',GC1.pin['g1'].x + dX_gc2gc/2-dX_c/2-R_bend-offset,GC1.pin['g1'].y,0,flip=0)
- pic_strip.strt_p2p(pin1=INSTR.pin['a1'],pin2=GC1.pin['g1']).put()
- pic_strip.strt_p2p(pin1=INSTR.pin['b1'],pin2=GC2.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: dX_c = abs(test_cell.pin['a1'].x - test_cell.pin['b1'].x)
+ dX_c = abs(test_cell.pin['opt_a1'].x - test_cell.pin['opt_b1'].x)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: INSTR = test_cell.put('a1',GC1.pin['g1'].x + dX_gc2gc/2-dX_c/2-R_bend-offset,GC1.pin['g1'].y,0,flip=0)
+ INSTR = test_cell.put('opt_a1',GC1.pin['g1'].x + dX_gc2gc/2-dX_c/2-R_bend-offset,GC1.pin['g1'].y,0,flip=0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.strt_p2p(pin1=INSTR.pin['a1'],pin2=GC1.pin['g1']).put()
+ pic_strip.strt_p2p(pin1=INSTR.pin['opt_a1'],pin2=GC1.pin['g1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: pic_strip.strt_p2p(pin1=INSTR.pin['b1'],pin2=GC2.pin['g1']).put()
+ pic_strip.strt_p2p(pin1=INSTR.pin['opt_b1'],pin2=GC2.pin['g1']).put()
INSTR.raise_pins()
nd.Pin(name='a0').put(0,0,180)
diff --git a/mxpic/components/primitives/pic/spiral.py b/mxpic/components/primitives/pic/spiral.py
index 5e92844..28af42b 100644
--- a/mxpic/components/primitives/pic/spiral.py
+++ b/mxpic/components/primitives/pic/spiral.py
@@ -234,14 +234,18 @@ class spiral:
SPR_U = Conchoid(R0=R_act,kR=kR,T=self.cycles*pi,w=self.width*(a1-a2)+(b1-b2),
layer=layers,final_flat=None,begin_flat=None,res=self.res)
# layer=layers,final_flat=0,begin_flat=spr_bend.vtx_center[-1,0]/spr_bend.vtx_center[-1,1],res=self.res)
- SPR_U_INST = SPR_U.cell.put('a1',IN_L.pin['b0'].x,IN_L.pin['b0'].y,90,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: SPR_U_INST = SPR_U.cell.put('a1',IN_L.pin['b0'].x,IN_L.pin['b0'].y,90,flip=1)
+ SPR_U_INST = SPR_U.cell.put('opt_a1',IN_L.pin['b0'].x,IN_L.pin['b0'].y,90,flip=1)
""" relative part """
SPR_D = Conchoid(R0=R_act,kR=kR,T=self.cycles*pi+pi-self.port_angle/180*np.pi,w=self.width*(a1-a2)+(b1-b2),layer=layers,
final_flat=None,
begin_flat=None,res=self.res)
# begin_flat=spr_bend.vtx_center[-1,0]/spr_bend.vtx_center[-1,1],res=self.res)
- SPR_D_INST = SPR_D.cell.put('a1',IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: SPR_D_INST = SPR_D.cell.put('a1',IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90,flip=1)
+ SPR_D_INST = SPR_D.cell.put('opt_a1',IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90,flip=1)
if (self.sharp_patch==True and b1!=0 and b2!=0):
sz = (R_act+pitch*self.cycles+self.port_angle/180*np.pi*kR + self.width*a1+b1)*2
@@ -251,14 +255,26 @@ class spiral:
self.Ru = SPR_U.R_end
self.Rd = SPR_D.R_end
if (self.width!=self.w_port):
- nd.taper(xs=self.xs,width1=self.width,width2=self.w_port,length=self.Ltp_port).put(SPR_U_INST.pin['b1'])
- nd.Pin(name='a1',width=self.w_port).put()
- nd.taper(xs=self.xs,width1=self.width,width2=self.w_port,length=self.Ltp_port).put(SPR_D_INST.pin['b1'])
- nd.Pin(name='b1',width=self.w_port).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(xs=self.xs,width1=self.width,width2=self.w_port,length=self.Ltp_port).put(SPR_U_INST.pin['b1'])
+ nd.taper(xs=self.xs,width1=self.width,width2=self.w_port,length=self.Ltp_port).put(SPR_U_INST.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_port).put()
+ nd.Pin(name='opt_a1',width=self.w_port,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(xs=self.xs,width1=self.width,width2=self.w_port,length=self.Ltp_port).put(SPR_D_INST.pin['b1'])
+ nd.taper(xs=self.xs,width1=self.width,width2=self.w_port,length=self.Ltp_port).put(SPR_D_INST.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_port).put()
+ nd.Pin(name='opt_b1',width=self.w_port,type="optical:").put()
else :
- nd.Pin(name='a1',width=self.w_port).put(SPR_U_INST.pin['b1'])
- nd.Pin(name='b1',width=self.width).put(SPR_D_INST.pin['b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_port).put(SPR_U_INST.pin['b1'])
+ nd.Pin(name='opt_a1',width=self.w_port,type="optical:").put(SPR_U_INST.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.width).put(SPR_D_INST.pin['b1'])
+ nd.Pin(name='opt_b1',width=self.width,type="optical:").put(SPR_D_INST.pin['opt_b1'])
if show_pins:
nd.put_stub()
@@ -281,8 +297,12 @@ class spiral:
else:
with nd.Cell(instantiate=False) as bend_cell:
inst = circle(radius=self.R_bend,width=self.width,theta_start=0,theta_stop=90,xs=self.xs,res=self.res,sharp_patch=self.sharp_patch).cell.put(0,0,0)
- nd.Pin(name='a0',pin=inst.pin['a1']).put()
- nd.Pin(name='b0',pin=inst.pin['b1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a0',pin=inst.pin['a1']).put()
+ nd.Pin(name='a0',pin=inst.pin['opt_a1']).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b0',pin=inst.pin['b1']).put()
+ nd.Pin(name='b0',pin=inst.pin['opt_b1']).put()
bend_sz = [self.R_bend,self.R_bend]
L_bend = np.pi/2*self.R_bend
@@ -379,19 +399,31 @@ class spiral:
if (self.w_port !=self.width) :
if (self.rib2strip):
nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs='strip').put(pin_D_pre)
- nd.Pin(name='b1',width=self.w_bend_port).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_bend_port).put()
+ nd.Pin(name='opt_b1',width=self.w_bend_port,type="optical:").put()
nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs='strip').put(pin_U_pre)
- nd.Pin(name='a1',width=self.w_bend_port).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_bend_port).put()
+ nd.Pin(name='opt_a1',width=self.w_bend_port,type="optical:").put()
else :
nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs=self.xs).put(pin_D_pre)
- nd.Pin(name='b1',width=self.w_bend_port).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_bend_port).put()
+ nd.Pin(name='opt_b1',width=self.w_bend_port,type="optical:").put()
nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs=self.xs).put(pin_U_pre)
- nd.Pin(name='a1',width=self.w_bend_port).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_bend_port).put()
+ nd.Pin(name='opt_a1',width=self.w_bend_port,type="optical:").put()
else:
- nd.Pin(name='b1',width=self.w_bend_port).put(pin_D_pre)
- nd.Pin(name='a1',width=self.w_bend_port).put(pin_U_pre)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_bend_port).put(pin_D_pre)
+ nd.Pin(name='opt_b1',width=self.w_bend_port,type="optical:").put(pin_D_pre)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_bend_port).put(pin_U_pre)
+ nd.Pin(name='opt_a1',width=self.w_bend_port,type="optical:").put(pin_U_pre)
self.L = L
@@ -745,8 +777,12 @@ class spiral_rectangle:
taper = self.cell_xs_transition.put(pin_U_pre)
pin_U_pre = taper.pin['b0']
- nd.Pin(name='b1',width=self.w_port).put(pin_D_pre)
- nd.Pin(name='a1',width=self.w_port).put(pin_U_pre)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_port).put(pin_D_pre)
+ nd.Pin(name='opt_b1',width=self.w_port,type="optical:").put(pin_D_pre)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_port).put(pin_U_pre)
+ nd.Pin(name='opt_a1',width=self.w_port,type="optical:").put(pin_U_pre)
self.L = L
@@ -1088,7 +1124,9 @@ class spiral_circle:
# print("")
- SPR_U_INST = SPR_U.cell.put('a1',IN_L.pin['b0'].x,IN_L.pin['b0'].y,90 + Arot,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: SPR_U_INST = SPR_U.cell.put('a1',IN_L.pin['b0'].x,IN_L.pin['b0'].y,90 + Arot,flip=1)
+ SPR_U_INST = SPR_U.cell.put('opt_a1',IN_L.pin['b0'].x,IN_L.pin['b0'].y,90 + Arot,flip=1)
w_cur = self.width*(a1-a2)+(b1-b2)
## adding connection patch
@@ -1102,11 +1140,15 @@ class spiral_circle:
res=self.res)
- SPR_D_INST = SPR_D.cell.put('a1',IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90 + Arot,flip=1)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: SPR_D_INST = SPR_D.cell.put('a1',IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90 + Arot,flip=1)
+ SPR_D_INST = SPR_D.cell.put('opt_a1',IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90 + Arot,flip=1)
nd.taper(layer=layers,width1=w_cur,width2=w_cur-0.01,length=0.01).put(IN_R.pin['b0'].x,IN_R.pin['b0'].y,-90-self.Atilt+Arot)
nd.taper(layer=layers,width1=w_cur,width2=w_cur-0.01,length=0.01).put(IN_R.pin['b0'].x,IN_R.pin['b0'].y, 90-self.Atilt+Arot)
- self.Rmax = np.sqrt(SPR_D_INST.pin['b1'].x**2 + SPR_D_INST.pin['b1'].y**2)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: self.Rmax = np.sqrt(SPR_D_INST.pin['b1'].x**2 + SPR_D_INST.pin['b1'].y**2)
+ self.Rmax = np.sqrt(SPR_D_INST.pin['opt_b1'].x**2 + SPR_D_INST.pin['opt_b1'].y**2)
if (self.sharp_patch==True and b1!=0 and b2!=0):
sz = (R_act+pitch*self.cycles+self.port_angle/180*np.pi*kR + self.width*a1+b1)*2
@@ -1116,10 +1158,18 @@ class spiral_circle:
self.Ru = SPR_U.R_end
self.Rd = SPR_D.R_end
- nd.taper(xs=self.xs,width1=self.w_port,width2=self.w_port,length=self.Lport).put(SPR_U_INST.pin['b1'])
- nd.Pin(name='a1',width=self.w_port).put()
- nd.taper(xs=self.xs,width1=self.w_port,width2=self.w_port,length=self.Lport).put(SPR_D_INST.pin['b1'])
- nd.Pin(name='b1',width=self.w_port).put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(xs=self.xs,width1=self.w_port,width2=self.w_port,length=self.Lport).put(SPR_U_INST.pin['b1'])
+ nd.taper(xs=self.xs,width1=self.w_port,width2=self.w_port,length=self.Lport).put(SPR_U_INST.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=self.w_port).put()
+ nd.Pin(name='opt_a1',width=self.w_port,type="optical:").put()
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.taper(xs=self.xs,width1=self.w_port,width2=self.w_port,length=self.Lport).put(SPR_D_INST.pin['b1'])
+ nd.taper(xs=self.xs,width1=self.w_port,width2=self.w_port,length=self.Lport).put(SPR_D_INST.pin['opt_b1'])
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=self.w_port).put()
+ nd.Pin(name='opt_b1',width=self.w_port,type="optical:").put()
if show_pins:
nd.put_stub()
diff --git a/mxpic/components/primitives/pic/taper.py b/mxpic/components/primitives/pic/taper.py
index 1e30446..fc5fe17 100644
--- a/mxpic/components/primitives/pic/taper.py
+++ b/mxpic/components/primitives/pic/taper.py
@@ -199,9 +199,13 @@ class taper_xs2xs:
nd.strt(length=L_port,xs=xs_2,width=w_2).put(L_taper,0,0)
nd.Pin(name='a0',width=w_1).put(-L_port,0,180)
- nd.Pin(name='a1',width=w_1).put(-L_port,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=w_1).put(-L_port,0,180)
+ nd.Pin(name='opt_a1',width=w_1,type="optical:").put(-L_port,0,180)
nd.Pin(name='b0',width=w_2).put(L_taper+L_port,0,0)
- nd.Pin(name='b1',width=w_2).put(L_taper+L_port,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=w_2).put(L_taper+L_port,0,0)
+ nd.Pin(name='opt_b1',width=w_2,type="optical:").put(L_taper+L_port,0,0)
self.cell = C
@@ -363,8 +367,12 @@ class PSR:
nd.strt(width=w0,length=L_port,layer=layers).put(0,0,180)
nd.strt(width=w1,length=L_port,layer=layers).put(sum(Lt_rib),0,0)
- nd.Pin(name='a1',width=w[0]).put(-L_port,0,180)
- nd.Pin(name='b1',width=w[-1]).put(sum(Lt_rib)+L_port,0,0)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='a1',width=w[0]).put(-L_port,0,180)
+ nd.Pin(name='opt_a1',width=w[0],type="optical:").put(-L_port,0,180)
+ ## revised in 2026.06.07 by Qin Yue
+ # legacy: nd.Pin(name='b1',width=w[-1]).put(sum(Lt_rib)+L_port,0,0)
+ nd.Pin(name='opt_b1',width=w[-1],type="optical:").put(sum(Lt_rib)+L_port,0,0)
self.cell = C
diff --git a/runs/build_all_primitives.gds b/runs/build_all_primitives.gds
index c705fdf..29692b7 100644
Binary files a/runs/build_all_primitives.gds and b/runs/build_all_primitives.gds differ
diff --git a/runs/build_images.py b/runs/build_images.py
index 195e0ad..a819361 100644
--- a/runs/build_images.py
+++ b/runs/build_images.py
@@ -34,7 +34,6 @@ _PRIMITIVE_BUILDER_SPEC.loader.exec_module(_primitive_builder)
bootstrap_technology = _primitive_builder.bootstrap_technology
build_context = _primitive_builder.build_context
build_kwargs = _primitive_builder.build_kwargs
-build_top_cell = _primitive_builder.build_top_cell
discover_primitive_classes = _primitive_builder.discover_primitive_classes
get_cell = _primitive_builder.get_cell
safe_name = _primitive_builder.safe_name
@@ -68,6 +67,7 @@ STATUS_STYLES = {
"skipped": ("-", "yellow", "Skipped"),
"failed": ("x", "red", "Failed"),
}
+PIN_NAME_EXCLUDE = {"org"}
def colorize(text: str, color: str) -> str:
@@ -113,6 +113,23 @@ def image_subdir_for_module(module_name: str, package_root: str) -> Path:
return Path(*parts)
+def visible_pin_names(cell: nd.Cell) -> list[str]:
+ """Return all user-facing cell pins in deterministic cell order."""
+ return [name for name in cell.pin if name not in PIN_NAME_EXCLUDE]
+
+
+def build_image_top_cell(cell: nd.Cell, top_name: str) -> nd.Cell:
+ """Build a plotting wrapper that exposes and draws every component pin."""
+ pin_names = visible_pin_names(cell)
+ with nd.Cell(name=top_name, instantiate=False) as top_cell:
+ instance = cell.put(0, 0, 0)
+ if pin_names:
+ instance.raise_pins(pin_names, pin_names)
+ nd.put_stub(pinname=pin_names, pinsize=0.8)
+
+ return top_cell
+
+
def generate_image_for_class(
target_dir: Path,
class_name: str,
@@ -124,7 +141,7 @@ def generate_image_for_class(
"""Instantiate one component class and save its cell image."""
kwargs = build_kwargs(component_class, device_name, context)
instance = component_class(**kwargs)
- top_cell = build_top_cell(get_cell(instance), top_name)
+ top_cell = build_image_top_cell(get_cell(instance), top_name)
target_dir.mkdir(parents=True, exist_ok=True)
image_path = target_dir / f"{class_name}.png"
|