UML diagrams

Package diagram

AtLAST package

@startuml atlast_sc_pacakge

left to right direction

package "calculator" as atlast_sc.calculator {
}
package "data" as atlast_sc.data {
}
package "derived_groups" as atlast_sc.derived_groups {
}
package "exceptions" as atlast_sc.exceptions {
}
package "models" as atlast_sc.models {
}
package "utils" as atlast_sc.utils {
}
atlast_sc.calculator --> atlast_sc.derived_groups
atlast_sc.calculator --> atlast_sc.exceptions
atlast_sc.calculator --> atlast_sc.models
atlast_sc.calculator --> atlast_sc.utils
atlast_sc.data --> atlast_sc.exceptions
atlast_sc.data --> atlast_sc.utils
atlast_sc.models --> atlast_sc.data
atlast_sc.models --> atlast_sc.exceptions
@enduml

Class diagrams

Calculator

@startuml calculator

left to right direction

class "AtmosphereParams" as derived_groups.AtmosphereParams {
  AtmosphereParams()
  calculate_atmospheric_temperature(obs_freq : Quantity, weather: float) : Quantity
  calculate_tau_atm(obs_freq : Quantity, weather : float, elevation : Quantity) : float
}
class "Calculator" as calculator.Calculator {
  bandwidth : Quantity
  dish_radius : Quantity
  elevation : Quantity
  eta_a : float
  eta_block : float
  eta_eff : float
  eta_ill : float
  eta_pol : float
  eta_s : float
  eta_spill : float
  g : float
  n_pol : float
  obs_freq : Quantity
  sefd : Quantity
  sensitivity : Quantity
  surface_rms : Quantity
  t_int : Quantity
  T_amb : Quantity
  T_atm : Quantity
  T_cmb : Quantity
  T_rx : Quantity
  T_sys  : Quantity
  tau_atm : float
  weather : float
  user_input : UserInput
  calculation_inputs : CalculationInput
  derived_parameters : DerivedParams
  instrument_setup : InstrumentSetup
  Calculator(user_input: dict, instrument_setup: dict)
  calculate_sensitivity(t_int, update_calculator): Quantity
  calculate_t_integration(sensitivity, update_calculator) : Quantity
  reset()
}
class "Config" as calculator.Config {
  calculation_inputs : CalculationInput
  Config(user_input: Optiona[dict], instrument_setup: Optional[dict])
  reset()
}
class "Efficiencies" as derived_groups.Efficiencies {
  eta_a : float
  eta_s : float
  Efficiencies(obs_freq : Quantity, surface_rms : Quantity,
  eta_ill : float, eta_spill : float, eta_block : float, eta_pol : float)
}
class "Temperatures" as derived_groups.Temperatures {
  T_rx : Quantity
  T_sys : Quantity
  Temperatures(obs_freq : Quantity, T_cmb : Quantity, T_amb : Quantity,
  g : float, eta_eff : float, T_atm : Quantity, tau_atm: float)
}
derived_groups.Efficiencies --* calculator.Calculator
derived_groups.Temperatures --* calculator.Calculator
derived_groups.AtmosphereParams --* calculator.Calculator
models.CalculationInput --* calculator.Config
models.InstrumentSetup --* calculator.Config
models.UserInput --* calculator.Config
calculator.Calculator *-- models.DerivedParams
models.CalculationInput ..> calculator.Calculator
models.InstrumentSetup ..> calculator.Calculator
models.UserInput ..> calculator.Calculator
calculator.Calculator *-- calculator.Config
@enduml

Data model

@startuml data_model

left to right direction

class "CalculationInput" as models.CalculationInput {
  T_cmb : ValueWithUnits
  instrument_setup : InstrumentSetup
  user_input : UserInput
  validate_fields(field_values) : dict
  validate_value(value_to_update, new_value) : dict
}
class "Data" as data.Data {
  bandwidth : DataType
  dish_radius : DataType
  elevation : DataType
  eta_block : DataType
  eta_eff : DataType
  eta_ill : DataType
  eta_pol : DataType
  eta_spill : DataType
  g : DataType
  integration_time : DataType
  n_pol : DataType
  obs_frequency : DataType
  sensitivity : DataType
  surface_rms : DataType
  t_amb : DataType
  t_cmb : DataType
  weather : DataType
  param_data_type_dicts : dict
}
class "DataType" as data.DataType {
  allowed_values : list<float> | None
  data_conversion : dict | None
  default_unit : str | None
  default_value : str | None
  lower_value : float | None
  lower_value_is_floor : bool = False
  units : list<str> | None
  upper_value : float | None
  upper_value_is_ceil : bool = False
}
class "DerivedParams" as models.DerivedParams {
  T_atm : Quantity
  T_rx : Quantity
  T_sys : Quantity
  eta_a : float
  eta_s : float
  sefd : Quantity
  tau_atm : float
}
class "InstrumentSetup" as models.InstrumentSetup {
  T_amb : ValueWithUnits
  dish_radius : ValueWithUnits
  eta_block : ValueWithoutUnits
  eta_eff : ValueWithoutUnits
  eta_ill : ValueWithoutUnits
  eta_pol : ValueWithoutUnits
  eta_spill : ValueWithoutUnits
  g : ValueWithoutUnits
  surface_rms : ValueWithUnits
}
class "UserInput" as models.UserInput {
  bandwidth : ValueWithUnits
  elevation : ValueWithUnits
  n_pol : ValueWithoutUnits
  obs_freq : ValueWithUnits
  sensitivity : ValueWithUnits
  t_int : ValueWithUnits
  weather : ValueWithoutUnits
  validate_t_int_or_sens_initialised(field_values)
}
class "Validator" as data.Validator {
  {static} validate_allowed_values(value, param, data_type)
  {static} validate_field(key, val)
  {static} validate_in_range(value, param, data_type)
  {static} validate_units(unit, param, data_type)
}
class "ValueWithUnits" as models.ValueWithUnits {
  unit : str
  value : float
  validate_fields(field_values)
}
class "ValueWithoutUnits" as models.ValueWithoutUnits {
  value : float
}

models.InstrumentSetup --* models.CalculationInput
models.UserInput --* models.CalculationInput
data.Validator ..> models.CalculationInput
data.DataType --+ data.Data
data.Data ..> data.Validator
data.Data ..> models.CalculationInput
data.Data ..> models.UserInput
data.Data ..> models.InstrumentSetup
models.ValueWithUnits --* models.CalculationInput
models.ValueWithUnits --* models.UserInput
models.ValueWithUnits --* models.InstrumentSetup
models.ValueWithoutUnits --* models.UserInput
models.ValueWithoutUnits --* models.InstrumentSetup
@enduml

Exceptions

@startuml exceptions

left to right direction

class "<color:red>CalculatedValueInvalidWarning</color>" as exceptions.CalculatedValueInvalidWarning {
  message : str
  CalculatedValueInvalidWarning(message : str)
}
class "<color:red>UnitException</color>" as exceptions.UnitException {
  expected_units : str | list<str>
  message : str | None
  parameter : str
  UnitException(parameter : str,
  expected_units : str | list<str>, message : Optional[str])
}
class "<color:red>ValueNotAllowedException</color>" as exceptions.ValueNotAllowedException {
  allowed_values : list<float>
  message : str | None
  parameter : str
  units : list<str> | None
  ValueNotAllowedException(parameter : str, allowed_values : list<str>,
  units : Optional[str], message : Optional[str])
}
class "<color:red>ValueOutOfRangeException</color>" as exceptions.ValueOutOfRangeException {
  lower_value : float | None
  message : str | None
  parameter : str
  units : str | None
  upper_value : float | None
  ValueOutOfRangeException(parameter : str, lower_value : float | None,
  upper_value : float | None, units: Optional[str], message : Optional[str])
}
class "<color:red>ValueTooHighException</color>" as exceptions.ValueTooHighException {
  message : str | None
  ValueTooHighException(parameter : str, upper_value : float,
  units : Optional[str], message : Optional[str])
}
class "<color:red>ValueTooLowException</color>" as exceptions.ValueTooLowException {
  message : str | None
  ValueTooLowException(parameter : str, lower_value : float,
  units : Optional[str], message : Optional[str])
}

exceptions.ValueTooHighException --|> exceptions.ValueOutOfRangeException
exceptions.ValueTooLowException --|> exceptions.ValueOutOfRangeException
exceptions --* data.Validator
exceptions --* calculator.Calculator
@enduml

Utilities

@startuml utils

left to right direction

class "FileHelper" as utils.FileHelper {
  {static} read_from_file(path : str, file_name : str) : dict
  {static} write_to_file(calculator : Calculator, path : str, file_name : str, file_type)
}
class "DataHelper" as utils.DataHelper {
  {static} data_conversion_factors(default_unit : str, allowed_units : list<str>) : dict
}
class "Decorators" as utils.Decorators {
  {static} validate_and_update_params(func) : func
  {static} validate_value(func) : func
}
utils.FileHelper <.. calculator.Calculator
utils.Decorators ..> calculator.Calculator
utils.DataHelper ..> calculator.Calculator
utils.DataHelper ..> data.Data
utils.DataHelper ..> utils.Decorators
@enduml