LArSoft code organization

Screen Shot 2016-02-09 at 10.14.03 AMThe LArSoft body of code has two components, experiment-specific code shown at the top in the diagram and experiment-agnostic data structures, algorithms, interfaces, etc. shown in yellow. The experiment-specific components live in repositories managed by the experiments. The core LArSoft code lives in a set of git repositories maintained by the LArSoft core team. These git repositories are hosted at Fermilab in Redmine although an experiment-specific component could be hosted elsewhere.

The core LArSoft code is organized into git repositories as follows.


The build procedure creates and installs a UPS product from each repository. (A UPS product is a software package set up and distributed via UPS, Unix Product Support.) Each UPS product is entirely self-contained, aside from dependencies.

A LArSoft release is a consistent set of LArSoft UPS products built from tagged versions of code in the repositories. Each release of LArSoft has a release notes page that can be accessed via a Redmine table. The release notes list the purpose, new features, breaking changes (and how to work around them), dependencies, changes and a link to installation instructions for the release. The table can be found at:

Code organization within a repository

Each repository has a similar organization:

  • source code directories under a single directory, for example  larcore/larcore/*
  • a directory for unit and integration tests organized by source directory
  • a directory for configuration files, dependency lists, etc.
  • a file, CMakeLists.txt,  used by the build system to execute certain steps

For more information, please see Saba Sehrish’s introduction to LArSoft code and work environment