def create_graph(self, elems): prim_elems = ElementList() for S in elems.sref: if isinstance(S.ref, (NLayer, TLayer, DLayer)): prim_elems += S for layer in RDD.METALS.layers: L = Cell(name='{}'.format(layer)) # ply_elems = D.get_mlayers(layer=layer) ply_elems = ElementList() for S in elems.sref: if isinstance(S.ref, CMLayers): # print(S.ref.layer) if S.ref.layer.number == layer: # print(S) for p in S.ref.elementals: # print(p.ref.player) # FIXME!!! # if isinstance(p, ELayers): # raise Errors if isinstance(p.ref.player, Polygons): ply_elems += p.ref.player if ply_elems: geom = Geometry(name='{}'.format(layer), lcar=self.lcar, algorithm=self.algorithm, layer=layer, polygons=ply_elems) mesh_data = geom.create_mesh params = { 'name': '{}'.format(layer), 'layer': Layer(number=layer), 'point_data': [mesh_data[2]], 'cell_data': [mesh_data[3]], 'field_data': [mesh_data[4]] } mesh = Mesh(polygons=ply_elems, primitives=prim_elems, points=mesh_data[0], cells=mesh_data[1], **params) L += mesh elems += SRef(L) sg = {} subgraphs = elems.subgraphs for name, g in subgraphs.items(): graph = Graph(subgraphs={name: g}) sg[name] = graph.g ng = Graph(subgraphs=sg) ng.write_graph(graphname='{}'.format(layer)) elems += ng
def create_box_layer(self): elems = ElementList() for p in self.device_elems.polygons: layer = p.gdslayer.number # if layer in RDD.GROUND.layers: if layer == RDD.GDSII.GPLAYER: l1 = Layer(name='BoundingBox', number=layer, datatype=5) elems += Polygons(polygons=self.blayer.polygons, gdslayer=l1) return elems
def create_labels(self): elems = ElementList() for p in self.device_elems.polygons: layer = p.gdslayer.number # if layer in RDD.GROUND.layers: if layer == RDD.GDSII.GPLAYER: l2 = Layer(name='BoundingBox', number=layer, datatype=5) elems += Port(name='P{}'.format(layer), midpoint=self.blayer.center, gdslayer=l2) return elems
def create_labels(self): elems = ElementList() for p in self.device_elems.polygons: layer = p.gdslayer.number players = RDD.PLAYER.get_physical_layers(purposes='METAL') if layer in players: l2 = Layer(name='BoundingBox', number=layer, datatype=8) # FIXME: Ports with the same name overrides eachother. elems += Port(name='P{}'.format(layer), midpoint=self.blayer.center, gdslayer=l2) return elems
def create_box_layer(self): elems = ElementList() setter = {} for p in self.device_elems.polygons: layer = p.gdslayer.number setter[layer] = 'not_set' for p in self.device_elems.polygons: layer = p.gdslayer.number players = RDD.PLAYER.get_physical_layers(purposes=['METAL']) if layer in players and setter[layer] == 'not_set': l1 = Layer(name='BoundingBox', number=layer, datatype=8) elems += Polygons(polygons=self.blayer.polygons, gdslayer=l1) setter[layer] = 'already_set' return elems
def LayerField(name='', number=0, datatype=0, **kwargs): from spira.gdsii.layer import Layer F = Layer(name=name, number=number, datatype=datatype, **kwargs) return DataFieldDescriptor(default=F, **kwargs)
RDD.name = 'MITLL' RDD.desc = 'Process fabrication data for the MITLL process from the USA.' # ---------------------------------- GDSII --------------------------------------- RDD.GDSII = DataTree() RDD.GDSII.TEXT = 64 RDD.GDSII.UNITS = 1e-6 # --------------------------------- Metals --------------------------------------- RDD.LAYER = ProcessTree() RDD.L0 = ProcessTree() RDD.L0.LAYER = Layer(name='L0', number=3) RDD.L0.COLOR = '#B6EBE6' RDD.M0 = ProcessTree() RDD.M0.LAYER = Layer(name='M0', number=1) RDD.M0.COLOR = '#B6EBE6' RDD.M1 = ProcessTree() RDD.M1.LAYER = Layer(name='M1', number=10) RDD.M1.COLOR = '#B6EBE6' RDD.M2 = ProcessTree() RDD.M2.LAYER = Layer(name='M2', number=20) RDD.M2.COLOR = '#B6EBE6' RDD.M3 = ProcessTree()
RDD.desc = 'Process fabrication data for the AIST process from Japan.' # ---------------------------------- GDSII --------------------------------------- RDD.GDSII = DataTree() RDD.GDSII.TEXT = 64 RDD.GDSII.UNIT = 1e-6 RDD.GDSII.GRID = 1e-6 RDD.GDSII.PRECISION = 1e-9 # --------------------------------- Metals -------------------------------------- RDD.LAYER = ProcessTree() RDD.GP = ProcessTree() RDD.GP.LAYER = Layer(name='GP', number=1) RDD.GP.COLOR = '#49CEC1' RDD.RES = ProcessTree() RDD.RES.LAYER = Layer(name='RES', number=3) RDD.RES.WIDTH = 1.5 RDD.RES.COLOR = '#7FDCD3' RDD.BAS = ProcessTree() RDD.BAS.LAYER = Layer(name='BAS', number=4) RDD.BAS.WIDTH = 1.5 RDD.BAS.COLOR = '#91E1D9' RDD.COU = ProcessTree() RDD.COU.LAYER = Layer(name='COU', number=8) RDD.COU.WIDTH = 1.5
def create_layer(self): return Layer(name=self.name, number=self.number, datatype=self.error_type)