The SHiP experiment at CERN is designed to search for hidden particles produced by 400 GeV proton interactions on a dense tungsten target. Particles travel downstream through a sequence of purpose-built detectors, each with a distinct role: suppressing the dominant muon background, identifying neutrino interactions, spotting hidden-particle decays inside an evacuated vessel, and precisely reconstructing the final-state tracks and energy deposits. This page maps the full chain from the proton beam target to the timing detector, giving the C++ geometry class and Python digitiser for every element so you can quickly locate the relevant source when debugging a simulation or adding a new detector feature.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ShipSoft/FairShip/llms.txt
Use this file to discover all available pages before exploring further.
Detector chain
The coordinate origin (z = 0) sits at the upstream face of the proton target. All positions downstream increase in z.
Sub-detector reference table
| # | Sub-detector | C++ class | Python digitiser | Source directory |
|---|---|---|---|---|
| 1 | Proton target / hadron absorber | ShipTargetStation | — | passive/ |
| 2 | Muon shield | ShipMuonShield | — | passive/ |
| 3 | SND (NuTau target) | Target + TargetTracker | — | SND/EmulsionTarget/ |
| 3 | SND (MTC) | MTCDetector | MTCDetector | SND/MTC/ |
| 3 | SND (SiliconTarget) | SiliconTarget | — | SND/SiliconTarget/ |
| 4 | Decay vessel / SBT veto | veto | SBTDetector | veto/ |
| 5 | Upstream Tagger | UpstreamTagger | UpstreamTaggerDetector | UpstreamTagger/ |
| 6 | Straw Tube Spectrometer | strawtubes | strawtubesDetector | strawtubes/ |
| 7 | Split-Cal (ECAL) | splitcal | splitcalDetector | splitcal/ |
| 8 | Timing detector (TimeDet) | TimeDet | timeDetector | TimeDet/ |
Component descriptions
The upstream anchor of the experiment.
ShipTargetStation (passive/ShipTargetStation.h) builds a multi-slice tungsten target whose material, thickness, and gaps are read from geometry/target_config.yaml. The hadron absorber downstream suppresses secondary hadrons so that only muons (and long-lived hidden particles) emerge. The geometry is configured in geometry_config.py under c.target and c.hadronAbsorber.# excerpt from geometry_config.py
c.target.z0 = 0 # coordinate origin, upstream face of target
c.target.z = c.target.z0 + c.target.length / 2.0
A large, magnetised iron shield that bends the intense muon flux away from the detector acceptance.
ShipMuonShield (passive/ShipMuonShield.h) consumes a flat parameter list—15 numbers per magnet section—encoding the longitudinal offset, half-length, inner and outer transverse dimensions, gap sizes, and field goal. The named geometry TRY_2025 in shield_db is the current baseline. See the Muon Shield page for full parameter documentation.Placed immediately upstream of the decay vessel, the SND searches for neutrino interactions and hidden-particle scattering signatures. Design 1 (
configure_snd_old) builds an emulsion-brick wall (Target) interleaved with SciFi tracking planes (TargetTracker). Design 2 (configure_snd_mtc) builds the Muon Tracker for Charm (MTCDetector) and optional silicon strip tracking (SiliconTarget). See the SND page for details.A 50 m helium-filled (or evacuated) cylindrical vessel where hidden particles produced at the target decay to visible final states. The
veto class (veto/veto.h) implements the vessel walls and the liquid-scintillator Surrounding Background Tagger (SBT). The medium (helium or vacuum) is set by DecayVolumeMedium and drives which YAML configuration is loaded:configure_veto(
f"$FAIRSHIP/geometry/veto_config_{ship_geo.DecayVolumeMedium}.yaml",
ship_geo.decayVolume.z0,
)
A thin vacuum-box scoring plane (
UpstreamTagger, UpstreamTagger/UpstreamTagger.h) placed ~25 m upstream of the decay-vessel centre. It tags charged particles entering the vessel, providing a key handle for rejecting muon-induced backgrounds. Position smearing is ±1 cm; time resolution is 0.3 ns. Digitisation is performed by UpstreamTaggerDetector in python/detectors/UpstreamTaggerDetector.py.Four straw-tube tracking stations straddle a dipole spectrometer magnet. The
strawtubes class (strawtubes/strawtubes.h) inherits from SHiP::Detector<strawtubesPoint> and places 2 cm diameter aluminium or steel-framed drift tubes in four views (two axial, two ±4.57° stereo). The strawtubesDetector Python class converts strawtubesPoint MC hits to strawtubesHits. See the Spectrometer page for parameter details.An electromagnetic sampling calorimeter (
splitcal, splitcal/splitcal.h) with 50 ECAL samplings of 2.8 mm lead filter + 5.6 mm scintillator active layers, covering a 4 m × 6 m aperture. Precision layers at fixed depths provide pointing information. Configuration is entirely driven by the c.SplitCal AttrDict in geometry_config.py.Iron-scintillator muon stations (
MuonStation0–3) behind the calorimeter identify muons and provide the last line of background suppression. Stations are spaced 1 m apart starting from c.MuonStation0.z; iron filter slabs of 30 cm thickness sit between stations.A thin scintillator-bar detector (
TimeDet, TimeDet/TimeDet.h) just upstream of the spectrometer magnet. Two orthogonal bar layers (1.2 cm and 2.4 cm z-spacing) each cover a 4.5 m × 6.5 m aperture. The timeDetector Python digitiser converts TimeDetPoint MC hits to TimeDetHit objects, selecting the earliest valid hit per cell. Timing is used to associate reconstructed tracks with interaction vertices.Key pages
Muon Shield
Magnetised shield geometry, named configurations in
shield_db, parameter format, and field-map classes.Straw Tube Spectrometer
Four-station drift-tube tracker: geometry options, digitisation, ACTS digi config, and field map.
SND Detector
Scattering and Neutrino Detector: emulsion target, SciFi tracker, silicon strips, and MTC sub-systems.
Running a Simulation
How to run
run_simScript.py and choose geometry options for the full detector chain.Configuration entry point
All detector objects are instantiated inpython/shipDet_conf.py::configure(). This function reads the geometry AttrDict produced by geometry_config.py::create_config(), constructs each ROOT detector object, and registers it with the FairRunSim instance via run.AddModule().
The
detectorList module-level list in shipDet_conf.py accumulates detector objects in the order they must be registered with FairRoot. Do not reorder entries — FairRoot processes them sequentially during geometry construction.