Observing
This chapter describes how to start and manage observations.
Starting an observation
To observe with a station, you must construct the observation’s specifications, and hand it to the DeviceProxy("STAT/ObservationControl/1")
device to start:
observation_spec = {
"observation_id": 12345,
"start_time": "2106-02-07T00:00:00",
"stop_time": "2106-02-07T01:00:00",
"antenna_field": "HBA",
"antenna_set": "ALL",
"filter": "HBA_210_250",
"dithering": {
"enabled": true,
"power": -4.0,
"frequency": 102000000
},
"SAPs": [{
"subbands": [10, 20, 30],
"pointing": { "angle1": 1.0, "angle2": 0, "direction_type": "J2000" }
}, {
"subbands": [40, 50, 60],
"pointing": { "angle1": 2.0, "angle2": 0, "direction_type": "J2000" }
}],
"HBA": {
"DAB_filter": true,
"tile_beam": { "angle1": 1.5, "angle2": 0, "direction_type": "J2000" }
}
}
import json
obs_control = DeviceProxy("STAT/ObservationControl/1")
obs_control.add_observation(json.dumps(observation_spec))
The above specification contains the following parameters:
Parameter |
Description |
---|---|
|
User-specified unique reference to this observation. |
|
automatically start observing when this timestamp is reached. (optional) |
|
automatically stop observing when this timestamp is reached. |
|
Which antenna field to use (LBA, HBA, HBA0, HBA1). |
|
Which subset of antennas to use (ALL, INNER, OUTER, EVEN, ODD). |
|
Which band filter to use (LBA_10_90, LBA_30_70, HBA_110_190, HBA_170_230, HBA_210_250). |
|
Whether to add analog dithering noise to increase linearity. (optional) |
|
Power (in dB) to apply for dithering (-4.0 to -25.0). (optional) |
|
Dithering frequency (in Hz). (optional) |
|
List of pointings and frequencies (subbands) to track and beam form. |
|
Enable the analog filter on the RCUs for DAB radio frequencies. (optional) |
|
Pointing to track with the HBA tiles (optional). (specify for HBA) |
This will configure the specified antenna field (f.e. HBA
) as follows:
STAT/DigitalBeam/HBA
is configured to beam form the antennas in the specifiedantenna_set
, track all pointings given inSAPs[x].pointing
, and produce beamlets for all subbands inSAPs[x].subbands
. The beamlets mirror the subbands in the order in which they are specified,The
observation_id
is used to annotate the beamlet data produced by this observation,STAT/AFH/HBA
is configured to use the specifiedfilter
for the RCUs,STAT/TileBeam/HBA
is configured to beam form all HBA tiles, tracking the giventile_beam
pointing.
Observation Output
The effect of the observations can be observed through the following means, all of which are managed independently from the observation:
The beamlets streaming out of the station towards the processing cluster. The
Beamlet
device is responsible for managing and monitoring this data flow,The statistics streaming out of the station towards the control softwate. The
XST/SST/BST
devices are responsible, and allow inspection of this data flow,The various input signal monitoring points available in the
SDP
device, such asFPGA_input_signal_mean_RW
.
Life cycle
The ObservationControl device will start each Observation when its start time is reached or past, and will stop it at the specified stop time. You can also force this to happen:
obs_control = DeviceProxy("STAT/ObservationControl/1")
obs_control.start_observation_now(12345) # starts observation 12345 now, regardless of its specified start time
obs_control.stop_observation_now(12345) # stops observation 12345 now, regardless of its specified stop time
Managing observation(s)
To manage running observations, we can interact with ObservationControl:
>>> # Check which observations are known (running or yet to run)
>>> obs_control.observations_R
array([12345])
>>> # Check which observations are running
>>> obs_control.running_observations_R
array([12345])
>>> # Stop a running observation
>>> obs_control.stop_observation_now(12345)
>>> # Stop all running observations
>>> obs_control.stop_all_observations_now()
Alternatively, we can inspect a running observation more closely. Each observation is represented by its own device: STAT/Observation/$id
, so if observation 12345 has been started, we can do the following:
observation = DeviceProxy("STAT/Observation/12345")
This device exposes its settings as individual attributes, as well as:
- alive_R:
Ever-increasing value as long as the observation is running. Allows one to check whether monitoring has become stale.
- type:
int
- observation_settings_RW:
JSON string of the specifications of this observation. NB: This attribute cannot be written once the observation has started.
- type:
str
- observation_id_R:
(et al) Each specification parameter can be retrieved individually.
- type:
(depends on specification parameter)