ATLAS Offline Software
Z0PVTrackComaptibilityEstimator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 
8 #include "TrkTrack/Track.h"
9 
11 
13 
15 
16 
17 
18 namespace Trk{
19 
21  const std::string& name,
22  const IInterface* parent) :
24  m_ipEstimator("Trk::TrackToVertexIPEstimator"),
25  m_z0SignificanceMax(30.)
26  {
27  declareInterface< Z0PVTrackCompatibilityEstimator >(this);
28  declareProperty("IPEstimator", m_ipEstimator, "Impact parameter estimator tool");
29  declareProperty("Z0SignificanceMax", m_z0SignificanceMax);
30  }
31 
33 
34 
36 
37  ATH_MSG_INFO( "Initializing Z0PVTrackCompatibilityEstimator" );
38 
39  StatusCode sc = m_ipEstimator.retrieve();
40  if( !sc.isSuccess() ){
41  msg(MSG::FATAL) << "Unable to retrieve impact parameter estimator tool" << endmsg;
42  return sc;
43  }
44 
45  return StatusCode::SUCCESS;
46  }
47 
48 
50 
51  ATH_MSG_INFO( "Finalizing Z0PVTrackCompatibilityEstimator" );
52 
53  return StatusCode::SUCCESS;
54  }
55 
56 
57 
59  const xAOD::VertexContainer* primaryVertexContainer, unsigned int index) const{
60 
61  return isCompatible( &(track->perigeeParameters()), primaryVertexContainer, index );
62  }
63 
65  const xAOD::VertexContainer* primaryVertexContainer, unsigned int index) const{
66 
67  // TODO: do we want to doRemoval here? (I have it as false for now)
68  std::unique_ptr<ImpactParametersAndSigma> ip = m_ipEstimator->estimate(track, track, (*primaryVertexContainer)[index], false);
69 
70  bool pileup = false;
71 
72  double sumptPV = 0;
73 
74  /*
75  for(std::vector<Trk::VxTrackAtVertex*>::const_iterator track =
76  (*primaryVertexContainer)[index]->vxTrackAtVertex()->begin();
77  track != (*primaryVertexContainer)[index]->vxTrackAtVertex()->end(); ++track){
78 
79  sumptPV += (*track)->initialPerigee()->momentum().perp();
80  }
81  */
82 
83  // TODO: perhaps calculate sumptPV using VxTracksAtVertex in xAOD::Vertex? -David S.
84  for(unsigned int i = 0; i < (*primaryVertexContainer)[index]->nTrackParticles(); ++i){
85 
86  sumptPV += (*primaryVertexContainer)[index]->trackParticle(i)->perigeeParameters().momentum().perp();
87  }
88 
89  for(unsigned int i = 0; i < primaryVertexContainer->size(); i++){
90 
91  double sumpt = 0.;
92 
93  if( i != index &&
94  (*primaryVertexContainer)[i]->vertexType() != xAOD::VxType::NoVtx ){
95  /*
96  for(std::vector<Trk::VxTrackAtVertex*>::const_iterator track =
97  (*primaryVertexContainer)[i]->vxTrackAtVertex()->begin();
98  track != (*primaryVertexContainer)[i]->vxTrackAtVertex()->end(); ++track){
99 
100  sumpt += (*track)->initialPerigee()->momentum().perp();
101  }
102  */
103 
104  // TODO: perhaps calculate sumptPV using VxTracksAtVertex in xAOD::Vertex? -David S.
105  for(unsigned int itrk = 0; itrk < (*primaryVertexContainer)[i]->nTrackParticles(); ++itrk){
106 
107  sumpt += (*primaryVertexContainer)[i]->trackParticle(itrk)->perigeeParameters().momentum().perp();
108  }
109  double vxReach =
110  std::abs((*primaryVertexContainer)[i]->position().z()
111  - (*primaryVertexContainer)[index]->position().z()) * sumpt / (sumpt + sumptPV);
112 
113  if(std::abs(ip->IPz0 + (*primaryVertexContainer)[index]->position().z() -
114  (*primaryVertexContainer)[i]->position().z()) < vxReach){
115 
116  pileup = true;
117  }
118  }
119  }
120 
121  return std::abs(ip->IPz0) / ip->sigmaz0 < m_z0SignificanceMax && !pileup;
122  }
123 
124 
125  StatusCode Z0PVTrackCompatibilityEstimator::queryInterface(const InterfaceID& riid, void** ppvIf){
126  if(interfaceID() == riid){
127  *ppvIf = dynamic_cast< Z0PVTrackCompatibilityEstimator* > (this);
128  }
130  *ppvIf = dynamic_cast< IPVTrackCompatibilityEstimator* > (this);
131  }
132  else{
133  return AthAlgTool::queryInterface(riid, ppvIf);
134  }
135 
136  addRef();
137  return StatusCode::SUCCESS;
138  }
139 
140 }
Trk::Z0PVTrackCompatibilityEstimator::interfaceID
static const InterfaceID & interfaceID()
Definition: Z0PVTrackCompatibilityEstimator.h:70
TrackParameters.h
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:63
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
index
Definition: index.py:1
Trk::Z0PVTrackCompatibilityEstimator::m_z0SignificanceMax
double m_z0SignificanceMax
Definition: Z0PVTrackCompatibilityEstimator.h:65
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::Z0PVTrackCompatibilityEstimator::initialize
virtual StatusCode initialize()
Definition: Z0PVTrackComaptibilityEstimator.cxx:35
TrackParticleBase.h
xAOD::VxType::NoVtx
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Definition: TrackingPrimitives.h:570
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Track.h
Trk::Z0PVTrackCompatibilityEstimator::Z0PVTrackCompatibilityEstimator
Z0PVTrackCompatibilityEstimator(const std::string &type, const std::string &name, const IInterface *parent)
Definition: Z0PVTrackComaptibilityEstimator.cxx:20
lumiFormat.i
int i
Definition: lumiFormat.py:92
Trk::Z0PVTrackCompatibilityEstimator::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvIf)
Definition: Z0PVTrackComaptibilityEstimator.cxx:125
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
test_pyathena.parent
parent
Definition: test_pyathena.py:15
VxTrackAtVertex.h
Trk::IPVTrackCompatibilityEstimator
Definition: IPVTrackCompatibilityEstimator.h:38
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
Trk::IPVTrackCompatibilityEstimator::interfaceID
static const InterfaceID & interfaceID()
Definition: IPVTrackCompatibilityEstimator.h:44
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::Z0PVTrackCompatibilityEstimator::m_ipEstimator
ToolHandle< Trk::ITrackToVertexIPEstimator > m_ipEstimator
Definition: Z0PVTrackCompatibilityEstimator.h:63
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
Trk::Z0PVTrackCompatibilityEstimator::finalize
virtual StatusCode finalize()
Definition: Z0PVTrackComaptibilityEstimator.cxx:49
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
dqt_zlumi_pandas.pileup
pileup
Definition: dqt_zlumi_pandas.py:185
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Trk::Z0PVTrackCompatibilityEstimator::isCompatible
bool isCompatible(const xAOD::TrackParticle *track, const xAOD::VertexContainer *pvContainer, unsigned int pvIndex=0) const
Definition: Z0PVTrackComaptibilityEstimator.cxx:58
Z0PVTrackCompatibilityEstimator.h
xAOD::vertexType
vertexType
Definition: Vertex_v1.cxx:166
DeMoScan.index
string index
Definition: DeMoScan.py:362
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
AthAlgTool
Definition: AthAlgTool.h:26
Trk::Z0PVTrackCompatibilityEstimator::~Z0PVTrackCompatibilityEstimator
virtual ~Z0PVTrackCompatibilityEstimator()
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Trk::Z0PVTrackCompatibilityEstimator
Z0PVTrackCompatibilityEstimator.h.
Definition: Z0PVTrackCompatibilityEstimator.h:44