TMC SubArrayNode

Overview

Sub-array configuration and scan control is achieved via communication with a TMC SubArrayNode Tango device. The diagram below shows the packages and high-level object model used for telescope configuration and control.

High-level overview of SubArrayNode packages and classes

High-level object model for communication with a TMC SubArrayNode device.

Classes in the configure package model the arguments for the SubArrayNode.Configure() command.

Classes in the scan.py module model the arguments for the SubArrayNode.Scan() command.

configure

Overview of the configure package

High-level overview of the configure package

The configuration JSON is complex, the module is split between several modules. The configure package contains seven modules:

__init__.py references sub-modules in the main ConfigureRequest object, as illustrated in the diagram above.

In the context of a full JSON example object, __init__.py defines the a basic container object, while the sub-modules define the details.

# JSON modelled specifically by __init__.py
{
  "interface": "https://schema.skao.int/ska-tmc-configure/6.1",
  "transaction_id": "txn-....-00001",
  "dish": {
      ... # see dish.py
  },
  "pointing": {
      ... # see core.py
  },
  "tmc": {
      ... # see tmc.py
  },
  "dish": {
      ... # see core.py
  },
  "mccs": {
      ... # see mccs.py
  },
  "csp": {
      ... # see csp.py
      "pss": {
      ... # see pss.py
      },
      "pst": {
      ... # see pst.py
      }
  },
  "sdp": {
      ... # see sdp.py
  }
}

core.py

core.py object model

core.py object model

The core.py module models receptor pointing and receiver band JSON elements. In the context of a full CDM JSON object, the elements this maps to are:

# JSON modelled specifically by core.py
{
  ...
  "pointing": {
    "target": {
      "reference_frame":"ICRS",
      "name": "NGC6251",
      "ra": 1.0,
      "dec": 1.0
    },
    "correction": "UPDATE",
    "ca_offset_arcsec": 5.0,
    "ie_offset_arcsec": 0.0,
    "groups": [
      ...  # see receptorgroup.py
    ]
  },
  ...
}

dish.py

dish.py object model

dish.py object model

The dish.py module models Dish configuration and SPFRx configuration. An example of the JSON this module maps to is given below.

# JSON modelled specifically by dish.py
{
  ...
  "dish": {
      "interface": "https://schema.skao.int/ska-dish-configure/1.0",
      "receiver_band": "5b",
      "band5_downconversion_subband": "1",
      "spfrx_processing_parameters": [
          {
              "dishes": ["SKA001"],
              "sync_pps": False,
              "attenuation_pol_x": 1.0,
              "attenuation_pol_y": 4.0,
              "saturation_threshold": 0.7,
              "noise_diode": {
                  "pseudo_random": {
                      "binary_polynomial": 2,
                      "seed": 2,
                      "dwell": 2,
                  },
              },
          },
          {
              "dishes": ["SKA002"],
              "sync_pps": True,
              "attenuation_1_pol_x": 1.0,
              "attenuation_2_pol_x": 2.0,
              "attenuation_1_pol_y": 3.0,
              "attenuation_2_pol_y": 4.0,
              "saturation_threshold": 0.7,
              "noise_diode": {
                  "periodic": {
                      "period": 1,
                      "duty_cycle": 2,
                      "phase_shift": 3,
                  }
              },
          },
      ]
  }
  ...
}

receptorgroup.py

receptorgroup.py object model

receptorgroup.py object model

The receptorgroup.py module models receptor pointing and tracking in an ADR-63 and ADR-106 compliant way. An example of the JSON these classes represent is given is:

# Example of JSON modelled specifically by receptorgroup.py
{
    ... # pointing.groups array contains a Receptorgroup object like below
     {
      "receptors": ["SKA001", "SKA002"],
      "field": {
        "target_name": "Cen-A",
        "reference_frame": "icrs",
        "attrs": {
          "c1": 201.365,
          "c2": -43.0191667,
        },
      },
      "trajectory": {
        "name": "fixed",
        "attrs": {
          "x": -5.0,
          "y": 5.0
        },
      },
      "projection": {"name": "SSN", "alignment": "ICRS"},
    }
    ...
}

tmc.py

tmc.py object model

tmc.py object model

The tmc.py module models TMC configuration JSON elements. Below is an example JSON command argument that this code can model.

# JSON modelled specifically by tmc.py
{
  "tmc": {
    "scan_duration": 10.0,
    "partial_configuration": true,
  }
}

csp.py

csp.py object model

csp.py object model

The csp.py module models CSP configuration JSON elements. In the context of a full CDM JSON object, the elements this maps to for MID are:

{
  ...
      "csp": {
      "interface": "https://schema.skao.int/ska-csp-configurescan/4.0",
      "common": {
          "config_id": "sbi-mvp01-20200325-00001-science_A",
          "frequency_band": "1"
      },
      "midcbf": {
          "frequency_band_offset_stream1": 80,
          "correlation": {
              "processing_regions": [{
                  "fsp_ids": [1, 2, 3, 4],
                  "receptors": ["SKA063", "SKA001", "SKA100"],
                  "start_freq": 350000000,
                  "channel_width": 13440,
                  "channel_count": 52080,
                  "sdp_start_channel_id": 0,
                  "integration_factor": 1
              }, {
                  "fsp_ids": [1],
                  "start_freq": 548437600,
                  "channel_width": 13440,
                  "channel_count": 14880,
                  "sdp_start_channel_id": 1,
                  "integration_factor": 10
              }]
          },
          "vlbi": {}
  ...
}

And for LOW are:

{
  "interface": "https://schema.skao.int/ska-low-csp-configure/7.3",
  "transaction_id": "txn-....-00001",
  "subarray": {
      "subarray_name": "science period 23"
  },
  "common": {
      "config_id": "sbi-mvp01-20200325-00001-science_A",
      "subarray_id": 1,
      "eb_id": "eb-x449-20231105-34696"
  },
  "lowcbf": {
      "stations": {
          "stns": [
              [1, 1],
              [2, 1],
              [3, 1],
              [4, 1],
              [5, 1],
              [6, 1]
          ],
          "stn_beams": [{
              "beam_id": 1,
              "freq_ids": [400],
              "delay_poly": "tango://delays.skao.int/low/stn-beam/1"
          }]
      },
      "vis": {
          "firmware": "vis",
          "stn_beams": [{
              "stn_beam_id": 1,
              "host": [
                  [0, "192.168.1.0"]
              ],
              "port": [
                  [0, 9000, 1]
              ],
              "mac": [
                  [0, "02-03-04-0a-0b-0c"]
              ],
              "integration_ms": 849
          }]
      },
      "timing_beams": {
          "firmware": "pst",
          "beams": [{
              "pst_beam_id": 1,
              "stn_beam_id": 1,
              "stn_weights": [0.9, 1.0, 1.0, 1.0, 0.9, 1.0],
              "delay_poly": "tango://delays.skao.int/low/stn-beam/1",
              "jones": "tango://jones.skao.int/low/stn-beam/1"
          }]
      },
      "search_beams": {
          "firmware": "pss",
          "beams": [{
              "pss_beam_id": 1,
              "stn_beam_id": 1,
              "stn_weights": [0.9, 1.0, 1.0, 1.0, 0.9, 1.0],
              "delay_poly": "tango://delays.skao.int/low/stn-beam/1",
              "jones": "tango://jones.skao.int/low/stn-beam/1"
          }]
      },
      "coarse_zooms": {
          "firmware": "vis",
          "stn_beams": [{
              "zoom_window_id": 1,
              "zoom_resolution_hz": 227,
              "centre_frequency_hz": 312500000,
              "zoom_bandwidth_hz": 3000,
              "stn_beam_id": 1,
              "host": [
                  [0, "192.168.1.01"]
              ],
              "port": [
                  [0, 10000, 1]
              ],
              "mac": [
                  [0, "02-03-04-0a-0b-0c"]
              ],
              "integration_ms": 849
          }]
      }
  },
  "pss": {
      "transaction_id": "txn-control-00001",
      "beam": [{
          "beam_id": 1,
          "reference_frame": "ICRS",
          "ra": 82.75,
          "dec": 21.0,
          "centre_frequency": 1400.0,
          "beam_delay_centre": 0.0,
          "dest_host": "192.168.178.25",
          "dest_port": 9021
      }, {
          "beam_id": 2,
          "reference_frame": "ICRS",
          "ra": 84.25,
          "dec": 21.5,
          "centre_frequency": 1400.0,
          "beam_delay_centre": 0.0,
          "dest_host": "192.168.178.26",
          "dest_port": 9021
      }],
      "config_id": 1,
      "cheetah": [{
          "cheetah_id": 1,
          "beams": [{
              "beam": {
                  "active": true,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam1",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam1",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank1.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 1
              }
          }, {
              "beam": {
                  "active": false,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam2",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam2",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank2.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 2
              }
          }, {
              "beam": {
                  "active": false,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam3",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam3",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank3.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 3
              }
          }],
          "psbc": {
              "dump_time": 540
          },
          "acceleration": {
              "fdas": {
                  "pool_id": "default",
                  "priority": 0,
                  "active": false,
                  "labyrinth": {
                      "active": true,
                      "threshold": 10.0
                  }
              }
          },
          "sift": {
              "pool_id": "default",
              "priority": 2,
              "strong_sift": {
                  "active": false,
                  "num_candidate_harmonics": 8,
                  "match_factor": 0.001,
                  "dm_match_range": 2
              }
          }
      }, {
          "cheetah_id": 3,
          "beams": [{
              "beam": {
                  "active": true,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam1",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam1",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank1.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 1
              }
          }, {
              "beam": {
                  "active": false,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam2",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam2",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank2.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 2
              }
          }, {
              "beam": {
                  "active": false,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam3",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam3",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank3.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 3
              }
          }],
          "psbc": {
              "dump_time": 540
          },
          "acceleration": {
              "fdas": {
                  "pool_id": "default",
                  "priority": 0,
                  "active": false,
                  "labyrinth": {
                      "active": true,
                      "threshold": 10.0
                  }
              }
          },
          "sift": {
              "pool_id": "default",
              "priority": 2,
              "strong_sift": {
                  "active": false,
                  "num_candidate_harmonics": 8,
                  "match_factor": 0.001,
                  "dm_match_range": 2
              }
          }
      }, {
          "cheetah_id": 5,
          "beams": [{
              "beam": {
                  "active": true,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam1",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam1",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank1.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 1
              }
          }, {
              "beam": {
                  "active": false,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam2",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam2",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank2.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 2
              }
          }, {
              "beam": {
                  "active": false,
                  "sinks": {
                      "channels": {
                          "sps_events": {
                              "active": true,
                              "sink": [{
                                  "sink_id": "spccl_files"
                              }, {
                                  "sink_id": "candidate_files"
                              }]
                          }
                      },
                      "sink_configs": {
                          "spccl_files": {
                              "extension": ".spccl",
                              "dir": "/tmp/beam3",
                              "sink_id": "spccl_files"
                          },
                          "spccl_sigproc_files": {
                              "spectra_per_file": 0,
                              "dir": "/tmp/beam3",
                              "extension": ".fil",
                              "candidate_window": {
                                  "ms_before": 500.0,
                                  "ms_after": 1000.0
                              },
                              "sink_id": "candidate_files"
                          }
                      }
                  },
                  "source": {
                      "sigproc": {
                          "file": "filterbank3.fil",
                          "chunk_samples": 1024,
                          "default-nbits": 8,
                          "active": true
                      },
                      "udp_low": {
                          "number_of_threads": 2,
                          "spectra_per_chunk": 2048,
                          "number_of_channels": 7776,
                          "max_buffers": 1,
                          "active": false
                      },
                      "udp_low_lite": {
                          "number_of_threads": 10,
                          "spectra_per_chunk": 32768,
                          "number_of_channels": 432,
                          "max_buffers": 3,
                          "active": false
                      }
                  },
                  "beam_id": 3
              }
          }],
          "psbc": {
              "dump_time": 540
          },
          "acceleration": {
              "fdas": {
                  "pool_id": "default",
                  "priority": 0,
                  "active": false,
                  "labyrinth": {
                      "active": true,
                      "threshold": 10.0
                  }
              }
          },
          "sift": {
              "pool_id": "default",
              "priority": 2,
              "strong_sift": {
                  "active": false,
                  "num_candidate_harmonics": 8,
                  "match_factor": 0.001,
                  "dm_match_range": 2
              }
          }
      }],
      "ddtr": {
          "cpu": {
              "active": false
          },
          "fpga": {
              "active": false
          },
          "gpu_bruteforce": {
              "active": false,
              "copy_dmtrials_to_host": true
          },
          "klotski": {
              "active": true
          },
          "klotski_bruteforce": {
              "active": false
          },
          "dedispersion": [{
              "start": 0.0,
              "end": 100.0,
              "step": 0.1
          }, {
              "start": 100.0,
              "end": 300.0,
              "step": 0.2
          }, {
              "start": 300.0,
              "end": 700.0,
              "step": 0.4
          }, {
              "start": 700.0,
              "end": 1500.0,
              "step": 0.8
          }, {
              "start": 1500.0,
              "end": 3100.0,
              "step": 1.6
          }],
          "dedispersion_samples": 131072
      },
      "sps": {
          "cpu": {
              "active": false,
              "samples_per_iteration": 1,
              "number_of_widths": 1
          },
          "threshold": 8.0,
          "klotski": {
              "active": true,
              "pulse_widths": "1,2,4,8,16,32,64,128"
          },
          "klotski_bruteforce": {
              "active": false,
              "pulse_widths": "1,2,4,8,16,32,64,128"
          }
      }
  },
  "pst": {
      "beams": [{
          "beam_id": 1,
          "scan": {
              "centre_frequency": 100000000.0,
              "total_bandwidth": 1562500.0,
              "observer_id": "jdoe",
              "project_id": "project1",
              "receiver_id": "receiver3",
              "max_scan_length": 20000.0,
              "subint_duration": 30.0,
              "receptors": ["SKA001", "SKA036"],
              "receptor_weights": [0.4, 0.6],
              "pst_processing_mode": "VOLTAGE_RECORDER",
              "delay_centre": [5109360.133, 2006852.586, -3238948.127],
              "target": {
                  "target_name": "J1921+2153",
                  "reference_frame": "icrs",
                  "attrs": {
                      "c1": 290.43672917,
                      "c2": 21.884,
                      "epoch": 2000.0
                  }
              }
          }
      }]
  }
}

pst.py

pst.py object model

pst.py object model

The pst.py module models PST configuration JSON elements. In the context of a full CDM JSON object, the elements this maps to for MID are: .. code:

{
  "interface": "https://schema.skao.int/ska-pst-configure/3.0",
  "common": {
      "config_id": "sbi-mvp01-20240111-pulsar-timing",
      "subarray_id": 1,
      "eb_id": "eb-x321-20240111-10012",
      "frequency_band": "5b"
  },
  "pst": {
      "scan": {
          "timing_beam_id": "1",
          "centre_frequency": 10550000000.0,
          "total_bandwidth": 2496345600.0,
          "observer_id": "jdoe",
          "project_id": "project1",
          "receiver_id": "receiver3",
          "max_scan_length": 20000.0,
          "subint_duration": 30.0,
          "receptors": ["SKA001", "SKA036"],
          "receptor_weights": [0.4, 0.6],
          "pst_processing_mode": "PULSAR_TIMING",
          "delay_centre": [5109360.133, 2006852.586, -3238948.127],
          "target": {
              "target_name": "J1921+2153",
              "reference_frame": "icrs",
              "attrs": {
                  "c1": 290.43672917,
                  "c2": 21.884,
                  "epoch": 2000.0
              }
          },
          "pt": {
              "dispersion_measure": 100.0,
              "rotation_measure": 0.0,
              "ephemeris": "",
              "pulsar_phase_predictor": "",
              "output_frequency_channels": 1,
              "output_phase_bins": 64,
              "num_sk_config": 1,
              "sk_config": [{
                  "sk_range": [0.8, 0.9],
                  "sk_integration_limit": 100,
                  "sk_excision_limit": 25.0
              }],
              "target_snr": 0.0
          }
      }
  }
}

And for LOW are:

{
  "interface": "https://schema.skao.int/ska-pst-configure/3.0",
  "common": {
      "config_id": "sbi-mvp01-20240111-pulsar-timing",
      "subarray_id": 1,
      "eb_id": "eb-x321-20240111-10012",
      "frequency_band": "low"
  },
  "pst": {
      "scan": {
          "centre_frequency": 100000000.0,
          "total_bandwidth": 1562500.0,
          "timing_beam_id": "1",
          "observer_id": "jdoe",
          "project_id": "project1",
          "receiver_id": "receiver3",
          "max_scan_length": 20000.0,
          "subint_duration": 30.0,
          "receptors": ["SKA001", "SKA036"],
          "receptor_weights": [0.4, 0.6],
          "pst_processing_mode": "PULSAR_TIMING",
          "delay_centre": [5109360.133, 2006852.586, -3238948.127],
          "target": {
              "target_name": "J1921+2153",
              "reference_frame": "icrs",
              "attrs": {
                  "c1": 290.43672917,
                  "c2": 21.884,
                  "epoch": 2000.0
              }
          },
          "pt": {
              "dispersion_measure": 100.0,
              "rotation_measure": 0.0,
              "ephemeris": "",
              "pulsar_phase_predictor": "",
              "output_frequency_channels": 1,
              "output_phase_bins": 64,
              "num_sk_config": 1,
              "sk_config": [{
                  "sk_range": [0.8, 0.9],
                  "sk_integration_limit": 100,
                  "sk_excision_limit": 25.0
              }],
              "target_snr": 0.0
          }
      }
  }
}

pss.py

pss.py object model

pss.py object model

The pss.py module models PSS configuration JSON elements. In the context of a full CDM JSON object, the elements this maps to are:

{
  "interface": "https://schema.skao.int/ska-pss-configure/1.4",
  "transaction_id": "txn-control-00001",
  "beam": [{
      "beam_id": 1,
      "reference_frame": "ICRS",
      "ra": 82.75,
      "dec": 21.0,
      "centre_frequency": 1400.0,
      "beam_delay_centre": 0.0,
      "dest_host": "192.168.178.25",
      "dest_port": 9021
  }, {
      "beam_id": 2,
      "reference_frame": "ICRS",
      "ra": 84.25,
      "dec": 21.5,
      "centre_frequency": 1400.0,
      "beam_delay_centre": 0.0,
      "dest_host": "192.168.178.26",
      "dest_port": 9021
  }],
  "common": {
      "config_id": "sbi-mvp01-20200325-00001-science_A",
      "subarray_id": 1,
      "frequency_band": "low",
      "eb_id": "eb-x449-20231105-34696"
  },
  "config_id": 1,
  "cheetah": [{
      "cheetah_id": 1,
      "beams": [{
          "beam": {
              "active": true,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam1",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam1",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank1.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 1
          }
      }, {
          "beam": {
              "active": false,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam2",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam2",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank2.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 2
          }
      }, {
          "beam": {
              "active": false,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam3",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam3",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank3.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 3
          }
      }],
      "psbc": {
          "dump_time": 540
      },
      "acceleration": {
          "fdas": {
              "pool_id": "default",
              "priority": 0,
              "active": false,
              "labyrinth": {
                  "active": true,
                  "threshold": 10.0
              }
          }
      },
      "sift": {
          "pool_id": "default",
          "priority": 2,
          "strong_sift": {
              "active": false,
              "num_candidate_harmonics": 8,
              "match_factor": 0.001,
              "dm_match_range": 2
          }
      }
  }, {
      "cheetah_id": 3,
      "beams": [{
          "beam": {
              "active": true,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam1",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam1",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank1.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 1
          }
      }, {
          "beam": {
              "active": false,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam2",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam2",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank2.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 2
          }
      }, {
          "beam": {
              "active": false,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam3",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam3",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank3.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 3
          }
      }],
      "psbc": {
          "dump_time": 540
      },
      "acceleration": {
          "fdas": {
              "pool_id": "default",
              "priority": 0,
              "active": false,
              "labyrinth": {
                  "active": true,
                  "threshold": 10.0
              }
          }
      },
      "sift": {
          "pool_id": "default",
          "priority": 2,
          "strong_sift": {
              "active": false,
              "num_candidate_harmonics": 8,
              "match_factor": 0.001,
              "dm_match_range": 2
          }
      }
  }, {
      "cheetah_id": 5,
      "beams": [{
          "beam": {
              "active": true,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam1",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam1",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank1.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 1
          }
      }, {
          "beam": {
              "active": false,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam2",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam2",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank2.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 2
          }
      }, {
          "beam": {
              "active": false,
              "sinks": {
                  "channels": {
                      "sps_events": {
                          "active": true,
                          "sink": [{
                              "sink_id": "spccl_files"
                          }, {
                              "sink_id": "candidate_files"
                          }]
                      }
                  },
                  "sink_configs": {
                      "spccl_files": {
                          "extension": ".spccl",
                          "dir": "/tmp/beam3",
                          "sink_id": "spccl_files"
                      },
                      "spccl_sigproc_files": {
                          "spectra_per_file": 0,
                          "dir": "/tmp/beam3",
                          "extension": ".fil",
                          "candidate_window": {
                              "ms_before": 500.0,
                              "ms_after": 1000.0
                          },
                          "sink_id": "candidate_files"
                      }
                  }
              },
              "source": {
                  "sigproc": {
                      "file": "filterbank3.fil",
                      "chunk_samples": 1024,
                      "default-nbits": 8,
                      "active": true
                  },
                  "udp_low": {
                      "number_of_threads": 2,
                      "spectra_per_chunk": 2048,
                      "number_of_channels": 7776,
                      "max_buffers": 1,
                      "active": false
                  },
                  "udp_low_lite": {
                      "number_of_threads": 10,
                      "spectra_per_chunk": 32768,
                      "number_of_channels": 432,
                      "max_buffers": 3,
                      "active": false
                  }
              },
              "beam_id": 3
          }
      }],
      "psbc": {
          "dump_time": 540
      },
      "acceleration": {
          "fdas": {
              "pool_id": "default",
              "priority": 0,
              "active": false,
              "labyrinth": {
                  "active": true,
                  "threshold": 10.0
              }
          }
      },
      "sift": {
          "pool_id": "default",
          "priority": 2,
          "strong_sift": {
              "active": false,
              "num_candidate_harmonics": 8,
              "match_factor": 0.001,
              "dm_match_range": 2
          }
      }
  }],
  "ddtr": {
      "cpu": {
          "active": false
      },
      "fpga": {
          "active": false
      },
      "gpu_bruteforce": {
          "active": false,
          "copy_dmtrials_to_host": true
      },
      "klotski": {
          "active": true
      },
      "klotski_bruteforce": {
          "active": false
      },
      "dedispersion": [{
          "start": 0.0,
          "end": 100.0,
          "step": 0.1
      }, {
          "start": 100.0,
          "end": 300.0,
          "step": 0.2
      }, {
          "start": 300.0,
          "end": 700.0,
          "step": 0.4
      }, {
          "start": 700.0,
          "end": 1500.0,
          "step": 0.8
      }, {
          "start": 1500.0,
          "end": 3100.0,
          "step": 1.6
      }],
      "dedispersion_samples": 131072
  },
  "sps": {
      "cpu": {
          "active": false,
          "samples_per_iteration": 1,
          "number_of_widths": 1
      },
      "threshold": 8.0,
      "klotski": {
          "active": true,
          "pulse_widths": "1,2,4,8,16,32,64,128"
      },
      "klotski_bruteforce": {
          "active": false,
          "pulse_widths": "1,2,4,8,16,32,64,128"
      }
  }
}

sdp.py

sdp.py object model

sdp.py object model

The sdp.py module models SDHP configuration JSON elements. In the context of a full CDM JSON object, the elements this maps to are:

# JSON modelled specifically by sdp.py
{
  ...
  "sdp": {
    "scan_type": "science_A"
  },
  ...
}

mccs.py

mccs.py object model

mccs.py object model

The mccs.py module models MCCS configuration JSON elements. In the context of a full CDM JSON object, the elements this maps to are:

# JSON modelled specifically by mccs.py
{
    "interface": "https://schema.skao.int/ska-low-tmc-assignedresources/4.0",
    "mccs": {
        "interface": "https://schema.skao.int/ska-low-mccs-controller-allocate/3.0"
        "subarray_beams": [
            {
                "subarray_beam_id": 1,
                "apertures": [
                    {
                        "station_id": 1,
                        "aperture_id": "AP001.01",
                    },
                ],
                "number_of_channels": 8,
            },
        ]
    }
}

assigned_resources.py

assigned_resources.py object model

assigned_resources.py object model

The assigned_resources.py module describes which resources have been assigned to the sub-array.

Examples below depict a populated sub-array and an empty one:

{
    "interface": "https://schema.skao.int/ska-low-tmc-assignedresources/2.0",
    "mccs": {
        "subarray_beam_ids": [1],
        "station_ids": [[1,2]],
        "channel_blocks": [3]
    }
}
{
    "interface": "https://schema.skao.int/ska-low-tmc-assignedresources/2.0",
    "mccs": {
        "subarray_beam_ids": [],
        "station_ids": [],
        "channel_blocks": []
    }
}

scan.py

scan.py object model

scan.py object model

The scan.py module models the argument for the SubArrayNode.scan() command. Below is an example JSON command argument that this code can model.

// For MID
{
  "interface": "https://schema.skao.int/ska-tmc-scan/2.2",
  "transaction_id": "txn-12345",
  "scan_id": 2
  "start_time": "2025-12-23T08:25:00.412Z"
}

// For LOW
{
  "interface": "https://schema.skao.int/ska-low-tmc-scan/4.1",
  "transaction_id": "txn-....-00001",
  "subarray_id": 1,
  "scan_id": 1
  "start_time": "2025-12-23T08:25:00.412Z"
}

Example configuration JSON for MID

{
  "interface": "https://schema.skao.int/ska-tmc-configure/4.2",
  "transaction_id": "txn-....-00001",
  "pointing": {
    "wrap_sector": -1,
    "ie_offset_arcsec": 3.0,
    "ca_offset_arcsec": -3.0,
    "groups": [
      {
        "field": {
          "attrs": {
            "c1": 201.365,
            "c2": -43.0191667
          },
          "reference_frame": "icrs",
          "target_name": "Cen-A"
        },
        "projection": {
          "alignment": "ICRS",
          "name": "SSN"
        },
        "receptors": ["SKA001", "SKA002"],
        "trajectory": {
          "attrs": {
            "x_offsets": [5, 5, 5, 0, 0, 0, -5, -5, -5],
            "y_offsets": [5, 0, -5, 5, 0, -5, 5, 0, -5]
          },
          "name": "mosaic"
        }
      }
    ]
  },
  "csp": {
    "interface": "https://schema.skao.int/ska-csp-configurescan/4.0",
    "common": {
      "config_id": "sbi-mvp01-20200325-00001-science_A",
      "frequency_band": "1"
    },
    "midcbf": {
      "correlation": {
        "processing_regions": [
          {
            "channel_count": 52080,
            "channel_width": 13440,
            "fsp_ids": [1],
            "integration_factor": 1,
            "receptors": ["SKA001", "SKA002"],
            "sdp_start_channel_id": 0,
            "start_freq": 350000000
          }, {
            "channel_count": 14880,
            "channel_width": 13440,
            "fsp_ids": [1],
            "integration_factor": 10,
            "receptors": ["SKA001", "SKA002"],
            "sdp_start_channel_id": 1,
            "start_freq": 548437600
          }
        ]
      },
      "frequency_band_offset_stream1": 80,
      "frequency_band_offset_stream2": 80,
      "vlbi": {}
    }
  },
  "dish": {
    "receiver_band": "1"
  },
  "sdp": {
    "interface": "https://schema.skao.int/ska-sdp-configure/0.4",
    "scan_type": "science_A"
  },
  "tmc": {
    "scan_duration": 10.0
  }
}

Example configuration JSON for LOW

{
  "interface": "https://schema.skao.int/ska-low-tmc-configure/6.0",
  "transaction_id": "txn-....-00001",
  "mccs": {
      "subarray_beams": [{
          "subarray_beam_id": 1,
          "update_rate": 0.0,
          "logical_bands": [{
              "start_channel": 80,
              "number_of_channels": 16
          }, {
              "start_channel": 384,
              "number_of_channels": 16
          }],
          "apertures": [{
              "aperture_id": "AP001.01",
              "weighting_key_ref": "default",
              "calibration_id": "default"
          }, {
              "aperture_id": "AP001.02",
              "weighting_key_ref": "default",
              "calibration_id": "default"
          }, {
              "aperture_id": "AP002.01",
              "weighting_key_ref": "default",
              "calibration_id": "default"
          }, {
              "aperture_id": "AP002.02",
              "weighting_key_ref": "default",
              "calibration_id": "default"
          }, {
              "aperture_id": "AP003.01",
              "weighting_key_ref": "default",
              "calibration_id": "default"
          }],
          "field": {
              "target_name": "Polaris Australis",
              "reference_frame": "icrs",
              "attrs": {
                  "c1": 317.199,
                  "c2": -88.95636
              }
          }
      }]
  },
  "sdp": {
      "interface": "https://schema.skao.int/ska-sdp-configure/1.1",
      "scan_type": "target:a"
  },
  "csp": {
      "interface": "https://schema.skao.int/ska-low-csp-configure/7.3",
      "common": {
          "config_id": "sbi-mvp01-20200325-00001-science_A",
          "eb_id": "eb-test-20220916-00000"
      },
      "lowcbf": {
          "stations": {
              "stns": [
                  [1, 1],
                  [2, 1],
                  [3, 1],
                  [4, 1],
                  [5, 1],
                  [6, 1]
              ],
              "stn_beams": [{
                  "beam_id": 1,
                  "freq_ids": [400]
              }]
          },
          "vis": {
              "fsp": {
                  "firmware": "vis",
                  "fsp_ids": [1]
              },
              "stn_beams": [{
                  "stn_beam_id": 1,
                  "integration_ms": 849
              }]
          },
          "timing_beams": {
              "firmware": "pst",
              "beams": [{
                  "pst_beam_id": 1,
                  "field": {
                      "target_name": "PSR J0024-7204R",
                      "reference_frame": "icrs",
                      "attrs": {
                          "c1": 6.023625,
                          "c2": -72.08128333,
                          "pm_c1": 4.8,
                          "pm_c2": -3.3
                      }
                  },
                  "stn_beam_id": 1,
                  "stn_weights": [0.9, 1.0, 1.0, 1.0, 0.9, 1.0]
              }]
          },
          "search_beams": {
              "firmware": "pss",
              "beams": [{
                  "pss_beam_id": 1,
                  "stn_beam_id": 1,
                  "stn_weights": [0.9, 1.0, 1.0, 1.0, 0.9, 1.0]
              }]
          }
      },
      "pst": {
          "beams": [{
              "beam_id": 1,
              "scan": {
                  "centre_frequency": 200000000.0,
                  "total_bandwidth": 1562500.0,
                  "pst_processing_mode": "VOLTAGE_RECORDER",
                  "observer_id": "jdoe",
                  "project_id": "project1",
                  "target": {
                      "target_name": "J1921+2153",
                      "reference_frame": "icrs",
                      "attrs": {
                          "c1": 6.023625,
                          "c2": -72.08128333,
                          "epoch": 2000.0
                      }
                  },
                  "receiver_id": "receiver3",
                  "max_scan_length": 20000.0,
                  "subint_duration": 30.0,
                  "receptors": ["receptor1", "receptor2"],
                  "receptor_weights": [0.4, 0.6],
                  "rfi_frequency_masks": []
              }
          }, {
              "beam_id": 2,
              "scan": {
                  "centre_frequency": 200000000.0,
                  "total_bandwidth": 1562500.0,
                  "pst_processing_mode": "VOLTAGE_RECORDER",
                  "observer_id": "jdoe",
                  "project_id": "project1",
                  "target": {
                      "target_name": "J1921+2153",
                      "reference_frame": "icrs",
                      "attrs": {
                          "c1": 6.023625,
                          "c2": -72.08128333,
                          "epoch": 2000.0
                      }
                  },
                  "receiver_id": "receiver3",
                  "max_scan_length": 20000.0,
                  "subint_duration": 30.0,
                  "receptors": ["receptor1", "receptor2"],
                  "receptor_weights": [0.4, 0.6],
                  "rfi_frequency_masks": []
              }
          }]
      },
      "pss": {
          "beam": [{
              "beam_id": 1,
              "reference_frame": "ICRS",
              "ra": 82.75,
              "dec": 21.0,
              "centre_frequency": 1400.0
          }],
          "config_id": 1,
          "cheetah": [{
              "cheetah_id": 1,
              "beams": [{
                  "beam": {
                      "active": true,
                      "sinks": {
                          "channels": {
                              "sps_events": {
                                  "active": true,
                                  "sink": [{
                                      "sink_id": "spccl_files"
                                  }, {
                                      "sink_id": "candidate_files"
                                  }]
                              }
                          },
                          "sink_configs": {
                              "spccl_files": {
                                  "extension": ".spccl",
                                  "dir": "/tmp/beam1",
                                  "sink_id": "spccl_files"
                              },
                              "spccl_sigproc_files": {
                                  "spectra_per_file": 0,
                                  "dir": "/tmp/beam1",
                                  "extension": ".fil",
                                  "candidate_window": {
                                      "ms_before": 500.0,
                                      "ms_after": 1000.0
                                  },
                                  "sink_id": "candidate_files"
                              }
                          }
                      },
                      "source": {
                          "sigproc": {
                              "file": "filterbank1.fil",
                              "chunk_samples": 1024,
                              "default-nbits": 8,
                              "active": true
                          },
                          "udp_low": {
                              "number_of_threads": 2,
                              "spectra_per_chunk": 2048,
                              "number_of_channels": 7776,
                              "max_buffers": 1,
                              "active": false
                          },
                          "udp_low_lite": {
                              "number_of_threads": 10,
                              "spectra_per_chunk": 32768,
                              "number_of_channels": 432,
                              "max_buffers": 3,
                              "active": false
                          }
                      },
                      "beam_id": 1
                  }
              }],
              "psbc": {
                  "dump_time": 540
              },
              "acceleration": {
                  "fdas": {
                      "pool_id": "default",
                      "priority": 0,
                      "active": false,
                      "labyrinth": {
                          "active": true,
                          "threshold": 10.0
                      }
                  }
              },
              "sift": {
                  "pool_id": "default",
                  "priority": 2,
                  "strong_sift": {
                      "active": true,
                      "num_candidate_harmonics": 8,
                      "match_factor": 0.001,
                      "dm_match_range": 2
                  }
              }
          }],
          "ddtr": {
              "cpu": {
                  "active": false
              },
              "fpga": {
                  "active": false
              },
              "gpu_bruteforce": {
                  "active": false,
                  "copy_dmtrials_to_host": true
              },
              "klotski": {
                  "active": true
              },
              "klotski_bruteforce": {
                  "active": false
              },
              "dedispersion": [{
                  "start": 0.0,
                  "end": 100.0,
                  "step": 0.1
              }, {
                  "start": 100.0,
                  "end": 300.0,
                  "step": 0.2
              }, {
                  "start": 300.0,
                  "end": 700.0,
                  "step": 0.4
              }, {
                  "start": 700.0,
                  "end": 1500.0,
                  "step": 0.8
              }, {
                  "start": 1500.0,
                  "end": 3100.0,
                  "step": 1.6
              }],
              "dedispersion_samples": 131072
          },
          "sps": {
              "cpu": {
                  "active": false,
                  "samples_per_iteration": 1,
                  "number_of_widths": 1
              },
              "threshold": 8.0,
              "klotski": {
                  "active": false,
                  "pulse_widths": "1,2,4,8,16,32,64,128"
              },
              "klotski_bruteforce": {
                  "active": false,
                  "pulse_widths": "1,2,4,8,16,32,64,128"
              }
          }
      }
  },
  "tmc": {
      "scan_duration": 10.0
  }
}