Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Jetv2.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Jetv2.cc
1 
9 #include "Jetv2.h"
10 
11 #include <phool/phool.h>
12 #include <algorithm>
13 #include <cmath>
14 #include <iostream>
15 
16 class PHObject;
17 
18 Jetv2::Jetv2(unsigned int n_prop)
19  : _properties(n_prop, NAN)
20 { }
21 
22 void Jetv2::identify(std::ostream& os) const
23 {
24  os << "---Jet v2-----------------------" << std::endl;
25  os << "jetid: " << get_id() << std::endl;
26  os << " (px,py,pz,e) = (" << get_px() << ", " << get_py() << ", ";
27  os << get_pz() << ", " << get_e() << ") GeV" << std::endl;
28 
29  os << " Jet Properties:";
30  for (auto& val : _properties)
31  {
32  os << " " << val;
33  }
34  os << std::endl;
35 
36  os << " Jet Components: " << _comp_ids.size() << std::endl;
37  ;
38  return;
39 }
40 
41 void Jetv2::print_comp(std::ostream& os, bool single_line)
42 {
43  for (auto iter = comp_begin(); iter != comp_end(); ++iter)
44  {
45  os << " (" << iter->first << "->" << static_cast<int>(iter->second) << ")";
46  if (!single_line) os << std::endl;
47  }
48  if (single_line) os << std::endl;
49 }
50 
51 std::vector<Jet::SRC> Jetv2::comp_src_vec()
52 {
53  std::vector<Jet::SRC> vec{};
54  auto iter = comp_begin();
55  auto iter_end = comp_end();
56  if (iter == iter_end) return vec;
57  while (iter != iter_end)
58  {
59  Jet::SRC src = iter->first;
60  vec.push_back(src);
61  iter = comp_end(src);
62  }
63  return vec;
64 }
65 
66 std::map<Jet::SRC, size_t> Jetv2::comp_src_sizemap()
67 {
68  std::map<Jet::SRC, size_t> sizemap{};
69  auto iter = comp_begin();
70  auto iter_end = comp_end();
71  if (iter == iter_end) return sizemap;
72  while (iter != iter_end)
73  {
74  Jet::SRC src = iter->first;
75  auto iter_ub = comp_end(src);
76  sizemap.insert(std::make_pair(src, static_cast<size_t>(iter_ub - iter)));
77  iter = iter_ub;
78  }
79  return sizemap;
80 }
81 
83 {
84  _id = 0xFFFFFFFF;
85  std::fill(std::begin(_mom), std::end(_mom), NAN);
86  _e = NAN;
87  _comp_ids.clear();
88  _properties.clear();
89 }
90 
91 int Jetv2::isValid() const
92 {
93  if (_id == 0xFFFFFFFF) return 0;
94  for (float i : _mom)
95  {
96  if (std::isnan(i)) return 0;
97  }
98  if (std::isnan(_e)) return 0;
99  if (_comp_ids.empty()) return 0;
100  return 1;
101 }
102 
104 {
105  Jet* jet = new Jetv2(*this);
106  return jet;
107 }
108 
109 float Jetv2::get_p() const
110 {
111  return std::sqrt(get_px() * get_px() + get_py() * get_py() + get_pz() * get_pz());
112 }
113 
114 float Jetv2::get_pt() const
115 {
116  return std::sqrt(get_px() * get_px() + get_py() * get_py());
117 }
118 
119 float Jetv2::get_et() const
120 {
121  return get_pt() / get_p() * get_e();
122 }
123 
124 float Jetv2::get_eta() const
125 {
126  return std::asinh(get_pz() / get_pt());
127 }
128 
129 float Jetv2::get_phi() const
130 {
131  return std::atan2(get_py(), get_px());
132 }
133 
134 float Jetv2::get_mass() const
135 {
136  // follow CLHEP convention and return negative mass if E^2 - p^2 < 0
137  float mass2 = get_mass2();
138  if (mass2 < 0)
139  {
140  return -1 * sqrt(std::fabs(mass2));
141  }
142  return std::sqrt(mass2);
143 }
144 
145 float Jetv2::get_mass2() const
146 {
147  float p2 = get_px() * get_px() + get_py() * get_py() + get_pz() * get_pz();
148  return get_e() * get_e() - p2;
149 }
150 
152 {
153  if (iSRC == Jet::SRC::VOID) return (comp_end() - comp_begin());
154  return (comp_end(iSRC) - comp_begin(iSRC));
155 }
156 
157 void Jetv2::insert_comp(SRC iSRC, unsigned int compid)
158 {
159  _is_sorted = false;
160  _comp_ids.push_back(std::make_pair(iSRC, compid));
161 }
162 void Jetv2::insert_comp(SRC iSRC, unsigned int compid, bool /*skip_flag*/)
163 { _comp_ids.push_back(std::make_pair(iSRC, compid)); }
164 
165 // same as above, but add whole vector
167 {
168  _is_sorted = false;
169  _comp_ids.insert(_comp_ids.end(), added.begin(), added.end());
170 }
171 void Jetv2::insert_comp(Jet::TYPE_comp_vec& added, bool /*skip_nosort_flag_set*/)
172 {
173  _comp_ids.insert(_comp_ids.end(), added.begin(), added.end());
174 }
175 
177 {
178  if (!_is_sorted) {
179  std::sort(_comp_ids.begin(), _comp_ids.end(), CompareSRC());
180  _is_sorted = true;
181  }
182 }
183 
185 {
186  ensure_sorted();
187  return std::lower_bound(_comp_ids.begin(), _comp_ids.end(), iSRC, CompareSRC());
188 }
189 
191 {
192  ensure_sorted();
193  return std::upper_bound(_comp_ids.begin(), _comp_ids.end(), iSRC, CompareSRC());
194 }
195 
196 void Jetv2::msg_dep_fn(const std::string& fn_name) const {
197  std::cout << " warning: Method Jet::"<<fn_name <<"() deprecated in Jetv2" << std::endl;
198 }
199 
200 bool Jetv2::has_property(Jet::PROPERTY /*prop_id*/) const {
201  msg_dep_fn("has_property");
202  return false;
203 }
204 
205 //float Jetv2::get_property(Jet::PROPERTY /*prop_id*/) const {
206 // msg_dep_fn("get_property");
207 // return NAN;
208 //}
209 
210 //void Jetv2::set_property(Jet::PROPERTY /**/, float /**/) {
211 // msg_dep_fn("set_property");
212 //}
213 
214 void Jetv2::print_property(std::ostream& ) const {
215  msg_dep_fn("print_property");
216 }
217 
218 bool Jetv2::empty_comp() const {
219  msg_dep_fn("empty_comp");
220  return true;
221 }
222 
223 size_t Jetv2::count_comp(Jet::SRC ) const {
224  msg_dep_fn("count_comp");
225  return 0;
226 }
227 
229 {
230  msg_dep_fn("begin_comp");
231  return Jet::begin_comp();
232 }
234 {
235  msg_dep_fn("lower_bound_comp");
236  return Jet::lower_bound_comp(Jet::SRC::VOID);
237 }
239 {
240  msg_dep_fn("upper_bound_comp");
241  return Jet::upper_bound_comp(Jet::SRC::VOID);
242 }
244 {
245  msg_dep_fn("find");
246  return Jet::find(Jet::SRC::VOID);
247 }
249 {
250  msg_dep_fn("end_comp");
251  return Jet::end_comp();
252 }
254 {
255  msg_dep_fn("begin_comp");
256  return Jet::begin_comp();
257 }
259 {
260  msg_dep_fn("lower_bound_comp");
261  return Jet::lower_bound_comp(Jet::SRC::VOID);
262 }
264 {
265  msg_dep_fn("upper_bound_comp");
266  return Jet::upper_bound_comp(Jet::SRC::VOID);
267 }
269 {
270  msg_dep_fn("find");
271  return Jet::find(Jet::SRC::VOID);
272 }
274 {
275  msg_dep_fn("end_comp");
276  return Jet::end_comp();
277 }
279  msg_dep_fn("erase_comp");
280  return 0;
281 }
283 {
284  msg_dep_fn("erase_comp");
285 }
286 void Jetv2::erase_comp(Jet::Iter /*first*/, Jet::Iter /*last*/)
287 {
288  msg_dep_fn("erase_comp");
289 }
290