EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4Showerv1.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4Showerv1.cc
1 #include "PHG4Showerv1.h"
2 
3 #include "PHG4HitDefs.h"
4 
5 #include <algorithm> // for fill
6 #include <cmath>
7 #include <iostream>
8 #include <iterator> // for begin, end
9 #include <utility>
10 
11 using namespace std;
12 
14  : _id(0xFFFFFFFF)
15  , _parent_particle_id(0)
16  , _parent_shower_id(0)
17  , _pos()
18  , _covar()
19  , _edep()
20  , _eion()
21  , _light_yield()
22  , _eh_ratio()
23  , _g4particle_ids()
24  , _g4hit_ids()
25 {
26  // with C++11 begin() and end() exist, you do not need the array size anymore
27  // to fill an array
28  fill(std::begin(_pos), std::end(_pos), NAN);
29  fill(std::begin(_covar), std::end(_covar), NAN);
30 }
31 
32 void PHG4Showerv1::identify(ostream &os) const
33 {
34  os << "---PHG4Showerv1-------------------------------" << endl;
35  os << "id: " << get_id() << endl;
36  os << "parent_particle_id: " << get_parent_particle_id() << endl;
37  os << "parent_shower_id: " << get_parent_shower_id() << endl;
38  os << "x: " << get_x() << endl;
39  os << "y: " << get_y() << endl;
40  os << "z: " << get_z() << endl;
41 
42  os << " ( ";
43  os << get_covar(0, 0) << " , ";
44  os << get_covar(0, 1) << " , ";
45  os << get_covar(0, 2) << " )" << endl;
46  os << " covar = ( ";
47  os << get_covar(1, 0) << " , ";
48  os << get_covar(1, 1) << " , ";
49  os << get_covar(1, 2) << " )" << endl;
50  os << " ( ";
51  os << get_covar(2, 0) << " , ";
52  os << get_covar(2, 1) << " , ";
53  os << get_covar(2, 2) << " )" << endl;
54 
55  os << "VOLUME ID : edep eion light_yield" << endl;
56  for (std::map<int, float>::const_iterator iter = _edep.begin();
57  iter != _edep.end(); ++iter)
58  {
59  int volid = iter->first;
60  os << volid << " : " << get_edep(volid) << " " << get_eion(volid) << " "
61  << get_light_yield(volid) << endl;
62  }
63 
64  os << "G4Particle IDs" << endl;
65  for (std::set<int>::const_iterator iter = _g4particle_ids.begin();
66  iter != _g4particle_ids.end(); ++iter)
67  {
68  os << *iter << " ";
69  }
70  os << endl;
71 
72  os << "G4Hit IDs" << endl;
73  for (std::map<int, std::set<PHG4HitDefs::keytype> >::const_iterator iter =
74  _g4hit_ids.begin();
75  iter != _g4hit_ids.end(); ++iter)
76  {
77  for (std::set<PHG4HitDefs::keytype>::const_iterator jter =
78  iter->second.begin();
79  jter != iter->second.end(); ++jter)
80  {
81  os << *jter << " ";
82  }
83  }
84  os << endl;
85 
86  os << "-----------------------------------------------" << endl;
87 
88  return;
89 }
90 
92 {
93  if (_id == 0)
94  return 0;
95  for (int i = 0; i < 3; ++i)
96  {
97  if (isnan(_pos[i]))
98  return 0;
99  }
100  for (int j = 0; j < 3; ++j)
101  {
102  for (int i = j; i < 3; ++i)
103  {
104  if (isnan(get_covar(i, j)))
105  return 0;
106  }
107  }
108  return 1;
109 }
110 
111 void PHG4Showerv1::set_covar(unsigned int i, unsigned int j, float value)
112 {
113  _covar[covar_index(i, j)] = value;
114  return;
115 }
116 
117 float PHG4Showerv1::get_covar(unsigned int i, unsigned int j) const
118 {
119  return _covar[covar_index(i, j)];
120 }
121 
122 unsigned int PHG4Showerv1::covar_index(unsigned int i, unsigned int j) const
123 {
124  if (i > j)
125  std::swap(i, j);
126  return i + 1 + (j + 1) * (j) / 2 - 1;
127 }
128 
129 unsigned int PHG4Showerv1::get_nhits(int volume) const
130 {
131  std::map<int, unsigned int>::const_iterator citer =
132  _nhits.find(volume);
133  if (citer == _nhits.end())
134  return 0;
135  return citer->second;
136 }
137 
139 {
140  std::map<int, float>::const_iterator citer =
141  _edep.find(volume);
142  if (citer == _edep.end())
143  return 0.0;
144  return citer->second;
145 }
146 
148 {
149  double sum = 0;
150  for (const auto &iter : _edep)
151  {
152  sum += iter.second;
153  }
154  return sum;
155 }
156 
158 {
159  std::map<int, float>::const_iterator citer =
160  _eion.find(volume);
161  if (citer == _eion.end())
162  return 0.0;
163  return citer->second;
164 }
165 
167 {
168  double sum = 0;
169  for (const auto &iter : _eion)
170  {
171  sum += iter.second;
172  }
173  return sum;
174 }
175 
177 {
178  std::map<int, float>::const_iterator citer =
179  _light_yield.find(volume);
180  if (citer == _light_yield.end())
181  return 0.0;
182  return citer->second;
183 }
184 
186 {
187  std::map<int, float>::const_iterator citer =
188  _eh_ratio.find(volume);
189  if (citer == _eh_ratio.end())
190  return 0.0;
191  return citer->second;
192 }