Releases: pcdshub/pcdsdevices
Releases · pcdshub/pcdsdevices
v6.0.0 (2022-05-03)
API Changes
MultiDerivedSignal
andMultiDerivedSignalRO
calculation functions
(calculate_on_get
andcalculate_on_put
) now take new signatures.
Calculation functions may be either methods on anophyd.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
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
variantMultiDerivedSignal
. 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 correspondingEpicsSignal
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 doingbluesky
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
andEpicsSignalROEditMD
. (#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
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 todetailed_tree.ui
.- HelpfulIntEnum has been vendored from pcdsutils. This will be
switched to an import in a future release.
Contributors
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)
v5.0.0 (2021-11-15)
API Changes
TwinCATStateConfigAll
has been removed. This was considered an
internal API.isum
components have been renamed tosum
in IPM detector classes.- The motor components for PIM classes have been shortened by removing
_motor
from their names (e.g.zoom_motor
is nowzoom
). - 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
andEpicsSignalROEditMD
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 newTwinCATStateConfigDynamic
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 theUpdateComponent
,
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
to15.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 theat_vac
setpoint value
for upstream and downstream gauges separately. - Add the
user_enable
signal (bUserEnable
) to theBeckhoffAxisPLC
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 theArrivalTimeMonitor
class that has an extra
state (7). The realTM2K2
has one extra target holder compared to the
standardArrivalTimeMonitor
. BeckhoffAxis_Pre140
has been added to support versions oflcls-twincat-motion
prior tov1.4.0
. This has been aliased toOldBeckhoffAxis
for backcompat.- Created
Bronkhorst
andSensiron
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 confusingNameError
. - 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-onlysuccess
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 toBaseInterface
to return the device's status
string. This is useful for recording device status in the elog. - Add
typhos
templates forBeckhoffSlits
andPowerSlits
using existing
elements from their normalpydm
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 withGroupDevice
. - Edit stage/unstage and the class definition on
SlitsBase
to be
compatible withGroupDevice
- Change
CCM
from aInOutPositioner
to a normal device with a
LightpathMixin
interface. Being a positioner that contained a bunch
of other positioners, methods likemove
were extremely ambiguous
and confusing. Theinsert
andremove
methods are re-implemented
as they are useful enough to keep. - Split
CCMCalc
intoCCMEnergy
andCCMEnergyWithVernier
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 theCCM
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
theegu
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