@@ -96,6 +96,15 @@ std::vector<o2::its::TrackingParameters> TrackerDPL::createTrackingParamsFromCon
9696 auto loadTrackingParamsFromJson = [](std::vector<o2::its::TrackingParameters>& trackingParams, const nlohmann::json& paramConfigJson) {
9797 for (const auto & paramConfig : paramConfigJson) {
9898 o2::its::TrackingParameters params;
99+ auto applyPassFlag = [&](const char * name, o2::its::IterationStep step) {
100+ if (paramConfig.contains (name)) {
101+ if (paramConfig[name].get <bool >()) {
102+ params.PassFlags .set (step);
103+ } else {
104+ params.PassFlags .reset (step);
105+ }
106+ }
107+ };
99108
100109 if (paramConfig.contains (" NLayers" )) {
101110 params.NLayers = paramConfig[" NLayers" ].get <int >();
@@ -165,6 +174,37 @@ std::vector<o2::its::TrackingParameters> TrackerDPL::createTrackingParamsFromCon
165174 if (paramConfig.contains (" CreateArtefactLabels" )) {
166175 params.CreateArtefactLabels = paramConfig[" CreateArtefactLabels" ].get <bool >();
167176 }
177+ if (paramConfig.contains (" TrackFollower" )) {
178+ const auto mode = paramConfig[" TrackFollower" ].get <std::string>();
179+ if (mode == " top" || mode == " outward" ) {
180+ params.PassFlags .set (o2::its::IterationStep::TrackFollowerTop);
181+ } else if (mode == " bot" || mode == " bottom" || mode == " inward" ) {
182+ params.PassFlags .set (o2::its::IterationStep::TrackFollowerBot);
183+ } else if (mode == " mix" || mode == " both" ) {
184+ params.PassFlags .set (o2::its::IterationStep::TrackFollowerTop);
185+ params.PassFlags .set (o2::its::IterationStep::TrackFollowerBot);
186+ } else if (mode != " off" ) {
187+ LOGP (fatal, " Invalid ALICE3 TRK tracking parameter TrackFollower: {}" , mode);
188+ }
189+ }
190+ if (paramConfig.contains (" TrackFollowerNSigmaCutZ" )) {
191+ params.TrackFollowerNSigmaCutZ = paramConfig[" TrackFollowerNSigmaCutZ" ].get <float >();
192+ }
193+ if (paramConfig.contains (" TrackFollowerNSigmaCutPhi" )) {
194+ params.TrackFollowerNSigmaCutPhi = paramConfig[" TrackFollowerNSigmaCutPhi" ].get <float >();
195+ }
196+ if (paramConfig.contains (" TrackFollowerBeamWidth" )) {
197+ params.TrackFollowerBeamWidth = std::max (1 , paramConfig[" TrackFollowerBeamWidth" ].get <int >());
198+ }
199+ applyPassFlag (" FirstPass" , o2::its::IterationStep::FirstPass);
200+ applyPassFlag (" RebuildClusterLUT" , o2::its::IterationStep::RebuildClusterLUT);
201+ applyPassFlag (" UseUPCMask" , o2::its::IterationStep::UseUPCMask);
202+ applyPassFlag (" SelectUPCVertices" , o2::its::IterationStep::SelectUPCVertices);
203+ applyPassFlag (" ResetVertices" , o2::its::IterationStep::ResetVertices);
204+ applyPassFlag (" SkipROFsAboveThreshold" , o2::its::IterationStep::SkipROFsAboveThreshold);
205+ applyPassFlag (" MarkVerticesAsUPC" , o2::its::IterationStep::MarkVerticesAsUPC);
206+ applyPassFlag (" TrackFollowerTop" , o2::its::IterationStep::TrackFollowerTop);
207+ applyPassFlag (" TrackFollowerBot" , o2::its::IterationStep::TrackFollowerBot);
168208 if (paramConfig.contains (" PrintMemory" )) {
169209 params.PrintMemory = paramConfig[" PrintMemory" ].get <bool >();
170210 }
@@ -282,6 +322,7 @@ void TrackerDPL::run(ProcessingContext& pc)
282322 trackerTraits.adoptTimeFrame (static_cast <o2::its::TimeFrame<11 >*>(&timeFrame));
283323 itsTracker.adoptTimeFrame (timeFrame);
284324 trackerTraits.updateTrackingParameters (trackingParams);
325+ timeFrame.initTrackerTopologies (trackingParams, 11 );
285326
286327 int nRofs{0 };
287328 if (!mHitRecoConfig .empty ()) {
0 commit comments