CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DataFormats/BTauReco/interface/TrackIPTagInfo.h

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 //typedef edm::ExtCollection< TrackIPTagInfo,JetTagCollection> TrackCountingExtCollection;
00109 //typedef edm::OneToOneAssociation<JetTagCollection, TrackIPTagInfo> TrackCountingExtCollection;
00110 
00111 DECLARE_EDM_REFS( TrackIPTagInfo )
00112 
00113 }
00114 
00115 #endif