跳转到主要内容

ATIP:Pytac加速器工具箱接口

项目描述

https://travis-ci.org/dls-controls/atip.svg?branch=master https://coveralls.io/repos/github/dls-controls/atip/badge.svg?branch=master https://readthedocs.org/projects/atip/badge/?version=latest https://badge.fury.io/py/atip.svg

ATIP - Pytac加速器工具箱接口

ATIP是Pytac的一个补充,Pytac是一个用于控制粒子加速器的框架。ATIP向Pytac添加了一个模拟器,它可以像真实加速器一样使用和引用。

ATIP通过两种方法之一使高级加速器控制应用的离线测试变得简单

  • 通过在Pytac晶格对象中替换软件所引用的真实加速器;

  • 作为一个独立的应用程序作为“虚拟加速器”,发布与实时机器相同的控制系统接口。在Diamond Light Source,这已经通过EPICS实现,并在不同的端口上运行操作控制系统。因此,测试软件所需做的唯一更改是配置此EPICS端口。

本文档使用Python实现的加速器工具箱(pyAT)进行仿真。

有关ATIP的任何功能或类的更多信息,请参阅此处的文档。

安装

请参阅INSTALL.rst文档。

通用使用

ATIP生成一个“集成晶格”,这是一个添加了模拟数据源的Pytac晶格对象。使用load_sim.py中找到的load()函数添加模拟数据源。

这将在晶格及其每个元件上添加pytac.SIM数据源。

集成晶格的行为类似于正常的Pytac晶格;模拟器可以像实际机器一样引用,但数据源指定为pytac.SIM而不是pytac.LIVE

例如,对BPM的get请求将是<bpm-element>.get_value('x', data_source=pytac.SIM)

模拟数据源的行为与实际机器完全相同,但有一些例外。例如,模拟器有一些晶格字段,而实际加速器没有;实际机器有一些元件字段,而模拟器没有。

示例

请注意,您需要一个与Pytac兼容的AT晶格。一些在atip/rings/中提供,否则尝试使用加载AT晶格的Matlab函数atip/rings/create_lattice_matfile.m运行。

>>> import pytac
>>> import atip
>>> # Load the DIAD lattice from Pytac.
>>> lat = pytac.load_csv.load('DIAD')
>>> # Load the AT sim into the Pytac lattice.
>>> atip.load_sim.load_from_filepath(lat, 'atip/rings/diad.mat')
>>> # Use the sim by default.
>>> lat.set_default_data_source(pytac.SIM)
>>> # The initial beam position is zero.
>>> lat.get_value('x')
array([0., 0., 0., ..., 0., 0., 0.])
>>> # Get the first horizontal corrector magnet and set its current to 1A.
>>> hcor1 = lat.get_elements('HSTR')[0]
>>> hcor1.set_value('x_kick', 1, units=pytac.ENG)
>>> # Now the x beam position has changed.
>>> lat.get_value('x')
array([0.00240101, 0.00240101, 0.00239875, ..., 0.00240393, 0.00240327,
       0.00240327])
>>>

虚拟加速器

有关将ATIP用作虚拟加速器的说明,请参阅virtac/README.rst

实现

模拟器的所有加速器数据都存储在一个ATSimulator对象中,该对象由晶格和每个元件的数据源引用。每个Pytac元件都有一个等效的pyAT元件,存储在ATElementDataSource中;当发出get请求时,返回该AT元件的适当数据。

ATSimulator对象有一个待处理的更改队列。当一个元件收到set请求时,该元件将更改放入ATSimulator的队列中。在ATSimulator内部,一个Cothread线程检查队列的长度。当它看到队列上的更改时,线程重新计算晶格的物理数据以确保其最新。这意味着ATSimulator持有的发射率和线性光学数据在每次更改批次后更新,并且无需过度计算,晶格的物理数据始终可用。

API

load_sim
  • load_from_filepath(pytac_lattice, at_lattice_filepath, callback=None) - 从给定的文件路径到.mat文件加载AT晶格,然后调用load

  • load(pytac_lattice, at_lattice, callback=None) - 将模拟器加载到传递的Pytac晶格中,回调是一个在创建ATSimulator时传递的可调用对象,用于在每个物理计算轮次完成后调用。

ATElementDataSource
  • get_fields() - 返回元件上的字段。

  • add_field(field) - 将给定的字段添加到该元件的数据源。

  • get_value(field) - 获取元件上给定字段的值。

  • set_value(field, value) - 设置元件上给定字段的值,将更改追加到队列。

ATLatticeDataSource
  • get_fields() - 返回晶格上的字段。

  • get_value(field) - 获取晶格上给定字段的值。

  • set_value(field, set_value) - 设置晶格上给定字段的值,当前不支持,因此引发 HandleException。

ATSimulator
  • toggle_calculations() - 暂停或恢复重新计算线程。

  • wait_for_calculations(timeout=10) - 等待最多 'timeout' 秒,直到当前计算完成,如果完成则返回 True,否则返回 False;如果没有传递 'timeout',则等待 10 秒。

  • get_at_element(index) - 返回中心 AT 环中指定 AT 元素的浅拷贝,注意:索引 1 返回 ring[0]。

  • get_at_lattice() - 返回整个集中化 AT 晶格对象的浅拷贝。

  • get_s() - 返回晶格中每个元素的 's 位置'。

  • get_total_bend_angle() - 返回晶格中所有偶极子的总弯曲角度。

  • get_total_absolute_bend_angle() - 返回晶格中所有偶极子的总绝对弯曲角度。

  • get_energy() - 返回晶格的能量。

  • get_tune(field) - 返回晶格的指定平面 '调谐';'x' 或 'y'。

  • get_chromaticity(field) - 返回晶格的指定平面 '色散';'x' 或 'y'。

  • get_orbit(field) - 返回晶格的指定平面 '闭合轨道';'x'、'phase_x'、'y' 或 'phase_y'。

  • get_dispersion() - 返回晶格中每个元素的 '色散' 向量。

  • get_alpha() - 返回晶格中每个元素的 'alpha' 向量。

  • get_beta() - 返回晶格中每个元素的 'beta' 向量。

  • get_mu() - 返回晶格中每个元素的 'mu' 值。

  • get_m44() - 返回晶格中每个元素的 4x4 传递矩阵。

  • get_emittance(field) - 返回晶格的指定平面 '发射度';'x' 或 'y'。

  • get_radiation_integrals() - 返回晶格的 5 个同步积分。

  • get_momentum_compaction() - 返回晶格的动量压缩因子。

  • get_energy_spread() - 返回晶格的能量分散。

  • get_energy_loss() - 返回晶格每圈的能量损失。

  • get_damping_partition_numbers() - 返回晶格三个正常模式的阻尼分数量。

  • get_damping_times() - 返回晶格三个正常模式的阻尼时间。

  • get_linear_dispersion_action() - 返回晶格的线性色散作用(“卷曲 H”)。

  • get_horizontal_emittance() - 返回晶格的横向('x')发射度,该发射度是根据辐射积分计算的。

特别说明

为了使 ATIP 正确运行,使用的 AT 和 Pytac 晶格必须是直接等效的,即它们必须具有相同的长度,并且相同位置的元素。

如果使用本地(非 pip)安装,ATIP、AT 和 Pytac 必须都位于同一源目录中,以便 ATIP 正确运行。

ATIP 数据源上的方法仅接受 handlethrow 参数,以符合它们继承的 Pytac DataSource 基类。在 ATIP 内部,它们不被使用,可以忽略。

为了解释需要返回或设置哪些数据,ATElementDataSourceATLatticeDataSource 都使用一个对应字段的函数字典。在需要将单元格传递给数据处理函数的情况下,为了进一步指定,使用了 functools 的 partial()

物理数据从 AT 整体接收;为了便于管理,它被 ATIP 分割,并通过 ATSimulator 对象的多个方法进行访问。这旨在为用户带来更多便利,但这也导致 ATSimulator 对象具有大量方法。

utils.py 中包含了一些执行频繁或繁琐任务的函数,以使用户的生活更加轻松。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

atip-0.1.0.tar.gz (890.4 kB 查看哈希值)

上传时间

构建分布

atip-0.1.0-py2.py3-none-any.whl (901.7 kB 查看哈希值)

上传时间 Python 2 Python 3