高エネルギー加速器研究機構 物質構造科学研究所 量子ビーム連携研究センター 山田悟史
Pythonのコマンドラインから以下のコマンドを実行し、ライブラリーをインストール
pip install pyigor
ver. 0.1.6だとwindowsでは動かなかったため以下のファイルを編集する必要があったが、バグ報告したらver. 0.2.0で(少なくとも私の環境では)動くようになったので、おそらく以下のハイライト部分は実施不要(だが、念のため記録として残しておく)
C:\Users\(ユーザー名)\miniconda3\envs\(環境名)\Lib\site-packages\pyigor\pyigor.py
(参考)修正後のファイルはこちら
16行目を以下の通り修正
#path_candidates = glob.glob("/Applications/Igor Pro*/Igor64.app/Contents/MacOS/Igor64")
path_candidates = glob.glob("C:\\Program Files\\WaveMetrics\\Igor Pro 8 Folder\\IgorBinaries_x64\\Igor64.exe")
160行目を以下の通り修正
#subprocess.run([self._executable_path, "-Q", "-X", command])
temp = subprocess.list2cmdline([self._executable_path, "-Q", "-X"])
temp = f"{temp} {command}"
subprocess.run(temp)
170行目を以下の通り修正(Macも?)
#self._registered_functions[f.__name__] == f
self._registered_functions[f.__name__] = f
PythonからIgorへのアクセス
ライブラリーのインポートとIgorとの接続
from pyigor import Connection
import numpy as np
igor = Connection()
配列を作ってIgor上にwaveを渡す
### Sending an array to Igor Pro
array = np.sin(np.linspace(0, 10, 100))
igor.put(array, "sinwave")
Igorのコマンドラインを実行することも可能
### Executing a command in Igor Pro
igor("sinwave += 1")
Igor上で変更したデータsinwaveをPythonにコピー
### Getting a wave from Igor Pro
wv = igor.get("sinwave")
print(wv.array)
IgorからPythonへのアクセス
上記と同じ手順でConnection()した後、以下の要領でIgorから使いたい関数を定義する
### @igor.function decorator makes the function callable from Igor Pro.
@igor.function
def myfunc(a):
return a*a
Igorからは PyIgorCall(<command>) でPythonの関数を呼び出せる
PyIgorCall("myfunc(10)")
curl <http://127.0.0.1:15556/call/myfunc(10)>