diff --git a/pyproject.toml b/pyproject.toml index d896bb231..e78dc7719 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,9 +44,9 @@ dependencies = [ "blueapi >= 0.5.0", "daq-config-server >= 0.1.1", "ophyd == 1.9.0", - "ophyd-async >= 0.8a5", + "ophyd-async >= 0.9.0a2", "bluesky >= 1.13", - "dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@a2b9d8c20ff3826e3f1407d0e634a4765dde7f70", + "dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git", ] diff --git a/src/mx_bluesky/common/device_setup_plans/setup_panda.py b/src/mx_bluesky/common/device_setup_plans/setup_panda.py new file mode 100644 index 000000000..cac966f2c --- /dev/null +++ b/src/mx_bluesky/common/device_setup_plans/setup_panda.py @@ -0,0 +1,9 @@ +from ophyd_async.core import YamlSettingsProvider +from ophyd_async.fastcs.panda import HDFPanda +from ophyd_async.plan_stubs import apply_panda_settings, retrieve_settings + + +def load_panda_from_yaml(yaml_directory: str, yaml_file_name: str, panda: HDFPanda): + provider = YamlSettingsProvider(yaml_directory) + settings = yield from retrieve_settings(provider, yaml_file_name, panda) + yield from apply_panda_settings(settings) diff --git a/src/mx_bluesky/common/parameters/constants.py b/src/mx_bluesky/common/parameters/constants.py index 3adc0a9f9..225c2faab 100644 --- a/src/mx_bluesky/common/parameters/constants.py +++ b/src/mx_bluesky/common/parameters/constants.py @@ -1,3 +1,4 @@ +import os from enum import Enum from dodal.devices.aperturescatterguard import ApertureValue @@ -6,6 +7,8 @@ from dodal.utils import get_beamline_name from pydantic.dataclasses import dataclass +from mx_bluesky.definitions import ROOT_DIR + BEAMLINE = get_beamline_name("test") TEST_MODE = BEAMLINE == "test" @@ -118,6 +121,15 @@ class PlanGroupCheckpointConstants: READY_FOR_OAV = "ready_for_oav" +# Eventually replace below with https://github.com/DiamondLightSource/mx-bluesky/issues/798 +@dataclass(frozen=True) +class DeviceSettingsConstants: + PANDA_FLYSCAN_SETTINGS_FILENAME = "panda-gridscan" + PANDA_FLYSCAN_SETTINGS_DIR = os.path.abspath( + f"{ROOT_DIR}/hyperion/resources/panda/{PANDA_FLYSCAN_SETTINGS_FILENAME}" + ) + + @dataclass(frozen=True) class SimConstants: BEAMLINE = "BL03S" diff --git a/src/mx_bluesky/definitions.py b/src/mx_bluesky/definitions.py new file mode 100644 index 000000000..6094869a1 --- /dev/null +++ b/src/mx_bluesky/definitions.py @@ -0,0 +1,4 @@ +import os + +# Change once Python<3.12 is dropped - see https://github.com/DiamondLightSource/mx-bluesky/issues/798 +ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) diff --git a/src/mx_bluesky/hyperion/device_setup_plans/setup_panda.py b/src/mx_bluesky/hyperion/device_setup_plans/setup_panda.py index 32dc77ee3..20e17e9a1 100644 --- a/src/mx_bluesky/hyperion/device_setup_plans/setup_panda.py +++ b/src/mx_bluesky/hyperion/device_setup_plans/setup_panda.py @@ -1,6 +1,5 @@ from datetime import datetime from enum import Enum -from importlib import resources from pathlib import Path import bluesky.plan_stubs as bps @@ -8,15 +7,15 @@ from dodal.common.beamlines.beamline_utils import get_path_provider from dodal.devices.fast_grid_scan import PandAGridScanParams from dodal.devices.smargon import Smargon -from ophyd_async.core import load_device from ophyd_async.fastcs.panda import ( HDFPanda, SeqTable, SeqTrigger, ) -import mx_bluesky.hyperion.resources.panda as panda_resource +from mx_bluesky.common.device_setup_plans.setup_panda import load_panda_from_yaml from mx_bluesky.common.utils.log import LOGGER +from mx_bluesky.hyperion.parameters.constants import DeviceSettingsConstants MM_TO_ENCODER_COUNTS = 200000 GENERAL_TIMEOUT = 60 @@ -145,10 +144,11 @@ def setup_panda_for_flyscan( yield from bps.stage(panda, group="panda-config") - with resources.as_file( - resources.files(panda_resource) / "panda-gridscan.yaml" - ) as config_yaml_path: - yield from load_device(panda, str(config_yaml_path)) + yield from load_panda_from_yaml( + DeviceSettingsConstants.PANDA_FLYSCAN_SETTINGS_DIR, + DeviceSettingsConstants.PANDA_FLYSCAN_SETTINGS_FILENAME, + panda, + ) initial_x = yield from bps.rd(smargon.x.user_readback) initial_y = yield from bps.rd(smargon.y.user_readback) diff --git a/src/mx_bluesky/hyperion/parameters/constants.py b/src/mx_bluesky/hyperion/parameters/constants.py index 8f81a58f5..2b2038f44 100644 --- a/src/mx_bluesky/hyperion/parameters/constants.py +++ b/src/mx_bluesky/hyperion/parameters/constants.py @@ -4,6 +4,7 @@ from pydantic.dataclasses import dataclass from mx_bluesky.common.parameters.constants import ( + DeviceSettingsConstants, DocDescriptorNames, EnvironmentConstants, ExperimentParamConstants, @@ -60,6 +61,7 @@ class HyperionConstants: GRAYLOG_PORT = 12232 PARAMETER_SCHEMA_DIRECTORY = "src/hyperion/parameters/schemas/" LOG_FILE_NAME = "hyperion.log" + DEVICE_SETTINGS_CONSTANTS = DeviceSettingsConstants() CONST = HyperionConstants() diff --git a/src/mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml b/src/mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml index 337dad0e9..561782e27 100644 --- a/src/mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml +++ b/src/mx_bluesky/hyperion/resources/panda/panda-gridscan.yaml @@ -1,964 +1,1006 @@ -- calc.1.out_units: '' - calc.2.out_units: '' - clock.1.period_units: ms - clock.2.period_units: s - counter.1.out_units: '' - counter.2.out_units: '' - counter.3.out_units: '' - counter.4.out_units: '' - counter.5.out_units: '' - counter.6.out_units: '' - counter.7.out_units: '' - counter.8.out_units: '' - filter.1.out_units: '' - filter.2.out_units: '' - inenc.1.clk_period_units: s - inenc.1.frame_period_units: s - inenc.1.val_units: mm - inenc.2.clk_period_units: s - inenc.2.frame_period_units: s - inenc.2.val_units: mm - inenc.3.clk_period_units: s - inenc.3.frame_period_units: s - inenc.3.val_units: mm - inenc.4.clk_period_units: s - inenc.4.frame_period_units: s - inenc.4.val_units: '' - outenc.1.qperiod_units: s - outenc.2.qperiod_units: s - outenc.3.qperiod_units: s - outenc.4.qperiod_units: s - pgen.1.out_units: '' - pgen.2.out_units: '' - pulse.1.delay_units: s - pulse.1.step_units: s - pulse.1.width_units: s - pulse.2.delay_units: s - pulse.2.step_units: s - pulse.2.width_units: s - pulse.3.delay_units: s - pulse.3.step_units: s - pulse.3.width_units: s - pulse.4.delay_units: s - pulse.4.step_units: s - pulse.4.width_units: s - seq.1.prescale_units: us - seq.2.prescale_units: s - sfp3_sync_in.pos1_units: '' - sfp3_sync_in.pos2_units: '' - sfp3_sync_in.pos3_units: '' - sfp3_sync_in.pos4_units: '' -- bits.a: '0' - bits.b: '0' - bits.c: '0' - bits.d: '0' - bits.label: Soft inputs and constant bits - calc.1.func: A+B+C+D - calc.1.inpa: ZERO - calc.1.inpb: ZERO - calc.1.inpc: ZERO - calc.1.inpd: ZERO - calc.1.label: Position calc - calc.1.out_capture: 'No' - calc.1.out_dataset: '' - calc.1.out_offset: 0.0 - calc.1.out_scale: 1.0 - calc.1.shift: 0.0 - calc.1.typea: Value - calc.1.typeb: Value - calc.1.typec: Value - calc.1.typed: Value - calc.2.func: A+B+C+D - calc.2.inpa: ZERO - calc.2.inpb: ZERO - calc.2.inpc: ZERO - calc.2.inpd: ZERO - calc.2.label: Position calc - calc.2.out_capture: 'No' - calc.2.out_dataset: '' - calc.2.out_offset: 0.0 - calc.2.out_scale: 1.0 - calc.2.shift: 0.0 - calc.2.typea: Value - calc.2.typeb: Value - calc.2.typec: Value - calc.2.typed: Value - clock.1.enable: ZERO - clock.1.enable_delay: 0 - clock.1.label: Configurable clocks - clock.1.period: 2.001 - clock.2.enable: ZERO - clock.2.enable_delay: 0 - clock.2.label: Configurable clocks - clock.2.period: 0.0 - counter.1.dir: ZERO - counter.1.dir_delay: 0 - counter.1.enable: ZERO - counter.1.enable_delay: 0 - counter.1.label: Up/Down pulse counter - counter.1.max: 0 - counter.1.min: 0 - counter.1.out_capture: 'No' - counter.1.out_dataset: '' - counter.1.out_offset: 0.0 - counter.1.out_scale: 1.0 - counter.1.start: 0 - counter.1.step: 0.0 - counter.1.trig: PULSE1.OUT - counter.1.trig_delay: 0 - counter.2.dir: ZERO - counter.2.dir_delay: 0 - counter.2.enable: ZERO - counter.2.enable_delay: 0 - counter.2.label: Up/Down pulse counter - counter.2.max: 0 - counter.2.min: 0 - counter.2.out_capture: 'No' - counter.2.out_dataset: '' - counter.2.out_offset: 0.0 - counter.2.out_scale: 1.0 - counter.2.start: 0 - counter.2.step: 0.0 - counter.2.trig: ZERO - counter.2.trig_delay: 0 - counter.3.dir: ZERO - counter.3.dir_delay: 0 - counter.3.enable: ZERO - counter.3.enable_delay: 0 - counter.3.label: Up/Down pulse counter - counter.3.max: 0 - counter.3.min: 0 - counter.3.out_capture: 'No' - counter.3.out_dataset: '' - counter.3.out_offset: 0.0 - counter.3.out_scale: 1.0 - counter.3.start: 0 - counter.3.step: 0.0 - counter.3.trig: ZERO - counter.3.trig_delay: 0 - counter.4.dir: ZERO - counter.4.dir_delay: 0 - counter.4.enable: ZERO - counter.4.enable_delay: 0 - counter.4.label: Up/Down pulse counter - counter.4.max: 0 - counter.4.min: 0 - counter.4.out_capture: 'No' - counter.4.out_dataset: '' - counter.4.out_offset: 0.0 - counter.4.out_scale: 1.0 - counter.4.start: 0 - counter.4.step: 0.0 - counter.4.trig: ZERO - counter.4.trig_delay: 0 - counter.5.dir: ZERO - counter.5.dir_delay: 0 - counter.5.enable: ZERO - counter.5.enable_delay: 0 - counter.5.label: Up/Down pulse counter - counter.5.max: 0 - counter.5.min: 0 - counter.5.out_capture: 'No' - counter.5.out_dataset: '' - counter.5.out_offset: 0.0 - counter.5.out_scale: 1.0 - counter.5.start: 0 - counter.5.step: 0.0 - counter.5.trig: ZERO - counter.5.trig_delay: 0 - counter.6.dir: ZERO - counter.6.dir_delay: 0 - counter.6.enable: ZERO - counter.6.enable_delay: 0 - counter.6.label: Up/Down pulse counter - counter.6.max: 0 - counter.6.min: 0 - counter.6.out_capture: 'No' - counter.6.out_dataset: '' - counter.6.out_offset: 0.0 - counter.6.out_scale: 1.0 - counter.6.start: 0 - counter.6.step: 0.0 - counter.6.trig: ZERO - counter.6.trig_delay: 0 - counter.7.dir: ZERO - counter.7.dir_delay: 0 - counter.7.enable: ZERO - counter.7.enable_delay: 0 - counter.7.label: Up/Down pulse counter - counter.7.max: 0 - counter.7.min: 0 - counter.7.out_capture: 'No' - counter.7.out_dataset: '' - counter.7.out_offset: 0.0 - counter.7.out_scale: 1.0 - counter.7.start: 0 - counter.7.step: 0.0 - counter.7.trig: ZERO - counter.7.trig_delay: 0 - counter.8.dir: ZERO - counter.8.dir_delay: 0 - counter.8.enable: ZERO - counter.8.enable_delay: 0 - counter.8.label: Up/Down pulse counter - counter.8.max: 0 - counter.8.min: 0 - counter.8.out_capture: 'No' - counter.8.out_dataset: '' - counter.8.out_offset: 0.0 - counter.8.out_scale: 1.0 - counter.8.start: 0 - counter.8.step: 0.0 - counter.8.trig: ZERO - counter.8.trig_delay: 0 - div.1.divisor: 0.0 - div.1.enable: ZERO - div.1.enable_delay: 0 - div.1.first_pulse: OutN - div.1.inp: ZERO - div.1.inp_delay: 0 - div.1.label: Pulse divider - div.2.divisor: 0.0 - div.2.enable: ZERO - div.2.enable_delay: 0 - div.2.first_pulse: OutN - div.2.inp: ZERO - div.2.inp_delay: 0 - div.2.label: Pulse divider - filter.1.enable: ZERO - filter.1.enable_delay: 0 - filter.1.inp: ZERO - filter.1.label: Filter block modes are Difference and Divider - filter.1.mode: difference - filter.1.out_capture: 'No' - filter.1.out_dataset: '' - filter.1.out_offset: 0.0 - filter.1.out_scale: 1.0 - filter.1.trig: ZERO - filter.1.trig_delay: 0 - filter.2.enable: ZERO - filter.2.enable_delay: 0 - filter.2.inp: ZERO - filter.2.label: Filter block modes are Difference and Divider - filter.2.mode: difference - filter.2.out_capture: 'No' - filter.2.out_dataset: '' - filter.2.out_offset: 0.0 - filter.2.out_scale: 1.0 - filter.2.trig: ZERO - filter.2.trig_delay: 0 - fmc_24v_in.db: None - fmc_24v_in.label: FMC 24V IO Module Input - fmc_24v_in.vtsel: 5V - fmc_24v_out.config: 0.0 - fmc_24v_out.en: Disable - fmc_24v_out.fltr: 'Off' - fmc_24v_out.label: FMC 24V IO Module Input - fmc_24v_out.pushpl: High-side - fmc_24v_out.pwr_on: 'Off' - fmc_24v_out.srial: Parallel - fmc_24v_out.val1: ZERO - fmc_24v_out.val1_delay: 0 - fmc_24v_out.val2: ZERO - fmc_24v_out.val2_delay: 0 - fmc_24v_out.val3: ZERO - fmc_24v_out.val3_delay: 0 - fmc_24v_out.val4: ZERO - fmc_24v_out.val4_delay: 0 - fmc_24v_out.val5: ZERO - fmc_24v_out.val5_delay: 0 - fmc_24v_out.val6: ZERO - fmc_24v_out.val6_delay: 0 - fmc_24v_out.val7: ZERO - fmc_24v_out.val7_delay: 0 - fmc_24v_out.val8: ZERO - fmc_24v_out.val8_delay: 0 - inenc.1.bits: 0.0 - inenc.1.clk: ZERO - inenc.1.clk_delay: 0 - inenc.1.clk_period: 0.0 - inenc.1.clk_src: Internally Generated - inenc.1.frame_period: 0.0 - inenc.1.label: Y - inenc.1.lsb_discard: 0.0 - inenc.1.msb_discard: 0.0 - inenc.1.protocol: Quadrature - inenc.1.rst_on_z: '0' - inenc.1.setp: 0 - inenc.1.val_capture: Min Max Mean - inenc.1.val_dataset: '' - inenc.1.val_offset: 0.0 - inenc.1.val_scale: 5.0e-06 - inenc.2.bits: 0.0 - inenc.2.clk: ZERO - inenc.2.clk_delay: 0 - inenc.2.clk_period: 0.0 - inenc.2.clk_src: Internally Generated - inenc.2.frame_period: 0.0 - inenc.2.label: Z - inenc.2.lsb_discard: 0.0 - inenc.2.msb_discard: 0.0 - inenc.2.protocol: Quadrature - inenc.2.rst_on_z: '0' - inenc.2.setp: 0 - inenc.2.val_capture: Min Max Mean - inenc.2.val_dataset: '' - inenc.2.val_offset: 0.0 - inenc.2.val_scale: 5.0e-06 - inenc.3.bits: 0.0 - inenc.3.clk: ZERO - inenc.3.clk_delay: 0 - inenc.3.clk_period: 0.0 - inenc.3.clk_src: Internally Generated - inenc.3.frame_period: 0.0 - inenc.3.label: Input encoder - inenc.3.lsb_discard: 0.0 - inenc.3.msb_discard: 0.0 - inenc.3.protocol: Quadrature - inenc.3.rst_on_z: '0' - inenc.3.setp: 0 - inenc.3.val_capture: Min Max Mean - inenc.3.val_dataset: '' - inenc.3.val_offset: 0.0 - inenc.3.val_scale: 5.0e-06 - inenc.4.bits: 0.0 - inenc.4.clk: ZERO - inenc.4.clk_delay: 0 - inenc.4.clk_period: 0.0 - inenc.4.clk_src: Internally Generated - inenc.4.frame_period: 0.0 - inenc.4.label: Input encoder - inenc.4.lsb_discard: 0.0 - inenc.4.msb_discard: 0.0 - inenc.4.protocol: Quadrature - inenc.4.rst_on_z: '0' - inenc.4.setp: 0 - inenc.4.val_capture: 'No' - inenc.4.val_dataset: '' - inenc.4.val_offset: 0.0 - inenc.4.val_scale: 1.0 - lut.1.func: A|B - lut.1.inpa: ZERO - lut.1.inpa_delay: 0 - lut.1.inpb: ZERO - lut.1.inpb_delay: 0 - lut.1.inpc: ZERO - lut.1.inpc_delay: 0 - lut.1.inpd: ZERO - lut.1.inpd_delay: 0 - lut.1.inpe: ZERO - lut.1.inpe_delay: 0 - lut.1.label: ensure pgen triggers at beginning and each iteration - lut.1.typea: Input-Level - lut.1.typeb: Input-Level - lut.1.typec: Input-Level - lut.1.typed: Input-Level - lut.1.typee: Input-Level - lut.2.func: A | B - lut.2.inpa: ZERO - lut.2.inpa_delay: 0 - lut.2.inpb: ZERO - lut.2.inpb_delay: 0 - lut.2.inpc: ZERO - lut.2.inpc_delay: 0 - lut.2.inpd: ZERO - lut.2.inpd_delay: 0 - lut.2.inpe: ZERO - lut.2.inpe_delay: 0 - lut.2.label: OR 2 - lut.2.typea: Input-Level - lut.2.typeb: Input-Level - lut.2.typec: Input-Level - lut.2.typed: Input-Level - lut.2.typee: Input-Level - lut.3.func: '0x00000000' - lut.3.inpa: ZERO - lut.3.inpa_delay: 0 - lut.3.inpb: ZERO - lut.3.inpb_delay: 0 - lut.3.inpc: ZERO - lut.3.inpc_delay: 0 - lut.3.inpd: ZERO - lut.3.inpd_delay: 0 - lut.3.inpe: ZERO - lut.3.inpe_delay: 0 - lut.3.label: AND2 - lut.3.typea: Input-Level - lut.3.typeb: Input-Level - lut.3.typec: Input-Level - lut.3.typed: Input-Level - lut.3.typee: Input-Level - lut.4.func: A | B | C - lut.4.inpa: ZERO - lut.4.inpa_delay: 0 - lut.4.inpb: ZERO - lut.4.inpb_delay: 0 - lut.4.inpc: ZERO - lut.4.inpc_delay: 0 - lut.4.inpd: ZERO - lut.4.inpd_delay: 0 - lut.4.inpe: ZERO - lut.4.inpe_delay: 0 - lut.4.label: 'OR 1 ' - lut.4.typea: Input-Level - lut.4.typeb: Input-Level - lut.4.typec: Input-Level - lut.4.typed: Input-Level - lut.4.typee: Input-Level - lut.5.func: '0x00000000' - lut.5.inpa: ZERO - lut.5.inpa_delay: 0 - lut.5.inpb: ZERO - lut.5.inpb_delay: 0 - lut.5.inpc: ZERO - lut.5.inpc_delay: 0 - lut.5.inpd: ZERO - lut.5.inpd_delay: 0 - lut.5.inpe: ZERO - lut.5.inpe_delay: 0 - lut.5.label: Lookup table - lut.5.typea: Input-Level - lut.5.typeb: Input-Level - lut.5.typec: Input-Level - lut.5.typed: Input-Level - lut.5.typee: Input-Level - lut.6.func: '0x00000000' - lut.6.inpa: ZERO - lut.6.inpa_delay: 0 - lut.6.inpb: ZERO - lut.6.inpb_delay: 0 - lut.6.inpc: ZERO - lut.6.inpc_delay: 0 - lut.6.inpd: ZERO - lut.6.inpd_delay: 0 - lut.6.inpe: ZERO - lut.6.inpe_delay: 0 - lut.6.label: Lookup table - lut.6.typea: Input-Level - lut.6.typeb: Input-Level - lut.6.typec: Input-Level - lut.6.typed: Input-Level - lut.6.typee: Input-Level - lut.7.func: '0x00000000' - lut.7.inpa: ZERO - lut.7.inpa_delay: 0 - lut.7.inpb: ZERO - lut.7.inpb_delay: 0 - lut.7.inpc: ZERO - lut.7.inpc_delay: 0 - lut.7.inpd: ZERO - lut.7.inpd_delay: 0 - lut.7.inpe: ZERO - lut.7.inpe_delay: 0 - lut.7.label: Lookup table - lut.7.typea: Input-Level - lut.7.typeb: Input-Level - lut.7.typec: Input-Level - lut.7.typed: Input-Level - lut.7.typee: Input-Level - lut.8.func: '0x00000000' - lut.8.inpa: ZERO - lut.8.inpa_delay: 0 - lut.8.inpb: ZERO - lut.8.inpb_delay: 0 - lut.8.inpc: ZERO - lut.8.inpc_delay: 0 - lut.8.inpd: ZERO - lut.8.inpd_delay: 0 - lut.8.inpe: ZERO - lut.8.inpe_delay: 0 - lut.8.label: Lookup table - lut.8.typea: Input-Level - lut.8.typeb: Input-Level - lut.8.typec: Input-Level - lut.8.typed: Input-Level - lut.8.typee: Input-Level - lvdsin.1.label: LVDS input - lvdsin.2.label: LVDS input - lvdsout.1.label: LVDS output - lvdsout.1.val: ZERO - lvdsout.1.val_delay: 0 - lvdsout.2.label: LVDS output - lvdsout.2.val: ZERO - lvdsout.2.val_delay: 0 - outenc.1.a: ZERO - outenc.1.a_delay: 0 - outenc.1.b: ZERO - outenc.1.b_delay: 0 - outenc.1.bits: 0.0 - outenc.1.data: ZERO - outenc.1.data_delay: 0 - outenc.1.enable: ZERO - outenc.1.enable_delay: 0 - outenc.1.generator_error: 'No' - outenc.1.label: Output encoder - outenc.1.protocol: Quadrature - outenc.1.qperiod: 0.0 - outenc.1.val: ZERO - outenc.1.z: ZERO - outenc.1.z_delay: 0 - outenc.2.a: ZERO - outenc.2.a_delay: 0 - outenc.2.b: ZERO - outenc.2.b_delay: 0 - outenc.2.bits: 0.0 - outenc.2.data: ZERO - outenc.2.data_delay: 0 - outenc.2.enable: ZERO - outenc.2.enable_delay: 0 - outenc.2.generator_error: 'No' - outenc.2.label: Output encoder - outenc.2.protocol: Quadrature - outenc.2.qperiod: 0.0 - outenc.2.val: ZERO - outenc.2.z: ZERO - outenc.2.z_delay: 0 - outenc.3.a: ZERO - outenc.3.a_delay: 0 - outenc.3.b: ZERO - outenc.3.b_delay: 0 - outenc.3.bits: 0.0 - outenc.3.data: ZERO - outenc.3.data_delay: 0 - outenc.3.enable: ZERO - outenc.3.enable_delay: 0 - outenc.3.generator_error: 'No' - outenc.3.label: Output encoder - outenc.3.protocol: Quadrature - outenc.3.qperiod: 0.0 - outenc.3.val: ZERO - outenc.3.z: ZERO - outenc.3.z_delay: 0 - outenc.4.a: ZERO - outenc.4.a_delay: 0 - outenc.4.b: ZERO - outenc.4.b_delay: 0 - outenc.4.bits: 0.0 - outenc.4.data: ZERO - outenc.4.data_delay: 0 - outenc.4.enable: ZERO - outenc.4.enable_delay: 0 - outenc.4.generator_error: 'No' - outenc.4.label: Output encoder - outenc.4.protocol: Quadrature - outenc.4.qperiod: 0.0 - outenc.4.val: ZERO - outenc.4.z: ZERO - outenc.4.z_delay: 0 - pcap.arm: false - pcap.bits0_capture: 'No' - pcap.bits0_dataset: '' - pcap.bits1_capture: 'No' - pcap.bits1_dataset: '' - pcap.bits2_capture: 'No' - pcap.bits2_dataset: '' - pcap.bits3_capture: 'No' - pcap.bits3_dataset: '' - pcap.enable: ZERO - pcap.enable_delay: 0 - pcap.gate: PULSE1.OUT - pcap.gate_delay: 0 - pcap.label: Position capture control - pcap.samples_capture: 'No' - pcap.samples_dataset: '' - pcap.shift_sum: 0.0 - pcap.trig: PULSE1.OUT - pcap.trig_delay: 0 - pcap.trig_edge: Rising - pcap.ts_end_capture: 'No' - pcap.ts_end_dataset: '' - pcap.ts_start_capture: 'No' - pcap.ts_start_dataset: '' - pcap.ts_trig_capture: Value - pcap.ts_trig_dataset: '' - pcomp.1.dir: Positive - pcomp.1.enable: ZERO - pcomp.1.enable_delay: 0 - pcomp.1.inp: ZERO - pcomp.1.label: Position compare - pcomp.1.pre_start: 0 - pcomp.1.pulses: 0.0 - pcomp.1.relative: Absolute - pcomp.1.start: 0 - pcomp.1.step: 40 - pcomp.1.width: 30 - pcomp.2.dir: Either - pcomp.2.enable: ZERO - pcomp.2.enable_delay: 0 - pcomp.2.inp: ZERO - pcomp.2.label: Position compare - pcomp.2.pre_start: 0 - pcomp.2.pulses: 0.0 - pcomp.2.relative: Absolute - pcomp.2.start: 400 - pcomp.2.step: 0 - pcomp.2.width: 50 - pgen.1.enable: ZERO - pgen.1.enable_delay: 0 - pgen.1.label: Position generator - pgen.1.out_capture: 'No' - pgen.1.out_dataset: '' - pgen.1.out_offset: 0.0 - pgen.1.out_scale: 1.0 - pgen.1.repeats: 0.0 - pgen.1.table: - position: [] - pgen.1.trig: ZERO - pgen.1.trig_delay: 0 - pgen.2.enable: ZERO - pgen.2.enable_delay: 0 - pgen.2.label: Position generator - pgen.2.out_capture: 'No' - pgen.2.out_dataset: '' - pgen.2.out_offset: 0.0 - pgen.2.out_scale: 1.0 - pgen.2.repeats: 0.0 - pgen.2.table: - position: [] - pgen.2.trig: ZERO - pgen.2.trig_delay: 0 - pulse.1.delay: 0.0 - pulse.1.enable: ZERO - pulse.1.enable_delay: 0 - pulse.1.label: Begin FGS on trig - pulse.1.pulses: 1.0 - pulse.1.step: 0.0 - pulse.1.trig: SEQ1.OUTA - pulse.1.trig_delay: 0 - pulse.1.trig_edge: Rising - pulse.1.width: 0.0001 - pulse.2.delay: 0.0 - pulse.2.enable: ZERO - pulse.2.enable_delay: 0 - pulse.2.label: One-shot pulse delay and stretch - pulse.2.pulses: 0.0 - pulse.2.step: 0.0 - pulse.2.trig: ZERO - pulse.2.trig_delay: 0 - pulse.2.trig_edge: Rising - pulse.2.width: 0.0 - pulse.3.delay: 0.0 - pulse.3.enable: ZERO - pulse.3.enable_delay: 0 - pulse.3.label: One-shot pulse delay and stretch - pulse.3.pulses: 0.0 - pulse.3.step: 0.0 - pulse.3.trig: ZERO - pulse.3.trig_delay: 0 - pulse.3.trig_edge: Rising - pulse.3.width: 0.0 - pulse.4.delay: 0.0 - pulse.4.enable: ZERO - pulse.4.enable_delay: 0 - pulse.4.label: One-shot pulse delay and stretch - pulse.4.pulses: 0.0 - pulse.4.step: 0.0 - pulse.4.trig: ZERO - pulse.4.trig_delay: 0 - pulse.4.trig_edge: Rising - pulse.4.width: 0.0 - seq.1.bita: TTLIN1.VAL - seq.1.bita_delay: 0 - seq.1.bitb: ZERO - seq.1.bitb_delay: 0 - seq.1.bitc: ZERO - seq.1.bitc_delay: 0 - seq.1.enable: ZERO - seq.1.enable_delay: 0 - seq.1.label: Sequencer - seq.1.posa: INENC1.VAL - seq.1.posb: ZERO - seq.1.posc: ZERO - seq.1.prescale: 1.0 - seq.1.repeats: 0.0 - seq.1.table: - outa1: [0, 1, 0, 0, 1, 0] - outa2: [0, 1, 0, 0, 1, 0] - outb1: [0, 0, 0, 0, 0, 0] - outb2: [0, 0, 0, 0, 0, 0] - outc1: [0, 0, 0, 0, 0, 0] - outc2: [0, 0, 0, 0, 0, 0] - outd1: [0, 0, 0, 0, 0, 0] - outd2: [0, 0, 0, 0, 0, 0] - oute1: [0, 0, 0, 0, 0, 0] - oute2: [0, 0, 0, 0, 0, 0] - outf1: [0, 0, 0, 0, 0, 0] - outf2: [0, 0, 0, 0, 0, 0] - position: [0, 68581, 186581, 0, 188579, 70579] - repeats: [1, 1, 1, 1, 1, 1] - time1: [0, 0, 0, 0, 0, 0] - time2: [1, 1, 1, 1, 1, 1] - trigger: - - BITA=1 - - POSA>=POSITION - - POSA>=POSITION - - BITA=1 - - POSA<=POSITION - - POSA<=POSITION - seq.2.bita: ZERO - seq.2.bita_delay: 0 - seq.2.bitb: ZERO - seq.2.bitb_delay: 0 - seq.2.bitc: ZERO - seq.2.bitc_delay: 0 - seq.2.enable: ZERO - seq.2.enable_delay: 0 - seq.2.label: PCOMP from table - seq.2.posa: ZERO - seq.2.posb: ZERO - seq.2.posc: ZERO - seq.2.prescale: 0.0 - seq.2.repeats: 0.0 - seq.2.table: - outa1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] - outa2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] - outb1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outb2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outc1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outc2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outd1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outd2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - oute1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - oute2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outf1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - outf2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - position: [-1985, 2000, 6000, 10000, 14000, 18000, 22000, 26000, 30000, 34000, - 38000, 42000, 46000, 50000, 54000, 58000, 62000, 66000, 70000, 74000, 78000, - 82000, 86000, 90000, 94000, 98000, 102000, 106000, 110000, 114000, 117990, 117985, - 114000, 110000, 106000, 102000, 98000, 94000, 90000, 86000, 82000, 78000, 74000, - 70000, 66000, 62000, 58000, 54000, 50000, 46000, 42000, 38000, 34000, 30000, - 26000, 22000, 18000, 14000, 10000, 6000, 2000, -1990] - repeats: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - time1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - time2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - trigger: - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA>=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - - POSA<=POSITION - sfp3_sync_in.label: sfp panda synchronizer - sfp3_sync_in.pos1_capture: 'No' - sfp3_sync_in.pos1_dataset: '' - sfp3_sync_in.pos1_offset: 0.0 - sfp3_sync_in.pos1_scale: 1.0 - sfp3_sync_in.pos2_capture: 'No' - sfp3_sync_in.pos2_dataset: '' - sfp3_sync_in.pos2_offset: 0.0 - sfp3_sync_in.pos2_scale: 1.0 - sfp3_sync_in.pos3_capture: 'No' - sfp3_sync_in.pos3_dataset: '' - sfp3_sync_in.pos3_offset: 0.0 - sfp3_sync_in.pos3_scale: 1.0 - sfp3_sync_in.pos4_capture: 'No' - sfp3_sync_in.pos4_dataset: '' - sfp3_sync_in.pos4_offset: 0.0 - sfp3_sync_in.pos4_scale: 1.0 - sfp3_sync_out.bit1: ZERO - sfp3_sync_out.bit10: ZERO - sfp3_sync_out.bit10_delay: 0 - sfp3_sync_out.bit11: ZERO - sfp3_sync_out.bit11_delay: 0 - sfp3_sync_out.bit12: ZERO - sfp3_sync_out.bit12_delay: 0 - sfp3_sync_out.bit13: ZERO - sfp3_sync_out.bit13_delay: 0 - sfp3_sync_out.bit14: ZERO - sfp3_sync_out.bit14_delay: 0 - sfp3_sync_out.bit15: ZERO - sfp3_sync_out.bit15_delay: 0 - sfp3_sync_out.bit16: ZERO - sfp3_sync_out.bit16_delay: 0 - sfp3_sync_out.bit1_delay: 0 - sfp3_sync_out.bit2: ZERO - sfp3_sync_out.bit2_delay: 0 - sfp3_sync_out.bit3: ZERO - sfp3_sync_out.bit3_delay: 0 - sfp3_sync_out.bit4: ZERO - sfp3_sync_out.bit4_delay: 0 - sfp3_sync_out.bit5: ZERO - sfp3_sync_out.bit5_delay: 0 - sfp3_sync_out.bit6: ZERO - sfp3_sync_out.bit6_delay: 0 - sfp3_sync_out.bit7: ZERO - sfp3_sync_out.bit7_delay: 0 - sfp3_sync_out.bit8: ZERO - sfp3_sync_out.bit8_delay: 0 - sfp3_sync_out.bit9: ZERO - sfp3_sync_out.bit9_delay: 0 - sfp3_sync_out.label: sfp panda synchronizer - sfp3_sync_out.pos1: ZERO - sfp3_sync_out.pos2: ZERO - sfp3_sync_out.pos3: ZERO - sfp3_sync_out.pos4: ZERO - srgate.1.enable: ZERO - srgate.1.enable_delay: 0 - srgate.1.label: Reset on new row - srgate.1.rst: ZERO - srgate.1.rst_delay: 0 - srgate.1.rst_edge: Rising - srgate.1.set: ZERO - srgate.1.set_delay: 0 - srgate.1.set_edge: Rising - srgate.1.when_disabled: Set output low - srgate.2.enable: ZERO - srgate.2.enable_delay: 0 - srgate.2.label: Set reset gate - srgate.2.rst: ZERO - srgate.2.rst_delay: 0 - srgate.2.rst_edge: Rising - srgate.2.set: ZERO - srgate.2.set_delay: 0 - srgate.2.set_edge: Rising - srgate.2.when_disabled: Set output low - srgate.3.enable: ZERO - srgate.3.enable_delay: 0 - srgate.3.label: Set reset gate - srgate.3.rst: ZERO - srgate.3.rst_delay: 0 - srgate.3.rst_edge: Rising - srgate.3.set: ZERO - srgate.3.set_delay: 0 - srgate.3.set_edge: Rising - srgate.3.when_disabled: Set output low - srgate.4.enable: ZERO - srgate.4.enable_delay: 0 - srgate.4.label: Set reset gate - srgate.4.rst: ZERO - srgate.4.rst_delay: 0 - srgate.4.rst_edge: Rising - srgate.4.set: ZERO - srgate.4.set_delay: 0 - srgate.4.set_edge: Rising - srgate.4.when_disabled: Set output low - system.ext_clock: int clock - system.label: System control FPGA - ttlin.1.label: TTL input - ttlin.1.term: High-Z - ttlin.2.label: TTL input - ttlin.2.term: High-Z - ttlin.3.label: TTL input - ttlin.3.term: High-Z - ttlin.4.label: TTL input - ttlin.4.term: High-Z - ttlin.5.label: TTL input - ttlin.5.term: High-Z - ttlin.6.label: TTL input - ttlin.6.term: High-Z - ttlout.1.label: TTL output - ttlout.1.val: PULSE1.OUT - ttlout.1.val_delay: 0 - ttlout.10.label: TTL output - ttlout.10.val: ZERO - ttlout.10.val_delay: 0 - ttlout.2.label: TTL output - ttlout.2.val: ZERO - ttlout.2.val_delay: 0 - ttlout.3.label: TTL output - ttlout.3.val: ZERO - ttlout.3.val_delay: 0 - ttlout.4.label: TTL output - ttlout.4.val: ZERO - ttlout.4.val_delay: 0 - ttlout.5.label: TTL output - ttlout.5.val: ZERO - ttlout.5.val_delay: 0 - ttlout.6.label: TTL output - ttlout.6.val: ZERO - ttlout.6.val_delay: 0 - ttlout.7.label: TTL output - ttlout.7.val: ZERO - ttlout.7.val_delay: 0 - ttlout.8.label: TTL output - ttlout.8.val: ZERO - ttlout.8.val_delay: 0 - ttlout.9.label: TTL output - ttlout.9.val: ZERO - ttlout.9.val_delay: 0 +bits.a: '0' +bits.b: '0' +bits.c: '0' +bits.d: '0' +bits.label: Soft inputs and constant bits +calc.1.func: A+B+C+D +calc.1.inpa: ZERO +calc.1.inpb: ZERO +calc.1.inpc: ZERO +calc.1.inpd: ZERO +calc.1.label: Position calc +calc.1.out_capture: 'No' +calc.1.out_dataset: '' +calc.1.out_offset: 0.0 +calc.1.out_scale: 1.0 +calc.1.out_units: '' +calc.1.shift: 0.0 +calc.1.typea: Value +calc.1.typeb: Value +calc.1.typec: Value +calc.1.typed: Value +calc.2.func: A+B+C+D +calc.2.inpa: ZERO +calc.2.inpb: ZERO +calc.2.inpc: ZERO +calc.2.inpd: ZERO +calc.2.label: Position calc +calc.2.out_capture: 'No' +calc.2.out_dataset: '' +calc.2.out_offset: 0.0 +calc.2.out_scale: 1.0 +calc.2.out_units: '' +calc.2.shift: 0.0 +calc.2.typea: Value +calc.2.typeb: Value +calc.2.typec: Value +calc.2.typed: Value +clock.1.enable: ZERO +clock.1.enable_delay: 0 +clock.1.label: Configurable clocks +clock.1.period: 2.001 +clock.1.period_units: ms +clock.2.enable: ZERO +clock.2.enable_delay: 0 +clock.2.label: Configurable clocks +clock.2.period: 0.0 +clock.2.period_units: s +counter.1.dir: ZERO +counter.1.dir_delay: 0 +counter.1.enable: ZERO +counter.1.enable_delay: 0 +counter.1.label: Up/Down pulse counter +counter.1.max: 0 +counter.1.min: 0 +counter.1.out_capture: 'No' +counter.1.out_dataset: '' +counter.1.out_offset: 0.0 +counter.1.out_scale: 1.0 +counter.1.out_units: '' +counter.1.start: 0 +counter.1.step: 0.0 +counter.1.trig: PULSE1.OUT +counter.1.trig_delay: 0 +counter.2.dir: ZERO +counter.2.dir_delay: 0 +counter.2.enable: ZERO +counter.2.enable_delay: 0 +counter.2.label: Up/Down pulse counter +counter.2.max: 0 +counter.2.min: 0 +counter.2.out_capture: 'No' +counter.2.out_dataset: '' +counter.2.out_offset: 0.0 +counter.2.out_scale: 1.0 +counter.2.out_units: '' +counter.2.start: 0 +counter.2.step: 0.0 +counter.2.trig: ZERO +counter.2.trig_delay: 0 +counter.3.dir: ZERO +counter.3.dir_delay: 0 +counter.3.enable: ZERO +counter.3.enable_delay: 0 +counter.3.label: Up/Down pulse counter +counter.3.max: 0 +counter.3.min: 0 +counter.3.out_capture: 'No' +counter.3.out_dataset: '' +counter.3.out_offset: 0.0 +counter.3.out_scale: 1.0 +counter.3.out_units: '' +counter.3.start: 0 +counter.3.step: 0.0 +counter.3.trig: ZERO +counter.3.trig_delay: 0 +counter.4.dir: ZERO +counter.4.dir_delay: 0 +counter.4.enable: ZERO +counter.4.enable_delay: 0 +counter.4.label: Up/Down pulse counter +counter.4.max: 0 +counter.4.min: 0 +counter.4.out_capture: 'No' +counter.4.out_dataset: '' +counter.4.out_offset: 0.0 +counter.4.out_scale: 1.0 +counter.4.out_units: '' +counter.4.start: 0 +counter.4.step: 0.0 +counter.4.trig: ZERO +counter.4.trig_delay: 0 +counter.5.dir: ZERO +counter.5.dir_delay: 0 +counter.5.enable: ZERO +counter.5.enable_delay: 0 +counter.5.label: Up/Down pulse counter +counter.5.max: 0 +counter.5.min: 0 +counter.5.out_capture: 'No' +counter.5.out_dataset: '' +counter.5.out_offset: 0.0 +counter.5.out_scale: 1.0 +counter.5.out_units: '' +counter.5.start: 0 +counter.5.step: 0.0 +counter.5.trig: ZERO +counter.5.trig_delay: 0 +counter.6.dir: ZERO +counter.6.dir_delay: 0 +counter.6.enable: ZERO +counter.6.enable_delay: 0 +counter.6.label: Up/Down pulse counter +counter.6.max: 0 +counter.6.min: 0 +counter.6.out_capture: 'No' +counter.6.out_dataset: '' +counter.6.out_offset: 0.0 +counter.6.out_scale: 1.0 +counter.6.out_units: '' +counter.6.start: 0 +counter.6.step: 0.0 +counter.6.trig: ZERO +counter.6.trig_delay: 0 +counter.7.dir: ZERO +counter.7.dir_delay: 0 +counter.7.enable: ZERO +counter.7.enable_delay: 0 +counter.7.label: Up/Down pulse counter +counter.7.max: 0 +counter.7.min: 0 +counter.7.out_capture: 'No' +counter.7.out_dataset: '' +counter.7.out_offset: 0.0 +counter.7.out_scale: 1.0 +counter.7.out_units: '' +counter.7.start: 0 +counter.7.step: 0.0 +counter.7.trig: ZERO +counter.7.trig_delay: 0 +counter.8.dir: ZERO +counter.8.dir_delay: 0 +counter.8.enable: ZERO +counter.8.enable_delay: 0 +counter.8.label: Up/Down pulse counter +counter.8.max: 0 +counter.8.min: 0 +counter.8.out_capture: 'No' +counter.8.out_dataset: '' +counter.8.out_offset: 0.0 +counter.8.out_scale: 1.0 +counter.8.out_units: '' +counter.8.start: 0 +counter.8.step: 0.0 +counter.8.trig: ZERO +counter.8.trig_delay: 0 +data.capture: false +data.capture_mode: FIRST_N +data.create_directory: 0 +data.flush_period: 1.0 +data.hdf_directory: '' +data.hdf_file_name: '' +data.num_capture: 0 +div.1.divisor: 0.0 +div.1.enable: ZERO +div.1.enable_delay: 0 +div.1.first_pulse: OutN +div.1.inp: ZERO +div.1.inp_delay: 0 +div.1.label: Pulse divider +div.2.divisor: 0.0 +div.2.enable: ZERO +div.2.enable_delay: 0 +div.2.first_pulse: OutN +div.2.inp: ZERO +div.2.inp_delay: 0 +div.2.label: Pulse divider +filter.1.enable: ZERO +filter.1.enable_delay: 0 +filter.1.inp: ZERO +filter.1.label: Filter block modes are Difference and Divider +filter.1.mode: difference +filter.1.out_capture: 'No' +filter.1.out_dataset: '' +filter.1.out_offset: 0.0 +filter.1.out_scale: 1.0 +filter.1.out_units: '' +filter.1.trig: ZERO +filter.1.trig_delay: 0 +filter.2.enable: ZERO +filter.2.enable_delay: 0 +filter.2.inp: ZERO +filter.2.label: Filter block modes are Difference and Divider +filter.2.mode: difference +filter.2.out_capture: 'No' +filter.2.out_dataset: '' +filter.2.out_offset: 0.0 +filter.2.out_scale: 1.0 +filter.2.out_units: '' +filter.2.trig: ZERO +filter.2.trig_delay: 0 +fmc_24v_in.db: None +fmc_24v_in.label: FMC 24V IO Module Input +fmc_24v_in.vtsel: 5V +fmc_24v_out.config: 0.0 +fmc_24v_out.en: Disable +fmc_24v_out.fltr: 'Off' +fmc_24v_out.label: FMC 24V IO Module Input +fmc_24v_out.pushpl: High-side +fmc_24v_out.pwr_on: 'Off' +fmc_24v_out.srial: Parallel +fmc_24v_out.val1: ZERO +fmc_24v_out.val1_delay: 0 +fmc_24v_out.val2: ZERO +fmc_24v_out.val2_delay: 0 +fmc_24v_out.val3: ZERO +fmc_24v_out.val3_delay: 0 +fmc_24v_out.val4: ZERO +fmc_24v_out.val4_delay: 0 +fmc_24v_out.val5: ZERO +fmc_24v_out.val5_delay: 0 +fmc_24v_out.val6: ZERO +fmc_24v_out.val6_delay: 0 +fmc_24v_out.val7: ZERO +fmc_24v_out.val7_delay: 0 +fmc_24v_out.val8: ZERO +fmc_24v_out.val8_delay: 0 +inenc.1.bits: 0.0 +inenc.1.clk: ZERO +inenc.1.clk_delay: 0 +inenc.1.clk_period: 0.0 +inenc.1.clk_period_units: s +inenc.1.clk_src: Internally Generated +inenc.1.frame_period: 0.0 +inenc.1.frame_period_units: s +inenc.1.label: Y +inenc.1.lsb_discard: 0.0 +inenc.1.msb_discard: 0.0 +inenc.1.protocol: Quadrature +inenc.1.rst_on_z: '0' +inenc.1.setp: 0 +inenc.1.val_capture: Min Max Mean +inenc.1.val_dataset: '' +inenc.1.val_offset: 0.0 +inenc.1.val_scale: 5.0e-06 +inenc.1.val_units: mm +inenc.2.bits: 0.0 +inenc.2.clk: ZERO +inenc.2.clk_delay: 0 +inenc.2.clk_period: 0.0 +inenc.2.clk_period_units: s +inenc.2.clk_src: Internally Generated +inenc.2.frame_period: 0.0 +inenc.2.frame_period_units: s +inenc.2.label: Z +inenc.2.lsb_discard: 0.0 +inenc.2.msb_discard: 0.0 +inenc.2.protocol: Quadrature +inenc.2.rst_on_z: '0' +inenc.2.setp: 0 +inenc.2.val_capture: Min Max Mean +inenc.2.val_dataset: '' +inenc.2.val_offset: 0.0 +inenc.2.val_scale: 5.0e-06 +inenc.2.val_units: mm +inenc.3.bits: 0.0 +inenc.3.clk: ZERO +inenc.3.clk_delay: 0 +inenc.3.clk_period: 0.0 +inenc.3.clk_period_units: s +inenc.3.clk_src: Internally Generated +inenc.3.frame_period: 0.0 +inenc.3.frame_period_units: s +inenc.3.label: Input encoder +inenc.3.lsb_discard: 0.0 +inenc.3.msb_discard: 0.0 +inenc.3.protocol: Quadrature +inenc.3.rst_on_z: '0' +inenc.3.setp: 0 +inenc.3.val_capture: Min Max Mean +inenc.3.val_dataset: '' +inenc.3.val_offset: 0.0 +inenc.3.val_scale: 5.0e-06 +inenc.3.val_units: mm +inenc.4.bits: 0.0 +inenc.4.clk: ZERO +inenc.4.clk_delay: 0 +inenc.4.clk_period: 0.0 +inenc.4.clk_period_units: s +inenc.4.clk_src: Internally Generated +inenc.4.frame_period: 0.0 +inenc.4.frame_period_units: s +inenc.4.label: Input encoder +inenc.4.lsb_discard: 0.0 +inenc.4.msb_discard: 0.0 +inenc.4.protocol: Quadrature +inenc.4.rst_on_z: '0' +inenc.4.setp: 0 +inenc.4.val_capture: 'No' +inenc.4.val_dataset: '' +inenc.4.val_offset: 0.0 +inenc.4.val_scale: 1.0 +inenc.4.val_units: '' +lut.1.func: A|B +lut.1.inpa: ZERO +lut.1.inpa_delay: 0 +lut.1.inpb: ZERO +lut.1.inpb_delay: 0 +lut.1.inpc: ZERO +lut.1.inpc_delay: 0 +lut.1.inpd: ZERO +lut.1.inpd_delay: 0 +lut.1.inpe: ZERO +lut.1.inpe_delay: 0 +lut.1.label: ensure pgen triggers at beginning and each iteration +lut.1.typea: Input-Level +lut.1.typeb: Input-Level +lut.1.typec: Input-Level +lut.1.typed: Input-Level +lut.1.typee: Input-Level +lut.2.func: A | B +lut.2.inpa: ZERO +lut.2.inpa_delay: 0 +lut.2.inpb: ZERO +lut.2.inpb_delay: 0 +lut.2.inpc: ZERO +lut.2.inpc_delay: 0 +lut.2.inpd: ZERO +lut.2.inpd_delay: 0 +lut.2.inpe: ZERO +lut.2.inpe_delay: 0 +lut.2.label: OR 2 +lut.2.typea: Input-Level +lut.2.typeb: Input-Level +lut.2.typec: Input-Level +lut.2.typed: Input-Level +lut.2.typee: Input-Level +lut.3.func: '0x00000000' +lut.3.inpa: ZERO +lut.3.inpa_delay: 0 +lut.3.inpb: ZERO +lut.3.inpb_delay: 0 +lut.3.inpc: ZERO +lut.3.inpc_delay: 0 +lut.3.inpd: ZERO +lut.3.inpd_delay: 0 +lut.3.inpe: ZERO +lut.3.inpe_delay: 0 +lut.3.label: AND2 +lut.3.typea: Input-Level +lut.3.typeb: Input-Level +lut.3.typec: Input-Level +lut.3.typed: Input-Level +lut.3.typee: Input-Level +lut.4.func: A | B | C +lut.4.inpa: ZERO +lut.4.inpa_delay: 0 +lut.4.inpb: ZERO +lut.4.inpb_delay: 0 +lut.4.inpc: ZERO +lut.4.inpc_delay: 0 +lut.4.inpd: ZERO +lut.4.inpd_delay: 0 +lut.4.inpe: ZERO +lut.4.inpe_delay: 0 +lut.4.label: 'OR 1 ' +lut.4.typea: Input-Level +lut.4.typeb: Input-Level +lut.4.typec: Input-Level +lut.4.typed: Input-Level +lut.4.typee: Input-Level +lut.5.func: '0x00000000' +lut.5.inpa: ZERO +lut.5.inpa_delay: 0 +lut.5.inpb: ZERO +lut.5.inpb_delay: 0 +lut.5.inpc: ZERO +lut.5.inpc_delay: 0 +lut.5.inpd: ZERO +lut.5.inpd_delay: 0 +lut.5.inpe: ZERO +lut.5.inpe_delay: 0 +lut.5.label: Lookup table +lut.5.typea: Input-Level +lut.5.typeb: Input-Level +lut.5.typec: Input-Level +lut.5.typed: Input-Level +lut.5.typee: Input-Level +lut.6.func: '0x00000000' +lut.6.inpa: ZERO +lut.6.inpa_delay: 0 +lut.6.inpb: ZERO +lut.6.inpb_delay: 0 +lut.6.inpc: ZERO +lut.6.inpc_delay: 0 +lut.6.inpd: ZERO +lut.6.inpd_delay: 0 +lut.6.inpe: ZERO +lut.6.inpe_delay: 0 +lut.6.label: Lookup table +lut.6.typea: Input-Level +lut.6.typeb: Input-Level +lut.6.typec: Input-Level +lut.6.typed: Input-Level +lut.6.typee: Input-Level +lut.7.func: '0x00000000' +lut.7.inpa: ZERO +lut.7.inpa_delay: 0 +lut.7.inpb: ZERO +lut.7.inpb_delay: 0 +lut.7.inpc: ZERO +lut.7.inpc_delay: 0 +lut.7.inpd: ZERO +lut.7.inpd_delay: 0 +lut.7.inpe: ZERO +lut.7.inpe_delay: 0 +lut.7.label: Lookup table +lut.7.typea: Input-Level +lut.7.typeb: Input-Level +lut.7.typec: Input-Level +lut.7.typed: Input-Level +lut.7.typee: Input-Level +lut.8.func: '0x00000000' +lut.8.inpa: ZERO +lut.8.inpa_delay: 0 +lut.8.inpb: ZERO +lut.8.inpb_delay: 0 +lut.8.inpc: ZERO +lut.8.inpc_delay: 0 +lut.8.inpd: ZERO +lut.8.inpd_delay: 0 +lut.8.inpe: ZERO +lut.8.inpe_delay: 0 +lut.8.label: Lookup table +lut.8.typea: Input-Level +lut.8.typeb: Input-Level +lut.8.typec: Input-Level +lut.8.typed: Input-Level +lut.8.typee: Input-Level +lvdsin.1.label: LVDS input +lvdsin.2.label: LVDS input +lvdsout.1.label: LVDS output +lvdsout.1.val: ZERO +lvdsout.1.val_delay: 0 +lvdsout.2.label: LVDS output +lvdsout.2.val: ZERO +lvdsout.2.val_delay: 0 +outenc.1.a: ZERO +outenc.1.a_delay: 0 +outenc.1.b: ZERO +outenc.1.b_delay: 0 +outenc.1.bits: 0.0 +outenc.1.data: ZERO +outenc.1.data_delay: 0 +outenc.1.enable: ZERO +outenc.1.enable_delay: 0 +outenc.1.generator_error: 'No' +outenc.1.label: Output encoder +outenc.1.protocol: Quadrature +outenc.1.qperiod: 0.0 +outenc.1.qperiod_units: s +outenc.1.val: ZERO +outenc.1.z: ZERO +outenc.1.z_delay: 0 +outenc.2.a: ZERO +outenc.2.a_delay: 0 +outenc.2.b: ZERO +outenc.2.b_delay: 0 +outenc.2.bits: 0.0 +outenc.2.data: ZERO +outenc.2.data_delay: 0 +outenc.2.enable: ZERO +outenc.2.enable_delay: 0 +outenc.2.generator_error: 'No' +outenc.2.label: Output encoder +outenc.2.protocol: Quadrature +outenc.2.qperiod: 0.0 +outenc.2.qperiod_units: s +outenc.2.val: ZERO +outenc.2.z: ZERO +outenc.2.z_delay: 0 +outenc.3.a: ZERO +outenc.3.a_delay: 0 +outenc.3.b: ZERO +outenc.3.b_delay: 0 +outenc.3.bits: 0.0 +outenc.3.data: ZERO +outenc.3.data_delay: 0 +outenc.3.enable: ZERO +outenc.3.enable_delay: 0 +outenc.3.generator_error: 'No' +outenc.3.label: Output encoder +outenc.3.protocol: Quadrature +outenc.3.qperiod: 0.0 +outenc.3.qperiod_units: s +outenc.3.val: ZERO +outenc.3.z: ZERO +outenc.3.z_delay: 0 +outenc.4.a: ZERO +outenc.4.a_delay: 0 +outenc.4.b: ZERO +outenc.4.b_delay: 0 +outenc.4.bits: 0.0 +outenc.4.data: ZERO +outenc.4.data_delay: 0 +outenc.4.enable: ZERO +outenc.4.enable_delay: 0 +outenc.4.generator_error: 'No' +outenc.4.label: Output encoder +outenc.4.protocol: Quadrature +outenc.4.qperiod: 0.0 +outenc.4.qperiod_units: s +outenc.4.val: ZERO +outenc.4.z: ZERO +outenc.4.z_delay: 0 +pcap.arm: false +pcap.bits0_capture: 'No' +pcap.bits0_dataset: '' +pcap.bits1_capture: 'No' +pcap.bits1_dataset: '' +pcap.bits2_capture: 'No' +pcap.bits2_dataset: '' +pcap.bits3_capture: 'No' +pcap.bits3_dataset: '' +pcap.enable: ZERO +pcap.enable_delay: 0 +pcap.gate: PULSE1.OUT +pcap.gate_delay: 0 +pcap.label: Position capture control +pcap.samples_capture: 'No' +pcap.samples_dataset: '' +pcap.shift_sum: 0.0 +pcap.trig: PULSE1.OUT +pcap.trig_delay: 0 +pcap.trig_edge: Rising +pcap.ts_end_capture: 'No' +pcap.ts_end_dataset: '' +pcap.ts_start_capture: 'No' +pcap.ts_start_dataset: '' +pcap.ts_trig_capture: Value +pcap.ts_trig_dataset: '' +pcomp.1.dir: Positive +pcomp.1.enable: ZERO +pcomp.1.enable_delay: 0 +pcomp.1.inp: ZERO +pcomp.1.label: Position compare +pcomp.1.pre_start: 0 +pcomp.1.pulses: 0 +pcomp.1.relative: Absolute +pcomp.1.start: 0 +pcomp.1.step: 40 +pcomp.1.width: 30 +pcomp.2.dir: Either +pcomp.2.enable: ZERO +pcomp.2.enable_delay: 0 +pcomp.2.inp: ZERO +pcomp.2.label: Position compare +pcomp.2.pre_start: 0 +pcomp.2.pulses: 0 +pcomp.2.relative: Absolute +pcomp.2.start: 400 +pcomp.2.step: 0 +pcomp.2.width: 50 +pgen.1.enable: ZERO +pgen.1.enable_delay: 0 +pgen.1.label: Position generator +pgen.1.out_capture: 'No' +pgen.1.out_dataset: '' +pgen.1.out_offset: 0.0 +pgen.1.out_scale: 1.0 +pgen.1.out_units: '' +pgen.1.repeats: 0.0 +pgen.1.table: + position: [] +pgen.1.trig: ZERO +pgen.1.trig_delay: 0 +pgen.2.enable: ZERO +pgen.2.enable_delay: 0 +pgen.2.label: Position generator +pgen.2.out_capture: 'No' +pgen.2.out_dataset: '' +pgen.2.out_offset: 0.0 +pgen.2.out_scale: 1.0 +pgen.2.out_units: '' +pgen.2.repeats: 0.0 +pgen.2.table: + position: [] +pgen.2.trig: ZERO +pgen.2.trig_delay: 0 +pulse.1.delay: 0.0 +pulse.1.delay_units: s +pulse.1.enable: ZERO +pulse.1.enable_delay: 0 +pulse.1.label: Begin FGS on trig +pulse.1.pulses: 1.0 +pulse.1.step: 0.0 +pulse.1.step_units: s +pulse.1.trig: SEQ1.OUTA +pulse.1.trig_delay: 0 +pulse.1.trig_edge: Rising +pulse.1.width: 0.0001 +pulse.1.width_units: s +pulse.2.delay: 0.0 +pulse.2.delay_units: s +pulse.2.enable: ZERO +pulse.2.enable_delay: 0 +pulse.2.label: One-shot pulse delay and stretch +pulse.2.pulses: 0.0 +pulse.2.step: 0.0 +pulse.2.step_units: s +pulse.2.trig: ZERO +pulse.2.trig_delay: 0 +pulse.2.trig_edge: Rising +pulse.2.width: 0.0 +pulse.2.width_units: s +pulse.3.delay: 0.0 +pulse.3.delay_units: s +pulse.3.enable: ZERO +pulse.3.enable_delay: 0 +pulse.3.label: One-shot pulse delay and stretch +pulse.3.pulses: 0.0 +pulse.3.step: 0.0 +pulse.3.step_units: s +pulse.3.trig: ZERO +pulse.3.trig_delay: 0 +pulse.3.trig_edge: Rising +pulse.3.width: 0.0 +pulse.3.width_units: s +pulse.4.delay: 0.0 +pulse.4.delay_units: s +pulse.4.enable: ZERO +pulse.4.enable_delay: 0 +pulse.4.label: One-shot pulse delay and stretch +pulse.4.pulses: 0.0 +pulse.4.step: 0.0 +pulse.4.step_units: s +pulse.4.trig: ZERO +pulse.4.trig_delay: 0 +pulse.4.trig_edge: Rising +pulse.4.width: 0.0 +pulse.4.width_units: s +seq.1.bita: TTLIN1.VAL +seq.1.bita_delay: 0 +seq.1.bitb: ZERO +seq.1.bitb_delay: 0 +seq.1.bitc: ZERO +seq.1.bitc_delay: 0 +seq.1.enable: ZERO +seq.1.enable_delay: 0 +seq.1.label: Sequencer +seq.1.posa: INENC1.VAL +seq.1.posb: ZERO +seq.1.posc: ZERO +seq.1.prescale: 1.0 +seq.1.prescale_units: us +seq.1.repeats: 0 +seq.1.table: + outa1: [false, true, false, false, true, false] + outa2: [false, true, false, false, true, false] + outb1: [false, false, false, false, false, false] + outb2: [false, false, false, false, false, false] + outc1: [false, false, false, false, false, false] + outc2: [false, false, false, false, false, false] + outd1: [false, false, false, false, false, false] + outd2: [false, false, false, false, false, false] + oute1: [false, false, false, false, false, false] + oute2: [false, false, false, false, false, false] + outf1: [false, false, false, false, false, false] + outf2: [false, false, false, false, false, false] + position: [0, 68581, 186581, 0, 188579, 70579] + repeats: [1, 1, 1, 1, 1, 1] + time1: [0, 0, 0, 0, 0, 0] + time2: [1, 1, 1, 1, 1, 1] + trigger: + - BITA=1 + - POSA>=POSITION + - POSA>=POSITION + - BITA=1 + - POSA<=POSITION + - POSA<=POSITION +seq.2.bita: ZERO +seq.2.bita_delay: 0 +seq.2.bitb: ZERO +seq.2.bitb_delay: 0 +seq.2.bitc: ZERO +seq.2.bitc_delay: 0 +seq.2.enable: ZERO +seq.2.enable_delay: 0 +seq.2.label: PCOMP from table +seq.2.posa: ZERO +seq.2.posb: ZERO +seq.2.posc: ZERO +seq.2.prescale: 0.0 +seq.2.prescale_units: s +seq.2.repeats: 0 +seq.2.table: + outa1: [true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, false, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, true, true, true, + true, true, true, true, true, true, true, true, true, true, false] + outa2: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, true, false] + outb1: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outb2: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outc1: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outc2: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outd1: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outd2: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + oute1: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + oute2: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outf1: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + outf2: [false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false, false, false, false, false, false, false, + false, false, false] + position: [-1985, 2000, 6000, 10000, 14000, 18000, 22000, 26000, 30000, 34000, 38000, + 42000, 46000, 50000, 54000, 58000, 62000, 66000, 70000, 74000, 78000, 82000, 86000, + 90000, 94000, 98000, 102000, 106000, 110000, 114000, 117990, 117985, 114000, 110000, + 106000, 102000, 98000, 94000, 90000, 86000, 82000, 78000, 74000, 70000, 66000, + 62000, 58000, 54000, 50000, 46000, 42000, 38000, 34000, 30000, 26000, 22000, 18000, + 14000, 10000, 6000, 2000, -1990] + repeats: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + time1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + time2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + trigger: + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA>=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION + - POSA<=POSITION +sfp3_sync_in.label: sfp panda synchronizer +sfp3_sync_in.pos1_capture: 'No' +sfp3_sync_in.pos1_dataset: '' +sfp3_sync_in.pos1_offset: 0.0 +sfp3_sync_in.pos1_scale: 1.0 +sfp3_sync_in.pos1_units: '' +sfp3_sync_in.pos2_capture: 'No' +sfp3_sync_in.pos2_dataset: '' +sfp3_sync_in.pos2_offset: 0.0 +sfp3_sync_in.pos2_scale: 1.0 +sfp3_sync_in.pos2_units: '' +sfp3_sync_in.pos3_capture: 'No' +sfp3_sync_in.pos3_dataset: '' +sfp3_sync_in.pos3_offset: 0.0 +sfp3_sync_in.pos3_scale: 1.0 +sfp3_sync_in.pos3_units: '' +sfp3_sync_in.pos4_capture: 'No' +sfp3_sync_in.pos4_dataset: '' +sfp3_sync_in.pos4_offset: 0.0 +sfp3_sync_in.pos4_scale: 1.0 +sfp3_sync_in.pos4_units: '' +sfp3_sync_out.bit1: ZERO +sfp3_sync_out.bit10: ZERO +sfp3_sync_out.bit10_delay: 0 +sfp3_sync_out.bit11: ZERO +sfp3_sync_out.bit11_delay: 0 +sfp3_sync_out.bit12: ZERO +sfp3_sync_out.bit12_delay: 0 +sfp3_sync_out.bit13: ZERO +sfp3_sync_out.bit13_delay: 0 +sfp3_sync_out.bit14: ZERO +sfp3_sync_out.bit14_delay: 0 +sfp3_sync_out.bit15: ZERO +sfp3_sync_out.bit15_delay: 0 +sfp3_sync_out.bit16: ZERO +sfp3_sync_out.bit16_delay: 0 +sfp3_sync_out.bit1_delay: 0 +sfp3_sync_out.bit2: ZERO +sfp3_sync_out.bit2_delay: 0 +sfp3_sync_out.bit3: ZERO +sfp3_sync_out.bit3_delay: 0 +sfp3_sync_out.bit4: ZERO +sfp3_sync_out.bit4_delay: 0 +sfp3_sync_out.bit5: ZERO +sfp3_sync_out.bit5_delay: 0 +sfp3_sync_out.bit6: ZERO +sfp3_sync_out.bit6_delay: 0 +sfp3_sync_out.bit7: ZERO +sfp3_sync_out.bit7_delay: 0 +sfp3_sync_out.bit8: ZERO +sfp3_sync_out.bit8_delay: 0 +sfp3_sync_out.bit9: ZERO +sfp3_sync_out.bit9_delay: 0 +sfp3_sync_out.label: sfp panda synchronizer +sfp3_sync_out.pos1: ZERO +sfp3_sync_out.pos2: ZERO +sfp3_sync_out.pos3: ZERO +sfp3_sync_out.pos4: ZERO +srgate.1.enable: ZERO +srgate.1.enable_delay: 0 +srgate.1.label: Reset on new row +srgate.1.rst: ZERO +srgate.1.rst_delay: 0 +srgate.1.rst_edge: Rising +srgate.1.set: ZERO +srgate.1.set_delay: 0 +srgate.1.set_edge: Rising +srgate.1.when_disabled: Set output low +srgate.2.enable: ZERO +srgate.2.enable_delay: 0 +srgate.2.label: Set reset gate +srgate.2.rst: ZERO +srgate.2.rst_delay: 0 +srgate.2.rst_edge: Rising +srgate.2.set: ZERO +srgate.2.set_delay: 0 +srgate.2.set_edge: Rising +srgate.2.when_disabled: Set output low +srgate.3.enable: ZERO +srgate.3.enable_delay: 0 +srgate.3.label: Set reset gate +srgate.3.rst: ZERO +srgate.3.rst_delay: 0 +srgate.3.rst_edge: Rising +srgate.3.set: ZERO +srgate.3.set_delay: 0 +srgate.3.set_edge: Rising +srgate.3.when_disabled: Set output low +srgate.4.enable: ZERO +srgate.4.enable_delay: 0 +srgate.4.label: Set reset gate +srgate.4.rst: ZERO +srgate.4.rst_delay: 0 +srgate.4.rst_edge: Rising +srgate.4.set: ZERO +srgate.4.set_delay: 0 +srgate.4.set_edge: Rising +srgate.4.when_disabled: Set output low +system.ext_clock: int clock +system.label: System control FPGA +ttlin.1.label: TTL input +ttlin.1.term: High-Z +ttlin.2.label: TTL input +ttlin.2.term: High-Z +ttlin.3.label: TTL input +ttlin.3.term: High-Z +ttlin.4.label: TTL input +ttlin.4.term: High-Z +ttlin.5.label: TTL input +ttlin.5.term: High-Z +ttlin.6.label: TTL input +ttlin.6.term: High-Z +ttlout.1.label: TTL output +ttlout.1.val: PULSE1.OUT +ttlout.1.val_delay: 0 +ttlout.10.label: TTL output +ttlout.10.val: ZERO +ttlout.10.val_delay: 0 +ttlout.2.label: TTL output +ttlout.2.val: ZERO +ttlout.2.val_delay: 0 +ttlout.3.label: TTL output +ttlout.3.val: ZERO +ttlout.3.val_delay: 0 +ttlout.4.label: TTL output +ttlout.4.val: ZERO +ttlout.4.val_delay: 0 +ttlout.5.label: TTL output +ttlout.5.val: ZERO +ttlout.5.val_delay: 0 +ttlout.6.label: TTL output +ttlout.6.val: ZERO +ttlout.6.val_delay: 0 +ttlout.7.label: TTL output +ttlout.7.val: ZERO +ttlout.7.val_delay: 0 +ttlout.8.label: TTL output +ttlout.8.val: ZERO +ttlout.8.val_delay: 0 +ttlout.9.label: TTL output +ttlout.9.val: ZERO +ttlout.9.val_delay: 0 diff --git a/tests/system_tests/hyperion/test_aperturescatterguard_system.py b/tests/system_tests/hyperion/test_aperturescatterguard_system.py index c05a82ce8..3205b66ba 100644 --- a/tests/system_tests/hyperion/test_aperturescatterguard_system.py +++ b/tests/system_tests/hyperion/test_aperturescatterguard_system.py @@ -8,7 +8,7 @@ ApertureScatterguard, load_positions_from_beamline_parameters, ) -from ophyd_async.core import DeviceCollector +from ophyd_async.core import init_devices from mx_bluesky.hyperion.experiment_plans.change_aperture_then_move_plan import ( set_aperture_for_bbox_mm, @@ -18,7 +18,7 @@ @pytest.fixture def ap_sg(): params = GDABeamlineParameters.from_file(BEAMLINE_PARAMETER_PATHS["i03"]) - with DeviceCollector(): + with init_devices(): ap_sg = ApertureScatterguard( prefix="BL03S", name="ap_sg", diff --git a/tests/unit_tests/beamlines/i04/test_thawing.py b/tests/unit_tests/beamlines/i04/test_thawing.py index 9a3d83176..29023001f 100644 --- a/tests/unit_tests/beamlines/i04/test_thawing.py +++ b/tests/unit_tests/beamlines/i04/test_thawing.py @@ -15,7 +15,7 @@ from ophyd.sim import NullStatus from ophyd_async.core import ( AsyncStatus, - DeviceCollector, + init_devices, ) from ophyd_async.epics.motor import Motor from ophyd_async.testing import ( @@ -49,7 +49,7 @@ def patch_motor(motor: Motor, initial_position: float = 0): @pytest.fixture async def oav(RE: RunEngine) -> OAV: oav_config = OAVConfig(ZOOM_LEVELS_XML, DISPLAY_CONFIGURATION) - async with DeviceCollector(mock=True, connect=True): + async with init_devices(mock=True, connect=True): oav = OAV("", config=oav_config, name="fake_oav") zoom_levels_list = ["1.0x", "2.0x", "5.0x"] oav.zoom_controller._get_allowed_zoom_levels = AsyncMock( @@ -79,7 +79,7 @@ def thawer(RE: RunEngine) -> Thawer: @pytest.fixture async def oav_forwarder(RE: RunEngine) -> OAVToRedisForwarder: - with DeviceCollector(mock=True): + with init_devices(mock=True): oav_forwarder = OAVToRedisForwarder( "prefix", "host", "password", name="oav_to_redis_forwarder" ) diff --git a/tests/unit_tests/common/device_setup_plans/test_setup_panda.py b/tests/unit_tests/common/device_setup_plans/test_setup_panda.py new file mode 100644 index 000000000..8322b9b65 --- /dev/null +++ b/tests/unit_tests/common/device_setup_plans/test_setup_panda.py @@ -0,0 +1,42 @@ +from unittest.mock import MagicMock, patch + +from bluesky.plan_stubs import null +from bluesky.run_engine import RunEngine +from ophyd_async.fastcs.panda import HDFPanda + +from mx_bluesky.common.device_setup_plans.setup_panda import load_panda_from_yaml + + +def get_test_plan(*args): + yield from null() + return "retrieved_settings" + + +@patch("mx_bluesky.common.device_setup_plans.setup_panda.YamlSettingsProvider") +@patch("mx_bluesky.common.device_setup_plans.setup_panda.retrieve_settings") +@patch("mx_bluesky.common.device_setup_plans.setup_panda.apply_panda_settings") +def test_load_panda_from_yaml( + mock_apply_panda_settings: MagicMock, + mock_retrieve_settings: MagicMock, + mock_settings_provider: MagicMock, + panda: HDFPanda, + tmpdir, + RE: RunEngine, +): + test_file = "test" + mock_settings_provider.return_value = (mock_settings_return := MagicMock()) + mock_retrieve_settings.side_effect = get_test_plan + + RE( + load_panda_from_yaml( + tmpdir, + test_file, + panda, + ) + ) + + mock_settings_provider.assert_called_once_with(tmpdir) + mock_retrieve_settings.assert_called_once_with( + mock_settings_return, test_file, panda + ) + mock_apply_panda_settings.assert_called_once_with("retrieved_settings") diff --git a/tests/unit_tests/common/plan_stubs/test_do_fgs.py b/tests/unit_tests/common/plan_stubs/test_do_fgs.py index eb23c66bd..10c1b2a20 100644 --- a/tests/unit_tests/common/plan_stubs/test_do_fgs.py +++ b/tests/unit_tests/common/plan_stubs/test_do_fgs.py @@ -13,7 +13,7 @@ ZOCALO_STAGE_GROUP, ) from event_model.documents import Event, RunStart -from ophyd_async.core import DeviceCollector +from ophyd_async.core import init_devices from ophyd_async.testing import set_mock_value from mx_bluesky.common.parameters.constants import ( @@ -24,7 +24,7 @@ @pytest.fixture def fgs_devices(RE): - with DeviceCollector(mock=True): + with init_devices(mock=True): synchrotron = Synchrotron() grid_scan_device = ZebraFastGridScan("zebra_fgs") diff --git a/tests/unit_tests/hyperion/device_setup_plans/test_setup_panda.py b/tests/unit_tests/hyperion/device_setup_plans/test_setup_panda.py index 34a4886ed..7e98786d2 100644 --- a/tests/unit_tests/hyperion/device_setup_plans/test_setup_panda.py +++ b/tests/unit_tests/hyperion/device_setup_plans/test_setup_panda.py @@ -28,8 +28,6 @@ def run_simulating_setup_panda_functions( plan: str, panda: HDFPanda, smargon: Smargon, - sim_run_engine: RunEngineSimulator, - mock_load_device=MagicMock, ): num_of_sets = 0 num_of_waits = 0 @@ -45,32 +43,32 @@ def count_commands(msg): sim = RunEngineSimulator() sim.add_handler(["set", "wait"], count_commands) - if plan == "setup": - smargon_speed = get_smargon_speed(0.1, 1) - sim.simulate_plan( - setup_panda_for_flyscan( - panda, - PandAGridScanParams(transmission_fraction=0.01), - smargon, - 0.1, - 100.1, - smargon_speed, + with patch( + "mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml" + ) as mock_load_panda: + if plan == "setup": + smargon_speed = get_smargon_speed(0.1, 1) + sim.simulate_plan( + setup_panda_for_flyscan( + panda, + PandAGridScanParams(transmission_fraction=0.01), + smargon, + 0.1, + 100.1, + smargon_speed, + ) ) - ) - elif plan == "disarm": - sim.simulate_plan(disarm_panda_for_gridscan(panda)) + mock_load_panda.assert_called_once() + elif plan == "disarm": + sim.simulate_plan(disarm_panda_for_gridscan(panda)) return num_of_sets, num_of_waits -@patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_device") -def test_setup_panda_performs_correct_plans( - mock_load_device, sim_run_engine, panda, smargon -): +def test_setup_panda_performs_correct_plans(sim_run_engine, panda, smargon): num_of_sets, num_of_waits = run_simulating_setup_panda_functions( - "setup", panda, smargon, sim_run_engine, mock_load_device + "setup", panda, smargon ) - mock_load_device.assert_called_once() assert num_of_sets == 10 assert num_of_waits == 5 @@ -84,7 +82,9 @@ def test_setup_panda_performs_correct_plans( (10, 2, -0.5, 3, 101, 0.1), ], ) +@patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_setup_panda_correctly_configures_table( + mock_load_panda, x_steps: int, x_step_size: float, x_start: float, @@ -209,7 +209,9 @@ def assert_set_table_has_been_waited_on(*args, **kwargs): "mx_bluesky.hyperion.device_setup_plans.setup_panda.bps.wait", MagicMock(side_effect=handle_wait), ), - patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_device"), + patch( + "mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml" + ), patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.bps.abs_set"), ): RE( @@ -230,7 +232,7 @@ def assert_set_table_has_been_waited_on(*args, **kwargs): # all the blocks which were enabled on setup are also disabled on tidyup def test_disarm_panda_disables_correct_blocks(sim_run_engine, panda, smargon): num_of_sets, num_of_waits = run_simulating_setup_panda_functions( - "disarm", panda, sim_run_engine, smargon + "disarm", panda, smargon ) assert num_of_sets == 5 assert num_of_waits == 1 diff --git a/tests/unit_tests/hyperion/experiment_plans/test_flyscan_xray_centre_plan.py b/tests/unit_tests/hyperion/experiment_plans/test_flyscan_xray_centre_plan.py index b544cd786..bbe6de62d 100644 --- a/tests/unit_tests/hyperion/experiment_plans/test_flyscan_xray_centre_plan.py +++ b/tests/unit_tests/hyperion/experiment_plans/test_flyscan_xray_centre_plan.py @@ -42,6 +42,7 @@ from mx_bluesky.common.external_interaction.ispyb.ispyb_store import ( IspybIds, ) +from mx_bluesky.common.parameters.constants import DeviceSettingsConstants from mx_bluesky.common.utils.exceptions import WarningException from mx_bluesky.common.utils.log import ISPYB_ZOCALO_CALLBACK_LOGGER from mx_bluesky.hyperion.device_setup_plans.read_hardware_for_setup import ( @@ -333,8 +334,10 @@ def test_read_hardware_for_ispyb_updates_from_ophyd_devices( "mx_bluesky.hyperion.experiment_plans.flyscan_xray_centre_plan.run_gridscan", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") async def test_results_adjusted_and_event_raised( self, + mock_panda_load: MagicMock, run_gridscan: MagicMock, fgs_composite_with_panda_pcap: FlyScanXRayCentreComposite, test_fgs_params_panda_zebra: HyperionSpecifiedThreeDGridScan, @@ -473,8 +476,10 @@ def test_results_passed_to_move_motors( "mx_bluesky.common.external_interaction.callbacks.common.zocalo_callback.ZocaloTrigger", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_individual_plans_triggered_once_and_only_once_in_composite_run( self, + mock_panda_load: MagicMock, mock_zocalo_trigger: MagicMock, move_xyz: MagicMock, run_gridscan: MagicMock, @@ -506,8 +511,10 @@ def wrapped_gridscan_and_move(): "mx_bluesky.hyperion.experiment_plans.change_aperture_then_move_plan.move_x_y_z", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") async def test_when_gridscan_finished_then_dev_shm_disabled( self, + mock_load_panda: MagicMock, move_xyz: MagicMock, run_gridscan: MagicMock, aperture_set: MagicMock, @@ -548,8 +555,10 @@ def wrapped_gridscan_and_move(): "mx_bluesky.hyperion.experiment_plans.change_aperture_then_move_plan.move_x_y_z", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_when_gridscan_succeeds_ispyb_comment_appended_to( self, + mock_load_panda: MagicMock, move_xyz: MagicMock, run_gridscan: MagicMock, aperture_set: MagicMock, @@ -629,8 +638,10 @@ def test_plan(): "mx_bluesky.hyperion.experiment_plans.change_aperture_then_move_plan.move_x_y_z", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_when_gridscan_finds_no_xtal_ispyb_comment_appended_to( self, + mock_load_panda: MagicMock, move_xyz: MagicMock, run_gridscan: MagicMock, RE_with_subs: ReWithSubs, @@ -671,8 +682,10 @@ def wrapped_gridscan_and_move(): "mx_bluesky.hyperion.experiment_plans.change_aperture_then_move_plan.move_x_y_z", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_when_gridscan_finds_no_xtal_exception_is_raised( self, + mock_load_panda: MagicMock, move_xyz: MagicMock, run_gridscan: MagicMock, RE_with_subs: ReWithSubs, @@ -822,8 +835,10 @@ def test_when_grid_scan_ran_then_eiger_disarmed_before_zocalo_end( "mx_bluesky.hyperion.experiment_plans.flyscan_xray_centre_plan.run_gridscan", new=MagicMock(side_effect=_custom_msg("do_gridscan")), ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_flyscan_xray_centre_sets_directory_stages_arms_disarms_unstages_the_panda( self, + mock_load_panda: MagicMock, mock_set_panda_directory: MagicMock, done_status: Status, fgs_composite_with_panda_pcap: FlyScanXRayCentreComposite, @@ -847,6 +862,11 @@ def test_flyscan_xray_centre_sets_directory_stages_arms_disarms_unstages_the_pan mock_set_panda_directory.assert_called_with( Path("/tmp/dls/i03/data/2024/cm31105-4/xraycentring/123456") ) + mock_load_panda.assert_called_once_with( + DeviceSettingsConstants.PANDA_FLYSCAN_SETTINGS_DIR, + DeviceSettingsConstants.PANDA_FLYSCAN_SETTINGS_FILENAME, + fgs_composite_with_panda_pcap.panda, + ) msgs = assert_message_and_return_remaining( msgs, lambda msg: msg.command == "set_panda_directory" @@ -920,8 +940,10 @@ def test_fgs_arms_eiger_without_grid_detect( "mx_bluesky.common.plans.do_fgs.check_topup_and_wait_if_necessary", autospec=True, ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_when_grid_scan_fails_with_exception_then_detector_disarmed_and_correct_exception_returned( self, + mock_load_panda, mock_topup, mock_complete, mock_wait, @@ -1098,8 +1120,10 @@ def test_if_smargon_speed_over_limit_then_log_error( "mx_bluesky.hyperion.experiment_plans.flyscan_xray_centre_plan.kickoff_and_complete_gridscan", MagicMock(), ) + @patch("mx_bluesky.hyperion.device_setup_plans.setup_panda.load_panda_from_yaml") def test_run_gridscan_and_fetch_results_discards_results_below_threshold( self, + mock_load_panda: MagicMock, fake_fgs_composite: FlyScanXRayCentreComposite, test_fgs_params_panda_zebra: HyperionSpecifiedThreeDGridScan, feature_controlled: _FeatureControlled,