Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Jetv1.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Jetv1.cc
1 
9 #include "Jetv1.h"
10 
11 #include <algorithm>
12 #include <cmath>
13 #include <iostream>
14 
15 class PHObject;
16 std::vector<float> DummyJetPropVecv1;
17 
19 {
20  std::fill(std::begin(_mom), std::end(_mom), NAN);
21 }
22 
23 void Jetv1::identify(std::ostream& os) const
24 {
25  os << "---Jet v1-----------------------" << std::endl;
26  os << "jetid: " << get_id() << std::endl;
27  os << " (px,py,pz,e) = (" << get_px() << ", " << get_py() << ", ";
28  os << get_pz() << ", " << get_e() << ") GeV" << std::endl;
29  print_property(os);
30  for (ConstIter citer = begin_comp(); citer != end_comp(); ++citer)
31  {
32  os << citer->first << " -> " << citer->second << std::endl;
33  }
34  os << "-----------------------------------------------" << std::endl;
35 
36  return;
37 }
38 
40 {
41  _id = 0xFFFFFFFF;
42  std::fill(std::begin(_mom), std::end(_mom), NAN);
43  _e = NAN;
44  _comp_ids.clear();
45  _property_map.clear();
46 }
47 
48 int Jetv1::isValid() const
49 {
50  if (_id == 0xFFFFFFFF) return 0;
51  for (float i : _mom)
52  {
53  if (std::isnan(i)) return 0;
54  }
55  if (std::isnan(_e)) return 0;
56  if (_comp_ids.empty()) return 0;
57  return 1;
58 }
59 
61 {
62  Jet* jet = new Jetv1(*this);
63  return jet;
64 }
65 
66 float Jetv1::get_p() const
67 {
68  return std::sqrt(get_px() * get_px() + get_py() * get_py() + get_pz() * get_pz());
69 }
70 
71 float Jetv1::get_pt() const
72 {
73  return std::sqrt(get_px() * get_px() + get_py() * get_py());
74 }
75 
76 float Jetv1::get_et() const
77 {
78  return get_pt() / get_p() * get_e();
79 }
80 
81 float Jetv1::get_eta() const
82 {
83  return std::asinh(get_pz() / get_pt());
84 }
85 
86 float Jetv1::get_phi() const
87 {
88  return std::atan2(get_py(), get_px());
89 }
90 
91 float Jetv1::get_mass() const
92 {
93  // follow CLHEP convention and return negative mass if E^2 - p^2 < 0
94  float mass2 = get_mass2();
95  if (mass2 < 0)
96  {
97  return -1 * sqrt(std::fabs(mass2));
98  }
99  return std::sqrt(mass2);
100 }
101 
102 float Jetv1::get_mass2() const
103 {
104  float p2 = get_px() * get_px() + get_py() * get_py() + get_pz() * get_pz();
105  return get_e() * get_e() - p2;
106 }
107 
109 {
110  typ_property_map::const_iterator citer = _property_map.find(prop_id);
111  if (citer == _property_map.end())
112  {
113  return false;
114  }
115  return true;
116 }
117 
118 float Jetv1::get_property(Jet::PROPERTY prop_id) const
119 {
120  typ_property_map::const_iterator citer = _property_map.find(prop_id);
121  if (citer == _property_map.end())
122  {
123  return NAN;
124  }
125  return citer->second;
126 }
127 
129 {
130  _property_map[prop_id] = value;
131 }
132 
133 void Jetv1::print_property(std::ostream& os) const
134 {
135  for (auto citer : _property_map)
136  {
137  os << " "; //indent
138 
139  switch (citer.first)
140  {
141  case prop_JetCharge:
142  os << "Jet Charge";
143  break;
144  case prop_BFrac:
145  os << "Jet B-quark fraction";
146  break;
147  default:
148  os << "Property[" << citer.first << "]";
149  break;
150  }
151 
152  os << "\t= " << citer.second << std::endl;
153  }
154 }
155 
156 void Jetv1::not_in_v1_msg(const std::string& method_name, std::ostream& os) const {
157  os << " warning: Method Jet::"<<method_name <<"() not implemented in Jetv1" << std::endl;
158 }
159 
160 std::vector<float>& Jetv1::get_property_vec() {
161  not_in_v1_msg("get_property_vec()");
162  return DummyJetPropVecv1;
163 }
164 
165 
166 // inline float Jetv1::get_prop_by_index(unsigned int /*index*/) const
167 // {
168 // not_in_v1_msg("get_prop_by_index()");
169 // return NAN;
170 // }
171 
172 //inline void Jetv1::set_prop_by_index(unsigned int /*index*/, float /*value*/)
173 //{
174 // not_in_v1_msg("set_prop_by_index()");
175 // return;
176 //}
177 
178 void Jetv1::insert_comp(Jet::SRC , unsigned int , bool )
179 {
180  not_in_v1_msg("insert_comp(src,unsigned int, bool)");
181 }
182 
184 {
185  not_in_v1_msg("insert_comp(TYPE_comp_vec&)");
186 }
187 
189 {
190  not_in_v1_msg("insert_comp(TYPE_comp_vec&, bool)");
191 }
192 
194 {
195  not_in_v1_msg("set_comp_sort_flag");
196 }
197 
199 {
200  not_in_v1_msg("num_comp");
201  return 0;
202 }
203 
204 void Jetv1::print_comp(std::ostream& , bool )
205 {
206  not_in_v1_msg("print_comp");
207 }
208 
209 std::vector<Jet::SRC> Jetv1::comp_src_vec()
210 {
211  not_in_v1_msg("print_comp");
212  return {};
213 }
214 
215 std::map<Jet::SRC, size_t> Jetv1::comp_src_sizemap()
216 {
217  not_in_v1_msg("comp_src_sizemap");
218  return {};
219 }
220 
222 {
223  not_in_v1_msg("comp_begin");
224  return Jet::comp_begin(Jet::SRC::VOID);
225 }
226 
228 {
229  not_in_v1_msg("comp_end");
230  return Jet::comp_end(Jet::SRC::VOID);
231 }
232 
234 {
235  not_in_v1_msg("comp_begin");
236  return Jet::comp_begin();
237 }
239 {
240  not_in_v1_msg("comp_end");
241  return Jet::comp_end();
242 }
244 {
245  not_in_v1_msg("get_comp_vec");
246  return Jet::get_comp_vec();
247 }
249 {
250  not_in_v1_msg("resize_properties()");
251 }