@@ -189,32 +189,12 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
189189 CADEBUG (printf (" \t Leg %3d Sector %2d %4sTrack Alpha %8.3f %s, X %8.3f - Y %8.3f, Z %8.3f - QPt %7.2f (%7.2f), SP %5.2f (%5.2f) %28s --- Cov sY %8.3f sZ %8.3f sSP %8.3f sPt %8.3f - YPt %8.3f\n " , (int32_t )cluster.leg , (int32_t )cluster.sector , " " , prop.GetAlpha (), (CAMath::Abs (prop.GetAlpha () - clAlpha) < 0.01 ? " " : " R!" ), mX , mP [0 ], mP [1 ], mP [4 ], prop.GetQPt0 (), mP [2 ], prop.GetSinPhi0 (), " " , sqrtf (mC [0 ]), sqrtf (mC [2 ]), sqrtf (mC [5 ]), sqrtf (mC [14 ]), mC [10 ]));
190190 // clang-format on
191191 if (allowModification && changeDirection && !noFollowCircle && !noFollowCircle2) {
192- bool tryFollow = lastRow != 255 ;
193- if (tryFollow) {
194- const GPUTPCGMTrackParam backup = *this ;
195- const float backupAlpha = prop.GetAlpha ();
196- if (FollowCircle<0 >(merger, prop, lastSector, lastRow, iTrk, clAlpha, xx, yy, cluster.sector , cluster.row , inFlyDirection)) {
197- CADEBUG (printf (" Error during follow circle, resetting track!\n " ));
198- *this = backup;
199- prop.SetTrack (this , backupAlpha);
192+ if (lastRow != 255 ) {
193+ if (!(merger->Param ().rec .tpc .disableRefitAttachment & 4 )) {
194+ StoreAttachMirror (merger, lastSector, lastRow, iTrk, clAlpha, yy, xx, cluster.sector , cluster.row , inFlyDirection, prop.GetAlpha ());
200195 noFollowCircle = true ;
201- tryFollow = false ;
202196 }
203197 }
204- if (tryFollow) {
205- MirrorTo (prop, yy, zz, inFlyDirection, param, cluster.row , clusterState, false , cluster.sector );
206- lastUpdateX = mX ;
207- lastLeg = cluster.leg ;
208- lastSector = cluster.sector ;
209- lastRow = 255 ;
210- N++;
211- resetT0 = initResetT0 ();
212- // clang-format off
213- CADEBUG (printf (" \n " ));
214- CADEBUG (printf (" \t %21sMirror Alpha %8.3f , X %8.3f - Y %8.3f, Z %8.3f - QPt %7.2f (%7.2f), SP %5.2f (%5.2f) %28s --- Cov sY %8.3f sZ %8.3f sSP %8.3f sPt %8.3f - YPt %8.3f\n " , " " , prop.GetAlpha (), mX , mP [0 ], mP [1 ], mP [4 ], prop.GetQPt0 (), mP [2 ], prop.GetSinPhi0 (), " " , sqrtf (mC [0 ]), sqrtf (mC [2 ]), sqrtf (mC [5 ]), sqrtf (mC [14 ]), mC [10 ]));
215- // clang-format on
216- continue ;
217- }
218198 } else if (allowModification && lastRow != 255 && CAMath::Abs (cluster.row - lastRow) > 1 ) {
219199 if GPUCA_RTC_CONSTEXPR (GPUCA_GET_CONSTEXPR (param.par , dodEdx)) {
220200 bool dodEdx = param.dodEdxEnabled && param.rec .tpc .adddEdxSubThresholdClusters && iWay == nWays - 1 && CAMath::Abs (cluster.row - lastRow) == 2 && cluster.leg == clusters[maxN - 1 ].leg ;
@@ -269,8 +249,8 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
269249 CADEBUG (printf (" -- MirroredY: %f --> %f" , mP [0 ], mirrordY));
270250 if (CAMath::Abs (yy - mP [0 ]) > CAMath::Abs (yy - mirrordY)) {
271251 CADEBUG (printf (" - Mirroring!!!" ));
272- if (allowModification) {
273- AttachClustersMirror< 0 > (merger, cluster.sector , cluster.row , iTrk, yy, prop); // TODO: Never true, will always call FollowCircle above, really???
252+ if (allowModification && !(merger-> Param (). rec . tpc . disableRefitAttachment & 8 ) ) {
253+ StoreAttachMirror (merger, cluster.sector , cluster.row , iTrk, 0 , yy, 0 , - 1 , 0 , 0 , prop. GetAlpha ());
274254 }
275255 MirrorTo (prop, yy, zz, inFlyDirection, param, cluster.row , clusterState, true , cluster.sector );
276256 noFollowCircle = false ;
@@ -751,24 +731,15 @@ GPUdii() void GPUTPCGMTrackParam::RefitLoop(const GPUTPCGMMerger* GPUrestrict()
751731 GPUTPCGMLoopData& data = Merger->LoopData ()[loopIdx];
752732 prop.SetTrack (&data.param , data.alpha );
753733 if (data.toSector == -1 ) {
754- data.param .AttachClustersMirror < 1 > (Merger, data.sector , data.row , data.track , data.toY , prop, true );
734+ data.param .AttachClustersMirror (Merger, data.sector , data.row , data.track , data.toY , prop);
755735 } else {
756- data.param .FollowCircle < 1 > (Merger, prop, data.sector , data.row , data.track , data.toAlpha , data.toX , data.toY , data.toSector , data.toRow , data.inFlyDirection , true );
736+ data.param .FollowCircle (Merger, prop, data.sector , data.row , data.track , data.toAlpha , data.toX , data.toY , data.toSector , data.toRow , data.inFlyDirection );
757737 }
758738}
759739
760- template <int32_t I>
761- GPUdic (0 , 1 ) int32_t GPUTPCGMTrackParam::FollowCircle(const GPUTPCGMMerger* GPUrestrict () Merger, GPUTPCGMPropagator& GPUrestrict() prop, int32_t sector, int32_t iRow, int32_t iTrack, float toAlpha, float toX, float toY, int32_t toSector, int32_t toRow, bool inFlyDirection, bool phase2)
740+ GPUdi () int32_t GPUTPCGMTrackParam::FollowCircle(const GPUTPCGMMerger* GPUrestrict () Merger, GPUTPCGMPropagator& GPUrestrict() prop, int32_t sector, int32_t iRow, int32_t iTrack, float toAlpha, float toX, float toY, int32_t toSector, int32_t toRow, bool inFlyDirection)
762741{
763742 static constexpr float kSectAngle = 2 * M_PI / 18 .f ;
764- if (Merger->Param ().rec .tpc .disableRefitAttachment & 4 ) {
765- return 1 ;
766- }
767- const bool inExtraPass = Merger->Param ().rec .tpc .looperInterpolationInExtraPass == -1 ? GPUCA_PAR_MERGER_SPLIT_LOOP_INTERPOLATION : Merger->Param ().rec .tpc .looperInterpolationInExtraPass ;
768- if (inExtraPass && phase2 == false ) {
769- StoreAttachMirror (Merger, sector, iRow, iTrack, toAlpha, toY, toX, toSector, toRow, inFlyDirection, prop.GetAlpha ());
770- return 1 ;
771- }
772743 const GPUParam& GPUrestrict () param = Merger->Param ();
773744 bool right;
774745 float dAlpha = toAlpha - prop.GetAlpha ();
@@ -862,19 +833,9 @@ GPUdic(0, 1) int32_t GPUTPCGMTrackParam::FollowCircle(const GPUTPCGMMerger* GPUr
862833 return (0 );
863834}
864835
865- template <int32_t I>
866- GPUdni () void GPUTPCGMTrackParam::AttachClustersMirror(const GPUTPCGMMerger* GPUrestrict () Merger, int32_t sector, int32_t iRow, int32_t iTrack, float toY, GPUTPCGMPropagator& GPUrestrict() prop, bool phase2)
836+ GPUdi () void GPUTPCGMTrackParam::AttachClustersMirror(const GPUTPCGMMerger* GPUrestrict () Merger, int32_t sector, int32_t iRow, int32_t iTrack, float toY, GPUTPCGMPropagator& GPUrestrict() prop)
867837{
868838 static constexpr float kSectAngle = 2 * M_PI / 18 .f ;
869-
870- if (Merger->Param ().rec .tpc .disableRefitAttachment & 8 ) {
871- return ;
872- }
873- const bool inExtraPass = Merger->Param ().rec .tpc .looperInterpolationInExtraPass == -1 ? GPUCA_PAR_MERGER_SPLIT_LOOP_INTERPOLATION : Merger->Param ().rec .tpc .looperInterpolationInExtraPass ;
874- if (inExtraPass && phase2 == false ) {
875- StoreAttachMirror (Merger, sector, iRow, iTrack, 0 , toY, 0 , -1 , 0 , 0 , prop.GetAlpha ());
876- return ;
877- }
878839 // Note that the coordinate system is rotated by 90 degree swapping X and Y!
879840 float X = mP [2 ] > 0 ? mP [0 ] : -mP [0 ];
880841 float toX = mP [2 ] > 0 ? toY : -toY;
0 commit comments