27 Int_t *intX, *intY, *intR;
30 unsigned short int iH11, iH12, iH13, iH14, iH2, iH3;
31 Int_t nofHitsNorm =
fHitInd[0].size() + 1;
35 Float_t dx = 1.0f /
fDx, dy = 1.0f /
fDy, dr = 1.0f /
fDr;
42 fvec rx0, rx1, rx2, ry0, ry1, ry2;
43 fvec t5, t10, t19, det, t6, t7;
44 fvec iH1X, iH1Y, iH2X, iH2Y, iH3X, iH3Y;
47 __m128i intXv, intYv, intRv, indXYv;
48 __m128i fNofBinsXv = _mm_set1_epi32(
fNofBinsX);
49 __m128i fNofBinsXYv = _mm_set1_epi32(
fNofBinsXY + 1);
50 __m128i m128i_0 = _mm_set1_epi32(0);
53 __m128i fNofBinsRv = _mm_set1_epi32(
fNofBinsR + 1);
54 __m128i m128i_10 = _mm_set1_epi32(10);
59 Int_t nofHits =
fHitInd[iPart].size();
61 iPmulNofHits = iPart * nofHitsNorm;
63 vector<unsigned short> hitIndPart;
68 for (
unsigned short int iHit1 = 0; iHit1 < (nofHits & ~3); iHit1 += 4) {
69 iH11 = hitIndPart[iHit1];
70 iH12 = hitIndPart[iHit1 + 1];
71 iH13 = hitIndPart[iHit1 + 2];
72 iH14 = hitIndPart[iHit1 + 3];
77 for (
unsigned short int iHit2 = iHit1 + 1; iHit2 < nofHits; iHit2++) {
78 iH2 = hitIndPart[iHit2];
85 r12 = rx0 * rx0 + ry0 * ry0;
86 if (_mm_comineq_ss(_mm_cmpgt_ss(r12, fMinDistanceSqv), fvec0) == 1)
continue;
87 if (_mm_comineq_ss(_mm_cmplt_ss(r12, fMaxDistanceSqv), fvec0) == 1)
continue;
92 for (
unsigned short int iHit3 = iHit2 + 1; iHit3 < nofHits; iHit3++) {
94 h3 =
fDataV[hitIndPart[iHit3]];
101 r13 = rx1 * rx1 + ry1 * ry1;
102 if (_mm_comineq_ss(_mm_cmpgt_ss(r13, fMinDistanceSqv), fvec0) == 1)
continue;
103 if (_mm_comineq_ss(_mm_cmplt_ss(r13, fMaxDistanceSqv), fvec0) == 1)
continue;
107 r23 = rx2 * rx2 + ry2 * ry2;
108 if (_mm_comineq_ss(_mm_cmpgt_ss(r23, fMinDistanceSqv), fvec0) == 1)
continue;
109 if (_mm_comineq_ss(_mm_cmplt_ss(r23, fMaxDistanceSqv), fvec0) == 1)
continue;
111 t19 = fvec05 / (rx2 * ry0 - rx0 * ry2);
113 xc = (t5 * ry0 - t10 * ry2) * t19;
114 xcs = xc - fCurMinXV;
118 yc = (t10 * rx2 - t5 * rx0) * t19;
119 ycs = yc - fCurMinYV;
126 r =
sqrt(t6 * t6 + t7 * t7);
134 intRv = _mm_cvtps_epi32(r * drv);
138 intXv = _mm_cvtps_epi32(xcs * dxv);
139 intYv = _mm_cvtps_epi32(ycs * dyv);
140 indXYv = intXv * fNofBinsXv + intYv;
146 indXY = (
int*) &indXYv;
147 intR = (
int*) &intRv;