] 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')
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')
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)