CMS 3D CMS Logo

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

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