Skip to content

Commit

Permalink
ITS tracking works on generic N layers
Browse files Browse the repository at this point in the history
  • Loading branch information
mpuccio committed Oct 5, 2020
1 parent 4383a11 commit 4589c3d
Show file tree
Hide file tree
Showing 27 changed files with 314 additions and 400 deletions.
2 changes: 1 addition & 1 deletion Detectors/ITSMFT/ITS/tracking/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ o2_add_library(ITStracking
src/Label.cxx
src/PrimaryVertexContext.cxx
src/Road.cxx
src/StandaloneDebugger.cxx
# src/StandaloneDebugger.cxx
src/Tracker.cxx
src/TrackerTraitsCPU.cxx
src/TrackingConfigParam.cxx
Expand Down
6 changes: 3 additions & 3 deletions Detectors/ITSMFT/ITS/tracking/include/ITStracking/Cluster.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ namespace its
struct Cluster final {
Cluster() = default;
Cluster(const float x, const float y, const float z, const int idx);
Cluster(const int, const Cluster&);
Cluster(const int, const float3&, const Cluster&);
void Init(const int, const float3&, const Cluster&);
Cluster(const int, const IndexTableUtils& utils, const Cluster&);
Cluster(const int, const float3&, const IndexTableUtils& utils, const Cluster&);
void Init(const int, const float3&, const IndexTableUtils& utils, const Cluster&);

float xCoordinate; // = -999.f;
float yCoordinate; // = -999.f;
Expand Down
48 changes: 27 additions & 21 deletions Detectors/ITSMFT/ITS/tracking/include/ITStracking/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,29 +47,37 @@ struct TrackingParameters {
TrackingParameters& operator=(const TrackingParameters& t);

int CellMinimumLevel();
int CellsPerRoad() const { return NLayers - 2; }
int TrackletsPerRoad() const { return NLayers - 1; }

int NLayers = 7;
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};
std::vector<float> LayerRadii = {2.33959f, 3.14076f, 3.91924f, 19.6213f, 24.5597f, 34.388f, 39.3329f};
int ZBins{256};
int PhiBins{128};

/// General parameters
int ClusterSharing = 0;
int MinTrackLength = 7;
/// Trackleting cuts
float TrackletMaxDeltaPhi = 0.3f;
float TrackletMaxDeltaZ[constants::its::TrackletsPerRoad] = {0.1f, 0.1f, 0.3f, 0.3f, 0.3f, 0.3f};
std::vector<float> TrackletMaxDeltaZ = {0.1f, 0.1f, 0.3f, 0.3f, 0.3f, 0.3f};
/// Cell finding cuts
float CellMaxDeltaTanLambda = 0.025f;
float CellMaxDCA[constants::its::CellsPerRoad] = {0.05f, 0.04f, 0.05f, 0.2f, 0.4f};
std::vector<float> CellMaxDCA = {0.05f, 0.04f, 0.05f, 0.2f, 0.4f};
float CellMaxDeltaPhi = 0.14f;
float CellMaxDeltaZ[constants::its::CellsPerRoad] = {0.2f, 0.4f, 0.5f, 0.6f, 3.0f};
std::vector<float> CellMaxDeltaZ = {0.2f, 0.4f, 0.5f, 0.6f, 3.0f};
/// Neighbour finding cuts
float NeighbourMaxDeltaCurvature[constants::its::CellsPerRoad - 1] = {0.008f, 0.0025f, 0.003f, 0.0035f};
float NeighbourMaxDeltaN[constants::its::CellsPerRoad - 1] = {0.002f, 0.0090f, 0.002f, 0.005f};
std::vector<float> NeighbourMaxDeltaCurvature = {0.008f, 0.0025f, 0.003f, 0.0035f};
std::vector<float> NeighbourMaxDeltaN = {0.002f, 0.0090f, 0.002f, 0.005f};
};

struct MemoryParameters {
/// Memory coefficients
MemoryParameters& operator=(const MemoryParameters& t);
int MemoryOffset = 256;
float CellsMemoryCoefficients[constants::its::CellsPerRoad] = {2.3208e-08f, 2.104e-08f, 1.6432e-08f, 1.2412e-08f, 1.3543e-08f};
float TrackletsMemoryCoefficients[constants::its::TrackletsPerRoad] = {0.0016353f, 0.0013627f, 0.000984f, 0.00078135f, 0.00057934f, 0.00052217f};
std::vector<float> CellsMemoryCoefficients = {2.3208e-08f, 2.104e-08f, 1.6432e-08f, 1.2412e-08f, 1.3543e-08f};
std::vector<float> TrackletsMemoryCoefficients = {0.0016353f, 0.0013627f, 0.000984f, 0.00078135f, 0.00057934f, 0.00052217f};
};

inline int TrackingParameters::CellMinimumLevel()
Expand All @@ -83,34 +91,32 @@ inline TrackingParameters& TrackingParameters::operator=(const TrackingParameter
this->MinTrackLength = t.MinTrackLength;
/// Trackleting cuts
this->TrackletMaxDeltaPhi = t.TrackletMaxDeltaPhi;
for (int iT = 0; iT < constants::its::TrackletsPerRoad; ++iT)
this->TrackletMaxDeltaZ[iT] = t.TrackletMaxDeltaZ[iT];
this->TrackletMaxDeltaZ = t.TrackletMaxDeltaZ;
/// Cell finding cuts
this->CellMaxDeltaTanLambda = t.CellMaxDeltaTanLambda;
this->CellMaxDeltaPhi = t.CellMaxDeltaPhi;
for (int iC = 0; iC < constants::its::CellsPerRoad; ++iC) {
this->CellMaxDCA[iC] = t.CellMaxDCA[iC];
this->CellMaxDeltaZ[iC] = t.CellMaxDeltaZ[iC];
}
this->CellMaxDCA = t.CellMaxDCA;
this->CellMaxDeltaZ = t.CellMaxDeltaZ;
/// Neighbour finding cuts
for (int iC = 0; iC < constants::its::CellsPerRoad - 1; ++iC) {
this->NeighbourMaxDeltaCurvature[iC] = t.NeighbourMaxDeltaCurvature[iC];
this->NeighbourMaxDeltaN[iC] = t.NeighbourMaxDeltaN[iC];
}
this->NeighbourMaxDeltaCurvature = t.NeighbourMaxDeltaCurvature;
this->NeighbourMaxDeltaN = t.NeighbourMaxDeltaN;
return *this;
}

inline MemoryParameters& MemoryParameters::operator=(const MemoryParameters& t)
{
this->MemoryOffset = t.MemoryOffset;
for (int iC = 0; iC < constants::its::CellsPerRoad; ++iC)
this->CellsMemoryCoefficients[iC] = t.CellsMemoryCoefficients[iC];
for (int iT = 0; iT < constants::its::TrackletsPerRoad; ++iT)
this->TrackletsMemoryCoefficients[iT] = t.TrackletsMemoryCoefficients[iT];
this->CellsMemoryCoefficients = t.CellsMemoryCoefficients;
this->TrackletsMemoryCoefficients = t.TrackletsMemoryCoefficients;
return *this;
}

struct VertexingParameters {
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};
std::vector<float> LayerRadii = {2.33959f, 3.14076f, 3.91924f, 19.6213f, 24.5597f, 34.388f, 39.3329f};
int ZBins{256};
int PhiBins{128};

float zCut = 0.002f; //0.002f
float phiCut = 0.005f; //0.005f
float pairCut = 0.04f;
Expand Down
26 changes: 0 additions & 26 deletions Detectors/ITSMFT/ITS/tracking/include/ITStracking/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,43 +41,17 @@ constexpr float FloatMinThreshold{1e-20f};

namespace its
{
constexpr int LayersNumber{7};
constexpr int LayersNumberVertexer{3};
constexpr int TrackletsPerRoad{LayersNumber - 1};
constexpr int CellsPerRoad{LayersNumber - 2};
constexpr int ClustersPerCell{3};
constexpr int UnusedIndex{-1};
constexpr float Resolution{0.0005f};

GPU_HOST_DEVICE constexpr GPUArray<float, LayersNumber> LayersZCoordinate()
{
constexpr double s = 1.; // safety margin
return GPUArray<float, LayersNumber>{{16.333f + s, 16.333f + s, 16.333f + s, 42.140f + s, 42.140f + s, 73.745f + s, 73.745f + s}};
}
GPU_HOST_DEVICE constexpr GPUArray<float, LayersNumber> LayersRCoordinate()
{
return GPUArray<float, LayersNumber>{{2.33959f, 3.14076f, 3.91924f, 19.6213f, 24.5597f, 34.388f, 39.3329f}};
}
GPU_HOST_DEVICE constexpr GPUArray<float, 3> VertexerHistogramVolume()
{
return GPUArray<float, 3>{{1.98, 1.98, 40.f}};
}
} // namespace its

namespace index_table
{
constexpr int ZBins{256};
constexpr int PhiBins{128};
constexpr float InversePhiBinSize{constants::index_table::PhiBins / constants::math::TwoPi};
GPU_HOST_DEVICE constexpr GPUArray<float, its::LayersNumber> InverseZBinSize()
{
constexpr auto zSize = its::LayersZCoordinate();
return GPUArray<float, its::LayersNumber>{{0.5f * ZBins / (zSize[0]), 0.5f * ZBins / (zSize[1]), 0.5f * ZBins / (zSize[2]),
0.5f * ZBins / (zSize[3]), 0.5f * ZBins / (zSize[4]), 0.5f * ZBins / (zSize[5]),
0.5f * ZBins / (zSize[6])}};
}
} // namespace index_table

namespace pdgcodes
{
constexpr int PionCode{211};
Expand Down
3 changes: 1 addition & 2 deletions Detectors/ITSMFT/ITS/tracking/include/ITStracking/IOUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,14 @@ constexpr float DefClusErrorCol = o2::itsmft::SegmentationAlpide::PitchCol * 0.5
constexpr float DefClusError2Row = DefClusErrorRow * DefClusErrorRow;
constexpr float DefClusError2Col = DefClusErrorCol * DefClusErrorCol;

void loadConfigurations(const std::string&);
std::vector<ROframe> loadEventData(const std::string&);
void loadEventData(ROframe& events, gsl::span<const itsmft::CompClusterExt> clusters,
gsl::span<const unsigned char>::iterator& pattIt, const itsmft::TopologyDictionary& dict,
const dataformats::MCTruthContainer<MCCompLabel>* clsLabels = nullptr);
int loadROFrameData(const o2::itsmft::ROFRecord& rof, ROframe& events, gsl::span<const itsmft::CompClusterExt> clusters,
gsl::span<const unsigned char>::iterator& pattIt, const itsmft::TopologyDictionary& dict,
const dataformats::MCTruthContainer<MCCompLabel>* mClsLabels = nullptr);
void generateSimpleData(ROframe& event, const int phiDivs, const int zDivs);
// void generateSimpleData(ROframe& event, const int phiDivs, const int zDivs);

void convertCompactClusters(gsl::span<const itsmft::CompClusterExt> clusters,
gsl::span<const unsigned char>::iterator& pattIt,
Expand Down
67 changes: 45 additions & 22 deletions Detectors/ITSMFT/ITS/tracking/include/ITStracking/IndexTableUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#endif

#include "ITStracking/Constants.h"
#include "ITStracking/Configuration.h"
#include "ITStracking/Definitions.h"
#include "GPUCommonMath.h"
#include "GPUCommonDef.h"
Expand All @@ -31,42 +32,64 @@ namespace o2
namespace its
{

namespace index_table_utils
class IndexTableUtils
{
float getInverseZBinSize(const int);
GPUhdi() int getZBinIndex(const int, const float);
GPUhdi() int getPhiBinIndex(const float);
GPUhdi() int getBinIndex(const int, const int);
GPUhdi() int countRowSelectedBins(
const GPUArray<int, constants::index_table::ZBins * constants::index_table::PhiBins + 1>&, const int, const int,
const int);
} // namespace index_table_utils
public:
template <class T>
void setTrackingParameters(const T& params);
float getInverseZCoordinate(const int layerIndex) const;
GPUhdi() int getZBinIndex(const int, const float) const;
GPUhdi() int getPhiBinIndex(const float) const;
GPUhdi() int getBinIndex(const int, const int) const;
GPUhdi() int countRowSelectedBins(const int*, const int, const int, const int) const;

inline float getInverseZCoordinate(const int layerIndex)
GPUhdi() int getNzBins() const { return mNzBins; }
GPUhdi() int getNphiBins() const { return mNphiBins; }
GPUhdi() float getLayerZ(int i) const { return mLayerZ[i]; }

private:
int mNzBins = 0;
int mNphiBins = 0;
float mInversePhiBinSize = 0.f;
std::vector<float> mLayerZ;
std::vector<float> mInverseZBinSize;
};

template <class T>
inline void IndexTableUtils::setTrackingParameters(const T& params)
{
mInversePhiBinSize = params.PhiBins / constants::math::TwoPi;
mInverseZBinSize.resize(params.LayerZ.size());
mNzBins = params.ZBins;
mNphiBins = params.PhiBins;
mLayerZ = params.LayerZ;
for (unsigned int iL{0}; iL < mInverseZBinSize.size(); ++iL) {
mInverseZBinSize[iL] = 0.5f * params.ZBins / params.LayerZ[iL];
}
}

inline float IndexTableUtils::getInverseZCoordinate(const int layerIndex) const
{
return 0.5f * constants::index_table::ZBins / constants::its::LayersZCoordinate()[layerIndex];
return 0.5f * mNzBins / mLayerZ[layerIndex];
}

GPUhdi() int index_table_utils::getZBinIndex(const int layerIndex, const float zCoordinate)
GPUhdi() int IndexTableUtils::getZBinIndex(const int layerIndex, const float zCoordinate) const
{
return (zCoordinate + constants::its::LayersZCoordinate()[layerIndex]) *
constants::index_table::InverseZBinSize()[layerIndex];
return (zCoordinate + mLayerZ[layerIndex]) * mInverseZBinSize[layerIndex];
}

GPUhdi() int index_table_utils::getPhiBinIndex(const float currentPhi)
GPUhdi() int IndexTableUtils::getPhiBinIndex(const float currentPhi) const
{
return (currentPhi * constants::index_table::InversePhiBinSize);
return (currentPhi * mInversePhiBinSize);
}

GPUhdi() int index_table_utils::getBinIndex(const int zIndex, const int phiIndex)
GPUhdi() int IndexTableUtils::getBinIndex(const int zIndex, const int phiIndex) const
{
return gpu::GPUCommonMath::Min(phiIndex * constants::index_table::ZBins + zIndex,
constants::index_table::ZBins * constants::index_table::PhiBins - 1);
return gpu::GPUCommonMath::Min(phiIndex * mNzBins + zIndex, mNzBins * mNphiBins - 1);
}

GPUhdi() int index_table_utils::countRowSelectedBins(
const GPUArray<int, constants::index_table::ZBins * constants::index_table::PhiBins + 1>& indexTable,
const int phiBinIndex, const int minZBinIndex, const int maxZBinIndex)
GPUhdi() int IndexTableUtils::countRowSelectedBins(const int* indexTable, const int phiBinIndex,
const int minZBinIndex, const int maxZBinIndex) const
{
const int firstBinIndex{getBinIndex(minZBinIndex, phiBinIndex)};
const int maxBinIndex{firstBinIndex + maxZBinIndex - minZBinIndex + 1};
Expand Down
Loading

0 comments on commit 4589c3d

Please sign in to comment.