Creates a cluster from the neighbouring pixels, joining only two pixels with charge above m_chargeThreshold.
49{
50 std::list<const xAOD::AFPSiHit*> hitsAboveThreshold;
51
52
55 hitsAboveThreshold.push_back(theHit);
56
57 while (!hitsAboveThreshold.empty())
58 {
59
60 std::list<const xAOD::AFPSiHit*> currentProtoCluster{hitsAboveThreshold.front()};
61
62 hitsAboveThreshold.pop_front();
63
64
66 {
67
68 for(std::list<const xAOD::AFPSiHit*>::iterator remHit=hitsAboveThreshold.begin();remHit!=hitsAboveThreshold.end();)
69 {
70 if(abs(currHit->pixelVertID()-(*remHit)->pixelVertID())<=1 && abs(currHit->pixelHorizID()-(*remHit)->pixelHorizID())<=1)
71 {
72 if(
m_doOnlyHorz && currHit->pixelVertID()!=(*remHit)->pixelVertID())
73 {
74 ++remHit;
75 }
76 else
77 {
78
79 currentProtoCluster.push_back(*remHit);
80 hitsAboveThreshold.erase(remHit++);
81 }
82 }
83 else
84 {
85 ++remHit;
86 }
87 }
88
89
90 }
91
92
93
95 AFPSiClusterBasicObj& newCluster = outputClusters.back();
96 double horizID = 0.;
97 double vertID = 0.;
100 {
101 charge += currHit->depositedCharge();
102 horizID += currHit->pixelHorizID() * currHit->depositedCharge();
103 vertID += currHit->pixelVertID() * currHit->depositedCharge();
104
105 newCluster.
hits().push_back(currHit);
106 }
107
111 }
112
113
114 return StatusCode::SUCCESS;
115}
double charge(const T &p)
void setCharge(const double charge)
std::list< const xAOD::AFPSiHit * > & hits()
list of pixels used to form the cluster
void setVertID(const float vertID)
void setHorizID(const float horizID)
static const int allNeighbours
All neighbours algorithm.