「instamatic」の版間の差分
提供: Eospedia
(→Instamatic TEMControllerでTEMを制御) |
|||
行140: | 行140: | ||
* instamaticのTEMServer使わない場合(setting.yamlでuse_tem_server=False)は ctrl.tem が JeolMicroscopeクラスインスタンスになり、そのメソッドからTemExternalのCOMインターフェイスを間接的にたたく感じになる | * instamaticのTEMServer使わない場合(setting.yamlでuse_tem_server=False)は ctrl.tem が JeolMicroscopeクラスインスタンスになり、そのメソッドからTemExternalのCOMインターフェイスを間接的にたたく感じになる | ||
* TEMServer使う場合は、ctrl.tem が MicroscopeClientクラスインスタンスになり、TEMServerを介してJeolMicroscopeインスタンスにコマンド渡す感じ (使う分には、ctrl.temをJeolMicroscopeインスタンスだと思ってAPI叩けばok) | * TEMServer使う場合は、ctrl.tem が MicroscopeClientクラスインスタンスになり、TEMServerを介してJeolMicroscopeインスタンスにコマンド渡す感じ (使う分には、ctrl.temをJeolMicroscopeインスタンスだと思ってAPI叩けばok) | ||
+ | |||
+ | == コンフィグロードのテスト == | ||
+ | <pre> | ||
+ | from instamatic import config | ||
+ | </pre> | ||
+ | * configの__init__.pyの中で各種読み込みが実行されて、各種コンフィグはディクショナリ型の値をもつ属性として保持される | ||
+ | * 例えば config.microscope.wavelength のようにアクセス |
2020年12月23日 (水) 12:23時点における最新版
目次
必要要件
- Windows
- Python3
- JEOL TEMを使う場合
- JEOL TemExternal
- シミュレーションモードを使う場合
- 特になし
インストール
最新版のインストール方法について説明する。
https://github.com/stefsmeets/instamatic より、ソースコードをクローンする。
git clone https://github.com/stefsmeets/instamatic.git cd instamatic
※ commit 2c32254以降を使用すること。古いバージョンだとsimulationモードがエラーで動作しない場合あり。
依存ライブラリを記述したrequirements.txtがあるので、pipでそれらをインストールする。
pip install -r requirements.txt
instamaticをPython環境へインストールする。
python setup.py install
シミュレーションモード
実際にTEM、カメラに接続せず、シミュレーションモードで動作させる方法。
初期設定
Powershellを開き、instamaticを起動する。
instamatic.exe
初回起動の時は、設定ファイルを格納したディレクトリを自動で作ってくれる。執筆者環境の場合、C:\Users\kttn8\AppData\Roaming\instamatic\config が作成された。
コンフィグが作成されたら、autoconfigで設定を変えられる。
instamatic.autoconfig.exe
インタラクティブなプロンプトが表示されるので、適宜答えていく。今回はシミュレーションモードで設定をしてみる。
↓プロンプトでのやりとり
PS C:\Users\kttn8> instamatic.autoconfig.exe Config directory: C:\Users\kttn8\AppData\Roaming\instamatic\config 1: jeol 2: fei 3: simulate Which microscope can I connect to? [simulate] >> simulate 1: None 2: gatan 3: tvips 4: simulate Which camera can I connect to? [simulate] >> simulate 1: C:\Users\kttn8\AppData\Local\Programs\Python\Python38\lib\site-packages\instamatic-1.3.0-py3.8.egg\instamatic\config\camera\orius.yaml 2: C:\Users\kttn8\AppData\Local\Programs\Python\Python38\lib\site-packages\instamatic-1.3.0-py3.8.egg\instamatic\config\camera\simulate.yaml 3: C:\Users\kttn8\AppData\Local\Programs\Python\Python38\lib\site-packages\instamatic-1.3.0-py3.8.egg\instamatic\config\camera\simulateDLL.yaml 4: C:\Users\kttn8\AppData\Local\Programs\Python\Python38\lib\site-packages\instamatic-1.3.0-py3.8.egg\instamatic\config\camera\timepix.yaml 5: C:\Users\kttn8\AppData\Local\Programs\Python\Python38\lib\site-packages\instamatic-1.3.0-py3.8.egg\instamatic\config\camera\tvips-f416.yaml 6: C:\Users\kttn8\AppData\Local\Programs\Python\Python38\lib\site-packages\instamatic-1.3.0-py3.8.egg\instamatic\config\camera\tvips-xf416.yaml 7: None Which camera type do you want to use (select closest one and modify if needed)? [None] >> None Mode: mag1 High tension: 200 kV Current density: 100221.24 pA/cm2 GunShift(x=57788, y=11163) GunTilt(x=42281, y=34217) BeamShift(x=32772, y=30285) BeamTilt(x=36439, y=255) ImageShift1(x=37126, y=55930) ImageShift2(x=42692, y=62856) DiffShift(x=52452, y=45943) Stage(x=52584.0, y=-33851.0, z=-8761.0, a=35.0, b=-9.0) Magnification(value=25000, index=10) DiffFocus(value=n/a) Brightness(value=20770) SpotSize(1) Saved alignments: ('neutral.yaml',) Wrote files config files: Copy simulate_tem.yaml -> `C:\Users\kttn8\AppData\Roaming\instamatic\config\simulate_tem.yaml` Copy simulate_calib.yaml -> `C:\Users\kttn8\AppData\Roaming\instamatic\config\simulate_calib.yaml` In `settings.yaml`: microscope: simulate_tem calibration: simulate_calib Todo: Check and update the pixelsizes in `simulate_calib.yaml` In real space, pixelsize in nm In reciprocal space, pixelsize in px/Angstrom
起動方法
シェルで以下コマンドを打つ。
instamatic
すると以下のようなGUIが立ち上がる。パスとかは適宜変更しないと、何か操作したときにエラーメッセージが多分出てくる。
コンソール実行
JEOL TemExternal(COM)をPythonから直接叩く
import comtypes comtypes.CoInitialize() import comtypes.client temext = comtypes.client.GetModule(('{CE70FCE4-26D9-4BAB-9626-EC88DB7F6A0A}', 3, 0)) # TEM3コンポーネントのオブジェクト tem3 = comtypes.client.CreateObject(temext.TEM3, comtypes.CLSCTX_ALL) # LEN3インターフェイス lens3 = tem3.CreateLens3() # DEF3インターフェイス (deflector制御API) stage3 = tem3.CreateDef3() # などなど
Instamatic TEMControllerでTEMを制御
from instamatic import TEMController ctrl = TEMController.initialize(tem_name='jeol', cam_name=None)
- instamaticのTEMServer使わない場合(setting.yamlでuse_tem_server=False)は ctrl.tem が JeolMicroscopeクラスインスタンスになり、そのメソッドからTemExternalのCOMインターフェイスを間接的にたたく感じになる
- TEMServer使う場合は、ctrl.tem が MicroscopeClientクラスインスタンスになり、TEMServerを介してJeolMicroscopeインスタンスにコマンド渡す感じ (使う分には、ctrl.temをJeolMicroscopeインスタンスだと思ってAPI叩けばok)
コンフィグロードのテスト
from instamatic import config
- configの__init__.pyの中で各種読み込みが実行されて、各種コンフィグはディクショナリ型の値をもつ属性として保持される
- 例えば config.microscope.wavelength のようにアクセス