LArSoft code organization

The LArSoft body of code has two components, experiment-specific code shown at the top in the diagram and experiment-agnostic data structures, interfaces, etc. 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 SciSoft core team. These git repositories are hosted at Fermilab 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
larrecodnn deep learning algorithms and their dependencies
larsim simulation code
larsimdnn simulation code that uses deep learning algorithms
larsimrad simulation code for radiologicals
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
larvecutils LArSoft vector utilities
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. 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:

  1. the LArSoft wiki, in particular, the Developing with LArSoft wiki pages
  2. Erica Snider’s Introduction to LArSoft – source material