TECHNICAL KNOWLEDGEBASE

2023-06-14

構築ブロック、素子、ディテクターのプログラマブル

著者: Christian Hellmann, Michael Kuhn (LightTrans)
関連チュートリアル:  Tutorial 501
必須ツールボックス: VirtualLab™ 5.5以降のStarter Toolbox

はじめに

VirtualLabでのプログラミングのゴール

  • VirtualLabは市場に最初に紹介されたフィールドトレーシング・ソフトです
  • 現代の光学シミュレーションに対する要求は、年々複雑になってきております
  • LightTransでは、様々なシミュレーション技術を提供さしあげておりますがVirtualLab内でユーザー独自のアルゴリズムを採用する事が可能です
  • VirtualLabのプログラミング・インターフェースにより、構築ブロック、素子、ディテクターのカスタマイズを可能にします
  • 上記により、光学系のシミュレーションに完全な自由度を与える事が可能です

プログラミング言語

  • 本書はプログラミングの講習を行うものではありません。
    本書では操作しながら学ぶ、初期動作を説明するものです。
    プログラミングに関しては、ユーザー各位にてご対応お願いします。
  • プログラミング言語: C#
    ‒ C++のオブジェクト操作型言語です
  • .NET Framework
    ‒ Release 2002
    ‒ ライブラリー化された機能、クラス、GUI

参照情報

プログラミング言語
Some C# Syntax
  • Comments:
    /* comment (multiple lines) */
    // comment (1 line)
  • Variableタイプ
    int i ; d ouble x; float y;
  • Math-function:
    y = Math.Sin(x) ; y = Math.Abs (x) ;
  • use “;” at end of a line
  • to return a value use
    return x;

VirtualLabにおけるプログラミングのレベル

VirtualLabAPI.dllにてプログラミング

  • VirtualLabAPIのプログラミングは、LightTrans社にて行われ、よって権利もLightTransに帰属します
  • 現在、約3000ファイルと、約800,000ラインのコードがあります
  • 自由度は非常に高いものの、設計ルールは採用されます
  • コードは、提出しかねますが、クラスと手法は、Snippetsとモジュールに使用可能です
  • 多くの第三機関のDLLをVirtualLabAPIより活用する事ができます。
    これらのDLLに対する、開発ライセンスは、LightTrans社に帰属します

VirtualLabモジュール

  • VirtualLabモジュールは、.NET 環境においてC# 及びVisual Basicにて構築する事が可能です
  • モジュール内では、通常100~1000 ラインのコードとなります
  • .NET と VirtualLabAPI.dll および第三機関からのクラス及び機能を用いる事が可能です
  • 上記により、カスタムが必要な課題に対し、高い自由度を持って対応可能となります

VirtualLab Snippets

  • VirtualLab では、Snippetsにより様々なシミュレーションの異なる部分に必要な機能を取り込む事が可能です:
    ‒ ソースコード・ブロックにより、ある機能を有するボディーを示します
    ‒ 通常10~100ラインのコードが必要となります
    ‒ Snippet内ではクラスまたは機能を定義する事ができません
    ‒ この機能は2013年に追加される予定です
  • • 外部データをSnippetに追加することが可能です。 これにより、外部のDLLから機能を追加する事が可能になります。 採用可能なDLLは:
    ‒ .NET DLL
    ‒ C++ DLL
    ‒ MATLAB® codeにより作成されたDLL。 詳細は、Tutorial 501 “Using MATLAB® Functions from VirtualLab Snippets and Modules“をご参照下さい

外部DLLの活用と、ユーザーの権利

  • 外部DLLを活用するには、以下のWindowsユーザー権利が必要となります:
    ‒ 拡張時には “DLLCache”フォルダーが形成され操作できます。
    このフォルダーは VirtualLabがインストールされたディレクトリーに形成されます
    ‒ VirtualLabがシステムドライブにインストールされた場合 (通常 C:)
    アドミニストレータである必要があります。 これは VirtualLabを“Run as Administrator”として開く必要があります。
    ‒ VirtualLabを他のドライブにインストールした場合 (C:以外)
    アドミニストレーターでなくても可能です

制限事項

  • VirtualLab Advanced
    ‒ プログラミング機能に制限はありません
  • VirtualLab (Standard)
    ‒ プログラマブル素子とディテクターはRead Only対応。ソースコードを編集する事ができません。
  • VirtualLabTrial
    ‒ モジュールの操作はできません
    ‒ Snippetsによるプログラマブル・構築ブロックはRead Only対応

VirtualLabのSnippetベース素子

プログラマブル (Mode Planar) 光源

  • 光源のプログラミング:
    ‒ ラテラル配光分布
    ‒ 波長分布 (spectrum generatorによる)
    ‒ モード配置
    ‒ モードのウエイト

光源カタログ:サークル配置のモード(λ = 405 nm)

プログラマブル・トランスミッション

  • Snippetを用いて、理想の現象を発生するトランスミッション(光学機能等価面)を定義する事が可能です
  • ユーザーはトランスミッションを位置情報(x,y)として定義します

プログラマブル・インターフェース

  • ユーザーにより、光学インターフェース h(x,y) の高さ情報を定義可能です
  • さらに、部分的な派生体としてah/ax (x,y)とah/ay (x,y)の定義が可能です

インターフェースカタログ:アキシコン・インターフェース20°

 

プログラマブル媒体

  • プログラマブル媒体内にて、ユーザーは3D屈折率変調を定義する事が可能です

媒体カタログ:コーティングされた斜形、グレーティング媒体

Parameter Run: プログラマブル・モード

  • VirtualLabのPamater Runにより、ユーザー定義モードのパラメーターの可変が可能です(スキャニング、ランダム及びスタンダードモード)
  • パラメーターを可変し評価する場合、ユーザー定義されたパラメーターをインポートし、Parameter Runにて評価する事が可能です
  • 例:
    ‒ アプリケーション_178.01: LCD光源のシミュレーション
    ‒ 波長とウエイトのパラメーターは、相互に依存します。位置を追加条件として、可変する事が可能です。

アプリケーション_178.01の結果:RGBピクセルをLCDのピクセルとして定義。
このフィールドをさらにシミュレーションに活用します

プログラマブル素材

  • Snippetにて、ディスパージョンを定義する事が可能です

素材カタログ: アッベ数 V_d 素材

プログラマブル素子

  • プログラマブル素子は、素子全体と伝播手法の定義を可能とします
  • Snippetの開発者は、入射フィールド、構造パラメーター等から得られる出力として素子を定義します
  • プログラマブル素子はエクステンションを含まないため、1面のみの効果をしめします
  • 詳細は、VirtualLabのマニュアルと、プログラミング参照資料(VirtualLabのヘルプ)をご参照下さい

プログラマブル・ディテクター

  • プログラマブル・ディテクターは、インプットされたフィールドに応じてディテクト結果を発生するものです
  • ユーザーは、入射フィールドから下記の情報を摘出します:
    ‒ 物理値 (数値 + 物理プロパティー)
    ‒ ハーモニックフィールド (複素振幅オブジェクト)
    ‒ データアレー
  • 物理値の出力は、後のパラメトリック最適化に活用可能です
  • 詳細は、VirtualLabのマニュアル及びプログラミング参照資料(VirtualLabのヘルプ)をご参照下さい

プログラマブル素子

プログラマブル素子のコンセプト

  • プログラマブル素子は、入射フィールドをSnippetにより定義された、任意の状態に変換するものです
  • Light Path Diagramにおけるプログラマブル素子は、一面のみの位置情報を示します。 従って、プログラマブル素子の出射フィールドは、光路上で入射フィールドと同じ位置となります。 反射タイプの場合、単一インターフェースによる反射として、オリエンテーションが変化します。
  • このコンセプトは2013年後半に拡張し、チルトと素子の拡張定義が可能となる予定です

  • 素子内部の仕様は、光学インターフェース、光学素材、媒体、反射データアレーなどのリストからプログラマブル素子が定義されます
  • これらの光学系ブロックはSnippet内に採用可能で、入射フィールドを受けた出力フィールド情報を計算します
  • プログラマブル素子をParameter Run内で用いた場合、Snippetのパラメーターと光学インターフェース、素材、及び媒体を可変する事が可能となります

プログラマブル素子の編集ダイアログ

ソースコード・エディターのダイアログ

グローバル・パラメーター:
  • 数値
  • 素材
  • 媒体
  • インターフェース
  • データアレー

Input/Output: ハーモニックフィールドセット

  • プログラマブル素子内で入射/出射に用いられる光束フィールドはハーモニックフィールド・セットです
  • ハーモニックフィールドセットには、下記の屈折率にアクセス可能な複数のハーモニックフィールドが含まれます
    ‒ ハーモニックフィールドセット[int i] は屈折率 i のハーモニックフィールドをセットする事が可能です
  • ハーモニックフィールドセットの作成:
    ‒ Copy-Constructor: new HarmonicFieldsSet(hfsOld).
    ‒ Empty Constructor: new HarmonicFieldsSet().

  •  
  • さらに、ハーモニックフィールドセット(HFS) はオブジェクトを可変する手法をサポートしております:
    ‒ Add(複素振幅 ca) (HFSに複素振 幅を追加)
    ‒ Remove(inti) (屈折率 iの複素振幅の削除)
    ‒ Insert(複素振幅 ca, inti) (屈折率 iに複素振幅を挿入)

  • ハーモニックフィールドセット全メンバーの一般的なループ:

Input/Output: 複素振幅クラス

  • VirtualLabAPI.dll 内の複素振幅クラスはハーモニックフィールドを表現します
  • 複素振幅オブジェクトに含まれる重要なプロパティーは:
    ‒ ca.Wavelength (caの真空波長)
    ‒ ca.IsLocallyPolarized (局所的偏光のフラッグ)
    ‒ ca.Field (全面的偏光のフィールド値のマトリクス)
    ‒ ca.FieldX, ca.FieldY (全面的偏光のフィールド値のX,Y値)
    ‒ ca.JonesVector (caの Jonesベクトル。caが全面的偏光の場合のみ)
    ‒ ca.EmbeddingMedium (caが定義された媒体)
    ‒ ca.LFO_CoordinateSystem (caの位置 と配置)
  • さらに、複素振幅クラスは、屈折率をサポートします。 ca[x,y,false] をピクセル配置(x, y)におけるデータマトリクス Exに簡単にアクセス可能です。
  • 複素振幅クラスは、ハーモニックフィールドの可変は評価方法多数をサポートしております

プログラマブル素子:回転とシフト

素子カタログ:素子の回転とシフト

回転とシフト:結果

Snippetsとモジュールの開発

VirtualLabソースコード・エディター vs Visual Studio

  • Snippetの開発は、VirtualLabのソースコードエディターを用いて行う事ができます
  • ソースコードエディター:
    ‒ Syntax highlighting.
    ‒ (Un)Collapsing (regions).
    ‒ Comment/Uncomment 連続コードライン
  • Snippetの開発は、Microsoft Visual Studioでも可能で、syntax completionも可能となります

Visual Studioのダウンロードとインスタレーション

  • • Visual Studio Express バージョンは無償でダウンロード可能です:
    (http://www.microsoft.com/germany/express/download/default.aspx
  • • Professional とExpressバージョンの違いは:
    ‒ SQL Serverのサポート無し
    ‒ Team Foundation Managerの必要無し
    ‒ F#言語によるアプリケーションの開発

⇒ Visual Studio 2010 Express はVirtualLabのSnippet開発に有効です

Visual Studio Projectの設定

Visual Studio 2010を開き、New Projectを選択します

例:Syntax Completion

Snippets と DLL

  • syntax completionを活用する事が出来る事から、Visual Studio projectを用いる事により、Snippetとモジュール開発をシンプルに行う事が可能です
  • ここまで、全コードはSnippet内で書かれております
    ‒ Visual Studioにて書かれたソースコードは、Snippetにコピーする事が可能です
  • Snippetから外部DLLを用いて、機能を呼び込む事が可能です
    ‒ Visual StudioにてDLLを書く事が可能です。 機能とクラス定義をより複雑なアプリケーションに活用する事が可能です。
    ‒ DLLを外部リファレンスに追加する事が可能です

Advanced 設定

  • SnippetのAdvanced 設定:

例:DLLの活用

  • DLL 内のコード:

  • Snippet内のコード:

C++ DLLの活用

  • C++ - DLLを活用する事が可能です
    ‒ C++ DLL内の“extern”ステートメントを活用します:
    ‒ C# DLLを書いて、“DllImport”ステートメントを用いて、C++機能を活用します

    ‒ インポートされた機能の活用例:

プログラマブル・ディテクター

プログラマブル・ディテクターのコンセプト

  • Virtual Labのプログラマブル・ディテクターはユーザーが光学系解析に用いたいメリットファンクションを活用する事を可能とします
  • プログラマブル・ディテクターは、入射フィールドを評価し、任意の数のディテクターを作成するSnippetにより定義されます(タイプ: ハーモニックフィールドセット)
  • さらに、ユーザーはパラメトリック最適化に用いる数値の定義が可能です。これはディテクターの編集ダイアログにより設定可能です。

プログラマブル・ディテクターの編集ダイアログ

ディテクターの結果

  • プログラマブル・ディテクターは、Snippetにより、入射フィールドに応じてDetectorResultObjectのデータアレーを算出させます
  • 例:
  • DetectorResultObjectsの一般的なデータタイプ:
    ‒ List
    ‒ DataArray1D
    ‒ DataArray2D

出力:List

  • 数値の出力には、Listを用います
  • PhysicalValueObjectには3つの異なる情報が含まれます(数値、物理的プロパティー、コメント)
  • PhysicalValueClassは、Virt ualLabAPI.Core.Numericsに含まれます
  • 例:

出力:DataArray1D

  • DataArray1Dを発生するには、いくつかの作成法があります
  • completionをサポートするVisual Studio
  • Namespace; VirtualLabAPI.Core.Numerics
  • 例:

出力:DataArray2D

  • DataArray2Dを発生するにはいくつかの作成法があります
  • completionを含むVisual Studio
  • Namespace: VirtualLabAPI.Core.Numerics
  • 例:

Data Arrayについて

  • DataArray1DとDataArray2Dは複合データタイプで、VirtualLabの標準の出力形体です
  • Data Arrayのサンプリングは、等間隔あるいは非等間隔でも構いません
  • 等間隔あるいは非等間隔のデータアレーに関わらず、適正な作成法を用いる必要があります

  • プログラマブル・ディテクターの例
    ‒ Snippet 028: Diffractive Optics Merit Functions for Harmonic Fields Set Detector
    ‒ Snippet 027: Coherence Detector

まとめ

  • VirtualLabはユーザー定義したシミュレーション手法を用いて、フィールドトレーシング法をさらに拡充する事が可能です
  • チュートリアル、マニュアル、プログラミング参照資料などプログラミングをサポートする資料を用意しております
  • 更に、有償で下記のサポートをご希望の場合、LightTrans社及び代理店にご一報ください:
    ‒ LightTransによるプログラミング講習
    ‒ ユーザーが作成したソリューション(Snippet, モジュールなど)のサポート
    ‒ LightTrans社によるカスタムソリューション開発

ダウンロードファイル

ファイルをダウンロード(25.0MB)