Project
Loading...
Searching...
No Matches
Configuration.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
15
16#ifndef TRACKINGITSU_INCLUDE_CONFIGURATION_H_
17#define TRACKINGITSU_INCLUDE_CONFIGURATION_H_
18
19#include <algorithm>
20#include <cmath>
21#include <cstdint>
22#ifndef GPUCA_GPUCODE_DEVICE
23#include <limits>
24#include <string>
25#include <vector>
26#endif
27
33
34namespace o2::its
35{
36
37// Steering of dedicated steps in an iteration
38enum class IterationStep : uint16_t {
39 FirstPass = 0,
48 SeedingVertexPass, // this iteration runs the seeding-vertex step instead of track finding
49 LoadPersistentTables, // this pass uploads the per-TF tables (ROF overlap, tracking topologies); set on whichever pass runs first
50};
52
55 {
56 return LayerMask::span(0, NLayers - 1) & ~InactiveLayerMask;
57 }
58
60 {
61 const auto activeLayers = getActiveLayerMask();
62 return SeedingLayers.empty() ? activeLayers : (SeedingLayers & activeLayers);
63 }
64
66 {
67 return ~(getSeedingLayerMask());
68 }
69
70 int getNSeedingLayers() const noexcept
71 {
72 return getSeedingLayerMask().count();
73 }
74
75 int getMinSeedingClusters() const noexcept
76 {
77 const int minClusters = MinTrackLength - (MaxHoles > 0 ? MaxHoles : 0);
78 const int minClustersWithCells = minClusters > constants::ClustersPerCell ? minClusters : constants::ClustersPerCell;
79 const int nSeedingLayers = getNSeedingLayers();
80 return minClustersWithCells < nSeedingLayers ? minClustersWithCells : nSeedingLayers;
81 }
82
83 int CellMinimumLevel() const noexcept
84 {
86 }
87 int NeighboursPerRoad() const noexcept { return getNSeedingLayers() - 3; }
88 int CellsPerRoad() const noexcept { return getNSeedingLayers() - 2; }
89 int TrackletsPerRoad() const noexcept { return getNSeedingLayers() - 1; }
90 std::string asString() const;
91
93 int NLayers = 7;
94 std::vector<uint32_t> AddTimeError = {0, 0, 0, 0, 0, 0, 0};
95 std::vector<float> LayerZ = {16.333f + 1, 16.333f + 1, 16.333f + 1, 42.140f + 1, 42.140f + 1, 73.745f + 1, 73.745f + 1};
96 std::vector<float> LayerRadii = {2.33959f, 3.14076f, 3.91924f, 19.6213f, 24.5597f, 34.388f, 39.3329f};
97 std::vector<float> LayerxX0 = {5.e-3f, 5.e-3f, 5.e-3f, 1.e-2f, 1.e-2f, 1.e-2f, 1.e-2f};
98 std::vector<float> LayerResolution = {5.e-4f, 5.e-4f, 5.e-4f, 5.e-4f, 5.e-4f, 5.e-4f, 5.e-4f};
99 std::vector<float> SystErrorY2 = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
100 std::vector<float> SystErrorZ2 = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
101 int ZBins{256};
102 int PhiBins{128};
103 bool UseDiamond = false;
104 float Diamond[3] = {0.f, 0.f, 0.f};
105 float DiamondCov[6] = {25.e-6f, 0.f, 0.f, 25.e-6f, 0.f, 36.f};
106
109 int MaxHoles = 0;
113 float NSigmaCut = 5;
114 float PVres = 1.e-2f;
116 float TrackletMinPt = 0.3f;
120 float CellDeltaPhiMinPt = -1.f;
124 float MaxChi2NDF = 30.f;
125 int ReseedIfShorter = 6; // reseed for the final fit track with the length shorter than this
126 std::vector<float> MinPt = {0.f, 0.f, 0.f, 0.f};
128 bool RepeatRefitOut = false; // repeat outward refit using inward refit as a seed
129 bool ShiftRefToCluster = true; // TrackFit: after update shift the linearization reference to cluster
131 bool SaveTimeBenchmarks = false;
132 bool DoUPCIteration = false;
138 bool PrintMemory = false; // print allocator usage in epilog report
139 size_t MaxMemory = std::numeric_limits<size_t>::max();
140 bool DropTFUponFailure = false;
141
142 // Selections on tracks sharing clusters
144 float SharedClusterMaxDeltaPhi = 0.05f; // For tracks sharing clusters, maximum allowed delta phi at the cluster position
145 float SharedClusterMaxDeltaEta = 0.03f; // For tracks sharing clusters, maximum allowed delta eta at the cluster position
146 bool SharedClusterOppositeSign = false; // For tracks sharing clusters, require opposite sign of the tracklets
147 int SharedMaxClusters = 0; // Maximal allowed shared clusters (excluding first cluster)
148
149 int CellLineSharedClusterCut = 2; // Seeding-vertex pass: max clusters a cell->Line may share with already-accepted Lines before it is dropped
150
151 int VertPerRofThreshold = 0; // max vertices in a ROF for the UPC pass to still run on it
152 float VtxPhiCut = -1.f;
153 float VtxLineMinPt = -1.f;
156 float VtxClusterCut = -1.f;
157 float VtxPairCut = -1.f;
158 float VtxNSigmaCut = -1.f;
159 float VtxDuplicateZCut = -1.f;
160 float VtxDuplicateZScale = -1.f;
161 float VtxFineZWindow = -1.f;
163 float VtxFineMaxDrift = -1.f;
164 float VtxGoodLineChi2Cut = -1.f;
165 float VtxGoodLinePtCut = -1.f;
170};
171
173 std::string asString() const;
174
176 std::vector<float> LayerZ = {16.333f + 1, 16.333f + 1, 16.333f + 1, 42.140f + 1, 42.140f + 1, 73.745f + 1, 73.745f + 1};
177 std::vector<float> LayerRadii = {2.33959f, 3.14076f, 3.91924f, 19.6213f, 24.5597f, 34.388f, 39.3329f};
178 int vertPerRofThreshold = 0; // Maximum number of vertices per ROF to trigger second a round
179 int ZBins = 1;
180 int PhiBins = 128;
181 float zCut = -1.f;
182 float phiCut = -1.f;
183 float pairCut = -1.f;
184 float clusterCut = -1.f;
185 float coarseZWindow = -1.f;
186 float seedDedupZCut = -1.f;
187 float refitDedupZCut = -1.f;
188 float duplicateZCut = -1.f;
189 float finalSelectionZCut = -1.f;
191 float tanLambdaCut = -1.f;
192 float NSigmaCut = -1;
199 int phiSpan = -1;
200 int zSpan = -1;
201 bool SaveTimeBenchmarks = false;
202
203 bool useTruthSeeding = false; // overwrite found vertices with MC events
204
205 int nThreads = 1;
206 bool PrintMemory = false; // print allocator usage in epilog report
207 size_t MaxMemory = std::numeric_limits<size_t>::max();
208 bool DropTFUponFailure = false;
209};
210
211namespace TrackingMode
212{
213enum Type : int8_t {
214 Unset = -1, // Special value to leave a default in case we want to override via Configurable Params
215 Sync = 0,
216 Async = 1,
218 Off = 3,
219};
220
221Type fromString(std::string_view str);
222std::string toString(Type mode);
223
224std::vector<TrackingParameters> getTrackingParameters(Type mode);
225std::vector<VertexingParameters> getVertexingParameters(Type mode);
226
227}; // namespace TrackingMode
228
229} // namespace o2::its
230
231#endif /* TRACKINGITSU_INCLUDE_CONFIGURATION_H_ */
useful math constants
GLenum mode
Definition glcorearb.h:266
std::vector< VertexingParameters > getVertexingParameters(Type mode)
Type fromString(std::string_view str)
std::string toString(Type mode)
std::vector< TrackingParameters > getTrackingParameters(Type mode)
constexpr int ClustersPerCell
Definition Constants.h:31
std::string asString() const
std::vector< float > LayerRadii
int MinTrackLength
General parameters.
std::vector< float > SystErrorY2
std::vector< float > LayerZ
LayerMask getActiveLayerMask() const noexcept
float CellDeltaTanLambdaSigma
Cell finding cuts.
std::vector< float > SystErrorZ2
float TrackletMinPt
Trackleting cuts.
LayerMask getSeedingLayerMask() const noexcept
std::vector< float > LayerResolution
int CellMinimumLevel() const noexcept
std::vector< float > LayerxX0
LayerMask getNonSeedingLayerMask() const noexcept
std::vector< float > MinPt
o2::base::PropagatorImpl< float >::MatCorrType CorrType
Fitter parameters.
int CellsPerRoad() const noexcept
int NeighboursPerRoad() const noexcept
int getNSeedingLayers() const noexcept
int TrackletsPerRoad() const noexcept
std::vector< uint32_t > AddTimeError
int getMinSeedingClusters() const noexcept
std::string asString() const
std::vector< float > LayerZ
std::vector< float > LayerRadii
const std::string str