diff --git a/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx b/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx index 9ad3a57caf1d377dbe406fb0d029319f41404dba..a3f7182c81756c4b24e5da2aea07a10b89c757f7 100644 --- a/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx +++ b/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx @@ -31,6 +31,7 @@ #include "VxVertex/VxTrackAtVertex.h" #include "TrkTrackLink/ITrackLink.h" #include "TrkLinks/LinkToXAODTrackParticle.h" +#include "TrkLinks/LinkToXAODNeutralParticle.h" #include "TrkVertexFitterInterfaces/IVertexLinearizedTrackFactory.h" @@ -149,6 +150,19 @@ StatusCode VxCandidateXAODVertex::finalize() //push back into collection tavCollection.push_back(tav); }//end of loop over all tracks + //Same for neutrals + for (auto t : xAODVx.neutralParticleLinks()) { + Trk::VxTrackAtVertex *tav = new VxTrackAtVertex(); + //create ITrackLink to xAOD::NeutralParticle + Trk::LinkToXAODNeutralParticle *elNeutralParticle = new Trk::LinkToXAODNeutralParticle( t ); + tav->setOrigTrack(elNeutralParticle); + //linearize with respect to given vertex (do we need/want it here?) + Trk::Vertex myVtx(xAODVx.position()); + Trk::LinearizedTrack* myLinearizedTrack=m_LinearizedTrackFactory->linearizedTrack(elNeutralParticle->neutralParameters(),myVtx); + tav->setLinTrack(myLinearizedTrack); + //push back into collection + tavCollection.push_back(tav); + }//end of loop over all neutrals }//end of the xod check RecVertex recVtx(xAODVx.position(), xAODVx.covariancePosition(), xAODVx.chiSquared(), xAODVx.numberDoF()); @@ -188,15 +202,18 @@ StatusCode VxCandidateXAODVertex::finalize() #endif Trk::ITrackLink* trklink = VTAV->trackOrParticleLink(); - //do we need really to check this? or can we assume xAOD::TrackParticle objects to be there? - // definitely we don't want those to be Rec::TrackParticle do avoid mixing up things Trk::LinkToXAODTrackParticle* linkToXAODTP = dynamic_cast<Trk::LinkToXAODTrackParticle*>(trklink); - if (!linkToXAODTP) + if (linkToXAODTP) { - ATH_MSG_WARNING ("Skipping track. Trying to convert to xAOD::Vertex a Trk::VxCandidate with links to something else than xAOD::TrackParticle."); - } else { //Now set the newlink to the new xAOD vertex xAODVx->addTrackAtVertex(*linkToXAODTP, VTAV->weight()); + } else { + Trk::LinkToXAODNeutralParticle* linkToXAODTPneutral = dynamic_cast<Trk::LinkToXAODNeutralParticle*>(trklink); + if (!linkToXAODTPneutral) + ATH_MSG_WARNING ("Skipping track. Trying to convert to xAOD::Vertex a Trk::VxCandidate with links to something else than xAOD::TrackParticle or xAOD::NeutralParticle."); + else + //Now set the newlink to the new xAOD vertex + xAODVx->addNeutralAtVertex(*linkToXAODTPneutral, VTAV->weight()); } }//end of loop