Help us understand the problem. What is going on with this article?

gdspyを使って、PythonではじめてのGDSIIファイルを作る

はじめに

本稿は、PythonでGDSII formatを扱うの続きである。gdspyライブラリがインストールできたことを前提に、はじめてのGDSファイルを作ってみる。
まず、原稿執筆時点(2020年2月16日)でgdspyの最新バージョンは1.5.2である。1.5から設計思想がだいぶ変わったらしく、以前のバージョンで作ったスクリプトはそのままでは動かない。gdspyのオフィシャルにあるスクリプトですら現時点で正しく動かないので、取り急ぎ動くようにしたバージョンのみ下記に挙げる。

import gdspy

# The GDSII file is called a library, which contains multiple cells.
lib = gdspy.GdsLibrary()

# Geometry must be placed in cells.
cell = lib.new_cell('FIRST')

# Create the geometry (a single rectangle) and add it to the cell.
rect = gdspy.Rectangle((0, 0), (2, 1))
cell.add(rect)

# Save the library in a file called 'first.gds'.
lib.write_gds('first.gds')

# Optionally, save an image of the cell as SVG.
cell.write_svg('first.svg')

# Display all cells using the internal viewer.
gdspy.LayoutViewer(lib) <- ここ1行だけオフィシャルから変えた

GDSファイルの構成

GDSファイル(GDS IIフォーマット)の詳細については、参考サイトを見てほしいが12、大まかにいうと
ライブラリ
├セル
├ジオメトリ
という構成になっている。ライブラリが、1つのGDSファイル全体を指す。ジオメトリは個々の図形(多角形、円形、etc, etc,...)であり、セルはジオメトリをまとめたものである。
 通常、GDSはTopという名前のCellを持ち、これがライブラリ全体を記述するCellとなる。Topセルにはライブラリか、他のセル(サブセルという)への参照(リファレンス)が含まれる。つまりセルには階層構造が許されているので、適切に利用することができればファイルサイズの効率化につながる。、

gdspy 1.4 と1.5以降で何が変わったか

1.4までは、取り扱うGDSのライブラリをグローバルなクラスとして取り扱っていたのだが1、1.5以降は明確にローカルなクラス lib = gdspy.GdsLibrary() として取り扱われるようになった。それに伴い、オフィシャルのドキュメント含めそのままでは動かないコードが多々ある。当然、サブルーチン(関数)へ渡す時も変更が必要だし、CellReferenceなどの使い方が大きく変わっている。
 今後、gdspy2.0へのアップデートが予定されており、変更点はさらに増大すると思われる。詳しくはGitHubでソースを見てほしい(それを言ったらおしまいである)

Python/GdspyでGDSファイルを取り扱う上での注意

前節で、 lib = gdspy.GdsLibrary()はローカルなクラスとして取り扱われると述べたが、原稿執筆時点では問題も多い。まず、gdspy.GdsLibrary には、コンストラクタはあってもデストラクタがないようである。
つまり、forループ中でlib = gdspy.GdsLibrary() を複数回実行した場合、以前の履歴が残っているためエラーが出る。このエラーを回避するには、Spyderで実行している場合、Pythonスクリプトの中でgdspy.GdsLibrary()の実行は1回のみにするとともに、スクリプトを実行するたびに"コンソール"->”カーネルの再起動”をするべきである3

http://bluefish.orz.hm/sdoc/gds2.html
https://gdspy.readthedocs.io/en/stable/gettingstarted.html#gdsii-library
これは私のPythonのプログラミングスキルがタコなせいかもしれないが判別できない。識者のご意見を求む。


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした