Skip to content

Big PR about using uT as fit axis, and developments to fit the W boson width (partially based on the other changes)#678

Open
cippy wants to merge 56 commits intoWMass:mainfrom
cippy:main_mergeUpstream_devel_150326
Open

Big PR about using uT as fit axis, and developments to fit the W boson width (partially based on the other changes)#678
cippy wants to merge 56 commits intoWMass:mainfrom
cippy:main_mergeUpstream_devel_150326

Conversation

@cippy
Copy link
Collaborator

@cippy cippy commented Mar 25, 2026

This PR is supposed to supersede the previous PR #643

It does many things, but doesn't modify the default analysis behaviour. A short executive summary is the following

  • extension of the ABCD method to work with the uT axis
  • developments to fit the W width, either standalone or simultaneously with mass
  • customisation of some systematic uncertainties related to the recoil (optional)
  • several updates in plotting scripts

cippy and others added 30 commits October 17, 2025 15:44
… analysis bins of specific axes (e.g. utAngleSign) which have identically zero yield in the A-Ax-B-Bx regions

(cherry picked from commit 773c1d9)
… analysis bins of specific axes (e.g. utAngleSign) which have identically zero yield in the A-Ax-B-Bx regions
…current version of Rabbit, it will be probably reverted when the definitions of poi/noi/nuisanceNotConstrained are fixed
…ion on uT>0 with an hardcoded factor (normalization)
if args.fakeTransferAxis in args.fakerateAxes
else ""
),
fakeTransferCorrFileName=args.fakeTransferCorrFileName,
Copy link
Collaborator

Choose a reason for hiding this comment

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

What does this actually do? It reads another file that used a looser selection, or something?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

fakeTransferCorrFileName contains the correction needed for the prediction of the fakes with negative uT based on the one from high uT. It is needed because right now the low mT region for negative uT has no events because of kinematics, so the ABCD method cannot predict the background in the high mT region there. The correction is basically the ratio of the data yields between the two uT regions as obtained from the secondary vertices control region, subtracting the small prompt component. Then we also propagate uncertainties based on non closures between control and signal region, and data and QCD MC. It is essentially what Ruben presented during the workshop in Pisa.

systAxes=["width"],
systNameReplace=[["2p09053GeV", "Down"], ["2p09173GeV", "Up"]],
passToFakes=passSystToFakes,
widthVarTag = ""
Copy link
Collaborator

Choose a reason for hiding this comment

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

Maybe the width related stuff should go in rabbit_helpers since it's gotten so long

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yes, I can try to move there as many things as possible

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Done

labelsByAxis=["varTF", "downUpVar"],
)

## syst for transfer factor difference between data and QCD MC in control region
Copy link
Collaborator

Choose a reason for hiding this comment

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

Delete commented out stuff (here and other places)

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This particular item is one thing we are still finalising, but I guess I can remove it for now.
Other places with commented code were in some cases non added by this PR, so I am not sure what to do with them.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Done for now, it will be added back in the near future

actionArgs=dict(
altHistName="fakeCorr_closQCDsignal",
varIdxs=[],
correctionFile=f"{common.data_dir}/fakesWmass/{args.fakeTransferCorrFileName}.pkl.lz4",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Can this not be computed on the fly? Where does it come from?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Right now it cannot, because it makes use of the control region, so it is supposed to be produced in advance (the files will need to be stored in wremnants-data).
However, we are considering modifying the procedure so to derive the correction directly from the signal region using the QCD MC, rather than from data from the control region, to avoid depending too much on the latter. However, systematic uncertainties would still need to be produced using the control region where everything is validated, so they should be available as external inputs anyway.

@bendavid
Copy link
Collaborator

What actually needed to be changed to fit the W width? This was in principle already working.

@cippy
Copy link
Collaborator Author

cippy commented Mar 25, 2026

What actually needed to be changed to fit the W width? This was in principle already working.

I made the choice of the prefit variation more flexible, through options. Then I also added new options to perform the same studies as we did for mW, such as decorrelation by variable or fitting the width difference between charges.
There were also some minor things related to calling addSystematic, some arguments were propagated as if one was measuring the mass rather than the width.

@cippy
Copy link
Collaborator Author

cippy commented Mar 26, 2026

Last commit moved the definition of the mass and width systs from setupRabbit.py to rabbit_helpers.py, also fixing a couple of bugs/inconsistencies in their definition.

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.

4 participants