Configuring the Script
This section describes the configuration of the vis-recieve script, covering the options available in the JSON configuration string supplied to AssignResources, the required environment variables, the helm chart arguments, and setting receive addresses.
Configuration Parameters
The vis-receive script can be configured through the following Processing Block parameters, all of which are optional:
Name |
Description |
Default |
|---|---|---|
Number of frequency channels that will be sent to each port. |
|
|
Number of processes to start per node, useful if CPU usage becomes a problem. |
|
|
Number of nodes to allocate. |
|
|
The first port each receiver will open to listen for data. |
|
|
The transport protocol the receiver should use ( |
|
|
The network the receiver will bind itself to. Overrides
|
|
|
Whether hostnames can be written into the SDP receive addresses or not. This setting is only relevant for cases where the receiver binds itself to the
Kubernetes network. In these case resolving hostnames into IPs has the effect that
the Processing Block will take longer to become When the receiver binds itself to the host’s NIC this setting has no effect, as the receive addresses are already filled with IPs. |
|
|
When set, produces no deployment of the vis-receive chart. Useful for debugging of the output Helm values and the generated receive addresses,
which are filled with IPs in the |
|
|
Configuration for Telescope Model access. |
|
|
Settings for the signal-display processor. |
|
|
Settings for the mswriter processor. |
|
|
Settings for the rcal processor. |
|
- pydantic model VisReceiveParams
Processing block parameters read by vis-receive script.
These are provided by the processing block definition by assign_resources.
- field channels_per_port: int = 1
Number of frequency channels that will be sent to each port.
- field processes_per_node: int | None = None
Number of processes to start per node, useful if CPU usage becomes a problem.
- field port_start: int = 21000
The first port each receiver will open to listen for data.
- field transport_protocol: str = 'udp'
The transport protocol the receiver should use (
"tcp"or"udp").
- field reception_network: ReceptionNetwork = ReceptionNetwork.AUTO
The network the receiver will bind itself to. Overrides
use_network_definitionwhen set.hardwareindicates the host’s NICsoftwareindicates the internal Kubernetes networkautolets the script determine ifhardwaresupport is available
- Constraints:
strict = False
- field allow_hostnames_in_receive_addresses: bool = False
Whether hostnames can be written into the SDP receive addresses or not.
This setting is only relevant for cases where the receiver binds itself to the Kubernetes network. In these case resolving hostnames into IPs has the effect that the Processing Block will take longer to become
READY, which in turn means the subarray will take longer to transition toIDLE.When the receiver binds itself to the host’s NIC this setting has no effect, as the receive addresses are already filled with IPs.
- field dry_run: bool = False
When set, produces no deployment of the vis-receive chart.
Useful for debugging of the output Helm values and the generated receive addresses, which are filled with IPs in the
127.0.0.0/8link-local network.
- field telescope_model: TelescopeModel [Optional]
Configuration for Telescope Model access.
- field signal_display: SignalDisplay [Optional]
Settings for the signal-display processor.
- field mswriter: MSWriter [Optional]
Settings for the mswriter processor.
- field rcal: RCal [Optional]
Settings for the rcal processor.
- property effective_processes_per_node: int
The effective number of processes per node, in case the corresponding setting was
None.
An example set of parameters can be found here.
Processing block parameters read by vis-receive script. |
|
Values accepted by the reception_network vis-receive script parameter. |
|
Receiver Settings. |
|
Network Mapping. |
|
Realtime processor settings. |
|
Liveness probe settings. |
|
Telescope state parameters from TMC. |
|
Configuration for the Measurement Set Writer processor |
|
Configuration for the realtime calibration processor. |
|
Configuration for direction-dependendant calibration extensions such as ionospheric calibration. |
|
Configuration for the Signal Display Metrics processor. |
|
List of metrics that can be requested. |
|
environment variable present in a Container. |
- pydantic model VisReceiveParams
Processing block parameters read by vis-receive script.
These are provided by the processing block definition by assign_resources.
Show JSON schema
{ "title": "VisReceiveParams", "description": "Processing block parameters read by vis-receive script.\n\nThese are provided by the processing block definition by assign_resources.", "type": "object", "properties": { "channels_per_port": { "default": 1, "description": "Number of frequency channels that will be sent to each port.", "title": "Channels Per Port", "type": "integer" }, "processes_per_node": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Number of processes to start per node, useful if CPU usage becomes a problem.", "title": "Processes Per Node" }, "num_nodes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Number of nodes to allocate.", "title": "Num Nodes" }, "port_start": { "default": 21000, "description": "The first port each receiver will open to listen for data.", "title": "Port Start", "type": "integer" }, "transport_protocol": { "default": "udp", "description": "The transport protocol the receiver should use (``\"tcp\"`` or ``\"udp\"``).", "title": "Transport Protocol", "type": "string" }, "reception_network": { "$ref": "#/$defs/ReceptionNetwork", "default": "auto", "description": "The network the receiver will bind itself to. Overrides\n``use_network_definition`` when set.\n\n* ``hardware`` indicates the host's NIC\n* ``software`` indicates the internal Kubernetes network\n* ``auto`` lets the script determine if ``hardware`` support is available" }, "allow_hostnames_in_receive_addresses": { "default": false, "description": "Whether hostnames can be written into the SDP receive addresses or not.\n\nThis setting is only relevant for cases where the receiver binds itself to the\nKubernetes network. In these case resolving hostnames into IPs has the effect that\nthe Processing Block will take longer to become ``READY``, which in turn means the\nsubarray will take longer to transition to ``IDLE``.\n\nWhen the receiver binds itself to the host's NIC this setting has no effect,\nas the receive addresses are already filled with IPs.", "title": "Allow Hostnames In Receive Addresses", "type": "boolean" }, "dry_run": { "default": false, "description": "When set, produces no deployment of the vis-receive chart.\n\nUseful for debugging of the output Helm values and the generated receive addresses,\nwhich are filled with IPs in the ``127.0.0.0/8`` link-local network.", "title": "Dry Run", "type": "boolean" }, "telstate": { "anyOf": [ { "$ref": "#/$defs/TelState" }, { "type": "null" } ], "default": null, "description": "Telescope state parameters from TMC." }, "telescope_model": { "$ref": "#/$defs/TelescopeModel", "default": { "layout_key": "instrument/ska1_low/layout/low-layout.json", "station_data_key_path": "stations" }, "description": "Configuration for Telescope Model access." }, "extra_helm_values": { "additionalProperties": true, "default": {}, "deprecated": true, "description": "Extra Helm values for the `ska-sdp-helmdeploy-vis-receive\n<https://gitlab.com/ska-telescope/sdp/ska-sdp-helmdeploy-charts/-/tree/master/charts/ska-sdp-helmdeploy-vis-receive>`_\nhelm chart.\n\n.. admonition:: Pending Deprecation\n\n Pending deprecation", "title": "Extra Helm Values", "type": "object" }, "pod_settings": { "default": [], "deprecated": true, "description": "Receiver settings corresponding to receiver nodes index defined by ``num_nodes``.\n\nFewer settings than receiver node will automatically tile to either\nprovide settings to each node or no settings.\n\n.. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0", "items": { "$ref": "#/$defs/PodSettings" }, "title": "Pod Settings", "type": "array" }, "signal_display": { "$ref": "#/$defs/SignalDisplay", "default": { "metrics": [ "all" ], "version": null, "image": null, "nchan_avg": 5, "window_count": 5, "rounding_sensitivity": 5, "max_message_bytes": 52428800 }, "description": "Settings for the signal-display processor." }, "mswriter": { "$ref": "#/$defs/MSWriter", "default": { "upper_triangular_baselines": false, "telescope_name": null, "phase": "SOLID", "expires_at": "2099-12-31T00:00:00Z" }, "description": "Settings for the mswriter processor." }, "rcal": { "$ref": "#/$defs/RCal", "default": { "enabled": false, "accumulation_time": 10, "fov": 5.0, "sky_model": "", "flux_limit": null, "uv_min": null, "autoflag": true, "rfi_masks": null, "preproc_ave_time": null, "preproc_ave_frequency": null, "output_h5": null, "flip_uvw": false, "scale_gains": false, "scale_factor": null, "low_gain_threshold": 0.1, "threshold_headroom": false, "gain_headroom": 0.1, "ddcal": null }, "description": "Settings for the rcal processor." }, "processors": { "additionalProperties": { "$ref": "#/$defs/Processor" }, "default": { "mswriter": { "args": null, "command": null, "env": null, "image": null, "imagePullPolicy": null, "name": null, "readinessProbe": null, "resources": null, "version": null } }, "description": "Named mapping of settings for realtime processors launched per receive node.", "title": "Processors", "type": "object" } }, "$defs": { "DDCal": { "additionalProperties": false, "description": "Configuration for direction-dependendant calibration extensions such as\nionospheric calibration.\n\n.. warning:: Experimental", "properties": { "calibrator_selection": { "const": "strongest", "default": "strongest", "description": "Direction-dependent calibrator selection heuristic from the tied-array\nbeam local sky model.\n\n* strongest: selects N-calibrators ordered by descending flux density.", "title": "Calibrator Selection", "type": "string" }, "max_calibrators_per_beam": { "default": 20, "description": "Maximum direction-dependent calibrators per visibility beam.", "title": "Max Calibrators Per Beam", "type": "integer" }, "max_antenna_clustering_distance": { "default": 0.0, "description": "Maximum distance in metres for clustering close antennas in TEC\ncomputation.\n\nUseful for sub-optimally spread stations and bad weather.\nDefault is 0 (no clustering).", "title": "Max Antenna Clustering Distance", "type": "number" }, "min_baseline_distance": { "default": 1000.0, "description": "Minimum baseline distance in metres for calibration baseline\nflagging.", "title": "Min Baseline Distance", "type": "number" }, "max_gradient_fitting_channels": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Maximum number of frequency channels to compute ionospheric gradient\nper receiver sub-band.\n\nChannels are selected from highest to lowest per receiver-band. None\nselects all channels.", "title": "Max Gradient Fitting Channels" } }, "title": "DDCal", "type": "object" }, "EnvVar": { "additionalProperties": true, "description": "environment variable present in a Container.\n\n.. seealso::\n\n Defined by `k8s EnvVar\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables>`_.", "properties": { "name": { "title": "Name", "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Value" }, "valueFrom": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Valuefrom" } }, "required": [ "name" ], "title": "EnvVar", "type": "object" }, "MSWriter": { "description": "Configuration for the Measurement Set Writer processor", "properties": { "upper_triangular_baselines": { "default": false, "title": "Upper Triangular Baselines", "type": "boolean" }, "telescope_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Telescope Name" }, "phase": { "default": "SOLID", "enum": [ "SOLID", "LIQUID", "GAS" ], "title": "Phase", "type": "string" }, "expires_at": { "default": "2099-12-31T00:00:00Z", "format": "date-time", "title": "Expires At", "type": "string" } }, "title": "MSWriter", "type": "object" }, "NetworkMapping": { "additionalProperties": false, "description": "Network Mapping.", "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Name of the NetworkAttachmentDefinition used to setup the pod networking.", "title": "Name" }, "namespace": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The namespace where the NetworkAttachmentDefinition is defined.", "title": "Namespace" }, "deviceID": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The PCI ID of the network interface in the host machine (used with Multus).", "title": "Deviceid" }, "ip": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The IP to assign to the network interface.", "title": "Ip" } }, "title": "NetworkMapping", "type": "object" }, "PodSecurityContext": { "additionalProperties": true, "description": "SecurityContext holds pod-level security attributes and common container settings.\n\n.. seealso::\n\n Defined by `k8s PodSecurityContext\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context>`_.", "properties": { "privileged": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Privileged" }, "runAsUser": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Runasuser" }, "runAsNonRoot": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Runasnonroot" }, "runAsGroup": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Runasgroup" } }, "title": "PodSecurityContext", "type": "object" }, "PodSettings": { "additionalProperties": false, "description": "Receiver Settings.", "properties": { "extraMetadata": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "deprecated": true, "description": "Extra pod metadata.\n\n.. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0", "title": "Extrametadata" }, "networkMapping": { "anyOf": [ { "$ref": "#/$defs/NetworkMapping" }, { "type": "null" } ], "default": null, "description": ".. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0" }, "nodeSelector": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "Dictionary used to select which node should run the pod.", "title": "Nodeselector" }, "receiverResources": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "deprecated": true, "description": ".. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0", "title": "Receiverresources" }, "securityContext": { "anyOf": [ { "$ref": "#/$defs/PodSecurityContext" }, { "type": "null" } ], "default": null, "description": "SecurityContext holds pod-level security attributes and common container\nsettings.\n\nOptional: Defaults to empty.\nSee type description for default values of each field.\n\n.. admonition:: Pending Deprecation\n Pending deprecation in 8.0.0" } }, "title": "PodSettings", "type": "object" }, "Probe": { "description": "Liveness probe settings.", "properties": { "file": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "File" }, "initialDelaySeconds": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Initialdelayseconds" }, "periodSeconds": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Periodseconds" } }, "title": "Probe", "type": "object" }, "Processor": { "additionalProperties": false, "description": "Realtime processor settings. Defaults values are defined in corresponding\nprocessors definitions by name in the `processors directory\n<https://gitlab.com/ska-telescope/sdp/ska-sdp-script/-/tree/master/src/ska-sdp-script-vis-receive/processors>`_.\n\nDeployed via the ``full-container`` helm macro in `ska-sdp-helmdeploy-vis-receive\n<https://gitlab.com/ska-telescope/sdp/ska-sdp-helmdeploy-charts/-/blob/master/charts/ska-sdp-helmdeploy-vis-receive/templates/_helpers.tpl?ref_type=heads#L104>`_.", "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Processor name corresponding to a file name in the processors directory.", "title": "Name" }, "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "OCI image name.", "title": "Image" }, "version": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "OCI image version tag.", "title": "Version" }, "imagePullPolicy": { "default": null, "description": "Image pull policy. One of Always, Never, IfNotPresent.\nDefaults to Always if :latest version tag is specified, or IfNotPresent otherwise.", "enum": [ "Always", "Never", "IfNotPresent", null ], "title": "Imagepullpolicy" }, "command": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "CLI command arguments. Overrides the image ENTRYPOINT.", "title": "Command" }, "args": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "CLI additional arguments. Overrides the image CMD.", "title": "Args" }, "readinessProbe": { "anyOf": [ { "$ref": "#/$defs/Probe" }, { "type": "null" } ], "default": null, "description": "Periodic probe of container service readiness." }, "resources": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "This field enables fine-grained control over resource allocation for the\nentire pod, allowing resource sharing among containers in a pod.\n\n.. seealso::\n\n Defined by `k8s ResourceRequirements\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#alpha-level>`_.", "title": "Resources" }, "env": { "anyOf": [ { "items": { "$ref": "#/$defs/EnvVar" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "List of environment variables to set in the container.", "title": "Env" } }, "title": "Processor", "type": "object" }, "RCal": { "additionalProperties": false, "description": "Configuration for the realtime calibration processor.", "properties": { "enabled": { "default": false, "description": "When true, RCal is deployed in the vis-receive pipeline.", "title": "Enabled", "type": "boolean" }, "accumulation_time": { "default": 10, "description": "Time to accumulate visibility data for before processing.", "title": "Accumulation Time", "type": "number" }, "fov": { "default": 5.0, "description": "Field of view (in degrees) used in the sky model cone search.", "title": "Fov", "type": "number" }, "sky_model": { "default": "", "description": "Pre-existing sky model file to be used for all beams.", "title": "Sky Model", "type": "string" }, "flux_limit": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "Minimum flux density (in Jy) used in the sky model cone search.", "title": "Flux Limit" }, "uv_min": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "Minimum baseline length (in wavelengths) to use in calibration.", "title": "Uv Min" }, "autoflag": { "default": true, "description": "Whether or not to run RFI peak finding. Default is True.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Autoflag", "type": "boolean" }, "rfi_masks": { "anyOf": [ { "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Flagging limits for known bad frequencies.\n\nIs a 2D array of form [start,end] frequencies in Hz.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Rfi Masks" }, "preproc_ave_time": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Pre-average visibility dataset in time by this number of samples.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Preproc Ave Time" }, "preproc_ave_frequency": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Pre-average visibility dataset in frequency by this number of channels.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Preproc Ave Frequency" }, "output_h5": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional output h5parm file for the bandpass Jones matrices.\n\nIf this option is set, additional files will be written for the combined\nmatrices (J_bandpass @ J_beam) with \"_combined\" added before the\nfile-type suffix, and for the final inverted and scaled matrices, with\n\"_final\" added before the file-type suffix.", "title": "Output H5" }, "flip_uvw": { "default": false, "description": "Change the sign of the uvw coordinates.\n\nThis is a temporary switch to deal with an inconsistency in receiver options.", "title": "Flip Uvw", "type": "boolean" }, "scale_gains": { "default": false, "description": "Whether or not to scale output Jones matrices to the range [-1, 1).\n\nA single scale factor is used for all solution matrices.", "title": "Scale Gains", "type": "boolean" }, "scale_factor": { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "User-defined scale factor.\n\nThis will override all other scaling settings. It should be used with care,\nas inappropriate scaling can result in over flagging or insufficient bit depth\nin CBF beamforming.", "title": "Scale Factor" }, "low_gain_threshold": { "default": 0.1, "description": "The fraction of the median bandpass gain amplitude below which to flag matrices.\n\nThis is also used as a starting point for the scale factor, since its inverse will\nbe the approximate maximum value in the inverse matrices. See also\n`threshold_headroom`.", "title": "Low Gain Threshold", "type": "number" }, "threshold_headroom": { "default": false, "description": "If using `low_gain_threshold`, decrease the median gain amplitude to\nthe next lowest power of 2 before setting the threshold.\nThis will move the threshold level lower, but should also limit\nvariation from one RCAL cycle to the next.", "title": "Threshold Headroom", "type": "boolean" }, "gain_headroom": { "default": 0.1, "description": "How much gain variation to build into the scaling, expressed as a fraction\nof maximum gain.", "title": "Gain Headroom", "type": "number" }, "ddcal": { "anyOf": [ { "$ref": "#/$defs/DDCal" }, { "type": "null" } ], "default": null, "description": "Optional object to enable an configure direction-dependent calibration stages.\n\n.. warning:: Experimental" } }, "title": "RCal", "type": "object" }, "ReceptionNetwork": { "description": "Values accepted by the reception_network vis-receive script parameter.", "enum": [ "auto", "hardware", "software" ], "title": "ReceptionNetwork", "type": "string" }, "SignalDisplay": { "description": "Configuration for the Signal Display Metrics processor.", "properties": { "metrics": { "default": [ "all" ], "description": "List of metrics to generate, or 'all'", "items": { "$ref": "#/$defs/SignalDisplayMetrics" }, "title": "Metrics", "type": "array" }, "version": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The version of the processor to use", "title": "Version" }, "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The image of the processor to use", "title": "Image" }, "nchan_avg": { "default": 5, "description": "The number of channels to average together in the data", "minimum": 1, "title": "Nchan Avg", "type": "integer" }, "window_count": { "default": 5, "description": "The number of additional windows for the configured metrics", "maximum": 10, "minimum": 0, "title": "Window Count", "type": "integer" }, "rounding_sensitivity": { "default": 5, "description": "The amount of significant digits to round the metrics to", "exclusiveMinimum": 0, "title": "Rounding Sensitivity", "type": "integer" }, "max_message_bytes": { "default": 52428800, "description": "Max message size allowed to send to Kafka", "minimum": 10485760, "title": "Max Message Bytes", "type": "integer" } }, "title": "SignalDisplay", "type": "object" }, "SignalDisplayMetrics": { "description": "List of metrics that can be requested.", "enum": [ "all", "stats", "amplitude", "averagedamplitude", "phase", "lagplot", "spectrum", "bandaveragedxcorr", "uvcoverage", "amplitudeandphasevariance" ], "title": "SignalDisplayMetrics", "type": "string" }, "TelState": { "additionalProperties": false, "description": "Telescope state parameters from TMC.", "properties": { "target_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Target Trls" }, "direction_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Direction Trls" }, "source_offset_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Source Offset Trls" }, "tracking_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Tracking Trls" } }, "title": "TelState", "type": "object" }, "TelescopeModel": { "description": "Telescope Model Information", "properties": { "sources": { "items": { "format": "uri", "minLength": 1, "type": "string" }, "title": "Sources", "type": "array" }, "layout_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "instrument/ska1_low/layout/low-layout.json", "title": "Layout Key" }, "station_data_key_path": { "default": "stations", "title": "Station Data Key Path", "type": "string" } }, "title": "TelescopeModel", "type": "object" } }, "additionalProperties": false }
- Fields:
- field processes_per_node: int | None = None
Number of processes to start per node, useful if CPU usage becomes a problem.
- field transport_protocol: str = 'udp'
The transport protocol the receiver should use (
"tcp"or"udp").
- field reception_network: ReceptionNetwork = ReceptionNetwork.AUTO
The network the receiver will bind itself to. Overrides
use_network_definitionwhen set.hardwareindicates the host’s NICsoftwareindicates the internal Kubernetes networkautolets the script determine ifhardwaresupport is available
- Constraints:
strict = False
- field allow_hostnames_in_receive_addresses: bool = False
Whether hostnames can be written into the SDP receive addresses or not.
This setting is only relevant for cases where the receiver binds itself to the Kubernetes network. In these case resolving hostnames into IPs has the effect that the Processing Block will take longer to become
READY, which in turn means the subarray will take longer to transition toIDLE.When the receiver binds itself to the host’s NIC this setting has no effect, as the receive addresses are already filled with IPs.
- field dry_run: bool = False
When set, produces no deployment of the vis-receive chart.
Useful for debugging of the output Helm values and the generated receive addresses, which are filled with IPs in the
127.0.0.0/8link-local network.
- field telescope_model: TelescopeModel [Optional]
Configuration for Telescope Model access.
- field extra_helm_values: dict [Optional]
Extra Helm values for the ska-sdp-helmdeploy-vis-receive helm chart.
Pending Deprecation
Pending deprecation
- field pod_settings: list[PodSettings] [Optional]
Receiver settings corresponding to receiver nodes index defined by
num_nodes.Fewer settings than receiver node will automatically tile to either provide settings to each node or no settings.
Pending Deprecation
Pending deprecation in 8.0.0
- field signal_display: SignalDisplay [Optional]
Settings for the signal-display processor.
- field processors: dict[str, Processor] = {'mswriter': Processor(name=None, image=None, version=None, imagePullPolicy=None, command=None, args=None, readinessProbe=None, resources=None, env=None)}
Named mapping of settings for realtime processors launched per receive node.
- static from_pb(pb: ProcessingBlock) VisReceiveParams
Construct an instance of this class from a ProcessingBlock
- class TelescopeModel(*, sources: list[~pydantic_core._pydantic_core.Url] = <factory>, layout_key: str | None = 'instrument/ska1_low/layout/low-layout.json', station_data_key_path: str = 'stations')
Bases:
BaseModelTelescope Model Information
- field layout_key: str | None = 'instrument/ska1_low/layout/low-layout.json'
Key to instrument layout in Telescope Model
- model_config: ClassVar[ConfigDict] = {}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- field station_data_key_path: str = 'stations'
For SKA Low, the path in the Telescope Model structure under which documents describing individual stations can be found. Telescope Model keys to each station are assumed to be of form
<station_data_key_path>/<station-geolabel>.yaml(e.g.,stations/s8-1.yaml).
- class ReceptionNetwork(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
StrEnumValues accepted by the reception_network vis-receive script parameter.
- AUTO = 'auto'
Automatically detect if hardware support is available, and use it if found.
- HARDWARE = 'hardware'
Receiver binds to the hardware-backed reception network.
- SOFTWARE = 'software'
Receiver binds to the software Kubernetes-internal network.
- pydantic model PodSettings
Receiver Settings.
Show JSON schema
{ "title": "PodSettings", "description": "Receiver Settings.", "type": "object", "properties": { "extraMetadata": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "deprecated": true, "description": "Extra pod metadata.\n\n.. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0", "title": "Extrametadata" }, "networkMapping": { "anyOf": [ { "$ref": "#/$defs/NetworkMapping" }, { "type": "null" } ], "default": null, "description": ".. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0" }, "nodeSelector": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "Dictionary used to select which node should run the pod.", "title": "Nodeselector" }, "receiverResources": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "deprecated": true, "description": ".. admonition:: Pending Deprecation\n\n Pending deprecation in 8.0.0", "title": "Receiverresources" }, "securityContext": { "anyOf": [ { "$ref": "#/$defs/PodSecurityContext" }, { "type": "null" } ], "default": null, "description": "SecurityContext holds pod-level security attributes and common container\nsettings.\n\nOptional: Defaults to empty.\nSee type description for default values of each field.\n\n.. admonition:: Pending Deprecation\n Pending deprecation in 8.0.0" } }, "$defs": { "NetworkMapping": { "additionalProperties": false, "description": "Network Mapping.", "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Name of the NetworkAttachmentDefinition used to setup the pod networking.", "title": "Name" }, "namespace": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The namespace where the NetworkAttachmentDefinition is defined.", "title": "Namespace" }, "deviceID": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The PCI ID of the network interface in the host machine (used with Multus).", "title": "Deviceid" }, "ip": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The IP to assign to the network interface.", "title": "Ip" } }, "title": "NetworkMapping", "type": "object" }, "PodSecurityContext": { "additionalProperties": true, "description": "SecurityContext holds pod-level security attributes and common container settings.\n\n.. seealso::\n\n Defined by `k8s PodSecurityContext\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context>`_.", "properties": { "privileged": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Privileged" }, "runAsUser": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Runasuser" }, "runAsNonRoot": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Runasnonroot" }, "runAsGroup": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Runasgroup" } }, "title": "PodSecurityContext", "type": "object" } }, "additionalProperties": false }
- Fields:
- field extraMetadata: dict | None = None
Extra pod metadata.
Pending Deprecation
Pending deprecation in 8.0.0
- field networkMapping: NetworkMapping | None = None
Pending Deprecation
Pending deprecation in 8.0.0
- field securityContext: PodSecurityContext | None = None
SecurityContext holds pod-level security attributes and common container settings.
Optional: Defaults to empty. See type description for default values of each field.
- pydantic model NetworkMapping
Network Mapping.
Show JSON schema
{ "title": "NetworkMapping", "description": "Network Mapping.", "type": "object", "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Name of the NetworkAttachmentDefinition used to setup the pod networking.", "title": "Name" }, "namespace": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The namespace where the NetworkAttachmentDefinition is defined.", "title": "Namespace" }, "deviceID": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The PCI ID of the network interface in the host machine (used with Multus).", "title": "Deviceid" }, "ip": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The IP to assign to the network interface.", "title": "Ip" } }, "additionalProperties": false }
- field name: str | None = None
Name of the NetworkAttachmentDefinition used to setup the pod networking.
- pydantic model PodSecurityContext
SecurityContext holds pod-level security attributes and common container settings.
See also
Defined by k8s PodSecurityContext.
Show JSON schema
{ "title": "PodSecurityContext", "description": "SecurityContext holds pod-level security attributes and common container settings.\n\n.. seealso::\n\n Defined by `k8s PodSecurityContext\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context>`_.", "type": "object", "properties": { "privileged": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Privileged" }, "runAsUser": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Runasuser" }, "runAsNonRoot": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Runasnonroot" }, "runAsGroup": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Runasgroup" } }, "additionalProperties": true }
- Fields:
- pydantic model TelState
Telescope state parameters from TMC.
Show JSON schema
{ "title": "TelState", "description": "Telescope state parameters from TMC.", "type": "object", "properties": { "target_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Target Trls" }, "direction_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Direction Trls" }, "source_offset_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Source Offset Trls" }, "tracking_trls": { "anyOf": [ { "additionalProperties": false, "patternProperties": { ".*": { "additionalProperties": { "format": "uri", "minLength": 1, "pattern": "^(?:([A-Za-z][A-Za-z0-9+.-]*)://)?(?:([A-Za-z0-9.-]+):(\\d+)/)?([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+)(?:/([A-Za-z0-9_.-]+))?(?:(?:->|-%3E)([A-Za-z0-9_.-]+))?(?:#dbase=(yes|no))?$", "type": "string" }, "type": "object" } }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Tracking Trls" } }, "additionalProperties": false }
- Fields:
- field target_trls: CorrectedAttributeTRL]], FieldInfo(annotation=NoneType, required=True, json_schema_extra={'additionalProperties': False})] | None = None
Target pointing direction of receptors as AttributeTRLs in Dish or MCCS data layout.
- field direction_trls: CorrectedAttributeTRL]], FieldInfo(annotation=NoneType, required=True, json_schema_extra={'additionalProperties': False})] | None = None
Actual pointing direction of receptors as AttributeTRLs in Dish data layout.
- field source_offset_trls: CorrectedAttributeTRL]], FieldInfo(annotation=NoneType, required=True, json_schema_extra={'additionalProperties': False})] | None = None
Source offsets of receptors as AttributeTRLs in Dish data layout.
- field tracking_trls: CorrectedAttributeTRL]], FieldInfo(annotation=NoneType, required=True, json_schema_extra={'additionalProperties': False})] | None = None
Tracking flag of receptors as AttributeTRLs in MCCS data layout.
- pydantic model MSWriter
Configuration for the Measurement Set Writer processor
Show JSON schema
{ "title": "MSWriter", "description": "Configuration for the Measurement Set Writer processor", "type": "object", "properties": { "upper_triangular_baselines": { "default": false, "title": "Upper Triangular Baselines", "type": "boolean" }, "telescope_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Telescope Name" }, "phase": { "default": "SOLID", "enum": [ "SOLID", "LIQUID", "GAS" ], "title": "Phase", "type": "string" }, "expires_at": { "default": "2099-12-31T00:00:00Z", "format": "date-time", "title": "Expires At", "type": "string" } } }
- Fields:
- field upper_triangular_baselines: bool = False
Baselines should be written into the MS in upper-triangular order
- field telescope_name: str | None = None
Telescope name to record in the OBSERVATION/TELESCOPE_NAME column. Default value acquires the name from tmdata instrument layout.
- field phase: Literal['SOLID', 'LIQUID', 'GAS'] = 'SOLID'
Level of resilience in archival heuristic.
SOLID: Strong resilience
LIQUID: Moderate resilience
GAS: Weak resilience
- field expires_at: AwareDatetime = datetime.datetime(2099, 12, 31, 0, 0, tzinfo=datetime.timezone.utc)
UTC-offset scale timestamp for the data product archive to expire at.
Default is end of year 2099.
- pydantic model RCal
Configuration for the realtime calibration processor.
Show JSON schema
{ "title": "RCal", "description": "Configuration for the realtime calibration processor.", "type": "object", "properties": { "enabled": { "default": false, "description": "When true, RCal is deployed in the vis-receive pipeline.", "title": "Enabled", "type": "boolean" }, "accumulation_time": { "default": 10, "description": "Time to accumulate visibility data for before processing.", "title": "Accumulation Time", "type": "number" }, "fov": { "default": 5.0, "description": "Field of view (in degrees) used in the sky model cone search.", "title": "Fov", "type": "number" }, "sky_model": { "default": "", "description": "Pre-existing sky model file to be used for all beams.", "title": "Sky Model", "type": "string" }, "flux_limit": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "Minimum flux density (in Jy) used in the sky model cone search.", "title": "Flux Limit" }, "uv_min": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "Minimum baseline length (in wavelengths) to use in calibration.", "title": "Uv Min" }, "autoflag": { "default": true, "description": "Whether or not to run RFI peak finding. Default is True.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Autoflag", "type": "boolean" }, "rfi_masks": { "anyOf": [ { "items": { "items": { "type": "number" }, "type": "array" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Flagging limits for known bad frequencies.\n\nIs a 2D array of form [start,end] frequencies in Hz.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Rfi Masks" }, "preproc_ave_time": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Pre-average visibility dataset in time by this number of samples.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Preproc Ave Time" }, "preproc_ave_frequency": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Pre-average visibility dataset in frequency by this number of channels.\n\nSee :func:`~realtime.calibration.processors.utilities.pre_process` for details.", "title": "Preproc Ave Frequency" }, "output_h5": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional output h5parm file for the bandpass Jones matrices.\n\nIf this option is set, additional files will be written for the combined\nmatrices (J_bandpass @ J_beam) with \"_combined\" added before the\nfile-type suffix, and for the final inverted and scaled matrices, with\n\"_final\" added before the file-type suffix.", "title": "Output H5" }, "flip_uvw": { "default": false, "description": "Change the sign of the uvw coordinates.\n\nThis is a temporary switch to deal with an inconsistency in receiver options.", "title": "Flip Uvw", "type": "boolean" }, "scale_gains": { "default": false, "description": "Whether or not to scale output Jones matrices to the range [-1, 1).\n\nA single scale factor is used for all solution matrices.", "title": "Scale Gains", "type": "boolean" }, "scale_factor": { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "User-defined scale factor.\n\nThis will override all other scaling settings. It should be used with care,\nas inappropriate scaling can result in over flagging or insufficient bit depth\nin CBF beamforming.", "title": "Scale Factor" }, "low_gain_threshold": { "default": 0.1, "description": "The fraction of the median bandpass gain amplitude below which to flag matrices.\n\nThis is also used as a starting point for the scale factor, since its inverse will\nbe the approximate maximum value in the inverse matrices. See also\n`threshold_headroom`.", "title": "Low Gain Threshold", "type": "number" }, "threshold_headroom": { "default": false, "description": "If using `low_gain_threshold`, decrease the median gain amplitude to\nthe next lowest power of 2 before setting the threshold.\nThis will move the threshold level lower, but should also limit\nvariation from one RCAL cycle to the next.", "title": "Threshold Headroom", "type": "boolean" }, "gain_headroom": { "default": 0.1, "description": "How much gain variation to build into the scaling, expressed as a fraction\nof maximum gain.", "title": "Gain Headroom", "type": "number" }, "ddcal": { "anyOf": [ { "$ref": "#/$defs/DDCal" }, { "type": "null" } ], "default": null, "description": "Optional object to enable an configure direction-dependent calibration stages.\n\n.. warning:: Experimental" } }, "$defs": { "DDCal": { "additionalProperties": false, "description": "Configuration for direction-dependendant calibration extensions such as\nionospheric calibration.\n\n.. warning:: Experimental", "properties": { "calibrator_selection": { "const": "strongest", "default": "strongest", "description": "Direction-dependent calibrator selection heuristic from the tied-array\nbeam local sky model.\n\n* strongest: selects N-calibrators ordered by descending flux density.", "title": "Calibrator Selection", "type": "string" }, "max_calibrators_per_beam": { "default": 20, "description": "Maximum direction-dependent calibrators per visibility beam.", "title": "Max Calibrators Per Beam", "type": "integer" }, "max_antenna_clustering_distance": { "default": 0.0, "description": "Maximum distance in metres for clustering close antennas in TEC\ncomputation.\n\nUseful for sub-optimally spread stations and bad weather.\nDefault is 0 (no clustering).", "title": "Max Antenna Clustering Distance", "type": "number" }, "min_baseline_distance": { "default": 1000.0, "description": "Minimum baseline distance in metres for calibration baseline\nflagging.", "title": "Min Baseline Distance", "type": "number" }, "max_gradient_fitting_channels": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Maximum number of frequency channels to compute ionospheric gradient\nper receiver sub-band.\n\nChannels are selected from highest to lowest per receiver-band. None\nselects all channels.", "title": "Max Gradient Fitting Channels" } }, "title": "DDCal", "type": "object" } }, "additionalProperties": false }
- field flux_limit: float | None = None
Minimum flux density (in Jy) used in the sky model cone search.
- field autoflag: bool = True
Whether or not to run RFI peak finding. Default is True.
See
pre_process()for details.
- field rfi_masks: list[list[float]] | None = None
Flagging limits for known bad frequencies.
Is a 2D array of form [start,end] frequencies in Hz.
See
pre_process()for details.
- field preproc_ave_time: int | None = None
Pre-average visibility dataset in time by this number of samples.
See
pre_process()for details.
- field preproc_ave_frequency: int | None = None
Pre-average visibility dataset in frequency by this number of channels.
See
pre_process()for details.
- field output_h5: str | None = None
Optional output h5parm file for the bandpass Jones matrices.
If this option is set, additional files will be written for the combined matrices (J_bandpass @ J_beam) with “_combined” added before the file-type suffix, and for the final inverted and scaled matrices, with “_final” added before the file-type suffix.
- field flip_uvw: bool = False
Change the sign of the uvw coordinates.
This is a temporary switch to deal with an inconsistency in receiver options.
- field scale_gains: bool = False
Whether or not to scale output Jones matrices to the range [-1, 1).
A single scale factor is used for all solution matrices.
- field scale_factor: float | None = None
User-defined scale factor.
This will override all other scaling settings. It should be used with care, as inappropriate scaling can result in over flagging or insufficient bit depth in CBF beamforming.
- Constraints:
gt = 0
- field low_gain_threshold: float = 0.1
The fraction of the median bandpass gain amplitude below which to flag matrices.
This is also used as a starting point for the scale factor, since its inverse will be the approximate maximum value in the inverse matrices. See also threshold_headroom.
- field threshold_headroom: bool = False
If using low_gain_threshold, decrease the median gain amplitude to the next lowest power of 2 before setting the threshold. This will move the threshold level lower, but should also limit variation from one RCAL cycle to the next.
- pydantic model DDCal
Configuration for direction-dependendant calibration extensions such as ionospheric calibration.
Warning
Experimental
Show JSON schema
{ "title": "DDCal", "description": "Configuration for direction-dependendant calibration extensions such as\nionospheric calibration.\n\n.. warning:: Experimental", "type": "object", "properties": { "calibrator_selection": { "const": "strongest", "default": "strongest", "description": "Direction-dependent calibrator selection heuristic from the tied-array\nbeam local sky model.\n\n* strongest: selects N-calibrators ordered by descending flux density.", "title": "Calibrator Selection", "type": "string" }, "max_calibrators_per_beam": { "default": 20, "description": "Maximum direction-dependent calibrators per visibility beam.", "title": "Max Calibrators Per Beam", "type": "integer" }, "max_antenna_clustering_distance": { "default": 0.0, "description": "Maximum distance in metres for clustering close antennas in TEC\ncomputation.\n\nUseful for sub-optimally spread stations and bad weather.\nDefault is 0 (no clustering).", "title": "Max Antenna Clustering Distance", "type": "number" }, "min_baseline_distance": { "default": 1000.0, "description": "Minimum baseline distance in metres for calibration baseline\nflagging.", "title": "Min Baseline Distance", "type": "number" }, "max_gradient_fitting_channels": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Maximum number of frequency channels to compute ionospheric gradient\nper receiver sub-band.\n\nChannels are selected from highest to lowest per receiver-band. None\nselects all channels.", "title": "Max Gradient Fitting Channels" } }, "additionalProperties": false }
- Fields:
- field calibrator_selection: Literal['strongest'] = 'strongest'
Direction-dependent calibrator selection heuristic from the tied-array beam local sky model.
strongest: selects N-calibrators ordered by descending flux density.
- field max_calibrators_per_beam: int = 20
Maximum direction-dependent calibrators per visibility beam.
- field max_antenna_clustering_distance: float = 0.0
Maximum distance in metres for clustering close antennas in TEC computation.
Useful for sub-optimally spread stations and bad weather. Default is 0 (no clustering).
- pydantic model SignalDisplay
Configuration for the Signal Display Metrics processor.
Show JSON schema
{ "title": "SignalDisplay", "description": "Configuration for the Signal Display Metrics processor.", "type": "object", "properties": { "metrics": { "default": [ "all" ], "description": "List of metrics to generate, or 'all'", "items": { "$ref": "#/$defs/SignalDisplayMetrics" }, "title": "Metrics", "type": "array" }, "version": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The version of the processor to use", "title": "Version" }, "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "The image of the processor to use", "title": "Image" }, "nchan_avg": { "default": 5, "description": "The number of channels to average together in the data", "minimum": 1, "title": "Nchan Avg", "type": "integer" }, "window_count": { "default": 5, "description": "The number of additional windows for the configured metrics", "maximum": 10, "minimum": 0, "title": "Window Count", "type": "integer" }, "rounding_sensitivity": { "default": 5, "description": "The amount of significant digits to round the metrics to", "exclusiveMinimum": 0, "title": "Rounding Sensitivity", "type": "integer" }, "max_message_bytes": { "default": 52428800, "description": "Max message size allowed to send to Kafka", "minimum": 10485760, "title": "Max Message Bytes", "type": "integer" } }, "$defs": { "SignalDisplayMetrics": { "description": "List of metrics that can be requested.", "enum": [ "all", "stats", "amplitude", "averagedamplitude", "phase", "lagplot", "spectrum", "bandaveragedxcorr", "uvcoverage", "amplitudeandphasevariance" ], "title": "SignalDisplayMetrics", "type": "string" } } }
- Fields:
- field metrics: list[SignalDisplayMetrics] = [SignalDisplayMetrics.ALL]
List of metrics to generate, or ‘all’
- field nchan_avg: int = 5
The number of channels to average together in the data
- Constraints:
ge = 1
- field window_count: int = 5
The number of additional windows for the configured metrics
- Constraints:
ge = 0
le = 10
- class SignalDisplayMetrics(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
StrEnumList of metrics that can be requested.
- ALL = 'all'
- AMPLITUDE = 'amplitude'
- AMPLITUDE_AND_PHASE_VARIANCE = 'amplitudeandphasevariance'
- AVERAGED_AMPLITUDE = 'averagedamplitude'
- BAND_AVERAGED_X_CORR = 'bandaveragedxcorr'
- LAG_PLOT = 'lagplot'
- PHASE = 'phase'
- SPECTRUM = 'spectrum'
- STATS = 'stats'
- UV_COVERAGE = 'uvcoverage'
- pydantic model Processor
Realtime processor settings. Defaults values are defined in corresponding processors definitions by name in the processors directory.
Deployed via the
full-containerhelm macro in ska-sdp-helmdeploy-vis-receive.Show JSON schema
{ "title": "Processor", "description": "Realtime processor settings. Defaults values are defined in corresponding\nprocessors definitions by name in the `processors directory\n<https://gitlab.com/ska-telescope/sdp/ska-sdp-script/-/tree/master/src/ska-sdp-script-vis-receive/processors>`_.\n\nDeployed via the ``full-container`` helm macro in `ska-sdp-helmdeploy-vis-receive\n<https://gitlab.com/ska-telescope/sdp/ska-sdp-helmdeploy-charts/-/blob/master/charts/ska-sdp-helmdeploy-vis-receive/templates/_helpers.tpl?ref_type=heads#L104>`_.", "type": "object", "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Processor name corresponding to a file name in the processors directory.", "title": "Name" }, "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "OCI image name.", "title": "Image" }, "version": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "OCI image version tag.", "title": "Version" }, "imagePullPolicy": { "default": null, "description": "Image pull policy. One of Always, Never, IfNotPresent.\nDefaults to Always if :latest version tag is specified, or IfNotPresent otherwise.", "enum": [ "Always", "Never", "IfNotPresent", null ], "title": "Imagepullpolicy" }, "command": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "CLI command arguments. Overrides the image ENTRYPOINT.", "title": "Command" }, "args": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "CLI additional arguments. Overrides the image CMD.", "title": "Args" }, "readinessProbe": { "anyOf": [ { "$ref": "#/$defs/Probe" }, { "type": "null" } ], "default": null, "description": "Periodic probe of container service readiness." }, "resources": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "This field enables fine-grained control over resource allocation for the\nentire pod, allowing resource sharing among containers in a pod.\n\n.. seealso::\n\n Defined by `k8s ResourceRequirements\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#alpha-level>`_.", "title": "Resources" }, "env": { "anyOf": [ { "items": { "$ref": "#/$defs/EnvVar" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "List of environment variables to set in the container.", "title": "Env" } }, "$defs": { "EnvVar": { "additionalProperties": true, "description": "environment variable present in a Container.\n\n.. seealso::\n\n Defined by `k8s EnvVar\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables>`_.", "properties": { "name": { "title": "Name", "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Value" }, "valueFrom": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Valuefrom" } }, "required": [ "name" ], "title": "EnvVar", "type": "object" }, "Probe": { "description": "Liveness probe settings.", "properties": { "file": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "File" }, "initialDelaySeconds": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Initialdelayseconds" }, "periodSeconds": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Periodseconds" } }, "title": "Probe", "type": "object" } }, "additionalProperties": false }
- Fields:
- field name: str | None = None
Processor name corresponding to a file name in the processors directory.
- field imagePullPolicy: Literal['Always', 'Never', 'IfNotPresent', None] = None
Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest version tag is specified, or IfNotPresent otherwise.
- field resources: dict | None = None
This field enables fine-grained control over resource allocation for the entire pod, allowing resource sharing among containers in a pod.
See also
Defined by k8s ResourceRequirements.
- pydantic model EnvVar
environment variable present in a Container.
See also
Defined by k8s EnvVar.
Show JSON schema
{ "title": "EnvVar", "description": "environment variable present in a Container.\n\n.. seealso::\n\n Defined by `k8s EnvVar\n <https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables>`_.", "type": "object", "properties": { "name": { "title": "Name", "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Value" }, "valueFrom": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Valuefrom" } }, "additionalProperties": true, "required": [ "name" ] }
- field name: str [Required]
Name of the environment variable. May consist of any printable ASCII characters except ‘=’.
- field value: str | None = None
Variable references $(VAR_NAME) are expanded using the previously defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. “$$(VAR_NAME)” will produce the string literal “$(VAR_NAME)”. Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to “”.
Processors
The processors parameter is a dictionary with processor specifications.
The keys in the dictionary are a simple name of the processor,
while the value is a dictionary
with a container-like specification
as understood by the vis-receive Helm Chart.
This script comes with built-in processor definitions, which are defined as files under the [processors subdirectory](processors/):
mswriter: takes incoming visibility data and writes it into a Measurement Set.rcal: performs gain calibration on incoming visibility data.signal-display-metrics-all: takes incoming visibility data and calculates all available Signal Display metrics, which are then published to the SDP data queues. (deprecated, use configuration above)signal-display-metrics-basic: takes incoming visibility data and calculates basic and fast Signal Display metrics, which are then published to the SDP data queues. (deprecated, use configuration above)signal-display-metrics-amplitude: takes incoming visibility data and calculates Amplitude vs Frequency Signal Display metrics, which are then published to the SDP data queues. (deprecated, use configuration above)signal-display-metrics-phase: takes incoming visibility data and calculates Phase vs Frequency Signal Display metrics, which are then published to the SDP data queues. (deprecated, use configuration above)
If a key in the processors dictionary
refers to one of the built-in processor definitions,
then the corresponding value is used
to override the built-in definition;
otherwise the value must fully define a processor.
Examples:
Only use built-in
mswriterprocessor, with its default settings:mswriter: {}
Use the built-in
mswriterprocessor, with its default settings, plus a processor calledmy-signal-display-metrics, which is described in full:mswriter: {} my-signal-display-metrics: name: my-signal-display-metrics image: artefact.skao.int/ska-sdp-qa-metric-generator version: 0.20.0 command: - plasma-processor - ska_sdp_qa_metric_generator.plasma_to_metrics.SignalDisplayMetrics - --readiness-file - /tmp/processor_ready - --use-sdp-metadata - "False" - --metrics - all readinessProbe: - initialDelaySeconds: 5 periodSeconds: 5 exec: command: - cat - /tmp/processor_ready
Use a different version of the built-in
mswriterandrcalprocessors:mswriter: version: 1.2.3 rcal: version: 2.3.4
Chaining Processors
Processors have the ability to be chained together. This interface between each is a Visibility object.
Any processor can be a chainable processor, but at the level of the script
we have provided one example, the time-mswriter processor. So called
because it writes visibility data to a Measurement Set, but also calculates the
time average of the data before writing it.
- name: "sdp-processor" - image: "registry.gitlab.com/ska-telescope/sdp/ska-sdp-realtime-receive-integration/ska-sdp-realtime-receive-integration" - version: "0.3.0" - command: - "sdp-processor" - args: - "['ska_sdp_realtime_receive_integration.processors.AverageTimeProcessor','realtime.receive.processors.sdp.mswriter_processor.MSWriterProcessor']" - "--readiness-file" - "/tmp/processor_ready" - "--timestep 2" - "output.ms" - readinessProbe: file: "/tmp/processor_ready"
The args parameter contains a list of processor classes
that will be chained together. In this case the AverageTimeProcessor
will be called first, followed by the MSWriterProcessor.
The output of the first processor is passed to the second processor.