@@ -291,6 +291,7 @@ GPUg() void __launch_bounds__(256, 1) fitTrackSeedsKernel(
291291 const float maxChi2ClusterAttachment,
292292 const float maxChi2NDF,
293293 const int reseedIfShorter,
294+ const bool repeatRefitOut,
294295 const bool shifRefToCluster,
295296 const o2::base::Propagator* propagator,
296297 const o2::base::PropagatorF::MatCorrType matCorrType)
@@ -337,6 +338,34 @@ GPUg() void __launch_bounds__(256, 1) fitTrackSeedsKernel(
337338 if (!fitSuccess || temporaryTrack.getPt () < minPts[nLayers - temporaryTrack.getNClusters ()]) {
338339 continue ;
339340 }
341+ if (repeatRefitOut) { // repeat outward refit seeding and linearizing with the stable inward fit result
342+ o2::track::TrackParCov saveInw{temporaryTrack};
343+ linRef = saveInw; // use refitted track as lin.reference
344+ float saveChi2 = temporaryTrack.getChi2 ();
345+ temporaryTrack.resetCovariance ();
346+ temporaryTrack.setCov (temporaryTrack.getQ2Pt () * temporaryTrack.getQ2Pt () * temporaryTrack.getCov ()[o2::track::CovLabels::kSigQ2Pt2 ], o2::track::CovLabels::kSigQ2Pt2 );
347+ temporaryTrack.setChi2 (0 );
348+ fitSuccess = fitTrack (temporaryTrack, // TrackITSExt& track,
349+ 0 , // int lastLayer,
350+ nLayers, // int firstLayer,
351+ 1 , // int firstCluster,
352+ maxChi2ClusterAttachment, // float maxChi2ClusterAttachment,
353+ maxChi2NDF, // float maxChi2NDF,
354+ o2::constants::math::VeryBig, // float maxQoverPt,
355+ 0 , // nCl,
356+ bz, // float bz,
357+ foundTrackingFrameInfo, // TrackingFrameInfo** trackingFrameInfo,
358+ propagator, // const o2::base::Propagator* propagator,
359+ matCorrType, // o2::base::PropagatorF::MatCorrType matCorrType
360+ &linRef,
361+ shifRefToCluster);
362+ if (!fitSuccess) {
363+ continue ;
364+ }
365+ temporaryTrack.getParamOut () = temporaryTrack.getParamIn ();
366+ temporaryTrack.getParamIn () = saveInw;
367+ temporaryTrack.setChi2 (saveChi2);
368+ }
340369 tracks[iCurrentTrackSeedIndex] = temporaryTrack;
341370 }
342371}
@@ -1174,6 +1203,7 @@ void trackSeedHandler(CellSeed<nLayers>* trackSeeds,
11741203 const float maxChi2ClusterAttachment,
11751204 const float maxChi2NDF,
11761205 const int reseedIfShorter,
1206+ const bool repeatRefitOut,
11771207 const bool shiftRefToCluster,
11781208 const o2::base::Propagator* propagator,
11791209 const o2::base::PropagatorF::MatCorrType matCorrType,
@@ -1195,6 +1225,7 @@ void trackSeedHandler(CellSeed<nLayers>* trackSeeds,
11951225 maxChi2ClusterAttachment, // float
11961226 maxChi2NDF, // float
11971227 reseedIfShorter, // int
1228+ repeatRefitOut, // bool
11981229 shiftRefToCluster, // bool
11991230 propagator, // const o2::base::Propagator*
12001231 matCorrType); // o2::base::PropagatorF::MatCorrType
@@ -1375,6 +1406,7 @@ template void trackSeedHandler(CellSeed<7>* trackSeeds,
13751406 const float maxChi2ClusterAttachment,
13761407 const float maxChi2NDF,
13771408 const int reseedIfShorter,
1409+ const bool repeatRefitOut,
13781410 const bool shiftRefToCluster,
13791411 const o2::base::Propagator* propagator,
13801412 const o2::base::PropagatorF::MatCorrType matCorrType,
0 commit comments