8 static const HitList
dummy{};
19 std::vector<HitList>& finalClusts) {
20 if (filteredHits.empty())
return false;
21 finalClusts.reserve(filteredHits.size());
22 std::sort(filteredHits.begin(), filteredHits.end(),
24 const int gap1{m_tgcIdHelper->gasGap(h1->identify())}, gap2{m_tgcIdHelper->gasGap(h2->identify())};
25 if (gap1 != gap2)
return gap1 < gap2;
31 if (finalClusts.empty() ||
32 m_tgcIdHelper->channel(finalClusts.back().back()->identify()) +1 != m_tgcIdHelper->channel(prd->identify()) ||
33 m_tgcIdHelper->gasGap(finalClusts.back().back()->identify()) != m_tgcIdHelper->gasGap(prd->identify())) {
34 finalClusts.emplace_back();
36 finalClusts.back().push_back(prd);
39 [](
const HitList&
a,
const HitList&
b){
40 return a.size() < b.size();
45 bool TgcHitClusteringObj::cluster(
const std::vector<const TgcPrepData*>&
col ){
48 std::vector<const TgcPrepData*> etaHits{}, phiHits{};
49 etaHits.reserve(
col.size());
50 phiHits.reserve(
col.size());
53 std::copy_if(
col.begin(),
col.end(), std::back_inserter(etaHits), [
this](
const TgcPrepData* prd) {
54 return !m_tgcIdHelper->measuresPhi(prd->identify());
56 std::copy_if(
col.begin(),
col.end(), std::back_inserter(phiHits), [
this](
const TgcPrepData* prd){
57 return m_tgcIdHelper->measuresPhi(prd->identify());
60 if (!cluster(etaHits, clustersEta))
return false;
61 if (!cluster(phiHits, clustersPhi))
return false;
65 bool TgcHitClusteringObj::buildClusters3D() {
67 if( clustersPhi.empty() || clustersEta.empty() )
return false;
69 const TgcPrepData* etaHit = bestEtaCluster().front();
74 for(
HitList& eit : clustersEta) {
79 for(
HitList& pit : clustersPhi) {
88 if( lastPhi != firstPhi ) {
91 cl3D.getEdge(Edge::LowEtaHighPhi) = cl3D.getEdge(Edge::LowEtaLowPhi);
93 if( lastEta != firstEta ) {
95 if( lastPhi != firstPhi ) {
98 cl3D.getEdge(Edge::HighEtaHighPhi) = cl3D.getEdge(Edge::HighEtaLowPhi);
101 cl3D.getEdge(Edge::HighEtaLowPhi) = cl3D.getEdge(Edge::LowEtaLowPhi);
102 cl3D.getEdge(Edge::HighEtaHighPhi) = cl3D.getEdge(Edge::LowEtaHighPhi);
104 clusters3D.push_back(std::move(cl3D));