@@ -25,10 +25,10 @@ namespace o2::its
2525float LinearizedTrack::getChi2 (const dataformats::VertexBase& v) const
2626{
2727 // get residuals (Y and Z DCA in track frame) and calculate chi2
28- float dx = v.getX () * cosAlp + v.getY () * sinAlp - x; // VX rotated to track frame - trackX
29- float dy = y + tgP * dx - (-v.getX () * sinAlp + v.getY () * cosAlp);
30- float dz = z + tgL * dx - v.getZ ();
31- float chi2 = (dy * dy * sig2YI + dz * dz * sig2ZI) + 2 . * dy * dz * sigYZI;
28+ float dx = ( v.getX () * cosAlp) + ( v.getY () * sinAlp) - x; // VX rotated to track frame - trackX
29+ float dy = y + ( tgP * dx) - (-v.getX () * sinAlp + v.getY () * cosAlp);
30+ float dz = z + ( tgL * dx) - v.getZ ();
31+ float chi2 = (dy * dy * sig2YI + dz * dz * sig2ZI) + ( 2 . f * dy * dz * sigYZI) ;
3232 return chi2 / 2 .f ; // not using time
3333}
3434
@@ -38,37 +38,38 @@ void VertexSeed::updateTukeyScale(const LinearizedTrack* ltracks, const int* lab
3838 if (status == kIterateFirst ) {
3939 scaleSig2ITuk2I = 1 .f / (tukeyC * tukeyC);
4040 return ;
41- } else if (status == kIterateRelaxScale ) {
41+ }
42+ if (status == kIterateRelaxScale ) {
4243 // relax by 1/3
4344 scaleSig2ITuk2I *= 2 .f / 3 .f ;
4445 return ;
45- } else {
46- std::vector<float > chi2s;
47- chi2s.reserve (getNContributors ());
46+ }
4847
49- for (uint32_t entry{ref.getFirstEntry ()}; entry < ref.getEntriesBound (); ++entry) {
50- const auto & lt = ltracks[entry];
51- if (lt.isDead () || labels[entry] != idx) {
52- continue ;
53- }
54- chi2s.push_back (lt.getChi2 ((const dataformats::VertexBase&)*this ));
55- }
56- if (chi2s.empty ()) {
57- return ;
58- }
59- // get MAD scale
60- std::sort (chi2s.begin (), chi2s.end ());
61- float median = chi2s[chi2s.size () / 2 ];
62- std::vector<float > dev;
63- dev.reserve (chi2s.size ());
64- for (float c : chi2s) {
65- dev.push_back (o2::gpu::CAMath::Abs (c - median));
48+ std::vector<float > chi2s;
49+ chi2s.reserve (getNContributors ());
50+
51+ for (uint32_t entry{ref.getFirstEntry ()}; entry < ref.getEntriesBound (); ++entry) {
52+ const auto & lt = ltracks[entry];
53+ if (lt.isDead () || labels[entry] != idx) {
54+ continue ;
6655 }
67- std::sort (dev.begin (), dev.end ());
68- float mad = dev[dev.size () / 2 ];
69- float scale = sigma2Gaus * mad;
70- scaleSig2ITuk2I = 1 .f / (scale * tukeyC * tukeyC);
56+ chi2s.push_back (lt.getChi2 ((const dataformats::VertexBase&)*this ));
57+ }
58+ if (chi2s.empty ()) {
59+ return ;
60+ }
61+ // get MAD scale
62+ std::sort (chi2s.begin (), chi2s.end ());
63+ float median = chi2s[chi2s.size () / 2 ];
64+ std::vector<float > dev;
65+ dev.reserve (chi2s.size ());
66+ for (float c : chi2s) {
67+ dev.push_back (o2::gpu::CAMath::Abs (c - median));
7168 }
69+ std::sort (dev.begin (), dev.end ());
70+ float mad = dev[dev.size () / 2 ];
71+ float scale = sigma2Gaus * mad;
72+ scaleSig2ITuk2I = 1 .f / (scale * tukeyC * tukeyC);
7273}
7374
7475void VertexSeed::resetForNewIteration ()
@@ -81,14 +82,14 @@ void VertexSeed::resetForNewIteration()
8182bool VertexSeed::acceptTrack (const LinearizedTrack& lt)
8283{
8384 float chi2Red = lt.getChi2 ((const dataformats::VertexBase&)*this );
84- float wghT = (1 .f - chi2Red * scaleSig2ITuk2I); // weighted distance to vertex
85+ float wghT = (1 .f - ( chi2Red * scaleSig2ITuk2I) ); // weighted distance to vertex
8586 return wghT >= wghMin;
8687}
8788
8889void VertexSeed::accountTrack (const LinearizedTrack& lt)
8990{
9091 float chi2Red = lt.getChi2 ((const dataformats::VertexBase&)*this );
91- float wghT = (1 .f - chi2Red * scaleSig2ITuk2I); // weighted distance to vertex
92+ float wghT = (1 .f - ( chi2Red * scaleSig2ITuk2I) ); // weighted distance to vertex
9293 if (wghT < wghMin) {
9394 return ;
9495 }
@@ -103,7 +104,7 @@ void VertexSeed::accountTrack(const LinearizedTrack& lt)
103104 float tmpSP = lt.sinAlp * lt.tgP , tmpCP = lt.cosAlp * lt.tgP ,
104105 tmpSC = lt.sinAlp + tmpCP, tmpCS = -lt.cosAlp + tmpSP,
105106 tmpCL = lt.cosAlp * lt.tgL , tmpSL = lt.sinAlp * lt.tgL ,
106- tmpYXP = lt.y - lt.tgP * lt.x , tmpZXL = lt.z - lt.tgL * lt.x ,
107+ tmpYXP = lt.y - ( lt.tgP * lt.x ) , tmpZXL = lt.z - ( lt.tgL * lt.x ) ,
107108 tmpCLzz = tmpCL * szzI, tmpSLzz = tmpSL * szzI, tmpSCyz = tmpSC * syzI,
108109 tmpCSyz = tmpCS * syzI, tmpCSyy = tmpCS * syyI, tmpSCyy = tmpSC * syyI,
109110 tmpSLyz = tmpSL * syzI, tmpCLyz = tmpCL * syzI;
@@ -133,15 +134,14 @@ void VertexSeed::solveVertex()
133134 setXYZ (sol (0 ), sol (1 ), sol (2 ));
134135 setCov (C (0 , 0 ), C (1 , 0 ), C (1 , 1 ), C (2 , 0 ), C (2 , 1 ), C (2 , 2 ));
135136 setChi2 (wghChi2 / o2::gpu::CAMath::Max (1 .f , wghSum - 3 .f ));
136- return ;
137137}
138138
139139namespace dbscan
140140{
141141
142142DBSCAN::DBSCAN (const DBSCANParams& p) : mParams (p), mDistance (mParams .eps) {}
143143
144- DBSCANResult DBSCAN::cluster (const LinearizedTrack* tracks, size_t n)
144+ DBSCANResult DBSCAN::cluster (const LinearizedTrack* tracks, size_t n) const
145145{
146146 DBSCANResult result;
147147 result.labels .resize (n, DB_UNVISITED);
@@ -185,7 +185,7 @@ DBSCANResult DBSCAN::cluster(const LinearizedTrack* tracks, size_t n)
185185 return result;
186186}
187187
188- void DBSCAN::findNeighbors (const LinearizedTrack* tracks, size_t n, NeighborList& neighbors)
188+ void DBSCAN::findNeighbors (const LinearizedTrack* tracks, size_t n, NeighborList& neighbors) const
189189{
190190 Grid grid (tracks, n, mParams .eps );
191191
@@ -215,7 +215,7 @@ void DBSCAN::findNeighbors(const LinearizedTrack* tracks, size_t n, NeighborList
215215 });
216216}
217217
218- void DBSCAN::classify (size_t n, const NeighborList& neighbors, std::vector<int32_t >& labels)
218+ void DBSCAN::classify (size_t n, const NeighborList& neighbors, std::vector<int32_t >& labels) const
219219{
220220 SCOPED_TIMER (" classify" );
221221 std::vector<bool > isCore (n, false );
0 commit comments