Not signed in (Sign In)

Vanilla 1.1.4 is a product of Lussumo. More Information: Documentation, Community Support.

    • CommentAuthorCanny
    • CommentTimeJul 23rd 2012
     
    Hi, Matthias,

    Thank you for this friendly software.
    I have a question, I want to do the simple statistic with the layout.
    There are many cells in the layout and I want to know every cell appears in the layout how many times?
    Is there any command can help this calculation?

    Regards,
    Canny
    • CommentAuthorMatthias
    • CommentTimeJul 25th 2012
     

    Hi Canny.

    What precisely do you mean by "how many times"? Do you mean the flat count, i.e. the number of times a cell appears in a given other cell when drawing that cell? This count is not the same than the number of instances, because a cell might be instantiated a number of times in another cell which itself is instantiated multiple times. Hence in that case the count multiplies.

    Best regards,

    Matthias

    • CommentAuthorCanny
    • CommentTimeJul 27th 2012
     
    Hi, Matthias,

    I'm sorry for in-precisely question.
    I want to know under the some specific cell(ex, top-cell),
    how many times the cell IDs were used (or instantiated)?
    Ex, there are 16 instances under the top_cell, 4 instances are referenced by cell ID "A", 2 referenced by cell ID "B", 8 referenced by cell ID "C" and 2 referenced by cell ID "D". Is there any way to get the result list like,
    Top_cell/Cell_ID/Count
    top_cell/A/4
    top_cell/B/2
    top_cell/C/8
    top_cell/D/2
    ?

    Thank you for your feedback.

    Regards,
    Canny
    • CommentAuthorCanny
    • CommentTimeJul 30th 2012 edited
     
    Hi, Matthias,

    I'm also curious about the "flat" of brower instance in Klayout.
    Why is the number of "Flat" always twice of the "Count"?

    Regards,
    Hsin Yi
    • CommentAuthorMatthias
    • CommentTimeAug 1st 2012 edited
     

    Hallo,

    Regarding the second question, the flat count is not necessarily two times the count. Consider the following hierarchy, where B is instantiated in A and A itself in TOP. Assume there a three instances of B in A (the instance count is 3). But expanding the two A instances in TOP effectively renders 6 instances of B in TOP (2 times 3). The latter is the "flat" count. In that example the flat count is twice the instance count:

    TOP
      A (2 times)
        B (3 times)
    

    The arithmetics gets more complicated if you have multiple instantiation paths of a cell, but in every case the "flat" count is the number of expanded instances of a cell in the current scope. The instance browser will report a total of flat instances and a flat count along each instantiation path.

    For the first question: the instance browser does not exactly give you that information but just for one cell. It is possible to create a script that gives you that information.

    You'll find a sample script below. The script shows the results in a message box which may not make sense if the list gets very long.

    Best regards,

    Matthias

    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # DESCRIPTION: Dump the child cells of the current cell with their instance count.
    # The script installs a corresponding entry in the "Tools" menu, called
    # "Count child cells".
    #
    # Run the script with
    #   klayout -rm count_insts.rbm ...
    # or put the script as "count_insts.rbm" into the installation path (on Unix for version <=0.21:
    # set $KLAYOUTPATH to the installation folder).
    #
    
    class MenuAction < RBA::Action
      def initialize( title, shortcut, &action )
        self.title = title
        self.shortcut = shortcut
        @action = action
      end
      def triggered
        @action.call( self )
      end
    private
      @action
    end
    
    $count_insts_menu_handler = MenuAction.new( "Count child cells", "" ) {
    
      app = RBA::Application.instance
    
      mw = app.main_window
      view = mw.current_view
      cv = view.cellview(view.active_cellview_index)
    
      layout = cv.layout
    
      insts = {}
    
      cv.cell.each_inst do |inst|
        cn = layout.cell_name(inst.cell_index)
        insts[cn] ||= 0
        insts[cn] += 1
      end
    
      text = "In cell " + layout.cell_name(cv.cell_index) + ":\n\n"
      insts.keys.sort.each do |cn|
        text += cn + ":" + insts[cn].to_s + "\n"
      end
    
      RBA::MessageBox::info("Instance count" , text, RBA::MessageBox::b_ok)
    
    }
    
    app = RBA::Application.instance
    mw = app.main_window
    
    menu = mw.menu
    menu.insert_separator("tools_menu.end", "sep_rename_cells")
    menu.insert_item("tools_menu.end", "count_insts", $count_insts_menu_handler)
    
    • CommentAuthorCanny
    • CommentTimeAug 11th 2012 edited
     
    Hi, Matthias,

    Thank you for your kindly feedback, I totally understand my second question.
    I'm sorry for my pool English to make the mistake of my 1st question.
    The information I want to get is like the left window of Klayout Browse instance shows.
    To take the example you took, the information would be,
    B shows 2 times under parent A
    B shows 6 times under parent TOP

    But the function Browse instance only show information of 1 cell per time.
    I want to know this simple statistic information of all cells in the layout.
    If there is any command to do it and export the result with the file?

    Regards,
    Canny
    • CommentAuthorMatthias
    • CommentTimeAug 16th 2012
     

    Hi Canny,

    Ok, given that requirement the script looks somewhat different

    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # DESCRIPTION: Dump the child cells of the current cell with their instance count.
    # The script installs a corresponding entry in the "Tools" menu, called
    # "Count child cells".
    #
    # Run the script with
    #   klayout -rm count_insts.rbm ...
    # or put the script as "count_insts.rbm" into the installation path (on Unix for version <=0.21:
    # set $KLAYOUTPATH to the installation folder).
    #
    
    class MenuAction < RBA::Action
      def initialize( title, shortcut, &action )
        self.title = title
        self.shortcut = shortcut
        @action = action
      end
      def triggered
        @action.call( self )
      end
    private
      @action
    end
    
    $produce_cell_stat_handler = MenuAction.new( "Produce cell statistics", "" ) do
    
      app = RBA::Application.instance
    
      mw = app.main_window
      view = mw.current_view
      cv = view.cellview(view.active_cellview_index)
    
      layout = cv.layout
    
      cells = {}
    
      layout.each_cell do |cell|
        c = layout.cell_name(cell.cell_index)
        cells[c] ||= {}
        cell.each_parent_inst do |pi|
          pc = layout.cell_name(pi.parent_cell_index)
          cells[c][pc] ||= 0
          cells[c][pc] += 1
        end
      end
    
      File.open("stat.txt", "w") do |file|
        cells.each do |c,pc_stat|
          pc_stat.each do |pc,count|
            file.puts("#{c}: #{count} instances in #{pc}")
          end
        end
      end
    
    end
    
    app = RBA::Application.instance
    mw = app.main_window
    
    menu = mw.menu
    menu.insert_separator("tools_menu.end", "sep_cell_stat")
    menu.insert_item("tools_menu.end", "cell_stat", $produce_cell_stat_handler)
    

    The script will write a file called "stat.txt" which contains the information about the number of instances of all cells in other cells. Again it's just a template, you may modify of course.

    Best regards,

    Matthias

    • CommentAuthorCanny
    • CommentTimeAug 19th 2012
     
    Hi, Matthias,

    Thank you for your kindly help.
    It is great and useful for me.

    Regards,
    Canny
    • CommentAuthorCanny
    • CommentTimeJun 2nd 2016 edited
     

    Hi, Matthias,

    I'm confused with this section and don't know how to modify it

     cells.each do |c,pc_stat|
      pc_stat.each do |pc,count|
        file.puts("#{c}: #{count} instances in #{pc}")
      end
    end
    

    If I have 2 instances under the layout which top cell is A one is 1*5 B cell array the other is a single B cell

    I use the above script, and the result would show

        B:2 instances in A
    

    B cell shows 6 time under its parents cell A, not 2.

    Could you tell me how to modify the script to record the number of times of cell referenced?

    Regards, Canny

    • CommentAuthorMatthias
    • CommentTimeJun 5th 2016
     

    Hi Canny,

    that's simple: replace

    cells[c][pc] += 1
    

    by

    cells[c][pc] += pi.inst.size
    

    Matthias