97 lines
4.3 KiB
Python
97 lines
4.3 KiB
Python
import numpy
|
|
from numpy import pi
|
|
|
|
import masque
|
|
import masque.file.gdsii
|
|
import masque.file.dxf
|
|
from masque import shapes, Pattern, SubPattern, GridRepetition
|
|
|
|
from pprint import pprint
|
|
|
|
|
|
def main():
|
|
pat = masque.Pattern(name='ellip_grating')
|
|
for rmin in numpy.arange(10, 15, 0.5):
|
|
pat.shapes.append(shapes.Arc(
|
|
radii=(rmin, rmin),
|
|
width=0.1,
|
|
angles=(0*-numpy.pi/4, numpy.pi/4)
|
|
))
|
|
|
|
pat.scale_by(1000)
|
|
pat.visualize()
|
|
pat2 = pat.copy()
|
|
pat2.name = 'grating2'
|
|
|
|
pat3 = Pattern('sref_test')
|
|
pat3.subpatterns = [
|
|
SubPattern(pat, offset=(1e5, 3e5)),
|
|
SubPattern(pat, offset=(2e5, 3e5), rotation=pi/3),
|
|
SubPattern(pat, offset=(3e5, 3e5), rotation=pi/2),
|
|
SubPattern(pat, offset=(4e5, 3e5), rotation=pi),
|
|
SubPattern(pat, offset=(5e5, 3e5), rotation=3*pi/2),
|
|
SubPattern(pat, mirrored=(True, False), offset=(1e5, 4e5)),
|
|
SubPattern(pat, mirrored=(True, False), offset=(2e5, 4e5), rotation=pi/3),
|
|
SubPattern(pat, mirrored=(True, False), offset=(3e5, 4e5), rotation=pi/2),
|
|
SubPattern(pat, mirrored=(True, False), offset=(4e5, 4e5), rotation=pi),
|
|
SubPattern(pat, mirrored=(True, False), offset=(5e5, 4e5), rotation=3*pi/2),
|
|
SubPattern(pat, mirrored=(False, True), offset=(1e5, 5e5)),
|
|
SubPattern(pat, mirrored=(False, True), offset=(2e5, 5e5), rotation=pi/3),
|
|
SubPattern(pat, mirrored=(False, True), offset=(3e5, 5e5), rotation=pi/2),
|
|
SubPattern(pat, mirrored=(False, True), offset=(4e5, 5e5), rotation=pi),
|
|
SubPattern(pat, mirrored=(False, True), offset=(5e5, 5e5), rotation=3*pi/2),
|
|
SubPattern(pat, mirrored=(True, True), offset=(1e5, 6e5)),
|
|
SubPattern(pat, mirrored=(True, True), offset=(2e5, 6e5), rotation=pi/3),
|
|
SubPattern(pat, mirrored=(True, True), offset=(3e5, 6e5), rotation=pi/2),
|
|
SubPattern(pat, mirrored=(True, True), offset=(4e5, 6e5), rotation=pi),
|
|
SubPattern(pat, mirrored=(True, True), offset=(5e5, 6e5), rotation=3*pi/2),
|
|
]
|
|
|
|
pprint(pat3)
|
|
pprint(pat3.subpatterns)
|
|
pprint(pat.shapes)
|
|
|
|
args = {
|
|
'pattern': pat,
|
|
'a_vector': [1e4, 0],
|
|
'b_vector': [0, 1.5e4],
|
|
'a_count': 3,
|
|
'b_count': 2,
|
|
}
|
|
pat4 = Pattern('aref_test')
|
|
pat4.subpatterns = [
|
|
GridRepetition(**args, offset=(1e5, 3e5)),
|
|
GridRepetition(**args, offset=(2e5, 3e5), rotation=pi/3),
|
|
GridRepetition(**args, offset=(3e5, 3e5), rotation=pi/2),
|
|
GridRepetition(**args, offset=(4e5, 3e5), rotation=pi),
|
|
GridRepetition(**args, offset=(5e5, 3e5), rotation=3*pi/2),
|
|
GridRepetition(**args, mirrored=(True, False), offset=(1e5, 4e5)),
|
|
GridRepetition(**args, mirrored=(True, False), offset=(2e5, 4e5), rotation=pi/3),
|
|
GridRepetition(**args, mirrored=(True, False), offset=(3e5, 4e5), rotation=pi/2),
|
|
GridRepetition(**args, mirrored=(True, False), offset=(4e5, 4e5), rotation=pi),
|
|
GridRepetition(**args, mirrored=(True, False), offset=(5e5, 4e5), rotation=3*pi/2),
|
|
GridRepetition(**args, mirrored=(False, True), offset=(1e5, 5e5)),
|
|
GridRepetition(**args, mirrored=(False, True), offset=(2e5, 5e5), rotation=pi/3),
|
|
GridRepetition(**args, mirrored=(False, True), offset=(3e5, 5e5), rotation=pi/2),
|
|
GridRepetition(**args, mirrored=(False, True), offset=(4e5, 5e5), rotation=pi),
|
|
GridRepetition(**args, mirrored=(False, True), offset=(5e5, 5e5), rotation=3*pi/2),
|
|
GridRepetition(**args, mirrored=(True, True), offset=(1e5, 6e5)),
|
|
GridRepetition(**args, mirrored=(True, True), offset=(2e5, 6e5), rotation=pi/3),
|
|
GridRepetition(**args, mirrored=(True, True), offset=(3e5, 6e5), rotation=pi/2),
|
|
GridRepetition(**args, mirrored=(True, True), offset=(4e5, 6e5), rotation=pi),
|
|
GridRepetition(**args, mirrored=(True, True), offset=(5e5, 6e5), rotation=3*pi/2),
|
|
]
|
|
|
|
masque.file.gdsii.writefile((pat, pat2, pat3, pat4), 'rep.gds.gz', 1e-9, 1e-3)
|
|
|
|
cells = list(masque.file.gdsii.readfile('rep.gds.gz')[0].values())
|
|
masque.file.gdsii.writefile(cells, 'rerep.gds.gz', 1e-9, 1e-3)
|
|
|
|
masque.file.dxf.writefile(pat4, 'rep.dxf.gz')
|
|
dxf, info = masque.file.dxf.readfile('rep.dxf.gz')
|
|
masque.file.dxf.writefile(dxf, 'rerep.dxf.gz')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|