MATLAB で ZOS-API を使用して光線追跡データをバッチ処理する方法

この記事では、MATLAB で ZRDLoader.dll を使用して光線データベース (ZRD) にアクセスできるように ZOS-API (Zemax OpticStudio Application Programming Interface) を使用する方法を解説します。また、シーケンシャル光線追跡 (直接座標または正規化座標、偏光データまたは非偏光データ) ファイルと、ノンシーケンシャル ZRD ファイルの両方を、ReadNextSegmentFull() メソッドを使用してバッチ処理する使用例を紹介します。

著者 Michael Humphreys

Downloads

記事の添付資料

RayTrace.dll の概要

RayTrace.dll は、ReadNextSegmentFull メソッドを組み込んだ従来の ZRDLoader.dll と、シーケンシャル モードの 4 つの IBatchRayTrace インターフェイスを組み合わせた DLL です。この DLL には、以下に示すインターフェイスと ZOSAPI.Tools.RayTrace 名前空間から継承したメソッドが組み込まれています。

  • IRayTraceDirectPolData (シーケンシャル) :
    x/y/z の直接座標を使用して、バッチ処理による偏光光線追跡を実行できるインターフェイスです。DDE の光線追跡コマンド、モード 3 と同様に動作します。
    IBatchRayTrace のインターフェイスの 1 つです。
  • ​IRayTraceDirectUnpolData(シーケンシャル) :
    x/y/z の直接座標を使用して、バッチ処理による非偏光光線追跡を実行できるインターフェイスです。DDE の光線追跡コマンド、モード 1 と同様に動作します。IBatchRayTrace のインターフェイスの 1 つです。
  • IRayTraceNormPolData(シーケンシャル) :
    正規化瞳座標を使用して、バッチ処理による偏光光線追跡を実行できるインターフェイスです。DDE の光線追跡コマンド、モード 2 と同様に動作します。
    IBatchRayTrace のインターフェイスの 1 つです。
  • IRayTraceNormUnpolData(シーケンシャル) :
    正規化瞳座標を使用して、バッチ処理による非偏光光線追跡を実行できるインターフェイスです。DDE の光線追跡コマンド、モード 0 と同様に動作します。
  • IZRDReader (ノンシーケンシャル) :
    MATLAB で RayDatabaseReader を設定して実行し、C# の dll で各光線セグメントを読み取ります。

この DLL は、各光線または各光線セグメントの生データを、宣言されたオブジェクトのプロパティとして MATLAB に戻す機能専用として設計されています。計算、集計、解析などは一切実行しません。この DLL の主な目的は、処理に時間を要する for ループの負荷を MATLAB からコンパイル済みネイティブ C# プログラムに渡すことにあります。MATLAB では、for ループの処理効率が低いからです。これを受けた C# プログラムでは、ループを実行してすべての結果の生データを MATLAB に戻し、MATLAB ではそれを最終処理します。

シーケンシャル インターフェイスの場合、ループを使用する必要があるメソッドとしてAddRays() と ReadNextResults() の 2 つがあります。したがって、最大限の効率を実現するには、光線の追加と結果の読み取りの両方を DLL で処理する必要があります。シーケンシャルの使用例のそれぞれでは、正方形グリッドとディザリングした光線を効率的に生成する方法を 2 つ紹介しています。目的とする光線パターンが上記と異なる場合は、そのパターンに基づき、MATLAB のネイティブな方法と同様に配列インデックスを指定して、DLL に光線を追加する必要があります。

MATLAB オブジェクトに戻される結果には、ReadNextResult() または ReadNextResultFull() によって各インターフェイスの最も詳細な出力に得られるプロパティが、各句や大文字と小文字の使い分けも含め、そのまま記述されます。戻された結果を MATLAB で効率的に利用するには、for ループや while ループではなく、MATLAB の配列インデックス指定を使用することをお勧めします。

 

MATLAB での DLL の使用例

直接座標によるシーケンシャル光線追跡、正規化座標によるシーケンシャル光線追跡、ZRD に収めたノンシーケンシャル光線追跡の各データを、RayTrace.dll を使用して処理する方法を示すために、3 つの基本的な使用例と 3 つの高度な使用例を用意しました。MATLAB の各ファイルは、ダウンロードすると、変更せずにそのまま実行できます。RayTrace.dll は、それを呼び出すすべての MATLAB スクリプトと同じフォルダに保存する必要があります。各 C# ファイルのソース コードも、DLL の生成に使用する Visual Studio ソリューションとともに用意されています。

 

基本的なファイル

  • MATLAB_BatchRayTrace_Direct.m – (直接座標によるシーケンシャル光線追跡)
    IRayTraceDirectUnpolData インターフェイスの使用例です。ここでは、RayTrace.dll の関数 ReadDirectUnpolData を使用します (DirectUnpol.cs)。指定のレンズ面までフットプリント ダイアグラムを追跡し、クリア半径と機械的半径をプロットします。

    Basic example 1

     
  • MATLAB_BatchRayTrace_Normalized.m – (正規化座標によるシーケンシャル光線追跡)
    IRayTraceNormUnpolData インターフェイスの使用例です。ここでは、RayTrace.dll の関数 ReadNormUnpolData を使用します (NormUnpol.cs)。10,000 本以上の光線で構成した正方形パターンを、1 つの視野点について像面まで 1 秒足らずで追跡します。

    Basic Example 2

     
  • MATLAB_ZRDLoaderFull.m – (ZRD に収めたノンシーケンシャル光線追跡)
    IZRDReader インターフェイスの使用例です。ここでは、RayTrace.dll の関数 ReadZRDData を使用します (ZRDLoaderFull.cs)。ZRD ファイルを解析し、特定のディテクタ上の全パワーを判断します。


    Basic Example 3

 

高度なファイル

  • MATLAB_BatchRayTrace_Surface_AOI.m – (直接座標によるシーケンシャル光線追跡)
    IRayTraceDirectUnpolData インターフェイスの使用例です。ここでは、RayTrace.dll の関数 ReadDirectUnpolData を使用します (DirectUnpol.cs)。光学系の指定された面まで光線のグリッドを追跡します。方向余弦ベクトル LMN と法線ベクトル Nxyz を使用して、その面上の各 XY 位置における入射角を計算します。

    Advanced Example 1

     
  • MATLAB_BatchRayTrace_Ex22_Performance_Comparison.m – (正規化座標によるシーケンシャル光線追跡)
    IRayTraceNormUnpolData インターフェイスの使用例です。ここでは、RayTrace.dll の関数 ReadNormUnpolData を使用します (NormUnpol.cs)。ディザリングした光線パターンを使用して全視野スポット ダイアグラムをプロットします。10,000 本の光線を 1 秒で追跡できます。同じファイルに対して MATLAB ネイティブの for ループを使用した場合、961 本の光線のプロットに 4 秒以上を要します。コンピュータの性能によっては、40 倍の高速化の可能性があります。

    Advanced Example 2

     
  • MATLAB_ZRD_Pixelated_Detector_xybin.m – (ZRD ファイルに収めたノンシーケンシャル光線追跡)
    IZRDReader インターフェイスの使用例です。ここでは、RayTrace.dll の関数 ReadZRDData を使用します (ZRDLoaderFull.cs)。光源 (矩形)、"LETTERF.BMP" を使用したスライド オブジェクト、ディテクタ (矩形) で構成する新しい光学系を作成します。ディテクタに文字「F」のパターンが表示されます。ZRD ファイルの xybin プロパティを使用して各ピクセルの光束を合計し、ビニングしたディテクタを ZRD ファイルから直接再生成します。ディテクタ ビューアの解析機能は使用しません。

    Advanced Example 3

    Advanced Example 3

 

トラブルシューティング

Visual Studio ソリューションをダウンロードして、コンパイル時にエラーが発生する場合は、ZOSAPI と ZOSAPI_Interfaces の参照を適切に設定していることを確認してください。ソリューション エクスプローラを起動して [参照設定] (References) を展開したときに ZOSAPI と ZOSAPI_Interfaces の横に黄色の警告記号が表示される場合は、次の手順を実行する必要があります。

  • 現在の参照設定を削除します (右クリックして [取り除く] (Remove) を選択)。
  • [参照設定] (References) を右クリックして [参照の追加] (Add References...) を選択します。
  • [参照] (Browse) をクリックして、一番下の OpticStudio インストール先フォルダに移動します。
  • Shift キーを押しながら ZOSAPIZOSAPI_Interfaces の両方をクリックして選択し、[追加] (Add) をクリックします。
  • [OK] (OK) をクリックしてソリューションに追加します。
    両方の参照をハイライトして [プロパティ] (Properties) を開き、[ローカルにコピー] (Copy Local) を [True] (True) から [False] (False) に変更します。

 

KA-01651

この記事は役に立ちましたか?
9人中5人がこの記事が役に立ったと言っています

コメント

0件のコメント

記事コメントは受け付けていません。