Components

../../_images/EveryBeamComponents.svg

Facade

This component holds all of the user facing functions and classes/structs. This reduces complexity for the caller and provides a single point for the python wrapper to wrap.

Telescope [Struct]

This datastructure encodes the relevant information for every type of telescope with minimal code changes and duplication. Keeping the data separate from the functionality also allows more freedom in manipulating the data before processing it, by flattening the element structure for example. This struct is created by the load strategy component.

Load strategy

The load component component contains multiple strategies in order to convert a measurement set into a telescope struct. This functionality is directly called by the facade.

Mount factory

This component returns a class that can handle coordinate conversions between J2000/ITRF and element local for specific mount types. The load component calls this factory to create a mount, and from then it gets passed to the response strategy for later use.

Element model factory

This component returns a class that can calculate a batch of responses for a specific element model. Because the inputs and outputs on this level for dish based telescopes and phased array based telescopes are very similar, they can make use of the same interface and thus the same factory. The load component calls this factory to create a mount, and from then it gets passed to the response strategy for later use.

Response strategy

This component uses the mount created by the mount factory and the element model created by the array model factory, to step through the telescope struct and calculate all the responses requested. Depending on the telescope type, a fitting strategy is selected with optimizations specific to the telescope type and element model. Because it takes in the entire telescope structure in one go, the strategy itself can decide if it wants to flatten the structure, or evaluate it in a different order.

Load sequence

../../_images/LoadSequence.svg

The entrypoint for external systems to load a telescope object from a measurementset is facade::Load. The load function selects an appropriate LoadStrategy in order to populate the telescope struct with the corresponding Mount and ElementModel classes.

Response sequence

../../_images/ResponseSequence.svg

The entrypoint for external systems to calculate the response from a telescope object facade::Response. The Response function selects an appropriate ResponseStrategy using response_strategy enum in the telescope object. The response strategy then calculates the response by first converting the direction to element local using the Mount class that is contained in the telescope object. The strategy then passes those directions to the ElementModel class in order to calculate the element response. Other operations then follow in order to calculate the final station response depending on the selected strategy.