Commands
Commands are parameter sets called Setup, Observe, and Wait. A command is created with the source of the command, given by a prefix, the name of the command, and an optional ObsId
. Parameters are added to the command as needed.
ObsId
An ObsID
, or observation ID, indicates the observation the command is associated with. It is a simple string.
- Typescript
-
source
const obsId: string = 'Obs001'
Prefix
The source of the command is given by the prefix, which should be the full name of the component sending the command. A prefix can be constructed with a string, but must start with a valid subsystem as in Subsystem. A component developer should supply a valid prefix string and the subsystem will be automatically parsed from it. An example of a valid string prefix is “nfiraos.ncc.trombone”.
Type definition can be found @here
See below examples:
- Typescript
-
source
const prefix: Prefix = new Prefix('NFIRAOS', 'ncc.trombone')
CommandName
Each command has a name given as a string. The string should be continuous with no spaces.
Setup Command
This command is used to describe a goal that a system should match. The component developer is required to supply following arguments to create a Setup
command.
- Prefix: the source of the command as described above
- CommandName: a simple string name for the command (no spaces)
- ObsId: an optional observation id.
- paramSet: Optional Set of Parameters. Default is empty.
Type definition for Setup Command can be found here
- Typescript
-
source
const obsId: string = 'Obs001' const prefix: Prefix = new Prefix('NFIRAOS', 'ncc.trombone') const commandName = 'move' const filterKey = intArrayKey('filter') const filterParam: Parameter<IntArrayKey> = filterKey.set([ [1, 2, 3], [4, 5, 6] ]) const setup: Setup = new Setup(prefix, commandName, [filterParam], obsId)
Observe Command
This command describes a science observation. It is intended to be sent only to Science Detector Assemblies and Sequencers.
Type definition for Observe Command can be found here
- Typescript
-
source
const obsId: string = 'Obs001' const prefix: Prefix = new Prefix('NFIRAOS', 'ncc.trombone') const commandName = 'move' const filterKey = intArrayKey('filter') const filterParam: Parameter<IntArrayKey> = filterKey.set([ [1, 2, 3], [4, 5, 6] ]) const observe: Observe = new Observe(prefix, commandName, [filterParam], obsId)
Wait Command
This command causes a Sequencer to wait until notified. It can only be sent to Sequencers.
Type definition for Wait Command can be found here
- Typescript
-
source
const obsId: string = 'Obs001' const prefix: Prefix = new Prefix('NFIRAOS', 'ncc.trombone') const commandName = 'move' const filterKey = intArrayKey('filter') const filterParam: Parameter<IntArrayKey> = filterKey.set([ [1, 2, 3], [4, 5, 6] ]) const wait: Wait = new Wait(prefix, commandName, [filterParam], obsId)
Unique Key constraint
By design, a ParameterSet in a Setup, Observe, or Wait command is optimized to store only unique keys. When using add
or madd
methods on commands to add new parameters, if the parameter being added has a key which is already present in the paramSet
, the already stored parameter will be replaced by the given parameter.
If the Set
is created by component developers and given directly while creating a command, then it will be the responsibility of component developers to maintain uniqueness with parameters based on key.
Here are some examples that illustrate this point:
- Typescript
-
source
const obsId: string = 'Obs001' const prefix: Prefix = new Prefix('NFIRAOS', 'ncc.trombone') const commandName = 'move' const filterKey = intArrayKey('filter') const randomKey = stringKey('directions') const filterParam: Parameter<IntArrayKey> = filterKey.set([[1, 2, 3]]) const param1 = randomKey.set(['east', 'west']) const param2 = randomKey.set(['north', 'south']) const wait: Wait = new Wait(prefix, commandName, [filterParam], obsId) wait.madd([param1, param2]) //duplicate keys will not be added. Should contain one randomKey and one Filter key wait.paramSet.forEach((x) => console.log(x.keyName))