planner

Summary:

Cached state of the survey afternoon planner.

Naming Convention:

planner_YEAR-MM-DD.fits, where YEAR-MM-DD is the date of the afternoon when the planner was run.

Regex:

planner_[0-9]{4}-[0-9]{2}-[0-9]{2}\.fits

File Type:

FITS, 400 KB

Contents

Number

EXTNAME

Type

Contents

HDU0

IMAGE

Blank.

HDU1

PLAN

BINTABLE

Survey planner state.

FITS Header Units

HDU0

EXTNAME = (None)

Empty HDU.

HDU1

EXTNAME = PLAN

Snapshot of the internal state of a desisurvey.plan.Planner object.

Required Header Keywords

KEY

Example Value

Type

Comment

NAXIS1

29

int

length of dimension 1.

NAXIS2

16071

int

length of dimension 2.

CADENCE

monthly

str

Fiber assignment cadence (monthly / daily).

FIRST

2019-12-01

str

First night that was planned.

LAST

2024-11-29

str

Last night that has been planned so far.

Required Data Table Columns

Name

Type

Units

Description

TILEID

int64

Tile ID from the tiles file.

COVERED

int64

Day number that tile was first covered relative to FIRST or -1.

COUNTDOWN

int64

Countdown of remaining fiber assignment cycles until this tile will be assigned.

AVAILABLE

logical

Does this tile have fibers already assigned?

PRIORITY

float64

Relative priority for scheduling this tile. Must be >= 0.

The meaning of “covered” is specified by the fiber_assignment_order configuration parameter, which also specifies the starting COUNTDOWN value for each pass.

Each row of the table corresponds to one tile with indexing that matches desisurvey.tiles.Tiles.

Notes and Examples

A Planner object manages updates during afternoon planning:

import desisurvey.rules
import desisurvey.plan
rules = desisurvey.rules.Rules()
planner = desisurvey.plan.Planner(rules)

Its internal state after each afternoon can be saved using, for example:

planner.save('planner_snapshot.fits')

This state can then be later restored using:

planner = desisurvey.plan.Planner(rules, restore='planner_snapshot.fits')