Support FlowElements in JetReconstruction
The FlowElement
(FE) EDM has been introduced to represent PFO/TCC/UFO objects, and PFO reconstruction is now capable of producing its output in FE format (TCC/UFOs in progress at the time of writing). This takes care of the next step, which is to add support for FEs in jet reconstruction itself. This affects tools which look at the constituents of jets, so most of the changes are related to jet modifier and constituent modifier tools.
This has also necessitated some more development of utilities for handling FlowElements, so I also introduce the FEHelpers
collection of helper functions. The key difference is that all attribute handling lives outside of the EDM itself, allowing us more flexibility.
Quite a few other items came up during this development, so a summary of the changes is here:
JetMomentTools, JetRecTools, JetUtils
- Added support for FlowElements to all tools which depend on the jet constituent type.
- Only FlowElement representing PFOs are universally supported at the moment. We'll need a bit of further development to handle TCCs/UFOs when the time comes for that.
- Fixed a bug in JetPtAssociationTool where it was trying to match the input jet collection to itself. This is the kind of thing it would be great to have ART tests for!
JetRec
- Added a new job config flag jetFlags.usePFlowFE, which needs to be set to
True
for running FE-based jet reco. It is set toFalse
by default. - Added FlowElement support to
PseudoJetGetter
- Added support for a FlowElement-based EMPFlow jet collection
eFlowRec
- Updated the naming scheme for FlowElement moments to harmonize them with the CaloCluster scheme.
- FlowElement reconstruction now correctly sets the
signalType
for the FEs it creates. - Fixed a bug where FlowElement moments weren't being saved correctly to the output collections.
xAODPFlow
- Added a
setP4(..)
to the FlowElement EDM which takes in aFourMom_t
instead of just the four individual components.
PFlowUtils
- Added
FEHelpers
namespace, containing utility functions for FlowElements such as computing corrected 4-vectors and accessing cluster moments.
DerivationFramework
- Added support for a "EMPFlowFE" chain in arbitrary derivations. This includes an addition to smart slimming lists, etc. This can be removed once we fully replace the nominal PFO collections and simply make "EMPFlow" the FlowElement-based one. But for now, we want to have both in parallel.
ThinningUtils
- Added FlowElement support to
ThinNegativeEnergyNeutralPFOsAlg
I've tested this full set of changes by running the full reco chain from RDO->AOD to get updated FlowElements, and the jet reconstruction itself in AOD->DAOD. I was able to produce a modified DAOD_PHYS with these new jets using the additions to DerivationFramework, and verified that they do correctly reproduce the existing PFlow jets. Constituent-level variables appear identical; some differences in calibrated quantities are observed, which we suspect are from the calibration itself differing between the two collections. These tests have been fairly limited in scope; we'll of course want to do a more complete validation after this is in.
After this MR, we'll need another doing the same thing for MET. That should be easier with the FE helper functions already in place. I also note that the config support added here uses the "old" jet config, which will soon be superseded. Putting the FlowElement support into the new config remains to be done, but that will be purely python-level and so isn't necessary before the feature freeze.
Tagging @delsart, @khoo, @mhodgkin, @sschramm for any input they might have.
Merge request reports
Activity
- Resolved by William Keaton Balunas
Hi Bill,
Thanks, that's a nice piece of work. I think @loch would also be interested in this MR. Some general comments regarding the FE helpers :
template<class T> bool getAttribute(const xAOD::FlowElement& fe, FEAttribute att, T& value); template<class T> void setAttribute(const xAOD::FlowElement& fe, FEAttribute att, const T& value);
I' m not convinced they are necessary. I think the nice thing about having disconnected the helpers and the EDM is we can augment them on a as-needed basis and only if necessary. With that in mind I would keep the list of helpers as minimal as possible : for generic attributes, let's not have function, but instead rely on the framework's accessor or decorators (and on Read/WRiteDecorHandle if necessary). However, we can write helper functions when we want to access info which is not a simple attribute, typically when it depends on the underlying type. You have a good example of this with the
p4EM(FE&)
function.I'll add other comments directly in the code.
Cheers,
P-A
- Resolved by William Keaton Balunas
- Resolved by William Keaton Balunas
- Resolved by William Keaton Balunas
added 1077 commits
-
fb47e75d...eed7913d - 1073 commits from branch
atlas:master
- b2960279 - Support FEs in JetConstitModSeq, fix typos
- 4f012354 - Rework FE attribute handling, fix errors
- 6b3ac623 - Merge branch 'master' of https://gitlab.cern.ch:8443/atlas/athena into feJets-201001
- 3af80163 - More FlowElement support in jet reconstruction
Toggle commit list-
fb47e75d...eed7913d - 1073 commits from branch
OK, I think all the C++ changes needed for this MR should be in, so it's ready for everyone to take a proper look at. I'm going to wait to remove the WIP tag until I actually test it (will do very soon), but unless there are bugs it should be good to go.
One thing to point out for @delsart - For
JetConstituentModSequence
I've assumed for now that FlowElements will always be input in a separate neutral and charged container using the same scheme we have for PFOs now. We might need to generalize that in the future for other types of FE (I left a TODO comment in the code there), but I'm just trying to keep the scope to PFlow for this MR.added 1 commit
- 20a9d648 - Implement standard reco for FlowElement PF jets
added 1 commit
- 4d9191f5 - Fix JetPtAssocTool, add deriv support for FE jets
This merge request affects 11 packages:
- Event/xAOD/xAODJet
- Event/xAOD/xAODPFlow
- PhysicsAnalysis/AnalysisCommon/ThinningUtils
- PhysicsAnalysis/DerivationFramework/DerivationFrameworkCore
- PhysicsAnalysis/DerivationFramework/DerivationFrameworkJetEtMiss
- Reconstruction/Jet/JetMomentTools
- Reconstruction/Jet/JetRec
- Reconstruction/Jet/JetRecTools
- Reconstruction/Jet/JetUtils
- Reconstruction/PFlow/PFlowUtils
- Reconstruction/eflowRec
Adding @goetz ,@akraszna ,@mhodgkin ,@jmellent ,@jveatch ,@nelsonc ,@mleblanc ,@ispokhar as watchers
added Analysis Derivation EDM JetEtmiss Reconstruction master review-pending-level-1 labels
CI Result SUCCESS (hash d6b1daec)Athena AthSimulation AthGeneration AnalysisBase externals cmake make required tests optional tests Full details available on this CI monitor view
Athena: number of compilation errors 0, warnings 0
AthSimulation: number of compilation errors 0, warnings 0
AthGeneration: number of compilation errors 0, warnings 0
AnalysisBase: number of compilation errors 0, warnings 0
For experts only: Jenkins output [CI-MERGE-REQUEST-CC7 22316]added review-approved label and removed review-pending-level-1 label
mentioned in commit e497d24a
added sweep:ignore label
mentioned in merge request !38816 (merged)
mentioned in merge request !40119 (merged)