From 8c3b910a427205f22b690aea226e8c077e3f1d5d Mon Sep 17 00:00:00 2001 From: Jakub Wlodek Date: Fri, 15 Nov 2024 10:56:41 -0500 Subject: [PATCH] Updates to work with newer ophyd async versions --- start-bsui.sh | 2 +- startup/00-startup.py | 18 +- startup/01-globals.py | 8 +- startup/10-panda.py | 4 +- startup/15-manta.py | 7 +- startup/90-plans.py | 229 +++- startup/existing_plans_and_devices.yaml | 1307 +---------------------- test-panda-save.yml | 874 +++++++++++++++ tiled-serve.sh | 4 +- 9 files changed, 1125 insertions(+), 1328 deletions(-) create mode 100644 test-panda-save.yml diff --git a/start-bsui.sh b/start-bsui.sh index 02c56e8..91f0c6f 100755 --- a/start-bsui.sh +++ b/start-bsui.sh @@ -4,4 +4,4 @@ source venv/bin/activate export TILED_API_KEY=e9fa22c35c4b7414e59d96c265ab46fabdfdea9046c78a88b5f390cea29f6b15 -ipython --profile=collection_tst --ipython-dir=$(pwd)/.. +ipython --profile=collection --ipython-dir=$(pwd)/.. diff --git a/startup/00-startup.py b/startup/00-startup.py index 26c2e09..8e9feb7 100644 --- a/startup/00-startup.py +++ b/startup/00-startup.py @@ -30,17 +30,17 @@ nslsii.configure_base( get_ipython().user_ns, Broker.named("temp"), - pbar=True, - bec=True, - magics=True, - mpl=True, + pbar=False, + bec=False, + magics=False, + mpl=False, epics_context=False, ) RE.unsubscribe(0) RE = RunEngine() -RE.subscribe(bec) +#RE.subscribe(bec) tiled_client = from_uri("http://localhost:8000", api_key=os.getenv("TILED_API_KEY", "")) tw = TiledWriter(tiled_client) @@ -68,12 +68,12 @@ def __call__(self, name, doc): # This is needed for ophyd-async to enable 'await <>' instead of 'asyncio.run(<>)': ipython_session = get_ipython() -if ipython_session is not None and not isinstance(ipython_session, IPDummy): - ipython_session.run_line_magic("autoawait", "call_in_bluesky_event_loop") +#if ipython_session is not None and not isinstance(ipython_session, IPDummy): +#ipython_session.run_line_magic("autoawait", "call_in_bluesky_event_loop") # PandA does not produce any data for plots for now. -bec.disable_plots() -bec.disable_table() +#bec.disable_plots() +#bec.disable_table() def dump_doc_to_stdout(name, doc): diff --git a/startup/01-globals.py b/startup/01-globals.py index b7e581a..42efc89 100644 --- a/startup/01-globals.py +++ b/startup/01-globals.py @@ -7,13 +7,13 @@ from ophyd_async.core import ( DEFAULT_TIMEOUT, - DetectorControl, + DetectorController, DetectorTrigger, DetectorWriter, DeviceCollector, SignalRW, TriggerInfo, - TriggerLogic, + FlyerController, ) @@ -46,7 +46,7 @@ def gen_software_trigger_setup(num_frames, exp_time): ) -class StandardTriggerLogic(TriggerLogic[int]): +class StandardTriggerLogic(FlyerController[int]): def __init__(self): self.state = StandardTriggerState.null @@ -59,7 +59,7 @@ def trigger_info(self, setup) -> TriggerInfo: exposure = setup.exposure_time num_images = setup.num_frames return TriggerInfo( - number=num_images, + number_of_triggers=num_images, trigger=trigger, deadtime=0.1, livetime=exposure, diff --git a/startup/10-panda.py b/startup/10-panda.py index 7814532..303c9d0 100644 --- a/startup/10-panda.py +++ b/startup/10-panda.py @@ -19,7 +19,7 @@ from ophyd_async.core import ( DEFAULT_TIMEOUT, AsyncStatus, - DetectorControl, + DetectorController, DetectorTrigger, DetectorWriter, SignalRW, @@ -41,7 +41,7 @@ ########################################################################## panda_trigger_logic = StandardTriggerLogic() -panda_flyer = StandardFlyer(panda_trigger_logic, [], name="panda_flyer") +panda_flyer = StandardFlyer(panda_trigger_logic, name="panda_flyer") def instantiate_panda_async(panda_id): diff --git a/startup/15-manta.py b/startup/15-manta.py index 73b78e8..499f5ef 100644 --- a/startup/15-manta.py +++ b/startup/15-manta.py @@ -11,18 +11,17 @@ from ophyd import EpicsSignalRO from ophyd_async.core import ( DEFAULT_TIMEOUT, - DetectorControl, + DetectorController, DetectorTrigger, DetectorWriter, DeviceCollector, SignalRW, TriggerInfo, - TriggerLogic, ) from ophyd_async.epics.advimba import VimbaDetector manta_trigger_logic = StandardTriggerLogic() -manta_flyer = StandardFlyer(manta_trigger_logic, [], name="manta_flyer") +manta_flyer = StandardFlyer(manta_trigger_logic, name="manta_flyer") def instantiate_manta_async(manta_id): @@ -42,5 +41,7 @@ def instantiate_manta_async(manta_id): manta1 = instantiate_manta_async(1) manta2 = instantiate_manta_async(2) +# warmup_hdf_plugins([manta1, manta2]) + file_loading_timer.stop_timer(__file__) diff --git a/startup/90-plans.py b/startup/90-plans.py index af6983b..83ed581 100644 --- a/startup/90-plans.py +++ b/startup/90-plans.py @@ -133,6 +133,8 @@ def tomo_demo_async( raise RuntimeError( f"Your configured exposure time is longer than the step size {step_time}" ) + else: + exposure_time = step_time / 3 panda_devices = [panda, panda_flyer] detector_devices = [detector, manta_flyer] @@ -191,7 +193,6 @@ def tomo_demo_async( # Stage All! yield from bps.stage_all(*all_devices) - yield from bps.mv(detector._writer.hdf.num_capture, num_images) yield from bps.prepare(manta_flyer, det_exp_setup, wait=True) yield from bps.prepare( @@ -271,5 +272,229 @@ def tomo_demo_async( # Reset the velocity back to high. yield from bps.mv(rot_motor.velocity, 180 / 2) +def xas_demo_async( + panda, + detector, + npoints, + total_time, + start_e, + end_e +# num_images=21, +# scan_time=9, +# start_deg=0, +# exposure_time=None, +): + + start_deg = start_e + end_deg = end_e + + panda_pcomp1 = panda.pcomp[1] + panda_pcap1 = panda.pcap + panda_clock1 = panda.clock[1] + + reset_time = 0.001 # [ms], 1 us difference is usually enough + + clock_period_ms = total_time * 1000 / npoints # [ms] + clock_width_ms = clock_period_ms - reset_time + + target_velocity = (end_deg-start_deg) / total_time # [deg/s] + + + # PRE_START -> 0 + # START -> prestart_cnt + # WIDTH -> end_cnt - start_cnt + + + + pre_start_deg = 5. # [deg], we are working in relative mode, zero is the position where pcomp was enabled + pre_start_cnt = pre_start_deg * COUNTS_PER_DEG + + start_cnt = pre_start_cnt + width_deg = end_deg - start_deg + width_cnt = width_deg * COUNTS_PER_DEG + + print(f"{pre_start_cnt=}, {width_deg=}, {width_cnt=}") + + # step_width_counts = COUNTS_PER_REVOLUTION / (2 * (num_images - 1)) + # if int(step_width_counts) != round(step_width_counts, 5): + # raise ValueError( + # "The number of encoder counts per pulse is not an integer value!" + # ) + +# step_time = scan_time / num_images +# if exposure_time is not None: +# if exposure_time > step_time: +# raise RuntimeError( +# f"Your configured exposure time is longer than the step size {step_time}" +# ) + + panda_devices = [panda, panda_flyer] + all_devices = panda_devices + + if detector: + detector_devices = [detector, manta_flyer] + all_devices = panda_devices + detector_devices + # TODO: DO WE NEED THIS? + det_exp_setup = StandardTriggerSetup( + num_frames=npoints, #num_images, + exposure_time=clock_width_ms, #exposure_time, + trigger_mode=DetectorTrigger.edge_trigger, + ) + + panda_exp_setup = StandardTriggerSetup( + num_frames=npoints, #num_images, + exposure_time=clock_width_ms, #exposure_time, + trigger_mode=DetectorTrigger.constant_gate, + ) + + yield from bps.mv( + rot_motor.velocity, 180 / 2 + ) # Make it fast to move to the start position + yield from bps.mv(rot_motor, start_deg - pre_start_deg) + yield from bps.mv( + rot_motor.velocity, target_velocity #180 / scan_time + ) # Set the velocity for the scan + # start_encoder = start_deg * COUNTS_PER_DEG + + # width_in_counts = (180 / scan_time) * COUNTS_PER_DEG * exposure_time + # if width_in_counts > step_width_counts: + # raise RuntimeError( + # f"Your specified exposure time of {exposure_time}s is too long! Calculated width: {width_in_counts}, Step size: {step_width_counts}" + # ) + # print(f"Exposing camera for {width_in_counts} counts") + + yield from bps.mv(panda_pcomp1.enable, "ZERO") # disabling pcomp, we'll enable it right before the start + + # print("SEETING UP PCOMP") + + # print("Current PCOMP start:", panda_pcomp1.start) + # print("Current PCOMP width:", panda_pcomp1.width) + # Set up the pcomp block + yield from bps.mv(panda_pcomp1.start, int(start_cnt)) + yield from bps.mv(panda_pcomp1.width, int(width_cnt)) + + print("READY TO GO", datetime.datetime.now().strftime("%H:%M:%S")) + + # Uncomment if using gate trigger mode on camera + # yield from bps.mv( + # panda3_pcomp_1.width, width_in_counts + # ) # Width in encoder counts that the pulse will be high + # yield from bps.mv(panda_pcomp1.step, step_width_counts) + # yield from bps.mv(panda_pcomp1.pulses, num_images) # TODO: CHECK + + yield from bps.mv(panda_clock1.period, clock_period_ms) + yield from bps.mv(panda_clock1.period_units, "ms") + yield from bps.mv(panda_clock1.width, clock_width_ms) + yield from bps.mv(panda_clock1.width_units, "ms") + print("000: panda clock configured, ", datetime.datetime.now().strftime("%H:%M:%S")) + yield from bps.open_run() + print("001: run open,", datetime.datetime.now().strftime("%H:%M:%S")) + if detector: + detector._writer._path_provider._filename_provider.set_frame_type( + TomoFrameType.proj + ) + print("002: detector filename set, ", datetime.datetime.now().strftime("%H:%M:%S")) + # The setup below is happening in the VimbaController's arm method. + # # Setup camera in trigger mode + # yield from bps.mv(manta_async.trigger_mode, "On") + # yield from bps.mv(manta_async.trigger_source, "Line1") + # yield from bps.mv(manta_async.overlap, "Off") + # yield from bps.mv(manta_async.expose_out_mode, "TriggerWidth") # "Timed" or "TriggerWidth" + + # Stage All! + yield from bps.stage_all(*all_devices) + print("003: staging complete, ", datetime.datetime.now().strftime("%H:%M:%S")) + if detector: + yield from bps.mv(detector._writer.hdf.num_capture, npoints) + yield from bps.prepare(manta_flyer, det_exp_setup, wait=True) + yield from bps.prepare( + detector, manta_flyer.trigger_logic.trigger_info(det_exp_setup), wait=True + ) + print("004: manta flyer prepare complete, ", datetime.datetime.now().strftime("%H:%M:%S")) + yield from bps.prepare(panda_flyer, npoints, wait=True) + yield from bps.prepare( + panda, panda_flyer.trigger_logic.trigger_info(panda_exp_setup), wait=True + ) + print("005: panda flyer prepare complete, ", datetime.datetime.now().strftime("%H:%M:%S")) + + for device in all_devices: + yield from bps.kickoff(device) + print("007: kickoff complete, ", datetime.datetime.now().strftime("%H:%M:%S")) + + # yield from bps.sleep(0.1) + yield from bps.mv(panda_pcomp1.enable, "ONE") + yield from bps.mv(rot_motor, end_deg + pre_start_deg) # Aiming beyond the end point to maintain constant veolcity + print("006: motor mv start, ", datetime.datetime.now().strftime("%H:%M:%S")) + + + for flyer_or_panda in panda_devices: + yield from bps.complete(flyer_or_panda, wait=True, group="complete_panda") + print("008: panda complete, ", datetime.datetime.now().strftime("%H:%M:%S")) + if detector: + for flyer_or_det in detector_devices: + yield from bps.complete(flyer_or_det, wait=True, group="complete_detector") + print("009: detector complete, ", datetime.datetime.now().strftime("%H:%M:%S")) + # Manually incremenet the index as if a frame was taken + # detector.writer.index += 1 + print("ACQUISITION COMPLETE", datetime.datetime.now().strftime("%H:%M:%S")) + + # Wait for completion of the PandA HDF5 file saving. + done = False + while not done: + try: + yield from bps.wait(group="complete_panda", timeout=0.5) + except TimeoutError: + pass + else: + done = True + + panda_stream_name = f"{panda.name}_stream" + yield from bps.declare_stream(panda, name=panda_stream_name) + + yield from bps.collect( + panda, + # stream=True, + # return_payload=False, + name=panda_stream_name, + ) + print("PANDA FILE SAVING COMPLETE") + yield from bps.unstage_all(*panda_devices) + yield from bps.mv(panda_pcomp1.enable, "ZERO") + print("PANDA UNSTAGING COMPLETE") + + # Wait for completion of the AD HDF5 file saving. + done = False if detector else True + while not done: + try: + yield from bps.wait(group="complete_detector", timeout=0.5) + except TimeoutError: + pass + else: + done = True + + detector_stream_name = f"{detector.name}_stream" + yield from bps.declare_stream(detector, name=detector_stream_name) + + yield from bps.collect( + detector, + # stream=True, + # return_payload=False, + name=detector_stream_name, + ) + yield from bps.sleep(0.01) + print("AD HDF5 SAVED") + yield from bps.close_run() + + panda_val = yield from bps.rd(panda.data.num_captured) + print(f"{panda_val = }") + if detector: + manta_val = yield from bps.rd(detector._writer.hdf.num_captured) + print(f"{manta_val = }") + + yield from bps.unstage_all(*detector_devices) + + # Reset the velocity back to high. + yield from bps.mv(rot_motor.velocity, 180 / 2) + -file_loading_timer.stop_timer(__file__) +#file_loading_timer.stop_timer(__file__) diff --git a/startup/existing_plans_and_devices.yaml b/startup/existing_plans_and_devices.yaml index 7e9cd56..6fcae9d 100644 --- a/startup/existing_plans_and_devices.yaml +++ b/startup/existing_plans_and_devices.yaml @@ -63,48 +63,6 @@ existing_plans: name: exposure_time properties: is_generator: true - abs_set: - description: Set a value. Optionally, wait for it to complete before continuing. - module: bluesky.plan_stubs - name: abs_set - parameters: - - annotation: - type: __MOVABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - description: passed to obj.set() - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait' - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed to obj.set() - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false adaptive_scan: description: Scan over one variable with adaptively tuned step size. module: bluesky.plans @@ -192,281 +150,6 @@ existing_plans: name: md properties: is_generator: true - broadcast_msg: - description: Generate many copies of a message, applying it to a list of devices. - module: bluesky.plan_stubs - name: broadcast_msg - parameters: - - annotation: - type: str - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: command - - annotation: - type: typing.Iterable[typing.Any] - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: objs - - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - caching_repeater: - description: Generate n chained copies of the messages in a plan. - module: bluesky.plan_stubs - name: caching_repeater - parameters: - - annotation: - type: typing.Optional[int] - description: total number of repetitions; if None, infinite - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: n - - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: plan - properties: - is_generator: false - checkpoint: - description: If interrupted, rewind to this point. - module: bluesky.plan_stubs - name: checkpoint - parameters: [] - properties: - is_generator: false - clear_checkpoint: - description: Designate that it is not safe to resume. If interrupted or paused, - abort. - module: bluesky.plan_stubs - name: clear_checkpoint - parameters: [] - properties: - is_generator: false - close_run: - description: Mark the end of the current 'run'. Emit a RunStop document. - module: bluesky.plan_stubs - name: close_run - parameters: - - annotation: - type: typing.Optional[str] - default: None - description: The exit status to report in the Stop document - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: exit_status - - annotation: - type: typing.Optional[str] - default: None - description: Long-form description of why the run ended - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: reason - properties: - is_generator: false - collect: - description: Collect data cached by one or more fly-scanning devices and emit - documents. - module: bluesky.plan_stubs - name: collect - parameters: - - annotation: - type: __FLYABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: bool - default: 'False' - description: 'If False (default), emit Event documents in one bulk dump. If - True, - - emit events one at time.' - kind: - name: KEYWORD_ONLY - value: 3 - name: stream - - annotation: - type: bool - default: 'True' - description: 'If True (default), return the collected Events. If False, return - None. - - Using ``stream=True`` and ``return_payload=False`` together avoids - - accumulating the documents in memory: they are emitted as they are - - collected, and they are not accumulated.' - kind: - name: KEYWORD_ONLY - value: 3 - name: return_payload - - annotation: - type: typing.Optional[str] - default: None - description: 'If not None, will collect for the named string specifically, else - collect will be performed - - on all streams.' - kind: - name: KEYWORD_ONLY - value: 3 - name: name - properties: - is_generator: false - collect_while_completing: - description: 'Collect data from one or more fly-scanning devices and emit documents, - then collect and emit - - data from one or more Collectable detectors until all are done.' - module: bluesky.plan_stubs - name: collect_while_completing - parameters: - - description: '''collect'' methods.' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: flyers - - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: dets - - default: None - description: 'Time period in seconds between each yield from collect while waiting - for triggered - - objects to be done' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: flush_period - - default: None - description: 'If not None, will collect for the named string specifically, else - collect will be performed - - on all streams.' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: stream_name - properties: - is_generator: false - complete: - description: Tell a flyable, 'stop collecting, whenever you are ready'. - module: bluesky.plan_stubs - name: complete - parameters: - - annotation: - type: __FLYABLE__ - convert_device_names: true - description: Device with 'kickoff' and 'complete' methods. - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait' - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed through to ``obj.complete()`` - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - complete_all: - description: Tell one or more flyable objects, 'stop collecting, whenever you - are ready'. - module: bluesky.plan_stubs - name: complete_all - parameters: - - description: Device with 'kickoff' and 'complete' methods. - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait' - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed through to 'complete' for each device - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - configure: - description: Change Device configuration and emit an updated Event Descriptor - document. - module: bluesky.plan_stubs - name: configure - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - description: passed through to ``obj.configure()`` - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - description: passed through to ``obj.configure()`` - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false count: description: Take one or more readings from detectors. module: bluesky.plans @@ -517,71 +200,6 @@ existing_plans: name: md properties: is_generator: true - create: - description: Bundle future readings into a new Event document. - module: bluesky.plan_stubs - name: create - parameters: - - annotation: - type: str - default: '''primary''' - description: 'name given to event stream, used for convenient identification - - default is ''primary''' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: name - properties: - is_generator: false - declare_stream: - description: Bundle future readings into a new Event document. - module: bluesky.plan_stubs - name: declare_stream - parameters: - - annotation: - type: __READABLE__ - convert_device_names: true - description: objects whose readings will be present in the stream - kind: - name: VAR_POSITIONAL - value: 2 - name: objs - - annotation: - type: str - description: 'name given to event stream, used for convenient identification - - default is ''primary''' - kind: - name: KEYWORD_ONLY - value: 3 - name: name - - annotation: - type: bool - default: 'False' - description: 'collect as well as describe when declaring the stream - - default is `False`' - kind: - name: KEYWORD_ONLY - value: 3 - name: collect - properties: - is_generator: false - deferred_pause: - description: Pause at the next checkpoint. - module: bluesky.plan_stubs - name: deferred_pause - parameters: [] - properties: - is_generator: false - drop: - description: Drop a bundle of readings without emitting a completed Event document. - module: bluesky.plan_stubs - name: drop - parameters: [] - properties: - is_generator: false fly: description: Perform a fly scan with one or more 'flyers'. module: bluesky.plans @@ -713,105 +331,6 @@ existing_plans: name: md properties: is_generator: true - input_plan: - description: Prompt the user for text input. - module: bluesky.plan_stubs - name: input_plan - parameters: - - annotation: - type: str - default: '''''' - description: prompt string, e.g., 'enter user name' or 'enter next position' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: prompt - properties: - is_generator: false - install_suspender: - description: Install a suspender during a plan. - module: bluesky.plan_stubs - name: install_suspender - parameters: - - description: The suspender to install - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: suspender - properties: - is_generator: false - kickoff: - description: Kickoff one fly-scanning device. - module: bluesky.plan_stubs - name: kickoff - parameters: - - annotation: - type: __FLYABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'. - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed through to ``obj.kickoff()`` - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - kickoff_all: - description: Kickoff one or more fly-scanning devices. - module: bluesky.plan_stubs - name: kickoff_all - parameters: - - description: Device with 'kickoff', and 'complete' methods. - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'. - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'True' - description: 'If True, wait for completion before processing any more messages. - - True by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed through to 'kickoff' for each device - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false list_grid_scan: description: Scan over a mesh; each motor is on an independent trajectory. module: bluesky.plans @@ -921,22 +440,6 @@ existing_plans: name: md properties: is_generator: true - locate: - description: Locate some Movables and return their locations. - module: bluesky.plan_stubs - name: locate - parameters: - - kind: - name: VAR_POSITIONAL - value: 2 - name: objs - - default: 'True' - kind: - name: KEYWORD_ONLY - value: 3 - name: squeeze - properties: - is_generator: false log_scan: description: Scan over one variable in log-spaced steps. module: bluesky.plans @@ -1032,305 +535,6 @@ existing_plans: name: num properties: is_generator: true - monitor: - description: Asynchronously monitor for new values and emit Event documents. - module: bluesky.plan_stubs - name: monitor - parameters: - - annotation: - type: __READABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Optional[str] - default: None - description: name of event stream; default is None - kind: - name: KEYWORD_ONLY - value: 3 - name: name - - description: passed through to ``obj.subscribe()`` - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - mov: - description: Move one or more devices to a setpoint. Wait for all to complete. - module: bluesky.plan_stubs - name: mv - parameters: - - annotation: - type: typing.Tuple[typing.Union[__MOVABLE__, bluesky.protocols.NamedMovable, - typing.Any], ...] - convert_device_names: true - description: device1, value1, device2, value2, ... - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: Used to mark these as a unit to be waited on. - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - description: passed to obj.set() - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - move_per_step: - description: Inner loop of an N-dimensional step scan without any readings - module: bluesky.plan_stubs - name: move_per_step - parameters: - - annotation: - type: typing.Mapping[__MOVABLE__, typing.Any] - convert_device_names: true - description: mapping motors to positions in this step - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: step - - annotation: - type: typing.Dict[__MOVABLE__, typing.Any] - convert_device_names: true - description: mapping motors to their last-set positions - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: pos_cache - properties: - is_generator: false - movr: - description: Move one or more devices to a relative setpoint. Wait for all to - complete. - module: bluesky.plan_stubs - name: mvr - parameters: - - annotation: - type: typing.Tuple[typing.Union[__MOVABLE__, bluesky.protocols.NamedMovable, - typing.Any], ...] - convert_device_names: true - description: device1, value1, device2, value2, ... - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: Used to mark these as a unit to be waited on. - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - description: passed to obj.set() - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - mv: - description: Move one or more devices to a setpoint. Wait for all to complete. - module: bluesky.plan_stubs - name: mv - parameters: - - annotation: - type: typing.Tuple[typing.Union[__MOVABLE__, bluesky.protocols.NamedMovable, - typing.Any], ...] - convert_device_names: true - description: device1, value1, device2, value2, ... - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: Used to mark these as a unit to be waited on. - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - description: passed to obj.set() - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - mvr: - description: Move one or more devices to a relative setpoint. Wait for all to - complete. - module: bluesky.plan_stubs - name: mvr - parameters: - - annotation: - type: typing.Tuple[typing.Union[__MOVABLE__, bluesky.protocols.NamedMovable, - typing.Any], ...] - convert_device_names: true - description: device1, value1, device2, value2, ... - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: Used to mark these as a unit to be waited on. - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - description: passed to obj.set() - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - 'null': - description: Yield a no-op Message. (Primarily for debugging and testing.) - module: bluesky.plan_stubs - name: 'null' - parameters: [] - properties: - is_generator: false - one_1d_step: - description: Inner loop of a 1D step scan - module: bluesky.plan_stubs - name: one_1d_step - parameters: - - annotation: - type: typing.Sequence[__READABLE__] - convert_device_names: true - description: devices to read - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: detectors - - annotation: - type: __MOVABLE__ - convert_device_names: true - description: The motor to move - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: motor - - annotation: - type: typing.Any - description: Where to move the motor to - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: step - - annotation: - type: typing.Optional[__CALLABLE__] - default: None - description: "function to do the actual acquisition ::\n\n def take_reading(dets,\ - \ name='primary'):\n yield from ...\n\nCallable[List[OphydObj], Optional[str]]\ - \ -> Generator[Msg], optional\n\nDefaults to `trigger_and_read`" - eval_expressions: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: take_reading - properties: - is_generator: false - one_nd_step: - description: Inner loop of an N-dimensional step scan - module: bluesky.plan_stubs - name: one_nd_step - parameters: - - annotation: - type: typing.Sequence[__READABLE__] - convert_device_names: true - description: devices to read - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: detectors - - annotation: - type: typing.Mapping[__MOVABLE__, typing.Any] - convert_device_names: true - description: mapping motors to positions in this step - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: step - - annotation: - type: typing.Dict[__MOVABLE__, typing.Any] - convert_device_names: true - description: mapping motors to their last-set positions - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: pos_cache - - annotation: - type: typing.Optional[__CALLABLE__] - default: None - description: "function to do the actual acquisition ::\n\n def take_reading(dets,\ - \ name='primary'):\n yield from ...\n\nCallable[List[OphydObj], Optional[str]]\ - \ -> Generator[Msg], optional\n\nDefaults to `trigger_and_read`" - eval_expressions: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: take_reading - properties: - is_generator: false - one_shot: - description: Inner loop of a count. - module: bluesky.plan_stubs - name: one_shot - parameters: - - annotation: - type: typing.Sequence[__READABLE__] - convert_device_names: true - description: devices to read - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: detectors - - annotation: - type: typing.Optional[__CALLABLE__] - default: None - description: "function to do the actual acquisition ::\n\n def take_reading(dets,\ - \ name='primary'):\n yield from ...\n\nCallable[List[OphydObj], Optional[str]]\ - \ -> Generator[Msg], optional\n\nDefaults to `trigger_and_read`" - eval_expressions: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: take_reading - properties: - is_generator: false - open_run: - description: Mark the beginning of a new 'run'. Emit a RunStart document. - module: bluesky.plan_stubs - name: open_run - parameters: - - annotation: - type: typing.Optional[typing.Dict[str, typing.Any]] - default: None - description: metadata - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: md - properties: - is_generator: false outer_product_scan: description: Scan over a mesh; each motor is on an independent trajectory. module: bluesky.plans @@ -1398,56 +602,10 @@ existing_plans: - default: '724' kind: name: POSITIONAL_OR_KEYWORD - value: 1 - name: num - properties: - is_generator: true - pause: - description: Pause and wait for the user to resume. - module: bluesky.plan_stubs - name: pause - parameters: [] - properties: - is_generator: false - prepare: - description: Prepare a device. - module: bluesky.plan_stubs - name: prepare - parameters: - - description: Device with 'prepare' method - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait' - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed through to ``obj.prepare()`` - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs + value: 1 + name: num properties: - is_generator: false + is_generator: true print_summary_wrapper: description: Print summary of plan as it goes by module: bluesky.preprocessors @@ -1561,46 +719,6 @@ existing_plans: name: n_after properties: is_generator: true - rd: - description: Reads a single-value non-triggered object - module: bluesky.plan_stubs - name: rd - parameters: - - annotation: - type: __READABLE__ - convert_device_names: true - description: The device to be read - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Any - default: '0' - description: "The value to return when not running in a \"live\" RunEngine.\n\ - This come ups when ::\n\n ret = yield Msg('read', obj)\n assert ret is\ - \ None\n\nthe plan is passed to `list` or some other iterator that\nrepeatedly\ - \ sends `None` into the plan to advance the\ngenerator." - kind: - name: KEYWORD_ONLY - value: 3 - name: default_value - properties: - is_generator: false - read: - description: Take a reading and add it to the current bundle of readings. - module: bluesky.plan_stubs - name: read - parameters: - - annotation: - type: __READABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - properties: - is_generator: false rel_adaptive_scan: description: Relative scan over one variable with adaptively tuned step size. module: bluesky.plans @@ -1971,48 +1089,6 @@ existing_plans: name: md properties: is_generator: true - rel_set: - description: Set a value relative to current value. Optionally, wait before continuing. - module: bluesky.plan_stubs - name: rel_set - parameters: - - annotation: - type: __MOVABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - description: passed to obj.set() - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'; None by default - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - - description: passed to obj.set() - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false rel_spiral: description: Relative spiral scan module: bluesky.plans @@ -2808,83 +1884,6 @@ existing_plans: name: md properties: is_generator: true - remove_suspender: - description: Remove a suspender during a plan. - module: bluesky.plan_stubs - name: remove_suspender - parameters: - - description: The suspender to remove - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: suspender - properties: - is_generator: false - repeat: - description: Repeat a plan num times with delay and checkpoint between each repeat. - module: bluesky.plan_stubs - name: repeat - parameters: - - description: Callable that returns an iterable of Msg objects - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: plan - - annotation: - type: typing.Optional[int] - default: '1' - description: 'number of readings to take; default is 1 - - - If None, capture data until canceled' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: num - - annotation: - type: typing.Union[float, typing.Iterable[float]] - default: '0.0' - description: time delay between successive readings; default is 0 - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: delay - properties: - is_generator: false - repeater: - description: Generate n chained copies of the messages from gen_func - module: bluesky.plan_stubs - name: repeater - parameters: - - annotation: - type: typing.Optional[int] - description: total number of repetitions; if None, infinite - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: n - - description: returns generator instance - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: gen_func - - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false - save: - description: Close a bundle of readings and emit a completed Event document. - module: bluesky.plan_stubs - name: save - parameters: [] - properties: - is_generator: false scan: description: Scan over one multi-motor trajectory. module: bluesky.plans @@ -2974,20 +1973,6 @@ existing_plans: name: md properties: is_generator: true - sleep: - description: Tell the RunEngine to sleep, while asynchronously doing other processing. - module: bluesky.plan_stubs - name: sleep - parameters: - - annotation: - type: float - description: seconds - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: time - properties: - is_generator: false spiral: description: Spiral scan, centered around (x_start, y_start) module: bluesky.plans @@ -3279,100 +2264,6 @@ existing_plans: name: md properties: is_generator: true - stage: - description: '''Stage'' a device (i.e., prepare it for use, ''arm'' it).' - module: bluesky.plan_stubs - name: stage - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'; None by default - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: typing.Optional[bool] - default: None - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - properties: - is_generator: false - stage_all: - description: '''Stage'' one or more devices (i.e., prepare them for use, ''arm'' - them).' - module: bluesky.plan_stubs - name: stage_all - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - description: device1, device2, device3, ... - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'; None by default - kind: - name: KEYWORD_ONLY - value: 3 - name: group - properties: - is_generator: false - stop: - description: Stop a device. - module: bluesky.plan_stubs - name: stop - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - properties: - is_generator: false - subscribe: - description: Subscribe the stream of emitted documents. - module: bluesky.plan_stubs - name: subscribe - parameters: - - annotation: - type: str - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: name - - annotation: - type: __CALLABLE__ - description: 'Expected signature: ``f(name, doc)`` where ``name`` is one of - the - - strings above (''all, ''start'', ...) and ``doc`` is a dict' - eval_expressions: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: func - properties: - is_generator: false tomo_demo_01: module: __main__ name: tomo_demo_01 @@ -3428,64 +2319,6 @@ existing_plans: name: exposure_time properties: is_generator: true - trigger: - description: Trigger and acquisition. Optionally, wait for it to complete. - module: bluesky.plan_stubs - name: trigger - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'; None by default - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: bool - default: 'False' - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - properties: - is_generator: false - trigger_and_read: - description: Trigger and read a list of detectors and bundle readings into one - Event. - module: bluesky.plan_stubs - name: trigger_and_read - parameters: - - annotation: - type: typing.Sequence[__READABLE__] - convert_device_names: true - description: devices to trigger (if they have a trigger method) and then read - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: devices - - annotation: - type: str - default: '''primary''' - description: 'event stream name, a convenient human-friendly identifier; default - - name is ''primary''' - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: name - properties: - is_generator: false tune_centroid: description: 'plan: tune a motor to the centroid of signal(motor)' module: bluesky.plans @@ -3609,140 +2442,6 @@ existing_plans: name: md properties: is_generator: true - unmonitor: - description: Stop monitoring. - module: bluesky.plan_stubs - name: unmonitor - parameters: - - annotation: - type: __READABLE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - properties: - is_generator: false - unstage: - description: '''Unstage'' a device (i.e., put it in standby, ''disarm'' it).' - module: bluesky.plan_stubs - name: unstage - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: obj - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'; None by default - kind: - name: KEYWORD_ONLY - value: 3 - name: group - - annotation: - type: typing.Optional[bool] - default: None - description: 'If True, wait for completion before processing any more messages. - - False by default.' - kind: - name: KEYWORD_ONLY - value: 3 - name: wait - properties: - is_generator: false - unstage_all: - description: '''Unstage'' one or more devices (i.e., put them in standby, ''disarm'' - them).' - module: bluesky.plan_stubs - name: unstage_all - parameters: - - annotation: - type: __DEVICE__ - convert_device_names: true - description: device1, device2, device3, ... - kind: - name: VAR_POSITIONAL - value: 2 - name: args - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: identifier used by 'wait'; None by default - kind: - name: KEYWORD_ONLY - value: 3 - name: group - properties: - is_generator: false - unsubscribe: - description: Remove a subscription. - module: bluesky.plan_stubs - name: unsubscribe - parameters: - - annotation: - type: int - description: token returned by processing a 'subscribe' message - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: token - properties: - is_generator: false - wait: - description: Wait for all statuses in a group to report being finished. - module: bluesky.plan_stubs - name: wait - parameters: - - annotation: - type: typing.Optional[typing.Hashable] - default: None - description: Identifier given to `abs_set`, `rel_set`, `trigger`; None by default - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: group - - annotation: - type: typing.Optional[float] - default: None - kind: - name: KEYWORD_ONLY - value: 3 - name: timeout - - annotation: - type: bool - default: 'False' - kind: - name: KEYWORD_ONLY - value: 3 - name: move_on - properties: - is_generator: false - wait_for: - description: 'Low-level: wait for a list of ``asyncio.Future`` objects to set - (complete).' - module: bluesky.plan_stubs - name: wait_for - parameters: - - annotation: - type: typing.Iterable[__CALLABLE__] - description: iterable collection of coroutine functions that take no arguments - eval_expressions: true - kind: - name: POSITIONAL_OR_KEYWORD - value: 1 - name: futures - - description: passed through to ``asyncio.wait()`` - kind: - name: VAR_KEYWORD - value: 4 - name: kwargs - properties: - is_generator: false x2x_scan: description: Relatively scan over two motors in a 2:1 ratio module: bluesky.plans diff --git a/test-panda-save.yml b/test-panda-save.yml new file mode 100644 index 0000000..146546d --- /dev/null +++ b/test-panda-save.yml @@ -0,0 +1,874 @@ +- bits.a: '1' + bits.b: '0' + bits.c: '0' + bits.d: '0' + bits.label: 'Soft inputs and constant bits ' + calc.1.inpa: INENC1.VAL + calc.1.inpb: ZERO + calc.1.inpc: ZERO + calc.1.inpd: ZERO + calc.1.label: Position calc + calc.1.out_capture: Mean + 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.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: PCAP.ACTIVE + clock.1.enable_delay: 0 + clock.1.label: Configurable clocks + clock.1.period: 10.0 + clock.1.period_units: ms + clock.1.width: 9.999 + clock.1.width_units: ms + clock.2.enable: ZERO + clock.2.enable_delay: 0 + clock.2.label: Configurable clocks + clock.2.period: 0.2 + clock.2.period_units: s + clock.2.width: 0.0 + clock.2.width_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_mode: On-Change + counter.1.out_offset: 0.0 + counter.1.out_scale: 1.0 + counter.1.out_units: '' + counter.1.start: 0 + counter.1.step: 1.0 + counter.1.trig: ZERO + counter.1.trig_delay: 0 + counter.1.trig_edge: Rising + 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_mode: On-Change + counter.2.out_offset: 0.0 + counter.2.out_scale: 1.0 + counter.2.out_units: '' + counter.2.start: 0 + counter.2.step: 1.0 + counter.2.trig: ZERO + counter.2.trig_delay: 0 + counter.2.trig_edge: Rising + 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_mode: On-Change + 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.3.trig_edge: Rising + 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_mode: On-Change + 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.4.trig_edge: Rising + 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_mode: On-Change + 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.5.trig_edge: Rising + 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_mode: On-Change + 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.6.trig_edge: Rising + 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_mode: On-Change + 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.7.trig_edge: Rising + 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_mode: On-Change + 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 + counter.8.trig_edge: Rising + data.capture: true + data.capture_mode: FOREVER + data.create_directory: -4 + data.flush_period: 0.0 + data.hdf_directory: /nsls2/data/tst/legacy/mock-proposals/2024-1/pass-000000/assets + data.hdf_file_name: panda1_async_27fa789d-16a3-4cc8-a0ad-49bb2200d2c1.h5 + 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: average + 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_in.gain1: 10V + fmc_in.gain2: 10V + fmc_in.gain3: 10V + fmc_in.gain4: 10V + fmc_in.gain5: 10V + fmc_in.gain6: 10V + fmc_in.gain7: 10V + fmc_in.gain8: 10V + fmc_in.label: FMC ACQ427 Module + fmc_in.val1_capture: Mean + fmc_in.val1_dataset: '' + fmc_in.val1_offset: 0.0 + fmc_in.val1_scale: 4.65661287e-09 + fmc_in.val1_units: V + fmc_in.val2_capture: Mean + fmc_in.val2_dataset: '' + fmc_in.val2_offset: 0.0 + fmc_in.val2_scale: 4.65661287e-09 + fmc_in.val2_units: V + fmc_in.val3_capture: 'No' + fmc_in.val3_dataset: '' + fmc_in.val3_offset: 0.0 + fmc_in.val3_scale: 4.65661287e-09 + fmc_in.val3_units: V + fmc_in.val4_capture: 'No' + fmc_in.val4_dataset: '' + fmc_in.val4_offset: 0.0 + fmc_in.val4_scale: 4.65661287e-09 + fmc_in.val4_units: V + fmc_in.val5_capture: 'No' + fmc_in.val5_dataset: '' + fmc_in.val5_offset: 0.0 + fmc_in.val5_scale: 4.65661287e-09 + fmc_in.val5_units: V + fmc_in.val6_capture: 'No' + fmc_in.val6_dataset: '' + fmc_in.val6_offset: 0.0 + fmc_in.val6_scale: 4.65661287e-09 + fmc_in.val6_units: V + fmc_in.val7_capture: 'No' + fmc_in.val7_dataset: '' + fmc_in.val7_offset: 0.0 + fmc_in.val7_scale: 4.65661287e-09 + fmc_in.val7_units: V + fmc_in.val8_capture: 'No' + fmc_in.val8_dataset: '' + fmc_in.val8_offset: 0.0 + fmc_in.val8_scale: 4.65661287e-09 + fmc_in.val8_units: V + fmc_out.gain1: 5V + fmc_out.gain2: 5V + fmc_out.gain3: 5V + fmc_out.gain4: 5V + fmc_out.label: FMC ACQ427 Module + fmc_out.val1: ZERO + fmc_out.val2: ZERO + fmc_out.val3: ZERO + fmc_out.val4: ZERO + 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.encoding: Unsigned Binary + inenc.1.frame_period: 0.0 + inenc.1.frame_period_units: s + inenc.1.label: Input encoder + 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: 'No' + inenc.1.val_dataset: '' + inenc.1.val_offset: 0.0 + inenc.1.val_scale: 1.0 + inenc.1.val_units: '' + 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.encoding: Unsigned Binary + inenc.2.frame_period: 0.0 + inenc.2.frame_period_units: s + inenc.2.label: Input encoder + 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: 'No' + inenc.2.val_dataset: '' + inenc.2.val_offset: 0.0 + inenc.2.val_scale: 1.0 + inenc.2.val_units: '' + 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.encoding: Unsigned Binary + 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: 'No' + inenc.3.val_dataset: '' + inenc.3.val_offset: 0.0 + inenc.3.val_scale: 1.0 + inenc.3.val_units: '' + 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.encoding: Unsigned Binary + 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: Lookup table + 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: '0x00000000' + 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: Lookup table + 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: Lookup table + 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: '0x00000000' + 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: Lookup table + 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.encoding: Unsigned Binary + 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.encoding: Unsigned Binary + 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.encoding: Unsigned Binary + 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.encoding: Unsigned Binary + 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: Value + pcap.bits1_dataset: Bits1 + pcap.bits2_capture: 'No' + pcap.bits2_dataset: '' + pcap.bits3_capture: 'No' + pcap.bits3_dataset: '' + pcap.enable: PCOMP1.ACTIVE + pcap.enable_delay: 0 + pcap.gate: CLOCK1.OUT + pcap.gate_delay: 1 + pcap.gate_duration_capture: 'No' + pcap.gate_duration_dataset: '' + pcap.label: 'Position capture control ' + pcap.shift_sum: 0.0 + pcap.trig: CLOCK1.OUT + pcap.trig_delay: 1 + pcap.trig_edge: Falling + 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: TrigTs + pcomp.1.dir: Positive + pcomp.1.enable: ONE + pcomp.1.enable_delay: 0 + pcomp.1.inp: CALC1.OUT + pcomp.1.label: Position compare + pcomp.1.pre_start: 0 + pcomp.1.pulses: 0.0 + pcomp.1.relative: Relative + pcomp.1.start: 22 + pcomp.1.step: 0 + pcomp.1.width: 4000 + pcomp.2.dir: Positive + 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: 0 + pcomp.2.step: 0 + pcomp.2.width: 0 + 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: ms + pulse.1.enable: ZERO + pulse.1.enable_delay: 0 + pulse.1.label: One-shot pulse delay and stretch + pulse.1.pulses: 0.0 + pulse.1.step: 0.0 + pulse.1.step_units: ms + pulse.1.trig: ZERO + pulse.1.trig_delay: 0 + pulse.1.trig_edge: Rising + pulse.1.width: 5.0 + pulse.1.width_units: ms + pulse.2.delay: 0.2 + 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.1 + pulse.2.width_units: s + pulse.3.delay: 0.3 + 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.1 + pulse.3.width_units: s + pulse.4.delay: 0.4 + 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.1 + pulse.4.width_units: s + seq.1.bita: ZERO + 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: ZERO + seq.1.posb: ZERO + seq.1.posc: ZERO + seq.1.prescale: 0.0 + seq.1.prescale_units: s + seq.1.repeats: 0.0 + seq.1.table: + outa1: [] + outa2: [] + outb1: [] + outb2: [] + outc1: [] + outc2: [] + outd1: [] + outd2: [] + oute1: [] + oute2: [] + outf1: [] + outf2: [] + position: [] + repeats: [] + time1: [] + time2: [] + trigger: [] + 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: Sequencer + 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.0 + seq.2.table: + outa1: [] + outa2: [] + outb1: [] + outb2: [] + outc1: [] + outc2: [] + outd1: [] + outd2: [] + oute1: [] + oute2: [] + outf1: [] + outf2: [] + position: [] + repeats: [] + time1: [] + time2: [] + trigger: [] + sfp3_evr.event1: 5Hz Event + sfp3_evr.event2: 5Hz Event + sfp3_evr.event3: 5Hz Event + sfp3_evr.event4: 5Hz Event + sfp3_evr.label: EVENT_RECEIVER Block Status + srgate.1.enable: ZERO + srgate.1.enable_delay: 0 + srgate.1.label: Set reset gate + 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.clock_source: int clock + system.label: 'System control FPGA ' + system.timestamp_source: None + 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: CLOCK1.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/tiled-serve.sh b/tiled-serve.sh index e0eb105..b0e7a96 100755 --- a/tiled-serve.sh +++ b/tiled-serve.sh @@ -1,11 +1,9 @@ #!/bin/bash -source /etc/profile.d/conda.sh +source venv/bin/activate export TILED_API_KEY=e9fa22c35c4b7414e59d96c265ab46fabdfdea9046c78a88b5f390cea29f6b15 -conda activate /nsls2/conda/envs/2024-2.3-py311-tiled - rm -f -r /tmp/tiled_storage mkdir /tmp/tiled_storage tiled catalog init sqlite+aiosqlite:////tmp/tiled_storage/catalog.db