Update Jet interfaces to operate at container-level
Short summary:
- Removed
ISingleJetModifier
. - Added
IJetDecorator
. -
IJetModifier
(and the newIJetDecorator
) functions now returnStatusCode
instead ofint
. -
IJetModifier
has been simplified,modify(...)
is now its only function. - Jet calibration tools no longer use the
CP::CorrectionTool
interface. - Jet calibration tools now only calibrate containers of jets rather than individual jets. The calibrated-copy functions have been removed as part of this.
Long explanation:
With the transition to AthenaMT, xAOD objects (in this case, jets) and their decorations will need to be accessed at container-level only using DataHandles and DecorHandles in order to maintain thread-safety. With this in mind, we're removing the ISingleJetModifier
interface for operating on individual jets.
We're making the same change in jet calibration tools: they'll now only operate on containers rather than single jets. The interface IJetCalibrationTool
has been changed accordingly, now the only function for calibration is modify(xAOD::JetContainer&)
(now inherited from IJetModifier
) or its alias applyCalibration(xAOD::JetContainer&)
.
In addition, due to the new event data access in AthenaMT, we'll want to run many JetModifiers (which don't actually modify the jet itself but only add new decorations) on const
jets. To make this possible we're introducing a new interface IJetDecorator
which is the same as IJetModifier
but operates on const
jets. This also inherits from IJetModifier
, simply invoking the const
version (called decorate()
) if modify()
is called through IJetModifier
. Many of the classes which currently implement IJetModifier
will be migrated to IJetDecorator
in a later MR. This follow-up MR will also remove JetModifierBase
.
Tagging @khoo, @loch, @delsart, @sschramm from the jet side and @akraszna, @krumnack (as the author of CorrectionTool
) from the ASG side.
Edit: This MR originally changed the CP::CorrectionTool
interface and had jet calibration continue to use it. We decided to instead just drop the use of this interface following the discussion here.