Project
Loading...
Searching...
No Matches
TPCFastTransformGeoPOD.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.
11
16
17#ifndef ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_TPCFASTTRANSFORMGEOPOD_H
18#define ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_TPCFASTTRANSFORMGEOPOD_H
19
20#include "GPUCommonDef.h"
21#include "GPUCommonMath.h"
22#include "GPUTPCGeometry.h"
23
24namespace o2::gpu
25{
31 inline static constexpr int32_t getNumberOfSectors() { return GPUTPCGeometry::NSECTORS; }
32
34 inline static constexpr int32_t getNumberOfSectorsA() { return GPUTPCGeometry::NSECTORS / 2; }
35
37 inline static constexpr int32_t getNumberOfRows() { return GPUTPCGeometry::NROWS; }
38
40 inline static constexpr float getSectorSin(uint32_t sector) { return GPUTPCGeometry::SectorSin(sector); }
41 inline static constexpr float getSectorCos(uint32_t sector) { return GPUTPCGeometry::SectorCos(sector); }
42
44 inline static constexpr float getRowInfoX(uint32_t row) { return GPUTPCGeometry::Row2X(row); }
45 inline static constexpr int32_t getRowInfoMaxPad(uint32_t row) { return GPUTPCGeometry::NPads(row) - 1; }
46 inline static constexpr float getRowInfoPadWidth(uint32_t row) { return GPUTPCGeometry::PadWidth(row); }
47
49 inline static constexpr float getTPCzLength() { return GPUTPCGeometry::TPCLength(); }
50
52 inline static constexpr float getZmin(uint32_t sector) { return sector < getNumberOfSectorsA() ? 0.f : -getTPCzLength(); }
53 inline static constexpr float getZmax(uint32_t sector) { return sector < getNumberOfSectorsA() ? getTPCzLength() : 0.f; }
54 inline static constexpr float getZreadout(uint32_t sector) { return sector < getNumberOfSectorsA() ? getTPCzLength() : -getTPCzLength(); }
55
57
59 inline static constexpr void convLocalToGlobal(uint32_t sector, float lx, float ly, float lz, float& gx, float& gy, float& gz)
60 {
61 const float sinAlpha = getSectorSin(sector);
62 const float cosAlpha = getSectorCos(sector);
63 gx = lx * cosAlpha - ly * sinAlpha;
64 gy = lx * sinAlpha + ly * cosAlpha;
65 gz = lz;
66 }
67
69 inline static constexpr void convGlobalToLocal(uint32_t sector, float gx, float gy, float gz, float& lx, float& ly, float& lz)
70 {
71 const float sinAlpha = getSectorSin(sector);
72 const float cosAlpha = getSectorCos(sector);
73 lx = gx * cosAlpha + gy * sinAlpha;
74 ly = -gx * sinAlpha + gy * cosAlpha;
75 lz = gz;
76 }
77
79 inline static constexpr void convPadDriftLengthToLocal(uint32_t sector, uint32_t row, float pad, float driftLength, float& y, float& z)
80 {
81 const float maxPad = getRowInfoMaxPad(row);
82 const float padWidth = getRowInfoPadWidth(row);
83 const float u = (pad - 0.5f * maxPad) * padWidth;
84 if (sector < getNumberOfSectorsA()) { // TPC side A
85 y = u;
86 z = getTPCzLength() - driftLength;
87 } else { // TPC side C
88 y = -u; // pads are mirrorred on C-side
89 z = driftLength - getTPCzLength(); // drift direction is mirrored on C-side
90 }
91 }
92
94 inline static constexpr float convDriftLengthToZ(uint32_t sector, float driftLength)
95 {
96 return (sector < getNumberOfSectorsA()) ? (getTPCzLength() - driftLength) : (driftLength - getTPCzLength());
97 }
98
100 inline static constexpr float convZtoDriftLength(uint32_t sector, float z)
101 {
102 return (sector < getNumberOfSectorsA()) ? (getTPCzLength() - z) : (z + getTPCzLength());
103 }
104
106 inline static constexpr void convLocalToPadDriftLength(uint32_t sector, uint32_t row, float y, float z, float& pad, float& l)
107 {
109 float u = 0;
110 if (sector < getNumberOfSectorsA()) { // TPC side A
111 u = y;
112 l = getTPCzLength() - z;
113 } else { // TPC side C
114 u = -y; // pads are mirrorred on C-side
115 l = z + getTPCzLength(); // drift direction is mirrored on C-side
116 }
117 const float maxPad = getRowInfoMaxPad(row);
118 const float padWidth = getRowInfoPadWidth(row);
119 pad = u / padWidth + 0.5f * maxPad;
120 }
121};
122
123} // namespace o2::gpu
124
125#endif
static constexpr uint32_t NROWS
static constexpr uint32_t NSECTORS
GLint y
Definition glcorearb.h:270
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
static constexpr float convDriftLengthToZ(uint32_t sector, float driftLength)
convert DriftLength -> Local c.s.
static constexpr void convPadDriftLengthToLocal(uint32_t sector, uint32_t row, float pad, float driftLength, float &y, float &z)
convert Pad, DriftLength -> Local c.s.
static constexpr float getRowInfoX(uint32_t row)
Gives TPC row info.
static constexpr void convLocalToPadDriftLength(uint32_t sector, uint32_t row, float y, float z, float &pad, float &l)
convert Local c.s. -> Pad, DriftLength
static constexpr float getSectorSin(uint32_t sector)
Gives sector info.
static constexpr int32_t getNumberOfRows()
Gives number of TPC rows.
static constexpr int32_t getNumberOfSectorsA()
Gives number of TPC sectors on the A side.
static constexpr int32_t getNumberOfSectors()
Gives number of TPC sectors.
static constexpr float getZmin(uint32_t sector)
Gives Z range for the corresponding TPC side.
static constexpr float getRowInfoPadWidth(uint32_t row)
static constexpr float getTPCzLength()
Gives Z length of the TPC, one Z side.
static constexpr float getSectorCos(uint32_t sector)
static constexpr void convGlobalToLocal(uint32_t sector, float gx, float gy, float gz, float &lx, float &ly, float &lz)
convert Global->Local c.s.
static constexpr int32_t getRowInfoMaxPad(uint32_t row)
static constexpr void convLocalToGlobal(uint32_t sector, float lx, float ly, float lz, float &gx, float &gy, float &gz)
_______________ Conversion of coordinate systems __________
static constexpr float getZreadout(uint32_t sector)
static constexpr float convZtoDriftLength(uint32_t sector, float z)
convert Z to DriftLength
static constexpr float getZmax(uint32_t sector)
std::vector< int > row