ATLAS Offline Software
Loading...
Searching...
No Matches
METNetSig.cxx
Go to the documentation of this file.
1
2
3/*
4 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5*/
6
7// Author: Alberto Plebani <alberto.plebani@cern.ch>, based on earlier implementation by M. Leigh and Bill Balunas <balunas@cern.ch>
9
10// STL Includes
11#include <math.h>
12
13// ASG includes
15
16// Tool headers
19
20// Event info and extra EDMs
22
23// ETMiss EDMs
27
28// Physics object EDMs
30
31namespace met {
32
35
39
40 // Decorator for passing the vector of inputs to the met object
45
47
48 METNetSig::METNetSig(const std::string& name):
49 AsgTool(name){}
50
52
54
56
57 StatusCode METNetSig::initialize() {
58 ATH_MSG_INFO( "Initializing " << name() << "..." );
59
60 if (m_netSigLocation.value().find("dummy") != std::string::npos ) {
61 ATH_MSG_WARNING( "You are loading a dummy/untrained METNetSig network! This should only be done when testing the code!\n"
62 " -- If you wish to load a trained network please specify a path to an onnx file using the 'NetworkLocation' argument.\n"
63 " -- A list of supported networks can be found at atlas-groupdata.web.cern.ch/atlas-groupdata/METUtilities/run2_13TeV/METNet/" );
64 }
65
66 ATH_CHECK(m_eventInfoKey.initialize());
67 ATH_CHECK(m_pvContainerKey.initialize());
68 ATH_CHECK(m_jetContainerKey.initialize());
69
70 // Tool initialisations
71 ATH_MSG_INFO("Initialising the METNet ONNX environment using the file " + m_netSigLocation);
72 m_metnetsighandler = std::make_unique<METNetSigHandler>( m_netSigLocation );
73 if( m_metnetsighandler->initialize() != 0){
74 ATH_MSG_ERROR("METNetSig model file not found!");
75 return StatusCode::FAILURE;
76 }
77
78 if(m_metmaker_loose.empty()){
79 asg::AsgToolConfig toolConfig("met::METMaker/metmaker_loose");
80 ATH_CHECK( toolConfig.setProperty("JetContainer", m_jetContainerKey.key()) );
81 ATH_CHECK( toolConfig.setProperty("DoPFlow", true) );
82 ATH_CHECK( toolConfig.setProperty("JetSelection", "Loose") );
84 }
85 ATH_CHECK( m_metmaker_loose.retrieve() );
86
87 if(m_metmaker_tight.empty()){
88 asg::AsgToolConfig toolConfig("met::METMaker/metmaker_tight");
89 ATH_CHECK( toolConfig.setProperty("JetContainer", m_jetContainerKey.key()) );
90 ATH_CHECK( toolConfig.setProperty("DoPFlow", true) );
91 ATH_CHECK( toolConfig.setProperty("JetSelection", "Tight") );
93 }
94 ATH_CHECK( m_metmaker_tight.retrieve() );
95
96 if(m_metmaker_tghtr.empty()){
97 asg::AsgToolConfig toolConfig("met::METMaker/metmaker_tghtr");
98 ATH_CHECK( toolConfig.setProperty("JetContainer", m_jetContainerKey.key()) );
99 ATH_CHECK( toolConfig.setProperty("DoPFlow", true) );
100 ATH_CHECK( toolConfig.setProperty("JetSelection", "Tighter") );
102 }
103 ATH_CHECK( m_metmaker_tghtr.retrieve() );
104
105 if(m_metmaker_tenac.empty()){
106 asg::AsgToolConfig toolConfig("met::METMaker/metmaker_tenac");
107 ATH_CHECK( toolConfig.setProperty("JetContainer", m_jetContainerKey.key()) );
108 ATH_CHECK( toolConfig.setProperty("DoPFlow", true) );
109 ATH_CHECK( toolConfig.setProperty("JetSelection", "Tenacious") );
111 }
112 ATH_CHECK( m_metmaker_tenac.retrieve() );
113
114 return StatusCode::SUCCESS;
115 }
116
118
119 StatusCode METNetSig::rebuildMET( const std::string& metKey,
122 const xAOD::IParticleContainer* collection,
125 {
126 // If the MET term already exists in the container, skip rebuilding to avoid duplicates
127 if ( (*metCont)[metKey] != nullptr ) {
128 ATH_MSG_DEBUG("MET term '" << metKey << "' already exists in the container — skipping rebuild in METNetSig.");
129 return StatusCode::SUCCESS;
130 }
131
132 return m_metmaker_tight->rebuildMET( metKey, metType, metCont, collection, helper, objScale );
133 }
134
135 StatusCode METNetSig::rebuildJetMET( const std::string&,
136 const std::string& softClusKey,
137 const std::string& softTrkKey,
139 const xAOD::JetContainer* jets,
140 const xAOD::MissingETContainer* metCoreCont,
142 bool ) const {
143
144 // Retrieving the event information (Needed for METSig, so we do it early)
146
147 float avgmu = ei->averageInteractionsPerCrossing();
148 float actmu = ei->actualInteractionsPerCrossing();
149
151
152 // Creating the new containers for all the WPs
153 auto metCont_loose = std::make_unique<xAOD::MissingETContainer>();
154 auto metCont_looseAux = std::make_unique<xAOD::MissingETAuxContainer>();
155 metCont_loose->setStore( metCont_looseAux.get() );
156
157 auto metCont_tight = std::make_unique<xAOD::MissingETContainer>();
158 auto metCont_tightAux = std::make_unique<xAOD::MissingETAuxContainer>();
159 metCont_tight->setStore( metCont_tightAux.get() );
160
161 auto metCont_tghtr = std::make_unique<xAOD::MissingETContainer>();
162 auto metCont_tghtrAux = std::make_unique<xAOD::MissingETAuxContainer>();
163 metCont_tghtr->setStore( metCont_tghtrAux.get() );
164
165 auto metCont_tenac = std::make_unique<xAOD::MissingETContainer>();
166 auto metCont_tenacAux = std::make_unique<xAOD::MissingETAuxContainer>();
167 metCont_tenac->setStore( metCont_tenacAux.get() );
168
169 // Copying the contents of the original container into each WP container
170 // Avoids redundant calculation of identical terms.
171 ATH_MSG_VERBOSE( "Making copies of base MET container" );
172 ATH_CHECK( copyMETContainer( metCont_loose.get(), metCont ) );
173 ATH_CHECK( copyMETContainer( metCont_tight.get(), metCont ) );
174 ATH_CHECK( copyMETContainer( metCont_tghtr.get(), metCont ) );
175 ATH_CHECK( copyMETContainer( metCont_tenac.get(), metCont ) );
176
177 // Selected objects may differ between WPs due to jets, muon-in-jet treatment, etc. Need unique helpers, so copy current state.
178 xAOD::MissingETAssociationHelper helper_loose(helper);
179 xAOD::MissingETAssociationHelper helper_tight(helper);
180 xAOD::MissingETAssociationHelper helper_tghtr(helper);
181 xAOD::MissingETAssociationHelper helper_tenac(helper);
182
183 // Building the jet and soft terms for each WP
184 ATH_MSG_VERBOSE( "Building jet and soft terms for each MET WP" );
185 ATH_CHECK( m_metmaker_loose->rebuildJetMET( "RefJet", softClusKey, softTrkKey, metCont_loose.get(), jets, metCoreCont, helper_loose, true ) );
186 ATH_CHECK( m_metmaker_tight->rebuildJetMET( "RefJet", softClusKey, softTrkKey, metCont_tight.get(), jets, metCoreCont, helper_tight, true ) );
187 ATH_CHECK( m_metmaker_tghtr->rebuildJetMET( "RefJet", softClusKey, softTrkKey, metCont_tghtr.get(), jets, metCoreCont, helper_tghtr, true ) );
188 ATH_CHECK( m_metmaker_tenac->rebuildJetMET( "RefJet", softClusKey, softTrkKey, metCont_tenac.get(), jets, metCoreCont, helper_tenac, true ) );
189
190 // Building and adding the "Final" MET object to each WP container
191 ATH_MSG_VERBOSE( "Building the Final MET object for each MET WP" );
196 // CST uses the LCTopo source bitmask even if the clusters are actually at EM scale
197 ATH_CHECK( met::buildMETSum( "FinalClus", metCont_loose.get(), static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Signal::LCTopo)) );
198 ATH_CHECK( met::buildMETSum( "FinalClus", metCont_tight.get(), static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Signal::LCTopo)) );
199 ATH_CHECK( met::buildMETSum( "FinalClus", metCont_tghtr.get(), static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Signal::LCTopo)) );
200 ATH_CHECK( met::buildMETSum( "FinalClus", metCont_tenac.get(), static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Signal::LCTopo)) );
201
203
204 // Initialise two vectors: One for holding the network input values and another for the input names
205 std::vector<std::string> input_names;
206 std::vector<float> input_values;
207
208 ATH_CHECK( addMETFinal( "Loose", metCont_loose.get(), input_names, input_values ) );
209
210 // Tight gets all its hard terms included as well (same as all th others, only needed once)
211 ATH_CHECK( addMETTerm( "Tight", *(metCont_tight->find(MissingETBase::Source::electron())), input_names, input_values ) );
212 ATH_CHECK( addMETTerm( "Tight", *(metCont_tight->find(MissingETBase::Source::photon())), input_names, input_values ) );
213 ATH_CHECK( addMETTerm( "Tight", *(metCont_tight->find(MissingETBase::Source::tau())), input_names, input_values ) );
214 ATH_CHECK( addMETTerm( "Tight", *(metCont_tight->find(MissingETBase::Source::muon())), input_names, input_values ) );
215 ATH_CHECK( addMETFinal( "Tight", metCont_tight.get(), input_names, input_values ) );
216
217 ATH_CHECK( addMETFinal( "Tighter", metCont_tghtr.get(), input_names, input_values ) );
218 ATH_CHECK( addMETFinal( "Tenacious", metCont_tenac.get(), input_names, input_values ) );
219
220 // Pileup information and tracking information (using the user provided primary vertex container name)
222 if(!pvtxs.isValid()){
223 ATH_MSG_ERROR("Could not retrieve primary vertex container!");
224 return StatusCode::FAILURE;
225 }
226 int NVx_2Tracks = 0;
227 int NVx_4Tracks = 0;
228 int PV_NTracks = 0;
229 int n_tracks = 0;
230 for ( const xAOD::Vertex* vx : *pvtxs ) {
231 n_tracks = vx->nTrackParticles();
232 if ( n_tracks>=2 ) NVx_2Tracks++;
233 if ( n_tracks>=4 ) NVx_4Tracks++;
234 if ( vx->vertexType() == xAOD::VxType::PriVtx ) PV_NTracks = n_tracks;
235 }
236 ATH_CHECK( addInputValue( "ActualMu", actmu, input_names, input_values ) );
237 ATH_CHECK( addInputValue( "AverageMu", avgmu, input_names, input_values ) );
238 ATH_CHECK( addInputValue( "NPV_2Tracks", NVx_2Tracks, input_names, input_values ) );
239 ATH_CHECK( addInputValue( "NPV_4Tracks", NVx_4Tracks, input_names, input_values ) );
240 ATH_CHECK( addInputValue( "PV_NTracks", PV_NTracks, input_names, input_values ) );
241
242 // Creating a dummy MET object on the output container to carry the NN features and decorate it with the two vectors
243 ATH_MSG_VERBOSE( "Saving network inputs to base MET container" );
244 xAOD::MissingET* net_inpts = nullptr;
245 if ( (*metCont)["NetInputDummy"] != NULL ) {
246 // If NetInputDummy already exists, erase it from the container so we recreate a clean object.
247 ATH_MSG_DEBUG("NetInputDummy already present in container — erasing and recreating.");
248 auto it = metCont->find("NetInputDummy");
249 if ( it != metCont->end() ) metCont->erase(it);
250 }
251 ATH_CHECK( fillMET( net_inpts, metCont, "NetInputDummy", static_cast<MissingETBase::Types::bitmask_t>(MissingETBase::Source::Type::UnknownType) ) );
252 dec_inputnames( *(*metCont)["NetInputDummy"] ) = input_names;
253 dec_inputvalues( *(*metCont)["NetInputDummy"] ) = input_values;
254 return StatusCode::SUCCESS;
255 }
256
258 float& met_x, float& met_y, float& sigma_x, float& sigma_y) const
259 {
260
261 // First we check that the container has the correct decorations
262 ATH_MSG_VERBOSE( "Checking MET container for network inputs" );
263 if ( (*metCont)["NetInputDummy"] == NULL ) {
264 ATH_MSG_ERROR( "Could not find the NetInputDummy MET object in the container. Did you run rebuildJetMET?" );
265 return StatusCode::FAILURE;
266 }
267
268
269 // Pull out the vector from the met containter
270 std::vector<float> tmp_inputs = acc_inputvalues(*(*metCont)["NetInputDummy"]);
271 ATH_MSG_VERBOSE( "Loaded " << tmp_inputs.size() << " network inputs" );
272
273 // Check that the list of inputs matches the network size
274 if ( (int)tmp_inputs.size() != m_metnetsighandler->getReqSize() ) {
275 ATH_MSG_ERROR( "The MET container provided " << tmp_inputs.size()
276 << " elements, but the ONNX network needs exactly " << m_metnetsighandler->getReqSize() << "!" );
277 return StatusCode::FAILURE;
278 }
279
280 // Passing the inputs through the network
281 std::vector<float> net_met = m_metnetsighandler->predict( tmp_inputs );
282
283 // // Adding the network output to the Final Met container
284 // xAOD::MissingET* metFinal = nullptr;
285 // ATH_CHECK( fillMET( metFinal, metCont, totalName, MissingETBase::Source::total() ) );
286
287 met_x = net_met[0];
288 met_y = net_met[1];
289 sigma_x = net_met[2];
290 sigma_y = net_met[3];
291
292 ATH_MSG_DEBUG( "Writing the Final Network MET: (" << met_x << ", " << met_y << ", " << sigma_x << ", " << sigma_y << ")" );
293
294 return StatusCode::SUCCESS;
295 }
296
298
299 StatusCode METNetSig::addMETFinal( const std::string& WP_name,
300 xAOD::MissingETContainer* met_container,
301 std::vector<std::string>& name_vec,
302 std::vector<float>& val_vec ) const
303 {
304 // Add the jet, soft, and final terms to the vector
305 ATH_CHECK( addMETTerm( WP_name, (*met_container)["RefJet"], name_vec, val_vec ) );
306 ATH_CHECK( addMETTerm( WP_name, (*met_container)["PVSoftTrk"], name_vec, val_vec ) );
307 ATH_CHECK( addMETTerm( WP_name, (*met_container)["FinalTrk"], name_vec, val_vec ) );
308 ATH_CHECK( addMETTerm( WP_name, (*met_container)["SoftClus"], name_vec, val_vec ) );
309 ATH_CHECK( addMETTerm( WP_name, (*met_container)["FinalClus"], name_vec, val_vec ) );
310 return StatusCode::SUCCESS;
311 }
312
313 StatusCode METNetSig::addMETTerm( const std::string &WP_name,
315 std::vector<std::string>& name_vec,
316 std::vector<float>& val_vec ) const
317 {
318 // Build the name of the term from the WP and the Object type from the container
319 std::string tname = WP_name + "_" + acc_name(*met);
320
321 // Add the MET components and SumET
322 ATH_CHECK( addInputValue( tname+"_mpx", met->mpx()/1000., name_vec, val_vec ) );
323 ATH_CHECK( addInputValue( tname+"_mpy", met->mpy()/1000., name_vec, val_vec ) );
324 ATH_CHECK( addInputValue( tname+"_sumet", met->sumet()/1000., name_vec, val_vec ) );
325
326 return StatusCode::SUCCESS;
327 }
328
329 StatusCode METNetSig::addInputValue( const std::string& var_name,
330 float value,
331 std::vector<std::string>& name_vec,
332 std::vector<float>& val_vec ) const
333 {
334 // This is the only place we push_back to either vector
335 // Ensuring that they are always consistant with each other!!
336 ATH_MSG_VERBOSE( "Adding variable: " << var_name << " = " << value << " to the network input vector" );
337 name_vec.push_back( var_name );
338 val_vec.push_back( value );
339 return StatusCode::SUCCESS;
340 }
341
343 const xAOD::MissingETContainer* old_container) const
344 {
345
346 // Initiase variables used in the loop
347 std::string name;
348 xAOD::MissingET* blank_met;
350
351 for ( const auto& old_met : *old_container ) {
352 blank_met = nullptr; // Resetting the null pointer
353 name = acc_name(*old_met); // Getting the name from the original container
354 source = acc_source(*old_met); // Getting the particle type from the original container
355 ATH_CHECK( fillMET( blank_met, new_container, name, source ) ); // Initialising the blank met with the new name in the new container
356 *(*new_container)[name] = *(*old_container)[name]; // Copying over the contents from one container to another
357
358 // Also need to copy the original object links
359 dec_constitObjLinks(*(*new_container)[name]) = acc_constitObjLinks(*(*old_container)[name]);
360 }
361
362 return StatusCode::SUCCESS;
363 }
364
366
371 {
372 ATH_MSG_ERROR( "METNetSig has not overloaded this version of rebuildMET from IMETMaker!\n"
373 "Please only use this method:\n"
374 "StatusCode METMaker::rebuildMET("
375 "const std::string& metKey,\n"
376 "xAOD::Type::ObjectType metType,\n"
377 "xAOD::MissingETContainer* metCont,\n"
378 "const xAOD::IParticleContainer* collection,\n"
379 "xAOD::MissingETAssociationHelper& helper,\n"
380 "MissingETBase::UsageHandler::Policy objScale\n"
381 ")" );
382 return StatusCode::FAILURE;
383 }
384
389 bool,
391
392 {
393 ATH_MSG_ERROR( "METNetSig has not overloaded this version of rebuildMET from IMETMaker!\n"
394 "Please only use this method:\n"
395 "StatusCode METMaker::rebuildMET("
396 "const std::string& metKey,\n"
397 "xAOD::Type::ObjectType metType,\n"
398 "xAOD::MissingETContainer* metCont,\n"
399 "const xAOD::IParticleContainer* collection,\n"
400 "xAOD::MissingETAssociationHelper& helper,\n"
401 "MissingETBase::UsageHandler::Policy objScale\n"
402 ")" );
403 return StatusCode::FAILURE;
404 }
405
406 StatusCode METNetSig::rebuildJetMET(const std::string& metJetKey,
407 const std::string& /*metSoftKey*/,
409 const xAOD::JetContainer* jets,
410 const xAOD::MissingETContainer* metCoreCont,
412 bool doJetJVT) const
413 {
414 return rebuildJetMET(metJetKey, "SoftClus", "PVSoftTrk", metCont, jets, metCoreCont, helper, doJetJVT);
415 }
416
418 const xAOD::JetContainer*,
421 const xAOD::MissingET*,
423 const xAOD::MissingET*,
424 bool,
425 bool,
426 std::vector<const xAOD::IParticle*>* ) const
427 {
428 ATH_MSG_ERROR( "METNetSig has not overloaded this version of rebuildJetMET from IMETMaker!\n"
429 "Please use the method with the following arguments:\n"
430 "StatusCode METNetSig::rebuildJetMET(\n"
431 "const std::string& metJetKey,\n"
432 "const std::string& softClusKey,\n"
433 "const std::string& softTrkKey,\n"
434 "xAOD::MissingETContainer* metCont,\n"
435 "const xAOD::JetContainer* jets,\n"
436 "const xAOD::MissingETContainer* metCoreCont,\n"
437 "xAOD::MissingETAssociationHelper& helper,\n"
438 "bool doJetJVT\n"
439 ")" );
440 return StatusCode::FAILURE;
441 }
442
443 StatusCode METNetSig::rebuildTrackMET( const std::string&,
444 const std::string&,
446 const xAOD::JetContainer*,
449 bool ) const
450 {
451 ATH_MSG_ERROR( "Please dont use the method METNetSig::rebuildTrackMET!\n"
452 "It has no use in METNetSig and is a holdover from it's inheritance from IMETMaker." );
453 return StatusCode::FAILURE;
454 }
455
457 const xAOD::JetContainer*,
460 const xAOD::MissingET*,
461 bool ) const
462 {
463 ATH_MSG_ERROR( "METNetSig does not support Track MET!" );
464 return StatusCode::FAILURE;
465 }
466
470 {
471 ATH_MSG_ERROR( "METNetSig does not support markInvisible!");
472 return StatusCode::FAILURE;
473 }
474
475}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Handle class for reading from StoreGate.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
iterator erase(iterator position)
Remove element at a given position.
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:569
SG::Decorator< T, ALLOC > Decorator
Definition AuxElement.h:575
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode setProperty(const std::string &name, const T &value)
set the given property
an object that can create a AsgTool
::StatusCode makePrivateTool(ToolHandle< T > &toolHandle) const
make a private tool with the given configuration
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58
Gaudi::Property< std::string > m_netSigLocation
Definition METNetSig.h:147
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainerKey
Definition METNetSig.h:150
ToolHandle< IMETMaker > m_metmaker_loose
Definition METNetSig.h:156
StatusCode addMETTerm(const std::string &WP_name, xAOD::MissingET *met, std::vector< std::string > &name_vec, std::vector< float > &val_vec) const
ToolHandle< IMETMaker > m_metmaker_tenac
Definition METNetSig.h:159
SG::ReadHandleKey< xAOD::VertexContainer > m_pvContainerKey
Definition METNetSig.h:149
virtual StatusCode initialize() override
Athena algtool's initialize.
Definition METNetSig.cxx:57
StatusCode copyMETContainer(xAOD::MissingETContainer *new_container, const xAOD::MissingETContainer *old_container) const
ToolHandle< IMETMaker > m_metmaker_tight
Definition METNetSig.h:157
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition METNetSig.h:148
virtual StatusCode rebuildTrackMET(const std::string &metJetKey, const std::string &softTrkKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT) const override
Unsuported method inherited from METMaker. Please do not use.
virtual StatusCode rebuildJetMET(const std::string &metJetKey, const std::string &softTrkKey, xAOD::MissingETContainer *metCont, const xAOD::JetContainer *jets, const xAOD::MissingETContainer *metCoreCont, xAOD::MissingETAssociationHelper &helper, bool doJetJVT=false) const override
Adds multiple jet definitions to seperate MET containers and creates the collection of input features...
virtual StatusCode evaluateNNMETSig(xAOD::MissingETContainer *metCont, float &met_x, float &met_y, float &sigma_x, float &sigma_y) const
Uses ONNX runtime to propagate the input features created in rebuildJetMET through the trained networ...
std::unique_ptr< METNetSigHandler > m_metnetsighandler
Definition METNetSig.h:155
virtual ~METNetSig() override
Destructor.
Definition METNetSig.cxx:53
virtual StatusCode markInvisible(const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, xAOD::MissingETContainer *metCont) const override
Unsuported method inherited from METMaker. Please do not use.
StatusCode addMETFinal(const std::string &WP_name, xAOD::MissingETContainer *met_container, std::vector< std::string > &name_vec, std::vector< float > &val_vec) const
virtual StatusCode rebuildMET(const std::string &metKey, xAOD::Type::ObjectType metType, xAOD::MissingETContainer *metCont, const xAOD::IParticleContainer *collection, xAOD::MissingETAssociationHelper &helper, MissingETBase::UsageHandler::Policy objScale) const override
Adds a collection of objects to the core MET container, must be done for photons, elections and muons...
ToolHandle< IMETMaker > m_metmaker_tghtr
Definition METNetSig.h:158
StatusCode addInputValue(const std::string &var_name, float value, std::vector< std::string > &name_vec, std::vector< float > &val_vec) const
const_iterator find(const std::string &name) const
Find non-modifiable MET object by name.
uint64_t bitmask_t
Type for status word bit mask.
ElementLink< xAOD::IParticleContainer > iplink_t
static const SG::AuxElement::ConstAccessor< MissingETBase::Types::bitmask_t > acc_source("source")
StatusCode buildMETSum(const std::string &totalName, xAOD::MissingETContainer *metCont)
static const SG::AuxElement::ConstAccessor< std::vector< float > > acc_inputvalues("input_values")
static const SG::AuxElement::ConstAccessor< std::string > acc_name("name")
static const SG::AuxElement::Decorator< std::vector< std::string > > dec_inputnames("input_names")
static const SG::AuxElement::Accessor< std::vector< iplink_t > > dec_constitObjLinks("ConstitObjectLinks")
static const SG::AuxElement::Decorator< std::vector< float > > dec_inputvalues("input_values")
static const SG::AuxElement::ConstAccessor< std::vector< iplink_t > > acc_constitObjLinks("ConstitObjectLinks")
static const SG::AuxElement::ConstAccessor< std::vector< std::string > > acc_inputnames("input_names")
StatusCode fillMET(xAOD::MissingET *&met, xAOD::MissingETContainer *metCont, const std::string &metKey, const MissingETBase::Types::bitmask_t metSource)
ObjectType
Type of objects that have a representation in the xAOD EDM.
Definition ObjectType.h:32
@ PriVtx
Primary vertex.
MissingET_v1 MissingET
Version control by type defintion.
Vertex_v1 Vertex
Define the latest version of the vertex class.
JetContainer_v1 JetContainer
Definition of the current "jet container version".
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
static Types::bitmask_t muon(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed muons.
static Types::bitmask_t tau(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed tau leptons.
static Types::bitmask_t electron(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed electrons.
static Types::bitmask_t photon(Region reg=Region::FullAcceptance)
Standard MET term from reconstructed photons.
@ LCTopo
Indicator for MET contribution from TopoClusters with LCW calibration applied.
@ Track
Indicator for MET contribution from reconstructed charged particle tracks.