diff --git a/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/ATLAS_CHECK_THREAD_SAFETY b/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..926c82d7734fb75326ea7ea1f41f1b9bf5445cc5 --- /dev/null +++ b/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Tracking/TrkVertexFitter/TrkVxEdmCnv diff --git a/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/IVxCandidateXAODVertex.h b/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/IVxCandidateXAODVertex.h index 3f8073ca0a0784d76bd77aa39b5b0efa1ac6f83f..9b6eba7255af3401c78ad93ea58bf95c4e3276ad 100644 --- a/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/IVxCandidateXAODVertex.h +++ b/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/IVxCandidateXAODVertex.h @@ -50,27 +50,30 @@ class IVxCandidateXAODVertex /* * Virtual destructor. */ - virtual ~IVxCandidateXAODVertex(){}; + virtual ~IVxCandidateXAODVertex()=default; /////////////////////////////////////////////////////////////////// // Non-const methods: - /////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// /** - * Convert xAOD::Vertex to a VxCandidate. + * Convert xAOD::Vertex to a VxCandidate. * @param xAODVx input object * @param vxVertex return object, owned by the clients. */ - virtual StatusCode createVxCandidate(const xAOD::Vertex &xAODVx, Trk::VxCandidate* &vxVertex) const = 0; + virtual StatusCode createVxCandidate(const xAOD::Vertex& xAODVx, + Trk::VxCandidate*& vxVertex) const = 0; /** * Convert a VxCandidate to a VxVertex. Return object is own by the clients. - * If a null pointer is given as output, then a new object is created with its own AuxStore. - * Otherwise pass a new xAOD::Vertex object already attached to an aux store (preferred). + * If a null pointer is given as output, then a new object is created with its + * own AuxStore. Otherwise pass a new xAOD::Vertex object already attached to + * an aux store (preferred). * @param vxVertex input object * @param xAODVx return object, owned by the clients */ - virtual StatusCode createXAODVertex(const Trk::VxCandidate &vxVertex, xAOD::Vertex* &xAODVx) = 0; -}; + virtual StatusCode createXAODVertex(const Trk::VxCandidate& vxVertex, + xAOD::Vertex*& xAODVx) const = 0; +}; } //namespace Trk #endif //> !TRKVXEDMCVN_IVXCANDIDATEXAODVERTEX_H diff --git a/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/VxCandidateXAODVertex.h b/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/VxCandidateXAODVertex.h index aee94a57442d4692187923954942dbfcea34d92d..d341182a68cc2c665684c8646f9bdeadcaff97c1 100644 --- a/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/VxCandidateXAODVertex.h +++ b/Tracking/TrkVertexFitter/TrkVxEdmCnv/TrkVxEdmCnv/VxCandidateXAODVertex.h @@ -11,6 +11,10 @@ #ifndef VXEDMXAODCNV_VXCANDIDATEXAODVERTEX_H #define VXEDMXAODCNV_VXCANDIDATEXAODVERTEX_H + +#include "IVxCandidateXAODVertex.h" +#include "TrkVertexFitterInterfaces/IVertexLinearizedTrackFactory.h" + // STL includes #include <string> @@ -19,12 +23,6 @@ #include "GaudiKernel/ToolHandle.h" #include "GaudiKernel/ServiceHandle.h" -#include "IVxCandidateXAODVertex.h" - -// Forward declaration -namespace Trk{ - class IVertexLinearizedTrackFactory; -} namespace Trk { @@ -46,30 +44,32 @@ class VxCandidateXAODVertex const std::string& name, const IInterface* parent ); - /// Destructor: - virtual ~VxCandidateXAODVertex(); + /// Destructor: + virtual ~VxCandidateXAODVertex() = default; // Athena algtool's Hooks - virtual StatusCode initialize(); - virtual StatusCode finalize(); + virtual StatusCode initialize() override; /////////////////////////////////////////////////////////////////// // Non-const methods: - /////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// /** * Convert xAOD::Vertex to a VxCandidate. Return object is own by the clients. */ - virtual StatusCode createVxCandidate(const xAOD::Vertex &xAODVx, Trk::VxCandidate* &vxVertex) const; + virtual StatusCode createVxCandidate( + const xAOD::Vertex& xAODVx, + Trk::VxCandidate*& vxVertex) const override; /** * Convert a VxCandidate to a VxVertex. Return object is own by the clients. */ - virtual StatusCode createXAODVertex(const Trk::VxCandidate &vxVertex, xAOD::Vertex* &xAODVx); + virtual StatusCode createXAODVertex(const Trk::VxCandidate& vxVertex, + xAOD::Vertex*& xAODVx) const override; - /////////////////////////////////////////////////////////////////// - // Private data: - /////////////////////////////////////////////////////////////////// - private: + /////////////////////////////////////////////////////////////////// + // Private data: + /////////////////////////////////////////////////////////////////// +private: /// Default constructor: VxCandidateXAODVertex(); diff --git a/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx b/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx index f407f57e2b409be9a8856f866f5e0559887b55dc..52e2889c857c0539ae8cbd3584130599db5e8e6b 100644 --- a/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx +++ b/Tracking/TrkVertexFitter/TrkVxEdmCnv/src/VxCandidateXAODVertex.cxx @@ -5,10 +5,10 @@ ///////////////////////// -*- C++ -*- ///////////////////////////// -// VxCandidateXAODVertex.cxx +// VxCandidateXAODVertex.cxx // Implementation file for class VxCandidateXAODVertex // Author: S.Binet<binet@cern.ch> -/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// // VxEdmXAODCnv includes #include "TrkVxEdmCnv/VxCandidateXAODVertex.h" @@ -28,34 +28,29 @@ #include "TrkLinks/LinkToXAODTrackParticle.h" #include "TrkLinks/LinkToXAODNeutralParticle.h" -#include "TrkVertexFitterInterfaces/IVertexLinearizedTrackFactory.h" namespace Trk{ -/////////////////////////////////////////////////////////////////// -// Public methods: -/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +// Public methods: +/////////////////////////////////////////////////////////////////// // Constructors //////////////// -VxCandidateXAODVertex::VxCandidateXAODVertex( const std::string& type, - const std::string& name, - const IInterface* parent ) : +VxCandidateXAODVertex::VxCandidateXAODVertex( const std::string& type, + const std::string& name, + const IInterface* parent ) : ::AthAlgTool ( type, name, parent ), m_LinearizedTrackFactory("Trk::InDetFullLinearizedTrackFactory", this) { declareInterface< IVxCandidateXAODVertex >(this); // // Property declaration - // + // declareProperty("LinearizedTrackFactory",m_LinearizedTrackFactory); } -// Destructor -/////////////// -VxCandidateXAODVertex::~VxCandidateXAODVertex() -{} // Athena algtool's Hooks //////////////////////////// @@ -70,20 +65,15 @@ StatusCode VxCandidateXAODVertex::initialize() return StatusCode::SUCCESS; } -StatusCode VxCandidateXAODVertex::finalize() -{ - ATH_MSG_VERBOSE ("Finalizing " << name() << "..."); - return StatusCode::SUCCESS; -} -/////////////////////////////////////////////////////////////////// -// Public methods: -/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +// Public methods: +/////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////// -// Protected methods: -/////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////// +// Protected methods: +/////////////////////////////////////////////////////////////////// StatusCode VxCandidateXAODVertex::createVxCandidate(const xAOD::Vertex &xAODVx, Trk::VxCandidate* &vxVertex) const { @@ -93,36 +83,36 @@ StatusCode VxCandidateXAODVertex::finalize() //create vxTrackAtVertex linearizing with respect to vertex std::vector <Trk::VxTrackAtVertex*> tavCollection; bool xaod_no_tracks = true; -//check whether there are already VxTracksAtVertex here +//check whether there are already VxTracksAtVertex here #ifndef XAOD_STANDALONE if(xAODVx.vxTrackAtVertexAvailable()) { -//ok there are some, let us convert them +//ok there are some, let us convert them // remember that the VxCandidate takes over the ownership, so it needs a copy.. - + const std::vector< Trk::VxTrackAtVertex >& vtv = xAODVx.vxTrackAtVertex(); unsigned int vtv_size = vtv.size(); for(unsigned int i = 0;i<vtv_size;++i) tavCollection.push_back(vtv.at(i).clone()); xaod_no_tracks = false; }//end of the VxTrackAtVertex conversion -#endif - - +#endif + + //if they were not coming from xAOD, let us create them on the spot if(xaod_no_tracks) { // This is really ugly! This will make a copy of each ElementLink object // during the loop. But because Trk::LinkToXAODTrackParticle expects a // non-const reference (why???), we can't use "const auto&" as the type. - for (auto t : xAODVx.trackParticleLinks()) + for (auto t : xAODVx.trackParticleLinks()) { Trk::VxTrackAtVertex *tav = new VxTrackAtVertex(); - + //create ITrackLink to xAOD::TrackParticle Trk::LinkToXAODTrackParticle *elTrackParticle = new Trk::LinkToXAODTrackParticle( t ); tav->setOrigTrack(elTrackParticle); - + //linearize with respect to given vertex (do we need/want it here?) Trk::LinearizedTrack* myLinearizedTrack=m_LinearizedTrackFactory->linearizedTrack(elTrackParticle->parameters(),xAODVx.position()); tav->setLinTrack(myLinearizedTrack); @@ -136,7 +126,7 @@ StatusCode VxCandidateXAODVertex::finalize() // - *m_fitQuality //push back into collection - tavCollection.push_back(tav); + tavCollection.push_back(tav); }//end of loop over all tracks //Same for neutrals for (auto t : xAODVx.neutralParticleLinks()) { @@ -148,7 +138,7 @@ StatusCode VxCandidateXAODVertex::finalize() Trk::LinearizedTrack* myLinearizedTrack=m_LinearizedTrackFactory->linearizedTrack(elNeutralParticle->neutralParameters(),xAODVx.position()); tav->setLinTrack(myLinearizedTrack); //push back into collection - tavCollection.push_back(tav); + tavCollection.push_back(tav); }//end of loop over all neutrals }//end of the xod check @@ -156,18 +146,18 @@ StatusCode VxCandidateXAODVertex::finalize() vxVertex = new VxCandidate(recVtx, tavCollection); //TODO: only one enum should survive! vxVertex->setVertexType((Trk::VertexType)xAODVx.vertexType()); - + return StatusCode::SUCCESS; } - StatusCode VxCandidateXAODVertex::createXAODVertex(const Trk::VxCandidate &vxVertex, xAOD::Vertex* &xAODVx) + StatusCode VxCandidateXAODVertex::createXAODVertex(const Trk::VxCandidate &vxVertex, xAOD::Vertex* &xAODVx) const { ATH_MSG_DEBUG("Creating new xAOD vertex from VxCandidate "); ATH_MSG_VERBOSE(vxVertex); if (!xAODVx) { xAODVx = new xAOD::Vertex(); - xAODVx->makePrivateStore(); + xAODVx->makePrivateStore(); ATH_MSG_VERBOSE("Internal Aux store implicitly associated to the new VxVertex object. Pass a valid xAODVx pointer for output for optimal performance."); } @@ -179,20 +169,20 @@ StatusCode VxCandidateXAODVertex::finalize() //now set links to xAOD::TrackParticles unsigned int VTAVsize = vxVertex.vxTrackAtVertex()->size(); - for (unsigned int i = 0 ; i < VTAVsize ; ++i) + for (unsigned int i = 0 ; i < VTAVsize ; ++i) { Trk::VxTrackAtVertex* VTAV = vxVertex.vxTrackAtVertex()->at(i); if (not VTAV){ //added check on VTAV here, instead of inside the ifndef sroe 4 March 2015 ATH_MSG_WARNING (" Trying to convert to xAOD::Vertex a Trk::VxCandidate. The VxTrackAtVertex is not found"); continue; } -#ifndef XAOD_STANDALONE - xAODVx->vxTrackAtVertex().push_back(*VTAV); +#ifndef XAOD_STANDALONE + xAODVx->vxTrackAtVertex().push_back(*VTAV); #endif - + Trk::ITrackLink* trklink = VTAV->trackOrParticleLink(); Trk::LinkToXAODTrackParticle* linkToXAODTP = dynamic_cast<Trk::LinkToXAODTrackParticle*>(trklink); - if (linkToXAODTP) + if (linkToXAODTP) { //Now set the newlink to the new xAOD vertex xAODVx->addTrackAtVertex(*linkToXAODTP, VTAV->weight()); @@ -206,7 +196,7 @@ StatusCode VxCandidateXAODVertex::finalize() } }//end of loop - ATH_MSG_DEBUG("Successfully created new xAOD::Vertex " << xAODVx); + ATH_MSG_DEBUG("Successfully created new xAOD::Vertex " << xAODVx); return StatusCode::SUCCESS; }