Setting up and running LArSoft


  • Note: LArSoft is designed to be run by experiments, so it is not possible to set up LArSoft without setting up LArSoft for a specific experiment. You do this via the setup guide for your experiment. (
  • The core LArSoft code lives in a set of git repositories maintained by the LArSoft core team. Can view the code organization at
  • If you do not have code changes to LArSoft code itself, you may just set up the appropriate products and a Fermilab Hierarchical Configuration Language (FHiCL) file, ends in .fcl

To set up and run LArSoft, the user:

  1. Runs a setup script
    a) Source <experiment specific script>
    b) This tells UPS where to find the programs needed like UPS itself, git, MRB, ROOT, and LArSoft. 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.
    c) Specific example for SBND:
    i) using CVMFS: source/cvmfs/
    ii) using a local UPS database /path/to/products filled with pullProducts:
    source /path/to/products/setup
    export MRB_PROJECT=larsoft
    setup mrb
    Specific example for DUNE:
    source /grid/fermiapp/products/dune/
    Can find links to all LArSoft Collaboration experiments at:
  2. Creates a new development area. This creates a number of subdirectories.
    mkdir <working_dir> #Do not use your home directory, as the libraries you build can get large.
    cd <working_dir>
    mrb newDev or mrb n
    # May need to specific the version and qualified unless larsoft product is set up.
    mrb newDev -v <version> -q <qualifiers>
    # Can find out the larsoft releases
    ups list -aK+ larsoft
    # May want to just make the products area (checks that src, build are already there)
    mrb newDev -p
    Can see mrb newDev options at:
  3. Sets up a LArSoft release – Can be Integration or Production.
    setup larsoft vXXX -q e15:<prof|debug>
  4. Sets up local products
    source localProducts_larsoft_vxx_xx_xx_ex_prof/setup
  5. Checks out code from repository
    cd $MRB_SOURCE
    mrb gitCheckout <code>
    This will get the code from current development head. If you want code with a different version of LArSoft, use -t with mrb g
    mrb g -t LARSOFT_SUITE_vxx_xx_xx <code>
    mrb g larsoft_suite
    mrb g larsoftAlg_suite
  6. Builds and tests the code, all commands must be run in the same shell.
    mrbsetenv  #set up development environment
    mrb b (build) -jN #N is number of parallel build streams
    mrb z (zapBuild) #to get rid of what you just built
    mrb t (test) [jN]  #run buildtool with test, all commands must be run in the same shell
    May need to fix code, rebuild, retest.
  7. Once the code works as expected, publish it to a feature branch.

A simple view

  1. mkdir my_larsoft
  2. source <experiment_setup_script>
  3. cd my_larsoft/
  4. mrb newDev -vvxx_xx_xx -q <e15:debug>
  5. source localProducts_larsoft_vxx_xx_xx_ex_prof/setup
  6. cd $MRB_SOURCE
  7. mrb g larsoft_suite
  8. mrb g larsoftAlg_suite
  10. mrbsetenv
  11. mrb b -jN
  12. mrb t -jN