History of changes in the apstools project. Project milestones describe future plans.
Released 2025-10-13.
- Planar undulator has HPMU version (not HDMU version).
Released 2025-10-09.
- ApsMachineParametersDevice cannot get cycle name, current date not in data table.
- SpecWriterCallback2 added extra data point when baseline stream was present.
- Now testing with Python versions 3.10 - Py3.13. (still pinning databroker)
- STI undulator uses 'STIVersionM' PV
- Overhaul test_labels_to_streams.py and test_listruns_class.py
Released 2025-07-03.
- Add device support for db_2slit_soft database (different than db_2slit).
- Fix KeyError in SpecWriterCallback2 for edge case.
- Add kwargs to shutters, such as ApsPssShutter.
Released 2025-06-05.
- Added AcsMotor for AcsMotionControl motor support.
- Added HHLApertureACS High Heat Load Aperture.
- Added mb_creator()
- KeyError from callback caused failure of lineup2() plan.
- SpecWriterCallback2 attribute 'data_labels' was never initialized.
- SpecWriterCallback2 raised ValueError when appending to SPEC file that has no runs.
- Added HHLApertureBase for high heat-load apertures.
- Apply @deprecated decorator to make these markings more visible.
- SpecWriterCallback2: refactor how to get SPEC data labels.
- Switch to use numpy >= 2.
Released 2025-04-29.
- Add 'validate_ports' kwarg to 'ad_creator'.
- Hoist area detector 'BadPixelPlugin' from USAXS. (It's not in ophyd yet.)
- Recover diffractometer configurations in FileWriterCallbackBase.
- Fix area detector staging of unconfigured HDF5 plugin.
- Fix problem with detector selection for lineup2() reported by USAXS.
- Fix unit test involving package version string length.
- Now testing with Python versions 3.9 - Py3.13. (still pinning databroker)
- Removed 'lifetime' component from 'aps_machine' device.
- Refactor cleanupText.
- Refactor unit test for change in upstream ophyd-registry findall().
- Remove testing requirement of ophyd-registry package.
- Unit testing was taking ~1/2 hour to complete.
- Update project packaging and installation procedures.
Released 2025-01-11.
- Add 'utils.xy_statistics()' (support 'plans.lineup2()').
- Add 'utils.dynamic_import()' (support 'devices.ad_creator()' from device file).
- Add 'utils.MMap' (support 'plans.lineup2()').
- Add 'utils.peak_full_width' (support 'plans.lineup2()').
- In some cases, 'plans.lineup2()' appeared to succeed but motor was not in
- aligned position.
- In unusual cases (with fake ophyd simulated devices),
- 'devices.PVPositionerSoftDone' used an invalid subscription event type.
- In 'ad_creator()', convert text class name to class object.
- Refactor 'plans.lineup2()': new statistics computations & improve
- diagnostics.
- Use of 'PySumReg.SummationRegisters' to be removed in next major release.
Bugfix released 2024-10-25.
- Allow imports to succeed when developing or testing with databroker v2.0+.
- In SpecWriterCallback2, set spec_filename in constructor.
- Use 'NeXus_release' file attribute in 'nxwriter' callback.
- 'EpicsMotorLimitsMixin' features are now part of 'ophyd.EpicsMotor'.
released 2024-09-21
- Add ad_creator() and ad_class_factory() -- Easy to create area detector objects.
- Add SpecWriterCallback2 (writes point-by-point to file).
- Support for most APS-U undulators. (All but for 29-ID.)
- Area detector image shape of (0, 0, 0) caused listdevice() to fail.
- PVPositionerSoftDone should set done=False at start of move.
- RuntimeError from listdevice() with area detector object.
- PV name typo in synApps SaveData() class. And capitalization.
- CI workflow artifact cache errors.
- Add ramp temperature and output enable to PTC-10.
- Remove Anaconda defaults channel from environment per TOS.
- Replace unit tests marked by 'local' decorator.
- Unit tests now support Python version 3.9, 3.10, & 3.11.
- Update common PVs for APS-U era.
released 2024-07-10
- Add new APS PlanarUndulator device.
- Add new APS Revolver_Undulator device.
- Add new APS STI_Undulator device.
- Add new APS Undulator2M device.
- Add new APS Undulator4M device.
- Describe
.component_namesin What are the objects to control? - Pin numpy<2 because upstream dask package needs a fix.
- Removed ApsUndulator and ApsUndulatorDual devices.
- Removed top-level requirements files. They were not used.
- Update APS cycle begin & end dates.
- Update device support for APS machine parameters (current, lifetime, ...).
released 2024-04-23
- Add new plan for edge alignment called edge_align.
- Added a mesh grid scan plan that will collect until number of collection points is met.
- lineup2() should work with low intensity peaks.
- lineup2() would raise ZeroDivideError in some cases.
- Increase minimum aps-dm-api version to 8.
- PVPositionerSoftDone should set 'done' to False at start of a move.
- Race condition with SR570 pre-amp.
- Code format conforms to 'ruff'.
- Add additional support for APS Data Management API.
- Make the home page more concise.
- Refactor packaging from setup.py to pyproject.toml.
released 2024-01-23
- Add (ophyd) device support for: * DG-645 digital delay/pulse generator. * Measurement Computing USB CTR08 High-Speed Counter/Timer * Simulated process controller as positioner using EPICS swait record. * Simulated process controller as positioner using EPICS transform record. * synApps userArrayCalcs and EPICS acalcout record.
- Add subnet check for APSU beamlines.
- Add template support for writing NeXus/HDF5 files.
- New lineup2() plan can be used in console, notebooks, and queueserver.
- Fix
AD_full_file_name_local()for case when the read & write paths are identical.
- Avoid voltage spikes when changing gain of SRS570 preamplifier.
- In
listdevice(show_pv=True), setcname=True, dname=Falseif not provided by caller. - Move
.OVALfield fromEpicsRecordOutputFields to new ``EpicsRecordAnalogOutputFields - Write tables of plot statistics in most compact form.
- Remove
ScalerMotorFlyer, pending issue #763.
released 2023-07-19
- Add ophyd device support for APS Data Management workflows.
released 2023-05-23
- Add
fb_epiddatabase support from the optics module. - Add guide How to interrupt/stop/abort a running plan & recover to safe settings.
- Add
close_pv&open_pvkwargs toApsPssShutter - Add
ensure_AD_plugin_primed()convenience function. - Made
listdevice()more tolerant of unconnectable signals.
- APS cycle set to
APSUduring this dark year. - Resolve AD ERROR reports "capture not supported in Single mode".
- Add unit tests for shutters.
- Apply consistent code style (black) throughout.
- Set
kindattribute to add plugin to ad.read_attrs list. - Clear
PVPositionerSoftDone's setpoint & readback subscriptions at exit.
released 2023-03-27
- add
log_path=Nonekwarg toapstools.utils.stream_log_handler()
- resolved
AttributeErrorfor certain logging configurations
released 2023-03-12
- listobjects()
printingkeyword argument is deprecated. - ListRuns.to_dataframe()' method is deprecated.
- ListRuns.to_table() method is deprecated.
- listruns()
printingkeyword argument is deprecated. - listruns()
tablefmtkeyword argument is deprecated. Usetable_styleinstead. - listruns() now returns pyRestTable.Table or pandas.DataFrame
- MeasCompTc32: Measurement Computing TC-32 Thermocouple reader
- Add guide What are the objects to control?
- labels_to_streams(): do not plot items in the labeled stream
- labels_to_streams(): failed when no motor label assigned
- add more unit tests for
apstools.plans - addDeviceDataAsStream() renamed to write_stream()
- FileWriterCallbackBase.file_name now a property, uses pathlib
- listobjects() now returns pyRestTable (by default)
- listdevice() now returns pyRestTable (by default)
- listplans() now returns pyRestTable (by default)
- listruns() now returns pyRestTable (by default)
- NXWriter: unit tests added for proper NXdata@axes structure.
released 2023-02-16
- Release process updated on the wiki.
released 2023-02-16
- NXWriter: add wait_writer_plan_stub() method for use in a plan.
- Release process documented on the wiki.
released 2023-02-15
- Support to record all motor (or other ophyd-labeled devices) positions at start (or end) of run.
- SpecWriterCallback: write
#Oand#Plines from motor positions recorded at start of run.
- NXWriter: scans with area detectors did not have image data. Fixed. Clients must wait for writer to finish.
- PVPositionerSoftDone: computation of 'done' signal and 'inposition' deconvoluted.
- Struck3820: changed (typo)
do_readl_alltodo_read_all - Tests involving PVPositionerSoftDone call '.cb_readback()' method to upate 'done' signal.
- Added github/super-linter workflow, adds mypy, isort, and other tests.
- Apply isort code style.
- Observing random occurrence of unit test failures involving PVPositionerSoftDone.
released 2023-01-11
- Add
apstools.utils.plotxy()utility function. - Add tag-based documentation selection via PyData switcher.
- In listruns(), also search the hints for keys.
- CI failed to build documentation when creating pip installation.
- ScalerMotorFlyer default fly_time_pad increased to 10 s.
- ScalerMotorFlyer now sets scaler to "OneShot" mode.
- ScalerMotorFlyer in-position comparison now based on motor's precision.
- Version number was not reported correctly in certain situations (issue #771).
- "Custom HDF5 File Name" example updated to latest advice.
- Pin Sphinx to <6 due to problems with PyData and Sphinx v6.
- Conda channel "nsls2forge" no longer needed.
- Remove
nsls2forgechannel from conda environment.
- @jwkim-anl (Jong Woo Kim, ANL) for the
plotxy()idea.
released 2022-11-30
- Add
ScalerMotorFlyer()device. - Add functions to support reporting of logging messages.
- Add :meth:`restorable_stage_sigs` decorator.
- Add support for Python 3.11.
- Add
utils.analysis_1D()&utils.analysis_2D()functions for peaks statistics.
- Add example notebook Fly Scans with EPICS motor and scaler.
- Add guide How to Search in Databroker.
- Add guide How to setup logging.
- Add convenience import:
from apstools.devices import AD_EpicsFileNameMixin. - Enable:
from apstools.devices import AD_EpicsFileNameMixin. - Resolve intermittent, random CI failures.
- Resolve problems reporting unit test coverage statistics.
- Unit tests now support Python version 3.8, 3.9, 3.10, & 3.11.
released 2022-10-16
- [again] Make sure that YML (and other) files are packaged for pip and conda.
skipped
released 2022-10-13
- Add
request_input()plan stub, per user request. - Add fly scan for scaler v. continuous motor.
- Rename:
devices.make_dict_device()is nowdevices.dict_device_factory().
- Make sure that YML (and other) files are packaged for pip and conda.
- PVPositioner got stuck if target position was the same as current position.
- Removed all snapshot support.
released 2022-10-04
- Pip requirements updated.
released 2022-10-03
- Example of imaging with AreaDetector in Single mode writing HDF5 files.
lineup(): user can choose which feature (max, min, cen, com), additional API changes.devices.make_dict_device()to make a recordable Device from a dictionary.- Only publish documentation on demand by executing GitHub workflow.
- Switch HTML documentation to use PyData theme.
- Re-arranged the documentation. Some examples renamed. Content unchanged.
- Update the APS cycle dates file through 2023-04-30.
released 2022-08-15
- Add devices.CamMixin_V3_1_1
- Add devices.CamMixin_V34
- Add devices.SingleTrigger_V34
- Add EpicsScanIdSignal (scan_id from EPICS PV).
- Add run_blocking_function() plan to run blocking functions in the RunEngine.
- Published on conda-forge
conda install -c conda-forge apstools. - replay() can now take a run, [run], header, or [header]
- Switch HTML documentation to use furo theme.
- Combine install steps, workflows in CI
- Describe how to use the NXWriter callback.
- Refactor AD test with EPICS-controlled image file names.
- Refactor test_move_to_zero().
- Unit tests now support Python version 3.8, 3.9, & 3.10.
bluesky_snapshot_viewerand underlying GUI code will be dropped by 2022-12-31.- Drop support for Python 3.7 per NEP29.
- Stop publishing on channel
-c aps-anl-tag(use-c conda-forgeinstead).
released 2022-07-06
- Confirmed: databroker finds HDF5 image files with custom names.
- Still not ready for databroker 2.0+.
- Documentation website: https://bcda-aps.github.io/apstools/
- New example: user-controlled HDF5 image file names.
- Using Jupyter notebooks directly (via
nbsphinxextension). - User-controlled HDF5, JPEG, TIFF image file names.
- Fix timeout problem in utils.connect_pvlist().
- Fix unexpected key in datum kwargs.
- Fix
utils.listdevice()mixing dot and underline name separators.
- Applied custom project badge for APS software License.
- Use micromamba in testing workflows.
- Drop LGTM.com static code analysis service.
- Drop RTD (readthedocs) documentation publishing service.
- Harry Zhou
released 2022-01-26
- Move
enableComponent out from synApps Record devices. - Renew the unit tests for PVPositionerSoftDoneWithStop.
released 2022-01-20
- Moved
apsbsssupport to newapsbsspackage (install with eitherpiporconda). See https://bcda-aps.github.io/apsbss/ for details. - Can use Python 3.7 - 3.9. Cannot use Python 3.10 yet due to upstream limitation from databroker and intake packages.
- Moved
command_list_as_table()from utils intoplans/command_list. - Removed
BusyStatusfrom apstools.synApps.busy callbacks/:DocumentCollectorCallback,document_contents_callback, andSnapshotReportmoved intocallbacks/.devices/: Reorganized all devices, includingsynApps/, intodevices/subpackage.devices/:SynPseudoVoigt()moved fromsignals/todevices/.plans/: Reorganizedplans.pyand_plans/intoplans/subpackage.snapshot/: Movedsnapshotapplication and related files to a subdirectory.utils/: Reorganizedutils.pyand_utils/intoutils/subpackage.
- Add support for Eurotherm 2216e temperature controller
- Add support for Lakeshore 336 temperature controller
- Add support for Lakeshore 340 temperature controller
- Add support for synApps calc
scalcoutrecord. - Add support for synApps calc
sseqrecord. - Add support for EPICS base
subrecord. - Add support for synApps calc
userAvedatabase. - Add support for synApps calc
userStringSeqdatabase. - Add support for synApps calc
userStringCalcdatabase. - Add support for synApps optics
2slitdatabase.
- Convert
Noneto"null"when savingPeakStatsto stream.
Now testing with Python versions 3.7 - 3.9. (Can't use with Py3.10 yet due to upstream requirements.)
Update notebooks:
demo_specfile_exampledemo_tuneaxis
Remove notebooks:
demo_specfile_databroker
- Applications
- apstools_plan_catalog application and related support.
- Devices
ApsCycleComputedROmove_energy()method inKohzuSeqCtl_MonochromatorclassProcessController
- Utilities
device_read2tablejson_exportjson_importlistdevice_1_5_2listruns_v1_4object_explorer
- Gilberto Fabbris
- Jan Ilavsky
- Qingteng Zhang
released 2021-11-25
NOTE: The apsbss component will be moved out of apstools into its
own package with the next release (1.6.0, ~Feb 2022) of apstools.
The Python version is limited to 3.7 due to aps-dm-api package. Expect this limitation to be relaxed, allowing any Python 3.7 and higher with the 1.6.0 release.
- Added table of APS run cycle dates. Use that if aps-dm-api not available.
- Restricted python version to 3.7 due to upstream aps_dm_api package.
- Rename name uid to token to avoid LGTM security false alert.
This support was marked as deprecated in release 1.5.4:
apstools.devices.ApsCycleComputedRO
released 2021-10-15
The apstools.beamtime module and related content (includes apsbss)
will be moved to a new repository for release 1.6.0. This will
remove the requirement that the APS data management tools (package aps-dm,
which only works on the APS computing network) be included. With this
change, users will be able to conda install apstools -c aps-anl-tag on
computers outside of the APS computing network.
apstools.utils.listdevicehas a new API (old version renamed tolistdevice_1_5_2)
- Kohzu monochromator
energy,wavelength, andthetaeach are now aPVPositioner(subclass). - Linkam temperature controller CI94
- Linkam temperature controller T96
- Stanford Research Systems 570 current preamplifier
- Stanford Research Systems PTC10 temperature controller
- XIA PF4 filter now supports multiple PF4 units.
- Generalize that amplifiers will have a
gainComponent attribute. - Generalize that temperature controllers will have a
temperatureComponent attribute that is a positioner (subclass ofophyd.PVPositioner). - Enhanced positioners for EPICS Devices:
*
apstools.devices.PVPositionerSoftDone*apstools.devices.PVPositionerSoftDoneWithStop
- Fixed bug in
devices.ApsCycleComputedROanddevices.ApsCycleDMinvolvingdatetime.
- Moved all device support into individual modules under apstools._devices because apstools.devices module was getting too big. Will refactor all with release 1.6.0.
- Add unit tests for
devices.ApsCycle*Devices. - Add EPICS IOCs (ADSimDetector and synApps xxx) to continuous integration for use in unit testing.
- Unit tests now use pytest package.
- Suppress certain warnings during unit testing.
This support will be removed in release 1.6.0:
apstools.beamtimemodule and related content (includesapsbss) will be moved to a new repositoryapstools.devices.ProcessControllerapstools.utils.device_read2tableapstools.utils.listdevice_1_5_2apstools.utils.object_explorer
- Fanny Rodolakis
- Gilberto Fabbris
- Jan Ilavsky
- Qingteng Zhang
- 4-ID-C Polar
- 8-ID-I XPCS
- 9-ID-C USAXS
See this table for release change histories, highlighted by version control reference (pull request or issue):
| 1.5.2: | released 2021-09-29
|
|---|---|
| 1.5.1: | released 2021-07-22
|
| 1.5.0: | released 2021-04-02
|
| 1.4.1: | released: 2021-01-23 |
| 1.4.0: | released: 2021-01-15
|
| 1.3.9: | released 2020-11-30
|
| 1.3.8: | released: 2020-10-23
|
| 1.3.7: | released: 2020-09-18 |
| 1.3.6: | released 2020-09-04 |
| 1.3.5: | released 2020-08-25 |
| 1.3.4: | released 2020-08-14
|
| 1.3.3: | released 2020-07-22 |
| 1.3.2: | released 2020-07-20
|
| 1.3.1: | released 2020-07-18
|
| 1.3.0: | release expected by 2020-07-15
|
| 1.2.6: | released 2020-06-26
|
| 1.2.5: | released 2020-06-05 |
| 1.2.3: | released 2020-05-07 |
| 1.2.2: | released 2020-05-06
|
| 1.2.1: | released 2020-02-18 - bug fix
|
| 1.2.0: | released 2020-02-18 - remove deprecated functions |
| 1.1.19: | released 2020-02-15 |
| 1.1.18: | released 2020-02-09
|
| 1.1.17: | released 2020-02-09 - hot fixes |
| 1.1.16: | released 2019-12-05
|
| 1.1.15: | released 2019-11-21 : bug fixes, adds asyn record support |
| 1.1.14: | released 2019-09-03 : bug fixes, more synApps support
|
| 1.1.13: | released 2019-08-15 : enhancements, bug fix, rename |
| 1.1.12: | released 2019-08-05 : bug fixes & updates |
| 1.1.11: | released 2019-07-31 : updates & new utility |
| 1.1.10: | released 2019-07-30 : updates & bug fix |
| 1.1.9: | released 2019-07-28 : updates & bug fix |
| 1.1.8: | released 2019-07-25 : updates
|
| 1.1.7: | released 2019-07-04
|
| 1.1.6: | released 2019-05-26 |
| 1.1.5: | released 2019-05-14
|
| 1.1.4: | released 2019-05-14
|
| 1.1.3: | released 2019-05-10
|
| 1.1.1: | released 2019-05-09
|
| 1.1.0: | released 2019.04.16
|