Components
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, a nd 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 id 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.