ZOS-API での解析ごとの出力データ タイプのリスト生成


ZOS-API での解析ごとの出力データ タイプのリスト生成

Author
Message
Zemax_Japan
Zemax_Japan
Forum Member
Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)Forum Member (1K reputation)

Group: Administrators / Zemax Staff
Posts: 257, Visits: 2.8K
概要 : この記事では、Python と MatLab を使用して、ZOS-API での解析ごとに使用できるデータ タイプのリストを生成する方法を説明します。

著者 : Michael Cheng

公開日 : 2018 年 2 月 1 日

サンプル ファイル : ソース コード サンプルのダウンロード

対象 : OpticStudio / ZOS-API / データ タイプ



はじめに

ZOS-API を使用して OpticStudio にアクセスする場合は、スポット ダイアグラム、変調伝達関数 (MTF)、点像強度分布 (PSF) などの解析を実行することが普通です。解析で得られるデータのタイプは解析ごとに異なります。ZOS-API では、以下のデータ タイプがサポートされています。

http://forum.zemax.com/Uploads/Images/649a3f8f-1def-4c97-9155-b9f4.png

多くの場合、1 種類の解析で返されるデータ タイプは 1 種類または 2 種類です。たとえば、高速フーリエ変換 (FFT) MTF 解析の結果が DataSeries に返されます。FFT MTF 解析で DataGrid を要求しても、返されるのは空データまたは NULL データです。
すべての解析ウィンドウに結果が得られるわけではありません。解析ごとに関連付けられているデータ タイプがありますが、該当のデータ タイプでテストして、それにデータが記述されていることを必ず確認します。データが得られない解析では、力業になりますが、GetTextFile を使用してデータをディスクに保存し、手動でそのデータを解析します。

テーブルを使用すると、特定の解析で使用できるデータ タイプを容易に確認できます。
以下の 2 件の例は、Python と MatLab を使用してテーブルを生成する方法を示しています。これら両方のテーブルのソース コードが、この記事の「サンプル ファイル」に用意されています。


Python の例

OpticStudio でボイラープレート コードを生成した後、""# Insert Code here"" と記された行から作業を開始します。以下のコードは、コード全体の最初のブロックです。デフォルトでは、このコードはシーケンシャル解析をテストします。ノンシーケンシャル解析のテーブルを生成するには、このコードの第 2 行のコメント指定を外します。

# Insert Code here
TheSystem = zosapi.TheSystem

# Uncomment following line for non-sequential analyses
# TheSystem.MakeNonSequential()

TheAnalyses = TheSystem.Analyses

次のコードでは、"constants.__dicts__[0].keys()" を使用してすべての列挙名が取得されます ("constants" を指定することで、ZOS-API で使用するすべての列挙が対象となります)。for ループですべての列挙が確認され、"AnalysisIDM_" が使用されている列挙が検索されます。その条件に一致する列挙が見つかると、"constants.__dicts__[0].get(i)" を使用してその値が取得され、リスト "analIDM" に記録されます。最後に、analIDM が使いやすくなるようにデータが並べ替えられます。


analIDM = []
API_enum = list(constants.__dicts__[0].keys())
for i in API_enum:
if i.find('AnalysisIDM_') != -1:
analIDM.append(constants.__dicts__[0].get(i))
print(constants.__dicts__[0].get(i), ': ', i)
analIDM.sort()

次の行で、データ タイプの名前が出力されます。


print('Name\tSetting\tDatGrid\tDatGridRgb\tDatSrs\tDatSrsRgb\t'
+ 'DatScat\tDatScatRgb\tRayData\tCriRayDat\tPathAnal\tSpotDat')

リスト analIDM には、すべての解析が記述されています。次のコードでは、"TheAnalyses.New_Analysis(k)" を使用し、利用可能な解析を for ループですべて開きます。

解析が None タイプの場合はエラー メッセージが出力されます。これらの解析に関する情報を取得するには、既に説明したように、コードの中で該当のモード (シーケンシャルまたはノンシーケンシャル) に変更する必要があります。

解析が有効なタイプ (None 以外のタイプ) であれば、各データ タイプが存在するかどうかがテストされ、その結果がレポートされます。


for
k in analIDM:
a = TheAnalyses.New_Analysis(k) if a is None :
print('This analysis cannot be opened in ',
'Sequential Mode' if TheSystem.Mode == 0 else 'Non-Sequential Mode',
': enumID ',k)
continue
ar = a.GetResults()
print(a.GetAnalysisName, '\t',
a.HasAnalysisSpecificSettings, '\t',
ar.DataGrids is not None and ar.NumberOfDataGrids > 0, '\t',
ar.DataGridsRgb is not None and ar.NumberOfDataGridsRgb > 0, '\t',
ar.DataSeries is not None and ar.NumberOfDataSeries > 0, '\t', ar.DataSeriesRgb is not None and ar.NumberOfDataSeriesRgb > 0, '\t',
ar.DataScatterPoints is not None and ar.NumberOfDataScatterPoints > 0, '\t',
ar.DataScatterPointsRgb is not None and ar.NumberOfDataScatterPoints > 0, '\t',
ar.RayData is not None,
'\t',
ar.CriticalRayData is not None,
'\t',
ar.PathAnalysisData is not None,
'\t',
ar.SpotData is not None)
a.Close()


実行結果は以下のようになります。



各値はタブで区切られているので、データをコピーし、次のように Microsoft Excel のスプレッドシートに容易に貼り付けることができます。




MatLab の例

まず、OpticStudio でボイラープレート コードを生成し、"% Add your custom code here..." と記された行の後からカスタム コードを追加します。以下のコードは、コード全体の最初のブロックです。デフォルトでは、このコードはシーケンシャル解析をテストします。ノンシーケンシャル解析のテーブルを生成するには、"TheSystem.MakeNonSequential()" と記された行のコメント指定を外します。


% Add your custom code here...
% Uncomment following line for non-sequential analyses
% TheSystem.MakeNonSequential()

TheAnalyses = TheSystem.Analyses;

次のコード ブロックでは、解析の列挙 ZOSAPI.Analysis.AnalysisIDM が変数 analIDM に保存され、"System.Enum.GetValues(analIDM.GetType)" を使用してその値が取得されます。


analIDM = ZOSAPI.Analysis.AnalysisIDM;
analValue = System.Enum.GetValues(analIDM.GetType);

次の行で、データ タイプの名前が出力されます。読みやすい出力にブール値を出力するために、LogicStr が定義されています。MatLab では、ブール値の出力として、デフォルトでは "0" が false、"1" が true を示しています。LogicStr を定義することで、ブール値が true の場合は "true"、false の場合は "false" を出力できます。


print('Name\tSetting\tDatGrid\tDatGridRgb\tDatSrs\tDatSrsRgb\t' +
'DatScat\tDatScatRgb\tRayData\tCriRayDat\tPathAnal\tSpotDat')

リスト analIDM には、すべての解析が記述されています。次のコード ブロックでは、"TheAnalyses.New_Analysis(analValue(idx))" を使用し、利用可能な解析を for ループですべて開きます。返された解析オブジェクトが空でなければ、各データ タイプが存在するかどうかがテストされ、その結果がレポートされます。返された解析オブジェクトが空の場合はエラー メッセージが出力されます。これらの解析に関する情報を取得するには、コードの中で該当のモード (シーケンシャルまたはノンシーケンシャル) に変更する必要があります。


for
idx = 1:analValue.Length a = TheAnalyses.New_Analysis(analValue(idx));
if not(isempty(a))
ar = a.GetResults();
fprintf('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n',...
char(a.GetAnalysisName),...
LogicalStr{(a.HasAnalysisSpecificSettings > 0) + 1},...
LogicalStr{(ar.NumberOfDataGrids > 0) + 1},...
LogicalStr{(ar.NumberOfDataGridsRgb > 0) + 1},...
LogicalStr{(ar.NumberOfDataSeries > 0) + 1},...
LogicalStr{(ar.NumberOfDataSeriesRgb > 0) + 1},...
LogicalStr{(ar.NumberOfDataScatterPoints > 0) + 1},...
LogicalStr{(ar.NumberOfDataScatterPointsRgb > 0) + 1},...
LogicalStr{(ar.NumberOfRayData > 0) + 1},...
LogicalStr{(~isempty(ar.CriticalRayData)) + 1},...
LogicalStr{(~isempty(ar.PathAnalysisData)) + 1},...
LogicalStr{(~isempty(ar.SpotData)) + 1}); a.Close() else
fprintf('This analysis cannot be opened in %s. Mode. enumID: %s\n', char(TheSystem.Mode), char(analValue(idx)));
end
end

実行結果は以下のようになります。



各値はタブで区切られているので、データをコピーし、Microsoft Excel のスプレッドシートに貼り付けることができます。以下に例を示します。



まとめ

この記事では、Python と MatLab を使用して、スポット ダイアグラム、MTF、PSF などの解析ごとに ZOS-API で使用できるデータ タイプのリストを生成しました。得られたリストをコピーして Excel のスプレッドシートに貼り付け、データを見やすくして使用できます。

データ タイプによる値を生成しない解析のデータにアクセスする方法については、ZOS-API シンタックス ヘルプで GetTextFile() メソッドの説明を参照してください。
ZOS-API の詳細については、ナレッジベースの記事「ZOS-API.NET:An Overview」および「Support Material for ZOS-API Users」を参照してください。OpticStudio 17 以降では、[プログラミング] (Programming) タブ→ [ZOS-API ヘルプ] (ZOS-API Help) → [ZOS-API シンタックス ヘルプ] (ZOS-API Syntax Help) に、ZOS-API のすべてのドキュメントがあります。

GO


Similar Topics


Login
Existing Account
Email Address:


Password:


Select a Forum....



































Zemax Users Forum


Search