Release History

v8.7.0 (2024-12-20)

API Breaks

  • FFMirrorZ components chin_left_rtd, chin_right_rtd, and chin_tail_rtd are renamed: mirror_temp_[l,r,tail].

Library Features

  • Added the ability to add custom units in custom_units.py which convert_unit if the unit can’t be found in scipy, and a unit test for it

  • Add the capability for AvgSignal to reset itself on trigger, then wait a duration before marking the trigger as complete. This lets you use AvgSignal in a bluesky plan as a way to accumulate the time average of a fast-updating signal at each scan point. To enable this, provide a duration argument.

Device Features

-Added manual to names of components in PPMPowerMeter that are used for manual background voltage collection to distinguish them from components related to automatic background voltage collection - Add the desc, last_voltage_set, and is_trip component signals to

MPODApalisChannel. These have been helpful during operations at TMO. last_voltage_set will also get a voltage_setpoint alias, which is the original name as used in TMO’s scripts.

New Devices

  • HxrDiffractometer for the Beckhoff-based HXR diffractometer. This controls the diffractometer in XPP with prefix "HXR:GON:MMS".

  • MonoGratingStates: SP1K1 Mono Grating States Axis G_H with PMPS.

  • MirrorStripe2D2P: Mirror Stripe with 2D Coating states, 2 positions and PMPS.

  • PhotonCollimatorFDQ: Photon Collimator with Cooling Meter Readback

  • BeckhoffPneumaticFDQ: Beckhoff Pneumatics with a flow meter for cooling readback

  • VCN_OpenLoop: similar to VCN w/ the removal of ‘open’ and ‘position_readback’ commands. The ‘state’ member variable has been renamed to ‘control_mode’ and the associated doc string was been updated.

  • Lakeshore336: support for Lakeshore 336 temperature controller

Bugfixes

  • Made PPMPowerMeter’s responsivity component input-only, like the pytmc pragma, so the connection does not fail when looking for a non-existant non-RBV pv.

  • Fix an issue where the LookupTablePositioner would fail silently if the lookup table was not strictly increasing in both axes. Lookup tables that are strictly decreasing in either axis will now be supported. Lookup tables that have inconsistent ordering in either axis will log a warning when the conversion is done.

  • pcdsdevices.tpr._get_delay, and by extension TprMotor.readback and TprTrigger.ns_delay now calculate delays correctly by using a more precise conversion factor from ticks to nanoseconds

  • Fix an issue where arbitrarily large negative values were permitted to be passed during the MPODApalisChannel.set_voltage method, and where small values passed to a negative-polarity channel would jump to the most negative value. Now, this function will clamp all values between zero and the maximum channel voltage.

  • Rename Smarpod.detailed.ui to SmarPod.detailed.ui so that it will be properly discovered by typhos for the SmarPod class.

  • Replace the velocity_base (.VBAS) signal in the MMC100 class with a base Signal to avoid a PV disconnected error that was preventing moves. The MMC100 record does not have this field. With this fix, MMC100 devices can move again.

Maintenance

Contributors

  • aberges-SLAC

  • KaushikMalapati

  • c-tsoi

  • jozamudi

  • mseaberg

  • nrwslac

  • tongju12

  • zllentz

v8.6.0 (2024-09-16)

API Breaks

  • Removed qpc_name (:VPCNAME PV). This will be brought back in the next release.

Device Features

  • Lcls2LaserTiming: Reduce timeout on moves from 2 seconds to 0.2 seconds

  • Added HI_DI PV to PIPPLC class to show high voltage input for pump diagnostics

Bugfixes

  • pos_ao PV in VCN class no longer reads ‘connection timed out’ in typhos screens

Maintenance

  • Adjusted docs template headers to make them more intuitive

  • Switch build recipes to rely on lightpath >= 1.0.5 (and lightpath-base in conda) to avoid unnecessary ui dependencies.

Contributors

  • jozamudi

  • slactjohnson

  • tangkong

  • zllentz

v8.5.0 (2024-08-22)

Features

  • MstaEnum: Enum describing the motor record MSTA bits.

  • NewportMstaEnum: Enum describing the special Newport motor record MSTA bits.

  • IMSMstaEnum: Enum describing the special IMS motor record MSTA bits.

Device Updates

  • Includes new PV RBVs for Picoscale at motor level: pico_present, pico_exists, pico_sig_qual, pico_enable.

  • Includes new PV RBVs for Picoscale at controller level: pico_stable, pico_name, pico_wmin (working distance min), pico_wmax (working distance max).

  • Add state mover to LI2K4.

  • Added RST_SW pv to Ebara EVA pumps. This PV is used to reset alarm errors.

  • Added PI_M824 motor class for MEC hexapod motors.

  • TprTrigger: change delay_setpoint and width_setpoint to kind=config.

  • TprTrigger: Make LCLS2 timing the default timing_mode.

  • XOffsetMirrorNoBend in mirror.py gets 3 new cooling readout components.

  • Mono in spectrometer.py gets 4 new RTD components and re-named RTDs 1-8. Also, Made cooling component names consistent with mirror cooling component names.

  • ST1K4 can move freely without automode.

  • EpicsMotorInterface: Add a “raw” MSTA value, as well as the interpreted values as a dictionary. Adds a “homed” property based on this. Uses a “generic” MstaEnum class.

  • Newport: Add a “raw” MSTA value, as well as the interpreted values as a dictionary. Adds a “homed” property based on this. Uses the NewportMstaEnum class.

  • IMS: Add a “raw” MSTA value, as well as the interpreted values as a dictionary. Adds a “homed” property based on this. Uses the IMSMstaEnum class.

  • btps.BtpsState: add LS3, LS4, and LS6

  • btps.DestinationConfig: add LS3, LS4, and LS6

  • btms_config.SourcePosition: add LS3, LS4, and LS6

  • btms_config.valid_sources: add LS3, LS4, and LS6

  • UI file updates to support above device updates

  • sqr1: overwrite SQR1Axis set method to avoid waiting and setpoints synchronization.

  • FFMirrorZ updated to read out flow sensors for MR4K4 and MR5K4.

  • lasers.btms_config.SourcePosition: Add a new method to get the happi device

    name, turn the PV name into a dictionary rather than generating from bay number.

  • IMS: Move VBAS and VMAX signals into EpicsMotorInterface parent class.

  • EpicsMotorInterface: Update tab_whitelist for .VBAS and .VMAX signals.

New Devices

  • added SmarActPicoscale subclass of SmarAct.

  • adds MirrorStripe2D4P for coating states with 2 dimensional position state movers with PMPS.

  • adds XOffsetMirror2D4PState for OffsetMirrors with 2D 4Position coating states.

  • adding new device PA1K4-PF

  • Adds OnePvMotor: a pv_positioner that simply writes to and reads from a single PV. This could be useful if you encounter a reason to use the motor interface on non-motor PVs.

  • XOffsetMirrorStateCoolNoBend is added to support MR1K4.

  • VonHamos6Crystal: New MFX 6-crystals spectrometer running on plc-mfx-motion. Contains 6 crystals motions + 3 translations and 1 rotation for the base.

  • VonHamosCrystal_2: interface to the motor stack of a single crystal in the spectrometer.

Bugfixes

  • Overwrite velocity_max and velocity_base signals for Newport class to fix a bug that prevented these motors from moving.

  • BtpsState`: Fix mis-match of LS3 and LS4 PVs.

  • Prevent some devices from creating threads at high frequency when trying to get the lightpath state. These devices classes include XOffsetMirrorXYState, AttenuatorSXR_Ladder, AttenuatorSXR_LadderTwoBladeLBD, AT2L0, XCSLODCM, and XPPLODCM

  • SmarActEncodedTipTilt`: Fix typo in tilt axis instantiation.

  • Replace the broken motor “disabled” (.DISP) typhos widget with a bitmask toggle button.

  • Properly fill the sys keyword argument in TprTrigger.ns_delay_scan

  • btms_config.DestinationPosition: fix description of RIX IP3

  • btms_config.valid_destinations: fix description of RIX IP3

  • Implement a workaround for an issue where Lcls2LaserTiming could not be scanned with small scan steps.

  • Remove two targets from the tmo spectrometer’s foil attenuator. These were removed from the PLC/IOC. This fixes an issue where the state device was not moveable.

  • Fix an issue with classes like IMS and Newport where calling set_current_position on a position outside of the user limits would fail, rather than change the limits to support the new offsets.

Maintenance

  • Allow motion uis to expand vertically once this functionality gets added to typhos.

  • Use sympy instead of pint for unit conversions for simpler maintainability.

  • Various CI tweaks due to numpy 2.0’s chaos.

  • Modifies entrypoint tests to be forward-compatible with py3.12 entrypoint API.

  • Unpins numpy in CI, build incompatibility has been fixed upstream.

Contributors

  • aberges-SLAC

  • baljamal

  • ghalym

  • jozamudi

  • nrwslac

  • rcjwoods

  • slactjohnson

  • tangkong

  • tongju12

  • vespos

  • zllentz

v8.4.0 (2024-04-16)

Compatibility Notes

  • If your SmarAct release is < R1.0.20, then the EPICS signals will timeout on the new PVs. Please make sure to update your children IOCs.

Features

  • Adds ioc_chan_num and ioc_card_num to the EnvironmentalMonitor happi container.

  • Adds the “embedded” file for BeckhoffAxisEPSCustom that allows for typhos screens to open using the compact controls.

  • Adds a convenience re_arg decorator to redefine and deprecate a function’s args in a backwards-compatible way in the pcdsdevices.utils submodule.

Device Updates

  • TprTrigger: Update numerous PVs to “config”, add TCMPL PV as the operation signal.

  • Adds the following temperature monitoring signals to SmarAct and SmarActOpenLoop:

    • channel_temp

    • module_temp

  • Adds the following hidden config PVs to the (encoded) SmarAct device class:

    • log_scale_offset

    • log_scale_inv

    • def_range_min

    • def_range_max

    • dist_code_inv

  • Adds the following missing epics signals to MPODApalisModule:

    • supply_status

    • module_status

    • fine_adjustment_status

    • input_status

    • live_insertion_status

    • safety_loop_status

    • kill

  • Adds an energy_with_acr_status instance to CCM

  • Updates BeamEnergyRequest argument from “bunch” to “pv_index” to better reflect the broader use cases. A backward compatible warning is now returned if the old bunch kwarg is used.

  • Updates “atol” in BeamEnergyRequestNoWait to 0.5 (was 5). This is needed for self-seeding.

  • XOffsetMirrorStateCool and XOffsetMirrorNoBend gets variable_cool for controlling 24V solenoid valve.

New Devices

Bugfixes

  • Previously, calculate_on_get/put functions used in MultiDerivedSignal s in pcdsdevices.tpr classes were not accessing their attrs correctly and would throw KeyErrors when called. Specifically, the name of the attr was being used as the key for items dictionary instead of the actual signal object

  • Also added unit tests for these MultiDerivedSignal s in the pcdsdevices.tpr submodule.

  • Modify sp1k4 Attenuator RTD class (TMOSpectrometer) to match prefix for sp1k4 group device.

Contributors

  • aberges-SLAC

  • baljamal

  • jozamudi

  • KaushikMalapati

  • nrwslac

  • patoppermann

  • sainyamn

  • slactjohnson

  • tongju12

  • vespos

v8.3.0 (2024-02-21)

Features

Device Updates

New Devices

Bugfixes

Maintenance

  • Added missing regression tests for AT2L0.

  • Updated versions of pre-commit checks to latest and fix new flake8 errors.

Contributors

  • ghalym

  • jozamudi

  • nrwslac

  • zllentz

v8.2.0 (2023-12-19)

API Breaks

  • Moved K2700 and IM3L0_K2700 to keithley submodule. This is not expected to impact any known user code.

Features

  • Adds attenuator RTD temperatures to sp1k4 (TMOSpectrometer), for display in GUI.

  • pcdsdevices now has a digital_signals module for simple digital io.

  • Added PVPositionerNoInterrupt, a pv positioner base class whose moves cannot be interrupted (and will loudly complain about any such attempts).

Device Updates

New Devices

Bugfixes

  • LCLSI attenuator classes (generated from the Attenuator factory function) will now raise a much clearer error for when they cannot interrupt a previous move, without trying (and failing) to interrupt the previous move.

  • Fix an issue where BeckhoffAxis typhos screens would overreport known false alarm errors.

Contributors

  • KaushikMalapati

  • nrwslac

  • slactjohnson

  • tongju12

  • zllentz

v8.1.0 (2023-10-16)

Device Updates

  • Adds a K2700 component to IM3L0.

  • Reorders the IM3L0 components to make the K2700 and power meter adjacent in the UI. The Keithley 2700 here is also measuring the power meter, but with a higher resolution.

  • Removes the IM3L0 detailed screen in favor of an embedded IM3L0_K2700 screen.

New Devices

Bugfixes

  • The TMO Spectrometer (SP1K4) now correctly has 6 attenuator states instead of 7, which was causing a myriad of issues due to other internal bugs.

Maintenance

  • Fixes documentation building due to missing IPython dependency in docs-extras.

Contributors

  • kaushikmalapati

  • klauer

  • nrwslac

  • zllentz

v8.0.0 (2023-09-27)

API Breaks

  • Removes rarely-used TwinCAT state config PVs from TwinCATStateConfigOne that are also being removed from the IOCs. These are still available on the PLC itself.

    • delta

    • accl

    • dccl

    • locked

    • valid

  • Removes lens motors from TMOSpectrometer (SP1K4).

Features

  • EPICS motors now support setattr on their limits attribute. That is, you can do e.g. motor.limits = (0, 100) to set the low limit to 0 and the high limit to 100.

  • Adds a blank subclass of PPM, IM3L0, to allow for screens specific to this device that don’t interfere with other PPM devices.

  • Adds a IM3L0.detailed.ui template to add embedded Keithley readout screen to detailed screen for IM3L0. IM3L0 has a Keithley multimeter added to it for higher-resolution readouts of its power meter.

  • ND (N-dimensional) TwinCAT states are now supported.

  • Updates supported positioner typhos templates to use the new row widget, TyphosPositionerRowWidget.

Device Updates

  • Updates limits for LaserTiming, LaserTimingCompensation, and LxtTtcExample from +/-10us to +/-100us.

  • Adds missing pump_state (:STATE_RBV) signal to PTMPLC.

  • Adds chin guard RTDs to FFMirrorZ in mirror.py.

  • LODCM: Adds the E1C pseudo-interface for moving only the first tower energy.

  • SmarAct: Adds signals for performing axis calibration and checking calibration status.

  • Adds laser destination 1 (LD1), where a diagnostics box is installed, to the Laser Beam Transport System (BTPS) state configuration. Updates overview and configuration screens to display LD1.

  • TwinCATInOutPositioner by default now uses 2 states as its name implies (excluding the “unknown” transition sate), with one representing the “out” state and one representing the “in” state.

  • XOffsetMirrorSwitch: adds cool_flow1, cool_flow2, and cool_press.

  • XOffsetMirrorSwitch gets component reordering.

  • Adds TIXEL Manipulator motors to LAMPMagneticBottle.

  • Adds twincat states and the ST3K4 automation switch to the SXR test absorber. This device is pcdsdevices.sxr_test_absorber.SxrTestAbsorber and is named ST1K4.

  • Includes the Fresnel Zone Plate (FZP) 3D states on the TMOSpectrometer device.

  • TMOSpectrometer (SP1K4): adds two new motors for solid attenuator and one for thorlabs lens x.

  • Add the following signals to BeckhoffAxis: - enc_count: the raw encoder count. - pos_diff: the distance between the readback and trajectory setpoint. - hardware_enable: an indicator for hardware enable signals, such as STO buttons.

  • Added new PVS to OpticsPitchNotepad for storing the MR2L3 channel-cut monochromator (CCM) pitch position setpoints for its two coatings.

New Devices

  • FDQ flow meter implemented in analog_signals.py.

  • PPMCOOL added to pim.py.

  • KBOMirrorChin added to mirror.py

  • SQR1Axis: A class representing a single axis of the tri-sphere motion system. It inherits from PVPositionerIsClose and includes attributes for setpoint, readback, actuation, and stopping the motion.

  • SQR1: A class representing the entire tri-sphere motion system. It is a Device that aggregates multiple SQR1Axis instances for each axis. It also includes methods for multi-axis movement and stopping the motion.

  • Includes example devices and components that correspond to lcls-plc-example-motion.

  • Adds BeckhoffAxisEPS, which has the new-style EPS PVs on its directional and power enables. These correspond to structured EPS logic on the PLC that can be inspected from higher level applications.

Bugfixes

  • KBOMirrorHE in mirror.py only has 1 flow sensor per mirror, so remove one.

  • Fixes an issue where the generic Motor factory function would not recognize devices with MCS2 in the PV name. These are now recognized as SmarAct devices.

Maintenance

  • Updates BtpsState comments and logic to help guide future port additions.

  • TwinCAT state devices now properly report that their state_velo should be visualized with 3 decimal places instead of with 0. This caused no issues in hutch-python and was patched as a bug in typhos, and is done for completeness here.

Contributors

  • baljamal

  • jozamudi

  • kaushikmalapati

  • klauer

  • nrwslac

  • slactjohnson

  • tongju12

  • vespos

  • zllentz

v7.4.3 (2023-07-11)

Bugfixes

  • Fix typo in zoom motor prefix for PIM devices.

Maintenance

  • Fix conda recipe test-requires.

  • Remove sqlalchemy and xraydb pins from requirements.txt. These were pinned because the most recent versions of these packages were previously incompatible with each other. This has since been resolved.

Contributors

  • tangkong

  • vespos

  • zllentz

v7.4.2 (2023-07-07)

Device Updates

  • .screen() and .post_elog_status() methods were added to the BaseInterface whitelist for tab completion.

Contributors

  • klauer

v7.4.1 (2023-06-30)

Device Updates

  • QminiSpectrometer: Added some new PVs and modified others related to recent IOC changes. Embedded UI was updated to reflect this.

Maintenance

  • unpin pyqt, with the hope of supporting py3.11

Contributors

  • slactjohnson

  • tangkong

v7.4.0 (2023-05-08)

Device Updates

  • IMS class:

    • Added special parameter manager/questionnaire handling. On load from the questionnaire, grab questionnaire stage identities and apply them to the parameter manager for the given PV.

    • Added functions that allow the user to see the given configuration parameters or the current parameters of that base PV.

    • Return the output of IMS.diff_configuration as a PrettyTable instead of as a dictionary, making it much easier to understand.

  • Updated HXRSpectrometer filter wheel with its state PV. Previously, only the raw motor device was available.

Contributors

  • spenc333

  • tangkong

  • zllentz

v7.3.0 (2023-04-17)

Device Updates

  • LODCM: Add energy setpoint and tweakXC.

  • LODCM: fix energy functionality and add commonly used aliases.

  • LasBasler: Add a new signal that can be used to auto-configure a camera based on an internal dictionary.

New Devices

  • PCDSAreaDetectorTyphos class: Add in signals for camera binning and region size control.

  • LasBaslerNF: A Basler camera intended to be used as a near-field diagnostic.

  • LasBaslerFF: A Basler camera intended to be used as a far-field diagnostic.

Contributors

  • slactjohnson

  • tangkong

  • vespos

  • zllentz

v7.2.0 (2023-04-04)

Features

  • Added a diff_configuration function to the IMS class in epics_motor.py that compares the desired motor pv settings with the current configuration assigned in the parameter manager.

  • Made IMS pmgr only search through USR objects.

Device Updates

  • Adds a preliminary attenuator class AT1K2 and base classes for similar two-blade ladder attenuators designed by JJ X-ray.

  • Adds some PVs for RohdeSchwarzPowerSupply.

  • Update LusiSlits to include individual blade controls.

  • Add cooling PVs for XOffsetMirrorBend: FWM:*_RBV and PRSM:*_RBV.

  • For KBOMirrorHE, set PVs to FWM and PRSM to match the ccc list.

  • For Mono, set PVs to FWM and PRSM to match the ccc list.

  • For EllBase, change the base class to enable scanning via bluesky.

  • CCM energy moves no longer print about the PID loop being killed. This was a leftover debug print.

New Devices

  • Adds Leviton device classes and corresponding happi container for use in the Facility Monitoring System (fms).

  • Adds XOffsetMirrorStateCool for offset mirrors with state and cooling.

  • Adds Device support for stoppers using FB_MotionPneumaticActuator on the PLC. Users can now interface with these stoppers using the BeckhoffPneumatic class.

  • Adds VCN_VAT590 class for controlling the VAT590 variant of the variable controlled needle valve.

  • Adds RTDSX0ThreeStage class, a 3DoF motion stage for Solid Drilling experiments in the EBD’s RTDS chambers.

Bugfixes

  • Fixes lightpath logic for XPPLODCM to use the correct line and show full transmission when splitting beam.

  • Fix an issue where PseudoPositioner devices defined in this module but running from separate terminals would fight over control of the ophyd_readback helper signal, a PV that can be used to monitor progress of the calculated readback.

  • Certain PIMs, such as cxi_dg1_pim, did not work properly because pcdsdevices assumed that these devices had a “DIODE” state, which is not necessarily true. This has been fixed by making all PIM objects autodiscover their states from EPICS.

Maintenance

  • Fix an issue with the pre-commit config pointing to a missing mirror.

  • Add AT1K2 and AT2K2 to the attenuator smoke tests.

  • Adding symbolic links for AT1K2 so that screens generate in a nice, organized way (like other SXR Attenuators)

  • Pinning numpy to 1.23 to temporarily fix CI test suite.

  • pcdsdevices no longer uses Travis CI and has migrated to GitHub Actions for continuous integration, testing, and documentation deployment.

  • pcdsdevices has been migrated to use setuptools-scm, replacing versioneer, as its version-string management tool of choice.

  • pcdsdevices has been migrated to use the modern pyproject.toml, replacing setup.py and related files.

  • Older language features and syntax found in the repository have been updated to Python 3.9+ standards by way of pyupgrade.

  • Sphinx 6.0 is now supported for documentation building.

  • docs-versions-menu replaces doctr-versions-menu and doctr usage for documentation deployment on GitHub Actions. The deployment key is now no longer required.

  • Removed CoatingState class, used reorder_components instead.

  • Specified compatible xraydb and sqlalchemy versions in requirements files.

  • Testing dependencies are now specified in the conda recipe for conda-based installations. dev-requirements.txt continues to be used for pip-based installations.

Contributors

  • klauer

  • ljansen7

  • mcb64

  • mkestra

  • nrwslac

  • slactjohnson

  • spenc333

  • tangkong

  • tongju12

  • vespos

  • wwright-slac

  • zllentz

v7.1.0 (2022-11-04)

Device Updates

  • Allow BeckhoffAxis devices to report the NC error from the beckhoff PLC as part of the move status.

  • Throw a clear error when the user tries to move a BeckhoffAxis that has the default velocity (zero), rather than failing silently.

Bugfixes

  • Fix an issue where BeckhoffAxis devices would show error status after nearly any move, even those that ended normally.

  • Fix _find_matching_range_indices method signature to include self. This was causing startup errors for the XRT mirrors.

Maintenance

  • Update quadratic equation and soft limits for VLS focus mirror. These were no longer correct.

  • Update example in docstring of LightpathMixin. The previous example was from an earlier implementation of the lightpath interface.

  • Add argument to conftest.find_all_device_classes that allows specified device classes to be skipped. This is helpful for skipping interface classes that may not behave normally as independent devices.

  • Set typhos>=2.4.0 in run_constrainted to make sure the typhos feature required for the template update is available.

  • Four blade SXR solid attenuator (AT1K4 and AT2K2) screens have been updated to include all of the filters installed on each blade. It will also show the per-blade filters that the calculator will insert when “Apply Configuration” is clicked. The custom energy line edit will now remain visible regardless of the “Actual/Custom” Photon Energy selection.

  • Adjust the BeckhoffAxis typhos templates to only show alarm state from hinted components instead of all components. This reduces the noise from an unresolved bug with alarm states that get stuck in a fake “major” state for monitors despite being cleared.

  • Slightly adjust the sizing on the BeckhoffAxis detailed typhos template so that the errors can be read.

Contributors

  • klauer

  • tangkong

  • wwright-slac

  • zllentz

v7.0.1 (2022-10-26)

Device Updates

  • Rename lens_pitch to lens_pitch to lens_pitch_up_down and lens_yaw to lens_yaw to lens_yaw_left_right.

Bugfixes

  • When initializing the lightpath summary signal from a happi load, guard against bad input_branches or output_branches. This stops us from spamming the terminal when loading from a db without input_branches and output_branches.

  • Fully removes LightpathItem from containers that subclassed it.

Contributors

  • tangkong

  • tongju12

  • zllentz

v7.0.0 (2022-10-21)

API Changes

  • Now compatible with and expecting lightpath v1.0.0 for lightpath support.

  • Converted LightpathMixin to the new lightpath API, consolodating reporting into a single LightpathState Dataclass. The lightpath subscription system has also been simplified by using an AggregateSignal to monitor all relevant components.

  • Overwrote the default move method for the CCMEnergy class to kill the PID loop at the end of each move (default). This should prevent the piezo motor from heating up and breaking vacuum or frying itself.

Features

  • Made LCLSItem fully lightpath-compatible, to maintain backcompatibility of happi db, as well as added happi containers that work with the new lightpath interface. These containers allow input_branches and output_branches to be optional kwargs. This lets these containers work with devices that both do and do not implement the lightpath interface. In a future release the extra containers may be removed and should not be considered a permanent API.

  • Added LightControl.ui screen for controlling fiber-lites.

  • Added useful qmini embedded screen that’s been active in dev for over a year.

Device Updates

  • Updated LightpathMixin implementation to the new API for all existing lightpath-active devices. This includes but is not limited to:

    • Mirrors

    • LODCMs

    • Attenuators

  • Added an ns_delay_scan motor to the evr Trigger class that is convenient for scanning the delay in nanoseconds.

  • Added the missing valve_position signal to ValveBase, making it available for all valve classes. This contains the valve’s state, e.g. “OPEN”, “CLOSED”, “MOVING”, “INVALID”.

  • Made devices that use PVStateSignal like GateValve and PulsePicker report their enum states and write permissions in subscriptions for applications like typhos and lightpath.

  • Updated pcdsdevices.laser.btps device classes following a PV rename.

  • Updated pcdsdevices.laser.btps device classes to support the Laser Beam Transport Motion System (BTMS). In addition, this includes a module pcdsdevices.laser.btms_config which has utilities to represent the state of the BTS in a control system independent way and allows for motion verification and other sanity checks.

  • Added two new thorlabs ZST213 into TMOSpectrometer, lens_pitch and lens_yaw.

  • Renamed the valve signal named close_override to override_force_close for consistency with override_force_open, which is the corresponding “open” signal.

New Devices

  • Added RohdeSchwarzPowerSupply class for controlling the Rohde Schwarz NGP800 power supply series.

  • Added pcdsdevices.laser.btps.BtpsVGC a variant of the VGC class that included valve_position prior to this being added in ValveBase.

  • Added HPI6030 in radiation.py, a device for reading out 6030 radiation data.

  • Added Gen1VonHamos4Crystal and Gen1VonHamosCrystal to the spectrometer module to support the pre-ADS 4 crystal VonHamos.

Bugfixes

  • Fixed an issue where various types of motors could have inconsistent limits metadata when the IOC or gateway doesn’t behave as expected.

  • Fixed an issue where the UpdateComponent was incompatible with subscription decorators.

  • Fixed PV typos in the BeckhoffSlits and PowerSlits typhos ui templates.

Maintenance

  • Made some of the test motor simulations slightly more accurate.

  • Mark test_presets as xfail because it has a race condition that is slowing down our development.

Contributors

  • christina-pino

  • jortiz-slac

  • klauer

  • nrwslac

  • tangkong

  • tongju12

  • vespos

  • wwright-slac

  • zllentz

v6.3.0 (2022-07-27)

Features

  • Add new module for controlling intensity of LEDs or Fiber-Lites, light_control.py. CvmiLed from cvmi_motion.py has been moved to this new module and renamed to LightControl.

Device Updates

  • TM2K4 now has its own class with 5 position states (4 targets and and OUT state)

  • Upgrade BeamEnergyRequest from BaseInterface to FltMvInterface to pick up all the move aliases.

  • slits.py: add ‘hg’, ‘ho’, ‘vg’, ‘vo’ to tab_whitelist in SlitsBase, upon request from the XPP scientists

  • New set_zero method to DelayBase

New Devices

  • UsDigitalUsbEncoder in pcdsdevices.usb_encoder. This is the EPICS interface for configuring the scale/offset of these encoders that are used in the DAQ.

Maintenance

  • Delay the import of pint so that sessions with no unit conversions can start up 2 seconds faster.

Contributors

  • mbosum

  • vespos

  • wwright-slac

  • zllentz

v6.2.0 (2022-06-20)

Device Updates

  • Add IMS.setup_pmgr as a public API for applications that want to initialize pmgr support before the first device uses it. This was previously private API at IMS._setup_pmgr.

  • Added LED control PVs to CVMI motion class.

New Devices

  • Added ItechRfof class: Instrumentation Technologies RF over Fiber unit

Bugfixes

  • Create the pmgr resources when they are first used rather than on IMS init, saving 3 seconds of startup time for users that don’t need pmgr resources.

Maintenance

  • Vendor happi.device.Device as LegacyItem instead of importing it, pending deprecation of the happi.device module.

Contributors

  • Mbosum

  • mcb64

  • slactjohnson

  • wwright-slac

  • zllentz

v6.1.0 (2022-06-03)

Device Updates

  • Updated the Laser Beam Transport Protection system configuration to reflect the latest PLC/IOC changes: the image sum from near and far-field cameras is now used instead of centroid positioning. The relevant screens have been updated as well.

  • Added an optional acr_status_suffix argument to BeamEnergyRequest that instantiates an alternate version of the class that waits on an ACR PV to know when the motion is done. This is a more suitable version of the class for step scans and a less suitable version of the class for fly scans.

New Devices

  • Added KBOMirrorHEStates - a class for KBO mirrors with coating states and cooling.

  • Added KBOMirrorStates - a class for KBO mirrors with coating states and no cooling.

Bugfixes

  • Fixed the Stopper happi container definition.

  • Removed unusable bunch_charge_2 signal from LCLS beam stats. This PV seems to contain a stale value that disagrees with bunch_charge and causes EPICS errors on certain hosts.

Maintenance

  • Added a run constraint for pyqt to avoid latest while we work out testing failures.

Contributors

  • klauer

  • nrwslac

  • tangkong

  • zllentz

v6.0.0 (2022-05-03)

API Changes

  • MultiDerivedSignal and MultiDerivedSignalRO calculation functions (calculate_on_get and calculate_on_put) now take new signatures. Calculation functions may be either methods on an ophyd.Device (with self) or standalone functions with the following signature: .. code:

    calculate_on_get(mds: MultiDerivedSignal, items: SignalToValue) -> OphydDataType
    calculate_on_put(mds: MultiDerivedSignal, value: OphydDataType) -> SignalToValue
    

Features

  • adds .screen() method to BaseInterface, which opens a typhos screen

  • adds AreaDetector specific .screen() method, which calls camViewer

  • Add utilities for rearranging the order of components as seen by typhos. This can be helpful for classes that inherit components from other classes if they want to slot their new components in at specific places in the automatic typhos tree.

Device Updates

  • Added “ref” signal to “BeamEnergyRequest” to track the energy reference PV.

  • TwinCATStatePositioner has been updated due to underlying MultiDerivedSignal API changes.

  • TM1K4 now has its own class with 8 position states (7 targets and and OUT state)

  • Updated AT2L0 to utilize newly implemented MultiderivedSignal for error checking and clearing in GUI and at the command line

  • Updated AT2L0 Typhos GUI, includes error clearing button and display of error on individual blades

  • clear_errors() method for AT2L0 to clear errors; e.g. at2l0.clear_errors()

  • print_errors() method for AT2l0 to print error summary; e.g. at2l0.print_errors()

New Devices

  • New JJSlits class and typhos screen for controlling JJSlits model AT-C8-HV with Beckhoff controls.

  • XOffsetMirrorRTDs, offset mirrors with RTDs for measuring temperatures.

  • FFMirrorZ, an extension to FFMirror to add a Z axis.

  • The X apertures for AT1K0 now have their own device with 1 state, “centered”

  • The Y apertures for AT1K0 now have their own device with 4 states, [“5.5mm”,”8mm”,”10mm”,”13mm”]

  • OpticsPitchNotepad - a class for storing pitch positions based on state in a notepad IOC for mr1l0, mr2l0, mr1l4, mr1l3, and mr2l3.

Bugfixes

  • Fix calls to ipm_screen.

  • Fix an issue where Beckhoff motion error reset signals could not be set twice in the same session.

  • Fix an issue where the TMO Spectrometer and the HXRSSS would spam errors when loaded in lightpath.

Maintenance

  • Ran pre-commit on all files in the repository, except the ones where it causes issues. Update the CI to require these checks to pass. (passive update, this is the new pcds-ci-helpers master). Notable changes were related to import sorting and removal of trailing whitespace.

Contributors

  • klauer

  • mbosum

  • mkestra

  • nrwslac

  • rsmm97

  • tangkong

  • zllentz

v5.2.0 (2022-03-31)

Features

  • Added a post_elog_status method to the BaseInterface class, which posts to the registered primary elog if it exists.

  • Added a function for posting ophyd object status (and lists of objects) to the ELog as html.

  • Added new AggregateSignal variant MultiDerivedSignal. With a list of signal names and a calculation function, it is now possible to create a new signal derived from the values of the provided signals. For example, if a hutch has many temperature sensors - each with their own corresponding EpicsSignal instance - a signal that shows the maximum value from all of those temperatures would be easy to implement.

  • Added the scale keyword argument to tweak() method, allowing the user to pick the initial step size.

Device Updates

  • Added the Y axis to the KBOMirror status printout

  • TwinCAT state devices now have a top-level “state_velo” summary signal. This can be used to view the highest speed of all the configured state speeds, and it can also be used to do a bulk edit. These are stored per state destination in the IOC.

  • Added a biological parent attribute to GroupDevice, for tracking parents without alerting stage() methods

  • Added the current monitoring PV to pcdsdevices.pump.PTMPLC.

  • Allow for user offsets to TMO Spectrometer motors.

  • Commented out the GasNeedleTheta motor for 3/22 LAMPMBES configuration.

New Devices

  • Added PCDSHDF5BlueskyTriggerable, a variant of area detector specialized for doing bluesky scans.

  • Added the KBOMirrorHE class to be used with KBO mirrors with cooling, like MR2K4.

  • Added the laser beam transport protection system device classes and related screens.

  • Added the Dg /DelayGenerator class to handle SRS645 delay generator

  • Added the MMC100 class, for motors controlled by Micronix MMC100 controllers

  • Added a class for the HXR Single Shot Spectrometer.

  • Add VRCDA, a dual-acting valve class.

Bugfixes

  • Fixed an issue in sim.slow_motor classes where threading behavior could fail.

  • State readbacks from preset positions are now correct.

  • Fixed a race condition on initialization of new EpicsSignalEditMD and EpicsSignalROEditMD. (#963, #978)

  • Fix an issue where mirror devices had overfiltered tab completion results.

Maintenance

  • Removed the instantiation of a status object at motor startup to help improve the performance of loading large sessions. This object was not strictly needed.

  • Removed the deprecation warning from pcdsdevices.utils import.

  • Updated the docstrings in the valve submodule with detailed descriptions.

Contributors

  • klauer

  • mbosum

  • nrwslac

  • spenc333

  • vespos

  • tangkong

  • zrylettc

  • zllentz

v5.1.0 (2022-02-07)

Features

  • Adds a new script, make_ophyd_device.py, that helps with autogeneration of an ophyd device class from an IOC db file. Includes a helper script.

  • State names are no longer case-sensitive.

Device Updates

  • Add pmgr methods to the IMS class’s tab whitelist.

New Devices

  • SliceDhvChannel: a device for controlling a single channel on a Vescent Photonics Slice-DHV controller.

  • SliceDhvController: a device for controlling the controller of a Vescent Photonics Slice-DHV controller.

  • SliceDhv: a top-level device for controlling a complete 2-channel Vescent Photonics Slice-DHV controller.

  • QadcBase: Base class for qadc digitizers

  • Qadc: Class for FMC126 (old) digitizers

  • QadcSparsification: Class for holding FMC134 sparsification PVs.

  • Qadc134: Class for FMC134 (new) digitizers

  • Wave8V2Simple: A simple class for the LCLS-II Wave8. Provides waveforms and acquisition start/stop buttons.

  • Wave8V2: A complete top-level class for the LCLS-II Wave8. Includes many configuration and diagnostic PVs, in addition to what is provided by Wave8V2Simple.

  • DiconSwitch: new device class for the DiCon fiber switch.

  • CycleRfofRx: class for Cycle RFoF receiver.

  • CycleRfofTx: class for Cycle RFoF transmitter.

  • Agilent53210A: Device for controlling frequency counters by the same name.

  • Adds a new class to interface with the LAMP motion configuration for LV17.

Bugfixes

  • EpicsSignalEditMD will be more lenient for cases where we have unset metadata strings (“Invalid”) from TwinCAT. This fixes recent issues involving terminal spam and failure to update enum strings for devices like the solid attenuators.

  • EpicsSignalEditMD will not send metadata updates until all composite signals have connected and updated us with their values.

  • Fix SL1K2 target count (2 states + out instead of default).

  • Fixed mr1l0_homs and mr2l0_homs state counts in TwinCATMirrorStripe. This should be set to 2 for mr1l0 (B4C, B4C/Ni) and mr2l0 (B4C, Ni).

Maintenance

  • detailed_tree.ui was vendored from typhos. The default attenuator screens AT2L0, AT1K4, and AT2K2 will now default to detailed_tree.ui.

  • HelpfulIntEnum has been vendored from pcdsutils. This will be switched to an import in a future release.

Contributors

  • mbosum

  • klauer

  • slactjohnson

  • tangkong

  • zllentz

v5.0.2 (2021-12-02)

Bugfixes

  • Fix issue where EpicsSignalEditMD could log enum error messages for signals that did not edit their enum metadata.

Contributors

  • zllentz

v5.0.1 (2021-11-19)

Bugfixes

  • CCM status representation fixed in certain situations. (#908)

  • Exceptions will no longer be raised when generating device status representations. (#909)

Contributors

  • klauer

v5.0.0 (2021-11-15)

API Changes

  • TwinCATStateConfigAll has been removed. This was considered an internal API.

  • isum components have been renamed to sum in IPM detector classes.

  • The motor components for PIM classes have been shortened by removing _motor from their names (e.g. zoom_motor is now zoom).

  • Switch the target PVs for BeamEnergyRequest from e.g. “XPP:USR:MCC:EPHOT” to e.g. “XPP:USR:MCC:EPHOT:SET1”, “RIX:USR:MCC:EPHOTK:SET1”.

Features

  • EpicsSignalEditMD and EpicsSignalROEditMD now allow for overriding of enumeration strings (enum_strs) by way of a static list of strings (enum_strs kwarg) or a list of signal attribute names (enum_attrs kwarg).

  • Update TwinCATStatePositioner to have a configurable and variable number of state configuration PVs. These are the structures that allow you to check and change state setpoints, deltas, velocities, etc. This is implemented through the new TwinCATStateConfigDynamic class.

  • Increase the maximum number of connected state configuration records to match the current motion library limit (9)

Device Updates

  • Using the new TwinCATStateConfigDynamic mechanisms and the UpdateComponent, update the following classes to contain exactly the correct number of twincat configuration states in their component state records. Note that the number of states here does not include the “Unknown” or “Moving” state associated with index 0. A device with n states will have typically have 1 out state and n-1 target states by this count, and the EPICS record will have n+1 possible enum values. - ArrivalTimeMonitor (6) - AttenuatorSXR_Ladder (9) - AT2L0 (2) - FEESolidAttenuatorBlade (2) - LaserInCoupling (2) - PPM (4) - ReflaserL2SI (2) - WavefrontSensorTarget (6) - XPIM (4)

  • The default theta0 values for CCM objects has been changed from 14.9792 to 15.1027.

  • IPM objects now have short aliases for their motors (ty, dx, dy).

  • Reorganized the sample delivery Selector class to be composed of two Sensiron devices instead of a flat collection of PVs.

  • In VGC_2S, allow for the user to change the at_vac setpoint value for upstream and downstream gauges separately.

  • Add the user_enable signal (bUserEnable) to the BeckhoffAxisPLC class. This is a signal that allows the user to unilaterally disable a running motor’s power. When enabled, it is up to the controller whether or not to actually power the motor, but when disabled the power will be shut off.

  • Add the ability for BeamEnergyRequest to write to PVs for either the K or the L line and for either bunch 1 or bunch 2 in two bunch mode.

New Devices

  • Add TM2K2, a variant of the ArrivalTimeMonitor class that has an extra state (7). The real TM2K2 has one extra target holder compared to the standard ArrivalTimeMonitor.

  • BeckhoffAxis_Pre140 has been added to support versions of lcls-twincat-motion prior to v1.4.0. This has been aliased to OldBeckhoffAxis for backcompat.

  • Created Bronkhorst and Sensiron flow meter devices for sample delivery.

  • Added the crix_motion.VLSOptics Device, which contains calculated axes for the VLS optical components. The rotation state of these crystals is approximated by a best-fit 2nd order polynomial.

  • Add VRCClsLS, a class for gate valves with control and closed limit switch readback.

Bugfixes

  • Fix subtle bugs related to the UpdateComponent and using copy vs deepcopy. This was needed to make the dynamic state classes easy to customize.

  • Add an extra error state in UpdateComponent for when you’ve made a typo in your component name. Previously this would give a confusing NameError.

  • In the LODCM “inverse” calculations, return a NaN energy instead of raising an exception when there is a problem determining the crystal orientation. This prevents the calculated value from going stale when it has become invalid, and it prevents logger spam when this is called in the pseudopositioner update position callback.

Maintenance

  • Add various missing docstrings and type annotations.

  • Tab whitelists have been cut down to make things simpler for non-expert users.

Contributors

  • cymel123

  • jyin999

  • klauer

  • mbosum

  • zllentz

  • zrylettc

v4.9.0 (2021-10-19)

Device Updates

  • Changed pv names for flow cell xyz-theta

New Devices

  • LAMPFlowCell class for new 4 axis flow cell manipulator replacing cVMI on LAMP.

Bugfixes

  • All stop methods now use the ophyd-defined signature, including a keyword-only success boolean.

  • Test suite utility find_all_classes will no longer report test suite classes.

Maintenance

  • Removed prototype-grade documentation helpers in favor of those in ophyd.docs

  • Added similar find_all_callables for the purposes of documentation and testing.

  • Added documentation helper for auto-generating docs/source/api.rst. This should be run when devices are added, removed, or moved.

  • Docstring fixup on CCM class.

  • Imports changed to relative in test suite.

  • Miscellaneous floating point comparison fixes for test suite.

  • Fixed CCM test failure when run individually or quickly (failure when run less than 10 seconds after Python starts up)

  • Linux-only test_presets now skips macOS as well.

Contributors

  • Mbosum

  • klauer

v4.8.0 (2021-09-28)

Features

  • Add GroupDevice: A device that is a group of components that will act independently. This has some performance improvements and small optimizations for when we expect the different subdevices to act fully independently.

  • Add a status method to BaseInterface to return the device’s status string. This is useful for recording device status in the elog.

  • Add typhos templates for BeckhoffSlits and PowerSlits using existing elements from their normal pydm screens.

Device Updates

  • The following devices have become group devices: - Acromag - ArrivalTimeMonitor - BaseGon - BeckhoffJet - BeckhoffJetManipulator - BeckhoffJetSlits - CCM - CrystalTower1 - CrystalTower2 - CVMI - DiagnosticTower - ExitSlits - FFMirror - FlowIntegrator - GasManifold - ICT - Injector - IPIMB - IPMDiode - IPMMotion - Kappa - KBOMirror - KMono - KTOF - LAMP - LAMPMagneticBottle - LaserInCoupling - LCLS2ImagerBase - LODCM - LODCMEnergyC - LODCMEnergySi - Mono - MPODApalisModule - MRCO - OffsetMirror - PCM - PIM - PulsePickerInOut - ReflaserL2SI - RTDSBase - SamPhi - Selector - SlitsBase - StateRecordPositionerBase - VonHamosCrystal - VonHamosFE - Wave8 - WaveFrontSensorTarget - XOffsetMirror - XYZStage

  • Clean up pmgr loading on the IMS class.

  • Edit stage/unstage on PIMY to be compatible with GroupDevice.

  • Edit stage/unstage and the class definition on SlitsBase to be compatible with GroupDevice

  • Change CCM from a InOutPositioner to a normal device with a LightpathMixin interface. Being a positioner that contained a bunch of other positioners, methods like move were extremely ambiguous and confusing. The insert and remove methods are re-implemented as they are useful enough to keep.

  • Split CCMCalc into CCMEnergy and CCMEnergyWithVernier to make the code easier to follow

  • Remove unused CCMCalc feature to move to wavelength or theta to make the code simpler to debug

  • Add aliases to the CCM for each of the motors.

  • Adjust the CCM status to be identical to that from the old python code.

  • Add functions and PVs to kill and home the CCM alio

  • Calculate intermediate quantities in the CCM energy calc and make them available in both the status and as read-only signals.

  • EpicsMotorInterface subclasses will no longer spam logger errors and warnings about alarm issues encountered by other users. These log messages will only be shown if they were the result of moves in the current session. Note that this log filtering assumes that all epics motors will have unique ophyd names.

  • Added GFS fault setpoint, GCC, PIP auto-on and countdown timer

  • Switch the CCM energy devices to use user PVs as the canonical source of calculation constants. This allows the constants to be consistent between sessions and keeps different sessions in sync with each other.

  • Add CCM.energy.set_current_position utility for adjusting the CCM theta0 offset in order to synchronize the calculation with a known photon energy values.

New Devices

  • TMO Fresnel Photon Spectrometer Motion components class, TMOSpectrometer

Bugfixes

  • Fix some race conditions in FuncPositioner

  • Fix a race condition in schedule_task that could cause a task to never be run

  • Add a timeout parameter to IMS.reinitialize, and set it as the default arg for use in the stage method, which is run during scans. This avoids a bug where the stage method could hang forever instead of erroring out, halting a scan in its tracks.

  • Fix an issue where epics motors could time out on the getting of the egu property, which was causing issues with the displaying of device status.

Maintenance

  • Move PVStateSignal from state.py to signal.py to avoid a circular import

  • Make the tests importable and runnable on Windows

  • Require Python 3.9 for type annotations

  • Make pmgr optional, but if installed make sure it has a compatible version.

  • Update to 3.9-only CI

  • Fix the CI PIP test build

  • Include the pcdsdevices test suite in the package distribution.

  • Add missing docstrings in the ccm module where appropriate.

  • Add doc kwarg to all components in the ccm module.

  • Add type hints to all method signatures in the ccm module.

  • Adjust the CCM unit tests appropriately.

Contributors

  • ghalym

  • jyin999

  • mbosum

  • zllentz

v4.7.1 (2021-08-11)

Maintenance

  • Fix a packaging issue where the ui files were not included in the distribution.

v4.7.0 (2021-08-09)

Features

  • Added a typhos.ui entry point, so we can version control our typhos templates in the same place as our device definitions. This also allows us to remove pcds-specific assumptions from typhos to make the library more community-friendly.

  • Added the pcds typhos templates from typhos.

New Devices

  • Add classes for controlling the new apalis mpods. The new apalis mpod PVs differ from previous model PVs and needed new classes to accommodate those changes. Features:

    • Turn on/off HV channels

    • Set current/voltage

    • Get max current/voltage

    • Clear module faults

    • Obtain module temperature

    • Power cycle mpod crate.

Maintenance

  • Add missing jsonschema dependency.

Contributors

  • klauer

  • spenc333

  • zllentz

v4.6.0 (2021-07-09)

Features

  • Add pmgr support to the IMS class! There are three new methods on IMS for interacting with pmgr: configure, get_configuration, and find_configuration.

Device Updates

  • User changes to offset/dir on python or UI level to MRCO motion have been disabled.

  • Add the veto_device signal (:VETO_DEVICE_RBV) to the VFS class.

  • XYGridStage now uses one file per sample instead of one giant file for all samples, and it writes to these files less often. This speeds up operations. Various additional improvements to the class.

New Devices

  • Add special IM2K0 device for the new configuration of IM2K0, where we swapped its XTES style camera setup for a L2SI style camera setup.

Bugfixes

  • Fix an issue where DelayBase subclasses could spam the terminal at startup if we load too many devices at once.

  • Fix a typo in the KBO DS Bender RMS PV.

  • Fix issue where motor presets would not load until the first access of the presets object.

  • Fix an issue where an epics motor could get stuck with a bad state of its set_use_switch after a call to set_current_position with a bad value.

Contributors

  • cristinasewell

  • jsheppard95

  • jyotiphy

  • Mbosum

  • mcb64

  • zllentz

v4.5.0 (2021-06-03)

Features

  • Add UpdateComponent, a component class to update component args in subclasses.

Device Updates

  • Update kmono threshold for showing beam passing in lightpath

  • Rename PPSStopperL2SI to PPSStopper2PV and generalize to all PPS stoppers whose states are determined by the combination of two PVs. The old name and old defaults are retained for backcompatibility and have not yet been deprecated. This was done to support the PVs for ST1K2 which do not follow any existing pattern.

  • Set various beamline component motor offset signals to read-only, using the new BeckhoffAxisNoOffset class, to prevent accidental changes. These are static components that have no need for this level of customization, which tends to just cause confusion.

New Devices

  • MRCO motion class for MRCO IP1 endstation in TMO.

  • Added a class for the RIX ladder-style solid attenuator AT2K2.

  • Add BeckhoffAxisNoOffset, a varition on BeckhoffAxis that uses UpdateComponent to remove write access on the user offset signals.

Bugfixes

  • Fix issue where BeckhoffSlits devices could show metadata errors on startup by cleaning up the done moving handling. This would typically spam the terminal in cases where we were making large numbers of PV connections in the session at once, such as at the start of a hutch-python load.

Contributors

  • Mbosum

  • ZLLentz

  • jsheppard95

  • klauer

v4.4.0 (2021-04-15)

API Changes

  • Move stoppers into stopper.py, but keep reverse imports for backwards compatibility. This will be deprecated and then removed at a later date.

Device Updates

  • Add “confirm” variety metadata tag to EpicsMotorInterface and BeckhoffAxisPLC home commands, requiring user confirmation prior to performing the homing motion in auto-generated Typhos screens.

  • Slits objects now have vo, vg, ho, and hg aliases.

  • Motor objects now print out values with a precision of 3 places.

  • Remove mpa3 and mpa4 from rtdsk0, they do not have filters and are always in invalid states that confuse the lightpath.

  • Update the mono spectrometer class to provide status to lightpath.

  • Make sim devices hinted by default so they show up in the best-effort callback in bluesky.

New Devices

  • Add PPSStopperL2SI for having readbacks of the new PPS stoppers inside of lightpath.

Bugfixes

  • Fix issue where the mirror coating states were expecting the default ‘OUT’ position, which does not exist on the real device.

  • Fix an issue where ObjectComponent instances did not have proper class information.

  • Increase the retry delay in lightpath state updater to avoid issue where long lightpaths would fail to update the first few devices in the path.

  • Fix issue where LICMirror would appear blocking in the mirror states on lightpath.

  • Fix issue where PowerSlits would appear blocking on lightpath for some positions reached by fulfilling normal PMPS requests.

  • Fix issue where SxtTestAbsorber would report no status on lightpath.

Contributors

  • ZryletTC

  • klauer

  • zllentz

v4.3.2 (2021-04-05)

Bugfixes

  • Fix an issue where pcdsdevices would break pyepics and ophyd in such a way to cause thousands of lines of teardown spam at exit.

Contributors

  • zllentz

v4.3.1 (2021-04-02)

Features

Maintenance

  • Have cleaned up some docstring and changed the naming for the offset motors to the old style.

Contributors

  • cristinasewell

v4.3.0 (2021-04-02)

API Changes

  • Deprecate pcdsdevices.component in favor of pcdsdevices.device to avoid circular imports and to more closely mirror the structure of ophyd.

Features

  • Add FuncPositioner as a replacement for VirtualMotor. This is a “dirty” positioner intended for quick hacks in the beamline setup files, instantiated via handing various functions to the init.

  • Add EpicsSignalEditMD and EpicsSignalROEditMD classes for situations where you need to override the control system’s discovered metadata.

  • Adding a normally open class (VRCNO) for VRC gate valves to valve module. VRCNO extends VVCNO and adds VRC functionality.

  • Add SyncAxis to replace deprecated SyncAxesBase with expanded feature set, more sensible defaults, and more solid foundation.

  • Add set_current_position to all PseudoPositioner classes.

  • Add invert parameter to DelayBase for inverting any delay stage.

  • Add set_position as an alias to set_current_position

  • New motor configuration for LAMP. Hoping we only have two configurations to switch between

  • Add InterfaceDevice and InterfaceComponent as a tool for including pre-build objects in a device at init time.

  • Add to_interface helper function for converting normal Device classes into InterfaceDevice classes.

  • Add ObjectComponent as a tool for including pre-build objects in a device at class definition time.

Device Updates

  • Add custom status prints for DelayBase and SyncAxis

  • QminiSpectrometer: A few variety metadata updates for Typhos screens.

  • Set EpicsMotor soft limit kinds to “config” for use in typhos.

New Devices

  • QminiWithEvr: A new class with added PVs for controlling an EVR from a Typhos screen.

  • LAMPMagneticBottle

  • XOffsetMirrorState for mirror coatings

Bugfixes

  • Include hacky fix from XPP/XCS that allows LaserTiming to complete moves in all situations. The real cause and ideas for a clean fix are not currently known/explored.

  • Fix issue where Newport motors would not show units in their status prints.

  • Fix issue where SyncAxis was not compatible with PseudoPositioners as its synchronized “real” motors.

  • Fix an issue where calling set_current_position on certain motors would cause the ipython session to freeze, leaving the motor in the set state instead of bringing it back to the use state.

  • Hacky workaround for IMS motor part number strings being unable to be read through pyepics when they contain invalid utf-8 characters.

  • Fix issue where Newport user_readback had incorrect metadata.

  • UnitConversionDerivedSignal will now pass through the units keyword argument in its metadata (SUB_META or 'meta') callbacks. It will be included even if the original signal did not include units in metadata callbacks. (#767)

  • Fix an issue where various special Signal classes had their kinds improperly reported as “hinted”.

Maintenance

  • Make unit handling in status_info more consistent to improve reliability of status printouts.

Contributors

  • Mbosum

  • ghalym

  • klauer

  • tjohnson

  • zllentz

v4.2.0 (2021-03-03)

Features

  • Happi IOC Data: added new EntryInfo to happi.containers.LCLSItem for ioc configuration data including engineer, location, hutch, release, arch, name, and ioc type.

  • New containers: added new Happi containers with device specific metadata for building MODS IOCs.

  • Custom status print for LODCM object.

  • Added the MPOD class that determines the appropriate MPOD Channel classes. This is to help support the happi entry creation from the questionnaire.

  • Add custom status for LaserTiming and for PseudoSingleInterface

  • Add verbose_name attribute to PseudoSingleInterface and caclulated dial position

  • Add verbose_name property to LaserTiming

Device Updates

  • LODCM object has been updated to contain the Energy motors as well as the other motors and offsets.

  • Update various signal kinds on PTMPLC from omitted to normal or config as appropriate.

  • ThorlabsWfs40: Added wavefront PV and viewer, added some docs

New Devices

  • OffsetMotor - PseudoPositioner with an offset

  • Add GHCPLC (Hot Cathode) class as a counterpart to the GCCPLC (Cold Cathode) class.

Bugfixes

  • Fix issue where the Kappa had an incorrect e_phi calculation in certain situations.

  • Fix issue where the Kappa used the calculated motors for the safety check instead of the real motors.

  • Fix issue where legacy attenuator classes would break bluesky scans.

  • Fix Kappa behavior for kappa angles above 180 degrees.

Contributors

  • cristinasewell

  • klauer

  • slacAdpai

  • slactjohnson

  • zllentz

v4.1.0 (2021-02-10)

API Changes

  • Update twincat motors to use the correct homing PV. This is an alternative PV to the normal motor record PVs for IOC/PLC management reasons. It is possible that this will break devices that have not updated to the latest motion PLC library.

  • Added format and scale arguments to get_status_float(), which affect floating point formatting of values available in the status_info dictionary.

  • CVMI Motion System Prefix: ‘TMO:CVMI’

  • KTOF Motion System Prefix: ‘TMO:KTOF’

Features

Device Updates

  • VCN upper limit can be changed from epics.

  • Added the active component to AttenuatorCalculatorFilter, indicating whether or not the filter should be used in calculations.

  • Multiple devices have been modified to include explicit argument and keyword argument names in __init__ for clarity and introspectability.

New Devices

Bugfixes

  • The transmission status value for the 3rd harmonic has been fixed, it was previously using the wrong value.

Maintenance

  • The test suite will now find all devices in pcdsdevices submodules at arbitrary import depth.

  • Minor cleanup of the pcds-tag conda recipe

  • Relocate happi name length restriction for lcls devices to this package as a requirement on LCLSItem

  • Updated AT2L0 to use newer status formatting utilities.

  • Added prettytable as an explicit dependency. It was previously assumed to be installed with a sub-dependency.

  • Added test suite to try to instantiate all device classes with make_fake_device and perform status print formatting checks on them.

  • Added include_plus_sign option for get_status_float.

  • Perform continuous integration tests with pip-based installs, with dependencies installed from PyPI.

Contributors

  • cristinasewell

  • ghalym

  • jsheppard95

  • klauer

  • zllentz

v4.0.0 (2020-12-22)

API Changes

  • On our EPICS motor classes, remove the ability to use setattr for low_limit and high_limit.

  • SmarActOpenLoop: Combined scan_move_cmd and scan_pos into single EpicsSignal, scan_move, with separate read and write PVs.

Features

Device Updates

  • Instead of creating separated devices for Fundamental Frequency and 3rd Harmonic Frequency, we are now creating Attenuators that have both frequencies.

  • EpicsMotorInterface: Add metadata to various upstream Ophyd methods to clean up screens generated via Typhos.

  • Allow negative positions in LaserTiming and LaserTimingCompensation devices

  • Add LED power to the Mono device.

  • led metadata scalar range

New Devices

Bugfixes

  • sequencer.EventSequencer.EventSequence: Add an explicit put to SEQ.PROC to force the event sequencer to update with the new sequence.

  • Fix position handling in ReversedTimeToolDelay

  • AvgSignal will no longer spam exceptions text to the terminal when the signal it is averaging is disconnected. This will primarily be noticed in the BeamStats class, loaded in every hutch-python session.

Contributors

  • ZryletTC

  • cristinasewell

  • ghalym

  • tjohnson

  • zllentz

v3.3.0 (2020-11-17)

API Changes

  • The belens classes use pcdscalc to handle their calculations, changing the lens file specifications as follows:

    • Changed the read_lens to open a normal file instead of a .yaml file, and to be able to read one lens set at the time from a file with multiple lens sets.

    • Changed the create_lens methods to use a normal file instead of .yaml file, and also to be able to create a set with multiple sets of lens.

  • This is not expected to be breaking, as this feature is underused in the deployed environments.

Features

  • Added a LensStack.set_lens_set method to allow the user to choose what set from the file to use for calculations.

  • Added a factory function acromag_ch_factory_func to support the creation of happi entries from the questionnaire for a single acromag channel.

    • Added an alias for this function AcromagChannel.

  • Added a custom status print for motors by overriding the status info handler.

  • Added a new component for EpicsMotorInterface.dial_position

  • Added a new method EpicsMotorInterface.check_limit_switches to return a string visualization of the limit switch state.

  • Added a custom status print for slits by overriding the status info handler.

  • Added a helper function in utils.get_status_value to support getting a value from a dictionary.

  • Added a custom status print for PIM by overriding the status info handler.

  • Added a custom status print for IPM by overriding the status info handler.

Device Updates

  • SmarActOpenLoop: open loop steps signal changed to RO. Added some docs.

  • PCDSAreaDetectorTyphosBeamStats Now sub-classes PCDSAreaDetectorTyphosTrigger

  • TuttiFrutti: Change camera class to LasBasler

New Devices

  • BaslerBase: Base class for inheriting some Basler-specific PVs.

  • Basler: Class for “typical” Basler deployed in a hutch.

  • LasBasler: Class for more laser-specific Basler cameras.

  • MPODChannelHV, and MPODChannelLV for MPOD high voltage and low voltage channels, respectively.

  • Added the AcromagChannel that supports the creation of an Acromag Channel signal

  • Added mirror.XOffsetMirrorBend class for offset mirrors with benders.

  • Added mirror.XOffsetMirrorSwitch. This is nearly identical to mirror.XOffsetMirror but with no Bender and vertical axes YLEFT/YRIGHT instead of YUP/YDWN.

  • Added spectrometer.Mono, this includes all motion axes and Pytmc signals for SP1K1-MONO system

Bugfixes

  • lasers/elliptec.py: Fix conflict with BlueSky interface and ‘stop’ signal.

  • For event scheduling, ensure that we only try to put into the queue if event_thread is not None. This resolves some of the startup terminal spam in lucid.

  • PTMPLC ilk pv was incorrect, changed from ILK_STATUS_RBV to ILK_OK_RBV

  • Create a default status info message for devices that have errors in constructing their status.

Maintenance

  • Added more documentation to methods and LensStack class.

  • Refactored be lens classes to use pcdscalc.be_lens_calcs

  • Add laser imports to pcdsdevices.device_types. Test fixtures now verify imported laser devices’ tab completion settings.

Contributors

  • cristinasewell

  • ghalym

  • hhslepicka

  • jsheppard95

  • klauer

  • sfsyunus

  • tjohnson

  • zllentz

v3.2.0 (2020-10-23)

Device Updates

  • PCDSAreaDetectorTyphos: Added a camera viewer button to the class to open a python camera viewer for the camera. Removed the old ‘cam_image’ viewer in favor of this new viewer.

  • El3174AiCh: Added ESLO, EOFF fields, removed EGUH, EGUL

New Devices

  • SmarActTipTilt: Class for bundling two SmarActOpenLoop axis classes together into a single device for Typhos screen generation and interactive use.

  • Added VGC_2S, a new valve class that extends the VGC with the addition of a second setpoint and hysteresis.

Contributors

  • ghalym

  • tjohnson

v3.1.0 (2020-10-21)

API Changes

  • The SxrGmD device has been removed from beam_stats module. SXR has been disassembled and the GMD was moved into the EBD. Its MJ PVs was not working anymore.

Device Updates

  • Added RTD PVs to KBOMirror class for bender actuators

  • Added PTYPE PV to SmarAct class

  • Added metadata to SmarAct jog pvs for better screens

  • Added additional PVs to lasers/elliptec.py classes

  • TuttiFruttiCls: Added an option to specify the controller channel for Thorlabs Elliptec sliders.

  • Added the Thorlabs WFS class to the TuttiFrutti class.

New Devices

  • Add XYTargetGrid, an interactive utility class for managing a target grid oriented normal to the beam, with regular X-Y spacing between targets.

  • PCDSAreaDetectorTyphosBeamStats, a variant of PCSDAreaDetectorTyphos that includes centroid information and the crosshair PVs.

  • KBOMirror Class: Kirkpatrick-Baez Mirror class, X, Y, Pitch, Bender axes

  • FFMirror Class: Kirkpatrick-Baez Mirror without Bender axes. (Fixed focus)

  • LAMP motion Class for the LAMP endstation TMO. This includes the following motion axes:

    • Gas Jet X/Y/Z Axes

    • Gas Needle X/Y/Z Axes

    • Sample Paddle X/Y/Z Axes

  • A new LCLS class has been added to the beam_stats module that contains PVs related to the Lcls Linac Status, as well as a few functions to support with checking the BYKIK status, turning it On and Off, and setting the period.

  • SmarActOpenLoopPositioner: Class intended for performing Bluesky scans using open-loop SmarAct motors.

Bugfixes

  • Corrected X/Y error in KBOMirror and FFMirror classes

  • Fix issues with L2SI Reflaser Picos being unable to successfully move. This was because they were using the wrong motor class, which had extra PVs that would never connect.

  • Fixed a bug preventing instantiation of the Elliptec sliders in the TuttiFrutti device.

Maintenance

  • Add prefix and lightpath tests for KBOMirror.

Contributors

  • cristinasewell

  • jsheppard95

  • sfsyunus

  • tjohnson

  • zllentz

v3.0.0 (2020-10-07)

API Changes

  • The calculations for alio_to_theta and theta_to_alio in ccm.py have been reverted to the old calculations.

  • User-facing move functions will not be able to catch the LimitError exception. These interactive methods are not meant to be used in scans, as that is the role of bluesky.

Features

  • pcdsdevices.attenuator.AT2L0 now has a textual representation of filter status, and supports the move interface by way of transmission values.

  • SyncAxes has been adjusted to support scalar-valued pseudopositioners, allowing for more complex devices to be kept in lock-step motion.

  • PseudoPositioner position tuples, when of length 1, now support casting to floating point, meaning they can be used in many functions which only support floating point values.

  • Added signal annotations for auto-generated notepad IOC support.

Device Updates

  • Add event/trigger information to PPM, XPIM.

  • Reclassify twincat motor and states error resets as “normal” for accessibility.

  • Add PMPS maintenance/config PVs class for TwinCAT states devices, propagating this to all consumers.

New Devices

  • Adds LaserTimingCompensation (lxt_ttc) which synchronously moves LaserTiming (lxt) with TimeToolDelay (txt) to compensate so that the true laser x-ray delay by using the lxt-value and the result of time tool data analysis, avoiding double-counting.

  • Adds TimeToolDelay, an alias for DelayNewport with additional contextual information and room for future development.

  • Add LaserInCoupling device for TMO.

  • Add ArrivalTimeMonitor device for TMO.

  • Add ReflaserL2SI device for TMO.

Bugfixes

  • Fixed a typo in a ValueError exception in pcdsdevices.state.StatePositioner.check_value().

  • A read-only PV was erroneously marked as read-write in pcdsdevices.gauge.GaugeSerialGPI, component autozero. All other devices were audited, finding no other RBV-related read-only items.

  • The direction of LaserTiming (lxt) was inverted and is now fixed.

  • Allow setting of EpicsMotor limits when unset in the motor record (i.e., (0, 0)) when using EpicsMotorInterface.

Maintenance

  • Added a copy-pastable example to UnrelatedComponent to ease creation of new devices.

  • Catch LimitError in all pcdsdevices.interface.MvInterface moves, reporting a simple error by way of the interface module-level logger.

Contributors

  • cristinasewell

  • klauer

  • zlentz

v2.11.0 (2020-09-21)

API Changes

  • BaseInterface no longer inherits from ophyd.OphydObject.

  • The order of multiple inheritance for many devices using the LCLS-enhanced BaseInterface, MvInterface, and FltMvInterface has been changed.

  • Added pcdsdevices.interface.TabCompletionHelperClass to help hold tab completion information state and also allow for tab-completion customization on a per-instance level.

  • Presets add_hutch (and all similar add_*) methods no longer require a position. When unspecified, the current position is used.

Features

  • For pcdsdevices.pseudopos.DelayBase, added set_current_position() and its related component user_offset, allowing for custom offsets.

  • Epics motors can now have local limits updated per-session, rather than only having the option of the EPICS limits. Setting limits attributes will update the python limits, putting to the limits PVs will update the limits PVs.

  • Add PVPositionerDone, a setpoint-only PVPositioner class that is done moving immediately. This is not much more useful than just using a PV, but it is compatibile with pseudopositioners and has a built-in filter for ignoring small moves.

  • Moves using mv and umv will log their moves at info level for interactive use to keep track of the sessions.

  • Add user_offset to UnitConversionDerivedSignal, allowing for an arbitrary user offset in user-facing units.

  • Add user_offset signal to the pcdsdevices.lxe.LaserTiming, by way of UnitConversionDerivedSignal, offset support.

Device Updates

  • CCM energy limited to the range of 4 to 25 keV

  • CCM theta2fine done moving tolerance raised to 0.01

  • Beam request default move start tolerance dropped to 5eV

New Devices

  • Add WaveFrontSensorTarget for the wavefront sensor targets (PF1K0, PF1L0).

  • Add TwinCATTempSensor for the updated twincat FB with corrected PV pragmas.

Bugfixes

  • Adds hints to the pcdsdevices.lxe.LaserTiming class for LiveTable support.

  • umv will now properly display position and completion status after a move.

  • Tab completion for many devices has been fixed. Regression tests have been added.

  • Fix bug in PulsePickerInOut where it would grab only the first section of of the PV instead of the first two

  • Tweak will feel less “janky” now and give useful feedback.

  • Tweak now accepts + and - as valid inputs for changing the step size.

  • Tweak properly clears lines between prints.

  • Fix issue where putting to the limits property would update live PVs, contrary to the behavior of all other limits attributes in ophyd.

  • Fix issue where doing a getattr on the limits properties would fetch live PVs, which can cause slowdowns and instabilities.

  • Preset methods are now visible when not in engineering mode. (#576)

  • Rework BeamEnergyPositioner to be setpoint-only to work properly with the behavior of the energy PVs.

  • FltMvPositioner.wm will now return numeric values if the position value is a tuple. This value is the first element of the tuple, which for pseudo positioners is a value that can be passed into move and have it do the right thing. This resolves consistency issues and fixes bugs where mvr and umvr would fail.

  • Fixed a race condition in the EventSequencer device’s status objects. Waiting on these statuses will now be more reliable.

  • Fix issue where converting units could incur time penalties of up to 7 seconds. This should take around 10ms now.

  • Fix bug on beam request where you could not override the tolerance via init kwarg, despite docstring’s indication.

Maintenance

  • Establish DOC conventions for accumulating release notes from every pull request.

  • Tweak refactored for maintainability.

  • Use more of the built-in ophyd mechanisms for limits rather than relying on local overrides.

Contributors

  • klauer

  • zllentz

  • zrylettc

v2.10.0 (2020-08-21)

Features

  • Add LookupTablePositioner PseudoPositioner base class for moves based on a calibration table.

  • Add UnitConversionDerivedSignal as a Signal class for converting EPICS units to more desirable units for the user.

  • Add units to the IPython prettyprint repr.

Device Updates

  • Add Vernier integration into the CCM class using BeamEnergyRequest.

New Devices

  • Add support for Thorlabs WFS40 USB Wavefront Sensor Camera.

  • Add LaserEnergyPositioner PseudoPositioner (lxe) using LookupTablePositioner.

  • Add LaserTiming PVPositioner (lxt) using UnitConversionDerivedSignal.

  • Add BeamEnergyRequest PVPositioner for requesting beam energies in eV from ACR.

v2.9.0 (2020-08-18)

Features

  • Devices will now show detailed status information when returned in the ipython terminal.

Device Updates

  • Update docs on FSV fast shutter valve

  • Update AT2L0 with state positioners and calculator

  • Update Elliptec classes for cleaner implementation

  • Add missing CCM motors and fix the energy motion (no vernier yet)

  • Add HDF5 plugin to PCDSAreaDetectorEmbedded

New Devices

  • Add support for SmarAct motors

  • Add attenuator calculator device for Ken’s new calculator

  • Add support for TuttiFruitti diagnostic stack

Bugfixes

  • Fix typo in PV name of BeckhoffJet slits

v2.8.0 (2020-07-24)

Features

  • Expand variety schema support and add dotted dictionary access.

Device Updates

  • Update various vacuum char waveforms with string=True for proper handling in typhos.

  • Add various missing vacuum PVs to various vacuum devices.

  • Switch twincat state device error reset to kind=config so it shows up by default in typhos.

  • Update LCLS-II imagers to use the new AreaDetectorTyphos.

  • The following devices now have lightpath support: - FeeAtt - FEESolidAttenuator - XOffsetMirror - PPM - XPIM - PowerSlits - Kmono - VRC and all subclasses, such as VGC - VFS

  • Update XOffsetMirror y_up, x_up, and pitch to kind=hinted (previously normal). These axes are usually the most important.

  • Rename PPM.y_states and XPIM.y_states to target for reduced redundancy in screens. The only name is aliased via a property.

  • PowerSlits now have a feature set on par with the old slits.

  • Update VFS valve_position and vfs_state to kind=hinted (previously normal) for more focused statuses.

New Devices

  • Add support for Qmini Spectrometer.

  • Add AreaDetectorTyphos class for optimized screen view of most used area detector signals.

  • Add RTDSL0 and RTDSK0 to support the rapid turnaround diagnostic station configurations.

Bugfixes

  • Fix issue with failing callback in IMS from upstream ophyd change.

Maintenance

  • Switch from using cf-units to pint for portability.

  • Add the following helpers: - interface.LightpathMixin to help establish lightpath support. - signal.NotImplementedSignal to help devices that will expand later. - signal.InternalSignal to help implement read-only signals that can

    be updated by the parent class.

    • utils.schedule_task to help interface with the ophyd callback queues.

  • The slits module has been refactored to accomodate both old and new slits.

v2.7.0 (2020-07-01)

Features

  • Add component variety metadata and schema validation.

Device Updates

  • Add many components to PIPPLC class, adjust component kinds to be more appropriate, and fix errant PV names.

  • Update component names on VVC for clarity, and pvnames for accuracy.

  • Update XPIM class to reflect additional IOC features.

  • Update docs and metadata on all LCLS 2 imager classes.

  • Update spammy TwinCAT state config parameters to omitted.

  • Add interlock device information to VGC.

  • Add SPMG field to BeckhoffAxis.

New Devices

  • Add SxrTestAbsorber class.

  • Add ZoomTelescope to support MODS zoom telescope.

  • Add El3174AiCh to support EK9000 module.

  • Add EnvironmentalMonitor to support MODS environmental monitors.

  • Add support for ThorLabs Elliptec motors for MODS.

  • Add Ebara_EV_A03_1 class for specific roughing pump support.

  • Migrate SDS jet tracking classes into this repo.

  • Add VFS class to support fast shutters.

Maintenance

  • Remove monkeypatch of EventSequence in tests, as it was no longer needed.

  • Update dependency from cf_units to its renamed cf-units.

  • xfail test that fails with bluesky=1.6.2

v2.6.0 (2020-05-21)

Features

  • happi entry points have been moved to this library for proper modularization.

  • Area detectors embedded inside of larger devices have been made considerably smaller to improve performance in other applications, for example in typhos.

Bugfixes

  • Provide FakePytmcSignal for testing in external libraries. This fixes issues with fake devices not working if they contain PytmcSignal instances outside of the pcdsdevices testing suite.

  • Fix various issues related to moving to ophyd v1.5.0.

  • This library is now importable on win32.

Docs

  • Docstrings now conform to the new pcds standards.

v2.5.0 (2020-04-15)

Features

  • Add classes for Goniometers, Von Hamos spectrometers, Beckhoff liquid jets, TimeTools, and PFLSs

  • Add UnrelatedComponent as a helper for writing devices with many prefixes

Bugfixes

  • Fix TwinCAT states enum states

  • Add missing packages to requirements file

  • Compatibility with newest ophyd

Misc

  • Add pre-commit hooks to help with development flow

  • Add license file to manifest

  • Eliminate m2r docs dependency

v2.4.0 (2020-03-12)

Features

  • Add PytmcSignal

  • Add PPM, XPIM, XOffsetMirror, and Kmono classes

  • Update IPM and PIM modules to better match physical devices

  • Add various helper classes for TwinCAT devices

  • Stubs created for attenuators, RTD, and PowerSlit

  • Make cmd_err_reset in BeckhoffAxisPLC accessible in Typhos

API Changes

  • Changed set_point_relay to pump_on_status, at_vac_sp to at_vac_setpoint and added pump_state to PIPPLC

  • Changed at_vac_sp to at_vac_setpoint, at_vac_hysterisis to setpoint_hysterisis, and added mps_state to VGC

Bugfixes

  • Make protection_setpoint writeable in GCCPLC

  • Make state writeable in VCN

Misc

  • Allow build docs failure to speed up overall CI

  • Specify old working conda version as temporary solution for build failures

v2.3.0 (2020-02-05)

Features

  • Make everything compatible with the upcoming ophyd v1.4.0

  • Add be lens calculations port from old python system

v2.2.0 (2020-01-22)

Features

  • Add a bunch vacuum-related classes for L2SI

Misc

  • Fix an issue with the doctr deploy key

v2.1.0 (2020-01-10)

Features

  • Add screen method to PCDSMotorBase to open the motor expert screen

  • Add tab completion filtering via whitelists as the first feature of the engineering_mode switch. This was implemented because the tab completion on ophyd devices is extremely overwhelming. Use set_engineering_mode(bool) to turn engineering_mode on or off. The default is “on”, which means “everything is normal”. Turning engineering_mode off enables the whitelist filtering, and in the future may also have other effects on the user interface.

  • Add dc_devices module for components from the new DC power system. This currently contains the ICT and related classes.

Misc

  • Fixed a race condition in the tests

  • Clean up the Travis CI configuration

  • Pin pyepics to >=3.4.1 due to a breaking change from python 3.7.6

v2.0.0 (2019-06-28)

Features

  • Add gauge and pump modules

  • Add Acromag and Mesh classes

  • Add motor subdevice to state record devices

  • Add status string to BeckhoffAxis

API Breaks

  • State devices no longer have the readback signal, as it is redundant with the new motor subdevice

  • PCDSDetector has been renamed to PCDSAreaDetector for clarity. PCDSDetectorBase is also renamed to PCDSAreaDetectorBase.

Bugfixes

  • Fix PVs in BeckhoffAxis

Misc

  • Officially build for python=3.7

v1.2.0 (2019-03-08)

Features

  • Add all common plugins to PCDSDetector

  • EventSequencer now accepts human-readable sequences

Fixes

  • Fix debug PV names in BeckhoffAxis

Misc

  • Add a py37 build to the CI

  • Remove outdated hotfix for FakeEpicsSignal in tests

  • Fix misc testing errors

v1.1.0 (2018-10-26)

Features

  • Support for reading and writing sequences to and from the EventSequencer

  • Add Motor factory function for choosing which motor class to use based on the text in the prefix.

Bugfixes

  • IMS class will no longer get its .SPG field stuck on paused or stopped when a scan is interrupted. Scans will start even if these fields are blocked.

  • Update out-of-date requirements.txt file for pip

  • Pin matplotlib to <3 to avoid import incompatibility pitfalls, and confine the matplotlib imports to function scope instead of module scope to avoid having a backend be set on import.

v1.0.0 (2018-10-12)

Features

  • Display current position in umv progress bars

  • Added ophyd Kind specification to every device in the library

  • Added .DESC field to standard motor interface

  • Added trigger to event sequencer and other changes to make it more useful in scans

  • Added CCM class

  • Added BeckhoffAxis class for the Beckhoff ADS-based motor record

  • Added evr Trigger class for configuring evr triggers

  • Added FeeAtt class for the wonky FEE attenuator

  • Clean up Reflaser classes

  • Added LensStack class python2 port for the xyz focusing assembly (not fully complete)

  • Added DelayStage class for laser delay stages

  • Added SyncAxes class for synchronizing axes e.g. tables, ccm

  • Added keypress utilities python2 port

  • Added wm_update python2 port to FltMvInterface. This is essentially a camonitor.

  • Added mv_ginput python2 port to FltMvInterface

  • Added per-class icons to be picked up by lightpath and other applications

Bugfixes

  • Use IMAGE2 instead of IMAGE1 as the area detector default, because this is the low rate or binned image. Avoid sending huge images quickly through python processes.

  • Prevent issue where presets from same-named device would interfere with eachother.

  • Attenuator subclasses now have sane names (previously Attenuator1234567, for example).

  • Split the XPP and XCS lodcm foils (they are different).

  • Warn the user about using certain classes directly when they need to be subclassed.

  • Raise errors for any invalid state in a state positioner, not just the Unknown state.

  • Add SUB_STATE subscription types for OffsetMirror and Attenuator

  • Valve interlock had inverted logic

Maintenance

  • Standardize component imports as import Component as Cpt

  • Move some interlocks into check_value instead of ad-hoc locations

  • Misc travis fixes and improvements

  • State devices are more forgiving with certain inputs

  • Clean up the Slit interface for lightpath

API Breaks

  • Rework and improve various simulated hardware, removing old sim modules.

  • Require some newer modules

v0.8.0 (2018-05-27)

Features

  • Added AvgSignal class. This can be used when you want to run a callback on a rolling average of a Signal. (#227)

  • Added an average of the gas detector energy to the BeamStats class (#227)

  • Implemented motor .SPG field from LCLS motor record into PCDSMotorBase (#236)

Bugfixes

  • Fix a bug where the LODCM class had a readback signal with an invalid PV. (#232)

  • Fix a bug where the tests would never pass, ever (#238)

v0.7.0 (2018-05-08)

Features

Bugfixes

  • Fix a bug where preset saving could break the session if passed bad arguments (#218)

  • Fix a bug where malformed states could fail silently or cryptically (#216)

  • Fix a bug where the mirror states were reversed (#215)

  • Fix a bug where IMS velocity limits were ignored (#209)

v0.6.0 (2018-04-05)

Features

  • Improved documentation (#170)

  • Recreated the presets feature from existing hutch_python deployments. This allows operators to record the positions of anything that implements the FltMvInterface to a YAML file. This helps keep track of various important experimental motor positions that are too dynamic to place in EPICS. (#187)

Bugfixes

  • Fixed a rare race condition in the testing suite (#189)

CI

  • Testing suite now uses the conda-forge build of ophyd instead of NSLS-II lightsource2-tag (#191)

v0.5.0 (2018-03-08)

API Changes

  • The pcdsdevices.EpicsMotor has been replaced by pcdsdevices.PCDSMotorBase and three child classes IMS, Newport and PMC100. This is an attempt to have a reasonable MRO for the discrepenacies between all our different implementations of the EPICS Motor Record (#167)

  • Due to the growing complication of the Daq class and related utilities, all related functions were moved to https://pcdshub.github.io/pcdsdaq (#168)