Observatory Control Developer Guide

https://img.shields.io/badge/GitHub-ts_observatory_control-green.svg https://img.shields.io/badge/Jenkins-ts_observatory_control-green.svg https://img.shields.io/badge/Jira-ts_observatory_control-green.svg

The repo defines the RemoteGroup class which represent a group of Commandable SAL Components (CSCs) in the control system. This class implements basic functionality that is common to all groups of CSCs.

Usages: Limiting required resources

In some cases, the high level class may need to communicate with several components at the same time to achieve high-level operations. Some of these components can have high frequency topics which will make the remotes quite heavy to operate. At the same time, depending on the number of remotes a group defines, or the number of groups needed by a certain operation, the overall resources might also be quite heavy. To work around this the RemoteGroup base class provides ways for users to limit the resources to the minimum set required for the intended usage. This is controlled by the optional parameter intended_usage in RemoteGroup.

By default intended_usage = None, which causes the class to load all the resources from the remotes. This can be very helpful when using Jupyter notebooks or testing environments where the user need more flexibility.

The Usages class contains the usages definition. By default, only a small subset of generic operations are defined, e.g., All, StateTransition, MonitorState and MonitorHeartBeat. Note that the meaning of Usages.All is to load the resources for all the defined operations and not to load all the resources.

The resources needed for each operation are defined in the usages property of the RemoteGroup class. This class property defines a dictionary where the keys are the usages and the values are the resources. The resources are instances of types.SimpleNamespace with attributes;


List of components required for the usage. If a component is part of a group but it is not needed for a certain type of usage, the component will not be instantiated during the initialization procedure.


Defines an operation as read only. This will cause all commands to be ignored.


List with topics to include in the operation. The list is common to all components to avoid duplication of generic topics.

Usages can be combined in bitwise operation, e.g.;

intended_usage = Usages.StateTransition | Usages.MonitorHeartBeat

This would cause the class to load the combined resources for both StateTransition and MonitorHeartBeat operations.

When subclassing RemoteGroup, users will probably also have to subclass the Usages class to add operations define by their class. It will also be necessary to override the the usages property to return a dictionary with the new definition and make sure to return the new Usages class in valid_use_cases.


lsst.ts.observatory.control is developed at https://github.com/lsst-ts/ts_observatory_control. You can find Jira issues for this module under the ts_observatory_control component.

Python API reference

lsst.ts.observatory.control Package


calculate_parallactic_angle(location, lst, ...)

Calculate the parallactic angle.


Return an int or a string.

dataclass([cls, init, repr, eq, order, ...])

Add dunder methods based on the fields defined in the class.


Return the path to the internal catalog directory.


Return the path to the internal data directory.

handle_exception_in_dict_items(input_dict[, ...])

Handle execeptions in dictionary items.


BaseCamera(components, ...[, domain, log, ...])

Base class for camera instruments.

BaseTCS(components[, domain, log, ...])

Base class for Telescope Control System.

CalibrationType(value[, names, module, ...])

Defines the different types of flat field calibrations

CameraExposure(exp_time, shutter, ...)

Store the parameters that define an exposure.

ClosedLoopMode(value[, names, module, ...])

Defines the different mode to run closed loop.

DOFName(value[, names, module, qualname, ...])

Defines the different Degrees of Freedom used in AOS.

InstrumentFocus(value[, names, module, ...])

Defines the different types of instrument focus location.

KwArgsCoro(*args, **kwargs)

KwArgsFunc(*args, **kwargs)

RemoteGroup(components[, domain, log, ...])

High-level abstraction of a collection of salobj.Remote.


Base class for testing groups of CSCs.

RotType(value[, names, module, qualname, ...])

Available types of rotation, i.e. the meaning of the rot_angle argument in slew operations.


Define usages for a RemoteGroup.

UsagesResources(components_attr, readonly[, ...])

Represent the resources needed for Usages.

lsst.ts.observatory.control.auxtel Package


ATCS([domain, log, intended_usage])

High level library for the Auxiliary Telescope Control System


ATCS usages definition.

ATCalSys([electrometer_index, ...])

Implement high level ATCalSys functionality.

ATQueue([domain, log, intended_usage])

High level class to operate the Auxiliary Telescope ScriptQueue.

LATISS([domain, log, intended_usage, ...])

LSST Auxiliary Telescope Image and Slit less Spectrograph (LATISS).


LATISS usages definition.

lsst.ts.observatory.control.maintel Package


ComCam([domain, log, intended_usage, ...])

Commissioning Camera (ComCam).

LSSTCam([domain, log, intended_usage, ...])

LSST Camera (LSSTCam).

MTCS([domain, log, intended_usage])

High level library for the Main Telescope Control System

MTQueue([domain, log, intended_usage])

High level class to operate the Main Telescope ScriptQueue.