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.

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
larreco primary reconstruction
larsim simulation code
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:

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