Skip to content

Releases: sdss/jaeger

jaeger 0.16.1

10 Jun 16:13
Compare
Choose a tag to compare

🚀 New

  • #183 The FVC.write_summaryF() method now also produces some histograms and quiver plots that show the FVC convergence in wok and ra/dec coordinates.
  • #184 Added a jaeger.fvc.reprocess_configuration() coroutine that allows to reprocess the final FVC image for a configuration with a different centroid method.
  • #185 Support for LCO and additional improvements:
    • General support for running jaeger at APO and LCO.
    • The jaeger and ieb configuration files have been split into _APO and _LCO.
    • Makes fvc loop more reliable. The proc- image is now saved in most conditions.
    • Use FVCTransformAPO or FVCTransformLCO depending on the observatory.
    • Fix fvc loop with --fbi-level 0.
    • Chiller and alerts bots are now run as part of the actor instead of in the FPS object. Alerts are now observatory-specific.
    • Do not calculate paths when using jaeger configuration load --from-positions.
    • Fix for #182: GFA alerts are disabled if the camera is powered off.
    • New home command to send GO_TO_DATUMS to multiple or all positioners at once.
  • #186 New command fvc snapshot that creates a temporary configuration from the current positions and takes an FVC measurement.
  • Add jaeger configuration reload command. It's equivalent to using jaeger configuration load --no-clone DESIGNID where DESIGNID is the currently loaded design.
  • If called without arguments, disable now outputs the list of currently disabled robots.

✨ Improved

  • The list of manually disabled positioners is kept during reinitialisation.

🏷️ Changed

  • Default FVC centroid algorithm is now zbplus.

🔧 Fixed

  • #182 GFA alert for a camera is disabled if the camera is off.
  • Bump sdssdb to ^0.5.2 to ensure that assignment_hash is available

jaeger 0.15.1

24 Apr 17:31
Compare
Choose a tag to compare

🔧 Fixed

  • Pin pydl 1.0.0rc1 since rc2 has been yanked.

jaeger 0.15.0

21 Apr 23:33
Compare
Choose a tag to compare

🔥 Breaking changes

  • Minimum Python version is now 3.8. Astropy 5 required.

🚀 New

  • #180 A design can now be preloaded using jaeger configuration preload [DESIGNID]. If a design ID is not provied, the first element from the queue will be used. Preloading calculates the trajectories for the new configuration but does not write to the database, generate the configuration summary file, or output keywords. To make the preloaded design active, use jaeger configuration load --from-preloaded.
  • #181 Automatically determine the epoch delay for a new configuration created from a design in the queue. If there are multiple consecutive designs in the queue with the same hash (i.e., that will be cloned), determines the epoch delay so that the array is reconfigured for the middle epoch of the observations.
  • Added fvc_percent_reached and perc_95 keywords to the FVC loop to show the percentage of robots that have reached their positions (within the FVC tolerance) and the 95% percentile respectively.
  • delta_ra and delta_dec from the database are now applied.
  • Require coordio 1.3.0.

✨ Improved

  • If a new configuration is loaded while the array is unfolded and jaeger configuration reverse is called, the reverse trajectory from the previous configuration will be used.
  • Update coordinates using delta_ra and delta_dec from targetdb.carton_to_target.
  • Introduced an empirical kludge factor for the guider scale that can be adjusted in the configuration file as configuration.scale_kludge_factor.
  • Use reverse trajectory from previous configurations if the current one has not been executed.
  • jaeger configuration reverse now accepts an --explode flag.
  • FVC loops succeeds if fvc_perc_90 < 30.
  • Add fvc_image_path to confSummaryF.
  • Allow to home alpha and beta independently.

🔧 Fixed

  • Fixed an issue in which the epoch RA/Dec in a configuration had the correctly propagated proper motions but those were not used for observed, field, etc. coordinates. Those coordinated derived in practice from the catalogue coordinates at the catalogue epoch.

jaeger 0.14.0

11 Feb 22:07
Compare
Choose a tag to compare

🚀 New

  • #177 When jaeger configuration load is called with a design that has the same targets as the currently loaded (as it happens for multi-exposure fields), the existing configuration and metadata are copied but decollision is not run and new paths are not generated.
  • #175 Added alert system.
  • #176 Refine configuration focal plane scale using the guider measured scale.
  • Addded a scale factor when loading a configuration.
  • Allow to load a design from the queue.

✨ Improved

  • #178 Major refactor of the chiller code.
  • #179 Refactored FVC code to use coordIO's FVCTransformAPO.
  • Add jaeger, kaiju, and coordio versions to confSummary.
  • Allow to disable chiller watcher.
  • Store positioners in trajectory data file. Dump trajectory data even if trajectory fails.

🔧 Fixed

  • jaeger status now won't output additional information if the status of a single positioner is requested.

jaeger 0.13.1

07 Jan 21:27
Compare
Choose a tag to compare

🚀 New

  • Added jaeger configuration slew command.
  • Added chiller control.
  • A keyword folded is updated after a trajectory indicating if the array is folded. In jaeger unwind, if the array is already folded (with a tolerance of 1 degree), it does nothing. jaeger unwind --status only reports the folded status.
  • Report alive_at every 60 second.
  • Add commands to enable and disable a positioner during runtime.

✨ Improved

  • Check that the rotator is halted before exposing the FVC.
  • Added wok coordinates to summary files.

🔧 Fixed

  • Increased length of optical_prov in confSummary files.

jaeger 0.13.0

15 Dec 06:34
Compare
Choose a tag to compare

🚀 New

  • #163 The to and from destination trajectories are saved when BaseConfiguration.decollide_and_get_paths() is called. The reverse path can be sent from the actor using configuration reverse. The paths can be generated in advance when loading the design. An --epoch-delay parameter can be passed when loading the design to create a configuration for some time in the future.
  • #167 Add the ability of loading a configuration from the current positions of the robots.
  • #169 Move ieb power and ieb switch to simply power.
  • #173 Added DitheredConfiguration class.

✨ Improved

  • #166 During BaseConfiguration.decollide_and_get_paths() the paths are decollided and deadlocks resolved while trying to maintain as many robots on target as possible. The fibre table is updated.
  • #168 Functional version of design loading. Collisions are solved by first attempting to remove unassigned targets. Deadlock resolution uses the same logic as the random configuration creation. fiberId is not added to the summary file. Snapshots for each configuration are created.
  • #172 The FVC centroids are now derotated according to the rotator angle, allowing to run the FVC loop at any rotator position.
  • #174 Improved metadata handling in FVC loop.
  • Snapshots are run in a process pool executor and are saved automatically at the end of a trajectory or when TrajectoryError is raised.
  • jaeger.commands.goto.goto() generates kaiju-valid trajectories by default.
  • FVC RMS fit only takes assigned robots into account.
  • Added a check when loading a design to confirm that the design exists and is for the current observatory.
  • Unassigned robots in a configuration as scrambled and are the first to be decollided.

🔧 Fixed

  • #168 Fixed use of proper motions that were being applied as if the JD epoch was the Julian year.

🔥 Removed

  • Positioner.goto() has been removed. Use jaeger.commands.goto.goto() instead.

jaeger 0.12.0

29 Nov 00:43
Compare
Choose a tag to compare
jaeger 0.12.0

jaeger 0.11.0

12 Oct 16:48
Compare
Choose a tag to compare

🚀 New

  • #152 FVC IEB support and actor commands.
  • Add commands GET_HALL_CALIB_ERROR, GET_ALPHA_HALL_CALIB, and GET_BETA_HALL_CALIB for hall sensor calibration querying.
  • The actor status command now returns the number of trajectories executed.

✨ Improved

  • Add Trajectory.start_time and Trajectory.end_time that can be used to determine when the trajectory failed. send_trajectory now allows to return the unsent or non-started trajectory.
  • When running the actor as a daemon in detached mode, log stdout and stderr to file.
  • By default, do not fail when a command receives an UNKNOWN_COMMAND reply; this usually means that the positioner firmware does not support that command yet. This can be disabled by initialising the Command with ignore_unknown=False.
  • It's now possible to switch the SYNC line relay (ieb switch sync). The SYNC line may be left closed if there's an uncaught exception while it's being actuated, or if the script is killed during that time. This allows to restore it to open.
  • TrajectoryError now includes the original Trajectory object as TrajectoryError.trajectory.
  • FPS.send_trajectory() now raises a TrajectoryError if it fails.
  • Better logging of the reason for failure in Trajectory. In particular, Trajectory.failed_positioners contains a dictionary with the reason why a give positioner failed to receive or execute the trajectory, if that information is known.

🔧 Fixed

  • Avoid clipping the current position to (0, 360) when calculating the trajectory in goto(). This prevents using goto() when the positioner is at a negative position.

jaeger 0.10.0

03 Aug 04:30
Compare
Choose a tag to compare

🚀 New

  • #149 Added an FPS.goto() method that sends a list of positioners to a given position using trajectories. By default Positioner.goto() now also uses trajectories, but GOTO_ABSOLUTE_POSITION can still be used.
  • #150 Allow to skip positioners that are connected to the bus but that we want to ignore. Also allow to disable collision detection for a list of positioners. See configuration options fps.skip_positioners and fps.disable_collision_detection_positioners.

✨ Improved

  • Trajectory() now sends data points using a single command per trajectory chunk.
  • Warn about individual replies that return without COMMAND_ACCEPTED.
  • Remove check for whether a positioner has started to move after sending the goto command. It sometimes produced false positives on very short moves.
  • Disable precise moves by default.
  • Improve reloading the FPS.
  • Remove bootloader commands from actor.
  • FPS.locked_by now reports what positioner id(s) locked the FPS on a collision.
  • Actor ieb fbi now accepts multiple devices.
  • Use coil space for IEB relays.
  • Use 8 message per positioner by default when upgrading the firmware.

🔧 Fixed

  • When sending multiple message per positioner per command, assign different UIDs.
  • Fix address of IEB RTD12.
  • Fix upgrade firmware script in the case of a single test sextant.
  • Turn off all sextants before upgrading the firmware.
  • Fixed and tested the power on and power off IEB sequences.

jaeger 0.9.0

19 Jul 01:29
Compare
Choose a tag to compare

🚀 New

  • #131 Breaking change. This version includes a major rewrite of the internals of Command and how it is used throughout jaeger. In addition to acception a single positioner_id, Command can now receive a list of positioners to command. When the command is awaited it will wait until all the positioners have replied or the command has timed out. For the most part this is equivalent to using the old FPS.send_to_all() which has now been deprecated, but with the advantage that a single Future is created. This seems to significantly decrease the overhead that asyncio introduces when creating and await many tasks. FPS.send_command() now also accepts a list of positioners, thus replacing send_to_all(). For the most part low level initialisation of commands, as long as they are used to address a single positioner, should not have changed. To address multiple positioners at once use send_command().
  • #127 Implemented positioner LED on/off commands.
  • #128 Deprecated the use of python-can buses since they block in a non-asynchronous way. This caused significant inefficiencies when controller >200 robots, especially on computers with old CPUs. This PR implements the major changes, including refacting JaegerCAN and FPS to initialise the buses asynchronously, and a reimplementation of CANNetBus, VirtualBus, and Notifier. This PR also includes some general performance gains such as a better implementation of parse_identifier.
  • #134 Added a new actor command reload that will reinitialise the FPS instance and reload any new robots after a sextant power cycle.
  • #142 Added an ieb info actor command to show information about the IEB layout to users.
  • #119 Allow to manually add and initialise a single positioner.

✨ Improved

  • #135 Cleaned up initialisation methods for JaegerCAN and FPS. Objects can now be instantiated and initialised at the same time using the async classmethod .create().
  • #141 The jaeger upgrade-firmware command will now upgrade the firmware of one sextant at a time to avoid powering on too many power supplies at the same time.
  • #124 Collisions are handled better. If a move command is running when the FPS is locked, the command is cancelled. Postioner.goto() and send_trajectory() now continuously check if the FPS has been locked during the move. If it is, they fail in a non-verbose way. FPS.send_trajectory() now logs an error but doesn't raise an exception if the trajectory fails.

🧹 Cleaned

  • #129 Removed the use of the database and predefined layouts for the FPS. Default mode is that positioners are always auto-discovered.
  • #133 Completely removed the use of python-can. A conditional import is done for the slcan and socketcan interfaces for which python-can does need to be installed.
  • #130 Removed engineering mode.
  • #132 Merged JagerCAN._send_commands() and .send_to_interfaces() into JaegerCAN.send_commands(). Renamed FPS.send_command() synchronous parameter to now.