Skip to content

ColliderBit: CBS standalone, analysis naming migration, Run-2 analysis wave, Rivet 4.1/Contur 3.0#608

Open
Pengxuan-Zhu-Phys wants to merge 601 commits into
masterfrom
ColliderBit_solo_development
Open

ColliderBit: CBS standalone, analysis naming migration, Run-2 analysis wave, Rivet 4.1/Contur 3.0#608
Pengxuan-Zhu-Phys wants to merge 601 commits into
masterfrom
ColliderBit_solo_development

Conversation

@Pengxuan-Zhu-Phys

@Pengxuan-Zhu-Phys Pengxuan-Zhu-Phys commented Jun 19, 2026

Copy link
Copy Markdown

Headline numbers: 328 files changed, +313k/−14.9k lines — of which ~266k added lines
are data assets (two ATLAS pyhf background JSONs, MET-significance resolution tables,
a vendored nlohmann::json header); the code change is ~+47.6k/−14.9k.
Registered analyses grow from 100 to 135 names.

Breaking changes
Analysis names: 72 analyses renamed; the legacy names are gone from
AnalysisContainer.cpp, so existing user YAML files must be updated. The shipped
yaml_files/*.yaml are already migrated. Mapping table: doc/analysis_rename_map.md
(also in each .info as OldName:).
Rivet/Contur: support for Rivet 3.1.5 / Contur 2.1.1 is replaced by
Rivet 4.1.0 / Contur 3.0.0 (frontends, BOSS configs and patches renamed/regenerated;
CI now installs pathos joblib for Contur 3).
HEPUtils (contrib/heputils): Event gains named variable-R jet collections
(vrjets(key), add_vrjet, …) alongside the existing named jet collections; analyses
and event converters use them when the run YAML declares VRJet_collections.
FastJet: ColliderBit now builds against FastJet 3.4.2 + fjcontrib 1.049 under
contrib/ (with an object library for Nsubjettiness); deprecated FastJet API usages
in Py8EventConversions were fixed.
No physics behaviour of existing, unrenamed analyses is intentionally changed except
where listed under "Bug fixes".

1. ColliderBit Solo (CBS)

CBS_Documentation.md

2. Analysis naming migration

rename-map.md

3. New and rewritten analyses

Brand-new implementations (no predecessor in master):

Analysis Notes
ATLAS_EXOT_2016_013 large-R jets, histograms
ATLAS_EXOT_2016_014 large-R jets
ATLAS_EXOT_2016_017 jet reclustering
ATLAS_EXOT_2019_04 large-R + variable-R jets, histogram-backed SRs
ATLAS_EXOT_2019_07 large-R + variable-R jets
ATLAS_EXOT_2021_35 large-R jets, histograms
ATLAS_SUSY_2012_10, ATLAS_SUSY_2018_07, ATLAS_SUSY_2018_12_RJR Run-1/Run-2 gap fills
CMS_EXO_12_048, CMS_SUS_13_006, CMS_SUS_20_003 Run-1/Run-2 gap fills
Baselines, Dummy validation / no-op utility analyses

Major rewrites carried over from legacy names (selection):
ATLAS_SUSY_2018_05(+_RJR) (2L+jets EW, object-based MET significance, FullLikes JSON),
ATLAS_SUSY_2018_16 (soft 2L, FullLikes), ATLAS_SUSY_2018_30 (3b, ONNX NN),
ATLAS_SUSY_2019_02 (2L0J EW, BDT), ATLAS_SUSY_2018_41, ATLAS_SUSY_2019_09,
ATLAS_SUSY_2019_18, ATLAS_SUSY_2019_22, ATLAS_SUSY_2020_16, ATLAS_CONF_2019_008
(chargino, FullLikes JSON), CMS_SUS_16_039, CMS_SUS_18_004, CMS_SUS_19_010,
CMS_SUS_20_001, CMS_SUS_20_004, CMS_SUS_21_002(+_OLD), CMS_SUS_21_009.

Many analyses register multiple variants (inclusive/binned/per-channel), hence
135 registered names from 91 source files.

4. Backends, build system, support code

  • Rivet 4.1.0 + Contur 3.0.0 frontends and regenerated BOSS wrappers
    (Backends/include/gambit/Backends/backend_types/Rivet_4_1_0/, patches, BOSS config);
    Pythia 8.312 wrapper/patch refresh; ATLAS_FullLikes frontend updates;
    new config/gambit_backend_interfaces.yaml.
  • FastJet 3.4.2 + fjcontrib 1.049 under contrib/ with rpath wiring
    (cmake/contrib.cmake); Nsubjettiness object library.
  • cmake/utilities.cmake / executables.cmake / standalones.cmake: standalone functor
    generation (standalone_facilitator.py), LDFLAGS normalisation to kill
    duplicate-library warnings, CBS target registration.
  • Utils/json.hpp: vendored single-header nlohmann/json (MIT), used by CBS output and
    batch merge. Utils/util_functions: small helpers.
  • DecayBit: refactor of the off-shell-W chargino width integration used by the new
    MSSMEW Run-2 scan configs (yaml_files/SUSYRun2_MSSMEW*.yaml).
  • .gitignore: CBS artefacts, contrib fastjet/fjcontrib, BOSS castxml, generated
    functors_for_CBS.cpp.

FastJet_Code_Changes.md

6. Variable-R Jet implementation.

VariableR_Jet_Changes.md

7. Histogram support based on SignalRegion class.

Histogram_SR_Design.md

Thank you for such massive merge PR request.

Pengxuan-Zhu-Phys and others added 20 commits June 2, 2026 22:54
- Add Histogram1D/2D classes (Histogram.hpp) with weighted fill, scale,
  combine, and JSON serialisation; mirror Cutflow design pattern
- Wire histogram macros, batch accumulation, and CBS output into solo pipeline
- Make use_FullLikes a runtime YAML option; remove mandatory ATLAS_FullLikes dependency
- Add CMS-B2G-18-003 low-mass 3M signal regions (300–1300 GeV per-bin SRs)
- Add m_HC and m_VLB kinematic histograms to ATLAS-EXOT-2019-04
- Fix FindEigen3 fallback path and pass CC to YODA configure
# Conflicts:
#	CMakeLists.txt
#	ColliderBit/examples/ColliderBit_SLHA_file_model.yaml
#	ColliderBit/examples/ColliderBit_SLHA_scan_model.yaml
#	ColliderBit/include/gambit/ColliderBit/ColliderBit_MC_rollcall.hpp
#	ColliderBit/include/gambit/ColliderBit/Utils.hpp
#	ColliderBit/include/gambit/ColliderBit/analyses/AnalysisData.hpp
#	ColliderBit/src/ColliderBit_eventloop.cpp
#	ColliderBit/src/analyses/Analysis_ATLAS_13TeV_2BoostedBosons_139invfb.cpp
#	ColliderBit/src/analyses/Analysis_ATLAS_13TeV_3LEP_139invfb.cpp
#	ColliderBit/src/analyses/Analysis_ATLAS_SUSY_2018_08.cpp
#	ColliderBit/src/analyses/Analysis_ATLAS_SUSY_2018_21.cpp
#	ColliderBit/src/analyses/Analysis_CMS_8TeV_MultiLEP_20invfb.cpp
#	ColliderBit/src/analyses/Analysis_CMS_SUS_16_048.cpp
#	ColliderBit/src/analyses/Analysis_CMS_SUS_19_012.cpp
#	ScannerBit/include/gambit/ScannerBit/plugin_interface.hpp
#	cmake/MacOSX.cmake
#	cmake/backends.cmake
#	cmake/contrib.cmake
#	cmake/externals.cmake
#	contrib/preload/gambit_preload.cpp
Rename all analysis .info files from final-state style
(e.g. Analysis_ATLAS_13TeV_0LEP_139invfb) to paper/report
number style (e.g. Analysis_ATLAS_SUSY_2018_22), matching
the existing .cpp file naming convention.

- Renamed 46 existing .info files to new-style names
- Created 18 minimal .info files for analyses that had no .info
- Added OldName field to all 61 new-style .info files
- 7TeV/8TeV analyses retain old-style names (cpp unchanged)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The merge with gambit/master auto-merged a wrapper block into
AnalysisData.hpp, but begin_ignore_warnings_eigen.hpp was deliberately
removed in our branch (commit 2dab351). Revert to bare Eigen/Core
include to match our branch intent.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merging gambit/master took --theirs for contrib.cmake, which
downgraded YODA from 2.1.0 (our branch) to 1.9.7 (gambit/master).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The official YODA-2.1.0.tar.gz on hepforge was repackaged;
update the expected MD5 to match the current download.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merge took --ours for Utils.hpp (by-value declaration) while
Utils.cpp had been updated to const reference by gambit/master,
causing an ambiguous overload error. Align both to const reference.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
getxsec.cpp gained InitialTotalCrossSection_YAMLparam and
InitialTotalCrossSection_YAMLSLHA from gambit/master auto-merge,
but --ours on ColliderBit_MC_rollcall.hpp left them unregistered.
Add the missing CAPABILITY entries alongside the existing ones.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ATLAS_EXOT_2016_014: fix abs() paren so the |eta|<2.0 cut works
- ATLAS_SUSY_2019_22: init samesign and fix >3 -> >=3 (was UB)
- Py8EventConversions: use non-deprecated FastJet JetDefinition arg order
- Migrate YODA Histo1D to in-house Histogram class (2016_013, 2021_35);
  drop unused/dead YODA code (2018_07, 2019_07, 2016_017)
- cmake: split LDFLAGS into list elements to kill duplicate-library warnings
- standalone_facilitator.py: fix invalid escape; mark plot script executable
- extend Histogram1D with optional per-bin obs/bkg/bkg_err data
- add macros to define and commit histogram bins as signal regions
- preserve SR-histogram metadata through CBS JSON output and batch merge
- combine SR MC statistical errors in quadrature for weighted bins
- add data/background/signal ratio plotting for SR histograms
- convert ATLAS_EXOT_2019_04 m_VLB histogram to placeholder SR-histogram

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e39afa6ce1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

// Loop over all analyses and compute efficiency x acceptance for each
void calc_LHC_efficiencies_per_analysis(map_str_dbl& result)
{
using namespace Pipes::calc_LHC_efficiencies_per_SR;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use the per-analysis Pipes namespace

When only LHC_efficiencies_per_analysis is requested, this function imports Pipes::calc_LHC_efficiencies_per_SR, so Dep::AllAnalysisNumbers and Dep::LHCEventLoopInfo are read through the other capability's pipe. Those dependency pointers are not guaranteed to be populated for the per-analysis capability, so requesting the new per-analysis efficiency output can dereference the wrong/null pipe or use stale state; switch this to Pipes::calc_LHC_efficiencies_per_analysis.

Useful? React with 👍 / 👎.

summary_line << "LHC efficiencies per SR: ";

// Get the loop info for the number of events
static map_str_dbl loop_info = *Dep::LHCEventLoopInfo;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Refresh event-loop counts for each point

Because loop_info is static, the first scan point's LHCEventLoopInfo is reused for all later points. In runs where event counts vary by point, such as UMVUE or mean_relative_nEvents, the efficiency denominators remain from the first point, so LHC_efficiencies_per_SR and the per-analysis helper report wrong acceptance×efficiency values; copy *Dep::LHCEventLoopInfo on each call instead.

Useful? React with 👍 / 👎.

analyses:
- Baselines
#
- ATLAS_13TeV_0LEPStop_139invfb # [in skip_analyses] New! (Martin)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update migrated analysis names in the new scan

This newly added scan config still requests old analysis IDs, while AnalysisContainer now registers the migrated names (for example this old ATLAS_13TeV_0LEPStop_139invfb name only remains as metadata/commentary). Running yaml_files/PX_SUSYRun2_stop.yaml will fail during analysis lookup with an unknown ColliderBit analysis before the scan starts; update the analyses and skip_analyses lists to the migrated IDs.

Useful? React with 👍 / 👎.

@Pengxuan-Zhu-Phys Pengxuan-Zhu-Phys added ColliderBit Backends Relates to GAMBIT interaction with external codes. labels Jun 19, 2026
@Pengxuan-Zhu-Phys Pengxuan-Zhu-Phys self-assigned this Jun 19, 2026
Pengxuan-Zhu-Phys and others added 2 commits June 21, 2026 21:46
- replace std::system batch subprocess launch with fork/exec/waitpid
- report decoded child exit status or signal and output JSON state
- parse regular and VariableR jet collections through one shared helper
- route VariableR collections through normal jet_collections settings
- skip detector smearing/btag cleanup for configured VariableR jet collections
- remove legacy VRJet_collections/vrjets handling
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Backends Relates to GAMBIT interaction with external codes. ColliderBit

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants