Version History

v0.36.0 (2024-06-01)

New Features

  • Move calibration_config.yaml data file to atcalsys.yaml and add information required by the ATCalsys class now. (DM-44454)

  • Add __init__ file to data directory to make it a discoverable module. (DM-44454)

  • Add new get_data_path utility method to retrieve path to the data directory. (DM-44454)

  • In auxtel/atcalsys, implement changes to match refactoring of the BaseCalsys class.

    This is a major rework of the class, implementing some of the high level functionality that allows one to take a set of calibrations. (DM-44454)

  • In base_calsys, refactor of the base class to capture some of the lessons learned while writting the calibration script. (DM-44454)

  • Implement base_tcs start_tracking method. (DM-44611)

Bug Fixes

  • In BaseTCS class, fix call to offsetRADEC. (DM-44454)


  • Update towncrier configuration to use jira cloud path for tickets. (DM-44454)

v0.35.0 (2024-05-31)

New Features

  • Started, which builds on top of Includes all functions needed to build SalScript for creating flat field calibrations on the AuxTel (DM-43627)

API Removal or Deprecation

  • Remove support for handling authorization. This feature was removed from the system with ts-xml 21. (DM-44366)

Other Changes and Additions

  • Update conda recipe to use ts-conda-build=0.4. (DM-44028)

v0.34.0 (2024-04-24)

New Features

  • In add methods to open/close the AuxTel dome dropout door. (DM-41805)

  • Added base_calsys and corresponding documentation. (DM-42865)

  • In auxtel/atcs, update vent elevation to 17 degrees. (DM-43038)

  • In auxtel/atcs, update dome_vent_open_shutter_time to 30s so we can run vent anytime during the day. (DM-43038)

  • In maintel/, ignore dome elevation in the monitoring loop. The current version of the MTDome is not handling the wind screen/elevation axis so we will ignore it for the time being. (DM-43038)

  • In, update vent azimuth to keep 90 degrees away from the dome azimuth. (DM-43038)

v0.33.0 (2024-02-12)

New Features

  • In add a slew_ephem_target method that allow both telescopes to track a target based on an ephemeris file. (DM-41339)

  • In maintel/, update move_p2p_radec to check that the mtcs is in ENABLED state while moving. (DM-41593)

  • In, update MTCS._slew_to to enable compensation mode in the relevant components before a slew. (DM-42132)

  • In add a set_m1m3_controller_settings method that allows setting m1m3 slew controller settings. (DM-42402)

Bug Fixes

  • Fix some type annotation issue in RemoteGroup.

    Update ATCS.stop_all to remove return. (DM-42046)

  • In, update find_target_simbad to capture any exception when executing the remote query and retrow them as a RuntimeError. (DM-42478)

  • Update MTCS Slew usages to add the compensationMode event for both hexapods. (DM-42690)

Performance Enhancement

  • Update MTCS slew control sequence to improve handling setting/unsetting the m1m3 slew flag before/after a slew starts/ends. (DM-42046)

Other Changes and Additions

  • In auxtel/, update prepare_for_vent to fully open the dome if partially_open_dome is selected.

    Reformat with black 24.

    Update .gitignore with latest ts-pre-commit-config setup. (DM-42690)

v0.32.0 (2023-11-28)

New Features

  • Add _overslew_azimuth feature to base_tcs class to slew past the target position and return. Set default to FALSE in base_tcs class and TRUE for atcs. (DM-40913)

  • Update MTCS class to support running M2 bump tests. (DM-41111)

  • Update overslew feature and add log messages. In mtcs, add a check in move_p2p that the components are enabled while moving. (DM-41538)

v0.31.1 (2023-10-25)


  • Integrate towncrier for release notes and change log management. (DM-41258)

Other Changes and Additions

  • Updates to make the package compatible with salobj 8. Changes involves mostly updating how the async mock objects are created. Instead of relying in ts-idl and ts-salobj to generate specs for the remote’s, use the newly introduced method in ts-xml. (DM-40580)


  • Add LSSTCam class to interface with the LSSTCam CSC using the BaseCamera interface.

  • In maintel/, add stop_rotator method to stop rotator movement.

  • Add support for mtrotator cmd_stop and evt_controllerState in mock/

  • In constants/, update blue300lppm_qn1, holo4_003, and holo4_001 sweet spots.

  • Add new option to MTCS.move_rotator to allow the function to return before the rotator is in position.

  • Export enum classes DOFName and ClosedLoopMode in


  • Add DOFName enum to

  • Update atcs telescope and dome flatfield position following atwhitelight alignment.

  • Use lsst.ts.xml.tables.m1m1 instead of ts.lsst.criopy for M1M3 FATable.

  • In maintel/, add exception to allow backwards compatability with M1M3 FATable import from ts.lsst.criopy.


  • In, add initial sweet spot for holo4_001 grating.


  • In maintel/

    • Update hard point correction handlers to use evt_forceControllerState instead of evt_forceActuatorState.

    • Add support for m1m3 setSlewFlag/clearSlewFlag.

    • Add forceControllerState to the list m1m3 events for the slew usage.


  • Update pyproject.toml to remove usage of flake8 and black pytest plugins.

  • Add github linting workflow.

  • Add support for ts-pre-commit-config.


  • In maintel/

    • Add detailedState to list of Slew events for m1m3.

    • Change order of closing booster valves and enabling hardpoint corrections.

    • Update _handle_m1m3_hardpoint_correction_command to also skip salobj.base.AckTimeoutError.

    • Add new wait_m1m3_settle and call it before closing the booster valve in m1m3_booster_valve context manager.

      For now this only waits for a pre-defined time, but in the future we should implement a better way to determine if M1M3 has settled or not.

  • In, update _handle_in_position to not ignore timeout error when waiting for a new event in the waiting loop.


  • In maintel/

    • Add forceActuatorState to mtm1m3 Slew usages.

    • Fix lower/raise m1m3 to handle m1m3 in engineering mode.

    • Update close_m1m3_booster_valve to enable force balance system before closing the booster valves.

    • Update open_m1m3_booster_valve to enter engineering mode and to disable m1m3 force balance system before opening the booster valves.

    • Update _handle_raise_m1m3 and _handle_lower_m1m3 to work around command timeout.

    • Add timeout when getting detailedState in _execute_m1m3_detailed_state_change.

    • Add disable_m1m3_balance_system.

    • Refactor enable_m1m3_balance_system to extract code into two general purpose private methods; _handle_m1m3_hardpoint_correction_command and _wait_force_balance_system_state.


  • In auxtel/, update the dome and telescope flat field position.


  • In maintel/, update MTCS usages to add booster valve status event to Slew usage.


  • In tests/maintel/

    • Update test_slew_icrs to check that m1m3_booster_valve is correctly called while slewing.

    • Add unit tests for new move point to point methods.

    • Add unit tests for MTCS.m1m3_booster_valve.

  • In mock/, add mocking for the m1m3 booster valve.

  • In maintel/

    • Add methods to move the telescope using point to point movement instead of slewing.

    • Update _slew_to method to use m1m3_booster_valve when executing a slew command.

    • Add a new async context manager m1m3_booster_valve to handle opening/closing the M1M3 booster valve for a particular operation.


  • In maintel/

    • Update get_m1m3_bump_test_status to accept actuator_id as an input parameter and return the primary and secondary test status. The secondary test status is None if the actuator has no secondary element.

    • Extract the code that parses the M1M3 forceActuatorBumpTestStatus into a separate method, _extract_bump_test_status_info.

    • Use _extract_bump_test_status_info in _wait_bump_test_ok to parse the information from the M1M3 forceActuatorBumpTestStatus.

    • Update docstring of get_m1m3_actuator_index and get_m1m3_actuator_secondary_index to document exception raised by the methods and include a “See Also” session.

  • In mock/, improve mocking of the m1m3 actuator testing to more closely resemble m1m3 behavior.


  • In maintel/

    • Add a specific timeout for the hard point test that is long enough to allow it to execute.

    • Update run_m1m3_hard_point_test to wait for _wait_hard_point_test_ok, catch timeout exceptions and raise a runtime error instead.

    • Update enter_m1m3_engineering_mode to ignore timeout error in cmd_enterEngineering.


  • In auxtel/, add new offset_aos_lut method.

  • In maintel/

    • Add support for running/stopping m1m3 actuator bump test.

    • Add support for running/stopping m1m3 hard point tests.

    • Add support for entering/existing m1m3 engineering mode.

    • Update MTCS._wait_for_mtm1m3_detailed_state to accept a set of expected detailed states instead of a single value.

    • Pass timeout to aget in MTCS._wait_for_mtm1m3_detailed_state.

    • Update MTCS._handle_m1m3_detailed_state to pass a set with the expected state when calling MTCS._wait_for_mtm1m3_detailed_state.

    • Fix typos in docstring.

    • Add method to assert that m1m3 is in one of a set of detailed states.

  • Add github action to check that version history was updated.

  • Setup ts_cRIOpy as part of the dependencies for the CI.

  • Add ts_cRIOpy to the eups dependency table.

  • Modernize conda recipe and include ts-criopy as a dependency.


  • In, add new offset_pa method.

  • In auxtel/, minor improvements in offset_done method.

  • In auxtel/, update open_dome_shutter to also work when the dome is partially opened.


  • In BaseTCS, add new offset_rot method to allow offsetting the rotator position.


  • In tests/auxtel/, implement some small improvements in the ATCS test case.

    • Call atcs.enable_dome_following in all test_slew. This will make sure the monitor_loop runs and checks the dome position.

    • Add two new slew tests:

      • Test slew icrs when telescope timeout arriving in position.

      • Test slew icrs when dome timeout arriving in position.

  • In mock/, add mocking for the atdome move azimuth command and in position event.

  • In, update BaseTCS._handle_in_position debug message to also display the timeout.

  • In auxtel/, update ATCS.monitor_position to make log messages more similar to the ones in MTCS.

  • In auxtel/, update ATCS.wait_for_inposition to improve reporting of timeout failures. Instead of appending coroutines to the tasks list, use asyncio.create_task and give names to each of the tasks. Then, instead of simply gathering the tasks, which leads to uncomprehensive tracebacks when tasks timeouts, capture any exception and reprocess the error messages re-raising them as RuntimeError with a more comprehensive message.

  • In auxtel/atcs, update ATCS._slew to use the more robust asyncio.create_task instead of ensure_future when scheduling background tasks.


  • Format souce files with black 23.

  • Update pre-commit hook versions.


  • In constants/, add sweetspot for new grating.

  • Update Jenkinfile to stop using root.


  • In BaseTCS, update radec_from_azel to convert AltAz into a SkyCoord before converting to ICRS. Directly converting from AltAz into ICRS will be deprecated in the future.

  • In ATCS:

    • Add methods to enable/disable ataos corrections.

    • Add new method is_dome_homed to check if the dome is homed or not.

    • Update shutdown to use disable_ataos_corrections instead of sending the command directly to the component.

    • Update home_dome to add new force option and to check if dome is homed already.

    • Rename azimuth_open_dome -> dome_open_az.

    • Upadate prepare_for_onsky to use the enable_ataos_corrections instead of sending the command directly,

    • Add new method stop_dome to stop motion of the atdome.

    • Update prepare_for_flatfied home dome.

    • close_dome change default option to force=True.

    • Update close_dome to send the command when force=True even if the dome is not reporting as opened.

    • Update prepare_for_onsky to disable ataos corrections before opening m1.

    • Update prepare_for_flatfield to disable ataos corrections before opening the mirror covers and enable them afterwards.


  • In BaseCamera, update _handle_take_stuttered to remove call to cmd_clear.

  • In BaseCameraAsyncMock, update assert_take_calibration to remove call to cmd_clear.


  • In ScriptQueue:

    • Make sure get_script_schema can handle condition where multiple configSchema, for different scripts, are published while it is executed.

    • Fix text separator when splitting list of scripts in list_standard_scripts and ``list_external_scripts`.


  • Add support for authorization.


  • In MTCS:

    • Fix doctring and logged information about behaviour when hexapod compensation mode is on in move_camera_hexapod and move_m2_hexapod,

    • Add new methods offset_m2_hexapod and offset_cam_hexapod that offset the M2 and camera hexapod respectively.

      This method can be used when performing optical alignment with the MTAlignment component or when performing optical alignment with curvature wavefront sensing to take the intra/extra focal data.


  • Update ATCS unit test to use the new ATCSAsyncMock class.

  • Update MTCS unit test to use the new MTCSAsyncMock class.

  • Add new MTCSAsyncMock class that implements RemoteGroupAsyncMock for MTCS.

  • Add new ATCSAsyncMock class that implements RemoteGroupAsyncMock for ATCS.

  • In MTCS:

    • Add compatibility with xml>12.

    • Update reset_m1m3_forces to use mtm1m3.cmd_clearActiveOpticForces instead of setting the forces to zero.

  • Update pre-commit config file with latest version of libraries and to add support for isort and mypy and pyproject.toml to support isort.

  • In RemoteGroupAsyncMock:

    • In get_side_effects_for:

      • Change return type to Dict[str, Any].

      • Stop wrapping side effects in mocks.

      • Add side effect to handle flushing events.

    • Add get_all_checks method that creates a copy of the check attribute from the remote_group.

    • Override super class run method to setup random DDS partition prefix and set LSST_SITE.

    • In setup_basic_mocks, setup data structure to support handling summary state.

    • In get_spec_from_topics, add DataType to topic spec.

    • In get_component_topics, add “tel” prefix to telemetry topics.

    • Add flush_summary_state_for to create a side effect to mock the flush method.

    • In set_summary_state_for, fix set_summary_state to append a copy of summary state to the summary_state_queue.

    • In next_summary_state_for, fix next_summary_state to return the value of summary_state instead of popping the value from summary_state_queue.

    • In set_component_commands_arguments, fix filtering of which topics are commands.

  • Ignore files generated by pypi.


  • Add new type hints to allow type annotation of methods and coroutines that has signature like func(**kwargs: Any) -> None.

  • Improve how RemoteGroupAsyncMock mocks a RemoteGroup.

    Instead of making each Remote a free form AsyncMock, create a spec based on the component interface. This means, trying to assess a member that is not part of the CSC interface raises an AttributeError exception, which is usefull to catch interface changes, like topics that are renamed and such.

    It also adds functionality to catch changes in topic payloads. For commands, create methods that check command call payloads and raise exception if a topic attribute is not part of the command definition. For events and telemetry, add a method to create SimpleNamespace instances from the topics structure.

  • Add new BaseCameraAsyncMock mock class, to facilitate mocking/testing classes derived from BaseCamera without the need to use the middleware. This considerably reduces the time needed to setup the classes for testing allowing us to expand the test coverage considerably without too much of a time penalty.

  • Refactor ATCS tests to use the new BaseCameraAsyncMock class.

  • Refactor ComCam tests to use the new BaseCameraAsyncMock class.

  • In BaseCamera, add check that stuttered image is supported by the particular interface. This is defined by the set of commands required to drive sturreted images.

  • Add GenericCamera class to interface with the generic camera CSC using the BaseCamera interface.

  • In ATCS, change log level of message sent when stopping monitor loop from warning to debug.

  • In MTCS, remove workaround for rotator trajectory issues that prevented us from doing more than one slew at a time.

  • Update .gitignore to ignore all .log files.


  • In BaseTCS class:

    • Add new functionality to allow alternative rotator angles to be specified. This features consists of two methods, BaseTCS.set_rot_angle_alternatives and a generator BaseTCS.get_rot_angle_alternatives. By default the altenative angles are +/- 180 and +/- 90 degrees.

      BaseTCS.get_rot_angle_alternatives recieves a desired angle and will yield a sequence of numbers consisting of the original number first, then a the original number + the alternative. Therefore, by default, if one calls BaseTCS.get_rot_angle_alternatives, it will yield the sequence 0, 180, -180, 90, -90.

      It is possible to override the sequence of alternaive angles by calling BaseTCS.set_rot_angle_alternatives, passing a new sequence of numbers. It is not necessary to pass the 0 value and duplicated entries are removed.

    • In slew_icrs use new rotator angle alternatives to cycle throught different rotator angles when the value requested is outside the rotator limits.


  • Fix issue with LATISS.setup_instrument which would fail if linear stage position was passed as None, which is a valid entry.

  • Add unit test for LATISS.setup_instrument.


  • Update build configuration to use pyproject.toml.

  • Implement type-checking in the entire package.


  • Add new high-level class to interact with the ScriptQueue, and child classes to interact with ATQueue and MTQueue.


  • Add support for stuttered image keywords.

  • In BaseCamera:

    • Update _handle_take_stuttered method to call set and then start separately, so it can set the timeout parameter.


  • MTCSMock: stop calling lsst.ts.salobj.topics.WriteTopic.write with arguments.


  • In BaseCamera:

    • Add support for new images types: ACQ, CWFS, FOCUS.

    • Refactor BaseCamera.expose to use the new CameraExposure data class and break it down into smaller pieces.

    • Add support for stuttered image. This image type opens the camera shutter, start the exposure manually and then allow users to shift the readout manually. This allow us to produce “stuttered” images with starts shifting in the read direction at each iteration.

    • Add support for taking snaps in take_object.

  • Add unit tests for stuttered images for ComCam.

  • Add unit tests for stuttered images for LATISS.

  • Add support for stuttered images in ComCamMock.

  • Add support for stuttered image in LatissMock.

  • Add new dataclass CameraExposure to host parameters for exposures.

  • Add unit test for new image types for ComCam.

  • Add unit tests for new image types for LATISS.


  • In test_atcs, rename test_monitor -> test_monitor_position_dome_following_enabled, and make sure dome following is enabled before running test. Add test_monitor_position_dome_following_disabled test to check condition when dome following is disabled.

  • Update ComCamMock to correctly take into account numImages > 1.

  • In tests/maintel/ * Add unit test for MTCS.move_rotator method. * Fix typo mtmout -> mtmount in two method names.

  • In ATCS, update how _slew handles monitor.

  • In MTCS, add move_rotator method to handle moving the rotator and waiting for the movement to complete.

  • In BaseCamera, use numImages feature from Camera to take multiple images, instead of looping.

  • In ATCS.monitor_position, handle condition when dome following is disabled but dome checking is enabled.

  • In MTCS._slew_to, juggle rotator position by 0.1 degrees when working around trajectory problem. This will make sure the rotator moves a bit, thus resetting the trajectory.

  • In ATCS.slew_dome_to, fix handling of monitor_position by creating a background task.

  • In ATCS.slew_dome_to, improve handling dome positioning. The ATDome will overshoot if slew is large enough, the method will send a move command, use _handle_in_position to determine when the dome is in position and then check that the dome is still in position afterwards. If it is not, it will iterate up to _dome_slew_max_iter times. The method is also not using the internal dome in position flag, which only checks if the dome is obscuring the telescope or not. This algorithm is only suitable for on sky slewing operation and not for when we are positioning the dome.

  • In ATCS.slew_dome_to, use _handle_in_position to determine when dome is in position.

  • Update MTCS.wait_for_rotator_inposition to use _handle_in_position.


  • Update to black 22.


  • Change archiver references to oods ones due to image creation process change (DMTN-143).


  • Update for ts_salobj v7, which is required. This also requires ts_xml 11.

  • Rename settings to overrides.

  • RemoteGroup: use “” as the default override for all components. Remove the inspect_settings method and rename expand_settings to expand_overrides.


  • Remove usage of deprecated methods from salobj.

  • In BaseTCS: * Fix handle in position event to use flush=True when dealing with potential race condition. * Change default value of stop_before_slew parameter in slew commands from True to False.

  • In ATCS: * Remove secondary check for in position condition.

    This check was a workaround for a problem we had with the ATMCS inPosition event long ago but it was now causing problems.

    • Fix monitor_position unit tests.

    • Implement handle_in_position_event for ATMCS.

    • Update unit tests for new default value of stop_before_slew.

    • Mark test_find_target as flaky. This test reaches Simbad remote server, which can be flaky sometimes.

    • Augment atdometrajectory mocks in tests/auxtel/

    • In slew_dome_to, wait only for atdome to arrive in position.

  • In MTCS: * Move rotator synchronization to outside “stop_before_slew”. * Update unit tests for new default value of stop_before_slew.


  • Fix unit test failure in slew_object due to coordinate convertion issue.


  • Make MTCS non-concurrent.

  • In BaseTcs add interface to enable/disable concurrent operation.

  • In RemoteGroup implement mechanism to prevent concurrent operation.


  • Update MTCSMock for the latest xml.

  • Add unit tests for additional keywords in LATISS and ComCam.

  • In BaseCamera: * Implement reason and program keywords on the take_ methods. * In BaseCamera.next_group_id replace all occurrences of “-” and “:” by empty strings. * Add reason and program to the interface of expose * Provide a base implementation for expose. * Add new abstract method parse_sensors, that receives a sensors string and return a valid sensors string for the particular implementation. * Add new abstract property camera that should return the remote to the camera. * Add new get_key_value_map method that parses its inputs into a valid keyValueMap entry for the cameras takeImage command.

  • In ComCam: * Remove specialized implementation of the expose method. * Add new abstract property, camera. * Add new abstract method parse_sensors * Update take_spot to implement test_type, reason and program keywords.

  • In LATISS: * Remove specialized implementation of the expose method. * Add new abstract property, camera. * Add new abstract method parse_sensors


  • Update expand RemoteGroup.inspect_settings to deal with non-configurable components.


  • Update the code to use ts_utils.

  • Modernize the unit tests to use bare asserts.


  • Update mock.BaseGroupMock to be compatible with xml 10.1 and sal 6.

  • In MTCS: * Disable ccw_following check on mtcs slew. * Implement work around to rotator trajectory problem that cannot complete 2 subsequent moves.

    The work around consist of sending a move command to the rotator current position then stopping, thus resetting the trajectory.


  • Update conda recipe to add new dependencies; pandas and scipy.

  • Update to include pd files.

  • Unit tests for BaseTCS new catalog feature.

  • In BaseTCS: * move find_target code into find_target_simbad. In find_target, use find_target_local_catalog if catalog is loaded or try find_target_simbad otherwise or if it fails to find a target in the local catalog. * implement method to find target given an az/el position, magnitude range and radius. * implement method to query objects from the local catalog, when a catalog is loaded, or query Simbad if the catalog is not loaded or the object is not found in the local catalog. * add functionality to manage local catalogs, which includes:

    • list available catalogs.

    • load a catalog from the list of available catalogs.

    • check if a catalog was loaded.

    • clear catalog.

  • Add BaseTCS.object_list_get_all method to retrieve a list of all the object names in the object list.

  • Add utility function to return the path to the catalog module.

  • Add catalogs module to store local object catalogs.

  • Add hd_catalog_6th_mag.pd catalog file. This is a cut out of the HD catalog with southern stars brighter than 6th magnitude, used for testing the package. It contains roughly 1500 objects.

  • Setup gitattributes to track *.pd files with git large file storage.

  • In MTCS: * replace axesInPosition by elevationInPosition and azimuthInPosition on all usages. * fix for xml 10.0.0. Event axesInPosition was removed, need to use elevationInPosition and azimuthInPosition instead.

  • In ATCS: * add ATDomeTrajectory.evt_followingMode to Slew usage. * assert_m1_coorection_disabled deal with situation where no correctionEnabled event is seen.

  • Update Jenkinsfile to pull git lfs files before running tests.


  • In MTCS: * add longer timeout for raising/lowering the system. * implement reset_m2_hexapod_position. * implement reset_camera_hexapod_position. * implement move_m2_hexapod. * implement move_camera_hexapod. * implement enabled_compensation_mode and disable_compensation_mode. * implement reset_m2_forces. * implement enable_m2_balance_system. * implement reset_m1m3_forces. * omplement enable_m1m3_balance_system. * Implement abort_raise_m1m3. * implement lower_m1m3 method. * add method to handle raising m1m3. * add methods to handle m1m3 detailed state. * Implement MTCS.raise_m1m3 method. * Implement MTCS._execute_m1m3_detailed_state_change, a method that executes a command that change M1M3 detailed state and handle waiting for it to complete.

  • In test_mtcs: * implement test_check_mtm1m3_interface. * add support for summary state and heartbeat on the mocks. * rename import of astropy.units from u to units. * add support for summary state and heartbeat on the mocks. * add logger to TestMTCS.

  • Fix get_software_versions docstring.

  • Add new BaseTCS._handle_in_position method to take care of in position event in a generic way.

  • Unit tests for get_work_components.

  • In RemoteGroupd add get_sfotware_versions method to return the last sample of softwareVersions event for all components or a subset.

  • Fix unit test on get_simulation_mode.

  • In test_base_group, implement usage of DryTest to allow implementation of faster unit tests that don’t require Remotes/Controllers.

  • Use _aget_topic_samples_for_components in get_simulation_mode

  • In RemoteGroup: * add new usages:

    • CheckSimulationMode

    • CheckSoftwareVersions

    • DryTest

    • add new utility method _aget_topic_samples_for_components to get generic samples.

    • usages All add new generic events.

    • add RemoteGroup.get_work_components method.

    • add new method get_simulation_mode that returns a dictionary with the last sample of the event simulationMode for all components or a subset specified in the components input parameter.

    • RemoteGroup.set_state use new method get_work_components.

    • add RemoteGroup.get_work_components method. This method receives a list of component names, and either raise an exception (if one or more components are not part of the group) or return a list of components. If called with None, return the name of all components.

  • Add new utility method handle_exeception_in_dict_items, to handle exception stored in dictionaries items.

  • Add new utility method handle_exeception_in, to handle exception stored in dictionaries items.

  • Remove the delay in ComCam image taking.

  • In ATCS: * Increase timeout in open/close m1 cover. * add focusNameSelected. to startUp usages. * add ataos correctionEnabled event to usages. * add atdometrajectory followingMode event as a dependency to usages. * update prepare_for_onsky to allow enabling dome following at the end. * Make ATCS more resilient when the dome following is disabled.


  • Add DryTest to LATISSUsages. This is useful for unit testing.

  • In open/close m1 cover and vents check that m1 correction is disabled before proceeding.

  • Add feature to check that ATAOS m1 correction is disabled.

  • In BaseTCS.find_target fix magnitude range to use input parameter instead of hard coded value.


  • In ATCS: * Small fixes to find_target and object_list_get.

    Fix ATCS.open_valve_instrument to call cmd_openInstrumentAirValve instead of cmd_m1OpenAirValve. In ATCS.usages, add mainDoorState event to the list of required events on atdome. In ATCS.open_m1_cover use open_valve_main instead of open_valves. Only main valve needs to be open to open the m1 cover. In ATCS.prepare_for_onsky, stop enabling the components and add a check that all components are in enabled state. In ATCS.prepare_for_flats, add a step to verify that all components are in enabled state.

  • In RemoteGroup: * Implement assert_all_enabled method to verify that all components in the group are in enabled state.

  • In ComCam: * Implement get_available_instrument_setup.

  • In LATISS: * Implement get_available_instrument_setup.

  • In BaseCamera: * Add new abstract method get_available_instrument_setup.


  • In ATCS update algorithm to open m1 cover.

  • Add object storing and finding facility to BaseTCS.

  • In ATCS add functionality to stop the monitor position loop.


  • Refactor MTCS and ATCS unit tests to use DryTest mode (no remotes) and mock the expected behavior with unittest.mock. This allows the unit tests to run much more quickly and reliable. The old unit tests relying on DDS will be converted to integration tests.

  • Add support in RemoteGroup and BaseTCS to support setting up the class when there is no event loop running.

  • In ATCS._slew, pass in the internal check to monitor_position.

  • In MTCS: * Add support for enabling/disabling CCW following mode. * Add check that ccw following mode is enabled when doing a slew activity.


  • Fix absorb option in offset_azel.

  • Update how BaseTCS._slew_to handle check. This fixes an issue where calling prepare_for_onsky and prepare_for_flatfield would leave the users check attribute in a different state than that set by the user. This was also causing the prepare_for_onsky method to not open the dome.

  • Fix checking that ATDomeTrajectory is in DISABLE while moving the dome.


  • Update emulators to publish data useful for INRIA.


  • Implement general purpose utility method in RemoteGroup to get components heartbeats and check liveliness of the group.

  • Add enable_dome_following and disable_dome_following int BaseTCS to use new ATDomeTrajectory setFollowingMode command. * Implement new enable/disable dome following in ATCS class.

  • Set event specifying that dome is in position.

  • Implement offset_x/offset_y functionality in slew commands so users can specify an offset from the original slew position.


  • Update close method in RemoteGroup to only close the domain if it was not given by the user.

  • In ATCS.close_m1_cover, flush m1CoverState before sending the command.

  • Update MTCSUsages.All to include missing events/telemetry.


  • Add filter change (set/get) capability to ComCam class.

  • Add offline function for RemoteGroup.

  • Fix/update docstring in BaseTCS.offset_xy and offset_azel. Default value for relative parameter is True and docstring in offset_xy said it was False.


  • Update rotator strategies to use new pointing facility features. It is now possible to keep the rotator at a fixed orientation while tracking a target in az/el.

  • Expose azimuth wrap strategy to the users.

  • Add new DryTest usage to MTCS class that allows creating the class without any remote (useful for unit testing).

  • Add Coordinate transformation functionality to BaseTCS class to allow transformation or Az/El to Ra/Dec and vice-versa. Add method to compute parallactic angle from ra/dec to BaseTCS.

  • Rename utils.parallactic_angle method to utils.calculate_parallactic_angle and update docstring.

  • Implement publish heartbeat loop in BaseGroupMock.

  • Fix issue closing ATCSMock class. Using asyncio.wait_for is also causing some issues at close time. Replace it with a slightly dumber but more reliable procedure in BaseGroupMock.

  • Add documentation about new coordinate transformation facility.



  • Add new feature to support synchronization between BaseTCS and BaseCamera.

  • Implement synchronization feature in ATCS.

  • Implement placeholder for synchronization feature in MTCS.



  • Reformat code using black 20.

  • Pin version of ts-conda-build to 0.3 in conda recipe.



  • Change default offset to relative=False.

  • Deprecate use of persistent flag in offset commands.

  • Add new absorb flag to offset commands to replace persistent.

  • Add unit tests for offset commands.

  • Replace usage of asynctest.TestCase with unittest.IsolatedAsyncioTestCase.

  • Improve documentation on offset commands.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Add workaround to edge condition while homing the ATDome. Now if the dome is pressing the home switch and we send a home command, it will simply register the dome as homed and won’t send any event to indicate the activity is complete.

  • Add method to reset all offsets in base_tcs.

  • Add set_rem_loglevel method in RemoteGroup, that allows users to set the log level for the remotes loggers.

  • Fix “restore check” feature in prepare for flats.

  • Fix direction of PhysicalSky rotator strategy.

  • Update ATCS to support specifying rotator park position and flat field position. When using point_azel to slew the telescope for a safe position, use the current nasmyth position.

  • Fix setting rotFrame in xml7/8 compatibility mode.

  • Update ronchi170lpmm sweet spot.

  • Support differential ra/dec tracking in BaseTCS.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Updated plate scale to correct math error.

  • Modify to include a sweet-spot for the hologram. Also to make the plate-scale consistent.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Update docs/

  • Update version history.

  • Implement xml 7/8 compatibility.

  • Fix add_point_data in BaseTCS.

  • Fix timeout in opening/closing the dome.

  • Enable atspectrograph ATAOS correction in ATCS.prepare_for_onsky.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Implement xml 7/8 compatibility.

  • Fix add_point_data in BaseTCS.

  • Fix timeout in opening/closing the dome.

  • Add enable atspectrograph ATAOS correction in ATCS.prepare_for_onsky.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Implement workaround for issue with ATDome not reliably finishing open/close dome commands.

  • Fix offset_done method in ATCS, to properly wait for offset to be completed.

  • Improve handling of check.<component> in ATCS.shutdown.

  • Add boresight xy-axis parity determination in ATCS.

  • Implement xml 8 backward compatibility for MTMount in MTCS.

  • Add scripts to run mocks from the command line.

  • Add general base_tcs._offset method to manage offsets.

  • Implement persistent offsets.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Implement changes required by xml 7.1: * Removes NewMTMount (replaced by MTMount) * Update MTMount topics names and attributes.

  • Improve error messages when heartbeat monitor fails.

  • Improve error messages when slew/track target commands fails.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.1.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Stop using topic application from MTRotator which is marked for deprecation.

  • Remove git commit hooks and implement pre-commit.

  • Implement Jenkins shared library for conda build.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.0.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Implement fixes required for xml 7.


  • ts_salobj >= 5.6.0

  • ts_xml >= 7.0.0

  • ts_idl >= 2.0.0

  • IDL files for all components, e.g. built with



  • Remove use of features marked for deprecation in salobj 6.

  • Fix copyright messages that mentioned ts_standardscripts as the source package.

  • Use ts-conda-build metapackage to build conda packages.


  • ts_salobj >= 5.6.0

  • ts_xml >= 6.1.0

  • ts_idl >= 1.3.0

  • IDL files for all components, e.g. built with



  • Move check_tracking to base_tcs.

  • Test check_tracking in test_mtcs.


  • ts_salobj >= 5.6.0

  • ts_xml >= 6.1.0

  • ts_idl >= 1.3.0

  • IDL files for all components, e.g. built with


  • Add UsagesResources class. The class provides a better interface for developers to encode use case information to control/reduce resources needed for operating with the control classes. Implement new UsagesResources class on existing classes: ATCS, LATISS, ComCam, MTCS.

  • In RemoteGroup, add components_attr, which has a list of remotes names and make components return a list of CSC names. CSC names are the string used to create the Remotes (e.g., MTMount or Hexapod:1) whereas remote names are the name of the CSC in lowercase, replacing the colon by and underscore (e.g., mtmount or hexapod_1).


  • ts_salobj >= 5.6.0

  • ts_xml >= 6.1.0

  • ts_idl >= 1.3.0

  • IDL files for all components, e.g. built with


  • Some minor changes to RemoteGroup to support components that only send out telemetry and events and do not reply to commands. This is to support the MTMount component.

  • Add BaseGroupMock class. This class will make writing of mock classes with group of CSCs slightly easier, by taking care of a the basics.

  • Add BaseTCS class to support generic TCS behavior.

  • Add BaseCamera class to support generic Camera behavior.

  • Modify ATCS and LATISS mock classes to use the BaseGroupMock.

  • Initial implementation of MTCS with mock class and unit tests. Currently implemented the basics and a couple of slew commands.

  • Some improvements on how resources isolation (using check namespace) is implemented in TCS classes.


  • ts_salobj >= v5.6.0

  • ts_xml >= v6.1.0

  • ts_idl >= 1.2.2

  • IDL files for all components, e.g. built with


Fix flake8 F541 violations.


  • ts_salobj >=v5.6.0

  • ts_xml >=5.1.0

  • ts_idl >=v1.1.3

  • IDL files for all components, e.g. built with


Update ATCS for compatibility with ts_salobj 5.13. Use the set_start method of remote commands, where practical. Fix a bug in RemoteGroup.set_state: settingsToApply could be None in calls to lsst.ts.salobj.set_summary_state.


  • ts_salobj >=v5.6.0

  • ts_xml >=5.1.0

  • ts_idl >=v1.1.3

  • IDL files for all components, e.g. built with


Update package for compatibility with ts_xml 5.1.


  • ts_salobj >=v5.6.0

  • ts_xml >=5.1.0

  • ts_idl >=v1.1.3

  • IDL files for all components, e.g. built with


Classes moved out of ts_standardscripts into the new repository. Implement new feature, intended_usage, to allow users to limit the resources loaded at initialization time (useful for writing SAL Scripts).


  • ts_salobj >=v5.6.0

  • ts_idl >=v1.1.3

  • IDL files for all components, e.g. built with