Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:46

0001 /*!
0002  * \file Jetv1.C
0003  * \brief
0004  * \author Jin Huang <jhuang@bnl.gov>
0005  * \version $Revision:   $
0006  * \date $Date: $
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   // follow CLHEP convention and return negative mass if E^2 - p^2 < 0
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 << " ";  // indent
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 // inline float Jetv1::get_prop_by_index(unsigned int /*index*/) const
0180 // {
0181 //   not_in_v1_msg("get_prop_by_index()");
0182 //   return std::numeric_limits<float>::quiet_NaN();
0183 // }
0184 
0185 // inline void Jetv1::set_prop_by_index(unsigned int /*index*/, float /*value*/)
0186 //{
0187 //   not_in_v1_msg("set_prop_by_index()");
0188 //   return;
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& /*unused*/)
0197 {
0198   not_in_v1_msg("insert_comp(TYPE_comp_vec&)");
0199 }
0200 
0201 void Jetv1::insert_comp(Jet::TYPE_comp_vec& /*unused*/, bool /*unused*/)
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 }