CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SecondaryVertexTagInfo.cc
Go to the documentation of this file.
1 #include <functional>
2 #include <ext/functional>
3 #include <algorithm>
4 
8 
10 
11 using namespace reco;
12 
13 namespace {
14  struct TrackFinder {
15  TrackFinder(const TrackRefVector &tracks,
16  const TrackRef &track) :
17  tracks(tracks), track(track) {}
18 
19  bool operator () (const SecondaryVertexTagInfo::IndexedTrackData &idt)
20  { return tracks[idt.first] == track; }
21 
22  const TrackRefVector &tracks;
23  const TrackRef &track;
24  };
25 
26  struct VertexTrackSelector {
27  bool operator () (const SecondaryVertexTagInfo::IndexedTrackData &idt)
28  { return idt.second.associatedToVertex(); }
29  };
30 
31  struct IndexedVertexTrackSelector {
32  IndexedVertexTrackSelector(unsigned int index) :
33  index(index) {}
34 
35  bool operator () (const SecondaryVertexTagInfo::IndexedTrackData &idt)
36  { return idt.second.associatedToVertex(index); }
37 
38  unsigned int index;
39  };
40 }
41 
43  const std::vector<IndexedTrackData> &trackData,
44  const std::vector<VertexData> &svData,
45  unsigned int vertexCandidates,
46  const TrackIPTagInfoRef &trackIPTagInfoRef) :
47  m_trackData(trackData),
48  m_svData(svData),
49  m_vertexCandidates(vertexCandidates),
50  m_trackIPTagInfoRef(trackIPTagInfoRef)
51 {
52 }
53 
55 {
56  return std::count_if(m_trackData.begin(), m_trackData.end(),
57  VertexTrackSelector());
58 }
59 
60 unsigned int SecondaryVertexTagInfo::nVertexTracks(unsigned int index) const
61 {
62  return std::count_if(m_trackData.begin(), m_trackData.end(),
63  IndexedVertexTrackSelector(index));
64 }
65 
67 {
68  TrackRefVector trackRefs;
69  const TrackRefVector &trackIPTrackRefs =
70  m_trackIPTagInfoRef->selectedTracks();
71 
72  for(std::vector<IndexedTrackData>::const_iterator iter =
73  m_trackData.begin(); iter != m_trackData.end(); iter++)
74 
75  trackRefs.push_back(trackIPTrackRefs[iter->first]);
76 
77  return trackRefs;
78 }
79 
81 {
82  TrackRefVector trackRefs;
83  const TrackRefVector &trackIPTrackRefs =
84  m_trackIPTagInfoRef->selectedTracks();
85 
86  for(std::vector<IndexedTrackData>::const_iterator iter =
87  m_trackData.begin(); iter != m_trackData.end(); iter++)
88 
89  if (iter->second.associatedToVertex())
90  trackRefs.push_back(trackIPTrackRefs[iter->first]);
91 
92  return trackRefs;
93 }
94 
96 {
97  TrackRefVector trackRefs;
98  const TrackRefVector &trackIPTrackRefs =
99  m_trackIPTagInfoRef->selectedTracks();
100 
101  for(std::vector<IndexedTrackData>::const_iterator iter =
102  m_trackData.begin(); iter != m_trackData.end(); iter++)
103 
104  if (iter->second.associatedToVertex(index))
105  trackRefs.push_back(trackIPTrackRefs[iter->first]);
106 
107  return trackRefs;
108 }
109 
111 {
112  return m_trackIPTagInfoRef->selectedTracks()[m_trackData[index].first];
113 }
114 
115 unsigned int SecondaryVertexTagInfo::findTrack(const TrackRef &track) const
116 {
117  std::vector<IndexedTrackData>::const_iterator pos =
118  std::find_if(m_trackData.begin(), m_trackData.end(),
119  TrackFinder(m_trackIPTagInfoRef->selectedTracks(),
120  track));
121 
122  if (pos == m_trackData.end())
124  << "Track not found in "
125  "SecondaryVertexTagInfo::findTrack." << std::endl;
126 
127  return pos - m_trackData.begin();
128 }
129 
132 {
133  return m_trackData[index].second;
134 }
135 
138 {
139  return m_trackData[findTrack(track)].second;
140 }
141 
144 {
145  return m_trackIPTagInfoRef->impactParameterData()[
146  m_trackData[index].first];
147 }
148 
151 {
152  return trackIPData(findTrack(track));
153 }
154 
155 float SecondaryVertexTagInfo::trackWeight(unsigned int svIndex,
156  const TrackRef &track) const
157 {
158  return m_svData[svIndex].vertex.trackWeight(track);
159 }
160 
161 float SecondaryVertexTagInfo::trackWeight(unsigned int svIndex,
162  unsigned int trackIndex) const
163 {
164  return trackWeight(svIndex, track(trackIndex));
165 }
166 
168 {
169  TaggingVariableList vars;
170 
171  for(std::vector<VertexData>::const_iterator iter = m_svData.begin();
172  iter != m_svData.end(); iter++) {
174  iter->dist2d.value(), true);
176  iter->dist2d.significance(), true);
178  iter->dist3d.value(), true);
180  iter->dist3d.significance(), true);
181 
183  Geom::deltaR(iter->direction, jet()->momentum()), true);
184  }
185 
188 
189  vars.finalize();
190  return vars;
191 }
const TrackData & trackData(unsigned int index) const
unsigned int findTrack(const TrackRef &track) const
std::vector< VertexData > m_svData
virtual TaggingVariableList taggingVariables() const
returns a description of the extended informations in a TaggingVariableList
virtual edm::RefToBase< Jet > jet(void) const
returns a polymorphic reference to the tagged jet
TrackRef track(unsigned int index) const
const TrackIPTagInfo::TrackIPData & trackIPData(unsigned int index) const
TrackRefVector selectedTracks() const
float trackWeight(unsigned int svIndex, unsigned int trackindex) const
TrackRefVector vertexTracks() const
std::pair< unsigned int, TrackData > IndexedTrackData
tuple tracks
Definition: testEve_cfg.py:39
std::vector< IndexedTrackData > m_trackData
double deltaR(const Vector1 &v1, const Vector2 &v2)
Definition: VectorUtil.h:84
void push_back(value_type const &ref)
Add a Ref&lt;C, T&gt; to the RefVector.
Definition: RefVector.h:64
void insert(const TaggingVariable &variable, bool delayed=false)