Installation

C++ Build

Dependencies

Library

Purpose

Ceres Solver

Non-linear least squares (Gibbs construction, statistical mixture)

yaml-cpp

YAML configuration parsing

CGAL

Multidimensional (Delaunay) interpolation

Cubature

Numerical integration (header-only, bundled with the module)

GoogleTest

Unit tests only

On Debian/Ubuntu:

apt-get install g++ make libceres-dev libyaml-cpp-dev libcgal-dev libgtest-dev

On macOS, via Homebrew:

brew install ceres-solver gsl cgal

On Windows, use Cygwin. Ceres can be installed following the steps here; yaml-cpp must be built from source:

git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake -DYAML_BUILD_SHARED_LIBS=OFF ..
make
make DESTDIR=/desired/path/to/installation install

and CGAL installed via vcpkg (vcpkg install cgal).

Building from source

git clone https://gitlab.com/nsf-muses/module-cmf/eos-synthesis
cd eos-synthesis

Before compiling, run the tests to ensure all dependencies are correctly installed:

cd test
bash test_all.sh

If all tests pass, compile the code:

cd ../src
make

The compiled binary is src/synthesis.

Docker

A pre-built image is available on the MUSES GitLab registry:

docker pull registry.gitlab.com/nsf-muses/eos-synthesis:latest

Create directories for input and output files:

mkdir -p input output
docker run -it --rm -v $(pwd)/input:/opt/input -v $(pwd)/output:/opt/output \
    registry.gitlab.com/nsf-muses/eos-synthesis:latest ./synthesis

The -v options mount your local input and output directories as volumes in the container. Make sure config.yaml and the input EoS files are in the input directory before running, and run the pre/post-processing scripts described in the Quickstart as needed.

To build the image locally from the provided Dockerfile instead:

docker build -t eos-synthesis .

Python utilities (optional)

The config generation, validation, and postprocessing scripts require Python:

pip install -r requirements.txt

This installs openapi-core, pyyaml, pandas, and the MUSES porter and compose libraries used by postprocess.py.