22#if !defined(GPUCA_GPUCODE)
31 double dAlpha = 2. * M_PI / (NumberOfSlicesA);
32 for (int32_t
i = 0;
i < NumberOfSlices;
i++) {
34 double alpha = dAlpha * (
i + 0.5);
35 s.sinAlpha = sin(
alpha);
36 s.cosAlpha = cos(
alpha);
38 mSliceInfos[NumberOfSlices] =
SliceInfo{0.f, 0.f};
40 for (int32_t
i = 0;
i < MaxNumberOfRows + 1;
i++) {
41 mRowInfos[
i] =
RowInfo{0.f, -1, 0.f, 0.f, 0.f, 0.f};
49 assert(numberOfRows >= 0 && numberOfRows < MaxNumberOfRows);
51 mConstructionMask = ConstructionState::InProgress;
52 mNumberOfRows = numberOfRows;
57 mScaleVtoSVsideA = 0.f;
58 mScaleVtoSVsideC = 0.f;
59 mScaleSVtoVsideA = 0.f;
60 mScaleSVtoVsideC = 0.f;
62 for (int32_t
i = 0;
i < MaxNumberOfRows;
i++) {
63 mRowInfos[
i] =
RowInfo{0.f, -1, 0.f, 0.f, 0.f, 0.f};
71 assert(mConstructionMask & ConstructionState::InProgress);
72 assert((tpcZlengthSideA > 0.f) && (tpcZlengthSideC > 0.f));
74 mTPCzLengthA = tpcZlengthSideA;
75 mTPCzLengthC = tpcZlengthSideC;
76 mScaleSVtoVsideA = tpcZlengthSideA + 3.;
77 mScaleSVtoVsideC = tpcZlengthSideC + 3.;
78 mScaleVtoSVsideA = 1. / mScaleSVtoVsideA;
79 mScaleVtoSVsideC = 1. / mScaleSVtoVsideC;
81 mConstructionMask |= ConstructionState::GeometryIsSet;
87 assert(mConstructionMask & ConstructionState::InProgress);
89 mTPCalignmentZ = tpcAlignmentZ;
90 mConstructionMask |= ConstructionState::AlignmentIsSet;
96 assert(mConstructionMask & ConstructionState::InProgress);
97 assert(iRow >= 0 && iRow < mNumberOfRows);
99 assert(padWidth > 0.);
107 const double sectorAngle = 2. * M_PI / NumberOfSlicesA;
108 const double scaleXtoRowWidth = 2. * tan(0.5 * sectorAngle);
109 double uWidth =
x * scaleXtoRowWidth;
113 row.maxPad = nPads - 1;
114 row.padWidth = padWidth;
115 row.u0 = -uWidth / 2.;
116 row.scaleUtoSU = 1. / uWidth;
117 row.scaleSUtoU = uWidth;
124 assert(mConstructionMask & ConstructionState::InProgress);
125 assert(mConstructionMask & ConstructionState::GeometryIsSet);
126 assert(mConstructionMask & ConstructionState::AlignmentIsSet);
128 for (int32_t
i = 0;
i < mNumberOfRows;
i++) {
129 assert(getRowInfo(
i).maxPad > 0);
132 mConstructionMask = (uint32_t)ConstructionState::Constructed;
138#if !defined(GPUCA_GPUCODE)
139 LOG(info) <<
"TPC Fast Transformation Geometry: ";
140 LOG(info) <<
"mNumberOfRows = " << mNumberOfRows;
141 LOG(info) <<
"mTPCzLengthA = " << mTPCzLengthA;
142 LOG(info) <<
"mTPCzLengthC = " << mTPCzLengthC;
143 LOG(info) <<
"mTPCalignmentZ = " << mTPCalignmentZ;
144 LOG(info) <<
"TPC Rows : ";
145 for (int32_t
i = 0;
i < mNumberOfRows;
i++) {
146 LOG(info) <<
" tpc row " <<
i <<
": x = " << mRowInfos[
i].
x <<
" maxPad = " << mRowInfos[
i].
maxPad <<
" padWidth = " << mRowInfos[
i].
padWidth;
160 if (mNumberOfRows <= 0 || mNumberOfRows >= MaxNumberOfRows) {
163 float lx = getRowInfo(
row).x;
164 float lx1 = 0.f, ly1 = 0.f, lz1 = 0.f;
165 float gx = 0.f,
gy = 0.f,
gz = 0.f;
168 convGlobalToLocal(slice,
gx,
gy,
gz, lx1, ly1, lz1);
170 if (fabs(lx1 -
lx) > 1.e-4 || fabs(ly1 -
ly) > 1.e-4 || fabs(lz1 -
lz) > 1.e-7) {
171 LOG(info) <<
"Error local <-> global: x " <<
lx <<
" dx " << lx1 -
lx <<
" y " <<
ly <<
" dy " << ly1 -
ly <<
" z " <<
lz <<
" dz " << lz1 -
lz;
174 float u = 0.f,
v = 0.f;
175 convLocalToUV(slice,
ly,
lz,
u,
v);
176 convUVtoLocal(slice,
u,
v, ly1, lz1);
178 if (fabs(ly1 -
ly) + fabs(lz1 -
lz) > 1.e-6) {
179 LOG(info) <<
"Error local <-> UV: y " <<
ly <<
" dy " << ly1 -
ly <<
" z " <<
lz <<
" dz " << lz1 -
lz;
183 float su = 0.f,
sv = 0.f;
185 convUVtoScaledUV(slice,
row,
u,
v,
su,
sv);
187 if (su < 0.f || su > 1.f) {
188 LOG(info) <<
"Error scaled U range: u " <<
u <<
" su " <<
su;
192 float u1 = 0.f,
v1 = 0.f;
193 convScaledUVtoUV(slice,
row,
su,
sv, u1,
v1);
195 if (fabs(u1 -
u) > 1.e-4 || fabs(
v1 -
v) > 1.e-4) {
196 LOG(info) <<
"Error UV<->scaled UV: u " <<
u <<
" du " << u1 -
u <<
" v " <<
v <<
" dv " <<
v1 -
v;
200 float pad = convUtoPad(
row,
u);
201 u1 = convPadToU(
row, pad);
203 if (fabs(u1 -
u) > 1.e-5) {
204 LOG(info) <<
"Error U<->Pad: u " <<
u <<
" pad " << pad <<
" du " << u1 -
u;
208#if !defined(GPUCA_GPUCODE)
210 LOG(info) <<
"TPC Fast Transformation Geometry: Internal ERROR " << error;
220 return test(2, 5, 10., 10.);
Definition of FlatObject class.
GLfloat GLfloat GLfloat alpha
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"