Simonyi SAL Scripts & Configurations

The following tables display the common SAL scripts used during operations with the Simonyi Telescope. These scripts are compatible with the LOVE MTQueue interface and include lower-level commands using run_command.py.

Scripts are available in the ts_maintel_standardscripts repository, with common and useful configurations. Refer to ts-xml to see the XML schema.

The tables contain the following information:

  • A simple description of the action/command that the script initiates to the appropriate CSCs.

  • The script name to search for in the ScriptQueue as well as a link to its GitHub documentation.

  • Examples of common SAL script and/or run_command.py configurations. Scripts that require empty configurations are labeled as “No Configuration..”

General Scripts

Command

SAL Script

Script Configuration

Set Summary State CSC Component

set_summary_state.py

Note

Available Simonyi Subsystems:
MTMount, MTRotator, MTHexapod:1 (Cam), MTHexapod:2 (M2), MTM2, MTPtg, MTAOS, MTDome, MTM1M3, LSSTCam

Available States:
STANDBY, ENABLED, DISABLED, OFFLINE
SAL Script

If we want to send MTMount to the DISABLED state:

set_summary_state.py
data:
  - [MTMount, DISABLED]
Or, we can use another format to send MTAOS to STANDBY:
data:
  -
    - MTAOS
    - STANDBY

self.group.components Naming Convention

Note

The name of the CSC must match the name of the CSC in group.components, which is the name of the CSC in lowercase, replacing the “:” with “_” for indexed components.

Examples:
ATMCSatmcs
MTHexapod:1mthexapod_1
SAL Script

To use an ignore property in a SAL Script the format is as follows:

ignore:
  - mtdometrajectory
  - mthexapod_1
  - mtaos

Or, the components can also be written as a list:

ignore: [mtdometrajectory, mthexapod_1, mtaos]

Check and Prepare Telescope Systems for Observing

ensure_on_sky_readiness.py
SAL Script

Default Configuration:

ensure_on_sky_readiness.py
slew_flags = ["ACCELERATIONFORCES", "BALANCEFORCES",
             "VELOCITYFORCES", "BOOSTERVALVES"]
enable_flags = [True, True, True, False]

Enable EAS with Different Configurations

set_summary_state.py

Note

In normal operations, this command is not necessary.
Only perform this task with approval from support scientists.
SAL Script

If we want to disable the M1M3 thermal system component of the EAS:

set_summary_state.py
data:
  - [EAS, STANDBY]
  - [EAS, ENABLED, "disable_m1m3ts.yaml"]

Scheduler

Command

SAL Script

Script Configuration

Enable Simonyi Scheduler

maintel/scheduler/enable.py

Note

Properties: config (string): Name of the configuration .yaml file.

This loads the .yaml configuration file and can also be used to state-cycle the scheduler.

SAL Script

If we want to enable the standard configuration for the LSST survey:

maintel/scheduler/enable.py
config: fbs_config_lsst_survey.yaml

Start Scheduler-Driven Observations

maintel/scheduler/resume.py

No Configuration.

Stop Scheduler-Driven Observations

maintel/scheduler/stop.py

No Configuration.

Start a Testing BLOCK

maintel/scheduler/add_block.py

Note

Properties:

  • id (string): Name of the BLOCK to be run.

  • override: List of parameters to be changed/updated in the BLOCK.

Current available BLOCKs listed here.

SAL Script

If we wanted to run the initial alignment for Simonyi (BLOCK-T539):

maintel/scheduler/add_block.py
id: BLOCK-T539

MTM1M3

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/m1m3

Command

SAL Script

Script Configuration

Raise/Lower M1M3

/raise_m1m3.py [code]
/lower_m1m3.py

No Configuration.

Slew Flags

/enable_m1m3_slew_controller_flags.py

SAL Script

Configuration for normal operations:

enable_m1m3_slew_controller_flags.py
slew_flags: [ACCELERATIONFORCES, BALANCEFORCES, VELOCITYFORCES, BOOSTERVALVES]
enable: [True, True, True, True]

To disable a specific slew flag, change the appropriate boolean to False.

Enable/Disable Force Balance System

/enable_m1m3_balance_system.py
/disable_m1m3_balance_system.py

No Configuration.

Check M1M3 Hardpoint Breakaway

/check_hardpoint.py

Note

Default Configuration:

hardpoints: all
SAL Script

To check specific hardpoints:

check_hardpoint.py
hardpoints: [1, 2, 4]

M1M3 Bump Test Any/All Actuators

/check_actuators.py

Note

Default Configuration:

actuators: all
ignore_actuators: []
SAL Script

Provide a list of the actuators to test:

check_actuators.py
actuators: [101, 102, 103, 104]

Or check all actuators and ignore_actuators:

actuators: all
ignore_actuators: [333, 412]

Enter Engineering Mode

run_command.py

run_command.py
run_command.py
component: MTM1M3
cmd: enterEngineering

Exit Engineering Mode

run_command.py

run_command.py
run_command.py
component: MTM1M3
cmd: exitEngineering

MTM2

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/m2

Command

SAL Script

Script Configuration

Enable/Disable M2 Closed-Loop

/enable_m2_closed_loop.py
/disable_m2_closed_loop.py

No Configuration.

M2 Bump Test Any/All Actuators

/check_actuators.py

Note

Default Configuration:

actuators: all
ignore_actuators: []
period: 60
force: 10
SAL Script

Write specific actuators in an array to bump test only those:

check_actuators.py
actuators: [121, 160]
period: 5
force: 10

Or ignore certain actuators:

ignore_actuators: [333, 412]

MTHexapods

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/

Command

SAL Script

Script Configuration

Enable/Disable Compensation Mode

enable_hexapod_compensation_mode.py [code]
disable_hexapod_compensation_mode.py

Note

Default Configuration applies to both hexapods:

components: ["M2Hexapod", "CameraHexapod"]
SAL Script

For M2 Hexapod only:

enable_hexapod_compensation_mode.py
components:
  - M2Hexapod

For Camera Hexapod only:

components:
  - CameraHexapod

Reset M2/Camera Hexapod Positions

run_command.py

Note

For Camera Hexapod use component: MTHexapod:1 For M2 Hexapod use component: MTHexapod:2

run_command.py
run_command.py
component: MTHexapod:2
cmd: move
parameters:
    x: 0
    y: 0
    z: 0
    u: 0
    v: 0
    w: 0

x, y, z position in microns and u, v, w rotation in degrees.

Offset M2/Camera Hexapods

offset_camera_hexapod.py
offset_m2_hexapod.py

Note

Properties: x, y, z, u, v, and reset_axes.
x, y, z position in microns and u, v rotation in degrees.
SAL Script

Reset the positions before applying offsets in x, z and u axes:

offset_camera_hexapod.py
x: 1
z: 3
u: 0.23
reset_axes: true

To reset offsets from all axes:

reset_axes: "all"

Or to reset only certain axes:

reset_axes: ["x", "z", "u"]

Change Hexapod YAML Configuration

set_summary_state.py

Note

In normal operations, this command is not necessary.
Only perform this task with approval from support scientists.
SAL Script
set_summary_state.py
data:
  -
    - MTHexapod:1
    - Standby
  -
    - MTHexapod:1
    - Enabled
    - laser_rotation_elevation_v18.yaml
  -
    - MTHexapod:2
    - Standby
  -
    - MTHexapod:2
    - Enabled
    - laser_rotation_elevation_v18.yaml

MTRotator

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/mtrotator

Command

SAL Script

Script Configuration

Move Rotator Angle

/move_rotator.py (code)

Note

angle range: [-89, +89] degrees.

SAL Script

To move the rotator to -45 deg:

move_rotator.py
angle: -45

Stop Rotator

stop_rotator.py

No Configuration.

MTMount

Path 1 (p1): ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/
Path 2 (p2): ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/mtmount

Command

SAL Script

Script Configuration

Home TMA Axes

p1/home_both_axes.py [code]

Note

Requires MTDome CSC in ENABLED or DISABLED.

Script enables M1M3 force balance system and M2Hex and Cam Hex compensation mode.
It also offers the option to move to another position and home again.
SAL Script

To home both axes at the position Az = 1 deg and El = 46 deg:

home_both_axes.py
final_home_position:
  az: 1
  el: 46

The position (Az: 1, El: 46) was chosen to be run every time we home the axes, to avoid offsets inconsistency when homing at different positions.

Move TMA Point-to-Point

p1/move_p2p.py [code]

Note

Default Configuration:

pause_for: 0
move_timeout: 120.0
SAL Script

Select a single point in Az (deg), El (deg) or in RA (hrs), Dec (deg):

move_p2p.py
az: 70
el: 70
ra: 4.59867
dec: 16.5092

If slewing to more than one target, use an array and the pause_for function.

az: [70, 90, 110]
el: [70, 70, 70]
pause_for: 30
ra: [4.59867, 20.2, "12:20:56.5"]
dec: [16.5092, 10.1, "-13:34:04.5"]
pause_for: 15

Note

For (RA, Dec) arrays, sexagesimals may be added as strings.

Point (Az, El)

p1/point_azel.py [code]

Note

Default Configuration:

rot_tel: 0.0
target_name: "AzEl"
wait_dome: false
slew_timeout: 240.0
SAL Script

To point the telescope at Az = 80 deg and El = 80 deg:

point_azel.py
az: 80
el: 80

Track Target

p1/track_target.py [code]

Note

Default Configuration:

offset: {x: 0, y: 0}
differential_tracking: {dra: 0.0, ddec: 0.0}
rot_type: "SkyAuto"
rot_value: 0
track_for: 0
stop_when_done: false
az_wrap_strategy: "OPTIMIZE"
slew_timeout: 240
SAL Script
Slew and track ICRS RA, Dec coordinates.
RA in hours (0, 24), DEC in degrees (-90, +90):
track_target.py
slew_icrs:
  ra: 20.2
  dec: 10.1
RA, DEC in sexagesimals (as strings):
slew_icrs:
  ra: "12:20:56.5"
  dec: "-13:34:04.5"
Slew to Az, El and start tracking:
track_azel:
  az: 65
  el: 45
Slew and track a target name:
target_name: HD150798
Find a target based on AzEl and magnitude limit:
find_target:
  az: 65
  el: 25
  mag_limit: 8

Stop Telescope Tracking

p1/stop_tracking.py [code]

No Configuration.

Open/Close Mirror Covers

p1/open_mirror_covers.py [code]
p1/close_mirror_covers.py [code]

Note

  • If El < 20°, script moves TMA to El 20°.

  • Closes (deploys) OR opens (retracts) the mirror covers.

  • Lock M1M3 mirror covers.

No Configuration.

Change TMA Performance Settings

run_command.py

Note

Remember to restore to default, as the settings are cumulative.

run_command.py

To set MTMount to 10% performance settings:

run_command.py
cmd: applySettingsSet
component: MTMount
parameters:
  restoreDefaults: true
  settings: 10percentperformance

Restore TMA to Default Settings

run_command.py

run_command.py
run_command.py
component: MTMount
cmd: restoreDefaultSettings

Unpark Mount

p2/unpark_mount.py

No Configuration.

Park Mount

p2/park_mount.py

DO NOT USE!

Currently in testing as of Aug 13, 2026.

No Configuration.

MTAOS

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/

Command

SAL Script

Script Configuration

Issue MTAOS Correction

run_command.py

run_command.py
run_command.py
component: MTAOS
cmd: issueCorrection

Reset MTAOS Correction

run_command.py

run_command.py
run_command.py
component: MTAOS
cmd: resetCorrection

Reset Applied Offsets to Degrees of Freedom (DOF)

run_command.py

run_command.py
run_command.py
component: MTAOS
cmd: resetOffsetDOF

Enable/Disable AOS closed-loop

enable_aos_closed_loop.py [code]
disable_aos_closed_loop.py [code]
SAL Script

Default Configuration:

enable_aos_closed_loop.py
truncation_index: 12
used_dofs: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,30,31,32,33,34]

Higher selectivity of DOFs, truncation, zernikes, etc. can be done, with the approval of the AOS team:

used_dofs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
truncation_index: [2]
zn_selected: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 21, 22, 27, 28]

Set Telescope DOFs

set_dof.py

Note

To ignore specific components:

ignore:
  - mtmount
  - mthexapod_1
  - mthexapod_2
  - mtrotator
SAL Script

Select DOFs from a previous image:

set_dof.py
day: 20250630
seq: 457

Apply individual DOFs (microns or arcsec):

# Example: M1M3 bending mode 16
M1M3_B16: 0.3

# Example: M2 hexapod offset in x
M2_dx: 5

Apply multiple DOFs (50-dimensional vector):

  • [0-4]: M2 Rigid Body Motions

  • [5-9]: Camera Rigid Body Motions

  • [10-29]: M1M3 Bending Modes

  • [30-49]: M2 Bending Modes

dofs: [0.0, 1.0, 2.0, 3.0, 4.0,
       5.0, 6.0, 7.0, 8.0, 9.0,
       10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0,
       20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0,
       30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0,
       40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0]

Apply DOFs to Telescope

apply_dof.py

Same configurations as set_dof.py.

Run Closed-Loop System on AOS

close_loop_lsstcam.py

SAL Script

Higher selectivity of script parameters can be done, with the approval of the AOS team.

close_loop_lsstcam.py
exposure_time: 15
max_iter: 5
mode: "FAM"
program: "BLOCK-T249"
note: "initial_focus_dzs_tilts_bending_modes"
used_dofs: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 45, 46]
apply_corrections: true
use_ocps: true
filter: "r_03"

Offset M2/Camera Hexapods (PSF Focus)

offset_m2_hexapod.py
offset_camera_hexapod.py
SAL Script
If the first image shows a donut rather than a PSF, adjust by hand.
Change the camera hexapod z by Dz = [(donut diameter in pixels) * 12] microns.
offset_camera_hexapod.py
z: -Dz
If that makes things worse (bigger donuts):
z: +2 x Dz

Take Triplet Sequence with LSSTCam

take_aos_sequence_lsstcam.py

Note

Default Configurations:

filter: current_filter
exposure_time: 30
dz: 1500
n_sequences: 1
mode: TRIPLET
program: AOSSEQUENCE
SAL Script

The following is an example AOS sequence used in testing:

take_aos_sequence_lsstcam.py
filter: z_20
exposure_time: 10
dz: 800
mode: TRIPLET
program: AOSSEQUENCE
reason: "test"

MTDome

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/mtdome

subSystemId enumerations in MTDome XML:

  • Azimuth Motion Control System (AMCS) = 0x1

  • Aperture Shutter Control System (APSCS) = 0x4

  • Louvers (LCS) = 0x8

Command

SAL Script

Script Configuration

Enable/Disable Dome Following Mode

/enable_dome_following.py [code]
/disable_dome_following.py

No Configuration.

Offset Dome Azimuth

/offset_dome.py

SAL Script

Units of az in degrees.

offset_dome.py
offset: 10

Slew Dome in Azimuth

/slew_dome.py

SAL Script
Units of az in degrees.
If needed, CSC components can be ignored with the ignore parameter.
slew_dome.py
az: 70
ignore:
  - mtmount
  - mthexapod_1
  - mthexapod_2

Park/Unpark Dome

/park_dome.py [code]
/unpark_dome.py [code]
SAL Script

If needed, CSC components can be ignored with the ignore parameter.

park_dome.py
ignore:
  - mtm1m3
  - mtm2
  - mtaos
  - mtdometrajectory
  - mthexapod_1
  - mthexapod_2

Open/Close MTDome

/open_dome.py [code]
/close_dome.py

Note

Both scripts have the force property, useful to bypass errors or conditions (e.g., dome telemetry reports shutters in wrong state, mirror covers lost instead of closed).

The dome can also open/close via a direct override using a run_command.py script, if the normal SAL Script fails to execute properly.

SAL Script

No Configuration., but you can ignore CSCs with the ignore parameter:

open_dome.py
force: false
ignore:
  - mtm1m3
  - mtm2
  - mtaos
  - mtdometrajectory
  - mthexapod_1
  - mthexapod_2
  - mtmount
  - mtptg
  - mtrotator

To open the dome with a run_command.py:

run_command.py
component: MTDome
cmd: openShutter

To close the dome with a run_command.py:

component: MTDome
cmd: closeShutter

Open/Close Dome Louvers

run_command.py

Note

The array values are between 0.0 (closed) and 100.0 (fully open).
Louver Index (0-based):
[A1, A2, B1, B2, B3, C1, C2, C3, D1, D2, D3, E1, E2, E3, F1, F2, F3, G1, G2, G3, H1, H2, H3, I1, I2, I3, L1, L2, L3, M1, M2, M3, N1, N2]
run_command.py

If one wants to open the mechanical louvers highlighted in bold in the Louver Index:

run_command.py
component: MTDome
cmd: setLouvers
parameters:
  position: [0.0, 0.0, 100.0, 0.0, 0.0,
             0.0, 0.0, 0.0, 0.0, 0.0,
             0.0, 100.0, 100.0, 0.0, 0.0,
             0.0, 0.0, 0.0, 0.0, 0.0,
             100.0, 100.0, 0.0, 0.0, 0.0,
             0.0, 0.0, 0.0, 0.0, 100.0,
             0.0, 0.0, 0.0, 0.0]

To close all louvers:

run_command.py
component: MTDome
cmd: closeLouvers

Alternatively, one can use the setLouvers command with value 0 in the louver indices to close specific louvers and leave others open.

Stop Dome and Engage Brakes

run_command.py

Note

Dome subSystemIds:

  • Dome Azimuth: 0x1

  • Dome Shutter: 0x4

  • Louvers: 0x8

run_command.py
run_command.py
component: MTDome
cmd: stop
parameters:
  engageBrakes: true
  subSystemIds: 0x1

Recover from Dome Azimuth Fault

/recover_from_controller_fault.py [code]

Note

The script does the following:

  1. Clears the current dome controller fault.

  2. Turns on drives and moves the dome slightly to confirm fault is cleared.

  3. Re-enables dome following if able to move again.

No Configuration.

Clear Dome Subsystem Fault

run_command.py

Note

Command will also reset dome/shutter drives (see below) internally when attempting to clear faults on those subsystems.

Dome subSystemIds:

  • Dome Azimuth: 0x1

  • Dome Shutter: 0x4

  • Louvers: 0x8

run_command.py

Most common subsystem fault is the Dome Azimuth Drives:

run_command.py
component: MTDome
cmd: exitFault
parameters:
  subSystemIds: 0x1

Reset Dome Azimuth Drives

run_command.py

run_command.py

To reset all dome azimuth drives:

run_command.py
component: MTDome
cmd: resetDrivesAz
parameters:
  reset: [1,1,1,1,1]

Reset Dome Shutter Drives

run_command.py

run_command.py

To reset all dome shutter drives:

run_command.py
component: MTDome
cmd: resetDrivesShutter
parameters:
  reset: [1,1,1,1]

Home Dome Azimuth

/home_dome.py

Note

Required: physical_az (azimuth position as read by markings inside the dome).
SAL Script

If the dome is parked, and its physical azimuth reads 310 deg, instead of its true home position (328 deg):

home_dome.py
physical_az: 310
ignore:
    - mtm1m3
    - mtm2
    - mtaos
    - mtdometrajectory
    - mthexapod_1
    - mthexapod_2
    - mtmount
    - mtptg
    - mtrotator

Home Dome Shutter

run_command.py

run_command.py

Remember to include the subSystemIds parameter:

run_command.py
component: MTDome
cmd: home
parameters:
  subSystemIds: 0x4

Set Dome Shutter to Degraded Mode

run_command.py

Note

Dome operational modes:

  • 1: Normal Mode

  • 2: Degraded Mode (10% Performance)

run_command.py

Remember to include the subSystemIds parameter:

run_command.py
component: MTDome
cmd: setOperationalMode
parameters:
  operationalMode: 2
  subSystemIds: 0x4

Rotate Dome at Constant Velocity

/crawl_az.py [code]

Note

Includes position and velocity properties.

  • position is measures in deg.

  • velocity is measured in deg/second.

Default Configuration:

direction: ClockWise
SAL Script

If we want to move the dome counter-clockwise at a rate of 0.5 deg/second:

crawl_az.py
direction: CounterClockWise
velocity: 0.5

LSSTCam

Path: ts_maintel_standardscripts/python/lsst/ts/maintel/standardscripts/

Command

SAL Script

Script Configuration

Enable LSSTCam

enable_lsstcam.py [code]

DO NOT USE!

Not available as of Aug 13, 2026.

No Configuration.

Standby LSSTCam

standby_lsstcam.py

DO NOT USE!

Not available as of Aug 13, 2026.

No Configuration.

Execute Focus Sweep

focus_sweep_lsstcam.py

Note

Properties with Default Configurations:

sim: false
hexapod: Camera
filter: null
exp_time: 10
axis: ["x", "y", "z", "u", "v"]
focus_window:
n_steps:
focus_step_sequence:
n_images_per_step: 1
program: FOCUS_SWEEP
reason: null
ignore:

Units for focus_window and focus_step_sequence are in microns.

SAL Script
Required for defined focus window — use axis, focus_window and n_steps:
focus_sweep_lsstcam.py
axis: z
focus_window: 300
n_steps: 9
program: "BLOCK-T92"
hexapod: "Camera"
reason: "focus_sweep_cam_dz"
Or required for chosen steps — use axis and focus_step_sequence:
axis: "y"
focus_step_sequence: [200, 50, -50, 200]
hexapod: "M2"
reason: "Sweep in y"

Change Filter

change_filter_lsstcam.py

Warning

MTMount and MTRotator CSCs must be ENABLED for the script to run.

SAL Script

The filter parameter is required for this script. To change to the z_20 filter:

change_filter_lsstcam.py
filter: z_20

Take Image

take_image_lsstcam.py

Note

Typical Configurations Include:

filter: # Current Filter.
nimages: # (Optional) Number of images.
exp_times: # Number of seconds (scalar or array).
image_type: # One of ["BIAS", "DARK", "FLAT",
          #         "OBJECT", "ENGTEST", "ACQ",
          #         "SPOT", "CWFS", "FOCUS"].
reason: # (Optional) Short reason for image(s).
program: # (Optional) Test case used for the images.
note: # (Optional) Additional notes to add.

Required Parameters: exp_times and image_type.

SAL Script

Take a single five-second bias image:

:caption: take_image_lsstcam.py

image_type: BIAS
exp_times: 5

Take two five-second flat images (with a reason):

image_type: FLAT
exp_times: 5
nimages: 2
reason: "flat_test"

Take a single one-second acquisition image for a test case:

image_type: ACQ
exp_times: 1
program: "BLOCK-TXXXX"

Take a single 30-second engineering test image:

image_type: ENGTEST
exp_times: 30
nimages: 1

Track Target and Take Image

track_target_and_take_image_lsstcam.py

SAL Script
All of the following parameters are required:
track_target_and_take_image_lsstcam.py
ra: # ICRS right ascension (hour) in decimal hours or sexagesimal strings.
dec: # ICRS declination (deg) in decimal hours or sexagesimal strings.
rot_sky: # The position angle (deg) in the sky.
name: # Target name.
obs_time: # Time given for starting the slew
num_exp: # Number of exposures.
exp_times: # Array of exposure times in seconds.
band_filter: # Filter used for observation.

Take Stuttered Sequence

take_stuttered_lsstcam.py

Configuration can be found in take_stuttered_lsstcam.py source.

Take AOS Triplet Sequence

maintel/take_aos_sequence_lsstcam.py

Note

Default Configurations:

filter: # Current filter.
exposure_time: 30
dz: 1500
n_sequences: 1
mode: TRIPLET
program: AOSSEQUENCE

Units for dz are in microns.

SAL Script

One can always add a reason to the triplet sequence.

take_aos_sequence_lsstcam.py
filter: z_20
exposure_time: 10
dz: 800
mode: TRIPLET
program: AOSSEQUENCE
reason: "test"

LaserTracker

Command

SAL Script

Script Configuration

Align the TMA to the Calibration Screen

laser_tracker/align.py [code]

Note

The LaserTracker alignment of the Calibration Screen is now done by using id: BLOCK-T495 in the scheduler/add_block.py script.

Default Configuration:

max_iter: 10
tolerance_linear: 0.0001 # in meters
tolerance_angular: 0.00138 # in deg (~5 arcsec)
target: "M2"
# Target Options (REQUIRED):
# "M2", "Camera", or "CALIBRATION_SCREEN"
SAL Script

To align to the calibration screen with a 0.01 deg angular tolerance:

laser_tracker/align.py
target: CALIBRATION_SCREEN
tolerance_angular: 0.01
reason: "Align TMA to Calibration Screen"
program: "BLOCK-T495"

Park the LaserTracker

run_command.py

Note

The LaserTracker parking command is now done by using id: BLOCK-T495 in the scheduler/add_block.py script.

run_command.py

To park the lasertracker at the p2 point on M1M3:

run_command.py
component: LaserTracker:1
cmd: measurePoint
parameters:
  collection: A
  pointgroup: M1M3
  target: p2

MTCalSys

CSC

Command

SAL Script

Script Configuration

General

Open/close MTReflector

run_command.py

run_command.py

To open MTReflector

run_command.py
component: MTReflector
cmd: open

To close the reflector, use cmd: close.

Park the Calibration Projector

maintel/park_calibration_projector.py

No Configuration.

Setup LEDProjector for White Light Flats

maintel/setup_whitelight_flats.py

Note

Default Configuration:

sequence_name: "whitelight_u_source"
ignore: ['TunableLaser','LinearStage:104',
         'CBP','Electrometer:101','Electrometer:102',
         'FiberSpectrograph:101', 'FiberSpectrograph:102']
SAL Script

We can change the sequence_name and ignore unnecessary CSCs based on the provided test cases on Zephyr Scale.

setup_whitelight_flats.py
sequence_name: 'laser_functional'
ignore: ['LinearStage:104', 'CBP',
         'Electrometer:102','Electrometer:101',
         'FiberSpectrograph:101','FiberSpectrograph:102']

Take Specified Whitelight Flats

maintel/take_whitelight_flats_lsstcam.py [code]

Note

Default sequence_names: ["daily"] will run for all installed filters available (g, r, i, z, and u/y).
Metadata parameters available: note, reason, and program.
SAL Script

The following is an example of a specific type Photon Transfer Curve (PTC) script used, where the data is collected for the test case BLOCK-T572:

take_whitelight_flats_lsstcam.py
sequence_names: ['low_level_ptc']
reason: "low_level_led_ptc"
program: "BLOCK-T572"

CBP

Move the CBP to (Az, El) Position

run_command.py

Note

The azimuth and elevation parameters require floating point numbers measured in degrees.

Limits:
Az: [-45.0 to 45.0 deg]
El: [-69.0 to 45.0 deg]
run_command.py

If we want to move the CBP to Az = -0.05 deg and El = -46.5 deg:

run_command.py
component: CBP
cmd: move
parameters:
  azimuth: -0.05
  elevation: -46.5

Change the CBP Mask

run_command.py

Note

There are 5 masks to characterize the beam projection. These are represented by strings of numbers:

  • '1': LSSTCam 1 Pinhole per CCD Mask

  • '2': 1mm Pinhole Mask

  • '3': Empty Slot

  • '4': ComCam 1 Pinhole per CCD Mask

  • '5': 1 Pinhole per Amp Mask

Selection of the mask type for a test case is determined typically by calibration team.

run_command.py

If we want to change the current CBP mask to mask position 1:

run_command.py
component: CBP
cmd: changeMask
parameters:
  mask: '1'

Rotate the CBP Mask

run_command.py

Note

Rotation is between 1 deg and 360 deg.

run_command.py

If we want to rotate the CBP mask to 96.5 deg:

run_command.py
component: CBP
cmd: changeMaskRotation
parameters:
  mask_rotation: 96.5

Set CBP Focus

run_command.py

Note

Focus is measured in microns, and its range is [0, 13000] microns.

run_command.py

If we want to set the focus to 3800 microns:

run_command.py
component: CBP
cmd: setFocus
parameters:
  focus: 3800

Park CBP

run_command.py

Note

The CBP moves to elevation -70 deg, and it locks its motors when parking.

run_command.py
run_command.py
component: CBP
cmd: park

Tunable Laser

Set Tunable Laser Wavelength

run_command.py

Note

Laser wavelengths are measured in nanometers (nm), and the range is between 350 - 1100nm during normal operations.

run_command.py

To change the laser wavelength to 750nm:

run_command.py
component: TunableLaser
cmd: changeWavelength
parameters:
  wavelength: 750

Set Laser Output Configuration

run_command.py

Note

Available optical configurations are located in the XML documentation.

run_command.py

To set the configuration to F2 SCU:

run_command.py
cmd: setOpticalConfiguration
parameters:
  configuration: F2 SCU

Change Tunable Laser Mode

run_command.py

Note

There are two available laser modes: Burst Mode (setBurstMode) and Continuous Mode (setContinuousMode).

run_command.py

To set the tunable laser to burst mode:

run_command.py
component: TunableLaser
cmd: setBurstMode

Start/Stop Tunable Laser Propagation

run_command.py

Note

It is required to set the laser mode (burst/continous) first before activating the laser propagation.

run_command.py

To start propagation:

run_command.py
component: TunableLaser
cmd: startPropagateLaser

To stop propagation, set cmd: stopPropagateLaser.

This procedure was last modified on Aug 13, 2026.