39 ATH_MSG_ERROR (
"Ghost matching is not a valid tau-track association scheme for trigger, use cone association. Aborting.");
40 return StatusCode::FAILURE;
49 return StatusCode::SUCCESS;
54 const EventContext& ctx,
57 std::vector<const xAOD::TrackParticle*> tauTracks;
58 std::vector<const xAOD::TrackParticle*> wideTracks;
59 std::vector<const xAOD::TrackParticle*> otherTracks;
65 if (!trackPartInHandle.
isValid()) {
66 ATH_MSG_ERROR (
"Could not retrieve HiveDataObj with key " << trackPartInHandle.
key());
67 return StatusCode::FAILURE;
69 trackParticleCont = trackPartInHandle.
cptr();
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");
81 largeD0TracksParticleCont = trackPartInHandle.
cptr();
82 vecTrksLargeD0 = std::vector<const xAOD::TrackParticle*>(largeD0TracksParticleCont->
begin(), largeD0TracksParticleCont->
end());
93 ATH_MSG_ERROR (
"Could not retrieve HiveDataObj with key " << jetContHandle.
key());
94 return StatusCode::FAILURE;
96 jetContainer = jetContHandle.
cptr();
99 std::vector<const xAOD::TrackParticle*> vecTrks;
100 vecTrks.reserve( trackParticleCont->
size() );
101 for (
auto trk : *trackParticleCont){
102 if (!
inEleRM()) { vecTrks.push_back(trk); }
105 auto original_id_track_link = acc_originalObject(*trk);
106 if (!original_id_track_link.isValid()) {
110 vecTrks.push_back(*original_id_track_link);
122 bool foundLRTCont = bool (largeD0TracksParticleCont !=
nullptr);
126 getTauTracksFromPV(pTau, vecTrksLargeD0, pVertex,
false,
nullptr, tauTracks, wideTracks, otherTracks);
135 bool alreadyUsed =
false;
136 for (std::vector<const xAOD::TrackParticle*>::iterator track_it = tauTracks.begin(); track_it != tauTracks.end() ;)
143 if( (*track_it) == tau_trk->track()) alreadyUsed =
true;
147 ATH_MSG_INFO(
"Found Already Used track new, now removing: " << *track_it );
148 track_it = tauTracks.erase(track_it);
155 for (
unsigned int i = 0; i < tauTracks.size(); ++i) {
159 <<
" eta " << trackParticle->
eta()
160 <<
" phi " << trackParticle->
phi());
175 track->addTrackLink(linkToTrackParticle);
177 track->setP4(trackParticle->
pt(), trackParticle->
eta(), trackParticle->
phi(), trackParticle->
m());
190 <<
" phi " << pTau.
track(i)->
phi());
195 for (
unsigned int i = 0; i < wideTracks.size(); ++i) {
199 <<
" eta " << trackParticle->
eta()
200 <<
" phi " << trackParticle->
phi());
213 track->addTrackLink(linkToTrackParticle);
215 track->setP4(trackParticle->
pt(), trackParticle->
eta(), trackParticle->
phi(), trackParticle->
m());
232 for (
unsigned int i = 0; i < otherTracks.size(); ++i) {
236 <<
" eta " << trackParticle->
eta()
237 <<
" phi " << trackParticle->
phi());
251 track->addTrackLink(linkToTrackParticle);
253 track->setP4(trackParticle->
pt(), trackParticle->
eta(), trackParticle->
phi(), trackParticle->
m());
254 float dR = track->p4().DeltaR(pTau.
p4());
275 vxbkp.makePrivateStore();
287 const auto& cov = beamSpotHandle->beamVtx().covariancePosition();
290 if(!tauTracks.empty()) {
291 vxbkp.
setZ(tauTracks.at(0)->z0());
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.;
318 std::unique_ptr<const Trk::ImpactParametersAndSigma> 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;
330 return StatusCode::SUCCESS;
339 double dR = pTau.
p4().DeltaR(trackParticle.
p4());
356 const std::vector<const xAOD::TrackParticle*>& vecTrackParticles,
358 const bool& useGhostTracks,
360 std::vector<const xAOD::TrackParticle*> &tauTracks,
361 std::vector<const xAOD::TrackParticle*> &wideTracks,
362 std::vector<const xAOD::TrackParticle*> &otherTracks)
const
364 std::vector<const xAOD::TrackParticle*> ghostTracks;
376 for (
uint i = 0; i < ghostTracks.size(); i++){
377 auto original_id_track_link = acc_originalTrack(*(ghostTracks[i]));
378 if (!original_id_track_link.isValid()) {
382 ghostTracks[i] = *original_id_track_link;
392 double dR = pTau.
p4().DeltaR(trackParticle->p4());
394 if (std::find(ghostTracks.begin(), ghostTracks.end(), trackParticle) == ghostTracks.end()) {
398 bool isSeedClosest =
false;
401 TLorentzVector jetLV;
402 jetLV.SetPtEtaPhiM(jetP4.Pt(), jetP4.Eta(), jetP4.Phi(), jetP4.M());
403 double dRjet = trackParticle->p4().DeltaR(jetLV);
406 isSeedClosest = (
jet == pTau.
jet());
409 if(!isSeedClosest)
continue;
415 tauTracks.push_back(trackParticle);
417 wideTracks.push_back(trackParticle);
419 otherTracks.push_back(trackParticle);
428 std::vector<const xAOD::TrackParticle*> &tauTracks,
429 std::vector<const xAOD::TrackParticle*> &wideTracks,
430 std::vector<const xAOD::TrackParticle*> &otherTracks,
432 double maxDeltaZ0)
const
437 if (tauTracks.empty())
return;
441 float z0_leadTrk =
getZ0(ctx, leadTrack, tauOrigin);
443 if (z0_leadTrk >
MAX-1)
return;
445 ATH_MSG_VERBOSE(
"before z0 cut: #coreTracks=" << tauTracks.size() <<
", #wideTracks=" << wideTracks.size() <<
", #otherTracks=" << otherTracks.size());
447 std::vector<const xAOD::TrackParticle*>::iterator itr;
450 itr = tauTracks.begin()+1;
451 while (itr!=tauTracks.end()) {
452 float z0 =
getZ0(ctx, *itr, tauOrigin);
453 float deltaZ0=z0 - z0_leadTrk;
456 if ( std::abs(deltaZ0) < maxDeltaZ0 ) {++itr;}
458 otherTracks.push_back(*itr);
459 itr = tauTracks.erase(itr);
464 itr = wideTracks.begin();
465 while (itr!=wideTracks.end()) {
466 float z0 =
getZ0(ctx, *itr, tauOrigin);
467 float deltaZ0=z0 - z0_leadTrk;
470 if ( std::abs(deltaZ0) < maxDeltaZ0 ) { ++itr; }
472 otherTracks.push_back(*itr);
473 itr = wideTracks.erase(itr);
477 ATH_MSG_VERBOSE(
"after z0 cut: #coreTracks=" << tauTracks.size() <<
", #wideTracks=" << wideTracks.size() <<
", #otherTracks=" << otherTracks.size());
490 if (!track)
return MAX;
492 std::unique_ptr<Trk::Perigee> perigee;
493 if (vertex) perigee =
m_trackToVertexTool->perigeeAtVertex(ctx, *track, vertex->position());
501 return static_cast<float>(perigee->parameters()[
Trk::z0]);
506 const std::bitset<xAOD::NumberOfTrackRecoInfo> patternReco = track->patternRecoInfo();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
double charge(const T &p)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
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.
ElementLink implementation for ROOT usage.
bool toContainedElement(BaseConstReference container, ElementType element)
Set link to point to given element (slowest).
Helper class to provide type-safe access to aux data.
Helper class to provide constant type-safe access to aux data.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
virtual const std::string & key() const override final
Return the StoreGate ID for the referenced object.
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackPartInputContainer
TauTrackType tauTrackType(const xAOD::TauJet &tauJet, const xAOD::TrackParticle &trackParticle, const xAOD::Vertex *primaryVertex) const
Gaudi::Property< double > m_ghostTrackDR
virtual StatusCode initialize() override
Algorithm functions.
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
TauTrackType
Enumerator defining type of tau track.
ToolHandle< Trk::ITrackSelectorTool > m_trackSelectorTool_tau
tools
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_largeD0TracksInputContainer
Gaudi::Property< double > m_maxJetDr_wide
Gaudi::Property< float > m_z0maxDelta
virtual StatusCode executeTool(xAOD::TauJet &pTau, const EventContext &ctx, xAOD::TauTrackContainer &tauTrackCon) const override
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
TauTrackFinder(const std::string &name)
Constructor and Destructor.
float getZ0(const EventContext &ctx, const xAOD::TrackParticle *track, const xAOD::Vertex *vertex) const
Some internally used functions.
Gaudi::Property< bool > m_removeDuplicateCoreTracks
bool isLargeD0Track(const xAOD::TrackParticle *track) const
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
Helper method to sort tracks.
std::vector< const T * > getAssociatedObjects(const std::string &name) const
get associated objects as a vector<object> this compact form throws an exception if the object is not...
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 FourMom_t p4() const override final
The full 4-momentum 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.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Jet_v1 Jet
Definition of the current "jet version".
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.
TauJet_v3 TauJet
Definition of the current "tau version".
@ JetConstitScaleMomentum
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
TauTrackContainer_v1 TauTrackContainer
Definition of the current TauTrack container version.
JetContainer_v1 JetContainer
Definition of the current "jet container version".
@ SiSpacePointsSeedMaker_LargeD0
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.