Project
Loading...
Searching...
No Matches
GPUCommonTransform3D.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
14
15#ifndef GPUCOMMONTRANSFORM3D_H
16#define GPUCOMMONTRANSFORM3D_H
17
18#include "GPUCommonDef.h"
19
20namespace o2
21{
22namespace gpu
23{
25{
26 public:
27 Transform3D() = default;
28 Transform3D(float* v)
29 {
30 for (int32_t i = 0; i < 12; i++) {
31 m[i] = v[i];
32 }
33 }
34
35 GPUd() void Apply(const float* in, float* out) const
36 {
37 out[0] = m[kXX] * in[0] + m[kXY] * in[1] + m[kXZ] * in[2] + m[kDX];
38 out[1] = m[kYX] * in[0] + m[kYY] * in[1] + m[kYZ] * in[2] + m[kDY];
39 out[2] = m[kZX] * in[0] + m[kZY] * in[1] + m[kZZ] * in[2] + m[kDZ];
40 }
41
42 GPUd() void ApplyVector(const float* in, float* out) const
43 {
44 out[0] = m[kXX] * in[0] + m[kXY] * in[1] + m[kXZ] * in[2];
45 out[1] = m[kYX] * in[0] + m[kYY] * in[1] + m[kYZ] * in[2];
46 out[2] = m[kZX] * in[0] + m[kZY] * in[1] + m[kZZ] * in[2];
47 }
48
49 GPUd() void ApplyInverse(const float* in, float* out) const
50 {
51 const float tmp[3] = {in[0] - m[kDX], in[1] - m[kDY], in[2] - m[kDZ]};
52 out[0] = m[kXX] * tmp[0] + m[kYX] * tmp[1] + m[kZX] * tmp[2];
53 out[1] = m[kXY] * tmp[0] + m[kYY] * tmp[1] + m[kZY] * tmp[2];
54 out[2] = m[kXZ] * tmp[0] + m[kYZ] * tmp[1] + m[kZZ] * tmp[2];
55 }
56
57 GPUd() void ApplyInverseVector(const float* in, float* out) const
58 {
59 out[0] = m[kXX] * in[0] + m[kYX] * in[1] + m[kZX] * in[2];
60 out[1] = m[kXY] * in[0] + m[kYY] * in[1] + m[kZY] * in[2];
61 out[2] = m[kXZ] * in[0] + m[kYZ] * in[1] + m[kZZ] * in[2];
62 }
63
64 GPUd() void LocalToMaster(const float* in, float* out) const { ApplyInverse(in, out); }
65
66 private:
67 float m[12];
68
69 enum Transform3DMatrixIndex { kXX = 0,
70 kXY = 1,
71 kXZ = 2,
72 kDX = 3,
73 kYX = 4,
74 kYY = 5,
75 kYZ = 6,
76 kDY = 7,
77 kZX = 8,
78 kZY = 9,
79 kZZ = 10,
80 kDZ = 11 };
81};
82} // namespace gpu
83} // namespace o2
84
85#endif
int32_t i
GPUd() void ApplyInverse(const float *in
GPUd() void ApplyInverseVector(const float *in
GPUd() void LocalToMaster(const float *in
GPUd() void ApplyVector(const float *in
GPUd() void Apply(const float *in
const GLfloat * m
Definition glcorearb.h:4066
const GLdouble * v
Definition glcorearb.h:832
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
tB100 LocalToMaster(o2::math_utils::Point3D< double >{0, 0, 0}, poB)