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: https://larsoft.github.io/LArSoftWiki/releases/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: