]

    xmax_cell = Cell('MerryChristmas')
    for i, xmas_text in enumerate(xmas_texts):
        xmas_text.translate(
            tuple(
                np.array(-xmas_text.bounding_box.mean(0)) +
                np.array([20, -80 - i * 10.])))  # Center justify label
        xmax_cell.add(xmas_text)

    TopCell = Cell('GrowthTheoryTopCell')
    TopCell.add(wheel1, origin=(-100., -60.))
    TopCell.add(wheel2, origin=(-100., -65.))
    TopCell.add(PitchDep, origin=(-200., -280.))
    # TopCell.add3(TheorySlitElong, origin=(-250., -50))
    TopCell.add(LenWidDep, origin=(-200., -50.))
    # TopCell.add(hexagon_array, origin=(-100., -50))
    # TopCell.add(circles_array, origin=(-75., -50.))
    # TopCell.add(triangle_down_array, origin=(-50., -50))
    # TopCell.add(triangle_up_array, origin=(-25., -50))
    TopCell.add(xmax_cell, origin=(0, 50))
    return TopCell


if __name__ == "__main__":
    TopCell = make_theory_cell_3br()
    # Add the copied cell to a Layout and save
    layout = Layout('LIBRARY')
    layout.add(TopCell)
    layout.save('GrowthTheoryCell_3BD.gds')
예제 #2
0
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
topCell.add(smField1, origin=(-dx / 2., dy / 2.))
topCell.add(smField2, origin=(dx / 2., dy / 2.))
topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
topCell.add(smField4, origin=(dx / 2., -dy / 2.))
topCell.add(centerLeftAlignField, origin=(-dx / 2, 0.))
topCell.add(centerRightAlignField, origin=(dx / 2, 0.))
topCell.add(centerAlignField, origin=(0., 0.))
topCell.spacing = np.array([4000., 4000.])

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a 2inch wafer as possible
    wafer = MBE100Wafer('MembranesWafer', cells=[topCell])
    layout.add(wafer)
# layout.show()
else:  # Only output a single copy of the pattern (not on a wafer)
    layout.add(topCell)
    layout.show()

filestring = str(waferVer) + '_' + WAFER_ID + '_' + date.today().strftime(
    "%d%m%Y") + ' dMark' + str(tDicingMarks)
filename = filestring.replace(' ', '_') + '.gds'
layout.save(filename)

cell_layout = Layout('LIBRARY')
cell_layout.add(wafer.blocks[0])
cell_layout.save(filestring.replace(' ', '_') + '_block' + '.gds')

# Output up chip for doing aligned jobs
# Create the layout and output GDS file
layout = Layout('LIBRARY', precision=1e-10)

wafer = MBEWafer('MembranesWafer', wafer_r=wafer_r, cells=[topCell], cell_gap=CELL_GAP, mkWidth=tDicingMarks,
                 cellsAtEdges=False)
file_string = str(waferVer)
filename = file_string.replace(' ', '_')

# Add pattern for ellipsometry check of SiO2 etching
size = 2000
rect = Rectangle((size / 2., size / 2.), (-size / 2., -size / 2.), layer=10)
rectCell = Cell('EtchCheckSquare')
rectCell.add(rect)
rect_layout = Layout('LIBRARY')
rect_layout.add(rectCell)
rect_layout.save(filename + '_etchCheck.gds')
rect_layout.add(rectCell)

layout.add(wafer)
layout.save(filename + '.gds')

# Output down chip for doing aligned jobs
layout_down = Layout('LIBRARY')
layout_down.add(wafer.block_down)
layout_down.save(filename + '_downblock.gds')

# Output up chip for doing aligned jobs
layout_up = Layout('LIBRARY')
layout_up.add(wafer.block_up)
layout_up.save(filename + '_upblock.gds')
topCell = Cell("TopCell")
topCell.add(lgField)
smFrameSpacing = 400  # Spacing between the three small frames
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
topCell.add(smField1, origin=(-dx / 2., dy / 2.))
topCell.add(smField2, origin=(dx / 2., dy / 2.))
topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
topCell.add(smField4, origin=(dx / 2., -dy / 2.))
topCell.add(centerAlignField, origin=(0., 0.))
topCell.spacing = np.array([4000., 4000.])

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a 2inch wafer as possible
    wafer = MBE100Wafer('MembranesWafer', cells=[topCell])
    layout.add(wafer)
# layout.show()
else:  # Only output a single copy of the pattern (not on a wafer)
    layout.add(topCell)
    layout.show()

filestring = str(waferVer) + '_' + WAFER_ID + '_' + date.today().strftime(
    "%d%m%Y") + ' dMark' + str(tDicingMarks)
filename = filestring.replace(' ', '_') + '.gds'
layout.save(filename)

cell_layout = Layout('LIBRARY')
cell_layout.add(wafer.cells[0])
cell_layout.save(filestring.replace(' ', '_') + '_block' + '.gds')
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
# topCell.add(smField1, origin=(-dx / 2., dy / 2.))
# topCell.add(smField2, origin=(dx / 2., dy / 2.))
# topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
# topCell.add(smField4, origin=(dx / 2., -dy / 2.))
# topCell.add(centerLeftAlignField, origin=(-dx / 2, 0.))
# topCell.add(centerRightAlignField, origin=(dx / 2, 0.))
# topCell.add(centerAlignField, origin=(0., 0.))
# topCell.spacing = np.array([4000., 4000.])

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a 2inch wafer as possible
    wafer = MBE100Wafer('MembranesWafer', cells=[topCell])
    layout.add(wafer)
# layout.show()
else:  # Only output a single copy of the pattern (not on a wafer)
    layout.add(topCell)
    layout.show()

filestring = str(waferVer) + '_' + WAFER_ID + '_' + date.today().strftime("%d%m%Y") + ' dMark' + str(tDicingMarks)
filename = filestring.replace(' ', '_') + '.gds'
layout.save(filename)

# cell_layout = Layout('LIBRARY')
# cell_layout.add(wafer.blocks[0])
# cell_layout.save(filestring.replace(' ', '_') + '_block' + '.gds')

# # Output up chip for doing aligned jobs
# layout_field = Layout('LIBRARY')
예제 #6
0
topCell.add(lgField)
smFrameSpacing = 400  # Spacing between the three small frames
dx = smFrameSpacing + smFrameSize
dy = smFrameSpacing + smFrameSize
topCell.add(smField1, origin=(-dx / 2., dy / 2.))
topCell.add(smField2, origin=(dx / 2., dy / 2.))
topCell.add(smField3, origin=(-dx / 2., -dy / 2.))
topCell.add(smField4, origin=(dx / 2., -dy / 2.))
topCell.add(centerAlignField, origin=(0., 0.))

# %%Create the layout and output GDS file
layout = Layout('LIBRARY')
if putOnWafer:  # Fit as many patterns on a wafer as possible
    wafer = MBEWafer('MembranesWafer', wafer_r=wafer_r, cells=[topCell], cell_gap=CELL_GAP, mkWidth=tDicingMarks,
                     cellsAtEdges=False)
    layout.add(wafer)

    # Try to poorly calculate the write time
    freq = 20E6  # 20 GHz
    spotsize = 100E-9  # 100nm beam
    gridsize = np.sqrt(2) / 2. * spotsize
    spotarea = gridsize ** 2.
    waferarea = wafer.area() / 1E6 ** 2.
    writetime = waferarea / spotarea / freq
    time = timedelta(seconds=writetime)
    print(('\nEstimated write time: \n' + str(time)))

# layout.show()
else:  # Only output a single copy of the pattern (not on a wafer)
    layout.add(topCell)
    layout.show()
# Create the layout and output GDS file
layout = Layout('LIBRARY', precision=1e-10)

wafer = MBEWafer('MembranesWafer',
                 wafer_r=wafer_r,
                 cells=[topCell],
                 cell_gap=CELL_GAP,
                 mkWidth=tDicingMarks,
                 cellsAtEdges=False)

filestring = str(waferVer) + '_' + WAFER_ID + '_' + date.today().strftime(
    "%d%m%Y") + ' dMark' + str(tDicingMarks)
filename = filestring.replace(' ', '_')

layout.add(wafer)
layout.save(filename + '.gds')

# Output down chip for doing aligned jobs
layout_down = Layout('LIBRARY')
layout_down.add(wafer.block_down)
layout_down.save(filename + '_downblock.gds')

# Output up chip for doing aligned jobs
layout_up = Layout('LIBRARY')
layout_up.add(wafer.block_up)
layout_up.save(filename + '_upblock.gds')

# Output up chip for doing aligned jobs
layout_up = Layout('LIBRARY')
layout_up.add(lgField)