141 std::vector<TrackingParameters> trackParams;
144 trackParams.resize(tc.doUPCIteration ? 4 : 3);
145 trackParams[1].TrackletMinPt = 0.2f;
146 trackParams[1].CellDeltaTanLambdaSigma *= 2.;
147 trackParams[2].TrackletMinPt = 0.1f;
148 trackParams[2].CellDeltaTanLambdaSigma *= 4.;
150 trackParams[0].MinPt[0] = 1.f / 12;
151 trackParams[1].MinPt[0] = 1.f / 12;
153 trackParams[2].MinTrackLength = 4;
154 trackParams[2].MinPt[0] = 1.f / 12;
155 trackParams[2].MinPt[1] = 1.f / 5;
156 trackParams[2].MinPt[2] = 1.f / 1;
157 trackParams[2].MinPt[3] = 1.f / 6;
159 trackParams[2].StartLayerMask = (1 << 6) + (1 << 3);
160 if (tc.doUPCIteration) {
161 trackParams[3].MinTrackLength = 4;
162 trackParams[3].TrackletMinPt = 0.1f;
163 trackParams[3].CellDeltaTanLambdaSigma *= 4.;
165 for (
int ip = 0; ip < (
int)trackParams.size(); ip++) {
166 auto&
param = trackParams[ip];
171 if (tc.startLayerMask[ip] > 0) {
172 param.StartLayerMask = tc.startLayerMask[ip];
174 if (tc.minTrackLgtIter[ip] > 0) {
175 param.MinTrackLength = tc.minTrackLgtIter[ip];
177 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
178 int lslot0 = (tc.MaxTrackLength - ilg), lslot = lslot0 + (ip * (tc.MaxTrackLength - tc.MinTrackLength + 1));
179 if (tc.minPtIterLgt[lslot] > 0.) {
180 param.MinPt[lslot0] = tc.minPtIterLgt[lslot];
186 trackParams.resize(1);
187 trackParams[0].ZBins = 64;
188 trackParams[0].PhiBins = 32;
189 trackParams[0].MinTrackLength = 4;
191 trackParams.resize(1);
192 trackParams[0].MinTrackLength = 4;
193 trackParams[0].CellDeltaTanLambdaSigma *= 10;
194 trackParams[0].PhiBins = 4;
195 trackParams[0].ZBins = 16;
196 trackParams[0].PVres = 1.e5f;
197 trackParams[0].MaxChi2ClusterAttachment = 60.;
198 trackParams[0].MaxChi2NDF = 40.;
200 LOGP(fatal,
"Unsupported ITS tracking mode {} ",
toString(
mode));
203 for (
auto&
param : trackParams) {
204 param.PassFlags.reset();
207 if (trackParams.size() > 3 && tc.doUPCIteration) {
211 float bFactorTracklets = bFactor < 0.01f ? 1.f : bFactor;
214 for (
auto& p : trackParams) {
216 p.TrackletMinPt *= bFactorTracklets;
217 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
218 int lslot = tc.MaxTrackLength - ilg;
219 p.MinPt[lslot] *= bFactor;
221 p.ReseedIfShorter = tc.reseedIfShorter;
222 p.RepeatRefitOut = tc.repeatRefitOut;
223 p.ShiftRefToCluster = tc.shiftRefToCluster;
224 p.CreateArtefactLabels = tc.createArtefactLabels;
225 p.TrackFollowerNSigmaCutZ = tc.trackFollowerNSigmaCutZ;
226 p.TrackFollowerNSigmaCutPhi = tc.trackFollowerNSigmaCutPhi;
227 p.TrackFollowerMaxHypotheses = std::max(1, tc.trackFollowerMaxHypotheses);
229 p.PrintMemory = tc.printMemory;
230 p.MaxMemory = tc.maxMemory;
231 p.DropTFUponFailure = tc.dropTFUponFailure;
232 p.SaveTimeBenchmarks = tc.saveTimeBenchmarks;
233 p.FataliseUponFailure = tc.fataliseUponFailure;
234 p.AllowSharingFirstCluster = tc.allowSharingFirstCluster;
235 p.SharedClusterMaxDeltaPhi = tc.sharedClusterMaxDeltaPhi;
236 p.SharedClusterMaxDeltaEta = tc.sharedClusterMaxDeltaEta;
237 p.SharedClusterOppositeSign = tc.sharedClusterOppositeSign;
238 const auto iter = &p - trackParams.data();
240 p.MaxHoles = tc.maxHolesIter[iter];
241 p.HoleLayerMask = tc.holeLayerMaskIter[iter];
242 if (tc.trackFollowerTop[iter]) {
245 if (tc.trackFollowerBot[iter]) {
250 if (tc.useMatCorrTGeo) {
252 }
else if (tc.useFastMaterial) {
258 if (p.NLayers == 7) {
259 for (
int i{0};
i < 7; ++
i) {
260 p.SystErrorY2[
i] = tc.sysErrY2[
i] > 0 ? tc.sysErrY2[
i] : p.SystErrorY2[
i];
261 p.SystErrorZ2[
i] = tc.sysErrZ2[
i] > 0 ? tc.sysErrZ2[
i] : p.SystErrorZ2[
i];
264 for (
int i{0};
i < 7; ++
i) {
265 p.AddTimeError[
i] = tc.addTimeError[
i];
267 p.DoUPCIteration = tc.doUPCIteration;
268 p.MaxChi2ClusterAttachment = tc.maxChi2ClusterAttachment > 0 ? tc.maxChi2ClusterAttachment : p.MaxChi2ClusterAttachment;
269 p.MaxChi2NDF = tc.maxChi2NDF > 0 ? tc.maxChi2NDF : p.MaxChi2NDF;
270 p.PhiBins = tc.LUTbinsPhi > 0 ? tc.LUTbinsPhi : p.PhiBins;
271 p.ZBins = tc.LUTbinsZ > 0 ? tc.LUTbinsZ : p.ZBins;
272 p.PVres = tc.pvRes > 0 ? tc.pvRes : p.PVres;
273 p.NSigmaCut *= tc.nSigmaCut > 0 ? tc.nSigmaCut : 1.f;
274 p.CellDeltaTanLambdaSigma *= tc.deltaTanLres > 0 ? tc.deltaTanLres : 1.f;
275 p.TrackletMinPt *= tc.minPt > 0 ? tc.minPt : 1.f;
276 p.PerPrimaryVertexProcessing = tc.perPrimaryVertexProcessing;
277 for (
int iD{0}; iD < 3; ++iD) {
278 p.Diamond[iD] = tc.diamondPos[iD];
280 p.UseDiamond = tc.useDiamond;
283 if (trackParams.size() > tc.nIterations) {
284 trackParams.resize(tc.nIterations);
293 std::vector<VertexingParameters> vertParams(2);
294 for (
auto&
param : vertParams) {
295 param.PassFlags.reset();
301 for (
auto& p : vertParams) {
302 p.vertPerRofThreshold = vc.vertPerRofThreshold;
303 p.SaveTimeBenchmarks = vc.saveTimeBenchmarks;
304 p.PrintMemory = vc.printMemory;
305 p.MaxMemory = vc.maxMemory;
306 p.DropTFUponFailure = vc.dropTFUponFailure;
307 p.NSigmaCut = vc.nSigmaCut;
308 p.maxZPositionAllowed = vc.maxZPositionAllowed;
309 p.clusterContributorsCut = vc.clusterContributorsCut;
310 p.suppressLowMultDebris = vc.suppressLowMultDebris;
311 p.seedMemberRadiusTime = vc.seedMemberRadiusTime;
312 p.seedMemberRadiusZ = vc.seedMemberRadiusZ;
313 p.phiSpan = vc.phiSpan;
314 p.nThreads = vc.nThreads;
316 p.PhiBins = vc.PhiBins;
317 p.useTruthSeeding = vc.useTruthSeeding;
318 p.maxTrackletsPerCluster = vc.maxTrackletsPerCluster;
320 p.phiCut = vc.phiCut;
321 p.pairCut = vc.pairCut;
322 p.clusterCut = vc.clusterCut;
323 p.coarseZWindow = vc.coarseZWindow;
324 p.seedDedupZCut = vc.seedDedupZCut;
325 p.refitDedupZCut = vc.refitDedupZCut;
326 p.duplicateZCut = vc.duplicateZCut;
327 p.finalSelectionZCut = vc.finalSelectionZCut;
328 p.duplicateDistance2Cut = vc.duplicateDistance2Cut;
329 p.tanLambdaCut = vc.tanLambdaCut;
334 vertParams[1].phiCut = 0.015f;
335 vertParams[1].tanLambdaCut = 0.015f;
336 vertParams[1].maxTrackletsPerCluster = 2000;
337 vertParams[1].suppressLowMultDebris = 0;
339 vertParams.resize(1);
341 LOGP(fatal,
"Unsupported ITS vertexing mode {} ",
toString(
mode));
344 if (vertParams.size() > vc.nIterations) {
345 vertParams.resize(vc.nIterations);