Go to the documentation of this file.00001 #ifndef DataFormats_BTauReco_SecondaryVertexTagInfo_h
00002 #define DataFormats_BTauReco_SecondaryVertexTagInfo_h
00003
00004 #include <utility>
00005 #include <vector>
00006
00007 #include "DataFormats/BTauReco/interface/RefMacros.h"
00008 #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h"
00009 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00010 #include "DataFormats/VertexReco/interface/Vertex.h"
00011 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00012 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00013 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
00014 #include "DataFormats/BTauReco/interface/JTATagInfo.h"
00015 #include "DataFormats/BTauReco/interface/TrackIPTagInfo.h"
00016
00017 namespace reco {
00018
00019 class SecondaryVertexTagInfo : public BaseTagInfo {
00020 public:
00021 struct TrackData {
00022 enum Status {
00023 trackSelected = 0,
00024 trackUsedForVertexFit,
00025 trackAssociatedToVertex
00026 };
00027
00028 inline bool usedForVertexFit() const
00029 { return (int)svStatus >= (int)trackUsedForVertexFit; }
00030 inline bool associatedToVertex() const
00031 { return (int)svStatus >= (int)trackAssociatedToVertex; }
00032 inline bool associatedToVertex(unsigned int index) const
00033 { return (int)svStatus == (int)trackAssociatedToVertex + (int)index; }
00034
00035 Status svStatus;
00036 };
00037
00038 struct VertexData {
00039 Vertex vertex;
00040 Measurement1D dist2d, dist3d;
00041 GlobalVector direction;
00042 };
00043
00044 typedef std::pair<unsigned int, TrackData> IndexedTrackData;
00045
00046 SecondaryVertexTagInfo() {}
00047 virtual ~SecondaryVertexTagInfo() {}
00048
00049 SecondaryVertexTagInfo(
00050 const std::vector<IndexedTrackData> &trackData,
00051 const std::vector<VertexData> &svData,
00052 unsigned int vertexCandidates,
00053 const TrackIPTagInfoRef &trackIPTagInfoRef);
00054
00056 virtual SecondaryVertexTagInfo * clone(void) const {
00057 return new SecondaryVertexTagInfo(*this);
00058 }
00059
00060 const TrackIPTagInfoRef &trackIPTagInfoRef() const
00061 { return m_trackIPTagInfoRef; }
00062
00063 virtual edm::RefToBase<Jet> jet(void) const
00064 { return m_trackIPTagInfoRef->jet(); }
00065
00066 virtual TrackRefVector tracks(void) const
00067 { return m_trackIPTagInfoRef->tracks(); }
00068
00069 const JetTracksAssociationRef &jtaRef(void) const
00070 { return m_trackIPTagInfoRef->jtaRef(); }
00071
00072 const Vertex &secondaryVertex(unsigned int index) const
00073 { return m_svData[index].vertex; }
00074
00075 unsigned int nSelectedTracks() const { return m_trackData.size(); }
00076 unsigned int nVertexTracks() const;
00077 unsigned int nVertexTracks(unsigned int index) const;
00078 unsigned int nVertices() const { return m_svData.size(); }
00079 unsigned int nVertexCandidates() const { return m_vertexCandidates; }
00080
00081 TrackRefVector selectedTracks() const;
00082 TrackRefVector vertexTracks() const;
00083 TrackRefVector vertexTracks(unsigned int index) const;
00084
00085 TrackRef track(unsigned int index) const;
00086 unsigned int findTrack(const TrackRef &track) const;
00087
00088 const TrackData &trackData(unsigned int index) const;
00089 const TrackData &trackData(const TrackRef &track) const;
00090
00091 const TrackIPTagInfo::TrackIPData &trackIPData(unsigned int index) const;
00092 const TrackIPTagInfo::TrackIPData &trackIPData(const TrackRef &track) const;
00093
00094 float trackWeight(unsigned int svIndex, unsigned int trackindex) const;
00095 float trackWeight(unsigned int svIndex, const TrackRef &track) const;
00096
00097 Measurement1D
00098 flightDistance(unsigned int index, bool in2d = false) const
00099 { return in2d ? m_svData[index].dist2d : m_svData[index].dist3d; }
00100 const GlobalVector &flightDirection(unsigned int index) const
00101 { return m_svData[index].direction; }
00102
00103 virtual TaggingVariableList taggingVariables() const;
00104
00105 private:
00106 std::vector<IndexedTrackData> m_trackData;
00107 std::vector<VertexData> m_svData;
00108 unsigned int m_vertexCandidates;
00109
00110 TrackIPTagInfoRef m_trackIPTagInfoRef;
00111 };
00112
00113 DECLARE_EDM_REFS(SecondaryVertexTagInfo)
00114
00115 }
00116
00117 #endif // DataFormats_BTauReco_SecondaryVertexTagInfo_h