# Architecture English | 日本語 ## 基本構成 `pixet_ctrl.py` の中心は `MiniPixCtrl` です。 ```text 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 に変換します。 ```text 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 クライアントから同等メソッドを呼び出す構成にします。 ```text Client Program │ ▼ SyncPixetGrpcClient / AsyncPixetGrpcClient │ ▼ gRPC │ ▼ pixet_grpc_server.py │ ▼ MiniPixCtrl │ ▼ PIXet Python API │ ▼ MiniPIX Detector ``` 検出器制御は実機に接続されたサーバ側プロセスに閉じ込め、利用者側はクライアント API として扱います。