Beispiel #1
0
    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
Beispiel #2
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
    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
Beispiel #6
0
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)
Beispiel #7
0
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()
Beispiel #8
0
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
Beispiel #9
0
 def create_layer(self):
     return Layer(name=self.name, number=self.number, datatype=self.error_type)