Skip to content
Snippets Groups Projects
Commit b272e934 authored by Adam Edward Barton's avatar Adam Edward Barton :speech_balloon:
Browse files

Merge branch 'R22_TauVertexVariablesAOD' into 'master'

tauRecTools: adapt TauVertexVariables to rerun on xAOD

See merge request atlas/athena!36793
parents 7d51e25c e272503c
No related branches found
No related tags found
6 merge requests!58791DataQualityConfigurations: Modify L1Calo config for web display,!46784MuonCondInterface: Enable thread-safety checking.,!46776Updated LArMonitoring config file for WD to match new files produced using MT,!45405updated ART test cron job,!42417Draft: DIRE and VINCIA Base Fragments for Pythia 8.3,!36793tauRecTools: adapt TauVertexVariables to rerun on xAOD
...@@ -123,31 +123,56 @@ StatusCode TauVertexVariables::executeVertexVariables(xAOD::TauJet& pTau, xAOD:: ...@@ -123,31 +123,56 @@ StatusCode TauVertexVariables::executeVertexVariables(xAOD::TauJet& pTau, xAOD::
pTau.setDetail(xAOD::TauJetParameters::trFlightPathSig, (float)(-1111.)); pTau.setDetail(xAOD::TauJetParameters::trFlightPathSig, (float)(-1111.));
//try to find secondary vertex if more than 1 track and the tau vertex is available // try to find secondary vertex if more than 1 track and the tau vertex is available
if ( pTau.nTracks() < 2 || !pTau.vertexLink().isValid() ) { if ( pTau.nTracks() < 2 || !pTau.vertexLink().isValid() ) {
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
// get xAOD TrackParticles and Trk::Tracks // xAOD TrackParticles
std::vector<const xAOD::TrackParticle*> xaodTracks; std::vector<const xAOD::TrackParticle*> xaodTracks;
// standard reconstruction uses Trk::Tracks in SeedFinder
std::vector<const Trk::Track*> origTracks; std::vector<const Trk::Track*> origTracks;
// reconstruction from xAOD uses Trk::TrackParameters (Trk::Track not available)
std::vector<const Trk::TrackParameters*> origTrackParameters;
for (unsigned i = 0; i < pTau.nTracks(); ++i) { for (unsigned i = 0; i < pTau.nTracks(); ++i) {
xaodTracks.push_back(pTau.track(i)->track()); xaodTracks.push_back(pTau.track(i)->track());
ATH_MSG_VERBOSE("xAOD::TrackParticle " <<i<<": "<< pTau.track(i)->pt() << " " << pTau.track(i)->eta() << " " << pTau.track(i)->phi());
if (pTau.track(i)->track()) { if (pTau.track(i)->track()) {
origTracks.push_back(pTau.track(i)->track()->track()); if(pTau.track(i)->track()->track()) {
origTracks.push_back(pTau.track(i)->track()->track());
}
else {
const Trk::Perigee& perigee = pTau.track(i)->track()->perigeeParameters();
origTrackParameters.push_back(static_cast<const Trk::TrackParameters*>(&perigee));
}
} }
else { else {
ATH_MSG_WARNING("no Trk::Track for xAOD::TrackParticle"); ATH_MSG_WARNING("No TrackParticle found.");
} }
} }
// get the starting point for the fit using Trk::Tracks // origTrackParameters should be empty in standard reconstruction, origTracks should be empty when re-running from xAOD
const Amg::Vector3D& seedPoint = m_SeedFinder->findSeed(origTracks); if(origTracks.size()>0 && origTrackParameters.size()>0) {
ATH_MSG_VERBOSE("seedPoint x/y/perp=" << seedPoint.x() << " " << seedPoint.y() << " "<< seedPoint.z() << " " << std::sqrt(seedPoint.x()*seedPoint.x()+seedPoint.y()+seedPoint.y())); ATH_MSG_ERROR("Inconsistent mix of Trk::Track and Trk::TrackParameter");
return StatusCode::FAILURE;
}
xAOD::Vertex* xAODvertex = nullptr;
if(origTracks.size() > 0) {
// get the starting point for the fit using Trk::Tracks
const Amg::Vector3D& seedPoint = m_SeedFinder->findSeed(origTracks);
// fitting the vertex
xAODvertex = m_fitTool->fit(xaodTracks, seedPoint);
}
else if (origTrackParameters.size() > 0) {
// get the starting point for the fit using Trk::TrackParameters
const Amg::Vector3D& seedPoint = m_SeedFinder->findSeed(origTrackParameters);
// fitting the vertex
xAODvertex = m_fitTool->fit(xaodTracks, seedPoint);
}
// fitting the vertex itself
xAOD::Vertex* xAODvertex = m_fitTool->fit(xaodTracks, seedPoint);
if (!xAODvertex) { if (!xAODvertex) {
ATH_MSG_WARNING("no secondary vertex found!"); ATH_MSG_WARNING("no secondary vertex found!");
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
...@@ -163,7 +188,7 @@ StatusCode TauVertexVariables::executeVertexVariables(xAOD::TauJet& pTau, xAOD:: ...@@ -163,7 +188,7 @@ StatusCode TauVertexVariables::executeVertexVariables(xAOD::TauJet& pTau, xAOD::
ATH_MSG_VERBOSE("secondary vertex recorded! x="<<xAODvertex->position().x()<< ", y="<<xAODvertex->position().y()<<", perp="<<xAODvertex->position().perp()); ATH_MSG_VERBOSE("secondary vertex recorded! x="<<xAODvertex->position().x()<< ", y="<<xAODvertex->position().y()<<", perp="<<xAODvertex->position().perp());
pSecVtxContainer.push_back(xAODvertex); pSecVtxContainer.push_back(xAODvertex);
xAODvertex->setVertexType(xAOD::VxType::NotSpecified); xAODvertex->setVertexType(xAOD::VxType::NotSpecified);
pTau.setSecondaryVertex(&pSecVtxContainer, xAODvertex); // set the link to the vertex pTau.setSecondaryVertex(&pSecVtxContainer, xAODvertex);
} }
else { else {
delete xAODvertex; // delete the vertex when in trigger mode, because we can not save it delete xAODvertex; // delete the vertex when in trigger mode, because we can not save it
......
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