125 std::vector<TrackingParameters> trackParams;
128 trackParams.resize(tc.doUPCIteration ? 4 : 3);
129 trackParams[1].TrackletMinPt = 0.2f;
130 trackParams[1].CellDeltaTanLambdaSigma *= 2.;
131 trackParams[2].TrackletMinPt = 0.1f;
132 trackParams[2].CellDeltaTanLambdaSigma *= 4.;
134 trackParams[0].MinPt[0] = 1.f / 12;
135 trackParams[1].MinPt[0] = 1.f / 12;
137 trackParams[2].MinTrackLength = 4;
138 trackParams[2].MinPt[0] = 1.f / 12;
139 trackParams[2].MinPt[1] = 1.f / 5;
140 trackParams[2].MinPt[2] = 1.f / 1;
141 trackParams[2].MinPt[3] = 1.f / 6;
143 trackParams[2].StartLayerMask = (1 << 6) + (1 << 3);
144 if (tc.doUPCIteration) {
145 trackParams[3].MinTrackLength = 4;
146 trackParams[3].TrackletMinPt = 0.1f;
147 trackParams[3].CellDeltaTanLambdaSigma *= 4.;
149 for (
int ip = 0; ip < (
int)trackParams.size(); ip++) {
150 auto&
param = trackParams[ip];
155 if (tc.startLayerMask[ip] > 0) {
156 param.StartLayerMask = tc.startLayerMask[ip];
158 if (tc.minTrackLgtIter[ip] > 0) {
159 param.MinTrackLength = tc.minTrackLgtIter[ip];
161 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
162 int lslot0 = (tc.MaxTrackLength - ilg), lslot = lslot0 + (ip * (tc.MaxTrackLength - tc.MinTrackLength + 1));
163 if (tc.minPtIterLgt[lslot] > 0.) {
164 param.MinPt[lslot0] = tc.minPtIterLgt[lslot];
170 trackParams.resize(1);
171 trackParams[0].ZBins = 64;
172 trackParams[0].PhiBins = 32;
173 trackParams[0].MinTrackLength = 4;
175 trackParams.resize(1);
176 trackParams[0].MinTrackLength = 4;
177 trackParams[0].CellDeltaTanLambdaSigma *= 10;
178 trackParams[0].PhiBins = 4;
179 trackParams[0].ZBins = 16;
180 trackParams[0].PVres = 1.e5f;
181 trackParams[0].MaxChi2ClusterAttachment = 60.;
182 trackParams[0].MaxChi2NDF = 40.;
184 LOGP(fatal,
"Unsupported ITS tracking mode {} ",
toString(
mode));
187 for (
auto&
param : trackParams) {
188 param.PassFlags.reset();
191 if (trackParams.size() > 3 && tc.doUPCIteration) {
196 float bFactorTracklets = bFactor < 0.01f ? 1.f : bFactor;
199 for (
auto& p : trackParams) {
201 p.TrackletMinPt *= bFactorTracklets;
202 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
203 int lslot = tc.MaxTrackLength - ilg;
204 p.MinPt[lslot] *= bFactor;
206 p.ReseedIfShorter = tc.reseedIfShorter;
207 p.RepeatRefitOut = tc.repeatRefitOut;
208 p.ShiftRefToCluster = tc.shiftRefToCluster;
209 p.CreateArtefactLabels = tc.createArtefactLabels;
211 p.PrintMemory = tc.printMemory;
212 p.MaxMemory = tc.maxMemory;
213 p.DropTFUponFailure = tc.dropTFUponFailure;
214 p.SaveTimeBenchmarks = tc.saveTimeBenchmarks;
215 p.FataliseUponFailure = tc.fataliseUponFailure;
216 p.AllowSharingFirstCluster = tc.allowSharingFirstCluster;
217 p.SharedClusterMaxDeltaPhi = tc.sharedClusterMaxDeltaPhi;
218 p.SharedClusterMaxDeltaEta = tc.sharedClusterMaxDeltaEta;
219 p.SharedClusterOppositeSign = tc.sharedClusterOppositeSign;
220 const auto iter = &p - trackParams.data();
222 p.MaxHoles = tc.maxHolesIter[iter];
223 p.HoleLayerMask = tc.holeLayerMaskIter[iter];
226 if (tc.useMatCorrTGeo) {
228 }
else if (tc.useFastMaterial) {
234 if (p.NLayers == 7) {
235 for (
int i{0};
i < 7; ++
i) {
236 p.SystErrorY2[
i] = tc.sysErrY2[
i] > 0 ? tc.sysErrY2[
i] : p.SystErrorY2[
i];
237 p.SystErrorZ2[
i] = tc.sysErrZ2[
i] > 0 ? tc.sysErrZ2[
i] : p.SystErrorZ2[
i];
240 for (
int i{0};
i < 7; ++
i) {
241 p.AddTimeError[
i] = tc.addTimeError[
i];
243 p.DoUPCIteration = tc.doUPCIteration;
244 p.MaxChi2ClusterAttachment = tc.maxChi2ClusterAttachment > 0 ? tc.maxChi2ClusterAttachment : p.MaxChi2ClusterAttachment;
245 p.MaxChi2NDF = tc.maxChi2NDF > 0 ? tc.maxChi2NDF : p.MaxChi2NDF;
246 p.PhiBins = tc.LUTbinsPhi > 0 ? tc.LUTbinsPhi : p.PhiBins;
247 p.ZBins = tc.LUTbinsZ > 0 ? tc.LUTbinsZ : p.ZBins;
248 p.PVres = tc.pvRes > 0 ? tc.pvRes : p.PVres;
249 p.NSigmaCut *= tc.nSigmaCut > 0 ? tc.nSigmaCut : 1.f;
250 p.CellDeltaTanLambdaSigma *= tc.deltaTanLres > 0 ? tc.deltaTanLres : 1.f;
251 p.TrackletMinPt *= tc.minPt > 0 ? tc.minPt : 1.f;
252 p.PerPrimaryVertexProcessing = tc.perPrimaryVertexProcessing;
253 for (
int iD{0}; iD < 3; ++iD) {
254 p.Diamond[iD] = tc.diamondPos[iD];
256 p.UseDiamond = tc.useDiamond;
259 if (trackParams.size() > tc.nIterations) {
260 trackParams.resize(tc.nIterations);
269 std::vector<VertexingParameters> vertParams(2);
270 for (
auto&
param : vertParams) {
271 param.PassFlags.reset();
277 for (
auto& p : vertParams) {
278 p.vertPerRofThreshold = vc.vertPerRofThreshold;
279 p.SaveTimeBenchmarks = vc.saveTimeBenchmarks;
280 p.PrintMemory = vc.printMemory;
281 p.MaxMemory = vc.maxMemory;
282 p.DropTFUponFailure = vc.dropTFUponFailure;
283 p.NSigmaCut = vc.nSigmaCut;
284 p.maxZPositionAllowed = vc.maxZPositionAllowed;
285 p.clusterContributorsCut = vc.clusterContributorsCut;
286 p.suppressLowMultDebris = vc.suppressLowMultDebris;
287 p.seedMemberRadiusTime = vc.seedMemberRadiusTime;
288 p.seedMemberRadiusZ = vc.seedMemberRadiusZ;
289 p.phiSpan = vc.phiSpan;
290 p.nThreads = vc.nThreads;
292 p.PhiBins = vc.PhiBins;
293 p.useTruthSeeding = vc.useTruthSeeding;
294 p.maxTrackletsPerCluster = vc.maxTrackletsPerCluster;
296 p.phiCut = vc.phiCut;
297 p.pairCut = vc.pairCut;
298 p.clusterCut = vc.clusterCut;
299 p.coarseZWindow = vc.coarseZWindow;
300 p.seedDedupZCut = vc.seedDedupZCut;
301 p.refitDedupZCut = vc.refitDedupZCut;
302 p.duplicateZCut = vc.duplicateZCut;
303 p.finalSelectionZCut = vc.finalSelectionZCut;
304 p.duplicateDistance2Cut = vc.duplicateDistance2Cut;
305 p.tanLambdaCut = vc.tanLambdaCut;
310 vertParams[1].phiCut = 0.015f;
311 vertParams[1].tanLambdaCut = 0.015f;
312 vertParams[1].maxTrackletsPerCluster = 2000;
314 vertParams.resize(1);
316 LOGP(fatal,
"Unsupported ITS vertexing mode {} ",
toString(
mode));
319 if (vertParams.size() > vc.nIterations) {
320 vertParams.resize(vc.nIterations);