115 std::vector<TrackingParameters> trackParams;
118 trackParams.resize(tc.doUPCIteration ? 4 : 3);
119 trackParams[1].TrackletMinPt = 0.2f;
120 trackParams[1].CellDeltaTanLambdaSigma *= 2.;
121 trackParams[2].TrackletMinPt = 0.1f;
122 trackParams[2].CellDeltaTanLambdaSigma *= 4.;
124 trackParams[0].MinPt[0] = 1.f / 12;
125 trackParams[1].MinPt[0] = 1.f / 12;
127 trackParams[2].MinTrackLength = 4;
128 trackParams[2].MinPt[0] = 1.f / 12;
129 trackParams[2].MinPt[1] = 1.f / 5;
130 trackParams[2].MinPt[2] = 1.f / 1;
131 trackParams[2].MinPt[3] = 1.f / 6;
133 trackParams[2].StartLayerMask = (1 << 6) + (1 << 3);
134 if (tc.doUPCIteration) {
135 trackParams[3].MinTrackLength = 4;
136 trackParams[3].TrackletMinPt = 0.1f;
137 trackParams[3].CellDeltaTanLambdaSigma *= 4.;
139 for (
size_t ip = 0; ip < trackParams.size(); ip++) {
140 auto&
param = trackParams[ip];
144 if (ip < tc.MaxIter) {
145 if (tc.startLayerMask[ip] > 0) {
146 trackParams[2].StartLayerMask = tc.startLayerMask[ip];
148 if (tc.minTrackLgtIter[ip] > 0) {
149 param.MinTrackLength = tc.minTrackLgtIter[ip];
151 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
152 int lslot0 = (tc.MaxTrackLength - ilg), lslot = lslot0 + ip * (tc.MaxTrackLength - tc.MinTrackLength + 1);
153 if (tc.minPtIterLgt[lslot] > 0.) {
154 param.MinPt[lslot0] = tc.minPtIterLgt[lslot];
160 trackParams.resize(1);
161 trackParams[0].ZBins = 64;
162 trackParams[0].PhiBins = 32;
163 trackParams[0].MinTrackLength = 4;
165 trackParams.resize(1);
166 trackParams[0].MinTrackLength = 4;
167 trackParams[0].CellDeltaTanLambdaSigma *= 10;
168 trackParams[0].PhiBins = 4;
169 trackParams[0].ZBins = 16;
170 trackParams[0].PVres = 1.e5f;
171 trackParams[0].MaxChi2ClusterAttachment = 60.;
172 trackParams[0].MaxChi2NDF = 40.;
174 LOGP(fatal,
"Unsupported ITS tracking mode {} ",
toString(
mode));
178 float bFactorTracklets = bFactor < 0.01f ? 1.f : bFactor;
181 for (
auto& p : trackParams) {
183 p.TrackletMinPt *= bFactorTracklets;
184 for (
int ilg = tc.MaxTrackLength; ilg >= tc.MinTrackLength; ilg--) {
185 int lslot = tc.MaxTrackLength - ilg;
186 p.MinPt[lslot] *= bFactor;
188 p.ReseedIfShorter = tc.reseedIfShorter;
189 p.RepeatRefitOut = tc.repeatRefitOut;
190 p.ShiftRefToCluster = tc.shiftRefToCluster;
191 p.createArtefactLabels = tc.createArtefactLabels;
193 p.PrintMemory = tc.printMemory;
194 p.MaxMemory = tc.maxMemory;
195 p.DropTFUponFailure = tc.dropTFUponFailure;
196 p.SaveTimeBenchmarks = tc.saveTimeBenchmarks;
197 p.FataliseUponFailure = tc.fataliseUponFailure;
198 p.AllowSharingFirstCluster = tc.allowSharingFirstCluster;
200 if (tc.useMatCorrTGeo) {
202 }
else if (tc.useFastMaterial) {
208 if (p.NLayers == 7) {
209 for (
int i{0};
i < 7; ++
i) {
210 p.SystErrorY2[
i] = tc.sysErrY2[
i] > 0 ? tc.sysErrY2[
i] : p.SystErrorY2[
i];
211 p.SystErrorZ2[
i] = tc.sysErrZ2[
i] > 0 ? tc.sysErrZ2[
i] : p.SystErrorZ2[
i];
214 for (
int i{0};
i < 7; ++
i) {
215 p.AddTimeError[
i] = tc.addTimeError[
i];
217 p.DoUPCIteration = tc.doUPCIteration;
218 p.MaxChi2ClusterAttachment = tc.maxChi2ClusterAttachment > 0 ? tc.maxChi2ClusterAttachment : p.MaxChi2ClusterAttachment;
219 p.MaxChi2NDF = tc.maxChi2NDF > 0 ? tc.maxChi2NDF : p.MaxChi2NDF;
220 p.PhiBins = tc.LUTbinsPhi > 0 ? tc.LUTbinsPhi : p.PhiBins;
221 p.ZBins = tc.LUTbinsZ > 0 ? tc.LUTbinsZ : p.ZBins;
222 p.PVres = tc.pvRes > 0 ? tc.pvRes : p.PVres;
223 p.NSigmaCut *= tc.nSigmaCut > 0 ? tc.nSigmaCut : 1.f;
224 p.CellDeltaTanLambdaSigma *= tc.deltaTanLres > 0 ? tc.deltaTanLres : 1.f;
225 p.TrackletMinPt *= tc.minPt > 0 ? tc.minPt : 1.f;
226 p.PerPrimaryVertexProcessing = tc.perPrimaryVertexProcessing;
227 for (
int iD{0}; iD < 3; ++iD) {
228 p.Diamond[iD] = tc.diamondPos[iD];
230 p.UseDiamond = tc.useDiamond;
233 if (trackParams.size() > tc.nIterations) {
234 trackParams.resize(tc.nIterations);
243 std::vector<VertexingParameters> vertParams;
245 vertParams.resize(2);
246 vertParams[1].phiCut = 0.015f;
247 vertParams[1].tanLambdaCut = 0.015f;
249 vertParams.resize(1);
251 vertParams.resize(1);
253 LOGP(fatal,
"Unsupported ITS vertexing mode {} ",
toString(
mode));
257 for (
auto& p : vertParams) {
258 p.SaveTimeBenchmarks = vc.saveTimeBenchmarks;
259 p.PrintMemory = vc.printMemory;
260 p.MaxMemory = vc.maxMemory;
261 p.DropTFUponFailure = vc.dropTFUponFailure;
262 p.nIterations = vc.nIterations;
263 p.trackletSigma = vc.trackletSigma;
264 p.maxZPositionAllowed = vc.maxZPositionAllowed;
265 p.clusterContributorsCut = vc.clusterContributorsCut;
266 p.suppressLowMultDebris = vc.suppressLowMultDebris;
267 p.seedMemberRadiusTime = vc.seedMemberRadiusTime;
268 p.seedMemberRadiusZ = vc.seedMemberRadiusZ;
269 p.phiSpan = vc.phiSpan;
270 p.nThreads = vc.nThreads;
272 p.PhiBins = vc.PhiBins;
274 p.useTruthSeeding = vc.useTruthSeeding;
277 vertParams[0].vertNsigmaCut = vc.vertNsigmaCut;
278 vertParams[0].vertRadiusSigma = vc.vertRadiusSigma;
279 vertParams[0].maxTrackletsPerCluster = vc.maxTrackletsPerCluster;
280 vertParams[0].zCut = vc.zCut;
281 vertParams[0].phiCut = vc.phiCut;
282 vertParams[0].pairCut = vc.pairCut;
283 vertParams[0].clusterCut = vc.clusterCut;
284 vertParams[0].coarseZWindow = vc.coarseZWindow;
285 vertParams[0].seedDedupZCut = vc.seedDedupZCut;
286 vertParams[0].refitDedupZCut = vc.refitDedupZCut;
287 vertParams[0].duplicateZCut = vc.duplicateZCut;
288 vertParams[0].finalSelectionZCut = vc.finalSelectionZCut;
289 vertParams[0].duplicateDistance2Cut = vc.duplicateDistance2Cut;
290 vertParams[0].tanLambdaCut = vc.tanLambdaCut;