EIC 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 <cmath>
12 #include <iostream>
13 
14 class PHObject;
15 
16 using namespace std;
17 
19  : _id(0xFFFFFFFF)
20  , _mom()
21  , _e(NAN)
22  , _comp_ids()
23  , _property_map()
24 {
25  for (int i = 0; i < 3; ++i) _mom[i] = NAN;
26 }
27 
28 void Jetv1::identify(ostream& os) const
29 {
30  os << "---Jet v1-----------------------" << endl;
31  os << "jetid: " << get_id() << endl;
32  os << " (px,py,pz,e) = (" << get_px() << ", " << get_py() << ", ";
33  os << get_pz() << ", " << get_e() << ") GeV" << endl;
34  print_property(os);
35  for (ConstIter citer = begin_comp(); citer != end_comp(); ++citer)
36  {
37  cout << citer->first << " -> " << citer->second << endl;
38  }
39  os << "-----------------------------------------------" << endl;
40 
41  return;
42 }
43 
45 {
46  _id = 0xFFFFFFFF;
47  for (int i = 0; i < 3; ++i) _mom[i] = NAN;
48  _e = NAN;
49  _comp_ids.clear();
50  _property_map.clear();
51 }
52 
53 int Jetv1::isValid() const
54 {
55  if (_id == 0xFFFFFFFF) return 0;
56  for (int i = 0; i < 3; ++i)
57  {
58  if (isnan(_mom[i])) return 0;
59  }
60  if (isnan(_e)) return 0;
61  if (_comp_ids.empty()) return 0;
62  return 1;
63 }
64 
66 {
67  Jet* jet = new Jetv1(*this);
68  return jet;
69 }
70 
71 float Jetv1::get_p() const
72 {
73  return sqrt(get_px() * get_px() + get_py() * get_py() + get_pz() * get_pz());
74 }
75 
76 float Jetv1::get_pt() const
77 {
78  return sqrt(get_px() * get_px() + get_py() * get_py());
79 }
80 
81 float Jetv1::get_et() const
82 {
83  return get_pt() / get_p() * get_e();
84 }
85 
86 float Jetv1::get_eta() const
87 {
88  return asinh(get_pz() / get_pt());
89 }
90 
91 float Jetv1::get_phi() const
92 {
93  return atan2(get_py(), get_px());
94 }
95 
96 float Jetv1::get_mass() const
97 {
98  // follow CLHEP convention and return negative mass if E^2 - p^2 < 0
99  float mass2 = get_mass2();
100  if (mass2 < 0)
101  return -1 * sqrt(fabs(mass2));
102  else
103  return sqrt(mass2);
104 }
105 
106 float Jetv1::get_mass2() const
107 {
108  float p2 = get_px() * get_px() + get_py() * get_py() + get_pz() * get_pz();
109  return get_e() * get_e() - p2;
110 }
111 
113 {
114  typ_property_map::const_iterator citer = _property_map.find(prop_id);
115  if (citer == _property_map.end())
116  return false;
117  else
118  return true;
119 }
120 
121 float Jetv1::get_property(Jet::PROPERTY prop_id) const
122 {
123  typ_property_map::const_iterator citer = _property_map.find(prop_id);
124  if (citer == _property_map.end())
125  return NAN;
126  else
127  return citer->second;
128 }
129 
131 {
132  _property_map[prop_id] = value;
133 }
134 
135 void Jetv1::print_property(ostream& os) const
136 {
137  for (typ_property_map::const_iterator citer = _property_map.begin();
138  citer != _property_map.end(); ++citer)
139  {
140  os << " "; //indent
141 
142  switch (citer->first)
143  {
144  case prop_JetCharge:
145  os << "Jet Charge";
146  break;
147  case prop_BFrac:
148  os << "Jet B-quark fraction";
149  break;
150  default:
151  os << "Property[" << citer->first << "]";
152  break;
153  }
154 
155  os << "\t= " << citer->second << endl;
156  }
157 }