File indexing completed on 2025-08-06 08:17:46
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Jetv2.h"
0010
0011 #include <phool/phool.h>
0012 #include <algorithm>
0013 #include <cmath>
0014 #include <iostream>
0015
0016 class PHObject;
0017
0018 Jetv2::Jetv2(unsigned int n_prop)
0019 : _properties(n_prop, std::numeric_limits<float>::quiet_NaN())
0020 {
0021 }
0022
0023 void Jetv2::identify(std::ostream& os) const
0024 {
0025 os << "---Jet v2-----------------------" << std::endl;
0026 os << "jetid: " << get_id() << std::endl;
0027 os << " (px,py,pz,e) = (" << get_px() << ", " << get_py() << ", ";
0028 os << get_pz() << ", " << get_e() << ") GeV" << std::endl;
0029
0030 os << " Jet Properties:";
0031 for (const auto& val : _properties)
0032 {
0033 os << " " << val;
0034 }
0035 os << std::endl;
0036
0037 os << " Jet Components: " << _comp_ids.size() << std::endl;
0038 ;
0039 return;
0040 }
0041
0042 void Jetv2::print_comp(std::ostream& os, bool single_line)
0043 {
0044 for (auto iter = comp_begin(); iter != comp_end(); ++iter)
0045 {
0046 os << " (" << iter->first << "->" << static_cast<int>(iter->second) << ")";
0047 if (!single_line)
0048 {
0049 os << std::endl;
0050 }
0051 }
0052 if (single_line)
0053 {
0054 os << std::endl;
0055 }
0056 }
0057
0058 std::vector<Jet::SRC> Jetv2::comp_src_vec()
0059 {
0060 std::vector<Jet::SRC> vec{};
0061 auto iter = comp_begin();
0062 auto iter_end = comp_end();
0063 if (iter == iter_end)
0064 {
0065 return vec;
0066 }
0067 while (iter != iter_end)
0068 {
0069 Jet::SRC src = iter->first;
0070 vec.push_back(src);
0071 iter = comp_end(src);
0072 }
0073 return vec;
0074 }
0075
0076 std::map<Jet::SRC, size_t> Jetv2::comp_src_sizemap()
0077 {
0078 std::map<Jet::SRC, size_t> sizemap{};
0079 auto iter = comp_begin();
0080 auto iter_end = comp_end();
0081 if (iter == iter_end)
0082 {
0083 return sizemap;
0084 }
0085 while (iter != iter_end)
0086 {
0087 Jet::SRC src = iter->first;
0088 auto iter_ub = comp_end(src);
0089 sizemap.insert(std::make_pair(src, static_cast<size_t>(iter_ub - iter)));
0090 iter = iter_ub;
0091 }
0092 return sizemap;
0093 }
0094
0095 void Jetv2::Reset()
0096 {
0097 _id = 0xFFFFFFFF;
0098 std::fill(std::begin(_mom), std::end(_mom), std::numeric_limits<float>::quiet_NaN());
0099 _e = std::numeric_limits<float>::quiet_NaN();
0100 _comp_ids.clear();
0101 _properties.clear();
0102 }
0103
0104 int Jetv2::isValid() const
0105 {
0106 if (_id == 0xFFFFFFFF)
0107 {
0108 return 0;
0109 }
0110 for (float i : _mom)
0111 {
0112 if (std::isnan(i))
0113 {
0114 return 0;
0115 }
0116 }
0117 if (std::isnan(_e))
0118 {
0119 return 0;
0120 }
0121 if (_comp_ids.empty())
0122 {
0123 return 0;
0124 }
0125 return 1;
0126 }
0127
0128 PHObject* Jetv2::CloneMe() const
0129 {
0130 Jet* jet = new Jetv2(*this);
0131 return jet;
0132 }
0133
0134 float Jetv2::get_p() const
0135 {
0136 return std::sqrt((get_px() * get_px()) + (get_py() * get_py()) + (get_pz() * get_pz()));
0137 }
0138
0139 float Jetv2::get_pt() const
0140 {
0141 return std::sqrt((get_px() * get_px()) + (get_py() * get_py()));
0142 }
0143
0144 float Jetv2::get_et() const
0145 {
0146 return get_pt() / get_p() * get_e();
0147 }
0148
0149 float Jetv2::get_eta() const
0150 {
0151 return std::asinh(get_pz() / get_pt());
0152 }
0153
0154 float Jetv2::get_phi() const
0155 {
0156 return std::atan2(get_py(), get_px());
0157 }
0158
0159 float Jetv2::get_mass() const
0160 {
0161
0162 float mass2 = get_mass2();
0163 if (mass2 < 0)
0164 {
0165 return -1 * std::sqrt(std::fabs(mass2));
0166 }
0167 return std::sqrt(mass2);
0168 }
0169
0170 float Jetv2::get_mass2() const
0171 {
0172 float p2 = (get_px() * get_px()) + (get_py() * get_py()) + (get_pz() * get_pz());
0173 return (get_e() * get_e()) - p2;
0174 }
0175
0176 size_t Jetv2::num_comp(Jet::SRC iSRC)
0177 {
0178 if (iSRC == Jet::SRC::VOID)
0179 {
0180 return (comp_end() - comp_begin());
0181 }
0182 return (comp_end(iSRC) - comp_begin(iSRC));
0183 }
0184
0185 void Jetv2::insert_comp(SRC iSRC, unsigned int compid)
0186 {
0187 _is_sorted = false;
0188 _comp_ids.emplace_back(iSRC, compid);
0189 }
0190 void Jetv2::insert_comp(SRC iSRC, unsigned int compid, bool )
0191 {
0192 _comp_ids.emplace_back(iSRC, compid);
0193 }
0194
0195
0196 void Jetv2::insert_comp(Jet::TYPE_comp_vec& added)
0197 {
0198 _is_sorted = false;
0199 _comp_ids.insert(_comp_ids.end(), added.begin(), added.end());
0200 }
0201 void Jetv2::insert_comp(Jet::TYPE_comp_vec& added, bool )
0202 {
0203 _comp_ids.insert(_comp_ids.end(), added.begin(), added.end());
0204 }
0205
0206 void Jetv2::ensure_sorted()
0207 {
0208 if (!_is_sorted)
0209 {
0210 std::sort(_comp_ids.begin(), _comp_ids.end(), CompareSRC());
0211 _is_sorted = true;
0212 }
0213 }
0214
0215 Jetv2::ITER_comp_vec Jetv2::comp_begin(Jet::SRC iSRC)
0216 {
0217 ensure_sorted();
0218 return std::lower_bound(_comp_ids.begin(), _comp_ids.end(), iSRC, CompareSRC());
0219 }
0220
0221 Jetv2::ITER_comp_vec Jetv2::comp_end(Jet::SRC iSRC)
0222 {
0223 ensure_sorted();
0224 return std::upper_bound(_comp_ids.begin(), _comp_ids.end(), iSRC, CompareSRC());
0225 }
0226
0227 void Jetv2::msg_dep_fn(const std::string& fn_name)
0228 {
0229 std::cout << " warning: Method Jet::" << fn_name << "() deprecated in Jetv2" << std::endl;
0230 }
0231
0232 bool Jetv2::has_property(Jet::PROPERTY ) const
0233 {
0234 msg_dep_fn("has_property");
0235 return false;
0236 }
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247 void Jetv2::print_property(std::ostream& ) const
0248 {
0249 msg_dep_fn("print_property");
0250 }
0251
0252 bool Jetv2::empty_comp() const
0253 {
0254 msg_dep_fn("empty_comp");
0255 return true;
0256 }
0257
0258 size_t Jetv2::count_comp(Jet::SRC ) const
0259 {
0260 msg_dep_fn("count_comp");
0261 return 0;
0262 }
0263
0264 Jet::ConstIter Jetv2::begin_comp() const
0265 {
0266 msg_dep_fn("begin_comp");
0267 return Jet::begin_comp();
0268 }
0269 Jet::ConstIter Jetv2::lower_bound_comp(Jet::SRC ) const
0270 {
0271 msg_dep_fn("lower_bound_comp");
0272 return Jet::lower_bound_comp(Jet::SRC::VOID);
0273 }
0274 Jet::ConstIter Jetv2::upper_bound_comp(Jet::SRC ) const
0275 {
0276 msg_dep_fn("upper_bound_comp");
0277 return Jet::upper_bound_comp(Jet::SRC::VOID);
0278 }
0279 Jet::ConstIter Jetv2::find(Jet::SRC ) const
0280 {
0281 msg_dep_fn("find");
0282 return Jet::find(Jet::SRC::VOID);
0283 }
0284 Jet::ConstIter Jetv2::end_comp() const
0285 {
0286 msg_dep_fn("end_comp");
0287 return Jet::end_comp();
0288 }
0289 Jet::Iter Jetv2::begin_comp()
0290 {
0291 msg_dep_fn("begin_comp");
0292 return Jet::begin_comp();
0293 }
0294 Jet::Iter Jetv2::lower_bound_comp(Jet::SRC )
0295 {
0296 msg_dep_fn("lower_bound_comp");
0297 return Jet::lower_bound_comp(Jet::SRC::VOID);
0298 }
0299 Jet::Iter Jetv2::upper_bound_comp(Jet::SRC )
0300 {
0301 msg_dep_fn("upper_bound_comp");
0302 return Jet::upper_bound_comp(Jet::SRC::VOID);
0303 }
0304 Jet::Iter Jetv2::find(Jet::SRC )
0305 {
0306 msg_dep_fn("find");
0307 return Jet::find(Jet::SRC::VOID);
0308 }
0309 Jet::Iter Jetv2::end_comp()
0310 {
0311 msg_dep_fn("end_comp");
0312 return Jet::end_comp();
0313 }
0314 size_t Jetv2::erase_comp(Jet::SRC )
0315 {
0316 msg_dep_fn("erase_comp");
0317 return 0;
0318 }
0319 void Jetv2::erase_comp(Jet::Iter )
0320 {
0321 msg_dep_fn("erase_comp");
0322 }
0323 void Jetv2::erase_comp(Jet::Iter , Jet::Iter )
0324 {
0325 msg_dep_fn("erase_comp");
0326 }