-
Notifications
You must be signed in to change notification settings - Fork 2
FAQ
Last revised: 2026-06-15
For questions, start in the DUNE Slack channel:
#nd_muon_spectrometer
For code-specific issues, the code channel may also be useful:
#nd_muon_spectrometer_code
You can also create an issue on the DUNE/dune-tms issue tracker.
When asking for help, include:
- which GPVM/container environment you used
- the branch or commit you built
- the input file path
- the command you ran
- the error message or unexpected output
- whether you changed any config values
Most code lives in src/. The main executable is app/ConvertToTMSTree.cpp.
Useful places to start:
| Task | Start here |
|---|---|
| Detector simulation/readout changes |
src/TMS_Event.cpp, src/TMS_Readout_Manager.cpp, config/TMS_Readout_Default_Config.toml
|
| Reconstruction changes |
src/TMS_Reco.cpp, src/TMS_Track.cpp, config/TMS_Default_Config.toml
|
| Output branch changes |
src/TMS_TreeWriter.cpp, src/TMS_TreeWriter.h
|
| Analysis/validation scripts | scripts/ |
| Geometry changes |
DUNE/dunendggd, not usually dune-tms
|
For a broader map of the code, see dune-tms Primer.
Typical workflow:
- Create a branch for your changes.
- Make the smallest coherent change you can.
- Build and run a small validation test.
- Update relevant documentation if output branches, configs, or workflows changed.
- Open a pull request against the appropriate branch.
- Explain what changed, why, and how you tested it.
Before requesting review, check Validating Changes.
Large-scale production should be handled through the ND production workflow/team, not ad hoc GPVM jobs.
For production sample documentation, use:
- ND Production Samples
- Datasets, for TMS-oriented notes about useful input/output locations
Use GPVMs for small tests, debugging, and development.
Start with Software Installation and Dependencies.
The recommended path is the DUNE GPVM setup:
source setup_FNAL.sh
makeAn SL7 container workflow and local/developer build notes are also documented there.
Use:
ConvertToTMSTree.exe input_edep_file.root output_tmsreco_file.rootFor a guided first run, see Tutorial.
See Datasets.
For local development, spill-like edep-sim files are usually the most useful inputs because they can be processed locally through dune-tms after code/config changes.
See Output File Contents.
Short version:
| Use case | Tree |
|---|---|
| Reconstructed tracks | Reco_Tree |
| Full particle/vertex truth | Truth_Spill |
| Reco-to-truth matching summaries | Truth_Info |
| Hough lines / clusters / reco debugging | Line_Candidates |
| Geometry/version provenance | Metadata |
Use Truth_Info to find the top truth contributors to each reconstructed track:
-
RecoTrackPrimaryParticle*: true particle contributing the most visible energy to the reco track -
RecoTrackSecondaryParticle*: true particle contributing the second-highest visible energy
No equivalent per-track summaries are saved for third-and-later truth contributors.
For the full particle record, use the particle index branches with Truth_Spill:
RecoTrackPrimaryParticleIndexRecoTrackSecondaryParticleIndex
Truth_Spill is the authoritative spill-level particle and vertex truth table.
Truth_Info is filled with reconstructed events/time slices and is mainly for reco-to-truth matching summaries, slice-level truth summaries, and hit-level debugging.
A useful mental model:
-
Truth_Spill: "What true particles and vertices were in the spill?" -
Truth_Info: "Which true particles contributed to this reconstructed track/slice?"
Use the online DUNE geometry visualizer.
Also see:
The reconstruction config contains fiducial-volume settings:
TMS geometry constants are in:
For output-file provenance, check the Metadata tree, which stores geometry tag/branch/commit and fiducial bounds.
Either is fine for small studies. Python is often faster to write and easier for interactive exploration.
For large files or event loops, C++/ROOT may be much faster. If a Python loop is too slow, consider either:
- reading fewer branches
- using vectorized/uproot-style workflows, if appropriate
- rewriting the hot loop in C++
First check the branch definitions in:
Then check the output-tree pages:
Many branches are fixed-size C-style arrays, for example [nTracks][200][4] or [nTrueParticles][4]. In PyROOT or uproot, these may not behave like ordinary Python lists unless you explicitly convert or slice them carefully.
Start with Validating Changes.
Useful checks include:
- build succeeds cleanly
- small
ConvertToTMSTree.exetest runs to completion - output file contains expected trees
-
Metadatamatches the expected geometry/version - key validation plots or reconstruction-efficiency checks look reasonable
Also see: