140 lines
5.0 KiB
Python
140 lines
5.0 KiB
Python
from pprint import pprint
|
|
from pathlib import Path
|
|
|
|
import numpy
|
|
from numpy import pi
|
|
|
|
import masque
|
|
from masque import Pattern, Ref, Arc, Library
|
|
from masque.repetition import Grid
|
|
from masque.file import gdsii, dxf, oasis
|
|
|
|
|
|
|
|
def main():
|
|
lib = Library()
|
|
|
|
cell_name = 'ellip_grating'
|
|
pat = masque.Pattern()
|
|
|
|
layer = (0, 0)
|
|
for rmin in numpy.arange(10, 15, 0.5):
|
|
pat.shapes[layer].append(Arc(
|
|
radii=(rmin, rmin),
|
|
width=0.1,
|
|
angles=(0 * -pi/4, pi/4),
|
|
annotations={'1': ['blah']},
|
|
))
|
|
|
|
pat.scale_by(1000)
|
|
# pat.visualize()
|
|
lib[cell_name] = pat
|
|
print(f'\nAdded {cell_name}:')
|
|
pprint(pat.shapes)
|
|
|
|
new_name = lib.get_name(cell_name)
|
|
lib[new_name] = pat.copy()
|
|
print(f'\nAdded a copy of {cell_name} as {new_name}')
|
|
|
|
pat3 = Pattern()
|
|
pat3.refs[cell_name] = [
|
|
Ref(offset=(1e5, 3e5), annotations={'4': ['Hello I am the base Ref']}),
|
|
Ref(offset=(2e5, 3e5), rotation=pi/3),
|
|
Ref(offset=(3e5, 3e5), rotation=pi/2),
|
|
Ref(offset=(4e5, 3e5), rotation=pi),
|
|
Ref(offset=(5e5, 3e5), rotation=3*pi/2),
|
|
Ref(mirrored=True, offset=(1e5, 4e5)),
|
|
Ref(mirrored=True, offset=(2e5, 4e5), rotation=pi/3),
|
|
Ref(mirrored=True, offset=(3e5, 4e5), rotation=pi/2),
|
|
Ref(mirrored=True, offset=(4e5, 4e5), rotation=pi),
|
|
Ref(mirrored=True, offset=(5e5, 4e5), rotation=3*pi/2),
|
|
Ref(offset=(1e5, 5e5)).mirror_target(1),
|
|
Ref(offset=(2e5, 5e5), rotation=pi/3).mirror_target(1),
|
|
Ref(offset=(3e5, 5e5), rotation=pi/2).mirror_target(1),
|
|
Ref(offset=(4e5, 5e5), rotation=pi).mirror_target(1),
|
|
Ref(offset=(5e5, 5e5), rotation=3*pi/2).mirror_target(1),
|
|
Ref(offset=(1e5, 6e5)).mirror2d_target(True, True),
|
|
Ref(offset=(2e5, 6e5), rotation=pi/3).mirror2d_target(True, True),
|
|
Ref(offset=(3e5, 6e5), rotation=pi/2).mirror2d_target(True, True),
|
|
Ref(offset=(4e5, 6e5), rotation=pi).mirror2d_target(True, True),
|
|
Ref(offset=(5e5, 6e5), rotation=3*pi/2).mirror2d_target(True, True),
|
|
]
|
|
|
|
lib['sref_test'] = pat3
|
|
print('\nAdded sref_test:')
|
|
pprint(pat3)
|
|
pprint(pat3.refs)
|
|
|
|
rep = Grid(
|
|
a_vector=[1e4, 0],
|
|
b_vector=[0, 1.5e4],
|
|
a_count=3,
|
|
b_count=2,
|
|
)
|
|
pat4 = Pattern()
|
|
pat4.refs[cell_name] = [
|
|
Ref(repetition=rep, offset=(1e5, 3e5)),
|
|
Ref(repetition=rep, offset=(2e5, 3e5), rotation=pi/3),
|
|
Ref(repetition=rep, offset=(3e5, 3e5), rotation=pi/2),
|
|
Ref(repetition=rep, offset=(4e5, 3e5), rotation=pi),
|
|
Ref(repetition=rep, offset=(5e5, 3e5), rotation=3*pi/2),
|
|
Ref(repetition=rep, mirrored=True, offset=(1e5, 4e5)),
|
|
Ref(repetition=rep, mirrored=True, offset=(2e5, 4e5), rotation=pi/3),
|
|
Ref(repetition=rep, mirrored=True, offset=(3e5, 4e5), rotation=pi/2),
|
|
Ref(repetition=rep, mirrored=True, offset=(4e5, 4e5), rotation=pi),
|
|
Ref(repetition=rep, mirrored=True, offset=(5e5, 4e5), rotation=3*pi/2),
|
|
Ref(repetition=rep, offset=(1e5, 5e5)).mirror_target(1),
|
|
Ref(repetition=rep, offset=(2e5, 5e5), rotation=pi/3).mirror_target(1),
|
|
Ref(repetition=rep, offset=(3e5, 5e5), rotation=pi/2).mirror_target(1),
|
|
Ref(repetition=rep, offset=(4e5, 5e5), rotation=pi).mirror_target(1),
|
|
Ref(repetition=rep, offset=(5e5, 5e5), rotation=3*pi/2).mirror_target(1),
|
|
Ref(repetition=rep, offset=(1e5, 6e5)).mirror2d_target(True, True),
|
|
Ref(repetition=rep, offset=(2e5, 6e5), rotation=pi/3).mirror2d_target(True, True),
|
|
Ref(repetition=rep, offset=(3e5, 6e5), rotation=pi/2).mirror2d_target(True, True),
|
|
Ref(repetition=rep, offset=(4e5, 6e5), rotation=pi).mirror2d_target(True, True),
|
|
Ref(repetition=rep, offset=(5e5, 6e5), rotation=3*pi/2).mirror2d_target(True, True),
|
|
]
|
|
|
|
lib['aref_test'] = pat4
|
|
print('\nAdded aref_test')
|
|
|
|
folder = Path('./layouts/')
|
|
folder.mkdir(exist_ok=True)
|
|
print(f'...writing files to {folder}...')
|
|
|
|
gds1 = folder / 'rep.gds.gz'
|
|
gds2 = folder / 'rerep.gds.gz'
|
|
print(f'Initial write to {gds1}')
|
|
gdsii.writefile(lib, gds1, 1e-9, 1e-3)
|
|
|
|
print(f'Read back and rewrite to {gds2}')
|
|
readback_lib, _info = gdsii.readfile(gds1)
|
|
gdsii.writefile(readback_lib, gds2, 1e-9, 1e-3)
|
|
|
|
dxf1 = folder / 'rep.dxf.gz'
|
|
dxf2 = folder / 'rerep.dxf.gz'
|
|
print(f'Write aref_test to {dxf1}')
|
|
dxf.writefile(lib, 'aref_test', dxf1)
|
|
|
|
print(f'Read back and rewrite to {dxf2}')
|
|
dxf_lib, _info = dxf.readfile(dxf1)
|
|
print(Library(dxf_lib))
|
|
dxf.writefile(dxf_lib, 'Model', dxf2)
|
|
|
|
layer_map = {'base': (0,0), 'mylabel': (1,2)}
|
|
oas1 = folder / 'rep.oas'
|
|
oas2 = folder / 'rerep.oas'
|
|
print(f'Write lib to {oas1}')
|
|
oasis.writefile(lib, oas1, 1000, layer_map=layer_map)
|
|
|
|
print(f'Read back and rewrite to {oas2}')
|
|
oas_lib, oas_info = oasis.readfile(oas1)
|
|
oasis.writefile(oas_lib, oas2, 1000, layer_map=layer_map)
|
|
|
|
print('OASIS info:')
|
|
pprint(oas_info)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|