diff --git a/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxJetFitterVertexInfo.h b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxJetFitterVertexInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..c98e3eb2dfb42edb2441fc44b66c3da7a3b89985 --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxJetFitterVertexInfo.h @@ -0,0 +1,105 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/**************************************** + + VxJetFitterVertexInfo.h - Description + ------------------- + + begin: January 2008 + author: Giacinto Piacquadio (University of Freiburg) + e-mail: giacinto.piacquadio@physik.uni-freiburg.de + changes: new! + +Class which inherits from VxSecVertexInfo and contains the additional +information JetFitter vs. 2 is able to provide: +1) TwoTrackVerticesInJet +2) SelectedTracksInJet +(Material interactions will be provided in the near future... +if convenient) + + April 2014: Trk::VxCandidate is replaced by xAOD::Vertex +********************************************/ + +#ifndef VXSECVERTEX_VxJetFitterVertexInfo_H +#define VXSECVERTEX_VxJetFitterVertexInfo_H + +#include "DataModel/ElementLink.h" +#include "VxSecVertex/VxSecVertexInfo.h" +#include <vector> + + +namespace Trk { + + class TwoTrackVerticesInJet; + class SelectedTracksInJet; + class VxCandidate; + + class VxJetFitterVertexInfo : public VxSecVertexInfo { + + public: + + /* default constructor for persistency */ + VxJetFitterVertexInfo(); + + /* constructor with everything */ + VxJetFitterVertexInfo(const std::vector<Trk::VxCandidate*> & vertices, + const Trk::TwoTrackVerticesInJet * twoTrackVertices, + const Trk::SelectedTracksInJet* selectedTracksInJet); + + /* copy constructor */ + VxJetFitterVertexInfo(const VxJetFitterVertexInfo &); + + /* clone method */ + virtual VxJetFitterVertexInfo* clone() const; + + /* assignment operator */ + VxJetFitterVertexInfo operator= (const VxJetFitterVertexInfo &); + + /* destructor */ + virtual ~VxJetFitterVertexInfo(); + + /* get twoTrackVerticesInJet */ + const Trk::TwoTrackVerticesInJet* getTwoTrackVerticesInJet() const; + + /* get selectedTracksInJet */ + const Trk::SelectedTracksInJet* getSelectedTracksInJet() const; + + /* get the list of Vertices */ + const std::vector<Trk::VxCandidate*> & verticesJF() const; + + private: + + const Trk::TwoTrackVerticesInJet* m_twoTrackVerticesInJet; + const Trk::SelectedTracksInJet* m_selectedTracksInJet; + std::vector<Trk::VxCandidate*> m_verticesJF; + + }; + + /* get twoTrackVerticesInJet */ + inline const Trk::TwoTrackVerticesInJet* VxJetFitterVertexInfo::getTwoTrackVerticesInJet() const + { + return m_twoTrackVerticesInJet; + } + + + /* get selectedTracksInJet */ + inline const Trk::SelectedTracksInJet* VxJetFitterVertexInfo::getSelectedTracksInJet() const + { + return m_selectedTracksInJet; + } + + const std::vector<Trk::VxCandidate*> & VxJetFitterVertexInfo::verticesJF() const { + return m_verticesJF; + } + + /* clone method */ + inline VxJetFitterVertexInfo* VxJetFitterVertexInfo::clone() const { + return new VxJetFitterVertexInfo(*this); + } + + +}//end namespace Trk + +#endif diff --git a/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVKalVertexInfo.h b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVKalVertexInfo.h new file mode 100755 index 0000000000000000000000000000000000000000..43ae66cec7ac345dfd90238273dfe5d9c2b7bd3f --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVKalVertexInfo.h @@ -0,0 +1,132 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/**************************************** + + VxSecVKalVertexInfo.h - Description + ------------------- + + begin: March 2007 + authors: CSC vertexing note group members :-) + work started by: Giacinto Piacquadio (University of Freiburg) + e-mail: giacinto.piacquadio@physik.uni-freiburg.de + changes: new! + +Class which inherits from VxSecVertexInfo and contains the additional +information VKalVrt is able to provide: +1) mass +2) energyFraction +3) two track vertices used for seeding +4) list of "bad" tracks +5) list of tracks from V0s +6) Jet track energy - needed for multivertex fit + + + April 2014: Migration to xAOD::Vertex and xAOD::IParticle +********************************************/ + +#ifndef VXSECVERTEX_VXSECVKALVERTEXINFO_H +#define VXSECVERTEX_VXSECVKALVERTEXINFO_H + +#include "DataModel/ElementLink.h" +#include "TrkParticleBase/TrackParticleBaseCollection.h" +#include "xAODBase/IParticleContainer.h" +#include "VxSecVertex/VxSecVertexInfo.h" +#include <vector> + + + +namespace Trk { + + class VxSecVKalVertexInfo : public VxSecVertexInfo { + + public: + + /* default constructor for persistency */ + VxSecVKalVertexInfo(); + + /* constructor with everything for Trk::TrackParticleBase + jet energy */ + VxSecVKalVertexInfo(const std::vector<xAOD::Vertex*> & vertices, + double mass,double energyFraction,int n2trackvertices, double energyTrkInJet, + const std::vector<const Trk::TrackParticleBase*> & badTracks); + + /* constructor with everything for xAOD::IParticle + jet energy */ + VxSecVKalVertexInfo(const std::vector<xAOD::Vertex*> & vertices, + double mass,double energyFraction,int n2trackvertices, double energyTrkInJet, + const std::vector<const xAOD::IParticle*> & badTracks); + + /* copy constructor */ + VxSecVKalVertexInfo(const VxSecVKalVertexInfo &); + + /* clone method */ + virtual VxSecVKalVertexInfo* clone() const; + + /* assignment operator */ + VxSecVKalVertexInfo operator= (const VxSecVKalVertexInfo &); + + /* destructor */ + virtual ~VxSecVKalVertexInfo(); + + /* get mass */ + double mass() const; + + /* get energyFraction */ + double energyFraction() const; + + /* get energy of all tracks in jet */ + double energyTrkInJet() const; + + /* get n2trackvertices */ + int n2trackvertices() const; + + /* get list of bad TP */ + const std::vector<const Trk::TrackParticleBase*> badTracksTP() const; + + /* get list of bad Tracks */ + const std::vector<const xAOD::IParticle*> badTracksIP() const; + + /* set origin collection for IParticle */ + void setIParticleOrigin(const xAOD::IParticleContainer* iparticleTES); + + /* set origin collectino for TrackParticle */ + void setTrackParticleOrigin(const Trk::TrackParticleBaseCollection* trkpartTES); + + + private: + + double m_mass; + double m_energyFraction; + double m_energyTrkInJet; + int m_n2trackvertices; + std::vector<ElementLink<Trk::TrackParticleBaseCollection> > m_badTracksTP; + std::vector<ElementLink<xAOD::IParticleContainer> > m_badTracksIP; + + }; + + + inline double VxSecVKalVertexInfo::mass() const { + return m_mass; + } + + inline double VxSecVKalVertexInfo::energyFraction() const { + return m_energyFraction; + } + + inline double VxSecVKalVertexInfo::energyTrkInJet() const { + return m_energyTrkInJet; + } + + inline int VxSecVKalVertexInfo::n2trackvertices() const { + return m_n2trackvertices; + } + + /* clone method */ + inline VxSecVKalVertexInfo* VxSecVKalVertexInfo::clone() const { + return new VxSecVKalVertexInfo(*this); + } + + +}//end namespace Trk + +#endif diff --git a/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVertexDict.h b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVertexDict.h new file mode 100755 index 0000000000000000000000000000000000000000..0f4da1d653f5fa423ae47ad51c5bf835e4f04d8a --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVertexDict.h @@ -0,0 +1,12 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef VXSECVERTEX_VXSECVERTEXDICT_H +#define VXSECVERTEX_VXSECVERTEXDICT_H + +#include "VxSecVertex/VxSecVertexInfo.h" +#include "VxSecVertex/VxSecVKalVertexInfo.h" +#include "VxSecVertex/VxJetFitterVertexInfo.h" + +#endif diff --git a/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVertexInfo.h b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVertexInfo.h new file mode 100755 index 0000000000000000000000000000000000000000..92dfaa80c05302d60a0e23bc3e9ebeb8fa2f3bce --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/VxSecVertexInfo.h @@ -0,0 +1,100 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/**************************************** + + VxSecVertexInfo.h - Description + ------------------- + + begin: March 2007 + authors: CSC vertexing note group members :-) + work started by: Giacinto Piacquadio (University of Freiburg) + e-mail: giacinto.piacquadio@physik.uni-freiburg.de + changes: new! + +This class represents the base information about secondary vertices, which is +given by a vector of VxCandidate*. The class OWNS the VxCandidate. Pointers + are used to allow inheritance of the extended classes from the VxCandidate. + + + April 2014: Trk::VxCandidate is replaced by xAOD::Vertex + + May 2014: VxSecVertexInfo doesn't own the corresponding secondary vertices anymore by default. + Beware - this leads to a strong memory leak if SV are not explictly deleted before VxSecVertexInfo destructor. + VxSecVertexInfo gets back the SV ownership if getSVOwnership(true) is called. + +*****************************************/ + +#ifndef VXSECVERTEX_VXSECVERTEXINFO_H +#define VXSECVERTEX_VXSECVERTEXINFO_H + +#include "DataModel/DataVector.h" +#include "CLIDSvc/CLASS_DEF.h" +#include "xAODTracking/Vertex.h" +#include <vector> + + +namespace Trk { + + class VxSecVertexInfo + { + + public: + + /* default constructor for persistency */ + VxSecVertexInfo(); + + /* constructor with list of VxCandidate. The VxSecVertexInfo takes + care of the ownership of the VxCandidate*. Don't delete them + afterwards */ + VxSecVertexInfo(const std::vector<xAOD::Vertex*> &); + + /* clone method */ + virtual VxSecVertexInfo* clone() const; + + /* Destructor */ + virtual ~VxSecVertexInfo(); + + /* Copy constructor */ + VxSecVertexInfo(const VxSecVertexInfo &); + + /* Assignment operator */ + VxSecVertexInfo& operator= (const VxSecVertexInfo &); + + /* get the list of Vertices */ + const std::vector<xAOD::Vertex*> & vertices() const; + + /* set the list of Vertices */ + void setVertices(const std::vector<xAOD::Vertex*> &); + + void getSVOwnership(bool Ownership){ m_SVOwnership=Ownership; } + + protected: + + std::vector<xAOD::Vertex*> m_vertices; + bool m_SVOwnership; + + }; + + + + inline VxSecVertexInfo* VxSecVertexInfo::clone() const { + return new VxSecVertexInfo(*this); + } + + +}//end namespace + +namespace Trk +{ + typedef DataVector<Trk::VxSecVertexInfo> VxSecVertexInfoContainer; +} + + +CLASS_DEF( Trk::VxSecVertexInfo , 170608128 , 1 ) +CLASS_DEF( Trk::VxSecVertexInfoContainer , 1284088780 , 1 ) + + + +#endif diff --git a/Tracking/TrkEvent/VxSecVertex/VxSecVertex/selection.xml b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/selection.xml new file mode 100755 index 0000000000000000000000000000000000000000..4b09c4de3f86e682ce507696721301c2cde40a91 --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/VxSecVertex/selection.xml @@ -0,0 +1,13 @@ +<lcgdict> + <class name="Trk::VxSecVertexInfo"> + <field name="m_vertices" transient="true" /> + </class> + <class name="Trk::VxJetFitterVertexInfo"> + <field name="m_twoTrackVerticesInJet" transient="true" /> + <field name="m_selectedTracksInJet" transient="true" /> + </class> + <class name="Trk::VxSecVKalVertexInfo"> + <field name="m_badTracksIP" transient="true" /> + <field name="m_badTracksTP" transient="true" /> + </class> +</lcgdict> diff --git a/Tracking/TrkEvent/VxSecVertex/cmt/requirements b/Tracking/TrkEvent/VxSecVertex/cmt/requirements new file mode 100755 index 0000000000000000000000000000000000000000..25c7a2747e86d6ea8e469e6a1d4f1988fc91cfde --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/cmt/requirements @@ -0,0 +1,37 @@ +package VxSecVertex + +author Giacinto Piacquadio <giacinto.piacquadio@physik.uni-freiburg.de> +author Christian Weiser +author Vadim Kostyukhin +author Kirill Prokofiev +author Andreas Wildauer + + +use AtlasPolicy AtlasPolicy-* +use DataModel DataModel-* Control + +use CLIDSvc CLIDSvc-* Control +#use TrkTrack TrkTrack-* Tracking/TrkEvent +use TrkParticleBase TrkParticleBase-* Tracking/TrkEvent +use xAODTracking xAODTracking-* Event/xAOD +use xAODBase xAODBase-* Event/xAOD + +private + +use VxVertex VxVertex-* Tracking/TrkEvent +use VxJetVertex VxJetVertex-* Tracking/TrkEvent +use TrkParticleBase TrkParticleBase-* Tracking/TrkEvent + +public + +library VxSecVertex *.cxx +apply_pattern installed_library + +private +# persistency +use AtlasReflex AtlasReflex-* External -no_auto_imports +apply_pattern lcgdict dict=VxSecVertex selectionfile=selection.xml headerfiles="../VxSecVertex/VxSecVertexDict.h" + +#macro cppdebugflags '$(cppdebugflags_s)' +#macro_remove componentshr_linkopts "-Wl,-s" + diff --git a/Tracking/TrkEvent/VxSecVertex/src/VxJetFitterVertexInfo.cxx b/Tracking/TrkEvent/VxSecVertex/src/VxJetFitterVertexInfo.cxx new file mode 100644 index 0000000000000000000000000000000000000000..5759973d14bcb7d91cec75a53e79a603fa382300 --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/src/VxJetFitterVertexInfo.cxx @@ -0,0 +1,106 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/**************************************** + + VxSecVertexInfo.h - Description + ------------------- + + begin: January 2008 + author: Giacinto Piacquadio (University of Freiburg) + e-mail: giacinto.piacquadio@physik.uni-freiburg.de + changes: new! + + April 2014: Trk::VxCandidate is replaced by xAOD::Vertex + +********************************************/ + +#include "VxSecVertex/VxJetFitterVertexInfo.h" +#include "VxJetVertex/TwoTrackVerticesInJet.h" +#include "VxJetVertex/SelectedTracksInJet.h" +#include "VxVertex/VxCandidate.h" + +namespace Trk { + + VxJetFitterVertexInfo::VxJetFitterVertexInfo() : + VxSecVertexInfo(), + m_twoTrackVerticesInJet(0), + m_selectedTracksInJet(0) {} + + VxJetFitterVertexInfo::VxJetFitterVertexInfo(const std::vector<Trk::VxCandidate*> & vertices, + const Trk::TwoTrackVerticesInJet * twoTrackVertices, + const Trk::SelectedTracksInJet* selectedTracksInJet) : + VxSecVertexInfo(), + m_twoTrackVerticesInJet(twoTrackVertices), + m_selectedTracksInJet(selectedTracksInJet), + m_verticesJF(vertices) + {} + + + VxJetFitterVertexInfo::VxJetFitterVertexInfo(const VxJetFitterVertexInfo & rhs): + VxSecVertexInfo(rhs), + m_twoTrackVerticesInJet(rhs.m_twoTrackVerticesInJet?new Trk::TwoTrackVerticesInJet(*rhs.m_twoTrackVerticesInJet):0), + m_selectedTracksInJet(rhs.m_selectedTracksInJet?new Trk::SelectedTracksInJet(*rhs.m_selectedTracksInJet):0) + { + std::vector<Trk::VxCandidate*>::const_iterator verticesBegin=rhs.m_verticesJF.begin(); + std::vector<Trk::VxCandidate*>::const_iterator verticesEnd=rhs.m_verticesJF.end(); + + for (std::vector<Trk::VxCandidate*>::const_iterator verticesIter=verticesBegin; + verticesIter!=verticesEnd;++verticesIter) { + Trk::VxCandidate* myCandidate=*verticesIter; + if (myCandidate!=0) { + m_verticesJF.push_back(new Trk::VxCandidate(*myCandidate)); + } else { + std::cout << " Warning in VxSecVertexInfo: tried in copy constructor to copy over a zero pointer Vertex " << std::endl; + } + } + m_SVOwnership=true; + } + + + VxJetFitterVertexInfo VxJetFitterVertexInfo::operator= (const VxJetFitterVertexInfo & rhs) { + if (this!=&rhs) { + + m_verticesJF.clear(); + delete m_twoTrackVerticesInJet; + delete m_selectedTracksInJet; + this->operator=(rhs); + std::vector<Trk::VxCandidate*>::const_iterator verticesBegin=rhs.m_verticesJF.begin(); + std::vector<Trk::VxCandidate*>::const_iterator verticesEnd=rhs.m_verticesJF.end(); + + for (std::vector<Trk::VxCandidate*>::const_iterator verticesIter=verticesBegin; + verticesIter!=verticesEnd;++verticesIter) { + Trk::VxCandidate* myCandidate=*verticesIter; + if (myCandidate!=0) { + m_verticesJF.push_back(new Trk::VxCandidate(*myCandidate)); + } else { + std::cout << " Warning in VxSecVertexInfo: tried in copy constructor to copy over a zero pointer Vertex " << std::endl; + } + } + m_twoTrackVerticesInJet=rhs.m_twoTrackVerticesInJet?new Trk::TwoTrackVerticesInJet(*rhs.m_twoTrackVerticesInJet):0; + m_selectedTracksInJet=rhs.m_selectedTracksInJet?new Trk::SelectedTracksInJet(*rhs.m_selectedTracksInJet):0; + } + m_SVOwnership=true; + return *this; + } + + VxJetFitterVertexInfo::~VxJetFitterVertexInfo() { + if(m_SVOwnership){ // Delete vertices only if ownership is set explicitly + delete m_twoTrackVerticesInJet; + delete m_selectedTracksInJet; + std::vector<Trk::VxCandidate*>::const_iterator verticesBegin=m_verticesJF.begin(); + std::vector<Trk::VxCandidate*>::const_iterator verticesEnd=m_verticesJF.end(); + for (std::vector<Trk::VxCandidate*>::const_iterator verticesIter=verticesBegin; + verticesIter!=verticesEnd;++verticesIter) { + Trk::VxCandidate* myCandidate=*verticesIter; + if (myCandidate!=0) { + delete myCandidate; + } else { + std::cout << " Warning in VxSecVertexInfo: tried to delete a zero pointer --> Inconsistency found. " << std::endl; + } + } + } + } + +}//end namespace diff --git a/Tracking/TrkEvent/VxSecVertex/src/VxSecVKalVertexInfo.cxx b/Tracking/TrkEvent/VxSecVertex/src/VxSecVKalVertexInfo.cxx new file mode 100755 index 0000000000000000000000000000000000000000..bd0588a978617a2acbe3836ce6dc0605df11bfc8 --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/src/VxSecVKalVertexInfo.cxx @@ -0,0 +1,161 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/**************************************** + + VxSecVertexInfo.h - Description + ------------------- + + begin: March 2007 + authors: CSC vertexing note group members :-) + work started by: Giacinto Piacquadio (University of Freiburg) + e-mail: giacinto.piacquadio@physik.uni-freiburg.de + changes: new! + + April 2014: Trk::VxCandidate is replaced by xAOD::Vertex + xAOD::IParticle is added to interface + +********************************************/ + +#include "VxSecVertex/VxSecVKalVertexInfo.h" + +namespace Trk { + + VxSecVKalVertexInfo::VxSecVKalVertexInfo() : + VxSecVertexInfo() {} + + VxSecVKalVertexInfo::VxSecVKalVertexInfo(const std::vector<xAOD::Vertex*> & vertices, + double mass,double energyFraction,int n2trackvertices,double energyTrkInJet, + const std::vector<const Trk::TrackParticleBase*> & badTracks): + VxSecVertexInfo(vertices), + m_mass(mass), + m_energyFraction(energyFraction), + m_energyTrkInJet(energyTrkInJet), + m_n2trackvertices(n2trackvertices) + { + std::vector<const Trk::TrackParticleBase*>::const_iterator badTracksBegin=badTracks.begin(); + std::vector<const Trk::TrackParticleBase*>::const_iterator badTracksEnd=badTracks.end(); + + for (std::vector<const Trk::TrackParticleBase*>::const_iterator badTracksIter=badTracksBegin; + badTracksIter!=badTracksEnd;++badTracksIter) { + ElementLink<Trk::TrackParticleBaseCollection> link; + link.setElement(*badTracksIter); + m_badTracksTP.push_back(link); + } + } + + + VxSecVKalVertexInfo::VxSecVKalVertexInfo(const std::vector<xAOD::Vertex*> & vertices, + double mass,double energyFraction,int n2trackvertices,double energyTrkInJet, + const std::vector<const xAOD::IParticle*> & badTracks): + VxSecVertexInfo(vertices), + m_mass(mass), + m_energyFraction(energyFraction), + m_energyTrkInJet(energyTrkInJet), + m_n2trackvertices(n2trackvertices) + { + std::vector<const xAOD::IParticle*>::const_iterator badTracksBegin=badTracks.begin(); + std::vector<const xAOD::IParticle*>::const_iterator badTracksEnd=badTracks.end(); + + for (std::vector<const xAOD::IParticle*>::const_iterator badTracksIter=badTracksBegin; + badTracksIter!=badTracksEnd;++badTracksIter) { + ElementLink<xAOD::IParticleContainer> link; + link.setElement(*badTracksIter); + m_badTracksIP.push_back(link); + } + + } + + + VxSecVKalVertexInfo::VxSecVKalVertexInfo(const VxSecVKalVertexInfo & rhs): + VxSecVertexInfo(rhs), + m_mass(rhs.m_mass), + m_energyFraction(rhs.m_energyFraction), + m_energyTrkInJet(rhs.m_energyTrkInJet), + m_n2trackvertices(rhs.m_n2trackvertices), + m_badTracksTP(rhs.m_badTracksTP), + m_badTracksIP(rhs.m_badTracksIP) + {} + + VxSecVKalVertexInfo VxSecVKalVertexInfo::operator= (const VxSecVKalVertexInfo & rhs) { + + if (this!=&rhs) { + this->operator=(rhs); + m_mass=rhs.m_mass; + m_energyFraction=rhs.m_energyFraction; + m_energyTrkInJet=rhs.m_energyTrkInJet; + m_n2trackvertices=rhs.m_n2trackvertices; + m_badTracksTP=rhs.m_badTracksTP; + m_badTracksIP=rhs.m_badTracksIP; + } + return *this; + } + + VxSecVKalVertexInfo::~VxSecVKalVertexInfo() {} + + const std::vector<const Trk::TrackParticleBase*> VxSecVKalVertexInfo::badTracksTP() const { + + std::vector<const Trk::TrackParticleBase*> vectorOfTP; + + std::vector<ElementLink<Trk::TrackParticleBaseCollection> >::const_iterator badTracksBegin=m_badTracksTP.begin(); + std::vector<ElementLink<Trk::TrackParticleBaseCollection> >::const_iterator badTracksEnd=m_badTracksTP.end(); + + for (std::vector<ElementLink<Trk::TrackParticleBaseCollection> >::const_iterator badTracksIter=badTracksBegin; + badTracksIter!=badTracksEnd;++badTracksIter) { + if ((*badTracksIter).isValid()) { + if (**badTracksIter!=0) { + vectorOfTP.push_back(**badTracksIter); + } + } + } + + return vectorOfTP; + } + + const std::vector<const xAOD::IParticle*> VxSecVKalVertexInfo::badTracksIP() const { + + std::vector<const xAOD::IParticle*> vectorOfIP; + + std::vector<ElementLink<xAOD::IParticleContainer> >::const_iterator badTracksBegin=m_badTracksIP.begin(); + std::vector<ElementLink<xAOD::IParticleContainer> >::const_iterator badTracksEnd=m_badTracksIP.end(); + + for (std::vector<ElementLink<xAOD::IParticleContainer> >::const_iterator badTracksIter=badTracksBegin; + badTracksIter!=badTracksEnd;++badTracksIter) { + if ((*badTracksIter).isValid()) { + if (**badTracksIter!=0) { + vectorOfIP.push_back(**badTracksIter); + } + } + } + + return vectorOfIP; + } + + void VxSecVKalVertexInfo::setTrackParticleOrigin(const Trk::TrackParticleBaseCollection* trkpartTES) { + + + std::vector<ElementLink<Trk::TrackParticleBaseCollection> >::iterator badTracksBegin=m_badTracksTP.begin(); + std::vector<ElementLink<Trk::TrackParticleBaseCollection> >::iterator badTracksEnd=m_badTracksTP.end(); + + for (std::vector<ElementLink<Trk::TrackParticleBaseCollection> >::iterator badTracksIter=badTracksBegin; + badTracksIter!=badTracksEnd;++badTracksIter) { + (*badTracksIter).setStorableObject(*trkpartTES); + } + } + + void VxSecVKalVertexInfo::setIParticleOrigin(const xAOD::IParticleContainer* ipartTES) { + + + std::vector<ElementLink<xAOD::IParticleContainer> >::iterator badTracksBegin=m_badTracksIP.begin(); + std::vector<ElementLink<xAOD::IParticleContainer> >::iterator badTracksEnd=m_badTracksIP.end(); + + for (std::vector<ElementLink<xAOD::IParticleContainer> >::iterator badTracksIter=badTracksBegin; + badTracksIter!=badTracksEnd;++badTracksIter) { + (*badTracksIter).setStorableObject(*ipartTES); + } + + } + + +}//end namespace diff --git a/Tracking/TrkEvent/VxSecVertex/src/VxSecVertexInfo.cxx b/Tracking/TrkEvent/VxSecVertex/src/VxSecVertexInfo.cxx new file mode 100755 index 0000000000000000000000000000000000000000..102208e8b93b2de6f014e3058b18666091eed6a8 --- /dev/null +++ b/Tracking/TrkEvent/VxSecVertex/src/VxSecVertexInfo.cxx @@ -0,0 +1,96 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/**************************************** + + VxSecVertexInfo.h - Description + ------------------- + + begin: March 2007 + authors: CSC vertexing note group members :-) + work started by: Giacinto Piacquadio (University of Freiburg) + e-mail: giacinto.piacquadio@physik.uni-freiburg.de + changes: new! + + April 2014: Replace Trk::VxCandidate by xAOD::Vertex +********************************************/ + +#include "VxSecVertex/VxSecVertexInfo.h" +#include <ostream> + +namespace Trk { + + VxSecVertexInfo::VxSecVertexInfo(): m_SVOwnership(false) {} + + VxSecVertexInfo::VxSecVertexInfo(const std::vector<xAOD::Vertex*> & vertices): m_SVOwnership(false) { + m_vertices=vertices;//ownership is taken over by the VxSecVertexInfo class! + } + + VxSecVertexInfo::~VxSecVertexInfo() { + std::vector<xAOD::Vertex*>::const_iterator verticesBegin=m_vertices.begin(); + std::vector<xAOD::Vertex*>::const_iterator verticesEnd=m_vertices.end(); + + if(m_SVOwnership){ // Delete vertices only if ownership is set explicitly + for (std::vector<xAOD::Vertex*>::const_iterator verticesIter=verticesBegin; + verticesIter!=verticesEnd;++verticesIter) { + xAOD::Vertex* myCandidate=*verticesIter; + if (myCandidate!=0) { + delete myCandidate; + } else { + std::cout << " Warning in VxSecVertexInfo: tried to delete a zero pointer --> Inconsistency found. " << std::endl; + } + } + } + } + + VxSecVertexInfo::VxSecVertexInfo(const VxSecVertexInfo & rhs) { + + std::vector<xAOD::Vertex*>::const_iterator verticesBegin=rhs.m_vertices.begin(); + std::vector<xAOD::Vertex*>::const_iterator verticesEnd=rhs.m_vertices.end(); + + for (std::vector<xAOD::Vertex*>::const_iterator verticesIter=verticesBegin; + verticesIter!=verticesEnd;++verticesIter) { + xAOD::Vertex* myCandidate=*verticesIter; + if (myCandidate!=0) { + m_vertices.push_back(new xAOD::Vertex(*myCandidate)); + } else { + std::cout << " Warning in VxSecVertexInfo: tried in copy constructor to copy over a zero pointer Vertex " << std::endl; + } + } + m_SVOwnership=false; + } + + VxSecVertexInfo& VxSecVertexInfo::operator= (const VxSecVertexInfo & rhs) { + + if (this!=&rhs) { + + m_vertices.clear(); + + std::vector<xAOD::Vertex*>::const_iterator verticesBegin=rhs.m_vertices.begin(); + std::vector<xAOD::Vertex*>::const_iterator verticesEnd=rhs.m_vertices.end(); + + for (std::vector<xAOD::Vertex*>::const_iterator verticesIter=verticesBegin; + verticesIter!=verticesEnd;++verticesIter) { + xAOD::Vertex* myCandidate=*verticesIter; + if (myCandidate!=0) { + m_vertices.push_back(new xAOD::Vertex(*myCandidate)); + } else { + std::cout << " Warning in VxSecVertexInfo: tried in copy constructor to copy over a zero pointer Vertex " << std::endl; + } + } + } + m_SVOwnership=false; + return *this; + } + + + const std::vector<xAOD::Vertex*> & VxSecVertexInfo::vertices() const { + return m_vertices; + } + + void VxSecVertexInfo::setVertices(const std::vector<xAOD::Vertex*> & vertices) { + m_vertices=vertices; + } + +}//end namespace Trk