Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GlobalVertexv1.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GlobalVertexv1.cc
1 #include "GlobalVertexv1.h"
2 
3 #include <cmath>
4 
6  : _id(id)
7 {
8  std::fill(std::begin(_pos), std::end(_pos), std::numeric_limits<float>::quiet_NaN());
9  std::fill(std::begin(_err), std::end(_err), std::numeric_limits<float>::quiet_NaN());
10 }
11 
12 void GlobalVertexv1::identify(std::ostream& os) const
13 {
14  os << "---GlobalVertexv1-----------------------" << std::endl;
15  os << "vertexid: " << get_id();
16 
17  os << " t = " << get_t() << std::endl;
18 
19  os << " (x,y,z) = (" << get_position(0);
20  os << ", " << get_position(1) << ", ";
21  os << get_position(2) << ") cm" << std::endl;
22 
23  os << " chisq = " << get_chisq() << ", ";
24  os << " ndof = " << get_ndof() << std::endl;
25 
26  os << " ( ";
27  os << get_error(0, 0) << " , ";
28  os << get_error(0, 1) << " , ";
29  os << get_error(0, 2) << " )" << std::endl;
30  os << " err = ( ";
31  os << get_error(1, 0) << " , ";
32  os << get_error(1, 1) << " , ";
33  os << get_error(1, 2) << " )" << std::endl;
34  os << " ( ";
35  os << get_error(2, 0) << " , ";
36  os << get_error(2, 1) << " , ";
37  os << get_error(2, 2) << " )" << std::endl;
38 
39  os << " list of vtx ids: " << std::endl;
40  for (ConstVtxIter iter = begin_vtxids(); iter != end_vtxids(); ++iter)
41  {
42  os << " " << iter->first << " => " << iter->second << std::endl;
43  }
44  os << "-----------------------------------------------" << std::endl;
45 
46  return;
47 }
48 
50 {
51  if (!std::isfinite(_t))
52  {
53  return 0;
54  }
55  if (!std::isfinite(_t_err))
56  {
57  return 0;
58  }
59  if (!std::isfinite(_chisq))
60  {
61  return 0;
62  }
63  if (_ndof == std::numeric_limits<unsigned int>::max())
64  {
65  return 0;
66  }
67 
68  for (float _po : _pos)
69  {
70  if (!std::isfinite(_po))
71  {
72  return 0;
73  }
74  }
75  for (int j = 0; j < 3; ++j)
76  {
77  for (int i = j; i < 3; ++i)
78  {
79  if (!std::isfinite(get_error(i, j)))
80  {
81  return 0;
82  }
83  }
84  }
85  if (_vtx_ids.empty())
86  {
87  return 0;
88  }
89  return 1;
90 }
91 
92 void GlobalVertexv1::set_error(unsigned int i, unsigned int j, float value)
93 {
94  _err[covar_index(i, j)] = value;
95  return;
96 }
97 
98 float GlobalVertexv1::get_error(unsigned int i, unsigned int j) const
99 {
100  return _err[covar_index(i, j)];
101 }
102 
103 unsigned int GlobalVertexv1::covar_index(unsigned int i, unsigned int j) const
104 {
105  if (i > j)
106  {
107  std::swap(i, j);
108  }
109  return i + 1 + (j + 1) * (j) / 2 - 1;
110 }