Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GlobalVertexv2.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GlobalVertexv2.cc
1 #include "GlobalVertexv2.h"
2 
3 #include <cmath>
4 
6  : _id(std::numeric_limits<unsigned int>::max())
7  , _bco(std::numeric_limits<unsigned int>::max())
8 {
9 }
10 
11 GlobalVertexv2::GlobalVertexv2(const unsigned int id)
12  : _id(id)
13  ,_bco(std::numeric_limits<unsigned int>::max())
14 {
15 }
16 
17 void GlobalVertexv2::identify(std::ostream& os) const
18 {
19  os << "---GlobalVertexv2-----------------------" << std::endl;
20 
21  os << " list of vtx ids: " << std::endl;
22  for(ConstVertexIter iter = begin_vertexes(); iter != end_vertexes(); ++iter)
23  {
24  os << " Vertex type " << iter->first << " has " << iter->second.size()
25  << " vertices associated to it" << std::endl;
26  for(auto& vertex : iter->second)
27  {
28  vertex->identify();
29  }
30  }
31 
32  os << "-----------------------------------------------" << std::endl;
33 
34  return;
35 }
36 
38 {
39 
40  if (_vtxs.empty())
41  {
42  return 0;
43  }
44  return 1;
45 }
47 {
48  auto it = _vtxs.find(type);
49  if( it == _vtxs.end())
50  {
51  VertexVector vector;
52  vector.push_back(vertex);
53  _vtxs.insert(std::make_pair(type, vector));
54  return;
55  }
56 
57  it->second.push_back(vertex);
58 
59 
60 }
62 {
63  auto it = _vtxs.find(type);
64  if(it == _vtxs.end())
65  {
66  return 0;
67  }
68 
69  return it->second.size();
70 }
71 
72 float GlobalVertexv2::get_t() const
73 {
74  auto it = _vtxs.find(GlobalVertex::VTXTYPE::MBD);
75  if(it == _vtxs.end())
76  {
77  return NAN;
78  }
79 
80  return it->second[0]->get_t();
81 }
82 
84 {
85  auto it = _vtxs.find(GlobalVertex::VTXTYPE::MBD);
86  if(it == _vtxs.end())
87  {
88  return NAN;
89  }
90 
91  return it->second[0]->get_t_err();
92 }
93 float GlobalVertexv2::get_x() const
94 {
95  return get_position(0);
96 }
97 float GlobalVertexv2::get_y() const
98 {
99  return get_position(1);
100 }
102 {
103  return get_position(2);
104 }
105 
106 float GlobalVertexv2::get_position(unsigned int coor) const
107 {
108  auto svtxit = _vtxs.find(GlobalVertex::VTXTYPE::SVTX);
109  if(svtxit == _vtxs.end())
110  {
111  auto mbdit = _vtxs.find(GlobalVertex::VTXTYPE::MBD);
112  if(mbdit == _vtxs.end())
113  {
114  return NAN;
115  }
116  return mbdit->second[0]->get_position(coor);
117  }
118 
119  GlobalVertex::VertexVector trackvertices = svtxit->second;
120  size_t mosttracks = 0;
121  float pos = NAN;
122  for(auto vertex : trackvertices)
123  {
124  if(vertex->size_tracks() > mosttracks)
125  {
126  mosttracks = vertex->size_tracks();
127  pos = vertex->get_position(coor);
128  }
129  }
130 
131  return pos;
132 }
133 
135 {
136  auto svtxit = _vtxs.find(GlobalVertex::VTXTYPE::SVTX);
137  if(svtxit == _vtxs.end())
138  {
139  return NAN;
140  }
141 
142  GlobalVertex::VertexVector trackvertices = svtxit->second;
143  size_t mosttracks = 0;
144  float chisq = NAN;
145  for(auto vertex : trackvertices)
146  {
147  if(vertex->size_tracks() > mosttracks)
148  {
149  mosttracks = vertex->size_tracks();
150  chisq = vertex->get_chisq();
151  }
152  }
153 
154  return chisq;
155 }
156 
157 unsigned int GlobalVertexv2::get_ndof() const
158 {
159  auto svtxit = _vtxs.find(GlobalVertex::VTXTYPE::SVTX);
160  if(svtxit == _vtxs.end())
161  {
162  return std::numeric_limits<unsigned int>::max();
163  }
164 
165  GlobalVertex::VertexVector trackvertices = svtxit->second;
166  size_t mosttracks = 0;
167  unsigned int ndf = std::numeric_limits<unsigned int>::max();
168  for(auto vertex : trackvertices)
169  {
170  if(vertex->size_tracks() > mosttracks)
171  {
172  mosttracks = vertex->size_tracks();
173  ndf = vertex->get_ndof();
174  }
175  }
176 
177  return ndf;
178 }
179 
180 float GlobalVertexv2::get_error(unsigned int i, unsigned int j) const
181 {
182  auto svtxit = _vtxs.find(GlobalVertex::VTXTYPE::SVTX);
183  if(svtxit == _vtxs.end())
184  {
185  auto mbdit = _vtxs.find(GlobalVertex::VTXTYPE::MBD);
186  if(mbdit == _vtxs.end())
187  {
188  return NAN;
189  }
190  // MBD only has z error defined
191  if(i==2 && j==2)
192  {
193  return mbdit->second[0]->get_z_err();
194  }
195  else
196  {
197  return NAN;
198  }
199  }
200 
201  GlobalVertex::VertexVector trackvertices = svtxit->second;
202  size_t mosttracks = 0;
203  float err = NAN;
204  for(auto vertex : trackvertices)
205  {
206  if(vertex->size_tracks() > mosttracks)
207  {
208  mosttracks = vertex->size_tracks();
209  err = vertex->get_error(i, j);
210  }
211  }
212 
213  return err;
214 
215 }