55 {
56
57 std::vector<const xAOD::TrackParticle*> tauTracks;
58 std::vector<const xAOD::TrackParticle*> wideTracks;
59 std::vector<const xAOD::TrackParticle*> otherTracks;
60
61
63
65 if (!trackPartInHandle.isValid()) {
66 ATH_MSG_ERROR (
"Could not retrieve HiveDataObj with key " << trackPartInHandle.key());
67 return StatusCode::FAILURE;
68 }
69 trackParticleCont = trackPartInHandle.cptr();
70
71
73 std::vector<const xAOD::TrackParticle*> vecTrksLargeD0;
76 if (!trackPartInHandle.isValid()) {
77 ATH_MSG_VERBOSE (
"Could not retrieve HiveDataObj with key " << trackPartInHandle.key());
78 ATH_MSG_VERBOSE (
"LRT container " << trackPartInHandle.key()<<
" is not being used for tau tracks");
79 }
80 else {
81 largeD0TracksParticleCont = trackPartInHandle.cptr();
82 vecTrksLargeD0 = std::vector<const xAOD::TrackParticle*>(largeD0TracksParticleCont->
begin(), largeD0TracksParticleCont->
end());
83 }
84 }
85
86
87
88
91 SG::ReadHandle<xAOD::JetContainer> jetContHandle(
m_jetContainer, ctx );
92 if (!jetContHandle.isValid()) {
93 ATH_MSG_ERROR (
"Could not retrieve HiveDataObj with key " << jetContHandle.key());
94 return StatusCode::FAILURE;
95 }
96 jetContainer = jetContHandle.cptr();
97 }
98
99 std::vector<const xAOD::TrackParticle*> vecTrks;
100 vecTrks.reserve( trackParticleCont->
size() );
101 for (auto trk : *trackParticleCont){
102 if (!
inEleRM()) { vecTrks.push_back(trk); }
103 else{
105 auto original_id_track_link = acc_originalObject(*trk);
106 if (!original_id_track_link.isValid()) {
108 continue;
109 }
110 vecTrks.push_back(*original_id_track_link);
111 }
112 }
113
114
116
117
118
119
121
122 bool foundLRTCont =
bool (largeD0TracksParticleCont !=
nullptr);
123
124 if (foundLRTCont){
125
126 getTauTracksFromPV(pTau, vecTrksLargeD0, pVertex,
false,
nullptr, tauTracks, wideTracks, otherTracks);
127 }
128
129
132 }
133
135 bool alreadyUsed = false;
136 for (std::vector<const xAOD::TrackParticle*>::iterator track_it = tauTracks.begin(); track_it != tauTracks.end() ;)
137 {
138 alreadyUsed = false;
139
141
143 if( (*track_it) == tau_trk->track()) alreadyUsed = true;
144 }
145
146 if(alreadyUsed) {
147 ATH_MSG_INFO(
"Found Already Used track new, now removing: " << *track_it );
148 track_it = tauTracks.erase(track_it);
149 } else ++track_it;
150 }
151 }
152
153
155 for (
unsigned int i = 0;
i < tauTracks.size(); ++
i) {
157
159 <<
" eta " << trackParticle->
eta()
160 <<
" phi " << trackParticle->
phi());
161
163
165 tauTrackCon.push_back(track);
166
167 ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
171 }
172 else {
174 }
175 track->addTrackLink(linkToTrackParticle);
176
177 track->setP4(trackParticle->
pt(), trackParticle->
eta(), trackParticle->
phi(), trackParticle->
m());
180
183
187
190 <<
" phi " << pTau.
track(i)->
phi());
191 }
192
194
195 for (
unsigned int i = 0;
i < wideTracks.size(); ++
i) {
197
199 <<
" eta " << trackParticle->
eta()
200 <<
" phi " << trackParticle->
phi());
201
203 tauTrackCon.push_back(track);
204
205 ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
209 }
210 else {
212 }
213 track->addTrackLink(linkToTrackParticle);
214
215 track->setP4(trackParticle->
pt(), trackParticle->
eta(), trackParticle->
phi(), trackParticle->
m());
218
222
226 }
227
228
231
232 for (
unsigned int i = 0;
i < otherTracks.size(); ++
i) {
234
236 <<
" eta " << trackParticle->
eta()
237 <<
" phi " << trackParticle->
phi());
238
240 tauTrackCon.push_back(track);
241
242 ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
246 }
247 else {
250 }
251 track->addTrackLink(linkToTrackParticle);
252
253 track->setP4(trackParticle->
pt(), trackParticle->
eta(), trackParticle->
phi(), trackParticle->
m());
254 float dR =
track->p4().DeltaR(pTau.
p4());
258
262 }
263
265
267
270
271
273
275 vxbkp.makePrivateStore();
276
277
280 }
283
284 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle {
m_beamSpotKey, ctx };
287 const auto&
cov = beamSpotHandle->beamVtx().covariancePosition();
289
290 if(!tauTracks.empty()) {
291 vxbkp.
setZ(tauTracks.at(0)->z0());
292 }
293 }
294 else {
296 }
297 vxcand = & vxbkp;
298 }
299
300
301
302 static const SG::Accessor<float> dec_d0TJVA("d0TJVA");
303 static const SG::Accessor<float> dec_z0sinthetaTJVA("z0sinthetaTJVA");
304 static const SG::Accessor<float> dec_d0SigTJVA("d0SigTJVA");
305 static const SG::Accessor<float> dec_z0sinthetaSigTJVA("z0sinthetaSigTJVA");
306
308 {
309 assert (trackLink.getStorableObjectPointer() == &tauTrackCon);
311 dec_d0TJVA(*track) =
track->track()->d0();
312 dec_z0sinthetaTJVA(*track) =
track->z0sinThetaTJVA(pTau);
313 dec_d0SigTJVA(*track) = -999.;
314 dec_z0sinthetaSigTJVA(*track) = -999.;
315
316
317 if(vxcand) {
318 std::unique_ptr<const Trk::ImpactParametersAndSigma> myIPandSigma
320
321 if(myIPandSigma) {
322 dec_d0TJVA(*track) = myIPandSigma->IPd0;
323 dec_z0sinthetaTJVA(*track) = myIPandSigma->IPz0SinTheta;
324 dec_d0SigTJVA(*track) = (myIPandSigma->sigmad0 != 0.) ? static_cast<float>( myIPandSigma->IPd0 / myIPandSigma->sigmad0 ) : -999.f;
325 dec_z0sinthetaSigTJVA(*track) = (myIPandSigma->sigmaz0SinTheta != 0.) ? static_cast<float>( myIPandSigma->IPz0SinTheta / myIPandSigma->sigmaz0SinTheta ) : -999.f;
326 }
327 }
328 }
329
330 return StatusCode::SUCCESS;
331}
ElementLink()
Default constructor.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
double charge(const T &p)
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
bool toContainedElement(BaseConstReference container, ElementType element)
Set link to point to given element (slowest).
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackPartInputContainer
void getTauTracksFromPV(const xAOD::TauJet &tauJet, const std::vector< const xAOD::TrackParticle * > &vecTrackParticles, const xAOD::Vertex *primaryVertex, const bool &useGhostTracks, const xAOD::JetContainer *jetContainer, std::vector< const xAOD::TrackParticle * > &tauTracks, std::vector< const xAOD::TrackParticle * > &wideTracks, std::vector< const xAOD::TrackParticle * > &otherTracks) const
ToolHandle< Trk::ITrackToVertexIPEstimator > m_trackToVertexIPEstimator
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainer
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_largeD0TracksInputContainer
Gaudi::Property< float > m_z0maxDelta
Gaudi::Property< double > m_maxJetDr_tau
Gaudi::Property< bool > m_useGhostTracks
void removeOffsideTracksWrtLeadTrk(const EventContext &ctx, std::vector< const xAOD::TrackParticle * > &tauTracks, std::vector< const xAOD::TrackParticle * > &wideTracks, std::vector< const xAOD::TrackParticle * > &otherTracks, const xAOD::Vertex *tauOrigin, double maxDeltaZ0) const
Gaudi::Property< bool > m_removeDuplicateCoreTracks
bool isLargeD0Track(const xAOD::TrackParticle *track) const
virtual FourMom_t p4() const
The full 4-momentum of the particle.
const TauTrack * track(size_t i, TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged, int *container_index=0) const
Get the pointer to a given tauTrack associated with this tau /*container index needed by trackNonCons...
void setDetail(TauJetParameters::Detail detail, int value)
const Vertex * vertex() const
size_t nAllTracks() const
const TauTrackLinks_t & allTauTrackLinks() const
void addTauTrackLink(const ElementLink< TauTrackContainer > &tr)
add a TauTrack to the tau
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double m() const override final
The invariant mass of the particle..
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
float charge() const
Returns the charge.
void setCovariancePosition(const AmgSymMatrix(3)&covariancePosition)
Sets the vertex covariance matrix.
void setZ(float value)
Sets the z position.
void setX(float value)
Sets the x position.
void setY(float value)
Sets the y position.
void setPosition(const Amg::Vector3D &position)
Sets the 3-position.
VxType::VertexType vertexType() const
The type of the vertex.
SG::ConstAccessor< T, ALLOC > ConstAccessor
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TauTrack_v1 TauTrack
Definition of the current version.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
setBGCode setTAP setLVL2ErrorBits bool
JetContainer_v1 JetContainer
Definition of the current "jet container version".