Skip to content
Snippets Groups Projects
Commit fc538155 authored by Guillermo Nicolas Hamity's avatar Guillermo Nicolas Hamity
Browse files

support LRT in tau reconstruction (ATLTAU-1721)

Changed TauTrackFinder to use collection of standard
+ LRT tracks by combining collections in a ConstDataVector
parent 630b82d0
Branches master
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@
#include "TauTrackFinder.h"
#include "tauRecTools/TrackSort.h"
#include "AthContainers/ConstDataVector.h"
TauTrackFinder::TauTrackFinder(const std::string& name) :
TauRecToolBase(name) {
......@@ -36,6 +37,8 @@ StatusCode TauTrackFinder::initialize() {
ATH_CHECK( m_trackPartInputContainer.initialize(SG::AllowEmpty) );
// use CaloExtensionTool when key is empty
ATH_CHECK( m_ParticleCacheKey.initialize(SG::AllowEmpty) );
// allow empty for LRT
ATH_CHECK( m_LRTInputContainer.initialize(SG::AllowEmpty) );
return StatusCode::SUCCESS;
}
......@@ -46,7 +49,8 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrack
std::vector<const xAOD::TrackParticle*> tauTracks;
std::vector<const xAOD::TrackParticle*> wideTracks;
std::vector<const xAOD::TrackParticle*> otherTracks;
//Retrieve standard tracking for offline
const xAOD::TrackParticleContainer* trackParticleCont = nullptr;
if (! m_trackPartInputContainer.empty()) { // MT version of trigger or offline
......@@ -67,12 +71,46 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrack
}
}
//Retrieve LRT tracking container
const xAOD::TrackParticleContainer* LRTParticleCont = nullptr;
if (! m_LRTInputContainer.empty()) { // MT version of trigger or offline
SG::ReadHandle<xAOD::TrackParticleContainer> trackPartInHandle( m_LRTInputContainer );
if (!trackPartInHandle.isValid()) {
ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << trackPartInHandle.key());
return StatusCode::FAILURE;
}
LRTParticleCont = trackPartInHandle.cptr();
}
else { // coule be possible if no LRT, or in trigger
if (trackContainer != nullptr) {
LRTParticleCont = trackContainer;
}
else {
ATH_MSG_WARNING("No track container found");
//return StatusCode::FAILURE;
}
}
// get the primary vertex
const xAOD::Vertex* pVertex = pTau.vertexLink() ? pTau.vertex() : nullptr;
//Combine ST and LRT particles into single container
std::unique_ptr<ConstDataVector<xAOD::TrackParticleContainer>> candidateTracks = std::make_unique<ConstDataVector<xAOD::TrackParticleContainer>> (SG::VIEW_ELEMENTS);
if (trackParticleCont != nullptr){
for (const xAOD::TrackParticle *track : *trackParticleCont) {
candidateTracks->push_back (track);
}
}
if (LRTParticleCont != nullptr){
for (const xAOD::TrackParticle *track: *LRTParticleCont) {
candidateTracks->push_back (track);
}
}
// retrieve tracks wrt a vertex
// as a vertex is used: tau origin / PV / beamspot / 0,0,0 (in this order, depending on availability)
getTauTracksFromPV(pTau, *trackParticleCont, pVertex, tauTracks, wideTracks, otherTracks);
getTauTracksFromPV(pTau, *candidateTracks->asDataVector(), pVertex, tauTracks, wideTracks, otherTracks);
// remove core and wide tracks outside a maximal delta z0 wrt lead core track
if (m_applyZ0cut) {
......@@ -112,7 +150,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrack
tauTrackCon.push_back(track);
ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
linkToTrackParticle.toContainedElement(*trackParticleCont, trackParticle);
linkToTrackParticle.toContainedElement(*candidateTracks->asDataVector(), trackParticle);
track->addTrackLink(linkToTrackParticle);
track->setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
......@@ -146,7 +184,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrack
tauTrackCon.push_back(track);
ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
linkToTrackParticle.toContainedElement(*trackParticleCont, trackParticle);
linkToTrackParticle.toContainedElement(*candidateTracks->asDataVector(), trackParticle);
track->addTrackLink(linkToTrackParticle);
track->setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
......@@ -179,7 +217,7 @@ StatusCode TauTrackFinder::executeTrackFinder(xAOD::TauJet& pTau, xAOD::TauTrack
tauTrackCon.push_back(track);
ElementLink<xAOD::TrackParticleContainer> linkToTrackParticle;
linkToTrackParticle.toContainedElement(*trackParticleCont, trackParticle);
linkToTrackParticle.toContainedElement(*candidateTracks->asDataVector(), trackParticle);
track->addTrackLink(linkToTrackParticle);
track->setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
......
......@@ -111,6 +111,7 @@ private:
Gaudi::Property<bool> m_bypassExtrapolator {this, "BypassExtrapolator", false};
SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackPartInputContainer{this,"Key_trackPartInputContainer", "InDetTrackParticles", "input track particle container key"};
SG::ReadHandleKey<xAOD::TrackParticleContainer> m_LRTInputContainer{this,"Key_LRTInputContainer", "InDetLargeD0TrackParticles", "input LRT particle container key"};
std::set<CaloSampling::CaloSample> m_EMSamplings;
std::set<CaloSampling::CaloSample> m_HadSamplings;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment