From 17f09228b4429e9af47babd186bd41df92bfcb8d Mon Sep 17 00:00:00 2001 From: gac-x07da Date: Tue, 13 Aug 2024 15:44:53 +0200 Subject: [PATCH] refactor: add first template for step scanning --- ophyd_devices/configs/pollux_db.yaml | 30 + ophyd_devices/devices/panda_box.py | 166 +++- .../panda_cfg_inenc_trigger.ini} | 26 +- ..._cfg_inenc_trigger_with_clock_sampling.ini | 858 ++++++++++++++++++ .../panda_cfg_software_trigger.ini} | 22 +- .../panda_cfg_software_trigger_step_scan.ini | 858 ++++++++++++++++++ ..._trigger_step_scan_with_clock_sampling.ini | 858 ++++++++++++++++++ ...g_software_trigger_with_clock_sampling.ini | 858 ++++++++++++++++++ .../devices/parse_block_info_from_panda.py | 1 - 9 files changed, 3619 insertions(+), 58 deletions(-) create mode 100644 ophyd_devices/configs/pollux_db.yaml rename ophyd_devices/devices/{panda_config_time_based_grid.ini => panda_box/panda_cfg_inenc_trigger.ini} (98%) create mode 100644 ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger_with_clock_sampling.ini rename ophyd_devices/devices/{panda_config_software_flyscan.ini => panda_box/panda_cfg_software_trigger.ini} (98%) create mode 100644 ophyd_devices/devices/panda_box/panda_cfg_software_trigger_step_scan.ini create mode 100644 ophyd_devices/devices/panda_box/panda_cfg_software_trigger_step_scan_with_clock_sampling.ini create mode 100644 ophyd_devices/devices/panda_box/panda_cfg_software_trigger_with_clock_sampling.ini diff --git a/ophyd_devices/configs/pollux_db.yaml b/ophyd_devices/configs/pollux_db.yaml new file mode 100644 index 0000000..42e8795 --- /dev/null +++ b/ophyd_devices/configs/pollux_db.yaml @@ -0,0 +1,30 @@ +mono_roy: + description: 'This is an example of an EpicsMotor device' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07DA-OP-MO1:ROY' + onFailure: buffer + enabled: true + readoutPriority: monitored + readOnly: false + softwareTrigger: false +slit_sh2: + description: 'This is an example of an EpicsMotor device' + deviceClass: ophyd.EpicsMotor + deviceConfig: + prefix: 'X07DA-OP-SH2:TR1' + onFailure: buffer + enabled: true + readoutPriority: monitored + readOnly: false + softwareTrigger: false +panda_box: + description: 'PandaBox implementation' + deviceClass: ophyd_devices.devices.panda_box.PandaController + deviceConfig: + socket_host: x02da-panda-2.psi.ch + onFailure: buffer + enabled: true + readoutPriority: async + readOnly: false + softwareTrigger: true \ No newline at end of file diff --git a/ophyd_devices/devices/panda_box.py b/ophyd_devices/devices/panda_box.py index f43f784..999ee8a 100644 --- a/ophyd_devices/devices/panda_box.py +++ b/ophyd_devices/devices/panda_box.py @@ -5,27 +5,41 @@ from pandablocks.responses import ReadyData, EndData, FrameData from pandablocks.commands import GetState, SetState, Arm, Disarm, Raw import os import threading +import time from ophyd import Device, DeviceStatus, Component, Kind from ophyd_devices.sim.sim_signals import SetableSignal from ophyd_devices.utils.bec_scaninfo_mixin import BecScaninfoMixin from ophyd_devices.utils import bec_utils from bec_lib.messages import DeviceMessage from bec_lib.endpoints import MessageEndpoints +from bec_lib.logger import bec_logger import numpy as np from collections import defaultdict +logger = bec_logger.logger + class PandaControllerError(ControllerError): pass +PANDA_CONFIGS = { + "step" : "/data/test/x07da-test-bec/bec_deployment/ophyd_devices/ophyd_devices/devices/panda_box/panda_cfg_software_trigger_step_scan.ini", + "step_with_clock" : "/data/test/x07da-test-bec/bec_deployment/ophyd_devices/ophyd_devices/devices/panda_box/panda_cfg_software_trigger_step_scan_with_clock_sampling.ini", + "fly" : "ophyd_devices/ophyd_devices/devices/panda_box/panda_cfg_software_trigger.ini", + "fly_with_clock" : "ophyd_devices/ophyd_devices/devices/panda_box/panda_cfg_software_trigger_with_clock_sampling.ini" + } class PandaController(Device): + USER_ACCESS = ["_panda_cfg_files", "load_state_from_disk", "_get_capture_signal_keys"] + capture_signal_names = Component(SetableSignal, value=[""], kind=Kind.normal) config_path = Component(SetableSignal, value="", kind=Kind.normal) SUB_VALUE = "" + + def __init__(self, *, name, socket_host, kind=None, read_attrs=None, configuration_attrs=None, parent=None, device_manager=None,**kwargs): super().__init__(name=name, kind=kind, read_attrs=read_attrs, configuration_attrs=configuration_attrs, parent=parent, **kwargs) self.connector = None @@ -34,6 +48,8 @@ class PandaController(Device): self.kickoff_thread = None self.started_event = None self.end_event = None + self._panda_cfg_files = PANDA_CONFIGS + self._panda_config = None self.socket_host = socket_host if device_manager: self._update_service_config() @@ -44,8 +60,25 @@ class PandaController(Device): self.service_cfg = {"base_path": os.path.abspath(base_path)} self.connector = self.device_manager.connector - self.data_bucket = [] self._stream_ttl = 1800 + self._update_scaninfo() + + def describe(self) -> dict: + ret = super().describe() + # ret.update({"INENC2.VAL.Value" : {}}) + ret.update((f"{key}.Value", {"source" : f"SIM:{key}", + "dtype" : "float", + "shape" : [], + "precision" : 3}) for key in self._get_capture_signal_keys() if key.strip(".")) + return ret + + def _update_service_config(self): + from bec_lib.bec_service import SERVICE_CONFIG + + if SERVICE_CONFIG: + self.service_cfg = SERVICE_CONFIG.config["service_config"]["file_writer"] + return + self.service_cfg = {"base_path": os.path.abspath(".")} def _update_scaninfo(self) -> None: """Update scaninfo from BecScaninfoMixing @@ -56,37 +89,46 @@ class PandaController(Device): def _get_capture_signal_keys(self) -> list[str]: ret = self.send_command(Raw("*CAPTURE?")) - return [key.split(" ")[0].strip("!") for key in ret if key.strip(".")] + ret = [key.split(" ")[0].strip("!") for key in ret if key.strip(".")] + self.capture_signal_names.set(ret) + return ret def write_state_to_disk(self, filename:str): state = "\n".join(self.get_state_panda()) - with open(filename, "w") as f: + with open(filename, "w", encoding="utf-8") as f: f.write(state) def get_state_panda(self) -> list[str]: with BlockingClient(self.socket_host) as client: out = client.send(GetState()) return out - - def load_state_from_disk(self, filename:str): + + def read_state_from_disk(self, filename:str) -> list[str]: if not os.path.exists(filename): raise PandaControllerError(f"Could not find state file {filename}.") - with open(filename, "r") as f: + with open(filename, "r", encoding="utf-8") as f: input_data = f.read().splitlines() + return input_data + + + def load_state_from_disk(self, filename:str): + input_data = self.read_state_from_disk(filename) with BlockingClient(self.socket_host) as client: client.send(SetState(input_data)) def _send_data_to_bec(self, data:np.array) -> None: - out = defaultdict(list) + out = defaultdict(lambda : defaultdict(list)) keys = data.dtype.names for entry in data: for i, key in enumerate(keys): - out[key].append(entry[i]) - msg = DeviceMessage(signals=out, metadata={})#TODO add here scan_msg metadata + done flag + out[key]["value"].append(entry[i]) + #TODO add here reduction option for higher sampling frequencies + # my_func -> out + msg = DeviceMessage(signals=out, metadata={"async_update" :"extend"})#TODO add here scan_msg metadata + done flag self.connector.xadd( topic=MessageEndpoints.device_async_readback(scan_id=self.scaninfo.scan_id, device=self.name), - msg={"data" : msg}, - expire=self._stream_ttl + msg_dict={"data" : msg}, + expire=self._stream_ttl, ) @@ -95,17 +137,17 @@ class PandaController(Device): try: for data in client.data(scaled=False): if isinstance(data, ReadyData): - # print(f"received ready data: {data}") + logger.debug(f"Device {self.name} received ready data {data}") self.started_event.set() continue if isinstance(data, FrameData): - # print(f"received frame data: {data}") - self.data_bucket.append(data) + logger.debug(f"Device {self.name} received frame data") + self._send_data_to_bec(data.data) continue if isinstance(data, EndData): - print(f"received end data {data}") + logger.info(f"Device {self.name} received end data {data}") self.end_event.set() break finally: @@ -118,11 +160,58 @@ class PandaController(Device): self.data_thread.start() def stage(self) -> list[object]: - self.capture_signal_names.set(self._get_capture_signal_keys()) + self.scaninfo.load_scan_metadata() + self.on_stage() + # Load capture signals + self._get_capture_signal_keys() self.run() - return super().stage() + # Arm PCAP after starting data capture + ret = super().stage() + if not self.scaninfo.scan_type == "step": + return ret + status = self.kickoff() + timeout = 2 + timer = 0 + while not status.done: + logger.info(f"Device {self.name} is kicked off, waiting for status to be done.") + time.sleep(0.1) + timer += 0.1 + if timer > timeout: + raise PandaControllerError(f"Failed to kickoff device {self.name} during stage.") + return ret + + def trigger(self) -> DeviceStatus: + #TODO make this a threaded call, + status = DeviceStatus(self) + self.on_trigger() + status.set_finished() + return status + + def on_trigger(self): + self.send_command(Raw("BITS.B=1")) + self.send_command(Raw("BITS.B=0")) + + def on_stage(self): + commands = [] + if self.scaninfo.scan_type == "step": + self.load_state_from_disk(self._panda_cfg_files["step"]) + #TODO Check how to bundle commands in a single chain; check documentation + commands.extend(["BITS.B=0", "BITS.A=1"]) + commands.extend(["INENC2.VAL.CAPTURE=Value", + "PCAP.BITS1.CAPTURE=No", + "PCAP.BITS2.CAPTURE=No", + "COUNTER1.OUT.CAPTURE=No"]) + elif self.scaninfo.scan_type == "fly": + self.load_state_from_disk(self._panda_cfg_files["fly"]) + commands.extend(["PULSE1.PULSES=1", + "PULSE1.WIDTH.UNITS=s" + f"PULSE1.WIDTH={self.scaninfo.exp_time}", + f"PULSE1.STEP={self.scaninfo.frames_per_trigger}", + ]) + if len(commands)>0: + ret = [self.send_command(Raw(cmd)) for cmd in commands] - def send_command(self, command): + def send_command(self, command: str): with BlockingClient(self.socket_host) as client: out = client.send(command) return out @@ -166,22 +255,33 @@ class PandaController(Device): if __name__ == "__main__": import time - controller = PandaController(name="redpanda", socket_host="x02da-panda-2.psi.ch") - # controller.write_state_to_disk("panda_config_time_.ini") - # controller.load_state_from_disk("test_config.ini") - start_time = time.time() - controller.stage() - print(f"\n Time after stage: {time.time()- start_time}\n") - controller.kickoff().wait() - print(f"\nTime after kickoff {time.time()- start_time}\n") - time.sleep(2) - print(f"\nTime after sleep {time.time()- start_time}\n") - controller.unstage() - print(f"\nTime after unstage {time.time()- start_time}\n") + from bec_lib.client import BECClient + bec = BECClient() + bec.start() + dm = bec.device_manager + controller = PandaController(name="redpanda", socket_host="x02da-panda-2.psi.ch", device_manager=dm) + controller.on_stage() + # Load capture signals + controller.capture_signal_names.set(controller._get_capture_signal_keys()) + print(controller.describe()) + # controller.write_state_to_disk("ophyd_devices/ophyd_devices/devices/panda_box/panda_cfg_software_trigger_step_scan_with_clock_sampling.ini") +# fname = PANDA_CONFIGS["step"] +# controller.load_state_from_disk(fname) +# controller.on_stage() +# start_time = time.time() +# controller.scaninfo.scan_id = "1111" +# controller.stage() +# print(f"\n Time after stage: {time.time()- start_time}\n") +# controller.kickoff().wait() +# print(f"\nTime after kickoff {time.time()- start_time}\n") +# time.sleep(2) +# print(f"\nTime after sleep {time.time()- start_time}\n") +# controller.unstage() +# print(f"\nTime after unstage {time.time()- start_time}\n") - print("-----------") - print(len(controller.data_bucket)) - print(sum([len(data.data)for data in controller.data_bucket])) + # print("-----------") + # print(len(controller.data_bucket)) + # print(sum([len(data.data)for data in controller.data_bucket])) # try: diff --git a/ophyd_devices/devices/panda_config_time_based_grid.ini b/ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger.ini similarity index 98% rename from ophyd_devices/devices/panda_config_time_based_grid.ini rename to ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger.ini index 52ac400..0a7f395 100644 --- a/ophyd_devices/devices/panda_config_time_based_grid.ini +++ b/ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger.ini @@ -43,7 +43,7 @@ PCAP.BITS0.CAPTURE=No PCAP.BITS3.CAPTURE=No PCAP.BITS1.CAPTURE=Value PCAP.GATE_DURATION.CAPTURE=No -PCAP.TS_TRIG.CAPTURE=No +PCAP.TS_TRIG.CAPTURE=Value PCAP.TRIG.DELAY=0 SFP3_SYNC_IN.POS3.UNITS= SFP3_SYNC_IN.POS3.OFFSET=0 @@ -81,7 +81,7 @@ INENC1.VAL.SCALE=1 INENC2.VAL.SCALE=1 INENC3.VAL.SCALE=1 INENC4.VAL.SCALE=1 -INENC1.VAL.CAPTURE=Value +INENC1.VAL.CAPTURE=No INENC2.VAL.CAPTURE=Value INENC3.VAL.CAPTURE=No INENC4.VAL.CAPTURE=No @@ -204,7 +204,7 @@ COUNTER6.OUT.SCALE=1 COUNTER7.OUT.SCALE=1 COUNTER8.OUT.SCALE=1 COUNTER1.OUT.CAPTURE=Value -COUNTER2.OUT.CAPTURE=Value +COUNTER2.OUT.CAPTURE=No COUNTER3.OUT.CAPTURE=No COUNTER4.OUT.CAPTURE=No COUNTER5.OUT.CAPTURE=No @@ -239,7 +239,7 @@ PULSE1.ENABLE.DELAY=0 PULSE2.ENABLE.DELAY=0 PULSE3.ENABLE.DELAY=0 PULSE4.ENABLE.DELAY=0 -PULSE1.DELAY.UNITS=s +PULSE1.DELAY.UNITS=ms PULSE2.DELAY.UNITS=s PULSE3.DELAY.UNITS=s PULSE4.DELAY.UNITS=s @@ -373,7 +373,7 @@ PCOMP1.START=20 PCOMP2.START=0 PCOMP1.WIDTH=1 PCOMP2.WIDTH=0 -PCOMP1.INP=INENC1.VAL +PCOMP1.INP=INENC2.VAL PCOMP2.INP=ZERO PCOMP1.RELATIVE=Absolute PCOMP2.RELATIVE=Absolute @@ -409,7 +409,7 @@ TTLOUT7.VAL=ZERO TTLOUT8.VAL=ZERO TTLOUT9.VAL=ZERO TTLOUT10.VAL=ZERO -PCAP.GATE=ZERO +PCAP.GATE=PULSE1.OUT PCAP.ENABLE=BITS.OUTA PCAP.SHIFT_SUM=0 PCAP.TRIG_EDGE=Rising @@ -426,7 +426,7 @@ INENC1.ENCODING=Unsigned Binary INENC2.ENCODING=Unsigned Binary INENC3.ENCODING=Unsigned Binary INENC4.ENCODING=Unsigned Binary -INENC1.CLK=BITS.OUTA +INENC1.CLK=ZERO INENC2.CLK=ZERO INENC3.CLK=ZERO INENC4.CLK=ZERO @@ -443,7 +443,7 @@ INENC2.CLK_SRC=Internally Generated INENC3.CLK_SRC=Internally Generated INENC4.CLK_SRC=Internally Generated INENC1.PROTOCOL=ZMI -INENC2.PROTOCOL=ZMI +INENC2.PROTOCOL=Quadrature INENC3.PROTOCOL=Quadrature INENC4.PROTOCOL=Quadrature INENC1.RST_ON_Z=0 @@ -569,7 +569,7 @@ LUT5.INPE=ZERO LUT6.INPE=ZERO LUT7.INPE=ZERO LUT8.INPE=ZERO -LUT1.FUNC=0xffffff00 +LUT1.FUNC=(A&B)|(C|D) LUT2.FUNC=0x00000000 LUT3.FUNC=0x00000000 LUT4.FUNC=0x00000000 @@ -643,7 +643,7 @@ LVDSOUT1.VAL=ZERO LVDSOUT2.VAL=ZERO CLOCK1.ENABLE=ZERO CLOCK2.ENABLE=ZERO -CLOCK1.PERIOD=1 +CLOCK1.PERIOD=100 CLOCK2.PERIOD=50 CLOCK1.WIDTH=0.504 CLOCK2.WIDTH=5 @@ -703,7 +703,7 @@ COUNTER5.MIN=0 COUNTER6.MIN=0 COUNTER7.MIN=0 COUNTER8.MIN=0 -COUNTER1.MAX=200 +COUNTER1.MAX=1000 COUNTER2.MAX=0 COUNTER3.MAX=0 COUNTER4.MAX=0 @@ -719,7 +719,7 @@ COUNTER5.START=0 COUNTER6.START=0 COUNTER7.START=0 COUNTER8.START=0 -PULSE1.PULSES=1 +PULSE1.PULSES=50 PULSE2.PULSES=10 PULSE3.PULSES=0 PULSE4.PULSES=0 @@ -743,7 +743,7 @@ PULSE1.WIDTH=99 PULSE2.WIDTH=10 PULSE3.WIDTH=0.3 PULSE4.WIDTH=0.1 -PULSE1.STEP=100 +PULSE1.STEP=10 PULSE2.STEP=20 PULSE3.STEP=0 PULSE4.STEP=0 diff --git a/ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger_with_clock_sampling.ini b/ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger_with_clock_sampling.ini new file mode 100644 index 0000000..c460dd8 --- /dev/null +++ b/ophyd_devices/devices/panda_box/panda_cfg_inenc_trigger_with_clock_sampling.ini @@ -0,0 +1,858 @@ +OUTENC1.DATA.DELAY=0 +OUTENC2.DATA.DELAY=0 +OUTENC3.DATA.DELAY=0 +OUTENC4.DATA.DELAY=0 +OUTENC1.A.DELAY=0 +OUTENC2.A.DELAY=0 +OUTENC3.A.DELAY=0 +OUTENC4.A.DELAY=0 +OUTENC1.QPERIOD.UNITS=s +OUTENC2.QPERIOD.UNITS=s +OUTENC3.QPERIOD.UNITS=s +OUTENC4.QPERIOD.UNITS=s +OUTENC1.Z.DELAY=0 +OUTENC2.Z.DELAY=0 +OUTENC3.Z.DELAY=0 +OUTENC4.Z.DELAY=0 +OUTENC1.B.DELAY=0 +OUTENC2.B.DELAY=0 +OUTENC3.B.DELAY=0 +OUTENC4.B.DELAY=0 +OUTENC1.ENABLE.DELAY=0 +OUTENC2.ENABLE.DELAY=0 +OUTENC3.ENABLE.DELAY=0 +OUTENC4.ENABLE.DELAY=0 +PCOMP1.ENABLE.DELAY=0 +PCOMP2.ENABLE.DELAY=0 +TTLOUT1.VAL.DELAY=0 +TTLOUT2.VAL.DELAY=0 +TTLOUT3.VAL.DELAY=0 +TTLOUT4.VAL.DELAY=0 +TTLOUT5.VAL.DELAY=0 +TTLOUT6.VAL.DELAY=0 +TTLOUT7.VAL.DELAY=0 +TTLOUT8.VAL.DELAY=0 +TTLOUT9.VAL.DELAY=0 +TTLOUT10.VAL.DELAY=0 +PCAP.TS_END.CAPTURE=No +PCAP.GATE.DELAY=0 +PCAP.TS_START.CAPTURE=No +PCAP.ENABLE.DELAY=0 +PCAP.BITS2.CAPTURE=Value +PCAP.BITS0.CAPTURE=No +PCAP.BITS3.CAPTURE=No +PCAP.BITS1.CAPTURE=Value +PCAP.GATE_DURATION.CAPTURE=No +PCAP.TS_TRIG.CAPTURE=Value +PCAP.TRIG.DELAY=0 +SFP3_SYNC_IN.POS3.UNITS= +SFP3_SYNC_IN.POS3.OFFSET=0 +SFP3_SYNC_IN.POS3.SCALE=1 +SFP3_SYNC_IN.POS3.CAPTURE=No +SFP3_SYNC_IN.POS4.UNITS= +SFP3_SYNC_IN.POS4.OFFSET=0 +SFP3_SYNC_IN.POS4.SCALE=1 +SFP3_SYNC_IN.POS4.CAPTURE=No +SFP3_SYNC_IN.POS2.UNITS= +SFP3_SYNC_IN.POS2.OFFSET=0 +SFP3_SYNC_IN.POS2.SCALE=1 +SFP3_SYNC_IN.POS2.CAPTURE=No +SFP3_SYNC_IN.POS1.UNITS= +SFP3_SYNC_IN.POS1.OFFSET=0 +SFP3_SYNC_IN.POS1.SCALE=1 +SFP3_SYNC_IN.POS1.CAPTURE=No +DIV1.INP.DELAY=0 +DIV2.INP.DELAY=0 +DIV1.ENABLE.DELAY=0 +DIV2.ENABLE.DELAY=0 +INENC1.CLK.DELAY=0 +INENC2.CLK.DELAY=0 +INENC3.CLK.DELAY=0 +INENC4.CLK.DELAY=0 +INENC1.VAL.UNITS= +INENC2.VAL.UNITS= +INENC3.VAL.UNITS= +INENC4.VAL.UNITS= +INENC1.VAL.OFFSET=0 +INENC2.VAL.OFFSET=0 +INENC3.VAL.OFFSET=0 +INENC4.VAL.OFFSET=0 +INENC1.VAL.SCALE=1 +INENC2.VAL.SCALE=1 +INENC3.VAL.SCALE=1 +INENC4.VAL.SCALE=1 +INENC1.VAL.CAPTURE=No +INENC2.VAL.CAPTURE=Value +INENC3.VAL.CAPTURE=No +INENC4.VAL.CAPTURE=No +INENC1.CLK_PERIOD.UNITS=us +INENC2.CLK_PERIOD.UNITS=s +INENC3.CLK_PERIOD.UNITS=s +INENC4.CLK_PERIOD.UNITS=s +INENC1.FRAME_PERIOD.UNITS=s +INENC2.FRAME_PERIOD.UNITS=s +INENC3.FRAME_PERIOD.UNITS=s +INENC4.FRAME_PERIOD.UNITS=s +SFP3_SYNC_OUT.BIT8.DELAY=0 +SFP3_SYNC_OUT.BIT1.DELAY=0 +SFP3_SYNC_OUT.BIT3.DELAY=0 +SFP3_SYNC_OUT.BIT2.DELAY=0 +SFP3_SYNC_OUT.BIT5.DELAY=0 +SFP3_SYNC_OUT.BIT4.DELAY=0 +SFP3_SYNC_OUT.BIT7.DELAY=0 +SFP3_SYNC_OUT.BIT6.DELAY=0 +SEQ1.ENABLE.DELAY=0 +SEQ2.ENABLE.DELAY=0 +SEQ1.PRESCALE.UNITS=s +SEQ2.PRESCALE.UNITS=s +SEQ1.BITA.DELAY=0 +SEQ2.BITA.DELAY=0 +SEQ1.BITC.DELAY=0 +SEQ2.BITC.DELAY=0 +SEQ1.BITB.DELAY=0 +SEQ2.BITB.DELAY=0 +SRGATE1.SET.DELAY=0 +SRGATE2.SET.DELAY=0 +SRGATE3.SET.DELAY=0 +SRGATE4.SET.DELAY=0 +SRGATE1.ENABLE.DELAY=0 +SRGATE2.ENABLE.DELAY=0 +SRGATE3.ENABLE.DELAY=0 +SRGATE4.ENABLE.DELAY=0 +SRGATE1.RST.DELAY=0 +SRGATE2.RST.DELAY=0 +SRGATE3.RST.DELAY=0 +SRGATE4.RST.DELAY=0 +LUT1.INPB.DELAY=0 +LUT2.INPB.DELAY=0 +LUT3.INPB.DELAY=0 +LUT4.INPB.DELAY=0 +LUT5.INPB.DELAY=0 +LUT6.INPB.DELAY=0 +LUT7.INPB.DELAY=0 +LUT8.INPB.DELAY=0 +LUT1.INPC.DELAY=0 +LUT2.INPC.DELAY=0 +LUT3.INPC.DELAY=0 +LUT4.INPC.DELAY=0 +LUT5.INPC.DELAY=0 +LUT6.INPC.DELAY=0 +LUT7.INPC.DELAY=0 +LUT8.INPC.DELAY=0 +LUT1.INPA.DELAY=0 +LUT2.INPA.DELAY=0 +LUT3.INPA.DELAY=0 +LUT4.INPA.DELAY=0 +LUT5.INPA.DELAY=0 +LUT6.INPA.DELAY=0 +LUT7.INPA.DELAY=0 +LUT8.INPA.DELAY=0 +LUT1.INPD.DELAY=0 +LUT2.INPD.DELAY=0 +LUT3.INPD.DELAY=0 +LUT4.INPD.DELAY=0 +LUT5.INPD.DELAY=0 +LUT6.INPD.DELAY=0 +LUT7.INPD.DELAY=0 +LUT8.INPD.DELAY=0 +LUT1.INPE.DELAY=0 +LUT2.INPE.DELAY=0 +LUT3.INPE.DELAY=0 +LUT4.INPE.DELAY=0 +LUT5.INPE.DELAY=0 +LUT6.INPE.DELAY=0 +LUT7.INPE.DELAY=0 +LUT8.INPE.DELAY=0 +CALC1.OUT.UNITS= +CALC2.OUT.UNITS= +CALC1.OUT.OFFSET=0 +CALC2.OUT.OFFSET=0 +CALC1.OUT.SCALE=1 +CALC2.OUT.SCALE=1 +CALC1.OUT.CAPTURE=No +CALC2.OUT.CAPTURE=No +LVDSOUT1.VAL.DELAY=0 +LVDSOUT2.VAL.DELAY=0 +CLOCK1.ENABLE.DELAY=0 +CLOCK2.ENABLE.DELAY=0 +CLOCK1.PERIOD.UNITS=us +CLOCK2.PERIOD.UNITS=us +CLOCK1.WIDTH.UNITS=us +CLOCK2.WIDTH.UNITS=us +COUNTER1.OUT.UNITS= +COUNTER2.OUT.UNITS= +COUNTER3.OUT.UNITS= +COUNTER4.OUT.UNITS= +COUNTER5.OUT.UNITS= +COUNTER6.OUT.UNITS= +COUNTER7.OUT.UNITS= +COUNTER8.OUT.UNITS= +COUNTER1.OUT.OFFSET=0 +COUNTER2.OUT.OFFSET=0 +COUNTER3.OUT.OFFSET=0 +COUNTER4.OUT.OFFSET=0 +COUNTER5.OUT.OFFSET=0 +COUNTER6.OUT.OFFSET=0 +COUNTER7.OUT.OFFSET=0 +COUNTER8.OUT.OFFSET=0 +COUNTER1.OUT.SCALE=1 +COUNTER2.OUT.SCALE=1 +COUNTER3.OUT.SCALE=1 +COUNTER4.OUT.SCALE=1 +COUNTER5.OUT.SCALE=1 +COUNTER6.OUT.SCALE=1 +COUNTER7.OUT.SCALE=1 +COUNTER8.OUT.SCALE=1 +COUNTER1.OUT.CAPTURE=Value +COUNTER2.OUT.CAPTURE=No +COUNTER3.OUT.CAPTURE=No +COUNTER4.OUT.CAPTURE=No +COUNTER5.OUT.CAPTURE=No +COUNTER6.OUT.CAPTURE=No +COUNTER7.OUT.CAPTURE=No +COUNTER8.OUT.CAPTURE=No +COUNTER1.DIR.DELAY=0 +COUNTER2.DIR.DELAY=0 +COUNTER3.DIR.DELAY=0 +COUNTER4.DIR.DELAY=0 +COUNTER5.DIR.DELAY=0 +COUNTER6.DIR.DELAY=0 +COUNTER7.DIR.DELAY=0 +COUNTER8.DIR.DELAY=0 +COUNTER1.ENABLE.DELAY=0 +COUNTER2.ENABLE.DELAY=0 +COUNTER3.ENABLE.DELAY=0 +COUNTER4.ENABLE.DELAY=0 +COUNTER5.ENABLE.DELAY=0 +COUNTER6.ENABLE.DELAY=0 +COUNTER7.ENABLE.DELAY=0 +COUNTER8.ENABLE.DELAY=0 +COUNTER1.TRIG.DELAY=0 +COUNTER2.TRIG.DELAY=0 +COUNTER3.TRIG.DELAY=0 +COUNTER4.TRIG.DELAY=0 +COUNTER5.TRIG.DELAY=0 +COUNTER6.TRIG.DELAY=0 +COUNTER7.TRIG.DELAY=0 +COUNTER8.TRIG.DELAY=0 +PULSE1.ENABLE.DELAY=0 +PULSE2.ENABLE.DELAY=0 +PULSE3.ENABLE.DELAY=0 +PULSE4.ENABLE.DELAY=0 +PULSE1.DELAY.UNITS=ms +PULSE2.DELAY.UNITS=s +PULSE3.DELAY.UNITS=s +PULSE4.DELAY.UNITS=s +PULSE1.TRIG.DELAY=0 +PULSE2.TRIG.DELAY=0 +PULSE3.TRIG.DELAY=0 +PULSE4.TRIG.DELAY=0 +PULSE1.WIDTH.UNITS=ms +PULSE2.WIDTH.UNITS=ms +PULSE3.WIDTH.UNITS=s +PULSE4.WIDTH.UNITS=s +PULSE1.STEP.UNITS=ms +PULSE2.STEP.UNITS=ms +PULSE3.STEP.UNITS=s +PULSE4.STEP.UNITS=s +FILTER1.OUT.UNITS= +FILTER2.OUT.UNITS= +FILTER1.OUT.OFFSET=0 +FILTER2.OUT.OFFSET=0 +FILTER1.OUT.SCALE=1 +FILTER2.OUT.SCALE=1 +FILTER1.OUT.CAPTURE=No +FILTER2.OUT.CAPTURE=No +FILTER1.ENABLE.DELAY=0 +FILTER2.ENABLE.DELAY=0 +FILTER1.TRIG.DELAY=0 +FILTER2.TRIG.DELAY=0 +FMC_IN.VAL8.UNITS=V +FMC_IN.VAL8.OFFSET=0 +FMC_IN.VAL8.SCALE=4.65661287e-09 +FMC_IN.VAL8.CAPTURE=No +FMC_IN.VAL1.UNITS=V +FMC_IN.VAL1.OFFSET=0 +FMC_IN.VAL1.SCALE=4.65661287e-09 +FMC_IN.VAL1.CAPTURE=No +FMC_IN.VAL3.UNITS=V +FMC_IN.VAL3.OFFSET=0 +FMC_IN.VAL3.SCALE=4.65661287e-09 +FMC_IN.VAL3.CAPTURE=No +FMC_IN.VAL2.UNITS=V +FMC_IN.VAL2.OFFSET=0 +FMC_IN.VAL2.SCALE=4.65661287e-09 +FMC_IN.VAL2.CAPTURE=No +FMC_IN.VAL5.UNITS=V +FMC_IN.VAL5.OFFSET=0 +FMC_IN.VAL5.SCALE=4.65661287e-09 +FMC_IN.VAL5.CAPTURE=No +FMC_IN.VAL4.UNITS=V +FMC_IN.VAL4.OFFSET=0 +FMC_IN.VAL4.SCALE=4.65661287e-09 +FMC_IN.VAL4.CAPTURE=No +FMC_IN.VAL7.UNITS=V +FMC_IN.VAL7.OFFSET=0 +FMC_IN.VAL7.SCALE=4.65661287e-09 +FMC_IN.VAL7.CAPTURE=No +FMC_IN.VAL6.UNITS=V +FMC_IN.VAL6.OFFSET=0 +FMC_IN.VAL6.SCALE=4.65661287e-09 +FMC_IN.VAL6.CAPTURE=No +PGEN1.OUT.UNITS= +PGEN2.OUT.UNITS= +PGEN1.OUT.OFFSET=0 +PGEN2.OUT.OFFSET=0 +PGEN1.OUT.SCALE=1 +PGEN2.OUT.SCALE=1 +PGEN1.OUT.CAPTURE=No +PGEN2.OUT.CAPTURE=No +PGEN1.ENABLE.DELAY=0 +PGEN2.ENABLE.DELAY=0 +PGEN1.TRIG.DELAY=0 +PGEN2.TRIG.DELAY=0 +TTLIN1.TERM=High-Z +TTLIN2.TERM=High-Z +TTLIN3.TERM=High-Z +TTLIN4.TERM=High-Z +TTLIN5.TERM=High-Z +TTLIN6.TERM=High-Z +OUTENC1.DATA=ZERO +OUTENC2.DATA=ZERO +OUTENC3.DATA=ZERO +OUTENC4.DATA=ZERO +OUTENC1.A=ZERO +OUTENC2.A=ZERO +OUTENC3.A=ZERO +OUTENC4.A=ZERO +OUTENC1.ENCODING=Unsigned Binary +OUTENC2.ENCODING=Unsigned Binary +OUTENC3.ENCODING=Unsigned Binary +OUTENC4.ENCODING=Unsigned Binary +OUTENC1.QPERIOD=0 +OUTENC2.QPERIOD=0 +OUTENC3.QPERIOD=0 +OUTENC4.QPERIOD=0 +OUTENC1.Z=ZERO +OUTENC2.Z=ZERO +OUTENC3.Z=ZERO +OUTENC4.Z=ZERO +OUTENC1.B=ZERO +OUTENC2.B=ZERO +OUTENC3.B=ZERO +OUTENC4.B=ZERO +OUTENC1.VAL=ZERO +OUTENC2.VAL=ZERO +OUTENC3.VAL=ZERO +OUTENC4.VAL=ZERO +OUTENC1.PROTOCOL=Quadrature +OUTENC2.PROTOCOL=Quadrature +OUTENC3.PROTOCOL=Quadrature +OUTENC4.PROTOCOL=Quadrature +OUTENC1.ENABLE=ZERO +OUTENC2.ENABLE=ZERO +OUTENC3.ENABLE=ZERO +OUTENC4.ENABLE=ZERO +OUTENC1.GENERATOR_ERROR=No +OUTENC2.GENERATOR_ERROR=No +OUTENC3.GENERATOR_ERROR=No +OUTENC4.GENERATOR_ERROR=No +OUTENC1.BITS=0 +OUTENC2.BITS=0 +OUTENC3.BITS=0 +OUTENC4.BITS=0 +PCOMP1.PULSES=0 +PCOMP2.PULSES=0 +PCOMP1.PRE_START=1 +PCOMP2.PRE_START=0 +PCOMP1.ENABLE=BITS.OUTA +PCOMP2.ENABLE=ZERO +PCOMP1.DIR=Positive +PCOMP2.DIR=Positive +PCOMP1.START=20 +PCOMP2.START=0 +PCOMP1.WIDTH=1 +PCOMP2.WIDTH=0 +PCOMP1.INP=INENC2.VAL +PCOMP2.INP=ZERO +PCOMP1.RELATIVE=Absolute +PCOMP2.RELATIVE=Absolute +PCOMP1.STEP=10 +PCOMP2.STEP=0 +TTLOUT1.FINE_DELAY=0 +TTLOUT2.FINE_DELAY=0 +TTLOUT3.FINE_DELAY=0 +TTLOUT4.FINE_DELAY=0 +TTLOUT5.FINE_DELAY=0 +TTLOUT6.FINE_DELAY=0 +TTLOUT7.FINE_DELAY=0 +TTLOUT8.FINE_DELAY=0 +TTLOUT9.FINE_DELAY=0 +TTLOUT10.FINE_DELAY=0 +TTLOUT1.QUARTER_DELAY=0 +TTLOUT2.QUARTER_DELAY=0 +TTLOUT3.QUARTER_DELAY=0 +TTLOUT4.QUARTER_DELAY=0 +TTLOUT5.QUARTER_DELAY=0 +TTLOUT6.QUARTER_DELAY=0 +TTLOUT7.QUARTER_DELAY=0 +TTLOUT8.QUARTER_DELAY=0 +TTLOUT9.QUARTER_DELAY=0 +TTLOUT10.QUARTER_DELAY=0 +TTLOUT1.VAL=PULSE1.OUT +TTLOUT2.VAL=ZERO +TTLOUT3.VAL=ZERO +TTLOUT4.VAL=ZERO +TTLOUT5.VAL=ZERO +TTLOUT6.VAL=ZERO +TTLOUT7.VAL=ZERO +TTLOUT8.VAL=ZERO +TTLOUT9.VAL=ZERO +TTLOUT10.VAL=ZERO +PCAP.GATE=PULSE1.OUT +PCAP.ENABLE=BITS.OUTA +PCAP.SHIFT_SUM=0 +PCAP.TRIG_EDGE=Rising +PCAP.TRIG=CLOCK1.OUT +DIV1.DIVISOR=0 +DIV2.DIVISOR=0 +DIV1.FIRST_PULSE=OutN +DIV2.FIRST_PULSE=OutN +DIV1.INP=ZERO +DIV2.INP=ZERO +DIV1.ENABLE=ZERO +DIV2.ENABLE=ZERO +INENC1.ENCODING=Unsigned Binary +INENC2.ENCODING=Unsigned Binary +INENC3.ENCODING=Unsigned Binary +INENC4.ENCODING=Unsigned Binary +INENC1.CLK=ZERO +INENC2.CLK=ZERO +INENC3.CLK=ZERO +INENC4.CLK=ZERO +INENC1.MSB_DISCARD=0 +INENC2.MSB_DISCARD=0 +INENC3.MSB_DISCARD=0 +INENC4.MSB_DISCARD=0 +INENC1.LSB_DISCARD=0 +INENC2.LSB_DISCARD=0 +INENC3.LSB_DISCARD=0 +INENC4.LSB_DISCARD=0 +INENC1.CLK_SRC=Internally Generated +INENC2.CLK_SRC=Internally Generated +INENC3.CLK_SRC=Internally Generated +INENC4.CLK_SRC=Internally Generated +INENC1.PROTOCOL=ZMI +INENC2.PROTOCOL=Quadrature +INENC3.PROTOCOL=Quadrature +INENC4.PROTOCOL=Quadrature +INENC1.RST_ON_Z=0 +INENC2.RST_ON_Z=0 +INENC3.RST_ON_Z=0 +INENC4.RST_ON_Z=0 +INENC1.CLK_PERIOD=10 +INENC2.CLK_PERIOD=0 +INENC3.CLK_PERIOD=0 +INENC4.CLK_PERIOD=0 +INENC1.BITS=32 +INENC2.BITS=0 +INENC3.BITS=0 +INENC4.BITS=0 +INENC1.FRAME_PERIOD=0 +INENC2.FRAME_PERIOD=0 +INENC3.FRAME_PERIOD=0 +INENC4.FRAME_PERIOD=0 +BITS.A=1 +BITS.C=0 +BITS.D=0 +BITS.B=0 +SFP3_SYNC_OUT.POS4=ZERO +SFP3_SYNC_OUT.POS2=ZERO +SFP3_SYNC_OUT.POS3=ZERO +SFP3_SYNC_OUT.POS1=ZERO +SFP3_SYNC_OUT.BIT8=ZERO +SFP3_SYNC_OUT.BIT1=ZERO +SFP3_SYNC_OUT.BIT3=ZERO +SFP3_SYNC_OUT.BIT2=ZERO +SFP3_SYNC_OUT.BIT5=ZERO +SFP3_SYNC_OUT.BIT4=ZERO +SFP3_SYNC_OUT.BIT7=ZERO +SFP3_SYNC_OUT.BIT6=ZERO +SEQ1.ENABLE=ZERO +SEQ2.ENABLE=ZERO +SEQ1.PRESCALE=0 +SEQ2.PRESCALE=0 +SEQ1.BITA=ZERO +SEQ2.BITA=ZERO +SEQ1.BITC=ZERO +SEQ2.BITC=ZERO +SEQ1.BITB=ZERO +SEQ2.BITB=ZERO +SEQ1.REPEATS=0 +SEQ2.REPEATS=0 +SEQ1.POSB=ZERO +SEQ2.POSB=ZERO +SEQ1.POSC=ZERO +SEQ2.POSC=ZERO +SEQ1.POSA=ZERO +SEQ2.POSA=ZERO +SYSTEM.CLOCK_SOURCE=int clock +SRGATE1.WHEN_DISABLED=Set output low +SRGATE2.WHEN_DISABLED=Set output low +SRGATE3.WHEN_DISABLED=Set output low +SRGATE4.WHEN_DISABLED=Set output low +SRGATE1.RST_EDGE=Falling +SRGATE2.RST_EDGE=Rising +SRGATE3.RST_EDGE=Rising +SRGATE4.RST_EDGE=Rising +SRGATE1.SET=ZERO +SRGATE2.SET=ZERO +SRGATE3.SET=ZERO +SRGATE4.SET=ZERO +SRGATE1.SET_EDGE=Rising +SRGATE2.SET_EDGE=Rising +SRGATE3.SET_EDGE=Rising +SRGATE4.SET_EDGE=Rising +SRGATE1.ENABLE=ZERO +SRGATE2.ENABLE=ZERO +SRGATE3.ENABLE=ZERO +SRGATE4.ENABLE=ZERO +SRGATE1.RST=ZERO +SRGATE2.RST=ZERO +SRGATE3.RST=ZERO +SRGATE4.RST=ZERO +FMC_OUT.GAIN4=5V +FMC_OUT.GAIN1=5V +FMC_OUT.GAIN3=5V +FMC_OUT.GAIN2=5V +FMC_OUT.VAL1=ZERO +FMC_OUT.VAL3=ZERO +FMC_OUT.VAL2=ZERO +FMC_OUT.VAL4=ZERO +LUT1.INPB=ZERO +LUT2.INPB=ZERO +LUT3.INPB=ZERO +LUT4.INPB=ZERO +LUT5.INPB=ZERO +LUT6.INPB=ZERO +LUT7.INPB=ZERO +LUT8.INPB=ZERO +LUT1.INPC=ZERO +LUT2.INPC=ZERO +LUT3.INPC=ZERO +LUT4.INPC=ZERO +LUT5.INPC=ZERO +LUT6.INPC=ZERO +LUT7.INPC=ZERO +LUT8.INPC=ZERO +LUT1.INPA=ZERO +LUT2.INPA=ZERO +LUT3.INPA=ZERO +LUT4.INPA=ZERO +LUT5.INPA=ZERO +LUT6.INPA=ZERO +LUT7.INPA=ZERO +LUT8.INPA=ZERO +LUT1.INPD=ZERO +LUT2.INPD=ZERO +LUT3.INPD=ZERO +LUT4.INPD=ZERO +LUT5.INPD=ZERO +LUT6.INPD=ZERO +LUT7.INPD=ZERO +LUT8.INPD=ZERO +LUT1.INPE=ZERO +LUT2.INPE=ZERO +LUT3.INPE=ZERO +LUT4.INPE=ZERO +LUT5.INPE=ZERO +LUT6.INPE=ZERO +LUT7.INPE=ZERO +LUT8.INPE=ZERO +LUT1.FUNC=(A&B)|(C|D) +LUT2.FUNC=0x00000000 +LUT3.FUNC=0x00000000 +LUT4.FUNC=0x00000000 +LUT5.FUNC=0x00000000 +LUT6.FUNC=0x00000000 +LUT7.FUNC=0x00000000 +LUT8.FUNC=0x00000000 +LUT1.TYPEA=Input-Level +LUT2.TYPEA=Input-Level +LUT3.TYPEA=Input-Level +LUT4.TYPEA=Input-Level +LUT5.TYPEA=Input-Level +LUT6.TYPEA=Input-Level +LUT7.TYPEA=Input-Level +LUT8.TYPEA=Input-Level +LUT1.TYPEC=Input-Level +LUT2.TYPEC=Input-Level +LUT3.TYPEC=Input-Level +LUT4.TYPEC=Input-Level +LUT5.TYPEC=Input-Level +LUT6.TYPEC=Input-Level +LUT7.TYPEC=Input-Level +LUT8.TYPEC=Input-Level +LUT1.TYPEB=Input-Level +LUT2.TYPEB=Input-Level +LUT3.TYPEB=Input-Level +LUT4.TYPEB=Input-Level +LUT5.TYPEB=Input-Level +LUT6.TYPEB=Input-Level +LUT7.TYPEB=Input-Level +LUT8.TYPEB=Input-Level +LUT1.TYPEE=Input-Level +LUT2.TYPEE=Input-Level +LUT3.TYPEE=Input-Level +LUT4.TYPEE=Input-Level +LUT5.TYPEE=Input-Level +LUT6.TYPEE=Input-Level +LUT7.TYPEE=Input-Level +LUT8.TYPEE=Input-Level +LUT1.TYPED=Input-Level +LUT2.TYPED=Input-Level +LUT3.TYPED=Input-Level +LUT4.TYPED=Input-Level +LUT5.TYPED=Input-Level +LUT6.TYPED=Input-Level +LUT7.TYPED=Input-Level +LUT8.TYPED=Input-Level +CALC1.INPC=ZERO +CALC2.INPC=ZERO +CALC1.INPA=ZERO +CALC2.INPA=ZERO +CALC1.SHIFT=0 +CALC2.SHIFT=0 +CALC1.INPB=ZERO +CALC2.INPB=ZERO +CALC1.INPD=ZERO +CALC2.INPD=ZERO +CALC1.TYPEA=Value +CALC2.TYPEA=Value +CALC1.TYPEC=Value +CALC2.TYPEC=Value +CALC1.TYPEB=Value +CALC2.TYPEB=Value +CALC1.TYPED=Value +CALC2.TYPED=Value +LVDSOUT1.FINE_DELAY=0 +LVDSOUT2.FINE_DELAY=0 +LVDSOUT1.QUARTER_DELAY=0 +LVDSOUT2.QUARTER_DELAY=0 +LVDSOUT1.VAL=ZERO +LVDSOUT2.VAL=ZERO +CLOCK1.ENABLE=BITS.OUTA +CLOCK2.ENABLE=ZERO +CLOCK1.PERIOD=100 +CLOCK2.PERIOD=50 +CLOCK1.WIDTH=0.504 +CLOCK2.WIDTH=5 +COUNTER1.OUT_MODE=On-Change +COUNTER2.OUT_MODE=On-Change +COUNTER3.OUT_MODE=On-Change +COUNTER4.OUT_MODE=On-Change +COUNTER5.OUT_MODE=On-Change +COUNTER6.OUT_MODE=On-Change +COUNTER7.OUT_MODE=On-Change +COUNTER8.OUT_MODE=On-Change +COUNTER1.STEP=0 +COUNTER2.STEP=0 +COUNTER3.STEP=0 +COUNTER4.STEP=0 +COUNTER5.STEP=0 +COUNTER6.STEP=0 +COUNTER7.STEP=0 +COUNTER8.STEP=0 +COUNTER1.DIR=ZERO +COUNTER2.DIR=ZERO +COUNTER3.DIR=ZERO +COUNTER4.DIR=ZERO +COUNTER5.DIR=ZERO +COUNTER6.DIR=ZERO +COUNTER7.DIR=ZERO +COUNTER8.DIR=ZERO +COUNTER1.ENABLE=BITS.OUTA +COUNTER2.ENABLE=ZERO +COUNTER3.ENABLE=ZERO +COUNTER4.ENABLE=ZERO +COUNTER5.ENABLE=ZERO +COUNTER6.ENABLE=ZERO +COUNTER7.ENABLE=ZERO +COUNTER8.ENABLE=ZERO +COUNTER1.TRIG=PULSE1.OUT +COUNTER2.TRIG=ZERO +COUNTER3.TRIG=ZERO +COUNTER4.TRIG=ZERO +COUNTER5.TRIG=ZERO +COUNTER6.TRIG=ZERO +COUNTER7.TRIG=ZERO +COUNTER8.TRIG=ZERO +COUNTER1.TRIG_EDGE=Rising +COUNTER2.TRIG_EDGE=Rising +COUNTER3.TRIG_EDGE=Rising +COUNTER4.TRIG_EDGE=Rising +COUNTER5.TRIG_EDGE=Rising +COUNTER6.TRIG_EDGE=Rising +COUNTER7.TRIG_EDGE=Rising +COUNTER8.TRIG_EDGE=Rising +COUNTER1.MIN=0 +COUNTER2.MIN=0 +COUNTER3.MIN=0 +COUNTER4.MIN=0 +COUNTER5.MIN=0 +COUNTER6.MIN=0 +COUNTER7.MIN=0 +COUNTER8.MIN=0 +COUNTER1.MAX=1000 +COUNTER2.MAX=0 +COUNTER3.MAX=0 +COUNTER4.MAX=0 +COUNTER5.MAX=0 +COUNTER6.MAX=0 +COUNTER7.MAX=0 +COUNTER8.MAX=0 +COUNTER1.START=0 +COUNTER2.START=0 +COUNTER3.START=0 +COUNTER4.START=0 +COUNTER5.START=0 +COUNTER6.START=0 +COUNTER7.START=0 +COUNTER8.START=0 +PULSE1.PULSES=50 +PULSE2.PULSES=10 +PULSE3.PULSES=0 +PULSE4.PULSES=0 +PULSE1.ENABLE=BITS.OUTA +PULSE2.ENABLE=ZERO +PULSE3.ENABLE=ZERO +PULSE4.ENABLE=ZERO +PULSE1.DELAY=0 +PULSE2.DELAY=0.1 +PULSE3.DELAY=0.2 +PULSE4.DELAY=0.3 +PULSE1.TRIG=PCOMP1.OUT +PULSE2.TRIG=ZERO +PULSE3.TRIG=ZERO +PULSE4.TRIG=ZERO +PULSE1.TRIG_EDGE=Rising +PULSE2.TRIG_EDGE=Rising +PULSE3.TRIG_EDGE=Rising +PULSE4.TRIG_EDGE=Rising +PULSE1.WIDTH=99 +PULSE2.WIDTH=10 +PULSE3.WIDTH=0.3 +PULSE4.WIDTH=0.1 +PULSE1.STEP=10 +PULSE2.STEP=20 +PULSE3.STEP=0 +PULSE4.STEP=0 +FILTER1.INP=ZERO +FILTER2.INP=ZERO +FILTER1.MODE=average +FILTER2.MODE=difference +FILTER1.ENABLE=ZERO +FILTER2.ENABLE=ZERO +FILTER1.TRIG=ZERO +FILTER2.TRIG=ZERO +FMC_IN.GAIN5=10V +FMC_IN.GAIN4=10V +FMC_IN.GAIN7=10V +FMC_IN.GAIN6=10V +FMC_IN.GAIN1=10V +FMC_IN.GAIN3=10V +FMC_IN.GAIN2=10V +FMC_IN.GAIN8=10V +PGEN1.REPEATS=1000 +PGEN2.REPEATS=0 +PGEN1.ENABLE=ZERO +PGEN2.ENABLE=ZERO +PGEN1.TRIG=ZERO +PGEN2.TRIG=ZERO +*METADATA.LABEL_CALC1= +*METADATA.LABEL_FILTER1= +*METADATA.LABEL_CALC2= +*METADATA.LABEL_SRGATE4= +*METADATA.LABEL_FMC_IN1= +*METADATA.LABEL_TTLIN6= +*METADATA.LABEL_SRGATE1= +*METADATA.LABEL_TTLIN4= +*METADATA.LABEL_TTLIN5= +*METADATA.LABEL_TTLIN2=TTL IN2: PCO ES2 Cam exp stutus #4 +*METADATA.LABEL_TTLIN3= +*METADATA.LABEL_CLOCK1= +*METADATA.LABEL_TTLIN1=TTL IN1: PCO ES1 Cam exp status #4 +*METADATA.LABEL_PCOMP1= +*METADATA.LABEL_LUT8= +*METADATA.LABEL_BITS1=Software Triggers +*METADATA.LABEL_COUNTER8= +*METADATA.LABEL_COUNTER7= +*METADATA.LABEL_COUNTER6= +*METADATA.LABEL_COUNTER5= +*METADATA.LABEL_COUNTER4= +*METADATA.LABEL_COUNTER3= +*METADATA.LABEL_COUNTER2= +*METADATA.LABEL_COUNTER1= +*METADATA.LABEL_TTLOUT3=TTL OUT 3: GF#4 Ext. Acq. Enable +*METADATA.LABEL_OUTENC2= +*METADATA.LABEL_OUTENC3= +*METADATA.LABEL_SYSTEM1=System control FPGA +*METADATA.LABEL_OUTENC1= +*METADATA.LABEL_PGEN2= +*METADATA.LABEL_OUTENC4= +*METADATA.LABEL_PGEN1= +*METADATA.LABEL_LUT2= +*METADATA.LABEL_LUT3= +*METADATA.LABEL_LUT1=A or B: PCO ES1 or PCO ES2 +*METADATA.LABEL_LUT6= +*METADATA.LABEL_LUT7= +*METADATA.LABEL_LUT4= +*METADATA.LABEL_LUT5= +*METADATA.LABEL_LVDSOUT2= +*METADATA.LABEL_LVDSOUT1= +*METADATA.LABEL_SFP3_SYNC_OUT1= +*METADATA.LABEL_PULSE3= +*METADATA.LABEL_TTLOUT7= +*METADATA.LABEL_SRGATE2= +*METADATA.LABEL_LVDSIN2= +*METADATA.LABEL_LVDSIN1= +*METADATA.LABEL_SEQ1= +*METADATA.LABEL_CLOCK2= +*METADATA.LABEL_PULSE4= +*METADATA.LABEL_INENC1= +*METADATA.LABEL_INENC2= +*METADATA.LABEL_INENC3= +*METADATA.LABEL_INENC4= +*METADATA.LABEL_PULSE1= +*METADATA.LABEL_PULSE2= +*METADATA.LABEL_FILTER2= +*METADATA.LABEL_TTLOUT10= +*METADATA.LABEL_SEQ2= +*METADATA.LABEL_PCOMP2= +*METADATA.LABEL_DIV1= +*METADATA.LABEL_SRGATE3= +*METADATA.LABEL_FMC_OUT1= +*METADATA.LABEL_DIV2= +*METADATA.LABEL_SFP3_SYNC_IN1= +*METADATA.LABEL_TTLOUT8= +*METADATA.LABEL_TTLOUT9= +*METADATA.LABEL_TTLOUT6= +*METADATA.LABEL_PCAP1=Position capture control +*METADATA.LABEL_TTLOUT4=TTL OUT4: To Blue Box Cam enable +*METADATA.LABEL_TTLOUT5= +*METADATA.LABEL_TTLOUT2=TTL OUT 2: To Blue Box cam exposure +*METADATA.DESIGN= +*METADATA.LABEL_TTLOUT1=TTL OUT 1: To Aero Fast INP 1 +SEQ1.TABLE