Releases: pcdshub/pcdsdevices
v10.3.0 (2026-02-17)
New Devices
- Adds
TwinCATMotorInterface,TwinCATAxis, andTwinCATAxisEPSto support
new motion abstraction interface. Also adds corresponding typhos screen support.Expand commentComment on line R11
Device Features
- Adds
insert,remove,check_inserted,check_removed,inserted,andremovedmethods/properties
to DCCM class which are proxies for the corresponding members of DCCM.tx_state for convenience
Contributors
Full Changelog: v10.2.1...v10.3.0
v10.2.1 (2026-01-26)
This is a maintenance only release, no functional changes were made.
What's Changed
Full Changelog: v10.2.0...v10.2.1
v10.2.0 (2026-01-22)
Device Features
SmarAct.detailed: Replace scan_voltage_set widget with PyDMSlider for more intuitive use.- add
LightPathInOutMixintoDCCMin dccm.py
Bugfixes
QminiGUI: prevent subscribed methods from spawning infinite exception windows- Fixed pv names for gbs rtds
Contributors
Full Changelog: v10.1.0...v10.2.0
v10.1.0 (2025-11-20)
Device Features
-
Added component to
ReflaserL2SIfor laser shutdown pv -
QminiSpectromemter.embedded and .detailed screens now allow recoloring the graph and using file dialogs for saving spectra
-
Increase TMO Spectrometer Attenuator targets from 9 to 12
-
Various
DCCMupdates- Updated
DCCMEnergyui files to use th1 properties and new limit_travel attributes - Added
DCCMTargetcomponent to DCCM class and reordered components - Added TXI option to
DCCMEnergyWithVernier - Removed inverse from
DCCMEnergyWithVerniersince it was identical toDCCMEnergy.inverse - Made energy_with_vernier and energy_with_acr_status formatted components to pass hutch, acr_status_suffix, and acr_status_pv_index
- Added Si333 dspacing constant and ability to switch between it and Si111
- Added callback to update DCCMEnergy.energy.readback
- Updated
-
Added support for Leviton & Sentry4 PDU Sensors as they were previously unused and untested. The screen now shows the analog readouts and alarms.
New Devices
DREAM_Gas_Jet_Slits: Single device holding all DREAM stagesTM1L2: derived from the ArrivalTimingMonitorClass, but has two rtds, no flow sensor, and six targets in addition to the out position
Bugfixes
ClippedScale: A subclass of PyDMScaleIndicator to solve the issue of the blade widgets for SL2K4 "randomly" appearing completely blackSL2K4: Labels no longer clip in control room screensPrefocus: add alias for x_motor and y_motor
Maintenance
SL2K4: Added labels for North/South and Top/Bottom
Contributors
Full Changelog: v10.0.0...v10.1.0
v10.0.0 (2025-10-16)
API Breaks
- Group all dream air motions into one class and one gui:
TMODream- Removes
DREAM_MC_Y,DREAM_CoilMover,DREAM_GasJet,DREAM_GasNozzle
- Removes
Device Features
- Added
instrumentargument toLcls2LaserTimingwhich is added to user_offset PV if defined - Change
TMOSpectrometerSOLIDATTStatestarget count from 5 to 9 TMOSpectrometer: add back an old motor under the new name "fzp_piranha_rot"
New Devices
DREAM_Sample_Paddle: Controls sample paddle X, Y, Z, and Ret motorsTMODream: Combines previous DREAM motion classes
Bugfixes
- Swapped indicator and background colors for slits in SL2K4Slits.ui
- Added prefix for wave8 component of
BeckhoffIntensityProfileTargetso PVs connect
Contributors
Full Changelog: v9.0.0...v10.0.0
v9.0.0 (2025-08-05)
API Breaks
EllBasenow requires 'port' as a mandatory arg on initialization.- Removed brackets for in PVs for
Wave8V2ADCSamples.
Device Features
-
Added
hla_enabledcomponent toLcls2LaserTiming. -
Added
hla_checkdecorator, used by_setup_move, to raise an exception if hla is disabled. -
Add typhos template for
DCCMEnergyto make sure the DCCM screen is usable. -
SmarPod:- use
PVPositionerIsCloseinstead of raw records - add mutli axis move
- add reachability checks
- use
-
Added SL3K4 motors to
dream_motion(DREAM_SL3K4) -
Added
integral_signedcomponent toWave8V2ADCDelayLanes
New Devices
-
AT3K2: Custom Solid Attenuator w/ 2 blades and 8 filters on each blade. -
DCCM: Double Channel Cut Monochrometer from XCS. -
GratingBeamSplitterStates: Grating Beam Splitter target state controls. -
BeckhoffIntensityProfileTarget: Intensity Profile Monitor (beckhoff version). -
SL2K4Slits: is a BeckhoffSlits device with new PVA based camera viewer. -
lasers.ek9000.SimpleShutter: A repurposed LSS shutter, not used in safety applications.pcdsdevices.happi.containers.SimpleShutter: its corresponding happi container.
-
Added generic
PDU(Leviton, Sentry4) andTripplitePDUdevice classes, along with detailed device screens.
Maintenance
- Adds warning to docstring in
EllBaseon port defaults based on common IOC - Sync presets when Presets.positions is accessed.
Contributors
Full Changelog: v8.8.1...v9.0.0
v8.8.1 (2025-05-13)
Device Features
- Changes gas needle y to BeckhoffAxisEps class instead of regular BeckhoffAxis
- Adds new component event_trip to MPODApalisChannel
- Updates the target number for tm2k4
New Devices
- Adds new devices for dream motion
DREAM_MC_Y: main chamber motion classDREAM_CoilMover: coil motor controlDREAM_GasJet: gas jet X, Y motorsDREAM_GasNozzle: gas nozzle X, Y, Z motors
- Adds FMS related devices, focusing on Raritan sensors
SRCControllerRaritanSensorFloorPCWFlowPCWTempAMBTempRack
Contributors
Full Changelog: v8.8.0...v8.8.1
v8.8.0 (2025-03-27)
API Breaks
EllBase: Calling this constructor now requires channel to be declared as a mandatory arg. It will no longer default to channel=1.
Library Features
- Added
SmarAct.detailed.ui screen - Accompanying
SmarAct.detailed.py screen to handle closed loop and picoscale - Added
SmarActTipTilt.embedded ui and py screens for operational support - Designed and implemented huge improvements for all the SmarAct typhos screens, a monumental win for laser folk.
Device Features
SmarAct: fix TTZ_THRESHOLD setter in detailed screenSmarActTipTilt: Added invert_tip and invert_tilt check boxesSmarActTipTilt: Added methods to flip which button corresponds to STEP_FORWARD and STEP_REVERSE respectivelySmarActTipTilt: added step_size to embedded screenSmarActEncodedTipTilt: added embedded screensSmarActEncodedTipTilt: bundles open-loop and closed-loop motionSmarActEncodedTipTilt: wraps the home and calibrate sequence into single methodsSmarActEncodedTipTilt: addchannel_state_raw,calibrating, andreferencingsignals- Added long_name fields to various SmarAct classes in pcsdevices.epics_motor
LasBasler: Adds long_names to signalsLasBasler: Addssave_settingandload_settingsignals for saving and loading settings- Change gas needle gui name to be consistent with PLC gas jet name
- Made
m_pi_up_encandg_pi_up_enccomponents inspectrometer.Monokind ommitted instead of normal so they aren't on gui - Added
m_pi_enc_rmsandg_pi_enc_rmscomponents tospectrometer.Mono - Added
pitch_enc_rmscomponent tomirror.XOffsetMirrorBendto override the inherited component
frommirror.XOffsetMirrorwith a different pv and docstring - Add
cvmi_bootstrapmodule for the special CVMI RP bootstrapping experiment.
Rename the four axis names per request from scientists and remove three axes. Ell6andEll9: overload done_comparator to not use numpy.isclose()- Adding error_message component to
EllBasefor typhos to display error messages
New Devices
- The
DCCMonois a new device to support SP1L0:DCCM installed on L0S09 in the FEE. This SP1L0 is the first of many new Double Channel Cut Monochromators (DCCMs) that will be coming to LCLS in the future. This device can also be used for other DCCMs such as the L2HE DXS HHLMs (High Heat Load Monochromators) and other DCCMs.
Bugfixes
- Improves error handling for presets when the position is unknown or uninitialized.
TwinCATStatePositioner.reset_cmdis now aPytmcSignalwith io='io' instead of anEpicsSignalto properly display the RBV readback PV in typhos.
Maintenance
- Adjusts
MPODApalisChannelto set its limits based on the parent MPODApalisModule settings - Adds option to defer preset path loading until needed. Presets will
now load when tab-completion or preset-related attributes are accessed.
Contributors
Full Changelog: v8.7.0...v8.8.0
v8.7.0 (2024-12-20)
API Breaks
FFMirrorZcomponentschin_left_rtd,chin_right_rtd, andchin_tail_rtdare 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
AvgSignalto reset itself on trigger,
then wait a duration before marking the trigger as complete.
This lets you useAvgSignalin a bluesky plan as a way to
accumulate the time average of a fast-updating signal at each
scan point. To enable this, provide adurationargument.
Device Features
KBOMirrorHEgets 2 new RTD readouts for RTDs installed on the mirror inside vaccum.- Add
calibrated_ujandmanual_in_progresscomponents topcdsdevices.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, andis_tripcomponent signals to
MPODApalisChannel. These have been helpful during operations at TMO.
last_voltage_setwill also get avoltage_setpointalias, which is the
original name as used in TMO's scripts. - Add proper control limits to
MPODApalisChannel.voltageandMPODApalisChannel.current.
This will give useful errors when someone tries to put values outside of the
channel's supported range. - Adjust
pcdsdevices.tmo_ip1.CalibrationAxisfrom 5 -> 7 -> 8 states pcdsdevices.spectrometer.Mononow has aMonoGratingStatescomponent (grating_states)pcdsdevices.mirror.XOffsetMirrorSwitchnow has aTwinCATMirrorStripecomponent (coating)- Add
FDQtopcdsdevices.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.FFMirrornow has aTwinCATMirrorStripecomponent (coating)FFMirrorZinherits these and sets themNone
pcdsdevices.slits.ExitSlitsnow has anFDQcomponent (flow_meter)- Allow init-time configuration of phase shifter inversion and setpoint limits
forLaserTimingandLCLS2LaserTimingdevices. - Improve
QminiSpectrometer.embedded.ui - Add
QminiSpectrometer.detailed.ui - Add
save_data()function and accompanying signals toQminiSpectrometerfor use in the UIs.
New Devices
HxrDiffractometerfor 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 ReadbackBeckhoffPneumaticFDQ: Beckhoff Pneumatics with a flow meter for cooling readbackVCN_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'sresponsivitycomponent 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 extensionTprMotor.readbackandTprTrigger.ns_delaynow 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 theMPODApalisChannel.set_voltagemethod, 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.uitoSmarPod.detailed.uiso that it will be
properly discovered bytyphosfor theSmarPodclass. - Replace the
velocity_base(.VBAS) signal in theMMC100class
with a baseSignalto avoid a PV disconnected error
that was preventing moves.
TheMMC100record does not have this field.
With this fix,MMC100devices can move again.
Maintenance
- reorder
cool_flow1andcool_flow2components inKBOMirrorHEto the end of the list. - reorder
mirror_temp_[l,r,tail]components inFFMirrorZto 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
MPODApalisChannelchanges. - Restore
PIPPLC'sqpc_namecomponent. XOffsetMirrorBendcoatingchanged toTwinCATMirrorStripefromMirrorStripe2D2P- Add unit tests for the new
AvgSignalfeatures.
Contributors
v8.6.0 (2024-09-16)
API Breaks
- Removed
qpc_name(:VPCNAMEPV).
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.