Software Configuration¶
qm_atlas wraps a number of external programs (xTB, Turbomole, COSMOtherm,
Jaguar, etc.). The software configuration system lets you describe which of
these programs are installed on your machine, which environment modules to load
before running them, and where non-standard binaries live.
How it works¶
A built-in default configuration is always loaded from
src/qm_atlas/resources/default_software_config.yaml (bundled with the
package). That file sets available: false for every supported program and
maps each command name to itself (i.e. the binary is assumed to be on
$PATH).
If the environment variable QM_ATLAS_SOFTWARE_CONFIG_FILE is set, the YAML
file it points to is loaded and merged field-by-field into the defaults.
This means:
You only need to specify what differs from the defaults.
Unmentioned software entries keep their default values (
available: false).Within a software entry, unmentioned fields are inherited from the default.
commandsandenvironment_variablesare merged key-by-key, so you can override a single command path without re-specifying the rest.
Activating the configuration¶
export QM_ATLAS_SOFTWARE_CONFIG_FILE=/path/to/your/software_config.yaml
If the variable is not set, qm_atlas runs entirely on defaults (all
programs disabled). This is the expected state for CI environments and fresh
checkouts.
If the variable is set but points to a file that does not exist, an
EnvironmentError is raised immediately so the misconfiguration is
caught early.
Writing your configuration file¶
Start from example_software_config.yaml (in the repository root). The
minimal entry to enable a program is:
software_environments:
xtb:
available: true
module: "xtb/6.7.1"
The following fields are recognised per software entry:
Field |
Description |
|---|---|
|
|
|
Mapping of logical command names to executable paths or invocation strings. Dict-merged with defaults: you can override a single binary path without re-specifying the others. |
|
Name (or list of names) of the environment module(s) to load before running the software. See Controlling the runtime environment below. |
|
List of paths to prepend to |
|
List of environment variables that should be set to the number of
requested cores (e.g. |
|
Arbitrary additional environment variables to set. Dict-merged with any variables derived from loaded modules. See Controlling the runtime environment below. |
Controlling the runtime environment¶
Each software entry has its own isolated runtime environment. This is
intentional: different programs can have conflicting requirements (e.g.
some softwares override the xtb executable), and running them in the same environment can cause subtle failures.
Default behaviour — no environment specified
If neither module nor environment_variables is set for a software
entry, qm_atlas simply inherits the process’s current environment when
invoking that program. This works when the required binary is already on
$PATH and all necessary variables are set in the shell that launched
qm_atlas and you’re not worried about conflicts between programs.
It also means that if you have a working environment set up in your shell, you can get started with
a minimal config by just enabling the programs you want to use and leaving the environment fields unset.
If you want all programs to share a single common environment, set that
environment up in your shell before launching qm_atlas and leave the
environment fields unset.
Per-software environment via environment_variables
The simplest way to modify the environment for a specific program is to provide an explicit mapping of variable names to values:
software_environments:
xtb:
available: true
environment_variables:
XTBPATH: "/data/xtb/share/xtb"
These variables are merged on top of whatever the current process environment provides before the subprocess is launched.
Per-software environment via module
For HPC systems that use Lmod
, you can instruct qm_atlas to resolve the environment
changes that result from loading one or more modules:
software_environments:
turbomole:
available: true
module: "cosmologic/2026"
xtb_turbomole:
available: true
modulepaths: ["/opt/local/modulefiles"]
module: ["cosmologic/2026", "xtb/6.7.1"]
When the EnvironmentManager is initialised, it executes each module
load command, compares the resulting environment to the baseline, and records
the diff. That diff is what gets applied when the software is later invoked
— not a full shell environment snapshot. This means module-derived
variables and hand-written environment_variables can be freely combined; the
latter are merged on top of the former.
Environment for submitted HPC scripts
If there is a specific environment you set up before running qm_atlas, you need to
provide instructions for how to set up that same environment in the submission script. By default,
only your virtual python environment and your setup for the software config file are forwarded to the
submission script, but any other environment variables or modules that you set up in your shell will
not be automatically forwarded. If you have all necessary modules specified in the software config file,
no additional setup is needed for HPC submission, as the software config will be loaded and applied in the submission script.
However, if you rely on additional environment variables or modules that are not specified in the software config file,
you need to ensure the right environment is set up in the submission script. This can be done using the submission
block in your config file to specify additional modules to load or commands to run at the start of the script.
submission:
module_purge: true # call "module purge" at the start of every script
module_use: # paths to add to MODULEPATH in the script
- "/opt/local/modulefiles"
module_load: # modules to load in every submission script
- "some/shared/module"
command_prepend: "source /path/to/venv/bin/activate"
# Shell command prepended before the payload. If omitted, the
# currently active Python virtual environment is detected
# automatically so qm_atlas itself is importable in the script.
Individual software entries still apply their own module / environment_variables
settings on top of this shared baseline when they execute within the submitted job.
How a submission script is built¶
When a command runs with submit: true, qm_atlas writes a script (into
qm_atlas_submissions/) that rebuilds the environment from scratch: it runs
the module purge / module load lines from the config’s submission
block, activates the Python environment, exports
QM_ATLAS_SOFTWARE_CONFIG_FILE, and then runs the payload.
The activation line comes from submission.command_prepend. If you don’t
set it explicitly, it is auto-detected — first from the VIRTUAL_ENV
environment variable, then from sys.prefix. This is a potential source of
subtle problems with submission scripts, if you have another virtual environment
active and load qm_atlas without resetting the VIRTUAL_ENV environment
variable. To avoid this, set submission.command_prepend explicitly in your
config, or deactivate any personal venv before submitting. You can check
the scripts inside qm_atlas_submissions/ to make sure everything works as
expected.
Default configuration reference¶
The file src/qm_atlas/resources/default_software_config.yaml is the
reference for supported software names and their default command
mappings. There is no need to edit this file; all
customisation should go in your own config file.
# Default software environment configuration for qm_atlas.
#
# This file defines all supported software environments with their default
# command names. All environments are marked "available: false" by default.
#
# DO NOT edit this file. To configure your installation, create a copy of
# example_software_config.yaml, adjust it, and point the environment variable
# QM_ATLAS_SOFTWARE_CONFIG_FILE to it. Fields you specify will be merged
# (field-by-field) into these defaults; fields you omit are inherited from here.
#
# Consequence for tests: any software marked "available: false" (either because
# no config file is provided or because the entry is left at its default) will
# cause tests that depend on that software to be skipped automatically.
software_environments:
xtb:
available: false
commands:
xtb: "xtb"
thread_control_env_vars: ["OMP_NUM_THREADS", "MKL_NUM_THREADS"]
turbomole:
available: false
commands:
ridft: "ridft"
freeh: "freeh"
jobex: "jobex"
Fukui: "Fukui"
mpshift: "mpshift"
vcd: "vcd"
aoforce: "aoforce"
x2t: "x2t"
thread_control_env_vars: ["PARNODES"]
xtb_turbomole:
available: false
commands:
xtb: "xtb"
x2t: "x2t"
thread_control_env_vars: ["PARNODES", "OMP_NUM_THREADS", "MKL_NUM_THREADS"]
cosmotherm:
available: false
commands:
cosmotherm: "cosmotherm"
jaguar:
available: false
commands:
jaguar: "jaguar"
structconvert: "$SCHRODINGER/utilities/structconvert"
lictool: "$SCHRODINGER/run lictool status"
jsc: "$SCHRODINGER/jsc local-server-start"
macromodel:
available: false
commands:
bmin: "bmin"
structconvert: "$SCHRODINGER/utilities/structconvert"
lictool: "$SCHRODINGER/run lictool status"
macrocycle: "$SCHRODINGER/run -FROM psp macrocycle_sample.py"
jsc: "$SCHRODINGER/jsc local-server-start"
moe:
available: false
commands:
moebatch: "moebatch"
moka:
available: false
commands:
moka_cli: "moka_cli"
blabber_sd: "blabber_sd"
corina:
available: false
commands:
corina: "corina"
openeye:
available: false
commands:
omega: "omega2"
oeomega_macrocycle: "oeomega macrocycle"
unicon:
available: false
commands:
unicon: "unicon"
cresset:
available: false
commands:
align: "align"
Global settings¶
The configuration file may also contain a global_settings block for
absolute paths to external data files (MoKa model, COSMO solvent directories,
etc.). This block has no defaults and is ignored when no config file is
provided.
global_settings:
moka_model: "/path/to/retrained/moka/model.pt"
cosmo_solvents_dir_fine:
- "/path/to/solvents/fine/"
cosmo_solvents_dir_tzvp:
- "/path/to/solvents/tzvp/"
Effect on tests¶
Tests that require external programs use the
software_available()
check. When available: false (the default), those tests are skipped with a
descriptive message rather than failing. This means:
The test suite always passes on a machine without any external QM software.
Enabling a program in your config file automatically un-skips the corresponding tests.
Checking a configuration with test_software¶
You do not need a source code checkout to verify a configuration. The installed
package ships these wrapper tests and exposes them through the standalone
qm-atlas test_software command:
# check the programs enabled in a specific configuration
qm-atlas test_software --software_config /path/to/software_config.yaml
# or use QM_ATLAS_SOFTWARE_CONFIG_FILE (e.g. set by an environment module)
qm-atlas test_software
Programs marked available: false are skipped; the enabled ones are exercised
against the real binaries. A clean run confirms every configured tool works,
while a failure points at a broken install or an expired license rather than a
code change. Point --software_config at different files to compare
configurations. See Command-Line Interface for the full command description.