Go to the documentation of this file.00001 #ifndef BTauReco_TrackIpTagInfo_h
00002 #define BTauReco_TrackIpTagInfo_h
00003
00004 #include "DataFormats/BTauReco/interface/RefMacros.h"
00005 #include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h"
00006 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00007 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00008 #include "DataFormats/JetReco/interface/JetTracksAssociation.h"
00009 #include "DataFormats/BTauReco/interface/JTATagInfo.h"
00010 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00011 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00012
00013 namespace reco {
00014
00015 class TrackIPTagInfo : public JTATagInfo {
00016 public:
00017 struct TrackIPData {
00018 GlobalPoint closestToJetAxis;
00019 GlobalPoint closestToGhostTrack;
00020 Measurement1D ip2d;
00021 Measurement1D ip3d;
00022 Measurement1D distanceToJetAxis;
00023 Measurement1D distanceToGhostTrack;
00024 float ghostTrackWeight;
00025 };
00026
00027 TrackIPTagInfo(
00028 const std::vector<TrackIPData> & ipData,
00029 const std::vector<float> & prob2d,
00030 const std::vector<float> & prob3d,
00031 const edm::RefVector<TrackCollection> & selectedTracks,
00032 const JetTracksAssociationRef & jtaRef,
00033 const edm::Ref<VertexCollection> & pv,
00034 const GlobalVector & axis,
00035 const TrackRef & ghostTrack) :
00036 JTATagInfo(jtaRef), m_data(ipData), m_prob2d(prob2d),
00037 m_prob3d(prob3d), m_selectedTracks(selectedTracks), m_pv(pv),
00038 m_axis(axis), m_ghostTrack(ghostTrack) {}
00039
00040 TrackIPTagInfo() {}
00041
00042 virtual ~TrackIPTagInfo() {}
00043
00045 virtual TrackIPTagInfo * clone(void) const
00046 { return new TrackIPTagInfo(*this); }
00047
00056 virtual bool hasProbabilities() const
00057 { return m_data.size() == m_prob3d.size(); }
00058
00062 const std::vector<TrackIPData> & impactParameterData() const
00063 { return m_data; }
00064
00069 const edm::RefVector<TrackCollection> & selectedTracks() const { return m_selectedTracks; }
00070 const std::vector<float> & probabilities(int ip) const {return (ip==0)?m_prob3d:m_prob2d; }
00071
00072 enum SortCriteria { IP3DSig = 0, Prob3D, IP2DSig, Prob2D,
00073 IP3DValue, IP2DValue };
00074
00083 std::vector<size_t> sortedIndexesWithCut(float cut, SortCriteria mode = IP3DSig) const;
00084
00088 std::vector<size_t> sortedIndexes(SortCriteria mode = IP3DSig) const;
00089 reco::TrackRefVector sortedTracks(std::vector<size_t> indexes) const;
00090
00091 virtual TaggingVariableList taggingVariables(void) const;
00092
00093 const edm::Ref<VertexCollection> & primaryVertex() const { return m_pv; }
00094
00095 const GlobalVector & axis() const { return m_axis; }
00096 const TrackRef & ghostTrack() const { return m_ghostTrack; }
00097
00098 private:
00099 std::vector<TrackIPData> m_data;
00100 std::vector<float> m_prob2d;
00101 std::vector<float> m_prob3d;
00102 edm::RefVector<TrackCollection> m_selectedTracks;
00103 edm::Ref<VertexCollection> m_pv;
00104 GlobalVector m_axis;
00105 TrackRef m_ghostTrack;
00106 };
00107
00108
00109
00110
00111 DECLARE_EDM_REFS( TrackIPTagInfo )
00112
00113 }
00114
00115 #endif