Releases: ShipSoft/FairShip
25.12
Added
Physics and Simulation
- Add EvtGenDecayer for decaying J/psi (and other particles in future) when specifying the --EvtGenDecayer option
- Corrections in MuonDIS simulation
The DIS interactions are now time-shifted to be consistent with the original incoming muon. Additionally, tracks from soft interactions of the original muon along with the muon's veto response are preserved (in muonDis.root) and included up to the DIS interaction point. To be noted that the muon veto points are manually added using add_muonresponse.py, which modifies the simulation file. This replaces the old method of "backward-travelling muon" to generate the incoming muon's veto response. All MuonDIS simulation scripts have been updated and consolidated within FairShip/muonDIS, ensuring consistency for new productions. - Added a custom CrossSection branch to the simulation file to save the DIS cross sections from muonDIS.
- Unified beam smearing implementation across all generators
- Updated
HNLPythia8Generatorto use consistent Gaussian beam smearing and circular beam painting, replacing the previous uniform square implementation - Added beam smearing and painting support to
FixedTargetGenerator - All generators (
MuonBackGenerator,HNLPythia8Generator,FixedTargetGenerator) now use the same beam smearing algorithm: Gaussian smearing with--SmearBeamparameter and uniform circular painting with--PaintRadiusparameter - The
--SmearBeamand--PaintBeamcommand-line options inrun_simScript.pynow apply to all generators, not just muon background simulation - Implemented shared
BeamSmearingUtilsutility using modern C++17 features (std::pair return and structured bindings) to eliminate code duplication
- Updated
- Big update of genie generation scripts
macro/makeGenieEvents.pyandpython/genie_interface.py:- Universal choice of neutrino flavor to simulate
- Handy way to enable/disable charm and tau decays of the products
- Rewriting the code with modern pythonic style preserving backward compatibility
- Adding new keys specifically for genie regime in
macro/run_simScript.pyand copyinggstTTree from the genie input file to the output file of themacro/run_simScript.py:- Adjust the z range where to simulate the neutrino interactions via
--z_start_nuand--z_end_nukeys - Replacing the
--Geniekey withGenieas a subparser - Copying
gstTTree is similar tosndsw
- Adjust the z range where to simulate the neutrino interactions via
- Add support for Pythia 8.3xx. 8.2xx is still supported via preprocessor macros for the time being.
- Support using TPythia6 provided by ROOTEGPythia6 for ROOT ≥ 6.32
SND Detector System
- Folder
SNDis added for new versions of SND integrated to the Muon Shield - First version of
MTC(SND/MTC) is introduced. Scint part is fully implemented, the Sci-Fi part is implemented in simplified version. Geometrical parameters ofMTCare stored ingeometry/MTC_config.yamlfile - Added fibre structure for MTC and digitization. Fibre <-> SiPM mapping is done in
SND/MTC/MTCDetector.cxx, can be extracted and tested inpython/SciFiMapping.py, that is subsequently used inpython/shipDigiReco.py - Add visualization methods to SciFiMapping.py to visualize Sci-Fi in MTC, including draw_channel(), draw_channel_XY(), and draw_combined_scifi_views()
- First version of SND/SiliconTarget, this layout for this iteration consists of 120 3.5mm W planes with pairs of silicon planes placed 1mm from the surface of the tungsten. As a temporary solution, the detector is placed within the second last magnet of the muon shield. Configuration of detector in simScript is coupled to the SND_design == 2 along with the MTC.
- SND/EmulsionTarget folder, with the Target and TargetTracker classes from nutaudet
- New key for
macro/run_simScript.pyfor choosing SND options is added:--SND_design - Support for multiple SND designs in simulation setup
- The
--SND_designoption inmacro/run_simScript.pynow accepts multiple values and an 'all' option to enable all available SND designs. - The geometry configuration and detector setup (
geometry/geometry_config.py,python/shipDet_conf.py) have been updated to instantiate all requested SND detectors. - This enables running with multiple SND subdetectors simultaneously and is future-proof for additional SND designs.
- The
- Added the hole for SND in the Muon Shield, that is created automatically if SND key is enabled (works so far for SND_design == 2)
Geometry and Target Station
- Add June 2025 target configuration
- Geometry: Make the tungsten target the default (Jun25 config)
- Definition of Pressured Helium for the target, two version 200 Celsius degree and 90 Celsius degree.
- Implement vacuum in target facility
- Implement target helium vessel
- Enclose target in steel (316L) cylinder
- Add option for an additional sensitive plane around the target in run_fixedTarget
- Implement proximity shielding design from 26/06/2025 by G. Humphreys
- Added new warm muon shield
warm_optin geometry_config - Added new parameters to muon shield to support configurations from current optimisation campaign
- Geometry_config.py: Added MS design
New_HA_Designbased on the MSwarm_optwith new version of HA - Add (optional) MgB2 field map
Data Classes and I/O
- Data classes now support ROOT RNtuple I/O
All FairShip data classes (Hits, Points, Tracks, Particles) have been refactored for ROOT RNtuple compatibility. Changes include: public copy constructors, const-correct getter methods, replacement of TVector3 storage with std::array, and complete refactoring of ShipParticle to remove TParticle inheritance. Comprehensive RNtuple I/O tests verify all 20 data classes can be written to and read from RNtuple format. - Add RNtuple conversion and inspection utilities (
macro/convertTreeToRNTuple.py,macro/inspect_tree_branches.py) for testing and validation. Note that FairRoot I/O currently uses TClonesArray which is not supported by RNtuple. - Add EventId and TrackID for MCTrack and HAPoint #944
- Add ISTLPointContainer interface for STL-based detector track index updating
Introduces ISTLPointContainer interface enabling polymorphic track index updating for detectors using std::vector storage. ShipStack now automatically detects and handles both STL-based and TClonesArray-based detectors, ensuring MC points maintain correct track references after track filtering. Also adds missing parameterised constructors to simpleTarget and exitHadronAbsorber.
Tools and Utilities
- Add dedicated --print-fields and --check-overlaps flags to run_simScript.py to use these debug tools.
- Add experimental script to compare histograms
- Add experimental script to check overlaps quickly
- Add CI job to run fixed target simulation (run_fixedTarget.py)
- Added event_inspector class to experimental analysis_toolkit to streamline usage of helper functions; Added dump_event() as a start.
- ShipBFieldMap: Added LOG info and fatal
- Add backport for new TFile/TDirectory
__get_item__pythonisation
Detector Improvements
- Add access to decoded numbers (stations, views etc.) of strawtubes hits
- Add enough straws to cover aperture entirely
- Add SST frame option (4 = aluminium, 10 = steel [default])
- Add z-offset to FixedTargetGenerator
- Add missing --FixedTarget option to run_simScript.py
Reconstruction
- Added initial implementation for ACTS based track reconstruction. This iteration includes independent tracking geometries for SiliconTarget, MTC, and Strawtubes.
Changed
Data Structure Modernization
- Migrate detector MC point storage from TClonesArray to std::vector
Ten detector classes now usestd::vector<PointType>instead ofTClonesArrayfor storing MC simulation points. This modernises the codebase with standard C++ containers, improves type safety, and leveragesFairRootManager::RegisterAny()for ROOT I/O. Affected detectors: TimeDet, UpstreamTagger, strawtubes, splitcal, veto, Target, TargetTracker, SiliconTarget, MTCDetector, and simpleTarget. - Migrate ShipStack MC track storage from TClonesArray to std::vector
ShipStack now usesstd::vector<ShipMCTrack>instead ofTClonesArrayfor storing MC tracks written to output. This completes the migration of MC data storage to modern C++ containers and enablesRegisterAny()for MCTrack I/O. Includes bounds checking in ShipAna.py for all MCTrack vector accesses to handle the stricter indexing behaviour of std::vector compared to TClonesArray. - Migrate Tracklet container in shipDigiReco from TClonesArray to std::vector
- Complete migration from TClonesArrays to STL vectors for all detectors (timeDetector, muonDetector, vetoHitOnTrack, strawtubes, splitcal)
- Modernise data classes by removing obsolete BOOST serialisation (Tracklet, vetoHitOnTrack, ShipHit, TrackInfo)
- Replace BOOST serialisation with native ROOT 6 serialisation
- Modernise Tracklet constructor to accept
std::vector<unsigned int>indices - Update vetoHitOnTrack to use parameterised constructor in Python code
- Add const correctness to TrackInfo accessor methods
- Update Python code in shipDigiReco.py to use modern constructors
- Bump ClassDef versions to 2 for schema evolution
- Add TrackInfo to RNTuple I/O test suite
Physics and Simulation
- Change GEANT4 Physics list from QGSP_BERT_HP_PEN to FTFP_BERT_HP_EMZ following GEANT4 team recommendation and studies by Hanae Tilquin presented at Nov. 2025 collaboration meeting and following software meetings.
- J/psi are no longer decayed using Geant4 when using the --EvtGenDecayer option
Target Station Geometry
- Target station geometry updated with nested volume approach
Implemented tantalum cladding (1.5mm) around tungsten target layers using nested volumes instead of s...
25.01
Added
- New analysis toolkit prototype added as part of the 'experimental' package.
- Simple analysis example script now available in 'examples/'
Fixed
- Use ConstructedAt + std::swap to replace removed pythonization for TCA
- Octant symmetry was incorrect for B_z when using field maps (reported and fixed by M. Ferro-Luzzi)
- Tof calculation corrected in GenieGenerator.cxx, wrong units previously used.
- Genfit measurements now give the correct detector ID
- Fix TEvePointSetPrintOut
- Event Display: Fix drawing of MC and Geo tracks
Changed
-
Changed the dimension of the cave (ref. https://indico.cern.ch/event/1507466/contributions/6345273/attachments/3003438/5293503/Quick%20Update%20on%20FAIRSHIP%20geometry-1.pdf):
- Updated dimensions of TCC8 and ECN3.
- Added a step in ECN3.
- Removed the coat of the absorber.
- Modified the dimensions of the HA and absorber.
-
Set Decay Volume Medium as helium (previously vacuums),can be explicitly switched to vacuum with --vacuums.
-
Medium of SST boxes will be the same as DecayVolumeMedium (previously, always vacuum)
-
Don't prune tracks (before we were using the CFL option to Track::prune, see https://github.com/GenFit/GenFit/blob/e81adeb07c8643301a1d9f7ae25048557cc72dff/core/include/Track.h#L298)
-
EventCalc LLP event generator
This modification to the EventCalc interface accommodates for generic N-body LLP decays.
Removed
- Remove Millepede
- Remove outdated example shipEvent_ex.py
- Remove ALPACA generator
New Contributors
- @eduard322 made their first contribution in #556
- @Gfrisella made their first contribution in #592
Full Changelog: 24.11...25.01
24.11
Release after first round of breaking changes. Requires CVMFS release ≥ 24.10.
Tagged for launch of background simulations.
Added
- EventCalc LLP event generator
This modification introduces a first implementation of the EventCalc decay
event sampler in FairShip for inclusive final states. For further details,
consult the dedicated presentation at the 30th SHiP CM
here. See also #528. - Add a conversion script
FairShip/macro/convertEvtCalc.pyto convert the
EventCalc output sampled kinematics (.dat) as input to the simulation script
(.root). Remark: This will eventually become unnecessary when this
conversion is implemented within the EventCalc tool itself.
Fixed
- Fix missing includes in ecalMatch and ecalReco
- Fix compilation warnings due to unused or uninitiliazed variables #481
Changed
- shipStrawTracking: Move to argparse
- CMake: Use external genfit2
- shipStrawTracking, shipDigiReco, shipVertex: Make compatible with current genfit
Removed
- Remove obsolete renaming scripts
- Remove online, please see charmdet and muflux branches for respective versions
- Remove charmdet, please see charmdet branch for latest version
- Remove preshower and CaloDesign 1 (TP+Preshower)
- Remove bundled genfit
- Remove conditions DB, will almost certainly look different, copy in git
history for reference
Full Changelog: 24.10...24.11
24.10 - Freiburg
Tag release to prepare for breaking changes. Last release to include charm
cross-section measurement code, and obsolete detector configurations.
Added
- Add option for helium-filled decay volume
- Add pre-commit config: This will be phased in to improve code quality and
spot issues as early as possible. Status visible in README and CI enabled for
new pull requests. - Add CHANGELOG.md
- Add
.git-blame-ignore-revsto allow automatic reformatting etc. without
polluting git blame - Automatically built documentation using Doxygen
- Add CODEOWNERS file to automatically trigger reviews by the relevant experts
- Add different configuration files for vacuum /helium for the Decay Vessel
- Add option to enable/disable SND
Fixed
- Remove trailing whitespace and fix line endings
- Fix compilation warnings due to deprecations #469
- Fix issue with SST parameters #489
- Cleaned up Veto Implementation
- Fix crash of event display, PID when no entrance lid present
- Close ShipReco.py output file
- Remove unused (silently ignored!) argument for MuDISGenerator::SetPositions
Changed
- Update getGeoInformation command line interface
- Update SST geometry constants #483
- Housekeeping: Use same clang-format and clang-tidy config as FairRoot
- Decay Vessel configuration now imported from a yaml file
- Geometry of Decay Vessel updated to new design
- Housekeeping: Bump minimum CMake version to 3.12
- Housekeeping: Use FairRoot's
find_package2to find ROOT, VMC, fmt - Housekeeping: Bump minimum ROOT version to 6.26
- Housekeeping: Use find_package to find BOOST
- Housekeeping: Set FairLogger dep instead of manual includes
Removed
- Remove obsolete files related to old ways of installing or testing FairShip
- Remove uses of future and past modules #473
- Remove Geant3 dependency
- Remove unimplemented event display functions (see #497)
- Disable SND by default
- Housekeeping: Don't use CMake commands no longer provided by FairRoot 19
- Housekeeping: Remove old CMake for ROOT 5
- Remove old, outdated tracking script
Pull requests predating CHANGELOG
- Fix missing branchlist for MuonBack generator by @olantwin in #441
- fixing overlap/extrusions in volMuFilter by @antonioiuliano2 in #442
- Update number of Target Tracker tstations by @antonioiuliano2 in #443
- Add header include guard to ShipGlobals.h by @olantwin in #444
- Use consistent size variables for wall container volumes by @antonioiuliano2 in #445
- README: Add link to cvmfs_release and specify correct default by @olantwin in #447
- eventDisplay: No need to commit suicide if you can disown by @olantwin in #450
- create_field_perturbation: no argument group needed by @olantwin in #449
- Bump pymongo from 3.10.1 to 4.6.3 in /conditionsDatabase by @dependabot in #451
New Contributors
- @yabezsh made their first contribution in #463
- @egamberini made their first contribution in #469
- @wcmartylee made their first contribution in #483
- @anupama-reghunath made their first contribution in #468
- @lfpc made their first contribution in #511
Full Changelog: ECN3_2023...24.10
ECN3 2023
ECN3 geometry with 2023 updates, ready for new background productions for the proposal.
What's Changed
- SND Geometry for Muon Magnetic Spectrometer studies in SHiP by @antonioiuliano2 in #421
- Update Dockerfile for new shipdist by @olantwin in #410
- Reducing transverse size magnetic spectrometer by @antonioiuliano2 in #425
- Fix out of date shebang by @olantwin in #426
- Fix typos in shipVertex error messages. by @olantwin in #427
- Change of magnetic field and SND wall numbers in geometry options by @antonioiuliano2 in #432
- Remove obsolete code by @olantwin in #27
- Update README and add TOC by @olantwin in #434
- Remove unused variable by @olantwin in #440
- ECN3 v2023 by @olantwin in #420
Full Changelog: ECN3_2022...ECN3_2023
ECN3 2022
Final ECN3 2022 version. Tagging so that we can work towards 2023 release.
Release notes (automatically generated by GitHub) very long since we haven't tagged a release in a few years.
What's Changed
- B fields using the VMC interface by @jback08 in #49
- Small changes to support lxplus7 by @olantwin in #52
- Implement the new beam smearing scheme by @olantwin in #47
- Fix issues in travis build by @olantwin in #53
- Give non-zero exit code if run_simScript doesn't get expected arguments by @olantwin in #57
- Allow field maps to work as local B fields in volumes. by @jback08 in #55
- Comment clang-format 5 option by @olantwin in #58
- Random seed support by @sashabaranov in #60
- Add script to generate hit maps to FairShip. by @olantwin in #61
- Update readme and some cosmetic changes by @olantwin in #62
- Fix code blocks by @olantwin in #63
- Fix new code blocks by @olantwin in #64
- Add ShipRpcPoint to flux_map.py by @olantwin in #65
- Separate liquid and plastic SBT by @olantwin in #67
- Remove superfluous UVTs by @olantwin in #66
- Track Pattern Recognition by @hushchyn-mikhail in #37
- Remove out-dates setup script by @olantwin in #68
- Timing Detector class is introduced by @korzenev in #69
- Use named temporary file for event display file by @olantwin in #70
- Fix getopt options by @olantwin in #71
- Set TimeDet dimensions from the geometry config by @olantwin in #72
- Fix phi randomisation (discovered by Tatiana) by @olantwin in #73
- [WiP] Upstream new muon shield by @olantwin in #74
- Fix interpolation of gaps for the split magnet by @olantwin in #34
- Give fastMuon default value by @olantwin in #76
- Fix filenames in README by @olantwin in #75
- Use floating-point precision for field maps. by @jback08 in #77
- Add QCD ffbar to Dark Photon production by @amagnan in #79
- Straighten coil gaps to simplify shapes by @olantwin in #78
- Add elastic interactions by @marteff in #80
- Fixing overlapping of detectorIDs by @antonioiuliano2 in #82
- Typo in GenieGenerator.cxx by @antonioiuliano2 in #83
- Adjustable material frames around views for 2018 strawtubes geometry by @DaniilSu in #84
- Fixing overlap with pillars in nudet muon detector by @antonioiuliano2 in #86
- Correct relative floor height definition by @olantwin in #88
- Fix for backward compatibility issue by @DaniilSu in #85
- Fixing relative position of the two nutaudet components by @antonioiuliano2 in #89
- Bug fixes for using VMC B fields. by @jback08 in #90
- strip structure in splitcal geometry and reconstruction by @simoniel in #91
- Add Dockerfile (for Skygrid, Condor & continuous integration) by @olantwin in #92
- FairShip changes to make things easier for muflux and charm by @evanherwijnen in #93
- Latest muflux changes by @evanherwijnen in #94
- Add field definition functions to ShipFieldMaker by @jback08 in #95
- Update shielding and hadron absorber by @olantwin in #99
- Fix missing header import by @olantwin in #100
- Fix issues with new shielding by @olantwin in #101
- Fix final overlap by @olantwin in #102
- [WiP] Update flux_map for new MuonBack weights by @olantwin in #104
- Fixing bug in ProcessHits, pointed by Thomas by @antonioiuliano2 in #105
- Place tShield in origin of SHiP coordinate frame explicitly by @olantwin in #106
- Updating emulsion structure by @antonioiuliano2 in #107
- Fix bug and refactor getGeoinfo macro by @shir994 in #108
- Fixing total y dim computation by @antonioiuliano2 in #109
- Add changes for muon flux measurement and its online software by @olantwin in #110
- Fix missing change T3<->T4 by @olantwin in #111
- Fix detector ID parsing for T3 and T4 by @olantwin in #112
- Remove excessive printout in MufluxSpectrometerHit by @olantwin in #113
- Update with latest muon flux online changes by @olantwin in #114
- Update for muon flux online: Updated channel map, EB & scaler unpacking by @olantwin in #115
- Update muon flux online code: final(?) channel mapping and all scalers by @olantwin in #117
- Update HNL production branching ratios & refactor Pythia configuration by @JLTastet in #98
- Fix for reading old simulations by @antonioiuliano2 in #118
- [WiP] Extended Goliath fieldmap; hardcoded geometry after detector installation. by @evanherwijnen in #119
- Removing one RPC chamber upstream by @antonioiuliano2 in #120
- Add --CharmdetSetup option to run_sumScript by @antonioiuliano2 in #121
- Updating charm cross section geometry by @antonioiuliano2 in #122
- New muon flux pattern recognition by @hushchyn-mikhail in #123
- Implement RPC endpoints by @nwojcicka in #124
- Flip x for muon tagger segmentation by @olantwin in #125
- Fixing a bug in DetectorID (again) by @antonioiuliano2 in #126
- Muon tagger hits in Muflux PatRec by @hushchyn-mikhail in #127
- Fix strip pitch, use centre of strip instead of corners by @olantwin in #128
- Fix typos in #128 by @olantwin in #129
- Remove rules for files that don't exist (fix CMake warning) by @olantwin in #130
- TDC -> distance; Alignment corrections; PatRec with/without dist2wire by @hushchyn-mikhail in #131
- Setting pixel positions after measurements by @antonioiuliano2 in #132
- New goliath fields; exposed alignment variables to python by @evanherwijnen in #135
- Changing number of lead target volumes to 1 by @antonioiuliano2 in #136
- Fix localBuild to not assume $SOURCEDIR name by @olantwin in #137
- Fix option parsing by @olantwin in #138
- Fix bug in TimeDetHit::Dist by @olantwin in #141
- Remove superfluous import; fix --test to work from anywhere by @olantwin in #142
- Update broken external link by @raux in #133
- expose x y z drifttube translations to python by @evanherwijnen in #143
- Don't write to 'dummy' files, just write to memory by @olantwin in #144
- rpc dimensions fixed by @nwojcicka in #146
- rpc digitisation by @nwojcicka in #145
- P precalculation by @hushchyn-mikhail in #148
- Fix rpc digitisation verbosity, skip invalid strips instead of erroring out; some cosmetics. by @olantwin in #149
- Fix more indentation issues, make fake clustering optional, fix imports by @olantwin in #150
- P.O.T. simulation for charm geometry by @antonioiuliano2 in #147
- Fix field map file opening b...
2017 Summer frozen version
This release contains all modifications up to September 17th.
The master branch will continue with updates to the target geometry, non-uniform magnetic fields in the muonshield.
Short Muon Shield, pyramidal frustum
Start of optimization with short muon shield, pyramidal frustum shape for Hidden Particle Detector. Tau-neutrino detector slightly too wide.
Tag version 1.10.
Version used for TP and TP addendum 2015