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: