Low.CBF Subarray Capabilities

Subarray Cababilities consist of stations, timing beams, search beams, standard visibilities and zoom visibilities.

Once a subarray has been assigned FSP resources it has the ability to reserve and use the capabilities of the resources to compute visibilities or beams and route data from LFAA and to SDP, PSS or PST servers.

How Subarrays configure capabilitys for Scan

When a Subarray initially acquires resources, it gains access to hardware but does not yet have any of the capabilities of the hardware reserved for its use during a scan. LMC invokes the subarray ConfigureScan command in order to reserve capabilities for use by a particular subarray during a scan. The subarray will retain the capabilities until the scan or run of scans is complete. When scans are complete, LMC will use the subarray End command to release the capabilities and allow them to be accessed by other subarrays.

The argument passed to the subarray ConfigureScan command is a JSON string containing sections that describe separate parts of the configuration. In overview, the ConfigureScan argument has the form

subarray_cfg = {
    "id": 1,               # config ID (required by ska-tango-base)
    "lowcbf": {
        "stations":{},          # Station parameters (input)
        "vis": {},              # Visibility parameters (output1)
        "timing_beams":[ ],     # Timing beam parameters (output2)
        "search_beams":[ ],     # Search beam parameters (output3)
        "zooms":[ ],            # Zoom parameter (output4)
    }
}

The following paragraphs describe the sections in the code outlined above for information only. Telmodel contains the reference.

Describing Station data input configuration for Low.CBF (station_params)

The “station_params” section of the JSON above describes the parameters specifying each station from which the subarray should receive SPEAD data. The parameters must be sufficient to allow the routing of SPEAD packets from LFAA to a FPGA card. The five parameters required for this are: station_id, substation_id, subarray_id, station_beam_id, frequency_id. The parameter values must match those in the SPEAD header of the data packets. Since the subarray device already knows its own subarray_id, it need not be provided as a parameter to the ConfigureScan command.

We expect a subarray should have one set of (sub-)stations that contribute to every one of its station beams, and a station beam should receive the same set of frequency channels from each (sub-)station. We can use a list of (sub-)stationIDs to describe the stations that contribute to the subarray, and lists of frequencyIDs to describe the station beams that are part of the subarray, as shown in the diagram. There will also be a boresight delay polynomial associated with each station beam that can be included with each station beam.

_images/subarray-config-params.png

The station_params section describing the input configuration is expressed in the form:

station_params = {
    "stns": [ [1,1], [2,1], [3,1], [4,1], [5,1], [6,1] ], # (station, substation) tuples
    "stn_beams": [                # list of subarray's station-beams and their parameters
        {
            "beam_id": 1,
            "freq_ids": [ 400, ],
            "delay_poly": "url"
        },
    ]
}

Describing standard Visibility output configuration for Low.CBF (vis_params)

Standard visibility parameters use the host/port/mac address formats generated by SDP and are described in the following form:

vis_params = {
    "fsp": {
        "firmware": "vis",
        "fsp_ids": [1, ],       # FSPs to be used for visibilities
    },
    "stn_beams": [
        {
            "stn_beam_id": 1,
            "host": [ [0, "192.168.1.10"], ],
            "port": [ [0, 9000, 1], ],
            "mac": [ [0," 02-03-04-0a-0b-0c"] ],
            "integration_ms": 849
        }
    ]
}

Describing Timing Beam output configuration for Low.CBF (pst_params)

The timing beam parameters use the PST channel blocks format to describe the PST destination hosts. Timing beams can be expressed in the form:

pst_params = {
    "fsp": {
        "firmware": "pst",  # VSPs to be used for timing-beams
        "fsp_ids": [ 2 ]
    },
    "beams": [
        {
            "pst_beam_id": 1,
            "stn_beam_id": 1,
            "delay_poly": "tango://fqdn.device",
            "jones": "tango://fqdn/device",
            "destinations": [
                {
                    "data_host": "10.0.3.2",
                    "data_port": 9000,
                    "start_channel": 0,
                    "num_channels": 24
                },
            ]
        }
    ]
}

The schema used to check the ConfigureScan parameters is:

configure_scan_schema = Schema(
    {
        "id": int,  # Configuration ID required by ska-tango-base classes
        Optional("common"): {Optional("subarrayID"): int},
        "lowcbf": {
            # Input to subarray from LFAA: stations, station_beams, frequencies
            "stations": {
                "stns": [
                    [int, int],  # stationID, substationID pairs
                ],
                "stn_beams": [
                    {
                        "beam_id": int,
                        "freq_ids": [
                            int,
                        ],
                        "delay_poly": str,
                    },
                ],
            },
            # Output to be calculated: visibilities
            Optional("vis"): {
                "fsp": {
                    "firmware": str,
                    "fsp_ids": [
                        int,
                    ],
                    Optional("image_name"): str,
                },
                "stn_beams": [
                    {
                        "stn_beam_id": int,
                        "host": [
                            [int, str],
                        ],
                        Optional("mac"): [
                            [int, str],
                        ],
                        "port": [
                            [int, int, int],
                        ],
                        "integration_ms": int,
                    },
                ],
            },  # standard Correlation parameter list TBD
            # Output to be calculated: PST beams
            Optional("timing_beams"): {
                "fsp": {
                    "firmware": str,
                    "fsp_ids": [
                        int,
                    ],
                    Optional("image_name"): str,
                },
                "beams": [
                    {
                        "pst_beam_id": int,
                        "stn_beam_id": int,
                        "delay_poly": str,
                        "jones": str,
                        "destinations": [
                            {
                                "data_host": str,
                                "data_port": int,
                                "start_channel": int,
                                "num_channels": int,
                            },
                        ],
                        Optional("stn_weights"): [
                            float,
                        ],
                        Optional("rfi_enable"): [
                            bool,
                        ],
                        Optional("rfi_static_chans"): [
                            int,
                        ],
                        Optional("rfi_dynamic_chans"): [
                            int,
                        ],
                        Optional("rfi_weighted"): float,
                    }
                ],
            },
            Optional("search_beams"): str,  # PSS parameter list TBD
            Optional("zooms"): str,  # zoom correlation parameter list TBD
        },
    },
)