Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 /**
0002  * @file trackbase/TrkrClusterv3.cc
0003  * @author J. Osborn
0004  * @date October 2021
0005  * @brief Implementation of TrkrClusterv3
0006  */
0007 #include "TrkrClusterv3.h"
0008 
0009 #include <cmath>
0010 #include <utility>  // for swap
0011 
0012 namespace
0013 {
0014   // square convenience function
0015   template <class T>
0016   inline constexpr T square(const T& x)
0017   {
0018     return x * x;
0019   }
0020 }  // namespace
0021 
0022 TrkrClusterv3::TrkrClusterv3()
0023   : m_cluskey(TrkrDefs::CLUSKEYMAX)
0024   , m_subsurfkey(TrkrDefs::SUBSURFKEYMAX)
0025   , m_adc(0xFFFFFFFF)
0026 {
0027   for (int i = 0; i < 2; i++)
0028   {
0029     m_local[i] = NAN;
0030     for (int j = 0; j < 2; j++)
0031     {
0032       m_actsLocalErr[i][j] = NAN;
0033     }
0034   }
0035 }
0036 
0037 void TrkrClusterv3::identify(std::ostream& os) const
0038 {
0039   os << "---TrkrClusterv3--------------------" << std::endl;
0040 
0041   os << " (rphi,z) =  (" << getLocalX();
0042   os << ", " << getLocalY() << ") cm ";
0043 
0044   os << " adc = " << getAdc() << std::endl;
0045 
0046   os << "Error " << std::endl;
0047   os << "         ( ";
0048   os << getActsLocalError(0, 0) << " , ";
0049   os << getActsLocalError(0, 1) << " ) " << std::endl;
0050   os << "         ( ";
0051   os << getActsLocalError(1, 0) << ", ";
0052   os << getActsLocalError(1, 1) << " ) " << std::endl;
0053 
0054   os << std::endl;
0055   os << "-----------------------------------------------" << std::endl;
0056 
0057   return;
0058 }
0059 
0060 int TrkrClusterv3::isValid() const
0061 {
0062   if (m_cluskey == TrkrDefs::CLUSKEYMAX)
0063   {
0064     return 0;
0065   }
0066   for (int i = 0; i < 2; ++i)
0067   {
0068     if (std::isnan(getPosition(i)))
0069     {
0070       return 0;
0071     }
0072     for (int j = 0; j < 2; ++j)
0073     {
0074       if (std::isnan(getActsLocalError(i, j)))
0075       {
0076         return 0;
0077       }
0078     }
0079   }
0080   if (m_adc == 0xFFFFFFFF)
0081   {
0082     return 0;
0083   }
0084 
0085   return 1;
0086 }
0087 
0088 void TrkrClusterv3::CopyFrom(const TrkrCluster& source)
0089 {
0090   // do nothing if copying onto oneself
0091   if (this == &source)
0092   {
0093     return;
0094   }
0095 
0096   // parent class method
0097   TrkrCluster::CopyFrom(source);
0098 
0099   setLocalX(source.getLocalX());
0100   setLocalY(source.getLocalY());
0101 
0102   for (int j = 0; j < 2; ++j)
0103   {
0104     for (int i = 0; i < 2; ++i)
0105     {
0106       setActsLocalError(i, j, source.getActsLocalError(i, j));
0107     }
0108   }
0109 
0110   setSubSurfKey(source.getSubSurfKey());
0111   setAdc(source.getAdc());
0112 }
0113 
0114 float TrkrClusterv3::getRPhiError() const
0115 {
0116   return std::sqrt(m_actsLocalErr[0][0]);
0117 }
0118 
0119 float TrkrClusterv3::getZError() const
0120 {
0121   return std::sqrt(m_actsLocalErr[1][1]);
0122 }
0123 
0124 void TrkrClusterv3::setActsLocalError(unsigned int i, unsigned int j,
0125                                       float value)
0126 {
0127   m_actsLocalErr[i][j] = value;
0128 }