Skip to content

Update Limit Setting - #107

Open
aebid wants to merge 18 commits into
cms-flaf:mainfrom
aebid:Update_Limit_Setting
Open

Update Limit Setting#107
aebid wants to merge 18 commits into
cms-flaf:mainfrom
aebid:Update_Limit_Setting

Conversation

@aebid

@aebid aebid commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

No description provided.

Copilot AI 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.

Pull request overview

This PR reworks the dilepton (DL) limit-setting configuration for the HH→bbWW Run 3 analysis. It moves the datacard inputs to per-era, DNN-significance-sliced HME shapes, expands the set of eras (adding a combined Run3_Early era group), adds a second signal process (XtoHHto2Tau2B), relaxes zero/negative-bin handling for sparse background/signal templates, and introduces a limit_plots/campaigns block that drives PlotResonantLimitsTask overlay plots. Supporting changes update the stacked-plot style config with nested stat/syst uncertainty band styling and remove now-unneeded datacard-time rebinning.

Changes:

  • Datacard config (x_hh_bbww_DL_run3.yaml): new ${ERA}-prefixed input pattern, expanded eras + era_groups, DNN-sliced SR/*_dnnN categories, added XtoHHto2Tau2B signal, negative/zero-bin tolerances, and a new campaigns + limit_plots overlay section.
  • global.yaml: removed dead commented QCDRegions entries and dropped StatInference.hist_bins (rebinning now handled by HistRebinTask).
  • cms_stacked.yaml: added nested (stat + syst) background uncertainty band styling keys.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
config/Datacards/x_hh_bbww_DL_run3.yaml Restructures DL datacard inputs, eras, categories, processes, and adds limit-overlay/campaign config
config/global.yaml Cleans up dead QCDRegions comments and removes datacard-time hist_bins rebinning
config/plot/cms_stacked.yaml Adds styling keys for nested stat-only vs total uncertainty bands

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +247 to +248
external_limits:
- config/Datacards/run2_spin0_DL_external_limits.json

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This has been added

@aebid

aebid commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

@cms-flaf-bot please test

  • StatInference_version=PR_20

@cms-flaf-bot

Copy link
Copy Markdown

pipeline#15509625 started

@cms-flaf-bot

Copy link
Copy Markdown

pipeline#15509625 passed

Copilot AI 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.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.

@aebid

aebid commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

@cms-flaf-bot please test

  • StatInference_version=PR_20

@cms-flaf-bot

Copy link
Copy Markdown

pipeline#15512407 started

@cms-flaf-bot

Copy link
Copy Markdown

pipeline#15512407 passed

aebid and others added 4 commits August 16, 2026 18:50
DY has no usable MC statistics in the b-tagged same-flavour categories: over the
232 eE/muMu SR slices of Run3_Early its effective MC count has a median of 5.8 and
sits below the binning's own min_bkg_neff of 4 in 42% of them, with five slices
going negative outright and blocking the datacards. TT, ST and VV are all fine
(median N_eff 471 / 211 / 97).

Two changes, both in x_hh_bbww_DL_run3.yaml:

- min_dnn_bkg_each: 0.01 requires every non-negligible background to be positive in
  every DNN slice. min_bkg_neff only ever gated the *summed* background, which never
  binds -- a background that had fluctuated negative was hidden inside a healthy
  total. min_dnn_bkg_neff is available but left at 0: requiring those backgrounds to
  be measured rather than merely positive costs 35% of the Asimov Z in muMu/res2b at
  m500.

- TotalBkg merges TT/DY/ST/VV into one template in SR/boosted, all three channels.
  The gate fixes slice integrals but eE/SR/boosted_dnn1 still has negative *bins*
  inside a positive slice, and quantile mass binning makes every bin of an n<=5
  slice signal-carrying, so the unconditional rejection fires. eMu gains DY, which
  its own channel list had excluded from that channel's background entirely.

Validated by rerunning the full chain on v2605a (rebin -> datacards -> limits):
negative shapes 5 -> 0 of 1392, datacards build under the unmodified
resolveNegativeBins, and the expected limit moves by +1.46% geometric mean over ten
mass points (+4.8% worst, at 700 GeV). Split: binning gate +0.22%, merge and strict
acceptance +1.24%.

Bumps StatInference to 44b27b1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Carries the slice-naming cleanup: the DNN selection each slice stands for is now
the slice directory's own title rather than a dnn_slices.json side-car, so there
is no path for a reader to be handed wrongly and no key name for producer and
consumer to agree on. Directories are also created a level at a time, fixing the
stale parent titles nested mkdir left behind ("muMu" was titled
"muMu/SR/res2b_dnn0").

Datacard-neutral: rebuilt from a fresh rebin of all four sub-eras, the datacard
.txt files are identical and all 40992 shape histograms unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
config/Datacards/run2_hepdata_radion_results.json is the unprocessed HEPData
submission for HIG-21-005 (7.4 kB: doi, headers, keywords, location). Nothing
reads it. The file the limit plots actually consume is the digitised
run2_spin0_DL_external_limits.json, referenced six times across
x_hh_bbww_DL_run3.yaml and x_hh_bbww_DL_run3_1D.yaml via external_limits, and
that stays.

The converter that turned one into the other, StatInference's
hepdata_to_external_limits.py, was already dropped from that PR for the same
reason. Recoverable from de37048 if the digitisation ever needs redoing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants