16#ifndef O2_ITS_TRACKING_VERTEXER_TRAITS_H_
17#define O2_ITS_TRACKING_VERTEXER_TRAITS_H_
56 return int4{0, 0, 0, 0};
79 gsl::span<const o2::its::Line>&,
81 std::vector<o2::its::ClusterLines>&,
82 std::array<float, 2>&,
86 std::vector<o2::MCCompLabel>*,
87 const int iteration = 0);
89 static const std::vector<std::pair<int, int>>
selectClusters(
const int* indexTable,
90 const std::array<int, 4>& selectedBinsRect,
103 template <
typename T = o2::MCCompLabel>
104 static std::pair<T, float>
computeMain(
const std::vector<T>& elements)
108 for (
auto& element : elements) {
109 size_t count = std::count(elements.begin(), elements.end(), element);
115 return std::make_pair(elem,
static_cast<float>(
maxCount) / elements.size());
137 return VertexerTraits::getPhiBins(phi, dPhi, mIndexTableUtils);
140GPUhdi() const
int2 VertexerTraits::getPhiBins(
float phi,
float dPhi, const IndexTableUtils&
utils)
142 return int2{
utils.getPhiBinIndex(math_utils::getNormalizedPhi(phi - dPhi)),
143 utils.getPhiBinIndex(math_utils::getNormalizedPhi(phi + dPhi))};
146GPUhdi() const
int4 VertexerTraits::getBinsRect(const
Cluster& currentCluster, const
int layerIndex,
147 const
float directionZIntersection,
float maxdeltaz,
float maxdeltaphi,
148 const IndexTableUtils&
utils)
150 const float zRangeMin = directionZIntersection - 2 * maxdeltaz;
151 const float phiRangeMin = currentCluster.phi - maxdeltaphi;
152 const float zRangeMax = directionZIntersection + 2 * maxdeltaz;
153 const float phiRangeMax = currentCluster.phi + maxdeltaphi;
155 if (zRangeMax < -
utils.getLayerZ(layerIndex + 1) ||
156 zRangeMin >
utils.getLayerZ(layerIndex + 1) || zRangeMin > zRangeMax) {
157 return getEmptyBinsRect();
160 return int4{o2::gpu::GPUCommonMath::Max(0,
utils.getZBinIndex(layerIndex + 1, zRangeMin)),
161 utils.getPhiBinIndex(math_utils::getNormalizedPhi(phiRangeMin)),
162 o2::gpu::GPUCommonMath::Min(
utils.getNzBins() - 1,
utils.getZBinIndex(layerIndex + 1, zRangeMax)),
163 utils.getPhiBinIndex(math_utils::getNormalizedPhi(phiRangeMax))};
166GPUhdi() const
int4 VertexerTraits::getBinsRect(const
Cluster& currentCluster, const
int layerIndex,
167 const
float directionZIntersection,
float maxdeltaz,
float maxdeltaphi)
169 return VertexerTraits::getBinsRect(currentCluster, layerIndex, directionZIntersection, maxdeltaz, maxdeltaphi, mIndexTableUtils);
HMPID cluster implementation.
void initialise(const int iteration, const TrackingParameters &trkParam, const int maxLayers=7, bool resetVertices=true)
virtual void adoptTimeFrame(TimeFrame *tf)
virtual void computeTrackletMatching(const int iteration=0)
virtual void updateVertexingParameters(const std::vector< VertexingParameters > &vrtPar, const TimeFrameGPUParameters &gpuTfPar)
virtual void computeTrackletsHybrid(const int iteration=0)
void computeVerticesInRof(int, gsl::span< const o2::its::Line > &, std::vector< bool > &, std::vector< o2::its::ClusterLines > &, std::array< float, 2 > &, std::vector< Vertex > &, std::vector< int > &, TimeFrame *, std::vector< o2::MCCompLabel > *, const int iteration=0)
virtual void computeTracklets(const int iteration=0)
virtual void computeTrackletMatchingHybrid(const int iteration=0)
std::vector< VertexingParameters > getVertexingParameters() const
static std::pair< T, float > computeMain(const std::vector< T > &elements)
virtual void initialiseHybrid(const TrackingParameters &trackingParams, const int iteration=0)
GPUhd() static const expr int4 getEmptyBinsRect()
void setIsGPU(const unsigned char isgpu)
void setVertexingParameters(std::vector< VertexingParameters > &vertParams)
const const float float const IndexTableUtils float const IndexTableUtils &virtual void initialise(const TrackingParameters &trackingParams, const int iteration=0)
std::vector< VertexingParameters > & getVertexingParameters()
unsigned char getIsGPU() const
static const std::vector< std::pair< int, int > > selectClusters(const int *indexTable, const std::array< int, 4 > &selectedBinsRect, const IndexTableUtils &utils)
virtual ~VertexerTraits()=default
const const float float maxdeltaphi
std::vector< VertexingParameters > mVrtParams
virtual void computeVertices(const int iteration=0)
IndexTableUtils mIndexTableUtils
void dumpVertexerTraits()
virtual void computeVerticesHybrid(const int iteration=0)
virtual void adoptTimeFrameHybrid(TimeFrame *tf)
const const float maxdeltaz
constexpr int LayersNumberVertexer
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
Common utility functions.
std::unique_ptr< GPUReconstructionTimeframe > tf