diff --git a/Tools/python/split_layers.py b/Tools/python/split_layers.py index 58557cc0cccccf84bb71d9950fc43ab43a6184cb..c1172d93ce6ea3ed8f40c952bdca301247f11039 100755 --- a/Tools/python/split_layers.py +++ b/Tools/python/split_layers.py @@ -4,6 +4,9 @@ import sys import os import gdspy +import multiprocessing +from joblib import Parallel, delayed + orig_box_width=10. orig_box_spacing=10. @@ -126,17 +129,8 @@ def generate_gds_file(layout_path,cellname): cell=cell.add(gdspy.Rectangle(p11, p12, 1)) cell=cell.add(gdspy.Rectangle(p21, p22, 1)) cell=cell.flatten() - - for layername in layer_mapping: - ncell=cell.copy(layername,deep_copy=True) - thelayers=layer_mapping[layername] - ncell=ncell.remove_polygons(lambda pts, layer, datatype: layer not in thelayers) - ncell=ncell.add(gdspy.Rectangle(p11, p12, 1)) - ncell=ncell.add(gdspy.Rectangle(p21, p22, 1)) - ncell=ncell.flatten(single_layer=1,single_datatype=1) - newgdsii=gdspy.GdsLibrary("mask_"+layername) - newgdsii.add(ncell) - newgdsii.write_gds(layout_path+"/gds/mask_"+layername+".gds") + num_cores = multiprocessing.cpu_count() - 2 + Parallel(n_jobs=num_cores, verbose=50)(delayed(split_task)(p11,p12,p21,p22,cell,layername)for layername in layer_mapping) except Exception as e: print("Can't do this:"+e) @@ -144,6 +138,20 @@ def generate_gds_file(layout_path,cellname): if '-s' in sys.argv: gdspy.LayoutViewer() + +def split_task(p11,p12,p21,p22,cell,layername): + ncell=cell.copy(layername,deep_copy=True) + thelayers=layer_mapping[layername] + ncell=ncell.remove_polygons(lambda pts, layer, datatype: layer not in thelayers) + ncell=ncell.add(gdspy.Rectangle(p11, p12, 1)) + ncell=ncell.add(gdspy.Rectangle(p21, p22, 1)) + ncell=ncell.flatten(single_layer=1,single_datatype=1) + newgdsii=gdspy.GdsLibrary("mask_"+layername) + newgdsii.add(ncell) + newgdsii.write_gds(layout_path+"/gds/mask_"+layername+".gds") + print(layername) + + def show_help(): print("-n cellname:\tname of the cell to export") print("-l:\t\tswitch to render library cells because default is layout cells")