# 执行分析

ZOSPy 在 {py:mod} `zospy.analyses`中为 OpticStudio 分析提供了分析包装器。这些包装器为 OpticStudio 分析提供了一致且更 Pythonic 的接口。此外，它们将分析的输出解析为 Python 对象以便于访问。可用的分析分组在与 OpticStudio 中的分析组相对应的文件中（例如 {py:mod} `zospy.analyses.mtf`和 {py:mod} `zospy.analyses.wavefront` ）。可用分析的概述可以在[API 参考](../api/zospy.analyses.rst)中找到。

## 分析包装器结构

每个分析包装器都是一个接受分析设置作为其参数的类。要运行分析，将使用 OpticStudioSystem `oss`作为其参数调用 {py:meth} `run <zospy.analyses.base.BaseAnalysisWrapper.run>`方法。此方法还有一个可选的 {py:type} `oncomplete <zospy.analyses.base.OnComplete>`参数，该参数指定分析完成后要执行的操作。每个分析包装器也都有一个相应的设置类，允许在创建分析对象的同时定义分析设置。[以下示例](#analysis-with-settings)对此进行了说明。

## 示例

运行 FFT 通过焦点 MTF 分析，采样为 64x64，焦点步长为 0.1：

```python
import zospy as zp

zos = zp.ZOS()
oss = zos.connect()

...

mtf = zp.analyses.mtf.FFTThroughFocusMTF(sampling="64x64", delta_focus=0.1).run(oss, oncomplete="Close")
```

{#analysis-with-settings} 为表面 3 和 4 之间的基点分析创建一个设置对象，并运行该分析：

```python
import zospy as zp

zos = zp.ZOS()
oss = zos.connect()

...

cardinal_points_settings = zp.analyses.reports.CardinalPointsSettings(surface_1=3, surface_2=4)
cardinal_points = zp.analyses.reports.CardinalPoints.with_settings(cardinal_points_settings).run(oss)
```

## 直接访问 OpticStudio 分析

如果您想运行 ZOSPy 中未实现的分析，您可以使用 {py:func} `zp.analyses.new_analysis <zospy.analyses.base.new_analysis>`直接访问 OpticStudio 分析。分析类型必须指定为[ZOSPy 常量](04_constants.md)，例如：

```python
import zospy as zp

zos = zp.ZOS()
oss = zos.connect()

...

analysis = zp.analyses.new_analysis(oss, zp.constants.Analysis.AnalysisIDM.PathAnalysis, settings_first=True)

# Adjust the settings of the analysis
analysis.Settings.FirstRay = 1

# Run the analysis
analysis.ApplyAndWaitForCompletion()
```

如果`settings_first=True` ，则无需运行分析即可创建分析，从而允许您在运行分析之前调整设置。

:::{tip} 如果您编写了代码来直接访问 OpticStudio 分析，请考虑将其[贡献](../contributing/developing_analyses.md)给 ZOSPy。:::
