12 #include <tracking/trackFindingCDC/findlets/base/Findlet.h>
14 #include <tracking/trackFindingCDC/eventdata/segments/CDCWireHitCluster.h>
15 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
17 #include <tracking/trackFindingCDC/ca/Clusterizer.h>
19 #include <tracking/trackFindingCDC/filters/base/RelationFilterUtil.h>
21 #include <tracking/trackFindingCDC/utilities/WeightedRelation.h>
32 namespace TrackFindingCDC {
35 template <
class AWireHitRelationFilter>
36 class ClusterRefiner :
public Findlet<const CDCWireHitCluster, CDCWireHitCluster> {
40 using Super = Findlet<const CDCWireHitCluster, CDCWireHitCluster>;
51 return "Breaks bigger wire hit super cluster into smaller wire hit clusters";
61 void apply(
const std::vector<CDCWireHitCluster>& inputSuperClusters,
62 std::vector<CDCWireHitCluster>& outputClusters)
final {
65 B2ASSERT(
"Expect the clusters to be sorted", std::is_sorted(superCluster.begin(),
69 const std::vector<CDCWireHit*>& wireHitPtrs = superCluster;
74 const std::size_t nClustersBefore = outputClusters.size();
76 const std::size_t nClustersAfter = outputClusters.size();
79 int iSuperCluster = superCluster.getISuperCluster();
80 for (std::size_t iCluster = nClustersBefore; iCluster < nClustersAfter; ++iCluster) {
82 cluster.setISuperCluster(iSuperCluster);
83 std::sort(cluster.begin(), cluster.end());