Skip to main content
Each detector supported by LARDON has a dedicated settings directory under:
$LARDON_PATH/settings/{detector}/
LARDON loads these files at startup when you pass -det {detector} on the command line.

Available detectors

cb1top

VD Coldbox 1 — top CRP

cb1bot

VD Coldbox 1 — bottom CRP

cbtop

VD Coldbox — top

cbbot

VD Coldbox — bottom

dp

Dual-phase detector

50l

50-liter prototype

pdhd

ProtoDUNE Horizontal Drift

pdvd

ProtoDUNE Vertical Drift

Settings directory structure

Each detector directory contains three files:
settings/
└── pdvd/
    ├── geo.json             # Detector geometry
    ├── path.json            # Data file locations
    └── reco_parameters.json # Detector-specific reconstruction overrides

geo.json — detector geometry

geo.json defines the physical and electronic properties of the detector. LARDON reads it in det_spec.py and populates all geometry variables in config.py. Key fields:
FieldDescriptionExample (pdvd default)
tpc_orientationDrift direction convention"Vertical"
n_viewNumber of wire views"3"
n_moduleNumber of CRP modules"4"
module_nameLabels for each module["CRP5","CRP4","CRP2","CRP3"]
view_nameView labels["U","V","Z"]
view_type"Induction" or "Collection" per view per module
view_angleWire angle in degrees["60","120","180"]
view_pitchWire pitch in mm["0.765","0.765","0.51"]
view_nchanNumber of channels per view["952","952","1168"]
view_capaCapacitance per wire in pF["1.03","1.03","0.81"]
samplingADC sampling period in µs["1.953125","1.953125","2.0","2.0"]
n_sampleNumber of time samples["9856","9856","10000","10000"]
e_per_ADCtickElectrons per ADC count["7.74","7.74","10.0","10.0"]
drift_lengthDrift distance in mm["340.64","340.64","340.64","340.64"]
anode_zZ-position of the anode in mm["-343.6","-343.6","343.6","343.6"]
e_driftDrift electric field in kV/cm["0.45","0.45","0.45","0.45"]
n_drift_volumesNumber of independent drift volumes"2"
LAr_temperatureLAr temperature per module in K["89","89","89","89"]
chmapChannel map filename (relative to chmap/)"pdvd_chmap.txt"
broken_channelsList of known broken channel numbers[293, 955, 1482, ...]
daqDAQ format identifier"wib_2_eth"
signal_is_invertedWhether the signal polarity is flipped per module["0","0","0","0"]
Edit geo.json with care. Incorrect wire pitch, channel count, or drift length directly affects hit position reconstruction. After changing geometry parameters, re-run reconstruction from scratch — cached intermediate results will be invalid.

PDS fields

When running with the -pds flag, LARDON additionally reads photon detection system fields from geo.json:
FieldDescription
n_pds_stream_channelsNumber of streaming PDS channels
n_pds_trig_channelsNumber of trigger PDS channels
pds_samplingPDS ADC sampling frequency in MHz
n_pds_stream_sample / n_pds_trig_sampleNumber of samples per waveform
pds_modules_typeModule type ("Cathode", "Membrane", "PMT")
pds_x/y/z_centerGeometric center of each PDS module in mm
pds_channel_mapPDS channel map filename

path.json — data file locations

path.json maps domain names to base filesystem paths where raw HDF5 data files live. LARDON searches these paths when you supply a run number without a full file path. Example (pdvd/path.json):
{
    "cern":       "/eos/experiment/neutplatform/protodune/dune/vd-protodune/",
    "cern_top2":  "/eos/experiment/neutplatform/protodune/dune/tdedata/",
    "cern_top3":  "/eos/experiment/neutplatform/protodune/dune/vd-protodune-top/",
    "cern_top":   "/eos/experiment/neutplatform/protodune/rawdata/online_recon",
    "fnal":       "/pnfs/dune/tape_backed/dunepro/vd-protodune/raw/2025/detector/cosmics/None"
}
Example (cb1top/path.json):
{
    "cern": "/eos/experiment/neutplatform/protodune/rawdata/np02/rawdata_cb",
    "fnal": "/pnfs/dune/tape_backed/dunepro/vd-coldbox-top/raw/2021/detector/test/None"
}
The domain is selected automatically based on which path actually contains the requested run file. You can also bypass path resolution entirely by providing the full file path with the -file option:
lardon -det pdvd -run 39229 -sub 24 -file root://eospublic.cern.ch//eos/.../file.hdf5

reco_parameters.json — detector-specific overrides

This file overrides values from the global default_reco_parameters.json for the specific detector. See Reconstruction parameters for the full parameter reference.

Run-range override system

Both geo.json and reco_parameters.json support run-range keys to handle detector changes over time (new calibrations, repaired channels, voltage changes, etc.). The JSON object at the top level may contain:
  • A "default" key — always loaded first, for every run.
  • One or more "start-end" keys (e.g. "0-3625") — loaded on top of "default" when the run number falls within that range.
{
    "default": {
        "e_drift": ["0.45", "0.45", "0.45", "0.45"],
        "broken_channels": []
    },
    "40097-40097": {
        "e_drift": ["0.5", "0.5", "0.5", "0.5"]
    },
    "40343-40346": {
        "e_drift": ["0.644", "0.644", "0.644", "0.644"]
    }
}
In this example, run 40097 will use a drift field of 0.5 kV/cm while all other runs use 0.45 kV/cm. The default section provides the base values; a matching run-range section overrides only the keys it specifies.
At most one run-range section is applied per file. LARDON stops searching after the first matching range. If no range matches, only the "default" section is used.
This mechanism is used extensively in pdvd/geo.json to track the evolving detector configuration:
Run rangeChange
0-36252-module early commissioning geometry
3629-3632Transitional view-type assignment
37000-38131Updated e_per_ADCtick
40097-40097Drift field 0.50 kV/cm
40343-40346Drift field 0.644 kV/cm
42000-99999Restored standard view types and drift field

Build docs developers (and LLMs) love