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.
|larana||secondary reconstruction/analysis e.g. PID|
|larbatch||Batch submission and workflow tools for LAr experiments|
|larcore||low level utilities, functions and geometry|
|larcorealg||core algorithms shared between larsoft and art-independent frameworks such as gallery, larlite, etc.|
|larcoreobj||data products for geometry and core utilities that are shared between larsoft and art-independent frameworks|
|lardata||data products and other common data structures|
|lardataalg||algorithms shared between larsoft and art-independent frameworks such as gallery, larlite, etc.|
|lardataobj||common data products for reconstruction, analysis, etc shared between larsoft and art-independent frameworks|
|larevt||low level algorithm code that use data products|
|lareventdisplay||LArSoft based event display|
|larexamples||examples of writing algorithms, data products, etc.|
|larpandora||LArSoft interface to the pandora reconstruction package|
|larpandoracontent||algorithms and tools for LAr TPC event reconstruction|
|larsoft||umbrella product which is used to setup all the individual larsoft products|
|larsoftobj||LArSoftObj is the umbrella that allows you to set up all the individual lar*obj and lar*alg|
|larutils||LArSoft user utility scripts|
|larwirecell||interface to the Wire Cell Toolkit|
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