Source code for gdsfactory.components.taper_from_csv

"""Adiabatic tapers from CSV files."""

from __future__ import annotations

import pathlib
from functools import partial
from pathlib import Path

import numpy as np

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.typings import CrossSectionSpec

data = pathlib.Path(__file__).parent / "csv_data"


[docs] @gf.cell def taper_from_csv( filepath: Path = data / "taper_strip_0p5_3_36.csv", cross_section: CrossSectionSpec = "strip", ) -> Component: """Returns taper from CSV file. Args: filepath: for CSV file. cross_section: specification (CrossSection, string, CrossSectionFactory dict). """ import pandas as pd taper_data = pd.read_csv(filepath) xs = taper_data["x"].values * 1e6 ys = np.round(taper_data["width"].values * 1e6 / 2.0, 3) x = gf.get_cross_section(cross_section) layer = x.layer c = gf.Component() c.add_polygon(list(zip(xs, ys)) + list(zip(xs, -ys))[::-1], layer=layer) for section in x.sections[1:]: ys_trench = ys + section.width c.add_polygon( list(zip(xs, ys_trench)) + list(zip(xs, -ys_trench))[::-1], layer=section.layer, ) c.add_port( name="o1", center=(xs[0], 0), width=2 * ys[0], orientation=180, layer=layer, cross_section=x, ) c.add_port( name="o2", center=(xs[-1], 0), width=2 * ys[-1], orientation=0, layer=layer, cross_section=x, ) x.add_bbox(c) return c
taper_0p5_to_3_l36 = partial(taper_from_csv, filepath=data / "taper_strip_0p5_3_36.csv") taper_w10_l100 = partial(taper_from_csv, filepath=data / "taper_strip_0p5_10_100.csv") taper_w10_l150 = partial(taper_from_csv, filepath=data / "taper_strip_0p5_10_150.csv") taper_w10_l200 = partial(taper_from_csv, filepath=data / "taper_strip_0p5_10_200.csv") taper_w11_l200 = partial(taper_from_csv, filepath=data / "taper_strip_0p5_11_200.csv") taper_w12_l200 = partial(taper_from_csv, filepath=data / "taper_strip_0p5_12_200.csv") if __name__ == "__main__": # c = taper_0p5_to_3_l36() c = taper_w10_l100(cross_section="rib") # c = taper_w11_l200() c.show()