The 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: https://cdcvs.fnal.gov/redmine/projects/larsoft/wiki/LArSoft_release_list
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