Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:18:16

0001 #include "TrackSeed_v2.h"
0002 
0003 TrackSeed_v2::TrackSeed_v2(const TrackSeed& seed)
0004 {
0005   TrackSeed_v2::CopyFrom(seed);
0006 }
0007 
0008 // have to suppress missingMemberCopy from cppcheck, it does not
0009 // go down to the CopyFrom method where things are done correctly
0010 // cppcheck-suppress missingMemberCopy
0011 TrackSeed_v2::TrackSeed_v2(const TrackSeed_v2& seed)
0012   : TrackSeed(seed)
0013 {
0014   TrackSeed_v2::CopyFrom(seed);
0015 }
0016 
0017 TrackSeed_v2& TrackSeed_v2::operator=(const TrackSeed_v2& seed)
0018 {
0019   if (this != &seed)
0020   {
0021     CopyFrom(seed);
0022   }
0023   return *this;
0024 }
0025 
0026 void TrackSeed_v2::CopyFrom(const TrackSeed& seed)
0027 {
0028   if (this == &seed)
0029   {
0030     return;
0031   }
0032   TrackSeed::CopyFrom(seed);
0033 
0034   m_qOverR = seed.get_qOverR();
0035   m_X0 = seed.get_X0();
0036   m_Y0 = seed.get_Y0();
0037   m_slope = seed.get_slope();
0038   m_Z0 = seed.get_Z0();
0039   m_crossing = seed.get_crossing();
0040   m_phi = seed.get_phi();
0041   m_cluster_keys.clear();
0042   std::copy(seed.begin_cluster_keys(), seed.end_cluster_keys(),
0043             std::inserter(m_cluster_keys, m_cluster_keys.begin()));
0044 }
0045 
0046 void TrackSeed_v2::identify(std::ostream& os) const
0047 {
0048   os << "TrackSeed_v2 object ";
0049   os << "charge " << get_charge() << std::endl;
0050   os << "beam crossing " << get_crossing() << std::endl;
0051   os << "(pt,pz) = (" << get_pt()
0052      << ", " << get_pz() << ")" << std::endl;
0053   os << " phi " << m_phi << " eta " << get_eta() << std::endl;
0054   os << "(X0,Y0,Z0) = (" << m_X0 << ", " << m_Y0 << ", " << m_Z0
0055      << ")" << std::endl;
0056   os << "R and slope " << fabs(1. / m_qOverR) << ", " << m_slope << std::endl;
0057   os << "list of cluster keys size: " << m_cluster_keys.size() << std::endl;
0058   ;
0059   if (m_cluster_keys.size() > 0)
0060   {
0061     for (TrackSeed::ConstClusterKeyIter iter = begin_cluster_keys();
0062          iter != end_cluster_keys();
0063          ++iter)
0064     {
0065       TrkrDefs::cluskey cluster_key = *iter;
0066       os << cluster_key << ", ";
0067     }
0068   }
0069 
0070   os << std::endl;
0071   return;
0072 }
0073 
0074 float TrackSeed_v2::get_pt() const
0075 {
0076   /// Scaling factor for radius in 1.4T field
0077   return 0.3 * 1.4 / 100. * fabs(1. / m_qOverR);
0078 }
0079 
0080 float TrackSeed_v2::get_theta() const
0081 {
0082   float theta = atan(1. / m_slope);
0083   /// Normalize to 0<theta<pi
0084   if (theta < 0)
0085   {
0086     theta += M_PI;
0087   }
0088   return theta;
0089 }
0090 
0091 float TrackSeed_v2::get_eta() const
0092 {
0093   return -log(tan(get_theta() / 2.));
0094 }
0095 
0096 float TrackSeed_v2::get_p() const
0097 {
0098   return get_pt() * std::cosh(get_eta());
0099 }
0100 
0101 float TrackSeed_v2::get_px() const
0102 {
0103   return get_pt() * std::cos(m_phi);
0104 }
0105 
0106 float TrackSeed_v2::get_py() const
0107 {
0108   return get_pt() * std::sin(m_phi);
0109 }
0110 
0111 float TrackSeed_v2::get_pz() const
0112 {
0113   return get_p() * std::cos(get_theta());
0114 }
0115 
0116 int TrackSeed_v2::get_charge() const
0117 {
0118   return (m_qOverR < 0) ? -1 : 1;
0119 }