Dear All,
This MR refactors the FlavorTagInference GNN tooling by introducing a new loader interface and streamlining the decoration logic.
In particular, it:
Code changes
- New interface
- Implemented GNNDataLoader as an FTag-specific class, wrapping the existing ONNX feature–extraction logic.
- Type refactoring
- Migrated all decoration methods in IJetTagDecorator, MultifoldGNN, and MultifoldGNNTool from concrete xAOD::Jet/xAOD::BTagging overloads to a single xAOD::IParticle signature, removing support for bTagging objects.
- Removed B-tagging–specific interfaces and loader classes IBTagConditionalDecorator in GN series
- Disabled code paths
- BTagging-specific default decorations (decorateWithDefaults(xAOD::BTagging)) are no longer compiled.
- The legacy two-step decorate calls on xAOD::Jet and xAOD::BTagging have been removed in favour of a single call on IParticle.
Outputs changed
- All GNN-derived auxiliary variables (e.g. GN2 scores) continue to be produced, but are now attached directly to the jet object rather than split between Jet and BTagging containers depending on the environment (except triggers, which will be dealt with in the next MR).
- The set of decoration keys and default inputs is unchanged, so downstream consumers see the same names.
- Users should retrieve decorations from the jet instead of the nested BTagging object.
Works to be done in the next MRs
- Remove the
BTaggingCollection
options from theCfg
functions (for now they accept it but throw if the user specifies anything) - (maybe, if not done here) get rid of the
dynamic_cast
that you've introduced inDL2
, by refactoring theconstituentsLoader
to useIParticle
- rework the trigger monitoring code that accesses the jet though the b-tagging object. They should both be connected to the navigation graph so we can just go directly to the jet.
- remove DL1 from the menu and drop the
isAvaliable
checks fromTrigBjetHypo
: we only need to cut on the jet score, there should be nothing left onBTagging
to use - remove
trackLinkType
from the tagging algorithms, this was only needed forBTagging
- Remove
JetTagCalibCfg
fromBTagRecoSplitCfg
Please have a look at the detailed changes in the diff and let me know what you think!
Cheers, Dong
discussion on this MR can be found here: [FTAG SW] https://indico.cern.ch/event/1562877/contributions/6583643/attachments/3095884/5484544/Dong_FTAG_SW_01072025_v0.pdf [RECO] https://indico.cern.ch/event/1571318/contributions/6619880/subcontributions/563639/attachments/3106659/5509979/Dong_FTAGrant_250722_v2.pdf
Edited by Dan Guest