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

この記事では、PythonとMATLABを使用して、ZOS-APIの各分析で使用可能なデータ型(IAR型)のリストを生成する方法について説明します。

 

著者 Michael Cheng

Downloads

添付ファイル

序論

ZOS-APIを使用してOpticStudioにアクセスする場合、スポット ダイアグラム、変調伝達関数 (MTF)、ポイント スプレッド関数 (PSF) などの分析を実行するのがよくあります。さまざまな分析がさまざまなタイプのデータを提供します。ZOS-APIは、次のデータ型をサポートしています。

 

Analyses Results data types (IAR)

 

通常、分析は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 = []

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には、すべての解析が含まれます。次のコードでは、forループを使用して、「TheAnalyses.New_Analysis(k)」を使用して使用可能なすべての解析を開きます。
 
解析が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()

 

結果は次のようになります。

Availability of each data type

 

異なる値はタブで区切られているため、データを簡単にコピーしてMicrosoft Excelスプレッドシートに貼り付けることができます。

Excel spreadsheet

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;

 

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

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

 

次の行は、データ タイプを出力します。LogicStrは、読みやすい出力にブール値を出力するために定義されています。MATLABでは、デフォルトでブール値を出力すると、出力はブール偽の場合は「0」、ブール真の場合は「1」になります。LogicStrを事前定義することにより、ブール値のtrueに対して「true」、ブール値のfalseに対して「false」を出力できます。

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

 

リストanalIDMには、すべての分析が含まれます。次のブロックでは、forループが「TheAnalyses.New_Analysis(analValue(idx))」を使用して利用可能なすべての分析を開きます。返された分析オブジェクトが空でない場合、コードは各データ型の可用性をテストして報告します。返された分析オブジェクトが空の場合、コードはエラーメッセージを出力します。これらの分析に関する情報を取得するために、コードはシステムを対応するモード (シーケンシャルまたはノンシーケンシャル) に変更します。

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

 

結果は次のように表示されます。

 

Matlab data availability

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

 

Matlab to Excel Spreadsheet

データ型に値を持たない分析のためにデータにアクセスする方法の詳細については、ZOS-API シンタックス ヘルプの GetTextFile() を参照してください。

KA-01650

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

コメント

0件のコメント

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