Skip to content

Domain model

This shows the core domain-driven-design (DDD) aggregates (groups of domain concepts treated as a unit) and domain services (performs domain operations) that are part of starbox.

Aggregate roots

  • Telescope
  • Observation
  • SkyModel

Aggregates

  • Station (inside Telescope)
  • AntennaElement (inside Station)

Value objects

  • Site
  • CalibrationConfig

Strategies

  • Corruption
  • BeamModel

Services

  • CalibrationSolver
  • VisibilityPredictor

Derived artifacts

  • VisibilitySet
  • CalibrationSolution
classDiagram
    Telescope *-- Station
    Telescope --> Site
    Station *-- AntennaElement
    Station --> BeamModel

    VisibilityPredictor ..> Telescope
    VisibilityPredictor ..> Observation
    VisibilityPredictor ..> SkyModel

    Corruption <|-- StationGains
    Corruption <|-- ThermalNoise
    Corruption <|-- Bandpass
    Corruption <|-- PhaseScreen

    CalibrationSolver ..> VisibilitySet
    CalibrationSolver ..> CalibrationSolution
    CalibrationSolver ..> CalibrationConfig

    class Telescope{
        +string name
        +Site location
        +list~Station~ stations

        +baseline_station_pairs()
        +uvw(Observation)
        +plot()
        +hour_angle(Observation)
    }

    class Site{
        +float latitude_rad
        +float longitude_rad
        +float height_m
    }

    class Station{
      +string name
      +float diameter_m
      +tuple position_enu_m
      +BeamModel beam_model
      +list~AntennaElement~ antenna_elements
      +plot()
    }

    class AntennaElement{
      +tuple element_position_enu_m
      +float element_rotation_angle
    }

    class SkyModel{
        +string name
        +tuple phase_centre_rad
        +tuple fov_ra_dec_rad
        +nd.array ra_rad
        +nd.array dec_rad
        +nd.array flux_jy
        +nd.array alpha
        +sample_sources(max_flux, num_sources)
        +lmn(phase_centre_rad=None)
        +plot()
    }

    class Observation{
        +nd.array times_mjd
        +nd.array freqs_hz
        +tuple phase_centre_rad
    }

    class VisibilityPredictor{
        +predict_visibilities(telescope, observation, skymodel) VisibilitySet
    }

    class VisibilitySet{
        +nd.array visibilities
        +nd.array uvw_m
        +nd.array ant1
        +nd.array ant2
        +nd.array times_mjd
        +nd.array time_index
        +nd.array freqs_hz
        +nd.array weights
    }

    class CalibrationConfig{
        +string mode
        +float solint_time
        +float solint_freq
        +string ref_ant
        +float min_snr
        +int min_nvis
        +int max_iters
        +float tol
        +tuple clip_amp_range
        +string normalisation_policy
    }

    class CalibrationSolver{
        +solve(vis_obs, vis_model, calibration_config) CalibrationSolution
    }

    class CalibrationSolution{
        +nd.array gains
        +nd.array time_centres_mjd
        +nd.array freq_centres_hz
        +int ref_ant
        +nd.array flags
        +nd.array qa_metrics
        +evaluate()
        +apply(vis_obs) VisibilitySet
    }

    class BeamModel{
        +string name
        +voltage_response(l, m, freqs_hz, times_mjd)
    }

    class Corruption{
        +string name
        +bool enabled
        +apply(vis, telescope, observation) VisibilitySet
    }
Hold "Alt" / "Option" to enable pan & zoom