Hbb Reclustering

it is interesting that FSR is so important. We have double checked our implementation with the CMS twikis and the Run3 HH group. (Suggests that maybe we can gain by recovering FSR by re-clustering soft jets… something for the next iteration! )

FSR Big impact / ISR not a big deal

SvB and SvBMA

https://indico.cern.ch/event/1662921/contributions/6991517/attachments/3237505/5773955/March12-2026-HH4b-HHwFSR.pdf

Ideas

  • Use dressed bs ?

Plan

  • Event selection where FSR likely
    • leading mass ~125… Subleading < 125
  • Plots n(near-by jets) pt(nearest) dR(nearest) mbb' where b' = b+FSR

Plan for undergrad (Sam Tony Boyle)

  • Give him signal files with paired b-jets and all unclustered jets.
  • [ ] Make mass resolution plots
  • [ ] Try reclustering

Logs

24 March 2026 Tuesday

  • LPC git down… cant figure out plotting code… abort .. send mail later
  • [X] Send plotting instructions

02 February 2026 Monday

  • Adding plots
  • Computing per/gen part level bools based on FSR (comparing two methods)
  • pt vs E fractions ?

27 February 2026 Friday

  • [X] Move to falcon
  • Claude Code!
  • Had a _Great Idea! Use the FSR weights to flag truth FSR!
  • Setup on falcon… but slurm not working… bailing to LPC
  • Claude Code:

    "I think the first goal should be a truth-level selection to flag events where there is significant FSR.
    To develop this I would like to explore the data for a few events. Can you write a print_event function that prints the four_vector (pt, eta, phi, mass) of the b-quarks, their children and the various status flags"
    

26 February 2026 Thursday

  • Setting up derived processor
  • ./run_container source coffea4bees/scripts/FSR-recovery-analysis.sh
  • On branch HbbFSRRecovery

Plan

  • Event selection where FSR likely
    • leading mass ~125… Subleading < 125
  • Plots n(near-by jets) pt(nearest) dR(nearest) mbb' where b' = b+FSR

06 June 2025 Friday

  • Adding flag for reclustering
  • Running without clustering
  • running cutflow: py analysis/printCutFlow.py -i output/analysis_signal_test_job/test_signal_nominal.coffea -p GluGluToHHTo4B_cHHH1 -e UL18
  • Seeing that there is a big differnece between the two ! The clustering is doing too much…

05 June 2025 Thursday

  • Idea: run the clusterbs, stop merging when trying to merge more than one b
  • Run on signal and compare the reconstructed mass before and after reclustering
  • Setup script to run systematics to make test vectors python -m unittest jet_clustering.tests.test_clustering.clusteringTestCase.test_HbbReclustering_6jets
  • Running the processor: source scripts/analysis-test-signal.sh
  • Adding a hook to stop the clustering when trying to merge any bs.
  • Added a processor to test clustering. Will just compare when running with and without clustering on
  • updating the btagging scores set the combined to 1.0 (Should probably use the original btag)
  • Hacked the selected flag for now
  • Got a first version running!

27 January 2025 Monday

  • Writing out a python file
  • python runner.py -t -o test_HH4b.coffea -d GluGluToHHTo4B_cHHH1 -p analysis/processors/processor_HH4b.py -y UL18 -op output/analysis_test_job -m metadata/datasets_HH4b.yml
  • Writing out other jets down to 15 GeV (using write_debug_info.add_debug_info_for_Hbb_reclustering)
  • make an example reading script
  • sent mail to Tony

1st Mail

Hi Tony

You can find that data here: https://cernbox.cern.ch/s/0h0GmTdR5PAHQtx

The file is for HH->4b signal and has the following variables:

  • 'event'
  • 'run'
  • 'leadDiJetmass'
  • 'sublDiJetmass'
  • 'leadDiJetleadJet(pt,eta,phi,mass)'
  • 'leadDiJetsublJet(pt,eta,phi,mass)'
  • 'sublDiJetleadJet(pt,eta,phi,mass)'
  • 'sublDiJetsublJet(pt,eta,phi,mass)'
  • 'otherJet(pt,eta,phi,mass)'

(We can talk about this more in person when you have time…) Events are made of "jets", you can think of these as like quarks or gluons. Each jet has a four vector (pt, eta, phi, mass) We have an algorithm to identify jets that are likely b-jets and to cluster them into "di-jets", which hopefully represent the Higgs four-vector.

Each event has two "di-jets" a leading one and a sub-leading one. The di-jets in turn are made from two jets a leading jet and a sub-lead jet. So, leadDiJetsublJet* give the four vector from for the subleading jet of the leading dijet.

In addition to these four jets, there can be additional jets in the events. The number of these varies event to event. The four-vectors of these jets are given in otherJet*.

I would start by playing round with the data. An example of how to load the file in python is here: https://cernbox.cern.ch/s/LxRprWSZvOMdBut You will need to install coffea (and will probably also want numpy and akward) in your python environment.

A good first exercise is to compute the leading and subleading di-jet masses from the constituent jet four-vectors. These you can compare with the leadDiJetmass and sublDiJetmass variables. You will want to be able to make plots (histograms) of the masses.

Once you are this point, your mission will be to see if we come up with a criteria to determine if there has been some radiation from one of the b-jets and in these cases to add it back to improve the di-jet mass resolutions.

Make sense?

Let me know if you have any problems accessing the files and what is a good time to meet to chat about this in more detail.

john

UndergradProjects