Skip to content

Software Overview

There are two primary components to the software stack in GReX. First, the SNAP board must be configured and setup to send voltage data to the server. After that, the pipeline software should take care of the rest.

Pipeline Overview

flowchart TD
    A[SNAP] -->|UDP| B[T0]
    B -->|PSRDADA| C[RFI Cleaning]
    C -->|PSRDADA| D[Heimdall]
    D -->|Sockets| E[T2]

Software Manifesto

To limit downtime and maximize reproducability, we will try to adopt a consistent software development strategy. Primarily:

  • Builds will be deterministic and reproducible
  • Code will be version controlled, organized, and public

Language Specific

Rust

  • No clippy warnings
  • Avoid unsafe
  • Document everything
  • Formatted with rustfmt

C++

  • Code will be formatted with clang-format's LLVM style
  • Try to minimize (solve) all errors from -Wall

Python

  • Code will be formatted with Black
  • Docstrings will follow the numpy format
  • Gradual typing will be used (PEP 438) and checked with mypy or equivalent
  • Environments will have pinned dependencies (reproducible)

Most of this can be accomplised by using Poetry.