ATLAS Offline Software
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
DerivationFramework::DiphotonVertexDecorator Class Reference

#include <DiphotonVertexDecorator.h>

Inheritance diagram for DerivationFramework::DiphotonVertexDecorator:
Collaboration diagram for DerivationFramework::DiphotonVertexDecorator:

Public Member Functions

 DiphotonVertexDecorator (const std::string &t, const std::string &n, const IInterface *p)
 Constructor with parameters. More...
 
 ~DiphotonVertexDecorator ()
 Destructor. More...
 
StatusCode initialize ()
 
StatusCode finalize ()
 
virtual StatusCode addBranches (const EventContext &ctx) const
 

Private Member Functions

bool PhotonPreselect (const xAOD::Photon *ph) const
 
StatusCode matchFlowElement (const xAOD::Photon *eg, const xAOD::FlowElementContainer *pfoCont) const
 

Static Private Member Functions

static bool greaterPtFlowElement (const xAOD::FlowElement *part1, const xAOD::FlowElement *part2)
 

Private Attributes

ToolHandle< CP::IPhotonVertexSelectionToolm_photonVertexSelectionTool {this, "PhotonVertexSelectionTool", "", ""}
 
SG::ReadHandleKey< xAOD::VertexContainerm_primaryVertexKey {this, "PrimaryVertexName", "PrimaryVertices", "" }
 
SG::ReadHandleKey< xAOD::PhotonContainerm_photonKey { this, "PhotonKey", "Photons", "" }
 
SG::WriteHandleKey< xAOD::VertexContainerm_diphotonVertexKey {this, "DiphotonVertexName", "HggPrimaryVertices", "" }
 
SG::ReadHandleKey< xAOD::FlowElementContainerm_FEContainerHandleKey {this,"PFOContainerName","JetETMissChargedParticleFlowObjects","ReadHandleKey for the PFO container"}
 
double m_minPhotonPt
 
bool m_removeCrack
 
double m_maxEta
 
bool m_ignoreConv
 
std::string m_pfoToolName
 
double m_tcMatch_dR
 
double m_tcMatch_maxRat
 

Detailed Description

Author
Bruno Lenzi
Leo Cerda
magda.nosp@m.c@ce.nosp@m.rn.ch

Definition at line 37 of file DiphotonVertexDecorator.h.

Constructor & Destructor Documentation

◆ DiphotonVertexDecorator()

DerivationFramework::DiphotonVertexDecorator::DiphotonVertexDecorator ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Constructor with parameters.

Definition at line 29 of file DiphotonVertexDecorator.cxx.

31  :
32  base_class(t, n, p)
33 {
34 
35 
36  declareProperty("RemoveCrack", m_removeCrack = true);
37  declareProperty("MaxEta", m_maxEta = 2.37);
38  declareProperty("MinimumPhotonPt", m_minPhotonPt = 20*CLHEP::GeV);
39  declareProperty("IgnoreConvPointing", m_ignoreConv = false);
40  declareProperty("TCMatchMaxRat", m_tcMatch_maxRat = 1.5 );
41  declareProperty("TCMatchDeltaR", m_tcMatch_dR = 0.1 );
42 
43 }

◆ ~DiphotonVertexDecorator()

DerivationFramework::DiphotonVertexDecorator::~DiphotonVertexDecorator ( )

Destructor.

Definition at line 46 of file DiphotonVertexDecorator.cxx.

46  {
47 }

Member Function Documentation

◆ addBranches()

StatusCode DerivationFramework::DiphotonVertexDecorator::addBranches ( const EventContext &  ctx) const
virtual

Definition at line 65 of file DiphotonVertexDecorator.cxx.

66 {
67  ATH_MSG_DEBUG( "DiphotonVertexDecorator::AddingBranches" );
68 
70 
71  if (!PV->empty() && PV->at(0)) {
72  ATH_MSG_DEBUG( "Default PV " << PV->at(0) << ", type = " << PV->at(0)->vertexType() << " , z = " << PV->at(0)->z() );
73  }
74 
75  // Select the two highest pt photons that pass a preselection
76 
78  const xAOD::Photon *ph1 = nullptr, *ph2 = nullptr;
79 
80  for (const xAOD::Photon* ph: *photons)
81  {
82  if (!PhotonPreselect(ph)) continue;
83  if (not ph1 or ph->pt() > ph1->pt()) // new leading photon
84  {
85  ph2 = ph1;
86  ph1 = ph;
87  }
88  else if (not ph2 or ph->pt() > ph2->pt()) ph2 = ph; // new subleading photon
89  }
90 
91  const ConstDataVector< xAOD::PhotonContainer > vertexPhotons = {ph1, ph2};
92 
95 
96  ATH_CHECK( m_photonVertexSelectionTool->decorateInputs(*(vertexPhotons.asDataVector()), &vertexFailType) );
97 
98  // Get the photon vertex if possible
99  std::vector<std::pair<const xAOD::Vertex*, float> > vxResult;
100  const xAOD::Vertex *newPV = nullptr;
101 
103  SG::Decorator<char> passORDec("passOR");
104  for(const auto *const fe : *FEHandle) passORDec(*fe) = true;
105 
106  if (ph1 and ph2)
107  {
108  vxResult = m_photonVertexSelectionTool->getVertex( *( vertexPhotons.asDataVector()) , m_ignoreConv, true, &yyvertexVtxType, &vertexFailType );
109  if(!vxResult.empty()) {
110  newPV = vxResult[0].first; //output of photon vertex selection tool must be sorted according to score
111  }
112  ATH_CHECK(matchFlowElement(ph1,&*FEHandle));
113  ATH_CHECK(matchFlowElement(ph2,&*FEHandle));
114  }
115 
116  // Decorate the vertices with the NN score
117  ATH_MSG_DEBUG("PhotonVertexSelection returns vertex " << newPV << " " << (newPV? Form(" with z = %g", newPV->z()) : "") );
118  // Create shallow copy of the PrimaryVertices container
119  std::pair< xAOD::VertexContainer*, xAOD::ShallowAuxContainer* > HggPV = xAOD::shallowCopyContainer( *PV );
120  HggPV.second->setShallowIO(false);
121 
123  ATH_CHECK(vertexContainer.recordNonConst(std::unique_ptr< xAOD::VertexContainer >(HggPV.first),
124  std::unique_ptr< xAOD::ShallowAuxContainer >(HggPV.second)));
125 
126 
127  static const SG::Accessor<float> vertexScoreAcc("vertexScore");
128  static const SG::Accessor<int> vertexFailTypeAcc("vertexFailType");
129  static const SG::Accessor<int> vertexCaseAcc("vertexCase");
130  static const SG::Accessor<phlink_t> leadingPhotonLinkAcc("leadingPhotonLink");
131  static const SG::Accessor<phlink_t> subleadingPhotonLinkAcc("subleadingPhotonLink");
132 
133  if (newPV) {
134  //loop over vertex container; shallow copy has the same order
135  for (unsigned int iPV=0; iPV<PV->size(); iPV++) {
136  const auto *vx = PV->at(iPV);
137  auto yyvx = (HggPV.first)->at(iPV);
138  //reset vertex type
139  if (vx == newPV) {
140  //is this the diphoton primary vertex returned from the tool?
141  yyvx->setVertexType( xAOD::VxType::PriVtx );
142  } else if ( vx->vertexType()==xAOD::VxType::PriVtx || vx->vertexType()==xAOD::VxType::PileUp ) {
143  //not overriding the type of dummy vertices of type 0 (NoVtx)
144  yyvx->setVertexType( xAOD::VxType::PileUp );
145  }
146  //decorate score
147  for (const auto& vxR: vxResult) {
148  //find vertex in output from photonVertexSelectionTool
149  if ( vx == vxR.first ) {
150  vertexScoreAcc(*yyvx) = vxR.second;
151  vertexFailTypeAcc(*yyvx) = vertexFailType;
152  vertexCaseAcc(*yyvx) = yyvertexVtxType;
153  leadingPhotonLinkAcc(*yyvx) = phlink_t(*photons, ph1->index());
154  subleadingPhotonLinkAcc(*yyvx) = phlink_t(*photons, ph2->index());
155  break;
156  }
157  }
158  }
159  }
160  else {
161  //no vertex returned by photonVertexSelectionTool, decorate default PV with fit information
163  xAOD::VertexContainer::iterator yyvx_end = (HggPV.first)->end();
164  for(yyvx_itr = (HggPV.first)->begin(); yyvx_itr != yyvx_end; ++yyvx_itr ) {
165  if ( (*yyvx_itr)->vertexType()==xAOD::VxType::PriVtx ) {
166  vertexScoreAcc(**yyvx_itr) = -9999;
167  vertexFailTypeAcc(**yyvx_itr) = vertexFailType;
168  vertexCaseAcc(**yyvx_itr) = yyvertexVtxType;
169  leadingPhotonLinkAcc(**yyvx_itr) = (phlink_t()) ;
170  subleadingPhotonLinkAcc(**yyvx_itr) = (phlink_t());
171  }
172  }
173  }
174 
175 
176  if( !evtStore()->transientContains< xAOD::VertexContainer >( m_diphotonVertexKey.key() ) ){
177  ATH_MSG_WARNING("Unable to find transient xAOD::VertexContainer, \"" << m_diphotonVertexKey.key() << "\"");
178  }
179 
180  return StatusCode::SUCCESS;
181 }

◆ finalize()

StatusCode DerivationFramework::DiphotonVertexDecorator::finalize ( )

Definition at line 60 of file DiphotonVertexDecorator.cxx.

61 {
62  return StatusCode::SUCCESS;
63 }

◆ greaterPtFlowElement()

static bool DerivationFramework::DiphotonVertexDecorator::greaterPtFlowElement ( const xAOD::FlowElement part1,
const xAOD::FlowElement part2 
)
inlinestaticprivate

Definition at line 75 of file DiphotonVertexDecorator.h.

75  {
76  if (part1->charge()==0 && part2->charge()!=0) return false;
77  if (part1->charge()!=0 && part2->charge()==0) return true;
78  return part1->pt()>part2->pt();
79  }

◆ initialize()

StatusCode DerivationFramework::DiphotonVertexDecorator::initialize ( )

Definition at line 50 of file DiphotonVertexDecorator.cxx.

51 {
53  ATH_CHECK( m_primaryVertexKey.initialize() );
54  ATH_CHECK( m_photonKey.initialize() );
55  ATH_CHECK( m_diphotonVertexKey.initialize() );
56  ATH_CHECK( m_FEContainerHandleKey.initialize() );
57  return StatusCode::SUCCESS;
58 }

◆ matchFlowElement()

StatusCode DerivationFramework::DiphotonVertexDecorator::matchFlowElement ( const xAOD::Photon eg,
const xAOD::FlowElementContainer pfoCont 
) const
private

Definition at line 220 of file DiphotonVertexDecorator.cxx.

220  {
221  const xAOD::IParticle* swclus = eg->caloCluster();
222 
223  // Preselect FEs based on proximity: dR<0.4
224  std::vector<const xAOD::FlowElement*> nearbyFE;
225  nearbyFE.reserve(20);
226  for(const auto *const fe : *feCont) {
227  if(xAOD::P4Helpers::isInDeltaR(*fe, *swclus, 0.4, true)) {
228  if( ( !fe->isCharged() && fe->e() > FLT_MIN )) nearbyFE.push_back(fe);
229  } // DeltaR check
230  } // FE loop
231 
232  SG::Decorator<char> passORDec("passOR");
233 
234  double eg_cl_e = swclus->e();
235  bool doSum = true;
236  double sumE_fe = 0.;
237  const xAOD::IParticle* bestbadmatch = nullptr;
238  std::sort(nearbyFE.begin(),nearbyFE.end(),greaterPtFlowElement);
239  for(const auto& fe : nearbyFE) {
240  if(!xAOD::P4Helpers::isInDeltaR(*fe, *swclus, m_tcMatch_dR, true)) {continue;}
241  // Handle neutral FEs like topoclusters
242  double fe_e = fe->e();
243  // skip cluster if it's above our bad match threshold or outside the matching radius
244  if(fe_e>m_tcMatch_maxRat*eg_cl_e) {
245  ATH_MSG_VERBOSE("Reject topocluster in sum. Ratio vs eg cluster: " << (fe_e/eg_cl_e));
246  if( !bestbadmatch || (std::abs(fe_e/eg_cl_e-1.) < std::abs(bestbadmatch->e()/eg_cl_e-1.)) ) bestbadmatch = fe;
247  continue;
248  }
249 
250  ATH_MSG_VERBOSE("E match with new nFE: " << std::abs(sumE_fe+fe_e - eg_cl_e) / eg_cl_e);
251  if( (doSum = std::abs(sumE_fe+fe_e-eg_cl_e) < std::abs(sumE_fe - eg_cl_e)) ) {
252  passORDec(*fe) = false;
253  sumE_fe += fe_e;
254  } // if we will retain the topocluster
255  else {break;}
256  } // loop over nearby clusters
257  if(sumE_fe<FLT_MIN && bestbadmatch) {
258  passORDec(*bestbadmatch) = false;
259  }
260 
261  return StatusCode::SUCCESS;
262 }

◆ PhotonPreselect()

bool DerivationFramework::DiphotonVertexDecorator::PhotonPreselect ( const xAOD::Photon ph) const
private

Definition at line 183 of file DiphotonVertexDecorator.cxx.

184 {
185 
186  if (!ph) return false;
187 
188  if (!ph->isGoodOQ(34214)) return false;
189 
190  bool val(false);
191  bool defined(false);
192 
193  static const SG::ConstAccessor<char> DFCommonPhotonsIsEMLooseAcc("DFCommonPhotonsIsEMLoose");
194  if(DFCommonPhotonsIsEMLooseAcc.isAvailable(*ph)){
195  defined = true;
196  val = static_cast<bool>(DFCommonPhotonsIsEMLooseAcc(*ph));
197  }
198  else{
199  defined = ph->passSelection(val, "Loose");
200  }
201 
202  if(!defined || !val) return false;
203 
204  // veto topo-seeded clusters
205  if (ph->author(xAOD::EgammaParameters::AuthorCaloTopo35)) return false;
206 
207  // Check which variable versions are best...
208  const xAOD::CaloCluster *caloCluster(ph->caloCluster());
209  double eta = std::abs(caloCluster->etaBE(2));
210 
211  if (eta > m_maxEta) return false;
212  if (m_removeCrack && 1.37 <= eta && eta <= 1.52) return false;
213 
214  if (ph->pt() < m_minPhotonPt) return false;
215 
216  return true;
217 
218 }

Member Data Documentation

◆ m_diphotonVertexKey

SG::WriteHandleKey<xAOD::VertexContainer> DerivationFramework::DiphotonVertexDecorator::m_diphotonVertexKey {this, "DiphotonVertexName", "HggPrimaryVertices", "" }
private

Definition at line 60 of file DiphotonVertexDecorator.h.

◆ m_FEContainerHandleKey

SG::ReadHandleKey<xAOD::FlowElementContainer> DerivationFramework::DiphotonVertexDecorator::m_FEContainerHandleKey {this,"PFOContainerName","JetETMissChargedParticleFlowObjects","ReadHandleKey for the PFO container"}
private

Definition at line 61 of file DiphotonVertexDecorator.h.

◆ m_ignoreConv

bool DerivationFramework::DiphotonVertexDecorator::m_ignoreConv
private

Definition at line 68 of file DiphotonVertexDecorator.h.

◆ m_maxEta

double DerivationFramework::DiphotonVertexDecorator::m_maxEta
private

Definition at line 67 of file DiphotonVertexDecorator.h.

◆ m_minPhotonPt

double DerivationFramework::DiphotonVertexDecorator::m_minPhotonPt
private

Definition at line 65 of file DiphotonVertexDecorator.h.

◆ m_pfoToolName

std::string DerivationFramework::DiphotonVertexDecorator::m_pfoToolName
private

Definition at line 69 of file DiphotonVertexDecorator.h.

◆ m_photonKey

SG::ReadHandleKey<xAOD::PhotonContainer> DerivationFramework::DiphotonVertexDecorator::m_photonKey { this, "PhotonKey", "Photons", "" }
private

Definition at line 59 of file DiphotonVertexDecorator.h.

◆ m_photonVertexSelectionTool

ToolHandle<CP::IPhotonVertexSelectionTool> DerivationFramework::DiphotonVertexDecorator::m_photonVertexSelectionTool {this, "PhotonVertexSelectionTool", "", ""}
private

Definition at line 56 of file DiphotonVertexDecorator.h.

◆ m_primaryVertexKey

SG::ReadHandleKey<xAOD::VertexContainer> DerivationFramework::DiphotonVertexDecorator::m_primaryVertexKey {this, "PrimaryVertexName", "PrimaryVertices", "" }
private

Definition at line 58 of file DiphotonVertexDecorator.h.

◆ m_removeCrack

bool DerivationFramework::DiphotonVertexDecorator::m_removeCrack
private

Definition at line 66 of file DiphotonVertexDecorator.h.

◆ m_tcMatch_dR

double DerivationFramework::DiphotonVertexDecorator::m_tcMatch_dR
private

Definition at line 70 of file DiphotonVertexDecorator.h.

◆ m_tcMatch_maxRat

double DerivationFramework::DiphotonVertexDecorator::m_tcMatch_maxRat
private

Definition at line 71 of file DiphotonVertexDecorator.h.


The documentation for this class was generated from the following files:
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
ParticleTest.eg
eg
Definition: ParticleTest.py:29
SG::Accessor< float >
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
CP::IPhotonVertexSelectionTool::Unknown
@ Unknown
Definition: IPhotonVertexSelectionTool.h:45
DerivationFramework::DiphotonVertexDecorator::m_minPhotonPt
double m_minPhotonPt
Definition: DiphotonVertexDecorator.h:65
DerivationFramework::DiphotonVertexDecorator::m_removeCrack
bool m_removeCrack
Definition: DiphotonVertexDecorator.h:66
xAOD::Egamma_v1::author
uint16_t author(uint16_t bitmask=EgammaParameters::AuthorALL) const
Get author.
Definition: Egamma_v1.cxx:166
DerivationFramework::DiphotonVertexDecorator::m_maxEta
double m_maxEta
Definition: DiphotonVertexDecorator.h:67
SG::ConstAccessor< char >
DerivationFramework::DiphotonVertexDecorator::PhotonPreselect
bool PhotonPreselect(const xAOD::Photon *ph) const
Definition: DiphotonVertexDecorator.cxx:183
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
DerivationFramework::DiphotonVertexDecorator::m_tcMatch_maxRat
double m_tcMatch_maxRat
Definition: DiphotonVertexDecorator.h:71
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
ConstDataVector::asDataVector
const DV * asDataVector() const
Return a pointer to this object, as a const DataVector.
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
part1
Definition: part1.py:1
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
SG::Decorator< char >
DataModel_detail::iterator
(Non-const) Iterator class for DataVector/DataList.
Definition: DVLIterator.h:184
CP::IPhotonVertexSelectionTool::yyVtxType
yyVtxType
Definition: IPhotonVertexSelectionTool.h:44
xAOD::EgammaParameters::AuthorCaloTopo35
const uint16_t AuthorCaloTopo35
Photon reconstructed by SW CaloTopo35 seeded clusters.
Definition: EgammaDefs.h:38
beamspotman.n
n
Definition: beamspotman.py:727
DerivationFramework::DiphotonVertexDecorator::greaterPtFlowElement
static bool greaterPtFlowElement(const xAOD::FlowElement *part1, const xAOD::FlowElement *part2)
Definition: DiphotonVertexDecorator.h:75
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
DerivationFramework::DiphotonVertexDecorator::matchFlowElement
StatusCode matchFlowElement(const xAOD::Photon *eg, const xAOD::FlowElementContainer *pfoCont) const
Definition: DiphotonVertexDecorator.cxx:220
DerivationFramework::DiphotonVertexDecorator::m_photonVertexSelectionTool
ToolHandle< CP::IPhotonVertexSelectionTool > m_photonVertexSelectionTool
Definition: DiphotonVertexDecorator.h:56
xAOD::Egamma_v1::caloCluster
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
Definition: Egamma_v1.cxx:388
CP::IPhotonVertexSelectionTool::FailType
FailType
Declare the interface that the class provides.
Definition: IPhotonVertexSelectionTool.h:33
xAOD::VxType::PriVtx
@ PriVtx
Primary vertex.
Definition: TrackingPrimitives.h:572
DerivationFramework::DiphotonVertexDecorator::m_FEContainerHandleKey
SG::ReadHandleKey< xAOD::FlowElementContainer > m_FEContainerHandleKey
Definition: DiphotonVertexDecorator.h:61
DerivationFramework::DiphotonVertexDecorator::m_primaryVertexKey
SG::ReadHandleKey< xAOD::VertexContainer > m_primaryVertexKey
Definition: DiphotonVertexDecorator.h:58
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::Vertex_v1::z
float z() const
Returns the z position.
SG::AuxElement::index
size_t index() const
Return the index of this element within its container.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
part2
Definition: part2.py:1
xAOD::VxType::PileUp
@ PileUp
Pile-up vertex.
Definition: TrackingPrimitives.h:574
phlink_t
ElementLink< xAOD::PhotonContainer > phlink_t
Definition: DiphotonVertexDecorator.cxx:26
DerivationFramework::DiphotonVertexDecorator::m_diphotonVertexKey
SG::WriteHandleKey< xAOD::VertexContainer > m_diphotonVertexKey
Definition: DiphotonVertexDecorator.h:60
xAOD::shallowCopyContainer
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, [[maybe_unused]] const EventContext &ctx)
Function making a shallow copy of a constant container.
Definition: ShallowCopy.h:110
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:73
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
xAOD::Photon_v1
Definition: Photon_v1.h:37
std::sort
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Definition: DVL_algorithms.h:623
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
xAOD::Egamma_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: Egamma_v1.cxx:65
DerivationFramework::DiphotonVertexDecorator::m_photonKey
SG::ReadHandleKey< xAOD::PhotonContainer > m_photonKey
Definition: DiphotonVertexDecorator.h:59
DerivationFramework::DiphotonVertexDecorator::m_ignoreConv
bool m_ignoreConv
Definition: DiphotonVertexDecorator.h:68
DerivationFramework::DiphotonVertexDecorator::m_tcMatch_dR
double m_tcMatch_dR
Definition: DiphotonVertexDecorator.h:70
xAOD::P4Helpers::isInDeltaR
bool isInDeltaR(const xAOD::IParticle &p1, const xAOD::IParticle &p2, double dR, bool useRapidity=true)
Check if 2 xAOD::IParticle are in a cone.
Definition: xAODP4Helpers.h:174
xAOD::IParticle::e
virtual double e() const =0
The total energy of the particle.
xAOD::Egamma_v1::passSelection
bool passSelection(bool &value, const std::string &menu) const
Check if the egamma object pass a selection menu (using the name) If the menu decision is stored in t...
xAOD::Egamma_v1::isGoodOQ
bool isGoodOQ(uint32_t mask) const
Check object quality. Return True is it is Good Object Quality.
Definition: Egamma_v1.cxx:236