MCCS architecture class diagrams

Subarray Structure

@startuml

class MccsController
MccsController : Allocate()
MccsController : Release()
MccsController : RestartSubarray()
MccsController : StandbyFull()
MccsController : StandbyLow()
MccsController : buildState
MccsController : versionId

class MccsSubarray
MccsSubarray : +scanId
MccsSubarray : +stationTrls
MccsSubarray : +stationBeamTrls
MccsSubarray : +subarrayBeamTrls
MccsSubarray : +assignedResources
MccsSubarray : +Abort()
MccsSubarray : +AssignResources()
MccsSubarray : +ReleaseAllResources()
MccsSubarray : +Configure()
MccsSubarray : +Scan()
MccsSubarray : +EndScan()
MccsSubarray : +End()
MccsSubarray : +Restart()
MccsSubarray : +SendTransientBuffer()

class MccsSubarrayBeam
MccsSubarrayBeam : +subarrayId
MccsSubarrayBeam : +SubarrayBeamId
MccsSubarrayBeam : +updateRate
MccsSubarrayBeam : +stationTrls
MccsSubarrayBeam : +stationBeamTrls
MccsSubarrayBeam : +isBeamLocked
MccsSubarrayBeam : +desiredPointing
MccsSubarrayBeam : +pointingDelays
MccsSubarrayBeam : +pointingDelayRates
MccsSubarrayBeam : +pointingReferenceFrame
MccsSubarrayBeam : +pointingTimestamp
MccsSubarrayBeam : +AssignResources()
MccsSubarrayBeam : +Configure()
MccsSubarrayBeam : +DeConfigure()
MccsSubarrayBeam : +ApplyPointing
MccsSubarrayBeam : +Scan()
MccsSubarrayBeam : +EndScan()
MccsSubarrayBeam : +Abort()
MccsSubarrayBeam : +ObsReset()
MccsSubarrayBeam : +Restart()

class MccsStationBeam
MccsStationBeam : +subarrayId
MccsStationBeam : +subarrayBeamId
MccsStationBeam : +stationTrl
MccsStationBeam : +logicalBeamId
MccsStationBeam : +updateRate
MccsStationBeam : +isBeamLocked
MccsStationBeam : +channels
MccsStationBeam : +antennaWeights
MccsStationBeam : +desiredPointing
MccsStationBeam : +pointingDelays
MccsStationBeam : +pointingDelayRates
MccsStationBeam : +pointingReferenceFrame
MccsStationBeam : +pointingTimestamp
MccsStationBeam : +phaseCentre
MccsStationBeam : +apertureId
MccsStationBeam : +AssignResources()
MccsStationBeam : +Configure()
MccsStationBeam : +DeConfigure()
MccsStationBeam : +ApplyPointing
MccsStationBeam : +Scan()
MccsStationBeam : +EndScan()
MccsStationBeam : +Abort()
MccsStationBeam : +ObsReset()
MccsStationBeam : +Restart()

class MccsStation
MccsStation : +transientBufferTrl
MccsStation : +isCalibrated
MccsStation : +isConfigured()
MccsStation : +calibrationJobId
MccsStation : +daqJobId
MccsStation : +dataDirectory
MccsStation : +beamTrls
MccsStation : +delayCentre
MccsStation : +calibrationCoefficients
MccsStation : +Configure()
MccsStation : +InitialSetup()
MccsStation : +delayCentre
MccsStation : calibrationCoefficients
MccsStation : beamformerTable
MccsStation : numberOfChannels
MccsStation : LoadPointingDelays()
MccsStation : ApplyPointingDelays()
MccsStation : ConfigureChannels()
MccsStation : DeallocateSubarray()
MccsStation : +ApplyConfiguration()


class SpsStation
SpsStation : +isCalibrated
SpsStation : +isConfigured
SpsStation : +staticTimeDelays
SpsStation : +channeliserRounding
SpsStation : +cspRounding
SpsStation : +preaduLevels
SpsStation : +beamformerTable
SpsStation : +isBeamformerRunning
SpsStation : +tileProgrammingState
SpsStation : +adcPower
SpsStation : +Initialise()
SpsStation : +StartAcquisition()
SpsStation : +SetLmcDownload()
SpsStation : +SetLmcIntegratedDownload()
SpsStation : +SetCspIngest()
SpsStation : +SetBeamFormerTable()
SpsStation : +LoadCalibrationCoefficients()
SpsStation : +ApplyCalibration()
SpsStation : +LoadPointingDelays()
SpsStation : +ApplyPointingDelays()
SpsStation : +StartBeamformer()
SpsStation : +StopBeamformer()

class SkaSubarray
SkaSubarray : +Abort()
SkaSubarray : +AssignResources()
SkaSubarray : +ReleaseAllResources()
SkaSubarray : +Configure()
SkaSubarray : +Scan()
SkaSubarray : +EndScan()
SkaSubarray : +End()
SkaSubarray : +Restart()

SkaDevice <|-- MccsController
SkaObsDevice <|-- SkaSubarray
SkaSubarray <|-- MccsSubarray
SkaObsDevice <|-- MccsSubarrayBeam
SkaObsDevice <|-- MccsStationBeam
SkaObsDevice <|-- MccsStation
SkaDevice <|-- SpsStation
MccsController o-- MccsSubarray
MccsController o-- MccsSubarrayBeam
MccsController o-- MccsStationBeam
MccsSubarray o-- TransientBufferManager
MccsSubarray o-- MccsSubarrayBeam
MccsSubarray o-- MccsStationBeam
MccsSubarray o-- MccsStation
MccsSubarrayBeam o-- MccsStationBeam
MccsStationBeam o-- MccsStation
MccsStation o-- SpsStation
@enduml

Allocate command activity diagram

@startuml
participant Controller
participant StationProxy
participant ControllerResourceManager
participant Subarray
participant SubarrayBeam
participant StationBeam
hnote over Subarray: EMPTY
hnote over SubarrayBeam: EMPTY
hnote over StationBeam: EMPTY
== Collect subarray beam resources ==
loop stations
Controller->StationProxy: release_from_subarray(subarray_trl)
end
loop subarray_beams
loop apertures
Controller -> StationProxy: allocate(channels)
loop channel_blocks
StationProxy -> StationProxy: get_free_resources(channels)
end
StationProxy -[#red]-> Controller: channel_ids
StationProxy -[#red]> StationProxy: get_free_resources(station_beam)
StationProxy -[#red]-> Controller: station_beam_id
Controller -> ControllerResourceManager: get_free_resources(aperture)
ControllerResourceManager --> Controller: station_beam_trl
end
== Assign allocated resources ==
Controller -> Subarray: AssignResources()
loop subarray_beam_ids
Controller -> SubarrayBeam: AssignResources()
loop apertures
Controller->StationBeam: AssignResources()
hnote over StationBeam: IDLE
StationBeam --> SubarrayBeam: ObsState.IDLE
end
hnote over SubarrayBeam: IDLE
Subarray <-- SubarrayBeam: ObsState.IDLE
end
hnote over Subarray: IDLE
@enduml

Configure command activity diagram

@startuml
participant TelescopeManager as TM
participant MccsSubarray as Subarray
participant MccsSubarrayBeam as SubarrayBeam
participant StationBeam
participant ApertureDB
participant CalibrationDB
participant MccsStation
participant SpsStation
participant MccsTile
TM -> Subarray: Configure()
loop station
Subarray->MccsStation: DeallocateSubarray(subarray_id)
end
loop SubarrayBeam
Subarray -> SubarrayBeam: Configure()
loop StationBeam
SubarrayBeam->StationBeam: Configure()
StationBeam->MccsStation: ConfigureChannels()
StationBeam->ApertureDB: get_weights(weighting_key_ref)
ApertureDB-->StationBeam: weights, phase_centre
StationBeam->StationBeam: desiredPointing
loop frequency channels
StationBeam->CalibrationDB: get_calibration(freq, az, el)
CalibrationDB-->StationBeam: calibration_coefficients
end
StationBeam-->MccsStation: LoadCalibrationCoefficients()
end
SubarrayBeam->Subarray: change_state_callback()
end
loop station
Subarray->MccsStation: ApplyConfiguration()
MccsStation->SpsStation: SetBeamformerRegions()
loop tiles
SpsStation->MccsTile: SetBeamformerRegions()
end
Subarray->MccsStation: ApplyCalibration()
loop antennas
MccsStation->SpsStation: LoadCalibrationCoefficients()
SpsStation->MccsTile: LoadCalibrationCoefficients()
end
MccsStation->SpsStation: SwitchCalibrationBank()
loop tiles
SpsStation->MccsTile: SwitchCalibrationBank()
end
end
@enduml