38 {
40
41 const EventContext& ctx = Gaudi::Hive::currentContext();
42
43 SG::ReadHandle<xAOD::JetContainer> jetContHandle(
m_jetContKey, ctx);
44 if( !jetContHandle.isValid() ) {
46 return StatusCode::FAILURE;
47 }
48
49
50
51 std::map<const xAOD::Jet*, ElementLink<xAOD::JetContainer> > jetLinkMap;
52 for( const xAOD::IParticle *j : *jetContHandle ) {
55 return StatusCode::FAILURE;
56 }
58 ElementLink<xAOD::JetContainer> link(*jetContHandle,
j->index());
59 jetLinkMap.try_emplace(
61 link
62 );
63 }
64
65
67 SG::ReadHandle<xAOD::PhotonContainer> photonContHandle(
m_photonContKey, ctx);
69
70 SG::ReadHandle<xAOD::ElectronContainer> electronContHandle(
m_electronContKey, ctx);
72
73 SG::ReadHandle<xAOD::MuonContainer> muonContHandle(
m_muonContKey, ctx);
75
76 SG::ReadHandle<xAOD::TauJetContainer> tauContHandle(
m_tauContKey, ctx);
78
79
80
81 SG::ReadHandle<xAOD::MissingETAssociationMap> inputMapHandle(
m_inputMapKey, ctx);
82 if( !inputMapHandle.isValid() ) {
84 return StatusCode::FAILURE;
85 }
86
89 std::make_unique<xAOD::MissingETAssociationMap>(),
90 std::make_unique<xAOD::MissingETAuxAssociationMap>()
91 ));
93
94 const ElementLink<xAOD::IParticleContainer> invalidLink;
96
98
99 if( !assoc->isMisc() ) {
100
101 std::map<const xAOD::Jet*, ElementLink<xAOD::JetContainer> >::const_iterator jet_it = jetLinkMap.find(assoc->refJet());
102 if( jet_it != jetLinkMap.end() ) {
103
104 assoc->setJetLink(jet_it->second);
105
106
108 for( const ElementLink<xAOD::IParticleContainer> &link : assoc->objectLinks() ) {
109 if( !link.isValid() ) {
110 objectLinks.push_back(invalidLink);
111 continue;
112 }
113
114 linkMap_t::const_iterator obj_it = objectLinkMap.find(*link);
115 if( obj_it != objectLinkMap.end() ) {
116 objectLinks.emplace_back(obj_it->second);
117 } else {
118
119
120 objectLinks.push_back(invalidLink);
121 }
122 }
123 assoc->setObjectLinks(objectLinks);
124
125 } else {
126
128 return StatusCode::FAILURE;
129 }
130 } else {
131
133 for( const ElementLink<xAOD::IParticleContainer> &link : assoc->objectLinks() ) {
134 if( !link.isValid() ) {
135 miscObjectLinks.push_back(invalidLink);
136 continue;
137 }
138
139 linkMap_t::const_iterator obj_it = objectLinkMap.find(*link);
140 if( obj_it != objectLinkMap.end() ) {
141 miscObjectLinks.emplace_back(obj_it->second);
142 } else {
143 miscObjectLinks.push_back(invalidLink);
144 }
145 }
146 assoc->setObjectLinks(miscObjectLinks);
147 }
148 }
149
150
151 SG::ReadHandle<xAOD::MissingETContainer> inputCoreHandle(
m_inputCoreKey, ctx);
152 if( !inputCoreHandle.isValid() ) {
154 return StatusCode::FAILURE;
155 }
156
159 std::make_unique<xAOD::MissingETContainer>(),
160 std::make_unique<xAOD::MissingETAuxContainer>()
161 ));
163
166 }
167
168 return StatusCode::SUCCESS;
169 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
const SG::AuxElement::ConstAccessor< ElementLink< xAOD::IParticleContainer > > m_accOriginalObject
SG::WriteHandleKey< xAOD::MissingETAssociationMap > m_outputMapKey
SG::ReadHandleKey< xAOD::MissingETContainer > m_inputCoreKey
SG::ReadHandleKey< xAOD::JetContainer > m_jetContKey
SG::WriteHandleKey< xAOD::MissingETContainer > m_outputCoreKey
StatusCode fillLinkMap(linkMap_t &map, handle_t &handle)
SG::ReadHandleKey< xAOD::TauJetContainer > m_tauContKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronContKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContKey
std::map< const xAOD::IParticle *, ElementLink< xAOD::IParticleContainer > > linkMap_t
SG::ReadHandleKey< xAOD::MissingETAssociationMap > m_inputMapKey
SG::ReadHandleKey< xAOD::PhotonContainer > m_photonContKey
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::vector< objlink_t > objlink_vector_t
Vector of object links type.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
Jet_v1 Jet
Definition of the current "jet version".
MissingETAssociation_v1 MissingETAssociation
Version control by type definition.
MissingET_v1 MissingET
Version control by type defintion.