Driver

class lsst.ts.scheduler.driver.Driver(models: dict[str, Any], raw_telemetry: dict[str, Any], observing_blocks: dict[str, lsst.ts.observing.block.ObservingBlock], parameters: DriverParameters | None = None, log: Logger | None = None)

Bases: object

The Scheduler Driver is the module that normalizes the interface between any scheduling algorithm to the LSST Scheduler CSC. The interface implements three main behaviours; configure an underlying algorithm, request targets and register successful observations.

If the Scheduler algorithm requires a specific set of parameters the user must subclass DriverParameters, in the same module as the Driver, and add the appropriate parameters using the LSST pexConfig module.

Access to the telemetry stream and models are also interfaced by Driver. The full list of default available telemetry data is shown in the scheduler_csc module. Nevertheless, the full list of telemetry may vary depending on the models used. The user has control over this while configuring the Scheduler CSC.

Parameters:
models: `dict`

A dictionary with models available for the scheduling algorithm.

raw_telemetry: `dict`

A dictionary with available raw telemetry.

observing_blocksdict[str, observing.ObservingBlock]

Observing blocks.

parameters: `DriverParameters`, optional

Input functional parameters for the scheduling algorithm.

log: `Logger`

Parent logger class.

Attributes:
log: `Logger`

Logger class.

parameters: `DriverParameters`

Store functional driver parameters.

models: `dict`

Dictionary with models.

raw_telemetry: `dict`

Dictionary with raw telemetry data.

target_id: `int`

Counter of the number of targets generated by the scheduler since it was last instantiated.

observing_blocksdict[str, observing.ObservingBlock]

Observing blocks.

stop_tracking_script_name: `str`

Name of a SAL Script that can be used to stop the observatory. This is, in general, queued by the Driver when it fails to select an observation.

stop_tracking_script_is_standard: `bool`

Specify if the stop tracking script is standard.

is_night: `bool`

Track if it is night time.

night: `int`

Count the number of nights from the start of the survey.

current_sunset: `float`

Timestamp for the current sunset.

current_sunrise: `float`

Timestamp for the current sunrise.

Methods Summary

assert_survey_observing_script(survey_name)

Assert that the input survey name has a dedicated observing script.

cold_start(observations)

Rebuilds the internal state of the scheduler from a list of observations.

configure_scheduler(config)

This method is responsible for running the scheduler configuration and returning the survey topology, which specifies the number, name and type of projects running by the scheduler.

convert_efd_observations_to_targets(...)

Convert EFD dataframe into list of driver targets.

get_state_as_file_object(targets_queue)

Get the current state of the scheduling algorithm as a file object.

get_stop_tracking_target()

get_survey_observing_block(survey_name)

Return the appropriate survey observing block.

get_survey_topology(config)

Get the survey topology.

load(config)

Load a modifying configuration.

parse_observation_database(filename)

Parse an observation database into a list of observations.

register_observation(target)

Register observations.

register_observed_target(target)

Validates observed target and returns an observation.

reset_from_state(filename)

Load the state from a file.

save_state()

Save the current state of the scheduling algorithm to a file.

select_next_target()

Picks a target and returns it as a target object.

select_next_targets()

Select a list of targets.

update_conditions()

Update driver internal conditions.

Methods Documentation

assert_survey_observing_script(survey_name: str) None

Assert that the input survey name has a dedicated observing script.

Parameters:
survey_namestr

Name of the survey.

Raises:
AssertError:

If survey_name is not in the list of valid survey observing scripts.

cold_start(observations: list[lsst.ts.scheduler.driver.observation.Observation]) None

Rebuilds the internal state of the scheduler from a list of observations.

Parameters:
observationslist`[`Observation]

List of observations.

configure_scheduler(config: SimpleNamespace) SurveyTopology

This method is responsible for running the scheduler configuration and returning the survey topology, which specifies the number, name and type of projects running by the scheduler.

By default it will just return a test survey topology.

Parameters:
configtypes.SimpleNamespace

Configuration, as described by schema/Scheduler.yaml

Returns:
survey_topologySurveyTopology

Survey topology.

convert_efd_observations_to_targets(efd_observations: DataFrame) List[DriverTarget]

Convert EFD dataframe into list of driver targets.

Parameters:
efd_observationspandas.DataFrame

Data frame returned from a query to the EFD for observations.

get_state_as_file_object(targets_queue: list[lsst.ts.scheduler.driver.driver_target.DriverTarget]) BytesIO

Get the current state of the scheduling algorithm as a file object.

Parameters:
targets_queuelist`[`DriverTarget]

A List of targets in the queue to be observed.

Returns:
file_objectio.BytesIO

File object with the current.

get_stop_tracking_target() DriverTarget
get_survey_observing_block(survey_name: str) ObservingBlock

Return the appropriate survey observing block.

Parameters:
survey_namestr

Name of the survey.

Returns:
observing.ObservingBlock

Survey observing block.

get_survey_topology(config: SimpleNamespace) SurveyTopology

Get the survey topology.

Parameters:
configtypes.SimpleNamespace

Configuration, as described by schema/Scheduler.yaml

Returns:
survey_topologySurveyTopology

Survey topology.

load(config: str) None

Load a modifying configuration.

The input is a file that the Driver must be able to parse. It should contain that the driver can parse to reconfigure the current scheduler algorithm. For instance, it could contain new targets to add to a queue or project.

Each Driver must implement its own load method. This method just checks that the file exists.

Parameters:
configstr

Configuration to load

Raises:
RuntimeError:

If input configuration file does not exists.

parse_observation_database(filename: str) None

Parse an observation database into a list of observations.

Parameters:
filenamestr
Returns:
observationslist of DriverTarget
register_observation(target: DriverTarget) None

Register observations.

This method should store the observation in a way that can be retrieved afterwards by the driver.

The default implementation is not implemented.

Parameters:
targetDriverTarget

Observation to register.

register_observed_target(target: DriverTarget) Observation

Validates observed target and returns an observation.

Parameters:
targetDriverTarget

Observed target to register.

Returns:
Observation

Registered observation.

reset_from_state(filename: str) None

Load the state from a file.

save_state() None

Save the current state of the scheduling algorithm to a file.

Returns:
filename: str

The name of the file with the state.

select_next_target() DriverTarget

Picks a target and returns it as a target object.

By default it will just return a dummy test target.

Returns:
DriverTarget
select_next_targets() list[lsst.ts.scheduler.driver.driver_target.DriverTarget]

Select a list of targets.

By default it will just return a dummy test target.

Returns:
list [DriverTarget]
update_conditions() None

Update driver internal conditions.

When subclassing this method, make sure to call it at the start of the method, as it performs operations like running the observatory through the current targets on the queue.