Software for Liquid Argon time projection chambers
Any collaborator can develop or modify code and contribute it to LArSoft. On this page, we describe the procedures for submitting code (via a GitHub pull request), coding guidelines and policies, and other information that might be of use to LArSoft code developers.
LArSoft currently supports the platforms listed here. Users who wish to develop on an unsupported platform may use a container approach.
Standard builds of LArSoft use the gcc and clang compilers, where the latter is used primarily to ensure language standards compliance. The versions of these compilers changes from time to time. Please refer to the distribution manifest for a particular release. The manifests files can be accessed by drilling down on the LArSoft bundles page on SciSoft.fnal.gov
The language standard for all LArSoft code is C++20.
To design LArSoft code, it’s important to understand the core LArSoft suite and all the components used by it. Reference the items below when designing new software.
gallery provides lightweight access to event data in art/ROOT files outside the art event processing framework executable. It is not an alternative framework; rather, it provides a library that can be used to write programs that need to read (but not write) art/ROOT files. Information is available here
Whether you are writing new code or modifying existing code, please follow the guidelines listed below. There are also development tools and techniques available that can make coding easier.
Start by reviewing the information on the overview page for using LArSoft with GitHub. Contact your experiment offline management to identify acting Level 2 managers. Send any comments to The Scisoft Team, or via Redmine issues.
NOTE: These are instructions for working with the legacy Redmine-based git repositories, and are recommended for experiments that continue to use Redmine for their experiment code. All LArSoft repositories have been moved to GitHub. Please refer to the instructions on the Working with GitHub page for current instructions on using GitHib and contributing code to LArSoft.
To get write access to the repositories, speak to the offline coordinator for your experiment. If you have a question, send email to the SciSoft Team.
cet_make
and cet_add_compiler_flags
. Used in CMakeLists.txt
files throughout LArSoftart_make
and simple_plugin
. Used in CMakeLists.txt
files throughout LArSoftproduct_deps
fileproduct_deps
and CMakeLists.txt
files to add dependenciesbuildtool
(from the cetbuildtools
product) to perform the build.High-level description of testing is available at larsoft.org
After designing, coding, building and testing a piece of software, submit it to the LArSoft development branch so it is included in a new release.
Also look at Process for contributing code to LArSoft.
These are package written and maintained by the general physics and computing communities for
Package | Namespace | Short description | Location of headers | |
---|---|---|---|---|
C library | std:: |
Extensions to base C that are part of the standard language | ||
ROOT | See below | Data-analysis tools | $ROOT_INC |
|
CLHEP | CLHEP:: |
Class Library for High-Energy Physics | $CLHEP_INC/CLHEP |
|
Geant4 | See below | Detector simulations | $G4INCLUDE |
|
GENIE | genie:: |
Neutrino Monte-Carlo Generator | $GENIE_INC/GENIE |
|
boost | boost:: |
General programming tools for C | $BOOST_INC/boost |
|
Message Facility wiki documentation | mf:: |
Service for console messages | $MESSAGEFACILITY_INC |
|
FHiCL Configuration | fhicl:: |
Configuration language and parsing tools | $FHICLCPP_INC |
|
nutools and LArSoft | simb:: |
Neutrino platform tools | $NUTOOLS_INC |
ROOT and Geant4 do not use namespaces. In general, ROOT classes begin with “T” (e.g., TTree, TH1) while Geant4 classes begin with “G4” (e.g., G4Track, G4Step). Exception: Some of the newer ROOT sub-packages have namespaces (such as ROOT::Math::
, ROOT::Fit::
, ROOT::Minuit2::
, Reflex::
, TMVA::
).
Geant4 is accessed through the LArG4 interface package. More information is available at the LArG4 wiki
Some of these packages duplicate functionality; e.g., 4-vectors are implemented in both ROOT and CLHEP. Given a choice, use a package that’s higher in the above tables over one that’s lower; e.g., choose ROOT classes over their CLHEP equivalents.
To include new external software packages into the LArSoft distribution, or to create a new external dependency: