File indexing completed on 2025-08-06 08:17:46
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Jetv1.h"
0010
0011 #include <algorithm>
0012 #include <cmath>
0013 #include <iostream>
0014
0015 class PHObject;
0016 std::vector<float> DummyJetPropVecv1;
0017
0018 Jetv1::Jetv1()
0019 {
0020 std::fill(std::begin(_mom), std::end(_mom), std::numeric_limits<float>::quiet_NaN());
0021 }
0022
0023 void Jetv1::identify(std::ostream& os) const
0024 {
0025 os << "---Jet v1-----------------------" << 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 print_property(os);
0030 for (ConstIter citer = begin_comp(); citer != end_comp(); ++citer)
0031 {
0032 os << citer->first << " -> " << citer->second << std::endl;
0033 }
0034 os << "-----------------------------------------------" << std::endl;
0035
0036 return;
0037 }
0038
0039 void Jetv1::Reset()
0040 {
0041 _id = 0xFFFFFFFF;
0042 std::fill(std::begin(_mom), std::end(_mom), std::numeric_limits<float>::quiet_NaN());
0043 _e = std::numeric_limits<float>::quiet_NaN();
0044 _comp_ids.clear();
0045 _property_map.clear();
0046 }
0047
0048 int Jetv1::isValid() const
0049 {
0050 if (_id == 0xFFFFFFFF)
0051 {
0052 return 0;
0053 }
0054 for (float i : _mom)
0055 {
0056 if (std::isnan(i))
0057 {
0058 return 0;
0059 }
0060 }
0061 if (std::isnan(_e))
0062 {
0063 return 0;
0064 }
0065 if (_comp_ids.empty())
0066 {
0067 return 0;
0068 }
0069 return 1;
0070 }
0071
0072 PHObject* Jetv1::CloneMe() const
0073 {
0074 Jet* jet = new Jetv1(*this);
0075 return jet;
0076 }
0077
0078 float Jetv1::get_p() const
0079 {
0080 return std::sqrt((get_px() * get_px()) + (get_py() * get_py()) + (get_pz() * get_pz()));
0081 }
0082
0083 float Jetv1::get_pt() const
0084 {
0085 return std::sqrt((get_px() * get_px()) + (get_py() * get_py()));
0086 }
0087
0088 float Jetv1::get_et() const
0089 {
0090 return get_pt() / get_p() * get_e();
0091 }
0092
0093 float Jetv1::get_eta() const
0094 {
0095 return std::asinh(get_pz() / get_pt());
0096 }
0097
0098 float Jetv1::get_phi() const
0099 {
0100 return std::atan2(get_py(), get_px());
0101 }
0102
0103 float Jetv1::get_mass() const
0104 {
0105
0106 float mass2 = get_mass2();
0107 if (mass2 < 0)
0108 {
0109 return -1 * std::sqrt(std::fabs(mass2));
0110 }
0111 return std::sqrt(mass2);
0112 }
0113
0114 float Jetv1::get_mass2() const
0115 {
0116 float p2 = (get_px() * get_px()) + (get_py() * get_py()) + (get_pz() * get_pz());
0117 return (get_e() * get_e()) - p2;
0118 }
0119
0120 bool Jetv1::has_property(Jet::PROPERTY prop_id) const
0121 {
0122 typ_property_map::const_iterator citer = _property_map.find(prop_id);
0123 if (citer == _property_map.end())
0124 {
0125 return false;
0126 }
0127 return true;
0128 }
0129
0130 float Jetv1::get_property(Jet::PROPERTY prop_id) const
0131 {
0132 typ_property_map::const_iterator citer = _property_map.find(prop_id);
0133 if (citer == _property_map.end())
0134 {
0135 return std::numeric_limits<float>::quiet_NaN();
0136 }
0137 return citer->second;
0138 }
0139
0140 void Jetv1::set_property(Jet::PROPERTY prop_id, float value)
0141 {
0142 _property_map[prop_id] = value;
0143 }
0144
0145 void Jetv1::print_property(std::ostream& os) const
0146 {
0147 for (auto citer : _property_map)
0148 {
0149 os << " ";
0150
0151 switch (citer.first)
0152 {
0153 case prop_JetCharge:
0154 os << "Jet Charge";
0155 break;
0156 case prop_BFrac:
0157 os << "Jet B-quark fraction";
0158 break;
0159 default:
0160 os << "Property[" << citer.first << "]";
0161 break;
0162 }
0163
0164 os << "\t= " << citer.second << std::endl;
0165 }
0166 }
0167
0168 void Jetv1::not_in_v1_msg(const std::string& method_name, std::ostream& os)
0169 {
0170 os << " warning: Method Jet::" << method_name << "() not implemented in Jetv1" << std::endl;
0171 }
0172
0173 std::vector<float>& Jetv1::get_property_vec()
0174 {
0175 not_in_v1_msg("get_property_vec()");
0176 return DummyJetPropVecv1;
0177 }
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191 void Jetv1::insert_comp(Jet::SRC , unsigned int , bool )
0192 {
0193 not_in_v1_msg("insert_comp(src,unsigned int, bool)");
0194 }
0195
0196 void Jetv1::insert_comp(Jet::TYPE_comp_vec& )
0197 {
0198 not_in_v1_msg("insert_comp(TYPE_comp_vec&)");
0199 }
0200
0201 void Jetv1::insert_comp(Jet::TYPE_comp_vec& , bool )
0202 {
0203 not_in_v1_msg("insert_comp(TYPE_comp_vec&, bool)");
0204 }
0205
0206 void Jetv1::set_comp_sort_flag(bool )
0207 {
0208 not_in_v1_msg("set_comp_sort_flag");
0209 }
0210
0211 size_t Jetv1::num_comp(Jet::SRC )
0212 {
0213 not_in_v1_msg("num_comp");
0214 return 0;
0215 }
0216
0217 void Jetv1::print_comp(std::ostream& , bool )
0218 {
0219 not_in_v1_msg("print_comp");
0220 }
0221
0222 std::vector<Jet::SRC> Jetv1::comp_src_vec()
0223 {
0224 not_in_v1_msg("print_comp");
0225 return {};
0226 }
0227
0228 std::map<Jet::SRC, size_t> Jetv1::comp_src_sizemap()
0229 {
0230 not_in_v1_msg("comp_src_sizemap");
0231 return {};
0232 }
0233
0234 Jet::ITER_comp_vec Jetv1::comp_begin(Jet::SRC )
0235 {
0236 not_in_v1_msg("comp_begin");
0237 return Jet::comp_begin(Jet::SRC::VOID);
0238 }
0239
0240 Jet::ITER_comp_vec Jetv1::comp_end(Jet::SRC )
0241 {
0242 not_in_v1_msg("comp_end");
0243 return Jet::comp_end(Jet::SRC::VOID);
0244 }
0245
0246 Jet::ITER_comp_vec Jetv1::comp_begin()
0247 {
0248 not_in_v1_msg("comp_begin");
0249 return Jet::comp_begin();
0250 }
0251 Jet::ITER_comp_vec Jetv1::comp_end()
0252 {
0253 not_in_v1_msg("comp_end");
0254 return Jet::comp_end();
0255 }
0256 Jet::TYPE_comp_vec& Jetv1::get_comp_vec()
0257 {
0258 not_in_v1_msg("get_comp_vec");
0259 return Jet::get_comp_vec();
0260 }
0261 void Jetv1::resize_properties(size_t )
0262 {
0263 not_in_v1_msg("resize_properties()");
0264 }