# Design ## Software architecture All the toolbox features and functionalities are encompassed in the `lime_tbx` Python package. This package is structured following a layered architecture with four main layers: `presentation`, `application`, `business` and `persistence`, and a helper one: `common`.
lime_tbx package architecture
Figure 1: lime_tbx package architecture.
The architecture is described in UML in [Figure 1](#fig-1). We can observe the following subpackages: - **lime_tbx/presentation**: Manages user interaction through graphical and command-line interfaces. - **lime_tbx/presentation/gui**: Provides graphical user interface components for visual interaction, including windows, forms, and data visualizations. - **lime_tbx/presentation/cli**: Handles command-line interactions, including parsing user commands, displaying outputs, and handling user input. - **lime_tbx/application**: Defines application-level workflows and orchestrates operations across different components. It encapsulates high-level logic of user stories. - **lime_tbx/application/simulation**: Manages simulation and comparison workflows. - **lime_tbx/application/coefficients**: Provides logic for managing and downloading LIME coefficients. - **lime_tbx/application/filedata**: Handles use cases related to exporting and loading data files. - **lime_tbx/business**: Implements the core domain logic and numerical algorithms used by the toolbox. - **lime_tbx/business/lime_algorithms**: Implements the main LIME algorithms, enabling the calculation of irradiance, reflectance and polarisation. - **lime_tbx/business/interpolation**: Provides numerical interpolation methods. - **lime_tbx/business/spectral_integration**: Handles spectral integration calculations. - **lime_tbx/business/eocfi_adapter**: Interfaces with the EO-CFI library to compute satellite positions. - **lime_tbx/business/spice_adapter**: Provides a simplified interface with NASA's SPICE toolkit, for precise spacecraft geometry and ephemerides calculations. - **lime_tbx/common**: Contains shared utilities, data structures, and configurations used across the application. - **lime_tbx/common/datatypes**: Defines common data structures, custom classes, and typed objects for consistent data representation. - **lime_tbx/common/constants**: Stores global constants, physical values, and predefined configurations. - **lime_tbx/common/logger**: Implements a centralized logging system for tracking application events, errors, and debugging information. - **lime_tbx/common/templates**: Stores datatype templates needed for compatibility with the `obsarray` library. - **lime_tbx/persistence**: Handles data storage and retrieval mechanisms. - **lime_tbx/persistence/local_storage**: Manages the retrieval and storage of application data on the local filesystem, including logs and configurations.