ZPL で PLOT キーワードを使用する方法

PLOT キーワードを使用すると、OpticStudio で計算できるほとんどすべてのデータを対象として、カスタム仕様の解析プロットを作成できます。この記事では、PLOT キーワードを使用した ZPL マクロを紹介します。このマクロでは、サンプル ファイルと併用することで、光路長をプロットした図を出力します。コードと出力は、この記事に付属しています。

著者 Sanjay Gangadhara

序論

PLOT キーワードを使用すると、数値データの 2D プロットを容易に作成できます。このキーワードで使用できる多数の引数により、軸のラベル指定や目盛り位置の調整など、グラフを作成する際のオプションを幅広く指定できます。この記事では、PLOT キーワードを使用した ZPL マクロの実例を紹介して解説します。

ZPL で PLOT キーワードを使用する方法

PLOT キーワードを使用すると、数値データの 2D プロットを容易に作成できます。このキーワードで使用できる多数の引数により、軸のラベル指定や目盛り位置の調整など、グラフを作成する際のオプションを幅広く指定できます。

OpticStudio のデフォルト インストールには、PLOT キーワードを使用したマクロ (PLOT_TEST.ZPL) が用意されています。このマクロは、視野 40 度の Cooke トリプレットレンズのサンプル ファイル (Zemax フォルダ)\Samples\Sequential\Objectives\Cooke 40 degree field.zmx を使用します。このマクロでは、RAYTRACE キーワードおよび数値関数の OPDC と OPTH を使用して、軸上視野点から出発した光線の光路差 (OPD) と光路長 (OPL) を、瞳座標の範囲で計算します。

 

! This macro is intended to test out the new PLOT keyword
! for ZPL. The calculations are meant to work with the
! sample file Cooke 40 degree field.zmx located in the
! \Zemax\Samples\Sequential\Objectives\ directory.
!
! Written by S. Gangadhara, 12/12/07
!

 

! Determine number of surfaces in the system

 

n_surf = NSUR()

 

! Define array variables to be plotted

DECLARE x1, DOUBLE, 1, 21        # Variables to store
DECLARE y1, DOUBLE, 1, 21        #  OPD data
DECLARE X2, DOUBLE, 1, n_surf    # Variables to store
DECLARE y2, DOUBLE, 1, n_surf    #  OPL data

 

! Compute array variables using RAYTRACE, OPDC and OPTH

FOR i, 1, 21, 1

x1(i) = 0.1*i-1.1
RAYTRACE 0, 0, 0, 0.1*i-1.1, 1
y1(i) = OPDC()

NEXT i

 

FOR i, 1, n_surf, 1

x2(i) = (i - 3.0)/2.0
RAYTRACE 0, 0, 0, 0.1*i-1.1, 1
y2(i) = OPTH(i)/50. - 2.0

NEXT i

 

変数 x1 と y1 には、それぞれ瞳座標と軸上視野点に対する OPD のデータが格納されます。変数 x2 と y2 には、それぞれ相対的な面番号と軸上視野点に対する OPL のデータが格納されます。x2 および y2 のデータは、同じグラフィック表示に x1 および y1 と同時にプロットできるようにスケーリングされます。RAYTRACE キーワード、OPDC 関数、OPTH 関数に関する詳細は、ヘルプ システムの「[プログラミング] (Programming) タブ」→「ZPL について」を参照してください。

つづいて、キーワード PLOT を使用して、ここで得られた結果をグラフィック ウィンドウにプロットします。

 

! Plot results to the screen using PLOT keywords

title$ = "PLOT TEST WITH COOKE 40 DEGREE FIELD"

xtitle$ = "PUPIL COORDINATE / RELATIVE SURFACE NUMBER"

ytitle$ = "WAVES / LENGTH"

banner$ = "RESULTS GENERATED USING PLOT_TEST.ZPL"

comment1$ = "DATA FOR OPD ARE EXACT"

comment2$ = "DATA FOR OPTICAL PATH LENGTH (OPL) ARE NORMALIZED"

comment3$ = "X-AXIS FOR OPL DATA IS 0.5*(SURFACE NUMBER - 2)"

comment4$ = "Y-AXIS FOR OPL DATA IS LENGTH/50 - 2"

comment5$ = "NORMALIZATION OF THE OPL DATA WAS PERFORMED SO THAT IT"

comment6$ = "  COULD BE PLOTTED ON THE SAME GRAPH AS THE OPD DATA"

label1$ = "OPD FOR ON-AXIS FIELD POINT"

label2$ = "OPTICAL PATH LENGTH (OPL)"

x_min = -2.0

y_min = -2.0

x_max = 2.0

y_max = 0.0

x_chk = 0.005

y_chk = 0.005

x_tick = 0.5

y_tick = 0.4

x_form$ = "%4.2f"

y_form$ = "%4.2f"

xl1 = 0.1

yl1 = 0.6

xl2 = 0.8

yl2 = 0.6

xl3 = 0.45

yl3 = 0.3

xl4 = 0.45

yl4 = 0.9

xlb1 = 0.15

xlb2 = 0.30

ylb1 = 0.65

ylb2 = 0.35

ang1 = 0

ang2 = 15

scl = 1

PLOT NEW

PLOT TITLE, title$

PLOT TITLEX, xtitle$

PLOT TITLEY, ytitle$

PLOT BANNER, banner$

PLOT COMM1, comment1$

PLOT COMM2, comment2$

PLOT COMM3, comment3$

PLOT COMM4, comment4$

PLOT COMM5, comment5$

PLOT COMM6, comment6$

PLOT RANGEX, x_min, x_max

PLOT RANGEY, y_min, y_max

PLOT CHECK, x_chk, y_chk

PLOT TICK, x_tick, y_tick

PLOT FORMATX, x_form$

PLOT FORMATY, y_form$

PLOT DATA, x1, y1, 21, 1, 1, 1

PLOT DATA, x2, y2, n_surf, 3, 2, 0

PLOT LINE, xl1, yl1, xl2, yl2

PLOT LINE, xl3, yl3, xl4, yl4

PLOT LABEL, xlb1, ylb1, ang1, scl, label1$

PLOT LABEL, xlb2, ylb2, ang2, scl, label2$

PLOT GO

 

このコードの最初のセクションでは、さまざまなプロット オプションの変数を定義しています。たとえば、プロットのタイトル (title$)、プロット軸のラベル (xtitle$ と ytitle$)、プロットの範囲 (x_min、y_min、x_max、y_max) があります。つづいて、多数の PLOT キーワードを列記して、指定したタイトル、軸ラベル、範囲等に基づき、結果をグラフィック表示ウィンドウにプロットします。マクロの各 PLOT キーワードには、それぞれコメントが付記されています (ただし、この記事では表示上の理由から省略しています)。各 PLOT コマンドの詳しい説明は、ヘルプ システムの「[プログラミング] (Programming) タブ」→「ZPL について」→「キーワード (ZPL について)」→「PLOT」を参照してください。マクロを実行すると、次のようなグラフィック出力が得られます。

resulting graphical output

 

以上の例からもわかるとおり、PLOT キーワードを使用すると、OpticStudio で数値データを容易にグラフ表示する手段が得られます。

 

KA-01462

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

コメント

0件のコメント

サインインしてコメントを残してください。