Project
Loading...
Searching...
No Matches
SpaceChargeHelpers.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
17
18#ifndef ALICEO2_TPC_SPACECHARGEHELPERS_H_
19#define ALICEO2_TPC_SPACECHARGEHELPERS_H_
20
21#include <functional>
22#include <cmath>
24#include "DataFormatsTPC/Defs.h"
25#include "TFormula.h"
26#include "Framework/Logger.h"
27
28namespace o2
29{
30namespace tpc
31{
32
33struct SCMetaData {
34
35 enum LumiType {
36 CTP = 0,
37 IDC = 1
38 };
39
40 void print() const
41 {
42 const std::array<std::string, 2> collisionTypes{"PP", "Pb-Pb"};
43 const std::array<std::string, 2> slumiSource{"CTP", "IDC"};
44 if (collisionType < collisionTypes.size()) {
45 LOGP(info, "meanLumi: {}, source of lumi: {}, IR: {}kHz, run: {}, collisionType {}", meanLumi, slumiSource[lumiSource], ir, run, collisionTypes[collisionType]);
46 } else {
47 LOGP(info, "Specified collision type {} not allowed", collisionType);
48 }
49 }
50
51 float meanLumi = 0;
52 float ir = 0;
53 int run = 0;
54 int collisionType = 0;
56
57 private:
58 ClassDefNV(SCMetaData, 1);
59};
60
65template <typename DataT = double>
67{
68 public:
70
71 o2::tpc::Side getSide() const { return mSide; }
72
73 void setSide(const o2::tpc::Side side) { mSide = side; }
74
76 void setParameters(const DataT parA, const DataT parB, const DataT parC)
77 {
78 mParA = parA;
79 mParB = parB;
80 mParC = parC;
81 }
82
84 DataT getParA() const { return mParA; }
85
87 DataT getParB() const { return mParB; }
88
90 DataT getParC() const { return mParC; }
91
96 DataT evalFieldR(DataT z, DataT r, DataT phi) const { return mErFunc(z, r, phi); }
97
102 DataT evalFieldZ(DataT z, DataT r, DataT phi) const { return mEzFunc(z, r, phi); }
103
108 DataT evalFieldPhi(DataT z, DataT r, DataT phi) const { return mEphiFunc(z, r, phi); }
109
114 DataT evalPotential(DataT z, DataT r, DataT phi) const { return mPotentialFunc(z, r, phi); }
115
120 DataT evalDensity(DataT z, DataT r, DataT phi) const { return mDensityFunc(z, r, phi); }
121
123 std::function<DataT(DataT, DataT, DataT)> mPotentialFunc = [& mParA = mParA, &mParB = mParB, &mParC = mParC](const DataT z, const DataT r, const DataT phi) {
124 const DataT zz = std::abs(z);
125 return -mParA * (std::pow((-r + 254.5 + 83.5), 4) - 338.0 * std::pow((-r + 254.5 + 83.5), 3) + 21250.75 * std::pow((-r + 254.5 + 83.5), 2)) * std::cos(mParB * phi) * std::cos(mParB * phi) * std::exp(-1 * mParC * (zz - 125) * (zz - 125));
126 };
127
129 std::function<DataT(DataT, DataT, DataT)> mDensityFunc = [& mParA = mParA, &mParB = mParB, &mParC = mParC](const DataT z, const DataT r, const DataT phi) {
130 const DataT zz = std::abs(z);
131 return mParA * ((1 / r * 16 * (-3311250 + 90995.5 * r - 570.375 * r * r + r * r * r)) * std::cos(mParB * phi) * std::cos(mParB * phi) * std::exp(-1 * mParC * (zz - 125) * (zz - 125)) +
132 (std::pow(-r + 254.5 + 83.5, 4) - 338.0 * std::pow(-r + 254.5 + 83.5, 3) + 21250.75 * std::pow(-r + 254.5 + 83.5, 2)) / (r * r) * std::exp(-1 * mParC * (zz - 125) * (zz - 125)) * -2 * mParB * mParB * std::cos(2 * mParB * phi) +
133 (std::pow(-r + 254.5 + 83.5, 4) - 338.0 * std::pow(-r + 254.5 + 83.5, 3) + 21250.75 * std::pow(-r + 254.5 + 83.5, 2)) * std::cos(mParB * phi) * std::cos(mParB * phi) * 2 * mParC * std::exp(-1 * mParC * (zz - 125) * (zz - 125)) * (2 * mParC * (zz - 125) * (zz - 125) - 1));
134 };
135
137 std::function<DataT(DataT, DataT, DataT)> mErFunc = [& mParA = mParA, &mParB = mParB, &mParC = mParC](const DataT z, const DataT r, const DataT phi) {
138 const DataT zz = std::abs(z);
139 return mParA * 4 * (r * r * r - 760.5 * r * r + 181991 * r - 1.3245 * std::pow(10, 7)) * std::cos(mParB * phi) * std::cos(mParB * phi) * std::exp(-1 * mParC * (zz - 125) * (zz - 125));
140 };
141
143 std::function<DataT(DataT, DataT, DataT)> mEphiFunc = [& mParA = mParA, &mParB = mParB, &mParC = mParC](const DataT z, const DataT r, const DataT phi) {
144 const DataT zz = std::abs(z);
145 return mParA * (std::pow(-r + 254.5 + 83.5, 4) - 338.0 * std::pow(-r + 254.5 + 83.5, 3) + 21250.75 * (-r + 254.5 + 83.5) * (-r + 254.5 + 83.5)) / r * std::exp(-1 * mParC * (zz - 125) * (zz - 125)) * -mParB * std::sin(2 * mParB * phi);
146 };
147
149 std::function<DataT(DataT, DataT, DataT)> mEzFunc = [& mParA = mParA, &mParB = mParB, &mParC = mParC](const DataT z, const DataT r, const DataT phi) {
150 const DataT zz = std::abs(z);
151 return mParA * (std::pow(-r + 254.5 + 83.5, 4) - 338.0 * std::pow(-r + 254.5 + 83.5, 3) + 21250.75 * (-r + 254.5 + 83.5) * (-r + 254.5 + 83.5)) * std::cos(mParB * phi) * std::cos(mParB * phi) * -2 * mParC * (zz - 125) * std::exp(-1 * mParC * (zz - 125) * (zz - 125));
152 };
153
154 static constexpr unsigned int getID() { return ID; }
155
156 private:
157 static constexpr unsigned int ID = 0;
158 DataT mParA{1e-5};
159 DataT mParB{0.5};
160 DataT mParC{1e-4};
162};
163
165template <typename DataT = double>
167{
168 public:
169 DataT getDistortionsLX(const DataT lx, const DataT ly, const DataT lz, const Side side) const { return mDlXFormula.Eval(lx, ly, lz, side); };
170 DataT getCorrectionsLX(const DataT lx, const DataT ly, const DataT lz, const Side side) const { return mClXFormula.Eval(lx, ly, lz, side); };
171 DataT getDistortionsLY(const DataT lx, const DataT ly, const DataT lz, const Side side) const { return mDlYFormula.Eval(lx, ly, lz, side); };
172 DataT getCorrectionsLY(const DataT lx, const DataT ly, const DataT lz, const Side side) const { return mClYFormula.Eval(lx, ly, lz, side); };
173 DataT getDistortionsLZ(const DataT lx, const DataT ly, const DataT lz, const Side side) const { return mDlZFormula.Eval(lx, ly, lz, side); };
174 DataT getCorrectionsLZ(const DataT lx, const DataT ly, const DataT lz, const Side side) const { return mClZFormula.Eval(lx, ly, lz, side); };
175
178 {
179 mDlXFormula = TFormula{"mDlX", "(254.5 - x) / 50"};
180 mClXFormula = TFormula{"mClX", "(x * 50 - 254.5) / 49 - x"};
181 mDlYFormula = TFormula{"mDlY", "2 + 0.01 * x"};
182 mClYFormula = TFormula{"mClY", "-(2 + 0.01 * (x + (x * 50 - 254.5) / 49 - x))"};
183 mDlZFormula = TFormula{"mDlZ", "z / 50"};
184 mClZFormula = TFormula{"mClZ", "z * 50 / 51 - z"};
185 }
186
188 bool isValid() const { return mDlXFormula.IsValid() && mClXFormula.IsValid() && mDlYFormula.IsValid() && mClYFormula.IsValid() && mDlZFormula.IsValid() && mClZFormula.IsValid(); }
189
193
205
209
213
217
228
230};
231
236template <typename DataT = double>
238{
242
243 public:
250 NumericalFields(const DataContainer& dataEr, const DataContainer& dataEz, const DataContainer& dataEphi, const RegularGrid& gridProperties, const o2::tpc::Side side)
251 : mInterpolatorEr{dataEr, gridProperties}, mInterpolatorEz{dataEz, gridProperties}, mInterpolatorEphi{dataEphi, gridProperties}, mSide{side}
252 {
253 // restrict electric fields to inner volume of the TPC!
254 mInterpolatorEr.setExtrapolateValues(false);
255 mInterpolatorEz.setExtrapolateValues(false);
256 mInterpolatorEphi.setExtrapolateValues(false);
257 };
258
263 DataT evalFieldR(DataT z, DataT r, DataT phi) const { return mInterpolatorEr(z, r, phi); }
264
269 DataT evalFieldZ(DataT z, DataT r, DataT phi) const { return mInterpolatorEz(z, r, phi); }
270
275 DataT evalFieldPhi(DataT z, DataT r, DataT phi) const { return mInterpolatorEphi(z, r, phi); }
276
277 o2::tpc::Side getSide() const { return mSide; }
278
279 static constexpr unsigned int getID() { return ID; }
280
281 private:
282 o2::tpc::Side mSide{};
283 TriCubic mInterpolatorEr{};
284 TriCubic mInterpolatorEz{};
285 TriCubic mInterpolatorEphi{};
286 static constexpr unsigned int ID = 1;
287};
288
293{
294 using DataT = double;
295
296 public:
298 void setBField(const int field) { mBField = field; }
299
301 int getBField() const { return mBField; }
302
307 DataT evalFieldR(DataT z, DataT r, DataT phi) const
308 {
309 const double rphiz[]{r, phi, z};
310 return getBR(rphiz);
311 }
312
317 DataT evalFieldZ(DataT z, DataT r, DataT phi) const
318 {
319 const double rphiz[]{r, phi, z};
320 return getBZ(rphiz);
321 }
322
327 DataT evalFieldPhi(DataT z, DataT r, DataT phi) const
328 {
329 const double rphiz[]{r, phi, z};
330 return getBPhi(rphiz);
331 }
332
333 double getBR(const double rphiz[]) const { return (rphiz[2] >= 0) ? getBR_A(rphiz) : getBR_C(rphiz); }
334 double getBPhi(const double rphiz[]) const { return (rphiz[2] >= 0) ? getBPhi_A(rphiz) : getBPhi_C(rphiz); }
335 double getBZ(const double rphiz[]) const { return (rphiz[2] >= 0) ? getBZ_A(rphiz) : getBZ_C(rphiz); }
336
337 private:
338 double getBR_A(const double rphiz[]) const { return evalField(rphiz, ((std::abs(mBField) == 5) ? mParamsBR_A_5 : mParamsBR_A_2)); }
339 double getBR_C(const double rphiz[]) const { return evalField(rphiz, ((std::abs(mBField) == 5) ? mParamsBR_C_5 : mParamsBR_C_2)); }
340 double getBPhi_A(const double rphiz[]) const { return evalField(rphiz, ((std::abs(mBField) == 5) ? mParamsBPhi_A_5 : mParamsBPhi_A_2)); }
341 double getBPhi_C(const double rphiz[]) const { return evalField(rphiz, ((std::abs(mBField) == 5) ? mParamsBPhi_C_5 : mParamsBPhi_C_2)); }
342 double getBZ_A(const double rphiz[]) const { return evalField(rphiz, ((std::abs(mBField) == 5) ? mParamsBZ_A_5 : mParamsBZ_A_2)); }
343 double getBZ_C(const double rphiz[]) const { return evalField(rphiz, ((std::abs(mBField) == 5) ? mParamsBZ_C_5 : mParamsBZ_C_2)); }
344
346 double evalField(const double rphiz[], const double params[]) const
347 {
348 if (mBField == 0) {
349 return 0;
350 }
351 double field = params[13] + params[0] * rphiz[0] + params[1] * rphiz[2] + params[2] * rphiz[0] * rphiz[2] + params[3] * rphiz[2] * rphiz[2] + params[4] * rphiz[0] * rphiz[2] * rphiz[2] + params[5] * rphiz[0] * std::cos(rphiz[1]) + params[6] * rphiz[0] * std::sin(rphiz[1]) + params[7] * rphiz[2] * rphiz[2] * std::cos(rphiz[1]) + params[8] * rphiz[2] * rphiz[2] * std::sin(rphiz[1]) + params[9] * rphiz[0] * rphiz[2] * rphiz[2] * std::cos(rphiz[1]) + params[10] * rphiz[0] * rphiz[2] * rphiz[2] * std::sin(rphiz[1]) + params[11] * rphiz[0] * rphiz[2] * std::cos(rphiz[1]) + params[12] * rphiz[0] * rphiz[2] * std::sin(rphiz[1]);
352 return (mBField < 0) ? field : -field;
353 }
354
355 static constexpr double mParamsBR_A_5[]{-2.735308458415022e-06, 3.332307825230892e-05, -1.6122043674923547e-06, -3.651355880554624e-07, 1.279249264081895e-09, 8.022905486012087e-06, -9.860444359905876e-07, 3.731008518454023e-08, -1.621170030862478e-07, -2.993099518447553e-10, 9.188552543587662e-10, 3.694763794980658e-08, -2.4521918555825965e-07, -0.0011251001320472243};
356 static constexpr double mParamsBR_C_5[]{-9.56934067157109e-06, 2.925896354411999e-05, -1.590504175365935e-06, 3.2678506747823123e-07, -1.155443633847809e-09, 8.047221940176635e-06, -1.524233769981198e-06, -2.058042110382768e-07, 1.7666032683026417e-07, 8.66636087440012e-10, -9.704495551802566e-10, 3.212813408161466e-08, -2.4861803070141444e-07, 0.0008591129655999633};
357 static constexpr double mParamsBPhi_A_5[]{2.4816698646856386e-07, -3.3769029760269716e-07, -1.2683802228879448e-09, 2.3512494546822587e-09, -4.424558185666922e-13, -7.894179812888077e-07, -3.839830209758884e-06, -1.7904399279931762e-07, -4.412987384727642e-08, 1.0387899089797522e-09, 3.3464750104626054e-10, -2.2404404898678082e-07, -5.148774856850897e-08, -1.1983526589792469e-05};
358 static constexpr double mParamsBPhi_C_5[]{5.043186514423357e-07, 1.8108880196737116e-07, -1.3759428693116512e-09, 3.5765707078538657e-09, -2.0523476064320596e-11, -6.579691696988604e-07, -3.0122693118808835e-06, 1.9271170150103e-07, 1.753682204150865e-07, -1.0480263051890858e-09, -4.509685788998614e-10, -2.2662983377275664e-07, -3.321254466726585e-08, -9.824193801152964e-05};
359 static constexpr double mParamsBZ_A_5[]{-0.0002710086087545181, -2.1716228180298688e-05, 2.0372445401312772e-07, 1.8722308100484602e-06, -2.184781835301027e-09, 1.1586501653487085e-05, -4.268530121709302e-05, 9.25125318435847e-09, 2.398075170465161e-08, 7.368413789410149e-11, 1.2684909376558765e-10, -7.455600427582419e-08, -2.19047372958347e-09, -4.984857763975774};
360 static constexpr double mParamsBZ_C_5[]{-0.0002723781566852378, 5.164000621778293e-05, -2.2868848177132177e-07, 1.8429368682919507e-06, -2.0819995566310643e-09, 1.2659874053279326e-05, -4.2485470595171776e-05, 7.907702641796776e-08, 1.1566407457667763e-08, 1.20481275676271e-10, 1.4095293784579698e-10, -4.2575645454742085e-08, 1.8684623199200014e-08, -4.984728649660976};
361
362 static constexpr double mParamsBR_A_2[]{4.176074764332572e-06, 9.055914278134961e-06, -5.018416467867267e-07, -1.334112691200317e-07, 3.104684385268349e-10, 4.3467816417566e-06, 1.2383828260857916e-06, 3.245197706524141e-08, -2.7930271763323774e-08, -1.9389331133261495e-10, 1.8314327254678544e-10, 2.0992501166573428e-08, -6.838744905841678e-08, -0.0005026374423244065};
363 static constexpr double mParamsBR_C_2[]{2.690810821222458e-07, 1.2512131073684395e-05, -5.270492878334909e-07, 1.4210051171669685e-07, -3.946184087795713e-10, 4.187396601807555e-06, 1.162486029025627e-06, -1.2885764676209642e-07, 5.0522405233618384e-08, 5.900898778393363e-10, -2.915328846694103e-10, 2.4884633611361987e-08, -7.230731252566365e-08, 0.0005786278689104887};
364 static constexpr double mParamsBPhi_A_2[]{5.523848397353052e-08, 3.928363557886265e-08, -4.4009701371053715e-10, -2.8641955389237296e-10, 1.821081797238636e-12, 1.4198619669167656e-06, -2.1764346689602207e-06, -3.231428657825349e-08, -3.192441937822271e-08, 2.0184985572664266e-10, 1.7364041924357946e-10, -5.558710928425412e-08, -2.4643189915496604e-08, -2.6078267611810743e-06};
365 static constexpr double mParamsBPhi_C_2[]{-3.2242292530589877e-07, 1.1034613295516684e-06, -5.352565006650699e-09, 2.6303325895048014e-09, -9.486096582613865e-12, 1.8505011431972595e-06, -1.584504697659336e-06, 5.447856545739479e-08, 1.1315654356038177e-07, -3.117270801091489e-10, -3.0711252324817763e-10, -6.133216833370231e-08, -2.255068131685042e-08, 5.3482425868711736e-05};
366 static constexpr double mParamsBZ_A_2[]{-9.167411332145822e-05, -2.4851522162035357e-05, 9.960757300624437e-08, 6.958010167256768e-07, -1.11183224670895e-09, 7.308228736481047e-06, -1.128405537856272e-05, 4.579914498063969e-09, 5.585937769498876e-09, 3.5099429237282976e-11, 6.979487504868819e-11, -3.307311247864971e-08, -8.782573530964495e-12, -2.037296213759382};
367 static constexpr double mParamsBZ_C_2[]{-9.159942524484742e-05, 1.4000105385364768e-05, -9.633834279744808e-08, 6.855806309034758e-07, -1.050924705926724e-09, 8.251185343615922e-06, -1.1702442409153027e-05, 5.8284517139534474e-08, 2.5765382472118957e-09, 3.927518861675029e-11, 6.531928502157076e-11, -1.7543419637429038e-08, 3.3098794349832556e-09, -2.037320607507206};
368
369 int mBField{5};
370};
371
376template <typename DataT = double>
378{
382
383 public:
390 DistCorrInterpolator(const DataContainer& dataDistCorrdR, const DataContainer& dataDistCorrdZ, const DataContainer& dataDistCorrdRPhi, const RegularGrid& gridProperties, const o2::tpc::Side side)
391 : interpolatorDistCorrdR{dataDistCorrdR, gridProperties}, interpolatorDistCorrdZ{dataDistCorrdZ, gridProperties}, interpolatorDistCorrdRPhi{dataDistCorrdRPhi, gridProperties}, mSide{side} {};
392
397 DataT evaldR(const DataT z, const DataT r, const DataT phi) const { return interpolatorDistCorrdR(z, r, phi); }
398
403 DataT evaldZ(const DataT z, const DataT r, const DataT phi) const { return interpolatorDistCorrdZ(z, r, phi); }
404
409 DataT evaldRPhi(const DataT z, const DataT r, const DataT phi) const { return interpolatorDistCorrdRPhi(z, r, phi); }
410
411 o2::tpc::Side getSide() const { return mSide; }
412
413 static constexpr unsigned int getID() { return ID; }
414
415 private:
416 o2::tpc::Side mSide{};
417 TriCubic interpolatorDistCorrdR{};
418 TriCubic interpolatorDistCorrdZ{};
419 TriCubic interpolatorDistCorrdRPhi{};
420 static constexpr unsigned int ID = 2;
421};
422
423} // namespace tpc
424} // namespace o2
425
426#endif
uint32_t side
Definition RawData.h:0
Definition of TriCubic class.
struct for containing simple analytical distortions (as function of local coordinates) and the result...
TFormula mClXFormula
analytical corrections in lx as a function of lx
bool isValid() const
check if all formulas are valid
TFormula mClZFormula
analytical correction in lz as a function of lz
TFormula mDlXFormula
analytical distortions in lx as a function of lx
void initDefault()
set default analytical formulas for distortions and corrections
ClassDefNV(AnalyticalDistCorr, 1)
DataT getCorrectionsLZ(const DataT lx, const DataT ly, const DataT lz, const Side side) const
TFormula mClYFormula
analytical correction in ly as a function of lx
TFormula mDlYFormula
analytical distortions in ly as a function of lx
DataT getCorrectionsLY(const DataT lx, const DataT ly, const DataT lz, const Side side) const
TFormula mDlZFormula
analytical correction in lz as a function of lz
DataT getCorrectionsLX(const DataT lx, const DataT ly, const DataT lz, const Side side) const
DataT getDistortionsLY(const DataT lx, const DataT ly, const DataT lz, const Side side) const
DataT getDistortionsLZ(const DataT lx, const DataT ly, const DataT lz, const Side side) const
DataT getDistortionsLX(const DataT lx, const DataT ly, const DataT lz, const Side side) const
void setParameters(const DataT parA, const DataT parB, const DataT parC)
sets the parameters
DataT getParC() const
return parameter C
static constexpr unsigned int getID()
DataT evalFieldPhi(DataT z, DataT r, DataT phi) const
AnalyticalFields(const o2::tpc::Side side=o2::tpc::Side::A)
DataT getParB() const
return parameter B
DataT evalDensity(DataT z, DataT r, DataT phi) const
DataT getParA() const
return parameter A
std::function< DataT(DataT, DataT, DataT)> mDensityFunc
analytical space charge - NOTE: if the space charge density is calculated analytical there would be a...
DataT evalFieldR(DataT z, DataT r, DataT phi) const
std::function< DataT(DataT, DataT, DataT)> mEzFunc
analytical electric field Ez
std::function< DataT(DataT, DataT, DataT)> mEphiFunc
analytical electric field Ephi
DataT evalPotential(DataT z, DataT r, DataT phi) const
o2::tpc::Side getSide() const
DataT evalFieldZ(DataT z, DataT r, DataT phi) const
void setSide(const o2::tpc::Side side)
std::function< DataT(DataT, DataT, DataT)> mErFunc
analytical electric field Er
std::function< DataT(DataT, DataT, DataT)> mPotentialFunc
analytical potential
double getBR(const double rphiz[]) const
DataT evalFieldZ(DataT z, DataT r, DataT phi) const
void setBField(const int field)
setting which field is used +5,+2,-2,-5
double getBZ(const double rphiz[]) const
DataT evalFieldPhi(DataT z, DataT r, DataT phi) const
double getBPhi(const double rphiz[]) const
DataT evalFieldR(DataT z, DataT r, DataT phi) const
static constexpr unsigned int getID()
DataT evaldZ(const DataT z, const DataT r, const DataT phi) const
DataT evaldRPhi(const DataT z, const DataT r, const DataT phi) const
DataT evaldR(const DataT z, const DataT r, const DataT phi) const
DistCorrInterpolator(const DataContainer &dataDistCorrdR, const DataContainer &dataDistCorrdZ, const DataContainer &dataDistCorrdRPhi, const RegularGrid &gridProperties, const o2::tpc::Side side)
NumericalFields(const DataContainer &dataEr, const DataContainer &dataEz, const DataContainer &dataEphi, const RegularGrid &gridProperties, const o2::tpc::Side side)
DataT evalFieldZ(DataT z, DataT r, DataT phi) const
static constexpr unsigned int getID()
DataT evalFieldPhi(DataT z, DataT r, DataT phi) const
o2::tpc::Side getSide() const
DataT evalFieldR(DataT z, DataT r, DataT phi) const
void setExtrapolateValues(const bool extraPolate)
enable or disable extraolating values outside of the grid
Definition TriCubic.h:89
GLenum const GLfloat * params
Definition glcorearb.h:272
GLboolean r
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
Side
TPC readout sidE.
Definition Defs.h:35
@ A
Definition Defs.h:35
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LumiType lumiSource
source of luminosity
float meanLumi
mean lumi the sc object corresponds to
int collisionType
0=PP, 1-Pb-Pb
int run
run number this object anchored to to