Project
Loading...
Searching...
No Matches
GPUDisplayMagneticField.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 GPUDISPLAYMAGNETICFIELD_H
16#define GPUDISPLAYMAGNETICFIELD_H
17
18#include "GPUCommonDef.h"
19#include "GPUDisplayMagneticFieldConstants.h" // Shared with the field shader
20#include <memory>
21#include <vector>
22
23#ifndef GPUCA_STANDALONE
24#include <Field/MagneticField.h>
25#endif
26
27namespace o2::gpu
28{
30{
31 public:
33#ifndef GPUCA_STANDALONE
35#endif
36
37 static constexpr std::size_t DIMENSIONS = GPUCA_DISPLAY_FIELD_DIMENSIONS;
53
55 uint32_t StepCount;
56 float StepSize;
57 };
58
59 template <std::size_t MAX_DIM1_SEGMENTS, std::size_t MAX_DIM2_SEGMENTS, std::size_t MAX_DIM3_SEGMENTS>
61 float MinZ;
62 float MaxZ;
64
65 int32_t ZSegments;
66
67 float SegDim1[MAX_DIM1_SEGMENTS];
68
69 int32_t BegSegDim2[MAX_DIM1_SEGMENTS];
70 int32_t NSegDim2[MAX_DIM1_SEGMENTS];
71
72 float SegDim2[MAX_DIM2_SEGMENTS];
73
74 int32_t BegSegDim3[MAX_DIM2_SEGMENTS];
75 int32_t NSegDim3[MAX_DIM2_SEGMENTS];
76
77 float SegDim3[MAX_DIM3_SEGMENTS];
78
79 int32_t SegID[MAX_DIM3_SEGMENTS];
80 };
81
82 template <std::size_t MAX_PARAMETERIZATIONS, std::size_t MAX_ROWS, std::size_t MAX_COLUMNS, std::size_t MAX_COEFFICIENTS>
84 float BOffsets[MAX_PARAMETERIZATIONS];
85 float BScales[MAX_PARAMETERIZATIONS];
86 float BMin[MAX_PARAMETERIZATIONS];
87 float BMax[MAX_PARAMETERIZATIONS];
88
89 int32_t NRows[MAX_PARAMETERIZATIONS];
90 int32_t ColsAtRowOffset[MAX_PARAMETERIZATIONS];
91 int32_t CofsAtRowOffset[MAX_PARAMETERIZATIONS];
92
93 int32_t NColsAtRow[MAX_ROWS];
94 int32_t CofsAtColOffset[MAX_ROWS];
95
96 int32_t NCofsAtCol[MAX_COLUMNS];
97 int32_t AtColCoefOffset[MAX_COLUMNS];
98
99 float Coeffs[MAX_COEFFICIENTS];
100 };
101
104
107
108 // TODO: what to do with this?
109 struct vtx {
110 float x, y, z;
111 vtx(float a, float b, float c) : x(a), y(b), z(c) {}
112 };
113
114 int32_t initializeUniforms();
115#ifndef GPUCA_STANDALONE
117#endif
118 void generateSeedPoints(std::size_t count);
119
120 std::size_t mSolSegDim1;
121 std::size_t mSolSegDim2;
122 std::size_t mSolSegDim3;
123
124 std::size_t mDipSegDim1;
125 std::size_t mDipSegDim2;
126 std::size_t mDipSegDim3;
127
129 std::size_t mSolRows;
130 std::size_t mSolColumns;
131 std::size_t mSolCoefficients;
132
134 std::size_t mDipRows;
135 std::size_t mDipColumns;
136 std::size_t mDipCoefficients;
137
138 bool mValid = false; // Field data loaded, buffers below filled
139 std::unique_ptr<RenderConstantsUniform> mRenderConstantsUniform;
140 std::unique_ptr<SolenoidSegmentsUniform> mSolenoidSegments;
141 std::unique_ptr<DipoleSegmentsUniform> mDipoleSegments;
142 std::unique_ptr<SolenoidParameterizationUniform> mSolenoidParameterization;
143 std::unique_ptr<DipoleParameterizationUniform> mDipoleParameterization;
144 std::vector<vtx> mFieldLineSeedPoints;
145};
146} // namespace o2::gpu
147
148#endif // GPUDISPLAYMAGNETICFIELD_H
Array sizes of the magnetic field parameterization, shared by GPUDisplayMagneticField (C++) and the f...
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_COLUMNS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_P_SEGMENTS
#define GPUCA_DISPLAY_FIELD_MAX_CHEBYSHEV_ORDER
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_Z_SEGMENTS
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_X_SEGMENTS
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_PARAMETERIZATIONS
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_ROWS
#define GPUCA_DISPLAY_FIELD_DIMENSIONS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_ROWS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_COEFFICIENTS
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_COEFFICIENTS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_R_SEGMENTS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_Z_SEGMENTS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_COLUMNS
#define GPUCA_DISPLAY_FIELD_MAX_SOLENOID_PARAMETERIZATIONS
#define GPUCA_DISPLAY_FIELD_MAX_DIPOLE_Y_SEGMENTS
Definition of the MagF class.
uint32_t c
Definition RawData.h:2
std::unique_ptr< RenderConstantsUniform > mRenderConstantsUniform
std::unique_ptr< SolenoidSegmentsUniform > mSolenoidSegments
static constexpr std::size_t MAX_SOLENOID_R_SEGMENTS
static constexpr std::size_t MAX_DIPOLE_ROWS
static constexpr std::size_t MAX_CHEBYSHEV_ORDER
static constexpr std::size_t MAX_SOLENOID_COEFFICIENTS
std::unique_ptr< DipoleParameterizationUniform > mDipoleParameterization
static constexpr std::size_t MAX_DIPOLE_Y_SEGMENTS
static constexpr std::size_t MAX_DIPOLE_PARAMETERIZATIONS
static constexpr std::size_t MAX_DIPOLE_X_SEGMENTS
static constexpr std::size_t DIMENSIONS
static constexpr std::size_t MAX_DIPOLE_Z_SEGMENTS
int32_t initializeUniformsFromField(o2::field::MagneticField *field)
static constexpr std::size_t MAX_DIPOLE_COLUMNS
static constexpr std::size_t MAX_SOLENOID_COLUMNS
static constexpr std::size_t MAX_SOLENOID_P_SEGMENTS
std::unique_ptr< SolenoidParameterizationUniform > mSolenoidParameterization
static constexpr std::size_t MAX_SOLENOID_Z_SEGMENTS
static constexpr std::size_t MAX_SOLENOID_PARAMETERIZATIONS
static constexpr std::size_t MAX_DIPOLE_COEFFICIENTS
std::unique_ptr< DipoleSegmentsUniform > mDipoleSegments
static constexpr std::size_t MAX_SOLENOID_ROWS
GLint GLenum GLint x
Definition glcorearb.h:403
GLint GLsizei count
Definition glcorearb.h:399
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLint y
Definition glcorearb.h:270
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843