Architecture

DSPSR is organized into two main layers.

Kernel/     Core I/O and data structures
  ├── Classes/       TimeSeries, BitSeries, File, Observation
  └── Formats/       42+ file formats (DADA, SKA1, GUPPI, FITS, VDIF, …)
            ↓
Signal/     DSP operations
  ├── General/       Filterbank, InverseFilterbank, Convolution, Detection
  │                  Dedispersion, PScrunch, TScrunch, FScrunch
  │                  CUDA variants for GPU acceleration
  ├── Statistics/    SKLimits, ProbabilityDensity
  └── Pulsar/        Fold, CyclicFold, Archive interface

Design patterns

Factory / Registry : File format support uses a factory pattern. dsp::File::create() auto-detects the format of an input file and returns the appropriate subclass.

Operation pipeline : All DSP algorithms inherit from dsp::Operation. The processing pipeline chains operations together, each transforming a dsp::TimeSeries.

CUDA acceleration : Many operations in Signal/General/ have optional CUDA variants that run on the GPU. These are compiled when DSPSR is built with --with-cuda-* configure flags.

PSRCHIVE integration

DSPSR’s Signal/Pulsar/ module produces Pulsar::Archive objects (from PSRCHIVE) as its output. The folded profiles can then be further processed using PSRCHIVE’s analysis and calibration tools.