106 std::vector<TrackingParameters> trackParams;
109 trackParams.resize(tc.doUPCIteration ? 4 : 3);
110 trackParams[1].TrackletMinPt = 0.2f;
111 trackParams[1].CellDeltaTanLambdaSigma *= 2.;
112 trackParams[2].TrackletMinPt = 0.1f;
113 trackParams[2].CellDeltaTanLambdaSigma *= 4.;
115 trackParams[0].MinPt[0] = 1.f / 12;
116 trackParams[1].MinPt[0] = 1.f / 12;
118 trackParams[2].MinTrackLength = 4;
119 trackParams[2].MinPt[0] = 1.f / 12;
120 trackParams[2].MinPt[1] = 1.f / 5;
121 trackParams[2].MinPt[2] = 1.f / 1;
122 trackParams[2].MinPt[3] = 1.f / 6;
124 trackParams[2].StartLayerMask = (1 << 6) + (1 << 3);
125 if (tc.doUPCIteration) {
126 trackParams[3].MinTrackLength = 4;
127 trackParams[3].TrackletMinPt = 0.1f;
128 trackParams[3].CellDeltaTanLambdaSigma *= 4.;
129 trackParams[3].DeltaROF = 0;
131 for (
size_t ip = 0; ip < trackParams.size(); ip++) {
132 auto&
param = trackParams[ip];
135 param.CellsPerClusterLimit = 1.e3f;
136 param.TrackletsPerClusterLimit = 1.e3f;
138 if (ip < tc.MaxIter) {
139 if (tc.startLayerMask[ip] > 0) {
140 trackParams[2].StartLayerMask = tc.startLayerMask[ip];
142 if (tc.minTrackLgtIter[ip] > 0) {
143 param.MinTrackLength = tc.minTrackLgtIter[ip];
145 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
146 int lslot0 = (tc.MaxTrackLength - ilg), lslot = lslot0 + ip * (tc.MaxTrackLength - tc.MinTrackLength + 1);
147 if (tc.minPtIterLgt[lslot] > 0.) {
148 param.MinPt[lslot0] = tc.minPtIterLgt[lslot];
154 trackParams.resize(1);
155 trackParams[0].ZBins = 64;
156 trackParams[0].PhiBins = 32;
157 trackParams[0].MinTrackLength = 4;
159 trackParams.resize(1);
160 trackParams[0].MinTrackLength = 4;
161 trackParams[0].CellDeltaTanLambdaSigma *= 10;
162 trackParams[0].PhiBins = 4;
163 trackParams[0].ZBins = 16;
164 trackParams[0].PVres = 1.e5f;
165 trackParams[0].MaxChi2ClusterAttachment = 60.;
166 trackParams[0].MaxChi2NDF = 40.;
167 trackParams[0].TrackletsPerClusterLimit = 100.;
168 trackParams[0].CellsPerClusterLimit = 100.;
170 LOGP(fatal,
"Unsupported ITS tracking mode {} ",
toString(
mode));
174 float bFactorTracklets = bFactor < 0.01 ? 1. : bFactor;
175 int nROFsPerIterations = tc.nROFsPerIterations > 0 ? tc.nROFsPerIterations : -1;
177 if (tc.nOrbitsPerIterations > 0) {
182 for (
auto& p : trackParams) {
184 p.TrackletMinPt *= bFactorTracklets;
185 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
186 int lslot = tc.MaxTrackLength - ilg;
187 p.MinPt[lslot] *= bFactor;
190 p.PrintMemory = tc.printMemory;
191 p.MaxMemory = tc.maxMemory;
192 p.DropTFUponFailure = tc.dropTFUponFailure;
193 p.SaveTimeBenchmarks = tc.saveTimeBenchmarks;
194 p.FataliseUponFailure = tc.fataliseUponFailure;
196 if (tc.useMatCorrTGeo) {
198 }
else if (tc.useFastMaterial) {
204 if (p.NLayers == 7) {
205 for (
int i{0};
i < 7; ++
i) {
206 p.SystErrorY2[
i] = tc.sysErrY2[
i] > 0 ? tc.sysErrY2[
i] : p.SystErrorY2[
i];
207 p.SystErrorZ2[
i] = tc.sysErrZ2[
i] > 0 ? tc.sysErrZ2[
i] : p.SystErrorZ2[
i];
210 p.DeltaROF = tc.deltaRof;
211 p.DoUPCIteration = tc.doUPCIteration;
212 p.MaxChi2ClusterAttachment = tc.maxChi2ClusterAttachment > 0 ? tc.maxChi2ClusterAttachment : p.MaxChi2ClusterAttachment;
213 p.MaxChi2NDF = tc.maxChi2NDF > 0 ? tc.maxChi2NDF : p.MaxChi2NDF;
214 p.PhiBins = tc.LUTbinsPhi > 0 ? tc.LUTbinsPhi : p.PhiBins;
215 p.ZBins = tc.LUTbinsZ > 0 ? tc.LUTbinsZ : p.ZBins;
216 p.PVres = tc.pvRes > 0 ? tc.pvRes : p.PVres;
217 p.NSigmaCut *= tc.nSigmaCut > 0 ? tc.nSigmaCut : 1.f;
218 p.CellDeltaTanLambdaSigma *= tc.deltaTanLres > 0 ? tc.deltaTanLres : 1.f;
219 p.TrackletMinPt *= tc.minPt > 0 ? tc.minPt : 1.f;
220 p.nROFsPerIterations = nROFsPerIterations;
221 p.PerPrimaryVertexProcessing = tc.perPrimaryVertexProcessing;
222 for (
int iD{0}; iD < 3; ++iD) {
223 p.Diamond[iD] = tc.diamondPos[iD];
225 p.UseDiamond = tc.useDiamond;
226 if (tc.useTrackFollower > 0) {
227 p.UseTrackFollower =
true;
231 p.UseTrackFollowerMix = ((tc.useTrackFollower & (1 << 0)) != 0);
232 p.UseTrackFollowerTop = ((tc.useTrackFollower & (1 << 1)) != 0);
233 p.UseTrackFollowerBot = ((tc.useTrackFollower & (1 << 2)) != 0);
234 p.TrackFollowerNSigmaCutZ = tc.trackFollowerNSigmaZ;
235 p.TrackFollowerNSigmaCutPhi = tc.trackFollowerNSigmaPhi;
237 if (tc.cellsPerClusterLimit >= 0) {
238 p.CellsPerClusterLimit = tc.cellsPerClusterLimit;
240 if (tc.trackletsPerClusterLimit >= 0) {
241 p.TrackletsPerClusterLimit = tc.trackletsPerClusterLimit;
243 if (tc.findShortTracks >= 0) {
244 p.FindShortTracks = tc.findShortTracks;
248 if (trackParams.size() > tc.nIterations) {
249 trackParams.resize(tc.nIterations);
258 std::vector<VertexingParameters> vertParams;
260 vertParams.resize(2);
261 vertParams[1].phiCut = 0.015f;
262 vertParams[1].tanLambdaCut = 0.015f;
263 vertParams[1].vertPerRofThreshold = 0;
264 vertParams[1].deltaRof = 0;
266 vertParams.resize(1);
268 vertParams.resize(1);
270 LOGP(fatal,
"Unsupported ITS vertexing mode {} ",
toString(
mode));
274 for (
auto& p : vertParams) {
275 p.SaveTimeBenchmarks = vc.saveTimeBenchmarks;
276 p.PrintMemory = vc.printMemory;
277 p.MaxMemory = vc.maxMemory;
278 p.DropTFUponFailure = vc.dropTFUponFailure;
279 p.nIterations = vc.nIterations;
280 p.deltaRof = vc.deltaRof;
281 p.allowSingleContribClusters = vc.allowSingleContribClusters;
282 p.trackletSigma = vc.trackletSigma;
283 p.maxZPositionAllowed = vc.maxZPositionAllowed;
284 p.clusterContributorsCut = vc.clusterContributorsCut;
285 p.phiSpan = vc.phiSpan;
286 p.nThreads = vc.nThreads;
288 p.PhiBins = vc.PhiBins;
290 p.useTruthSeeding = vc.useTruthSeeding;
291 p.outputContLabels = vc.outputContLabels;
294 vertParams[0].vertNsigmaCut = vc.vertNsigmaCut;
295 vertParams[0].vertRadiusSigma = vc.vertRadiusSigma;
296 vertParams[0].maxTrackletsPerCluster = vc.maxTrackletsPerCluster;
297 vertParams[0].lowMultBeamDistCut = vc.lowMultBeamDistCut;
298 vertParams[0].zCut = vc.zCut;
299 vertParams[0].phiCut = vc.phiCut;
300 vertParams[0].pairCut = vc.pairCut;
301 vertParams[0].clusterCut = vc.clusterCut;
302 vertParams[0].histPairCut = vc.histPairCut;
303 vertParams[0].tanLambdaCut = vc.tanLambdaCut;