how to process space and width in Klayout_DRC for oval shape?

Hi Sir,
as below picture , do you have any idea for how to check the min. size (width /length) and space for the knid of oval case?
this is what our limitation....
1.we not need to know it is in-rule , but also we need to know how the min. size for width/length/space.
2.I knew taht way to check what the space as below.
ubm=input(152,1)
ubm.space(.......)

I also understand how to check width if the pattern is square.
ubm=input(152,1)
ubm.width(.......)
But as you can see what pattern I need to check , if using width command to check the size ,
that will output some of fake DRC on the oval both ends.

if using a BBOX to check that , that also output a bad result.

I also try for the option like ubm.width(5.um , projection)
The bad news is that can't check how the length is for this case.
Do you have any idea for that ?

Comments

  • Hi @jiunnweiyeh,

    Have you tried to undersize?

    So if you do

    ubm.not_interacting(ubm.sized(-2.5.um))
    

    this should give you all ubm shapes which are smaller than 5µm in one direction.

    But sizing may not be very precise if the round edge is resolved into many small edges.

    Matthias

  • Hi Matthias,
    Thanks for your reply.
    I have try what your code to check if the shape is more than X um(5um as your code)
    but that is only to know if the size small or large what is the Xum.
    we still need to know how is the oval size by length and width.....

  • So you mean the design rule is different for width and length? So like min width 5µm and min length 10µm? And the orientation can be anything?

    Matthias

  • Hi Matthias,
    Yes , each pattern been rotated by difference angle, that angle base on what the degree between
    pattern center to the or origin.
    I have another idea for measure the length and width of oval.

    a/get the center of oval by coordinate.
    b/check each points , find what the length between each 1 points to the center.
    c/check distance of the min. value by first and second points , will get the width of oval
    check distance of the max. value by first and sencod points , will get the legnth of oval.

    hope I can base on this flow to make a coding for that , maybe some of that will
    ordeal me for the capbility of programming.

  • edited April 3

    Hi,

    I think the easiest would be:

    1. Find ovals close to each other (I think by processing the bboxes you can achieve that)
    2. Take the center of the ovals (I believe the bbox().center() should be enough for that)
    3. Make an edge between the two centers, let's call it edge2
    4. Process each of the oval polygons to an Edges collection. (i.e. Edges(polygon))
    5. Pull for each one the interacting edges between the edge from (2) and the edges edges_top.interacting(Edges(edge2)) and edges_bot.interacting(Edges(edge2))
    6. Take the first edge of this new collection and calculate the intersection point edges_bot.interacting(Edges(edge2))[0].intersection_point(edge2)
    7. Get the distance between the two intersection_points edges_bot.interacting(Edges(edge2))[0].intersection_point(edge2).distance(edges_top.interacting(Edges(edge2))[0].intersection_point(edge2))

    I think this should work and is probably easier than processing all the points and calculating the distance yourself

  • Hi sebastian
    @sebastian
    OK , Thanks , I will try it.

Sign In or Register to comment.