ATLAS Offline Software
METAssociator.cxx
Go to the documentation of this file.
1 
3 /*
4  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 // METAssociator.cxx
8 // Implementation for class METAssociator
9 //
10 // This is the base class for tools that construct MET terms
11 // from other object collections.
12 //
13 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
14 //
15 // Author: P Loch, S Resconi, TJ Khoo, AS Mete
17 
18 // METReconstruction includes
25 
26 // Tracking EDM
27 #include "xAODTracking/Vertex.h"
29 
30 // Track errors
32 
33 // Tool interface headers
37 
38 // For DeltaR
40 
41 #include "GaudiKernel/SystemOfUnits.h"
42 
43 #include "TRandom3.h"
44 
45 
46 namespace met {
47 
48  using namespace xAOD;
49 
50  // UE correction for each lepton
51  const static SG::Decorator<float> dec_UEcorr("UEcorr_Pt");
52 
53 
55  // Public methods:
57 
58  // Constructors
60  METAssociator::METAssociator(const std::string& name) :
61  AsgTool(name),
62  m_trkseltool(this,""),
63  m_trkIsolationTool(this,""),
64  m_caloIsolationTool(this,"")
65  {
66  ATH_MSG_INFO("METAssoc constructor");
67  declareProperty( "UseModifiedClus", m_useModifiedClus = false );
68  declareProperty( "UseTracks", m_useTracks = true );
69  declareProperty( "PFlow", m_pflow = false );
70  declareProperty( "UseRapidity", m_useRapidity = false );
71  declareProperty( "TrackSelectorTool", m_trkseltool );
72  declareProperty( "TrackIsolationTool", m_trkIsolationTool );
73  declareProperty( "CaloIsolationTool", m_caloIsolationTool );
74  declareProperty( "IgnoreJetConst", m_skipconst = false );
75  declareProperty( "ForwardColl", m_forcoll = "" );
76  declareProperty( "ForwardDef", m_foreta = 2.5 );
77  declareProperty( "CentralTrackPtThr", m_cenTrackPtThr = 30e+3 );
78  declareProperty( "ForwardTrackPtThr", m_forTrackPtThr = 30e+3 );
79  declareProperty( "CleanCPFO", m_cleanChargedPFO = true );
80  declareProperty( "UsePFOLinks", m_usePFOLinks = false );
81  declareProperty( "UseFELinks", m_useFELinks = false );
82  declareProperty( "NeutralPFOLinksKey", m_neutralPFOLinksKey = "neutralpfoLinks");
83  declareProperty( "ChargedPFOLinksKey", m_chargedPFOLinksKey = "chargedpfoLinks");
84  declareProperty( "NeutralFELinksKey", m_neutralFELinksKey = "neutralGlobalFELinks");
85  declareProperty( "ChargedFELinksKey", m_chargedFELinksKey = "chargedGlobalFELinks");
86  }
87 
88  // Destructor
91  = default;
92 
93  // Athena algtool's Hooks
96  {
97  ATH_MSG_DEBUG ("Initializing " << name() << "...");
98 
99  ATH_CHECK( m_trkseltool.retrieve() );
100  ATH_CHECK(m_trkIsolationTool.retrieve());
101  ATH_CHECK(m_caloIsolationTool.retrieve());
102 
103  if(m_clcollKey.key() == "CaloCalTopoClusters") {
104  if(m_useModifiedClus) {
105  ATH_MSG_ERROR("Configured to use modified topocluster collection but \"CaloCalTopoClusters\" collection specified!");
106  return StatusCode::FAILURE;
107  } else {
108  ATH_MSG_INFO("Configured to use standard topocluster collection.");
109  }
110  } else {
111  if(m_useModifiedClus) {
112  ATH_MSG_INFO("Configured to use modified topocluster collection \"" << m_clcollKey.key() << "\".");
113  } else {
114  ATH_MSG_ERROR("Configured to use topocluster collection \"" << m_clcollKey.key() << "\", but modified clusters flag not set!");
115  return StatusCode::FAILURE;
116  }
117  }
118  //initialise read handle keys
119  ATH_CHECK( m_pvcollKey.initialize(m_useTracks));
121 
122  ATH_CHECK(m_fecollKey.initialize(m_pflow && !m_fecollKey.key().empty()));
123  ATH_CHECK( m_pfcollKey.initialize(m_pflow && m_fecollKey.key().empty()));
124  if(m_pflow){
125  if(!m_fecollKey.key().empty()){
126  ATH_MSG_INFO("Configured to use FlowElement collection \"" << m_fecollKey.key() << "\".");
127  }
128  else{
129  ATH_MSG_INFO("Configured to use PFlow collection \"" << m_pfcollKey.key() << "\".");
130  if(m_pfcollKey.key() == "JetETMissParticleFlowObjects") {
131  ATH_MSG_ERROR("Configured to use standard pflow collection \"" << m_pfcollKey.key() << "\".");
132  ATH_MSG_ERROR("This is no longer supported -- please use the CHSParticleFlowObjects collection, which has the four-vector corrections built in.");
133  return StatusCode::FAILURE;
134  }
135  }
136  }
137 
138  ATH_CHECK( m_clcollKey.initialize(!m_skipconst || m_forcoll.empty()));
139 
140  std::string hybridname = "Etmiss";
141  hybridname += m_clcollKey.key();
142  hybridname += m_foreta;
143  hybridname += m_forcoll;
144  ATH_CHECK( m_hybridContKey.assign(hybridname));
145  ATH_CHECK( m_hybridContKey.initialize(m_skipconst && !m_forcoll.empty()));
146 
147  return StatusCode::SUCCESS;
148  }
149 
151  {
152  ATH_MSG_DEBUG ("In execute: " << name() << "...");
153  if(!metCont) {
154  ATH_MSG_WARNING("Invalid pointer to MissingETContainer supplied! Abort.");
155  return StatusCode::FAILURE;
156  }
157 
158  if(!metMap) {
159  ATH_MSG_WARNING("Invalid pointer to MissingETAssociationMap supplied! Abort.");
160  return StatusCode::FAILURE;
161  }
162  if(m_pflow && !m_useTracks ){
163  ATH_MSG_WARNING("Attempting to build PFlow MET without a track collection.");
164  return StatusCode::FAILURE;
165  }
166 
167  return this->executeTool(metCont, metMap);
168  }
169 
171  {
172  ATH_MSG_DEBUG ("In execute: " << name() << "...");
173  if (!m_skipconst || m_forcoll.empty()) {
174 
176  if (!topoclusterCont.isValid()) {
177  ATH_MSG_WARNING("Unable to retrieve topocluster container " << m_clcollKey.key() << " for overlap removal");
178  return StatusCode::FAILURE;
179  }
180  constits.tcCont=topoclusterCont.cptr();
181  ATH_MSG_DEBUG("Successfully retrieved topocluster collection");
182  } else {
183  std::string hybridname = "Etmiss";
184  hybridname += m_clcollKey.key();
185  hybridname += m_foreta;
186  hybridname += m_forcoll;
187 
189  if( hybridCont.isValid()) {
190  constits.tcCont=hybridCont.cptr();
191  } else {
192  ATH_MSG_WARNING("Trying to do something currently unsupported- lets abort");
193  return StatusCode::FAILURE;
194  // Trying to do this using write handles (need to get some input here)
195  /*std::unique_ptr<ConstDataVector<IParticleContainer>> hybridCont = std::make_unique<ConstDataVector<IParticleContainer>>();
196  SG::WriteHandle<ConstDataVector<IParticleContainer>> hybridContHandle(hybridname);
197 
198  StatusCode sc = hybridContHandle.record(std::make_unique<ConstDataVector<IParticleContainer>>(*hybridCont));
199 
200  if (sc.isFailure()) {
201  ATH_MSG_WARNING("Unable to record container");
202  return StatusCode::SUCCESS;
203 
204  }*/
205 
206  /*SG::ReadHandle<IParticleContainer> centCont(m_clcoll);
207  if (!centCont.isValid()) {
208  ATH_MSG_WARNING("Unable to retrieve central container " << m_clcoll << " for overlap removal");
209  return StatusCode::FAILURE;
210  }
211 
212  SG::ReadHandle<IParticleContainer> forCont(m_forcoll);
213  if (!forCont.isValid()) {
214  ATH_MSG_WARNING("Unable to retrieve forward container " << m_forcoll << " for overlap removal");
215  return StatusCode::FAILURE;
216  }
217  ConstDataVector<IParticleContainer> *hybridCont = new ConstDataVector<IParticleContainer>(SG::VIEW_ELEMENTS);
218 
219  const IParticleContainer* centCont=0;
220  if( evtStore()->retrieve(centCont, m_clcoll).isFailure() ) {
221  ATH_MSG_WARNING("Unable to retrieve central container " << m_clcoll << " for overlap removal");
222  return StatusCode::FAILURE;
223  }
224 
225  const IParticleContainer* forCont=0;
226  if( evtStore()->retrieve(forCont, m_forcoll).isFailure() ) {
227  ATH_MSG_WARNING("Unable to retrieve forward container " << m_forcoll << " for overlap removal");
228  return StatusCode::FAILURE;
229  }
230 
231  for(const auto clus : *centCont) if (fabs(clus->eta())<m_foreta) hybridCont->push_back(clus);
232  for(const auto clus : *forCont) if (fabs(clus->eta())>=m_foreta) hybridCont->push_back(clus);
233  ATH_CHECK( evtStore()->record(hybridCont,hybridname));
234  constits.tcCont = hybridCont->asDataVector();
235  */
236  }
237  }
238 
239  if( !m_useTracks){
240  //if you want to skip tracks, set the track collection empty manually
241  ATH_MSG_DEBUG("Skipping tracks");
242  }else{
244  if (!vxCont.isValid()) {
245  ATH_MSG_WARNING("Unable to retrieve primary vertex container " << m_pvcollKey.key());
246  //this is actually really bad. If it's empty that's okay
247  return StatusCode::FAILURE;
248  }
249 
250  ATH_MSG_DEBUG("Successfully retrieved primary vertex container");
251  ATH_MSG_DEBUG("Container holds " << vxCont->size() << " vertices");
252 
253  for(const auto *const vx : *vxCont) {
254  ATH_MSG_VERBOSE( "Testing vertex " << vx->index() );
255  if(vx->vertexType()==VxType::PriVtx)
256  {constits.pv = vx; break;}
257  }
258  if(!constits.pv) {
259  ATH_MSG_DEBUG("Failed to find primary vertex! Reject all tracks.");
260  } else {
261  ATH_MSG_VERBOSE("Primary vertex has z = " << constits.pv->z());
262  }
263 
264  constits.trkCont=nullptr;
265  ATH_MSG_DEBUG("Retrieving Track collection " << m_trkcollKey.key());
267  if (!trCont.isValid()) {
268  ATH_MSG_WARNING("Unable to retrieve track particle container");
269  return StatusCode::FAILURE;
270  }
271  constits.trkCont=trCont.cptr();
272 
273  if(m_pflow){
274  if(!m_fecollKey.key().empty()){
275  ATH_MSG_DEBUG("Retrieving FlowElement collection " << m_fecollKey.key());
276  constits.feCont = nullptr;
278  if (!feCont.isValid()) {
279  ATH_MSG_ERROR("Unable to retrieve FlowElement container "<< m_fecollKey.key());
280  return StatusCode::FAILURE;
281  }
282  constits.feCont=feCont.cptr();
283  }
284  else{
285  ATH_MSG_DEBUG("Retrieving PFlow collection " << m_pfcollKey.key());
286  constits.pfoCont = nullptr;
288  if (!pfCont.isValid()) {
289  ATH_MSG_WARNING("Unable to PFlow object container");
290  return StatusCode::FAILURE;
291  }
292  constits.pfoCont=pfCont.cptr();
293  }
294  }//pflow
295  }//retrieve track/pfo containers
296 
297  return StatusCode::SUCCESS;
298  }
299 
301  // Protected methods:
303 
305  const xAOD::IParticleContainer* hardObjs) const
306  {
307  ConstitHolder constits;
308 
309  if (retrieveConstituents(constits).isFailure()) {
310  ATH_MSG_DEBUG("Unable to retrieve constituent containers");
311  return StatusCode::FAILURE;
312  }
313 
314  std::vector<const IParticle*> constlist;
315  constlist.reserve(20);
316  std::vector<const IParticle*> hardObjs_tmp;
317  for(const auto *const obj : *hardObjs) {
318  hardObjs_tmp.push_back(obj);
319  }
320  std::sort(hardObjs_tmp.begin(),hardObjs_tmp.end(),greaterPt);
321 
322  for(const auto& obj : hardObjs_tmp) {
323  if(obj->pt()<4e3 && obj->type()!=xAOD::Type::Muon) continue;
324  constlist.clear();
325  ATH_MSG_VERBOSE( "Object type, pt, eta, phi = " << obj->type() << ", " << obj->pt() << ", " << obj->eta() << "," << obj->phi() );
326  if(m_pflow){
327  if(!m_fecollKey.key().empty()){
328  if(!m_useTracks){
329  ATH_MSG_ERROR("Attempting to build FlowElement MET without a track collection.");
330  return StatusCode::FAILURE;
331  }
332  std::map<const IParticle*, MissingETBase::Types::constvec_t> momentumOverride;
333  if(m_recoil){ // HR part:
334  float UEcorr_Pt = 0.; // Underlying event correction for HR
335  ATH_CHECK(extractFEHR(obj,hardObjs_tmp,constlist,constits,momentumOverride, UEcorr_Pt));
336  ATH_MSG_DEBUG("Energy correction is: " << UEcorr_Pt);
337  dec_UEcorr(*obj) = UEcorr_Pt;
338  }
339  else{ // MET part:
340  ATH_CHECK( this->extractFE(obj, constlist, constits, momentumOverride) );
341  }
342  MissingETComposition::insert(metMap, obj, constlist, momentumOverride);
343  }
344  else{
345  // Old PFO EDM
346  if(!m_useTracks){
347  ATH_MSG_DEBUG("Attempting to build PFlow without a track collection.");
348  return StatusCode::FAILURE;
349  }else{
350  std::map<const IParticle*,MissingETBase::Types::constvec_t> momentumOverride;
351  ATH_CHECK( this->extractPFO(obj,constlist,constits,momentumOverride) );
352  MissingETComposition::insert(metMap,obj,constlist,momentumOverride);
353  }
354  }
355  } else {
356  std::vector<const IParticle*> tclist;
357  tclist.reserve(20);
358  ATH_CHECK( this->extractTopoClusters(obj,tclist,constits) );
359  if(m_useModifiedClus) {
360  for(const auto& cl : tclist) {
361  // use index-parallelism to identify shallow copied constituents
362  constlist.push_back((*constits.tcCont)[cl->index()]);
363  }
364  } else {
365  constlist = tclist;
366  }
367  if(m_useTracks) ATH_CHECK( this->extractTracks(obj,constlist,constits) );
368  MissingETComposition::insert(metMap,obj,constlist);
369  }
370  }
371  return StatusCode::SUCCESS;
372  }
373 
374  // Accept Track
377  {
378 
379  if (!vx) return false;//in events with no pv, we will just reject all tracks, and therefore build only the calo MET
380  return static_cast<bool> (m_trkseltool->accept( *trk, vx ));
381  }
382 
383 
385  {
386 
387  if( (fabs(trk->eta())<1.5 && trk->pt()>m_cenTrackPtThr) ||
388  (fabs(trk->eta())>=1.5 && trk->pt()>m_forTrackPtThr) ) {
389 
390  // Get relative error on qoverp
391  float Rerr = Amg::error(trk->definingParametersCovMatrix(),4)/fabs(trk->qOverP());
392  ATH_MSG_VERBOSE( "Track momentum error (%): " << Rerr*100 );
393 
394  // first compute track and calo isolation variables
395  float ptcone20 = 0., isolfrac = 0., etcone10 = 0., EoverP = 0.;
396  // ptcone
397  TrackIsolation trkIsoResult;
398  std::vector<Iso::IsolationType> trkIsoCones;
399  trkIsoCones.push_back(xAOD::Iso::IsolationType::ptcone20);
400  xAOD::TrackCorrection trkIsoCorr;
402  m_trkIsolationTool->trackIsolation(trkIsoResult,
403  *trk,
404  trkIsoCones,
405  trkIsoCorr);
406  ptcone20 = !trkIsoResult.ptcones.empty() ? trkIsoResult.ptcones[0] : 0;
407  isolfrac = ptcone20/trk->pt();
408  // etcone
409  CaloIsolation caloIsoResult;
410  std::vector<Iso::IsolationType> caloIsoCones;
411  // We can't actually configure the tool to give etcone10, so instead we have to compute etcone20,
412  // applying the core cone correction.
413  // Then, we retrieve the correction value, which is etcone10, rather than the isolation value
414  caloIsoCones.push_back(xAOD::Iso::IsolationType::etcone20);
415  xAOD::CaloCorrection caloIsoCorr_coreCone;
416  caloIsoCorr_coreCone.calobitset.set(xAOD::Iso::IsolationCaloCorrection::coreCone); // this is etcone10
417  m_caloIsolationTool->caloTopoClusterIsolation(caloIsoResult,
418  *trk,
419  caloIsoCones,
420  caloIsoCorr_coreCone);
421  if(!caloIsoResult.etcones.empty()) {
422  // retrieve the correction value for the core cone
424  } else {
425  ATH_MSG_WARNING("isGoodEoverP: Failed to retrieve the isolation core correction (etcone10)! Setting etcone10=0");
426  etcone10 = 0.;
427  }
428  EoverP = etcone10/trk->pt();
430  ATH_MSG_VERBOSE( "Track isolation fraction: " << isolfrac );
431  ATH_MSG_VERBOSE( "Track E/P = " << EoverP );
432 
433  if(isolfrac<0.1) {
434  // isolated track cuts
435  if(Rerr>0.4) return false;
436  else if (EoverP<0.65 && ((EoverP>0.1 && Rerr>0.05) || Rerr>0.1)) return false;
437  } else {
438  // non-isolated track cuts
439  float trkptsum = ptcone20+trk->pt();
440  if(etcone10/trkptsum<0.6 && trk->pt()/trkptsum>0.6) return false;
441  }
442  }
443  return true;
444  }
445 
447  std::vector<TLorentzVector>& v_clus, // TLV vector of all clusters of hard objects
448  TLorentzVector& clus, // TLV of current cluster
449  TLorentzVector& HR, // uncorrected HR
450  const float Drcone, // Cone size for el-pfo association
451  const float MinDistCone, // Cone size for getting random Phi
452  float& UEcorr) const // UE correction (result)
453  {
454  // 1. Get random phi
455  unsigned int seed = 0;
456  TRandom3 hole;
457  if( !v_clus.empty() ){
458  seed = floor( v_clus.back().Pt() * Gaudi::Units::GeV );
459  hole.SetSeed(seed);
460  }
461 
462  bool isNextToPart(true);
463  bool isNextToHR(true);
464  double phiRnd(0.);
465 
466  int numOfRndTrials = 0; // Counter for trials to find random cone without overlaps
467  const int maxNumOfRndTrials = 100; // Max. number of trials to find random cone without overlaps
468 
469  while(isNextToPart || isNextToHR ){
470  isNextToPart = false;
471  isNextToHR = true;
472 
473  phiRnd = hole.Uniform( -std::numbers::pi, std::numbers::pi);
474  double dR = P4Helpers::deltaR( HR.Eta(), HR.Phi(), clus.Eta(), phiRnd );
475  if(dR > MinDistCone){
476  isNextToHR = false;
477  }
478 
479  for(const auto& clus_j : v_clus) { // loop over leptons
480  dR = P4Helpers::deltaR( clus.Eta(), phiRnd, clus_j.Eta(), clus_j.Phi() );
481  if(dR < MinDistCone){
482  isNextToPart = true;
483  break;
484  }
485  } // swclus_j
486 
487  numOfRndTrials++;
488  if(numOfRndTrials == maxNumOfRndTrials){ // check number of trials
489  UEcorr = 0.;
490  return StatusCode::SUCCESS;
491  }
492  } // while isNextToPart, isNextToHR
493 
494  ATH_MSG_DEBUG("Found rnd phi: " << phiRnd);
495 
496 
497  // 2. Calculete UE correction
498  TLorentzVector tv_UEcorr; // TLV of UE correction (initialized with 0,0,0,0 automatically)
499  std::pair <double, double> eta_rndphi = std::make_pair(clus.Eta(), phiRnd); // pair of current cluser eta and random phi
500 
501 
502  // Calculate delta phi -> always the same angle so its sufficient to calculate it only once
503  float dphi_angle=P4Helpers::deltaPhi(clus.Phi(),eta_rndphi.second);
504 
505  for(const auto fe_itr : *constits.feCont){ // loop over PFOs
506  if(fe_itr->pt() < 0 || fe_itr->e() < 0){ //sanity check
507  continue;
508  }
509 
510  //remove charged FE that are not matched to the PV
511  const static SG::ConstAccessor<char> PVMatchedAcc("matchedToPV");
512  if(fe_itr->isCharged() && !PVMatchedAcc(*fe_itr)){
513  continue;
514  }
515 
516  double dR = P4Helpers::deltaR( fe_itr->eta(), fe_itr->phi(), eta_rndphi.first, eta_rndphi.second );
517  if( dR < Drcone ){
518  // Rotate on dphi_angle
519  TLorentzVector tv_fe = fe_itr->p4();
520  tv_fe.RotateZ(dphi_angle);
521  tv_UEcorr += tv_fe; // summing PFOs of UE for correction
522  } // cone requirement
523  } // loop over PFOs
524 
525  UEcorr = tv_UEcorr.Pt(); // Pt of UE correction
526 
527  return StatusCode::SUCCESS;
528  }
529 }
met::METAssociator::m_forcoll
std::string m_forcoll
Definition: METAssociator.h:115
met::METAssociator::greaterPt
static bool greaterPt(const xAOD::IParticle *part1, const xAOD::IParticle *part2)
Definition: METAssociator.h:167
xAOD::TrackParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TrackParticle_v1.cxx:74
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
met::METAssociator::m_neutralPFOLinksKey
std::string m_neutralPFOLinksKey
Definition: METAssociator.h:91
met::METAssociator::m_useModifiedClus
bool m_useModifiedClus
Definition: METAssociator.h:110
met::METAssociator::m_foreta
double m_foreta
Definition: METAssociator.h:116
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:18
met::METAssociator::extractFE
virtual StatusCode extractFE(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &momenta) const =0
xAOD::TrackCorrection
Definition: IsolationCommon.h:18
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::Iso::coreEnergy
@ coreEnergy
energy stored for this correction
Definition: Event/xAOD/xAODPrimitives/xAODPrimitives/IsolationCorrection.h:93
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
met::METAssociator::m_useFELinks
bool m_useFELinks
Definition: METAssociator.h:94
METAssociator.h
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
xAODP4Helpers.h
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TrackParticle_v1.cxx:78
xAOD::Iso::coreTrackPtr
@ coreTrackPtr
tracks pointer
Definition: Event/xAOD/xAODPrimitives/xAODPrimitives/IsolationCorrection.h:66
EventPrimitivesHelpers.h
met::METAssociator::m_forTrackPtThr
double m_forTrackPtThr
Definition: METAssociator.h:119
met::METAssociator::retrieveConstituents
StatusCode retrieveConstituents(met::METAssociator::ConstitHolder &constits) const
Definition: METAssociator.cxx:170
met::METAssociator::m_trkcollKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkcollKey
Definition: METAssociator.h:98
xAOD::TrackCorrection::trackbitset
Iso::IsolationTrackCorrectionBitset trackbitset
Definition: IsolationCommon.h:19
met::METAssociator::m_trkseltool
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkseltool
Definition: METAssociator.h:85
test_pyathena.pt
pt
Definition: test_pyathena.py:11
xAOD::Iso::ptcone20
@ ptcone20
Track isolation.
Definition: IsolationType.h:40
met::METAssociator::m_clcollKey
SG::ReadHandleKey< xAOD::IParticleContainer > m_clcollKey
Definition: METAssociator.h:97
met::METAssociator::ConstitHolder::pfoCont
const xAOD::PFOContainer * pfoCont
Definition: METAssociator.h:66
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
met::METAssociator::ConstitHolder::feCont
const xAOD::FlowElementContainer * feCont
Definition: METAssociator.h:67
met::METAssociator::m_pfcollKey
SG::ReadHandleKey< xAOD::PFOContainer > m_pfcollKey
Definition: METAssociator.h:99
SG::ConstAccessor< char >
met::METAssociator::m_chargedPFOLinksKey
std::string m_chargedPFOLinksKey
Definition: METAssociator.h:92
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
METEgammaAssociator.h
met::METAssociator::m_useRapidity
bool m_useRapidity
Definition: METAssociator.h:108
met::METAssociator::extractTracks
virtual StatusCode extractTracks(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &constlist, const met::METAssociator::ConstitHolder &constits) const =0
pi
#define pi
Definition: TileMuonFitter.cxx:65
met::METAssociator::m_fecollKey
SG::ReadHandleKey< xAOD::FlowElementContainer > m_fecollKey
Definition: METAssociator.h:100
xAOD::MissingETAssociationMap_v1
Definition: MissingETAssociationMap_v1.h:29
ICaloTopoClusterIsolationTool.h
met::METAssociator::METAssociator
METAssociator()
met::METAssociator::m_useTracks
bool m_useTracks
Definition: METAssociator.h:107
met::METAssociator::m_pvcollKey
SG::ReadHandleKey< xAOD::VertexContainer > m_pvcollKey
Definition: METAssociator.h:96
met::METAssociator::m_cenTrackPtThr
double m_cenTrackPtThr
Definition: METAssociator.h:118
met::METAssociator::ConstitHolder::pv
const xAOD::Vertex * pv
Definition: METAssociator.h:68
xAOD::MissingETComposition::insert
static bool insert(MissingETComponentMap *pMap, const MissingET *pMET, const IParticle *pPart, MissingETBase::Types::weight_t weight=MissingETBase::Types::weight_t())
Insert contributing signal or physics object by pointer, with optional kinematic weight object.
Definition: Event/xAOD/xAODMissingET/Root/MissingETComposition.cxx:42
met::METAssociator::ConstitHolder::tcCont
const xAOD::IParticleContainer * tcCont
Definition: METAssociator.h:65
xAOD::CaloIsolation
Definition: IsolationCommon.h:22
P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: P4Helpers.h:34
met
Definition: IMETSignificance.h:24
met::METAssociator::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: METAssociator.cxx:95
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
met::METAssociator::m_trkIsolationTool
ToolHandle< xAOD::ITrackIsolationTool > m_trkIsolationTool
Definition: METAssociator.h:86
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
SG::Decorator< float >
xAOD::Iso::etcone20
@ etcone20
Calorimeter isolation.
Definition: IsolationType.h:32
met::METAssociator::m_recoil
Gaudi::Property< bool > m_recoil
Definition: METAssociator.h:104
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
xAOD::CaloIsolation::coreCorrections
std::map< Iso::IsolationCaloCorrection, std::map< Iso::IsolationCorrectionParameter, float > > coreCorrections
Definition: IsolationCommon.h:26
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:572
met::METAssociator::m_neutralFELinksKey
std::string m_neutralFELinksKey
Definition: METAssociator.h:89
met::METAssociator::~METAssociator
virtual ~METAssociator()
met::METAssociator::extractPFO
virtual StatusCode extractPFO(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &pfolist, const met::METAssociator::ConstitHolder &constits, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &momenta) const =0
met::METAssociator::m_chargedFELinksKey
std::string m_chargedFELinksKey
Definition: METAssociator.h:90
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::Vertex_v1::z
float z() const
Returns the z position.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
P4Helpers::deltaR
double deltaR(const I4Momentum &p4, double eta, double phi)
from 1 I4Momentum
Definition: P4Helpers.h:209
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
Vertex.h
IInDetTrackSelectionTool.h
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
xAOD::TrackIsolation
Definition: IsolationCommon.h:33
xAOD::MissingETContainer_v1
Container for xAOD::MissingET_v1 objects.
Definition: MissingETContainer_v1.h:21
xAOD::TrackParticle_v1::qOverP
float qOverP() const
Returns the parameter.
xAOD::TrackParticle_v1::definingParametersCovMatrix
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
Definition: TrackParticle_v1.cxx:247
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
xAOD::CaloIsolation::etcones
std::vector< float > etcones
Definition: IsolationCommon.h:30
xAOD::Iso::coreCone
@ coreCone
core energy (in dR<0.1).
Definition: Event/xAOD/xAODPrimitives/xAODPrimitives/IsolationCorrection.h:29
met::METAssociator::isGoodEoverP
bool isGoodEoverP(const xAOD::TrackParticle *trk) const
Definition: METAssociator.cxx:384
met::METAssociator::extractFEHR
virtual StatusCode extractFEHR(const xAOD::IParticle *, std::vector< const xAOD::IParticle * >, std::vector< const xAOD::IParticle * > &, const met::METAssociator::ConstitHolder &, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &, float &) const
Definition: METAssociator.h:153
met::METAssociator::acceptTrack
bool acceptTrack(const xAOD::TrackParticle *trk, const xAOD::Vertex *pv) const
Definition: METAssociator.cxx:376
xAOD::TrackIsolation::ptcones
std::vector< float > ptcones
Definition: IsolationCommon.h:36
Muon
struct TBPatternUnitContext Muon
met::METAssociator::fillAssocMap
virtual StatusCode fillAssocMap(xAOD::MissingETAssociationMap *metMap, const xAOD::IParticleContainer *hardObjs) const
Definition: METAssociator.cxx:304
TrackParticle.h
ITrackIsolationTool.h
met::METAssociator::executeTool
virtual StatusCode executeTool(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap) const =0
met::METAssociator::GetUEcorr
StatusCode GetUEcorr(const met::METAssociator::ConstitHolder &constits, std::vector< TLorentzVector > &v_clus, TLorentzVector &clus, TLorentzVector &HR, const float Drcone, const float MinDistCone, float &UEcorr) const
Definition: METAssociator.cxx:446
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
met::METAssociator::m_hybridContKey
SG::ReadHandleKey< xAOD::IParticleContainer > m_hybridContKey
Definition: METAssociator.h:101
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::CaloCorrection
Definition: IsolationCommon.h:14
met::METAssociator::m_pflow
bool m_pflow
Definition: METAssociator.h:106
met::METAssociator::m_usePFOLinks
bool m_usePFOLinks
Definition: METAssociator.h:93
met::METAssociator::execute
virtual StatusCode execute(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap) const override
Definition: METAssociator.cxx:150
Trk::hole
@ hole
Definition: MeasurementType.h:36
met::METAssociator::m_skipconst
bool m_skipconst
Definition: METAssociator.h:114
MissingETAssociationMap.h
AllowedVariables::EoverP
@ EoverP
Definition: AsgElectronSelectorTool.cxx:56
met::METAssociator::ConstitHolder::trkCont
const xAOD::TrackParticleContainer * trkCont
Definition: METAssociator.h:63
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
python.PyAthena.obj
obj
Definition: PyAthena.py:132
met::METAssociator::m_cleanChargedPFO
bool m_cleanChargedPFO
Definition: METAssociator.h:112
python.Dumpers.etcone10
int etcone10
Definition: Dumpers.py:40
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:25
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
MissingETComposition.h
MissingETContainer.h
met::METAssociator::extractTopoClusters
virtual StatusCode extractTopoClusters(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &tclist, const met::METAssociator::ConstitHolder &constits) const =0
xAOD::CaloCorrection::calobitset
Iso::IsolationCaloCorrectionBitset calobitset
Definition: IsolationCommon.h:15
met::METAssociator::ConstitHolder
Definition: METAssociator.h:62
met::METAssociator::m_caloIsolationTool
ToolHandle< xAOD::ICaloTopoClusterIsolationTool > m_caloIsolationTool
Definition: METAssociator.h:87