from psiclone.data import Geometry, Geotype
from psiclone.visualization import draw_geometry
= Geometry()
geom id=0, x=0, y=0, level=0, geotype=Geotype.EXTERIOR)
geom.add_node(id=1, x=0, y=1, level=1, geotype=Geotype.EXTERIOR)
geom.add_node(id=2, x=1, y=0, level=2, geotype=Geotype.EXTERIOR)
geom.add_node(id=3, x=1, y=1, level=3, geotype=Geotype.EXTERIOR)
geom.add_node(0], geom.nodes[1])
geom.add_edge(geom.nodes[0], geom.nodes[2])
geom.add_edge(geom.nodes[1], geom.nodes[3])
geom.add_edge(geom.nodes[2], geom.nodes[3])
geom.add_edge(geom.nodes[0], geom.nodes[3])
geom.add_edge(geom.nodes[="k") # edge_colorを指定しないと辺が白くなって見えなくなることがあるため注意 draw_geometry(geom, edge_color
psiclone
入力データ Geometry
psiclone
は様々な形式のデータを扱うことができますが,実際には内部ではどの形式に対しても Geometry
オブジェクトに変換してから計算しています.
この過程を理解しておくと,「どのようなデータを扱うことが出来るのか(出来ないのか)」だけではなく,必要であれば独自のデータ形式に対しても psiclone
を利用することが出来ます.
以下では,単純な Geometry
オブジェクトを直接構成し, psiclone
の一連の流れを解説していきます.
例として〼の形の Geometry
オブジェクト geom
を作成してみましょう.
このオブジェクトはノードに情報が付いた(無向)グラフです.
各ノードには以下の変数を与える必要があります:
- id: ノードID
- x: ノードのx座標
- y: ノードのy座標
- level: ノードの渦度
- geotype: 他のチュートリアルで解説します.必須引数なので,ここではひとまず
Geotype.EXTERIOR
を与えることにします.
エッジを追加するときは端点がどのノードかを指定します.
最後に geom
を draw_geometry
を用いて可視化します.
edge_colorを指定しないと辺が白くなって見えなくなることがあるため注意してください.
Psi2tree
でこの入力データを処理し,COT 表現に変換します.
Psi2tree(geom, threshold=0.0)
でオブジェクトを作ってから psi2tree.compute()
で COT 表現を計算します.
from psiclone.psi2tree import Psi2tree
= Psi2tree(geom, threshold=0.0)
psi2tree psi2tree.compute()
計算した COT 表現は次のコードで確認できます.
from psiclone.cot import to_str
psi2tree.get_tree().convert(to_str)
'a0(L~)'
まとめ
psiclone
はどのようなデータであっても Geometry
オブジェクトを通して計算しています.
他のチュートリアルでは画像やメッシュなどを入力データとして扱っていますが,どの入力形式でも共通して Geometry
オブジェクトを生成するステップがあることに注意しましょう.
もしあなたが psiclone
でサポートしていないデータを扱いたい場合には,Geometry
オブジェクトに変換するコードを書くだけで,同様に COT 表現を計算できます.