Architecture

English | 日本語

基本構成

pixet_ctrl.py の中心は MiniPixCtrl です。

User Application
    │
    ▼
MiniPixCtrl
    │
    ▼
pypixet / PIXet Python API
    │
    ▼
PIXet core
    │
    ▼
MiniPIX / Timepix detector

MiniPixCtrl は PIXet Pro の Python API を薄く包む上位制御層です。接続処理、pixel configuration、検出器パラメータ設定、露光、フレーム取得をまとめています。

内部状態

MiniPixCtrl は主に次の内部参照を保持します。

・ _pixet : pypixet.pixet から取得した PIXet core のメインオブジェクト
・ _dev : pixet.devices() から取得した検出器オブジェクト。現状は先頭デバイスを使用
・ _pixcfg : _dev.pixCfg() から取得した pixel configuration
・ _logger : 外部から渡された logger、または標準 logging の logger

接続時の初期化方針

Timepix / MPX2 系では setOperationMode() を使わず、pixel configuration 側でピクセルごとの mode を設定します。現状の connect() では、接続直後に全ピクセルを PX_TPXMODE_TOT に設定し、setToDevice() でデバイスへ反映します。

このため、測定モードの変更は set_mode_all() 経由で行う設計です。

フレーム取得の構造

撮像は PIXet の doSimpleAcquisition() に委譲します。撮像後、PIXet core 内部に保存された acquisition frame を acqFrameRefInc() で取得し、_frame_to_dict() で Python の dict に変換します。

doSimpleAcquisition()
    │
    ▼
PIXet internal acquisition frames
    │
    ▼
acqFrameRefInc(idx)
    │
    ▼
_frame_to_dict(frame)
    │
    ▼
{"name", "width", "height", "data", "subframes"}

_frame_to_dict() は frame 本体だけでなく、取得できる場合は subFrames() も読み出します。読み出した frame / subframe は最後に destroy() します。

gRPC 化する場合の位置づけ

ネットワーク越しに使う場合は、MiniPixCtrl をサーバ側に置き、gRPC クライアントから同等メソッドを呼び出す構成にします。

Client Program
    │
    ▼
SyncPixetGrpcClient / AsyncPixetGrpcClient
    │
    ▼
gRPC
    │
    ▼
pixet_grpc_server.py
    │
    ▼
MiniPixCtrl
    │
    ▼
PIXet Python API
    │
    ▼
MiniPIX Detector

検出器制御は実機に接続されたサーバ側プロセスに閉じ込め、利用者側はクライアント API として扱います。