File indexing completed on 2025-08-06 08:19:06
0001 #include "ClusKeyIter.h"
0002
0003 #include <trackbase_historic/SvtxTrack.h>
0004
0005 ClusKeyIter::ClusKeyIter(SvtxTrack* _track)
0006 : track{_track}
0007 , in_silicon{_track->get_silicon_seed() != nullptr}
0008 , has_tpc{_track->get_tpc_seed() != nullptr}
0009 , no_data{!in_silicon && !has_tpc}
0010 {
0011 }
0012
0013 ClusKeyIter ClusKeyIter::begin()
0014 {
0015 ClusKeyIter iter0{track};
0016 if (iter0.no_data)
0017 {
0018 return iter0;
0019 }
0020 if (iter0.in_silicon)
0021 {
0022 iter0.iter = track->get_silicon_seed()->begin_cluster_keys();
0023 iter0.iter_end_silicon = track->get_silicon_seed()->end_cluster_keys();
0024 }
0025 else if (has_tpc)
0026 {
0027 iter0.iter = track->get_tpc_seed()->begin_cluster_keys();
0028 }
0029 return iter0;
0030 }
0031
0032 ClusKeyIter ClusKeyIter::end()
0033 {
0034 ClusKeyIter iter0{track};
0035 if (iter0.no_data)
0036 {
0037 return iter0;
0038 }
0039 if (has_tpc)
0040 {
0041 iter0.iter = track->get_tpc_seed()->end_cluster_keys();
0042 }
0043 else if (in_silicon)
0044 {
0045 iter0.iter = track->get_silicon_seed()->end_cluster_keys();
0046 }
0047 return iter0;
0048 }
0049
0050 void ClusKeyIter::operator++()
0051 {
0052 if (no_data)
0053 {
0054 return;
0055 }
0056 ++iter;
0057 if (in_silicon && has_tpc && iter == iter_end_silicon)
0058 {
0059 in_silicon = false;
0060 iter = track->get_tpc_seed()->begin_cluster_keys();
0061 }
0062 }
0063
0064 bool ClusKeyIter::operator!=(const ClusKeyIter& rhs)
0065 {
0066 if (no_data)
0067 {
0068 return false;
0069 }
0070 return iter != rhs.iter;
0071 }
0072
0073 TrkrDefs::cluskey ClusKeyIter::operator*()
0074 {
0075 return *iter;
0076 }