Modules

cacao is split into modules. Each module is a directory at the top of the repository, and each one builds a shared library that milk loads at runtime. Within the milk CLI, a module’s commands are prefixed by its shortname.

Directory

Library

CLI shortname

Description

AOloopControl

cacaoAOloopControl

cacao

AO loop control engine: modal and zonal filtering, modal statistics. Also installs the cacao setup, task manager, FPS and cacao-aorun-* scripts.

AOloopControl_DM

cacaoAOloopControlDM

cacaodm

DM operation: DM channel combination, simulated turbulence, astrogrid

AOloopControl_IOtools

cacaoAOloopControlIOtools

cacaoio

I/O tools: WFS image acquisition, WFS camera simulation, spot finding

AOloopControl_acquireCalib

cacaoAOloopControlacquireCalib

cacaoac

Acquire calibration: linear response measurement

computeCalib

cacaocomputeCalib

cacaocc

Compute calibration: control modes, control matrices, Hadamard decoding, masks

AOloopControl_PredictiveControl

cacaoAOloopControlPredictiveControl

cacaopc

Predictive control filters

AOloopControl_compTools

cacaoAOloopControlcompTools

cacaoct

Miscellaneous computation tools

AOloopControl_perfTest

cacaoAOloopControlperfTest

cacaopt

Performance monitoring and testing, including latency measurement

pyramidWFStools

cacaopyramidWFStools

cacaopyrwfs

Pyramid WFS tools

pycacao

Python package

Python AO tools (calibration, DM tools)

Dependencies

All modules link milk’s CLIcore, and all modules except AOloopControl link cacaoAOloopControl. Linear algebra comes from OpenBLAS with LAPACKE, or from Intel MKL when found. computeCalib uses CUDA and MAGMA when milk is configured with -DUSE_CUDA=ON / -DUSE_MAGMA=ON.

Modules also use headers from milk modules they don’t link, and AOloopControl_acquireCalib calls functions in computeCalib without linking it. These symbols are resolved at runtime because milk loads all modules into one process. So a module can’t be used on its own without milk.

Loading a module

milk > mload cacaoAOloopControl
milk > m?