Changelog¶
0.15.5 - August 29, 2025¶
✨ Improved¶
Update
sdss-cluto 2.5.3.Remove retries when fetching the buffer is the shape does not match.
🔧 Fixed¶
Fix pixel shifts in fetched buffers. The shifts were caused by a search-and-replace of the header values in the binary reply, which could remove additional data values when the read pixels matched the header values. The fix removes the header as each binary reply is processed.
ExposureDelegate.reset()not being called withawaitinresetcommand.
0.15.4 - August 10, 2025¶
🔧 Fixed¶
Ensure that the actor version is correctly set from the configuration.
0.15.3 - August 9, 2025¶
✨ Improved¶
Return
selfinArchonBaseActor.start().Ensure that Archon command is set done before setting the event.
Update CLU to 2.5.0.
0.15.2 - April 8, 2025¶
✨ Improved¶
Add comment to
OBSTIMEindicating the time is UTC.
🔧 Fixed¶
Avoid removing the comment from the original header keyword when using
--extra-header.
0.15.1 - January 11, 2025¶
🔧 Fixed¶
#51 Fix an issue in which when an exposure was cancelled during integration, the task that updates the completion of the exposure and sets the
IDLEstate could be left running and affect a future exposure.
0.15.0 - November 7, 2024¶
🔥 Breaking changes¶
Deleted the Docker image creation workflow. I don’t think it makes sense anymore to have a Docker image since archon is a general-use library.
🔧 Fixed¶
Prevent
wait-until-idlefrom returning while the delegate is locked.
⚙️ Engineering¶
Migrate to using
uvfor packaging.Update workflows.
0.14.0 - July 14, 2024¶
🔥 Breaking changes¶
Dropped support for Python 3.9.
🚀 New¶
#50 Added
last_exposure_noto the output of thestatuscommand.
⚙️ Engineering¶
Lint and format using
ruff.Updated Numpy to 2.0.
0.13.5 - May 29, 2024¶
✨ Improved¶
#49 Improve the
abortcommand. When an integration or readout is ongoing, the current task is stored in the delegate and cancelled if an abort happens. This should immediately cancel the command and any controller action. To perform a full abort, one should also run theresetcommand, which will reset the controller, including a reset timings, or callabort --reset.
0.13.4 - February 27, 2024¶
✨ Improved¶
Do not raise warnings when trying to set some inexistent Archon parameters.
🔧 Fixed¶
yao #17: Deal with case when the returned buffer does not match the expected size. The
ArchonController.fetchmethod will retry fetching buffer once. If that fails again it pads the buffer with zeros to match the expected size.
0.13.3 - January 12, 2024¶
🔧 Fixed¶
Removed print statement that was left for debugging.
0.13.2 - December 22, 2023¶
🏷️ Changed¶
Remove original extension in recovery file.
0.13.1 - December 17, 2023¶
✨ Improved¶
The parameter used to set the exposure time can be defined using the configuration parameter
archon.int_param. Valid values areIntMS(integration time must be set in milliseconds) andIntCS(centiseconds).
0.13.0 - December 2, 2023¶
💥 Breaking changes¶
As part of #46
ExposureDelegate.post_process()is now called once for each controller CCD with aFetchDataDictas the only argument. The function must modify the input dictionary in place and returnNone.
🚀 New¶
#47 Added a framework for recovering images when they fail to be written to disk. A lockfile is created when the buffer is read which can be used to recover the original image and header. Recovery happens automatically when the actor starts or via the
recovercommand.
⚙️ Engineering¶
#46 Significant clean-up of the
ExposureDelegatecode.
0.12.0 - November 30, 2023¶
💥 Breaking changes¶
Support for Python 3.8 has been deprecated.
🚀 New¶
#45 Added a new option
files.write_enginethat can be set toastropyorfitsio. In the latter case it will use fitsio to write images to disk. This requires installingsdss-archonwith thefitsioextra (e.g.,pip install sdss-archon[fitsio]).
🔧 Fixed¶
Fix broken tests in 3.12.
0.11.6 - November 24, 2023¶
🏷️ Changed¶
If
write_async=Falsedo not use an executor to write images to disk.
0.11.5 - November 18, 2023¶
✨ Improved¶
Buffer is written to temporary file (usually in
/tmp) before it’s moved to the final permanent location.
0.11.4 - November 5, 2023¶
🔧 Fixed¶
Reduce length of long header comment.
0.11.3 - November 5, 2023¶
🚀 New¶
Added a configuration option
files.write_async(defaults totrue) that determines whether all the camera files for a controller are written to disk concurrently or sequentially.
0.11.2 - September 14, 2023¶
✨ Improved¶
wait-until-idlewon’t return until the exposure has been saved to disk.
🔧 Fixed¶
Ensure that the exposure delegate is always unlocked when
abortorresetare called.
0.11.1 - August 14, 2023¶
✨ Improved¶
Extra header values do not overwrite the existing header comments.
⚙️ Engineering¶
Lint using
ruff.
0.11.0 - July 18, 2023¶
💥 Breaking changes¶
#44 Allow exposure times longer than 1,000 seconds. This requires a change in how the ACF timing scripts are written to support setting the exposure time in centiseconds. See the PR description for details. Do not update to this version without updating the ACF file as well!
0.10.0 - July 13, 2023¶
✨ Improved¶
Added
expose --async-readoutflag that finishes the expose command as soon as readout begins.Added
wait-until-idlecommand that returns once the spectrographs are idle.
🏷️ Changed¶
Do not set the
ERRORstatus in the controller ifArchonController.get_device_status()orArchonController.get_system()time out.ExposureDelegate.readout()will fail is any controller is still exposing.
🔧 Fixed¶
Prevent controller state to briefly go to
IDLEbefore changing to a non-idle status.
0.9.0 - April 13, 2023¶
🚀 New¶
DT-4 Allow to create checksum files for each newly written images. To enable, add a
checksumsection to the configuration file withchecksum.write: true. The mode of the checksum can be set withchecksum.modetomd5(default) orsha1. The file to which the checksum is appended can be defined withchecksum.file, which default to the SJD with extension.sha1sumor.md5sumdepending on the checksum mode.
0.9.0b1 - March 10, 2023¶
🚀 New¶
Upgrade
CLUto2.0.0b2and add theget-command-modelcommand.
0.8.0 - March 3, 2023¶
✨ Improved¶
Allow to run
LOADTIMINGwithoutAPPLYALLafter an init.Output filenames as a single keyword.
Add
ArchonController.send_and_wait().Allow choosing what
APPLYXXXcommands to send on init.
🔧 Fixed¶
Fix overwriting of images when readout done independently. The
nextExposureFilewas not being increased in that case.
⚙️ Engineering¶
Support Python 3.11.
Update test and docker workflows. The docker image now uses
python:3.11-slim-bullseye.
0.7.0 - December 2, 2022¶
🚀 New¶
RESETTIMINGis no longer user, which should prevent race conditions in some circumstances.Add a
pre_exposurehook to the delegate.Added
--no-writeflag toexpose.
✨ Improved¶
HDUs are now written to a temporary file first which is then renamed to the final file name.
It is now possible to defined the controller class in the actor and to pass the configuration to use to the controller.
0.6.2 - September 15, 2022¶
✨ Improved¶
Add backplane ID and version to header.
Allow to exclude some cameras from writing.
Allow to use SJD for path.
Add status
--debugflag to change message level.
🔧 Fixed¶
Deal with controller without Lines or Pixels params.
0.6.1 - May 28, 2022¶
🚀 New¶
#40
ArchonController.write_config()now acccepts anoverridesdictionary with keywords to be replaced in the ACF file. The format is similar toArchonController.write_line(). If a sectionarchon.acf_overridesis present in the configuration file, those overrides will be applied when theinitcommand is called. This allows to define a single ACF file but tweak some parameters depending on the controller to which it is sent.archon.acf_overridesmust be a dictionary with either aglobalsection (overrides sent to all controllers) or sections for each controller name.Add
ExposureDelegate.expose_cotasks()for tasks that should be run during integration. This is useful to grab sensor data that could change as readout begins, for example lamp status, but there is no promise that theexpose_cotasks()will be waited or that will complete before readout begins.
✨ Improved¶
ExposureDelegate.expose()always blocks, even ifreadout=False, and closes the shutter at the end of the exposure time.The Archon buffer read is saved to the header of the images.
0.6.0 - May 14, 2022¶
💥 Breaking changes¶
expose start|finish|abortare notexpose --no-readout,readout, andabortrespectively.exposewithout--no-readoutwill expose and readout all in the same command.Removed
lvmsubmodule. Uselvmscpinstead.
🚀 New¶
#38
ArchonController.write_line()allows to set and apply a line in the configuration file without reloading it completely.#39 Support windowing.
Archon power status is now reported as part of the status and overall better handled.
Some refactoring to support
yaoand more generally to implement external packages that use the library and the actor.Added
power on|offanddisconnectcommands.Support
enabled_controllersconfig keyword
✨ Improved¶
expose finish --headernow accepts a JSON-like dictionary in which a keyword can be the name of a detector. In that case the contents of that keyword are only added to the detector with that name.The
initcommand does a better job at understanding relative paths.acf_filein the configuration can be a dictionary of controller to file.
0.5.1 - September 18, 2021¶
✨ Improved¶
#32 Expand the default header with information about gain, readout noise, bias section, etc.
#24 Added
ExposureDelegate.readout_cotasks()that can be overridden to execute tasks concurrently during readout. The LVM delegate now reads temperatures and IEB data at this point.#34 The path to the last ACF file written to the controller is stored in the user configuration file (usually at
~/.config/sdss/archon.yaml) from where it’s read when the controller starts. This prevents having to initialise the controller every timearchonis restarted (with the corresponding power cycling of the CCDs) just to update the ACF path, but it introduces a certain risk that the ACF stored in the configuration file and the one loaded are actually different. In general it’s still recommended to do anarchon initwhen the daemon is restarted.Added script for ~800MHz readout.
Use
framemode=splitand rearrange taplines to allow proper display in the GUI.
0.5.0 - September 6, 2021¶
🚀 New¶
✨ Improved¶
archon initaccepts an optional parameter to define the ACF script to load.#31 Tests for the actor.
🔧 Fixed¶
Fixed error when moving shutter or hartmann doors manually.
0.4.0 - August 22, 2021¶
🚀 New¶
Added
--countflag tolvm exposeto support multiple consecutive exposures.Support for the three LVM CCDs.
✨ Improved¶
Always close connections to remote TCP services to prevent leaving unclosed file descriptors.
Read pressure sensors concurrently.
Update LVM lamps.
🔧 Fixed¶
Improve how auto-flushing is implemented. In its previous mode,
FlushOnewould often be called once between exposing and reading out, introducing an offset in the lines that manifested as a lines overscan of ~90 lines. The new implementation allows to disable auto-flushing before an exposure begins.
0.3.0 - June 20, 2021¶
🚀 New¶
#21 Implemented profiles for LVM and BOSS (placeholder).
#22 Implement custom LVM expose delegate along with a group of
lvmcommands to control the shutter, hartmann doors, and to expose using the shutter.#23 Refactor expose actor code into an
ExposeDelegatethat allows for more flexible customisation.Add option to define additional header keywords in the configuration file that read values from the actor keyword datamodel.
Add
lvm-labscript for laboratory testing.POWERONandPOWERBADcontroller status bits.Code to log LVM exposures in Google Sheets.
🔧 Fixed¶
Require
sdss-clu>=0.7.8to allowarchon expose finish --headerto work with strings that have spaces. It should now be possible to pass commands likearchon expose finish --header '{"KEYWORD1": [1, "A comment"]}'. For header keyword values that are a list of value and comment, the list is converted into a tuple internally so thatastropycan parse it correctly.
🧹 Cleanup¶
#17 Handle actor shutdown more gently when it is started from the CLI either in debug mode or as a daemon.
0.2.1 - April 6, 2021¶
🔧 Fixed¶
Fix Docker creation for tags.
0.2.0 - April 6, 2021¶
🚀 New¶
#10 Add actor command
reconnectthat allows to recreate the TCP/IP connection to one or multiple controllers. If the controller cannot be connected when the actor starts, a warning is issued but the actor will be created.#11 Read the Govee H5179 temperature and humidity and write a basic FITS header.
#12 Add
ArchonControllermethods toabort,read out, andflushan exposure. Actorexposecommand now acceptsexpose startandexpose finishto allow for non-blocking integration. Better handling of status flags.
🧹 Cleanup¶
Basic documentation.
Use GitHub Container Registry instead of Docker Hub.
0.1.0 - March 6, 2021¶
🚀 New¶
Initial version of the library and actor. Supports communication with the Archon controller, Archon command tracking and reply parsing, and basic actor functionality, including exposing.
Build and push docker image to lvmi/archon.