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