Pcdsdevices

Latest version: v8.7.0

Safety actively analyzes 714815 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 12

8.7.0

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
---------------
- `KBOMirrorHE` gets 2 new RTD readouts for RTDs installed on the mirror inside vaccum.
- Add `calibrated_uj` and `manual_in_progress` components to `pcdsdevices.pim.PPMPowerMeter`
-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.
- Add proper control limits to `MPODApalisChannel.voltage` and `MPODApalisChannel.current`.
This will give useful errors when someone tries to put values outside of the
channel's supported range.
- Adjust `pcdsdevices.tmo_ip1.CalibrationAxis` from 5 -> 7 -> 8 states
- `pcdsdevices.spectrometer.Mono` now has a `MonoGratingStates` component (`grating_states`)
- `pcdsdevices.mirror.XOffsetMirrorSwitch` now has a `TwinCATMirrorStripe` component (`coating`)
- Add `FDQ` to `pcdsdevices.spectrometer.TMOSpectrometer` (`flow_meter`)
- Recover sp1k4 attenuator targets number from 3 to 5
- Add one additional (SiN) target into TM1K4 (8 targets, 9 states with OUT)
- `pcdsdevices.mirror.FFMirror` now has a `TwinCATMirrorStripe` component (`coating`)
- `FFMirrorZ` inherits these and sets them `None`
- `pcdsdevices.slits.ExitSlits` now has an `FDQ` component (`flow_meter`)
- Allow init-time configuration of phase shifter inversion and setpoint limits
for `LaserTiming` and `LCLS2LaserTiming` devices.
- Improve ``QminiSpectrometer.embedded.ui``
- Add ``QminiSpectrometer.detailed.ui``
- Add ``save_data()`` function and accompanying signals to `QminiSpectrometer` for use in the UIs.

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
-----------
- reorder `cool_flow1` and `cool_flow2` components in `KBOMirrorHE` to the end of the list.
- reorder `mirror_temp_[l,r,tail]` components in `FFMirrorZ` to align with other temperature sensors.
- Make test_at2l0_clear_errors pass more consistently on CI.
- Add a utility for checking signal values that don't update promptly.
- Added unit tests to cover the `MPODApalisChannel` changes.
- Restore `PIPPLC`'s ``qpc_name`` component.
- `XOffsetMirrorBend` `coating` changed to `TwinCATMirrorStripe` from `MirrorStripe2D2P`
- Add unit tests for the new `AvgSignal` features.

Contributors
------------
- aberges-SLAC
- KaushikMalapati
- c-tsoi
- jozamudi
- mseaberg
- nrwslac
- tongju12
- zllentz

8.6.0

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

8.5.0

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

8.4.0

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
-----------
- Adds `li2k4` as `TMOLaserInCouplingTwoDimension`, with the x and y motors supported (no states yet).
- Adds `Lcls2LaserTiming`: New class supporting control of laser timing for the OPCPA laser locker system.
- Adds `SmarActEncodedTipTilt` to the `pcdsdevices.epics_motor` submodule.
- Adds `SmarPod` and related devices in new `pcdsdevices.smarpod` submodule.
- Adds a `CCMEnergyWithACRStatus` class to the `pcdsdevices.ccm` submodule, a new variant of `CCMEnergy` that waits for ACR status before marking moves as complete.

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

8.3.0

Features
--------
- Enabled the use of custom EPS screens for Beckhoff axes via the `BeckhoffAxisEPSCustom` class in `pcdsdevices.epics_motor` and the accompanying ui template file.

Device Updates
--------------
- Added ``flow_meter`` to `ArrivalTimeMonitor` in `pcdsdevices.atm`
- Added ``flow_meter`` to `AttenuatorSXR_Ladder` in `pcdsdevices.attenuator`
- Added ``flow_meter`` to `AttenuatorSXR_LadderTwoBladeLBD` in `pcdsdevices.attenuator`
- Added `WaveFrontSensorTargetCool` and `WaveFrontSensorTargetFDQ` to `pcdsdevices.device_types`
- Added flow sensor components to `FFMirror` in `pcdsdevices.mirror`
- Added piezo pitch motors to the `ExitSlits` in `pcdsdevices.slits`

New Devices
-----------
- Added `PhotonCollimator` to readout `flow_switch` in new module `pcdsdevices.pc`
- Added `WaveFrontSensorTargetFDQ` to read out the `flow_meter` in `pcdsdevices.wfs`
- Added `MFXATM` to `pcdsdevices.atm` for the unique atm unit in the MFX hutch.

Bugfixes
--------
- Fixed an issue where `AT2L0.clear_errors` would not run properly.

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

8.2.0

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
--------------
- added `J120K` to `SxrTestAbsorber`, `XPIM`, `IM2K0`, `PowerSlits`
- Restructured `Qadc134` with new `Qadc134Common` and `QadcLcls1Timing` parent
classes.

New Devices
-----------
- `PPMCoolSwitch` ppms with cooling switch not a meter.
- `WaveFrontSensorTargetCool` WaveFrontSensors with a cooling switch.
- `J120K` a device class for a cooling switch.
- Added `K6514`, `GMD` (previously unimplemented), `GMDPreAmp`, and `SXRGasAtt`, taken from
``/cds/group/pcds/pyps/apps/hutch-python/tmo/tmo/tmo_beamline_control.py`` with some modifications
- `Qadc134Lcls2`: A class for LCLS-II timing versions of the FMC134
- New `TprTrigger` and `TprMotor` device classes in `tpr` submodule,
analogous to `Trigger` and `EvrMotor` from `evr` submodule

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

Page 1 of 12

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.