22#include <fairlogger/Logger.h>
35 : mNumberOfParameterizationSolenoid(0),
36 mNumberOfDistinctZSegmentsSolenoid(0),
37 mNumberOfDistinctPSegmentsSolenoid(0),
38 mNumberOfDistinctRSegmentsSolenoid(0),
39 mCoordinatesSegmentsZSolenoid(nullptr),
40 mCoordinatesSegmentsPSolenoid(nullptr),
41 mCoordinatesSegmentsRSolenoid(nullptr),
42 mBeginningOfSegmentsPSolenoid(nullptr),
43 mNumberOfSegmentsPSolenoid(nullptr),
44 mBeginningOfSegmentsRSolenoid(nullptr),
45 mNumberOfRSegmentsSolenoid(nullptr),
46 mSegmentIdSolenoid(nullptr),
49 mParameterizationSolenoid(nullptr),
50 mMaxRadiusSolenoid(0),
51 mNumberOfParameterizationTPC(0),
52 mNumberOfDistinctZSegmentsTPC(0),
53 mNumberOfDistinctPSegmentsTPC(0),
54 mNumberOfDistinctRSegmentsTPC(0),
55 mCoordinatesSegmentsZTPC(nullptr),
56 mCoordinatesSegmentsPTPC(nullptr),
57 mCoordinatesSegmentsRTPC(nullptr),
58 mBeginningOfSegmentsPTPC(nullptr),
59 mNumberOfSegmentsPTPC(nullptr),
60 mBeginningOfSegmentsRTPC(nullptr),
61 mNumberOfRSegmentsTPC(nullptr),
62 mSegmentIdTPC(nullptr),
65 mParameterizationTPC(nullptr),
67 mNumberOfParameterizationTPCRat(0),
68 mNumberOfDistinctZSegmentsTPCRat(0),
69 mNumberOfDistinctPSegmentsTPCRat(0),
70 mNumberOfDistinctRSegmentsTPCRat(0),
71 mCoordinatesSegmentsZTPCRat(nullptr),
72 mCoordinatesSegmentsPTPCRat(nullptr),
73 mCoordinatesSegmentsRTPCRat(nullptr),
74 mBeginningOfSegmentsPTPCRat(nullptr),
75 mNumberOfSegmentsPTPCRat(nullptr),
76 mBeginningOfSegmentsRTPCRat(nullptr),
77 mNumberOfRSegmentsTPCRat(nullptr),
78 mSegmentIdTPCRat(nullptr),
81 mParameterizationTPCRat(nullptr),
83 mNumberOfParameterizationDipole(0),
84 mNumberOfDistinctZSegmentsDipole(0),
85 mNumberOfDistinctYSegmentsDipole(0),
86 mNumberOfDistinctXSegmentsDipole(0),
87 mCoordinatesSegmentsZDipole(nullptr),
88 mCoordinatesSegmentsYDipole(nullptr),
89 mCoordinatesSegmentsXDipole(nullptr),
90 mBeginningOfSegmentsYDipole(nullptr),
91 mNumberOfSegmentsYDipole(nullptr),
92 mBeginningOfSegmentsXDipole(nullptr),
93 mNumberOfSegmentsXDipole(nullptr),
94 mSegmentIdDipole(nullptr),
97 mParameterizationDipole(nullptr)
103 mNumberOfParameterizationSolenoid(0),
104 mNumberOfDistinctZSegmentsSolenoid(0),
105 mNumberOfDistinctPSegmentsSolenoid(0),
106 mNumberOfDistinctRSegmentsSolenoid(0),
107 mCoordinatesSegmentsZSolenoid(nullptr),
108 mCoordinatesSegmentsPSolenoid(nullptr),
109 mCoordinatesSegmentsRSolenoid(nullptr),
110 mBeginningOfSegmentsPSolenoid(nullptr),
111 mNumberOfSegmentsPSolenoid(nullptr),
112 mBeginningOfSegmentsRSolenoid(nullptr),
113 mNumberOfRSegmentsSolenoid(nullptr),
114 mSegmentIdSolenoid(nullptr),
116 mMaxZSolenoid(-1.e6),
117 mParameterizationSolenoid(nullptr),
118 mMaxRadiusSolenoid(0),
119 mNumberOfParameterizationTPC(0),
120 mNumberOfDistinctZSegmentsTPC(0),
121 mNumberOfDistinctPSegmentsTPC(0),
122 mNumberOfDistinctRSegmentsTPC(0),
123 mCoordinatesSegmentsZTPC(nullptr),
124 mCoordinatesSegmentsPTPC(nullptr),
125 mCoordinatesSegmentsRTPC(nullptr),
126 mBeginningOfSegmentsPTPC(nullptr),
127 mNumberOfSegmentsPTPC(nullptr),
128 mBeginningOfSegmentsRTPC(nullptr),
129 mNumberOfRSegmentsTPC(nullptr),
130 mSegmentIdTPC(nullptr),
133 mParameterizationTPC(nullptr),
135 mNumberOfParameterizationTPCRat(0),
136 mNumberOfDistinctZSegmentsTPCRat(0),
137 mNumberOfDistinctPSegmentsTPCRat(0),
138 mNumberOfDistinctRSegmentsTPCRat(0),
139 mCoordinatesSegmentsZTPCRat(nullptr),
140 mCoordinatesSegmentsPTPCRat(nullptr),
141 mCoordinatesSegmentsRTPCRat(nullptr),
142 mBeginningOfSegmentsPTPCRat(nullptr),
143 mNumberOfSegmentsPTPCRat(nullptr),
144 mBeginningOfSegmentsRTPCRat(nullptr),
145 mNumberOfRSegmentsTPCRat(nullptr),
146 mSegmentIdTPCRat(nullptr),
149 mParameterizationTPCRat(nullptr),
151 mNumberOfParameterizationDipole(0),
152 mNumberOfDistinctZSegmentsDipole(0),
153 mNumberOfDistinctYSegmentsDipole(0),
154 mNumberOfDistinctXSegmentsDipole(0),
155 mCoordinatesSegmentsZDipole(nullptr),
156 mCoordinatesSegmentsYDipole(nullptr),
157 mCoordinatesSegmentsXDipole(nullptr),
158 mBeginningOfSegmentsYDipole(nullptr),
159 mNumberOfSegmentsYDipole(nullptr),
160 mBeginningOfSegmentsXDipole(nullptr),
161 mNumberOfSegmentsXDipole(nullptr),
162 mSegmentIdDipole(nullptr),
165 mParameterizationDipole(nullptr)
173 SetName(
src.GetName());
174 SetTitle(
src.GetTitle());
176 mNumberOfParameterizationSolenoid =
src.mNumberOfParameterizationSolenoid;
177 mNumberOfDistinctZSegmentsSolenoid =
src.mNumberOfDistinctZSegmentsSolenoid;
178 mNumberOfDistinctPSegmentsSolenoid =
src.mNumberOfDistinctPSegmentsSolenoid;
179 mNumberOfDistinctRSegmentsSolenoid =
src.mNumberOfDistinctRSegmentsSolenoid;
180 mMinZSolenoid =
src.mMinZSolenoid;
181 mMaxZSolenoid =
src.mMaxZSolenoid;
182 mMaxRadiusSolenoid =
src.mMaxRadiusSolenoid;
183 if (
src.mNumberOfParameterizationSolenoid) {
184 memcpy(mCoordinatesSegmentsZSolenoid =
new Float_t[mNumberOfDistinctZSegmentsSolenoid],
185 src.mCoordinatesSegmentsZSolenoid,
sizeof(
Float_t) * mNumberOfDistinctZSegmentsSolenoid);
186 memcpy(mCoordinatesSegmentsPSolenoid =
new Float_t[mNumberOfDistinctPSegmentsSolenoid],
187 src.mCoordinatesSegmentsPSolenoid,
sizeof(
Float_t) * mNumberOfDistinctPSegmentsSolenoid);
188 memcpy(mCoordinatesSegmentsRSolenoid =
new Float_t[mNumberOfDistinctRSegmentsSolenoid],
189 src.mCoordinatesSegmentsRSolenoid,
sizeof(
Float_t) * mNumberOfDistinctRSegmentsSolenoid);
190 memcpy(mBeginningOfSegmentsPSolenoid =
new Int_t[mNumberOfDistinctZSegmentsSolenoid],
191 src.mBeginningOfSegmentsPSolenoid,
sizeof(Int_t) * mNumberOfDistinctZSegmentsSolenoid);
192 memcpy(mNumberOfSegmentsPSolenoid =
new Int_t[mNumberOfDistinctZSegmentsSolenoid],
src.mNumberOfSegmentsPSolenoid,
193 sizeof(Int_t) * mNumberOfDistinctZSegmentsSolenoid);
194 memcpy(mBeginningOfSegmentsRSolenoid =
new Int_t[mNumberOfDistinctPSegmentsSolenoid],
195 src.mBeginningOfSegmentsRSolenoid,
sizeof(Int_t) * mNumberOfDistinctPSegmentsSolenoid);
196 memcpy(mNumberOfRSegmentsSolenoid =
new Int_t[mNumberOfDistinctPSegmentsSolenoid],
src.mNumberOfRSegmentsSolenoid,
197 sizeof(Int_t) * mNumberOfDistinctPSegmentsSolenoid);
198 memcpy(mSegmentIdSolenoid =
new Int_t[mNumberOfDistinctRSegmentsSolenoid],
src.mSegmentIdSolenoid,
199 sizeof(Int_t) * mNumberOfDistinctRSegmentsSolenoid);
200 mParameterizationSolenoid =
new TObjArray(mNumberOfParameterizationSolenoid);
201 for (
int i = 0;
i < mNumberOfParameterizationSolenoid;
i++) {
202 mParameterizationSolenoid->AddAtAndExpand(
new Chebyshev3D(*
src.getParameterSolenoid(
i)),
i);
206 mNumberOfParameterizationTPC =
src.mNumberOfParameterizationTPC;
207 mNumberOfDistinctZSegmentsTPC =
src.mNumberOfDistinctZSegmentsTPC;
208 mNumberOfDistinctPSegmentsTPC =
src.mNumberOfDistinctPSegmentsTPC;
209 mNumberOfDistinctRSegmentsTPC =
src.mNumberOfDistinctRSegmentsTPC;
210 mMinZTPC =
src.mMinZTPC;
211 mMaxZTPC =
src.mMaxZTPC;
212 mMaxRadiusTPC =
src.mMaxRadiusTPC;
213 if (
src.mNumberOfParameterizationTPC) {
214 memcpy(mCoordinatesSegmentsZTPC =
new Float_t[mNumberOfDistinctZSegmentsTPC],
src.mCoordinatesSegmentsZTPC,
215 sizeof(
Float_t) * mNumberOfDistinctZSegmentsTPC);
216 memcpy(mCoordinatesSegmentsPTPC =
new Float_t[mNumberOfDistinctPSegmentsTPC],
src.mCoordinatesSegmentsPTPC,
217 sizeof(
Float_t) * mNumberOfDistinctPSegmentsTPC);
218 memcpy(mCoordinatesSegmentsRTPC =
new Float_t[mNumberOfDistinctRSegmentsTPC],
src.mCoordinatesSegmentsRTPC,
219 sizeof(
Float_t) * mNumberOfDistinctRSegmentsTPC);
220 memcpy(mBeginningOfSegmentsPTPC =
new Int_t[mNumberOfDistinctZSegmentsTPC],
src.mBeginningOfSegmentsPTPC,
221 sizeof(Int_t) * mNumberOfDistinctZSegmentsTPC);
222 memcpy(mNumberOfSegmentsPTPC =
new Int_t[mNumberOfDistinctZSegmentsTPC],
src.mNumberOfSegmentsPTPC,
223 sizeof(Int_t) * mNumberOfDistinctZSegmentsTPC);
224 memcpy(mBeginningOfSegmentsRTPC =
new Int_t[mNumberOfDistinctPSegmentsTPC],
src.mBeginningOfSegmentsRTPC,
225 sizeof(Int_t) * mNumberOfDistinctPSegmentsTPC);
226 memcpy(mNumberOfRSegmentsTPC =
new Int_t[mNumberOfDistinctPSegmentsTPC],
src.mNumberOfRSegmentsTPC,
227 sizeof(Int_t) * mNumberOfDistinctPSegmentsTPC);
228 memcpy(mSegmentIdTPC =
new Int_t[mNumberOfDistinctRSegmentsTPC],
src.mSegmentIdTPC,
229 sizeof(Int_t) * mNumberOfDistinctRSegmentsTPC);
230 mParameterizationTPC =
new TObjArray(mNumberOfParameterizationTPC);
231 for (
int i = 0;
i < mNumberOfParameterizationTPC;
i++) {
232 mParameterizationTPC->AddAtAndExpand(
new Chebyshev3D(*
src.getParameterTPCIntegral(
i)),
i);
236 mNumberOfParameterizationTPCRat =
src.mNumberOfParameterizationTPCRat;
237 mNumberOfDistinctZSegmentsTPCRat =
src.mNumberOfDistinctZSegmentsTPCRat;
238 mNumberOfDistinctPSegmentsTPCRat =
src.mNumberOfDistinctPSegmentsTPCRat;
239 mNumberOfDistinctRSegmentsTPCRat =
src.mNumberOfDistinctRSegmentsTPCRat;
240 mMinZTPCRat =
src.mMinZTPCRat;
241 mMaxZTPCRat =
src.mMaxZTPCRat;
242 mMaxRadiusTPCRat =
src.mMaxRadiusTPCRat;
243 if (
src.mNumberOfParameterizationTPCRat) {
244 memcpy(mCoordinatesSegmentsZTPCRat =
new Float_t[mNumberOfDistinctZSegmentsTPCRat],
src.mCoordinatesSegmentsZTPCRat,
245 sizeof(
Float_t) * mNumberOfDistinctZSegmentsTPCRat);
246 memcpy(mCoordinatesSegmentsPTPCRat =
new Float_t[mNumberOfDistinctPSegmentsTPCRat],
src.mCoordinatesSegmentsPTPCRat,
247 sizeof(
Float_t) * mNumberOfDistinctPSegmentsTPCRat);
248 memcpy(mCoordinatesSegmentsRTPCRat =
new Float_t[mNumberOfDistinctRSegmentsTPCRat],
src.mCoordinatesSegmentsRTPCRat,
249 sizeof(
Float_t) * mNumberOfDistinctRSegmentsTPCRat);
250 memcpy(mBeginningOfSegmentsPTPCRat =
new Int_t[mNumberOfDistinctZSegmentsTPCRat],
src.mBeginningOfSegmentsPTPCRat,
251 sizeof(Int_t) * mNumberOfDistinctZSegmentsTPCRat);
252 memcpy(mNumberOfSegmentsPTPCRat =
new Int_t[mNumberOfDistinctZSegmentsTPCRat],
src.mNumberOfSegmentsPTPCRat,
253 sizeof(Int_t) * mNumberOfDistinctZSegmentsTPCRat);
254 memcpy(mBeginningOfSegmentsRTPCRat =
new Int_t[mNumberOfDistinctPSegmentsTPCRat],
src.mBeginningOfSegmentsRTPCRat,
255 sizeof(Int_t) * mNumberOfDistinctPSegmentsTPCRat);
256 memcpy(mNumberOfRSegmentsTPCRat =
new Int_t[mNumberOfDistinctPSegmentsTPCRat],
src.mNumberOfRSegmentsTPCRat,
257 sizeof(Int_t) * mNumberOfDistinctPSegmentsTPCRat);
258 memcpy(mSegmentIdTPCRat =
new Int_t[mNumberOfDistinctRSegmentsTPCRat],
src.mSegmentIdTPCRat,
259 sizeof(Int_t) * mNumberOfDistinctRSegmentsTPCRat);
260 mParameterizationTPCRat =
new TObjArray(mNumberOfParameterizationTPCRat);
261 for (
int i = 0;
i < mNumberOfParameterizationTPCRat;
i++) {
262 mParameterizationTPCRat->AddAtAndExpand(
new Chebyshev3D(*
src.getParameterTPCRatIntegral(
i)),
i);
266 mNumberOfParameterizationDipole =
src.mNumberOfParameterizationDipole;
267 mNumberOfDistinctZSegmentsDipole =
src.mNumberOfDistinctZSegmentsDipole;
268 mNumberOfDistinctYSegmentsDipole =
src.mNumberOfDistinctYSegmentsDipole;
269 mNumberOfDistinctXSegmentsDipole =
src.mNumberOfDistinctXSegmentsDipole;
270 mMinDipoleZ =
src.mMinDipoleZ;
271 mMaxDipoleZ =
src.mMaxDipoleZ;
272 if (
src.mNumberOfParameterizationDipole) {
273 memcpy(mCoordinatesSegmentsZDipole =
new Float_t[mNumberOfDistinctZSegmentsDipole],
src.mCoordinatesSegmentsZDipole,
274 sizeof(
Float_t) * mNumberOfDistinctZSegmentsDipole);
275 memcpy(mCoordinatesSegmentsYDipole =
new Float_t[mNumberOfDistinctYSegmentsDipole],
src.mCoordinatesSegmentsYDipole,
276 sizeof(
Float_t) * mNumberOfDistinctYSegmentsDipole);
277 memcpy(mCoordinatesSegmentsXDipole =
new Float_t[mNumberOfDistinctXSegmentsDipole],
src.mCoordinatesSegmentsXDipole,
278 sizeof(
Float_t) * mNumberOfDistinctXSegmentsDipole);
279 memcpy(mBeginningOfSegmentsYDipole =
new Int_t[mNumberOfDistinctZSegmentsDipole],
src.mBeginningOfSegmentsYDipole,
280 sizeof(Int_t) * mNumberOfDistinctZSegmentsDipole);
281 memcpy(mNumberOfSegmentsYDipole =
new Int_t[mNumberOfDistinctZSegmentsDipole],
src.mNumberOfSegmentsYDipole,
282 sizeof(Int_t) * mNumberOfDistinctZSegmentsDipole);
283 memcpy(mBeginningOfSegmentsXDipole =
new Int_t[mNumberOfDistinctYSegmentsDipole],
src.mBeginningOfSegmentsXDipole,
284 sizeof(Int_t) * mNumberOfDistinctYSegmentsDipole);
285 memcpy(mNumberOfSegmentsXDipole =
new Int_t[mNumberOfDistinctYSegmentsDipole],
src.mNumberOfSegmentsXDipole,
286 sizeof(Int_t) * mNumberOfDistinctYSegmentsDipole);
287 memcpy(mSegmentIdDipole =
new Int_t[mNumberOfDistinctXSegmentsDipole],
src.mSegmentIdDipole,
288 sizeof(Int_t) * mNumberOfDistinctXSegmentsDipole);
289 mParameterizationDipole =
new TObjArray(mNumberOfParameterizationDipole);
290 for (
int i = 0;
i < mNumberOfParameterizationDipole;
i++) {
291 mParameterizationDipole->AddAtAndExpand(
new Chebyshev3D(*
src.getParameterDipole(
i)),
i);
307 if (mNumberOfParameterizationSolenoid) {
308 mParameterizationSolenoid->SetOwner(kTRUE);
309 delete mParameterizationSolenoid;
310 mParameterizationSolenoid =
nullptr;
311 delete[] mCoordinatesSegmentsZSolenoid;
312 mCoordinatesSegmentsZSolenoid =
nullptr;
313 delete[] mCoordinatesSegmentsPSolenoid;
314 mCoordinatesSegmentsPSolenoid =
nullptr;
315 delete[] mCoordinatesSegmentsRSolenoid;
316 mCoordinatesSegmentsRSolenoid =
nullptr;
317 delete[] mBeginningOfSegmentsPSolenoid;
318 mBeginningOfSegmentsPSolenoid =
nullptr;
319 delete[] mNumberOfSegmentsPSolenoid;
320 mNumberOfSegmentsPSolenoid =
nullptr;
321 delete[] mBeginningOfSegmentsRSolenoid;
322 mBeginningOfSegmentsRSolenoid =
nullptr;
323 delete[] mNumberOfRSegmentsSolenoid;
324 mNumberOfRSegmentsSolenoid =
nullptr;
325 delete[] mSegmentIdSolenoid;
326 mSegmentIdSolenoid =
nullptr;
329 mNumberOfParameterizationSolenoid = mNumberOfDistinctZSegmentsSolenoid = mNumberOfDistinctPSegmentsSolenoid =
330 mNumberOfDistinctRSegmentsSolenoid = 0;
332 mMaxZSolenoid = -1e6;
333 mMaxRadiusSolenoid = 0;
335 if (mNumberOfParameterizationTPC) {
336 mParameterizationTPC->SetOwner(kTRUE);
337 delete mParameterizationTPC;
338 mParameterizationTPC =
nullptr;
339 delete[] mCoordinatesSegmentsZTPC;
340 mCoordinatesSegmentsZTPC =
nullptr;
341 delete[] mCoordinatesSegmentsPTPC;
342 mCoordinatesSegmentsPTPC =
nullptr;
343 delete[] mCoordinatesSegmentsRTPC;
344 mCoordinatesSegmentsRTPC =
nullptr;
345 delete[] mBeginningOfSegmentsPTPC;
346 mBeginningOfSegmentsPTPC =
nullptr;
347 delete[] mNumberOfSegmentsPTPC;
348 mNumberOfSegmentsPTPC =
nullptr;
349 delete[] mBeginningOfSegmentsRTPC;
350 mBeginningOfSegmentsRTPC =
nullptr;
351 delete[] mNumberOfRSegmentsTPC;
352 mNumberOfRSegmentsTPC =
nullptr;
353 delete[] mSegmentIdTPC;
354 mSegmentIdTPC =
nullptr;
357 mNumberOfParameterizationTPC = mNumberOfDistinctZSegmentsTPC = mNumberOfDistinctPSegmentsTPC =
358 mNumberOfDistinctRSegmentsTPC = 0;
363 if (mNumberOfParameterizationTPCRat) {
364 mParameterizationTPCRat->SetOwner(kTRUE);
365 delete mParameterizationTPCRat;
366 mParameterizationTPCRat =
nullptr;
367 delete[] mCoordinatesSegmentsZTPCRat;
368 mCoordinatesSegmentsZTPCRat =
nullptr;
369 delete[] mCoordinatesSegmentsPTPCRat;
370 mCoordinatesSegmentsPTPCRat =
nullptr;
371 delete[] mCoordinatesSegmentsRTPCRat;
372 mCoordinatesSegmentsRTPCRat =
nullptr;
373 delete[] mBeginningOfSegmentsPTPCRat;
374 mBeginningOfSegmentsPTPCRat =
nullptr;
375 delete[] mNumberOfSegmentsPTPCRat;
376 mNumberOfSegmentsPTPCRat =
nullptr;
377 delete[] mBeginningOfSegmentsRTPCRat;
378 mBeginningOfSegmentsRTPCRat =
nullptr;
379 delete[] mNumberOfRSegmentsTPCRat;
380 mNumberOfRSegmentsTPCRat =
nullptr;
381 delete[] mSegmentIdTPCRat;
382 mSegmentIdTPCRat =
nullptr;
385 mNumberOfParameterizationTPCRat = mNumberOfDistinctZSegmentsTPCRat = mNumberOfDistinctPSegmentsTPCRat =
386 mNumberOfDistinctRSegmentsTPCRat = 0;
389 mMaxRadiusTPCRat = 0;
391 if (mNumberOfParameterizationDipole) {
392 mParameterizationDipole->SetOwner(kTRUE);
393 delete mParameterizationDipole;
394 mParameterizationDipole =
nullptr;
395 delete[] mCoordinatesSegmentsZDipole;
396 mCoordinatesSegmentsZDipole =
nullptr;
397 delete[] mCoordinatesSegmentsYDipole;
398 mCoordinatesSegmentsYDipole =
nullptr;
399 delete[] mCoordinatesSegmentsXDipole;
400 mCoordinatesSegmentsXDipole =
nullptr;
401 delete[] mBeginningOfSegmentsYDipole;
402 mBeginningOfSegmentsYDipole =
nullptr;
403 delete[] mNumberOfSegmentsYDipole;
404 mNumberOfSegmentsYDipole =
nullptr;
405 delete[] mBeginningOfSegmentsXDipole;
406 mBeginningOfSegmentsXDipole =
nullptr;
407 delete[] mNumberOfSegmentsXDipole;
408 mNumberOfSegmentsXDipole =
nullptr;
409 delete[] mSegmentIdDipole;
410 mSegmentIdDipole =
nullptr;
413 mNumberOfParameterizationDipole = mNumberOfDistinctZSegmentsDipole = mNumberOfDistinctYSegmentsDipole =
414 mNumberOfDistinctXSegmentsDipole = 0;
423#ifndef _BRING_TO_BOUNDARY_
424 b[0] =
b[1] =
b[2] = 0;
427 if (xyz[2] > mMinZSolenoid) {
440#ifndef _BRING_TO_BOUNDARY_
452 if (xyz[2] > mMinZSolenoid) {
462#ifndef _BRING_TO_BOUNDARY_
467 return par->
Eval(xyz, 2);
472 printf(
"Alice magnetic field parameterized by Chebyshev polynomials\n");
473 printf(
"Segmentation for Solenoid (%+.2f<Z<%+.2f cm | R<%.2f cm)\n", mMinZSolenoid, mMaxZSolenoid,
476 if (mParameterizationSolenoid) {
477 for (
int i = 0;
i < mNumberOfParameterizationSolenoid;
i++) {
478 printf(
"SOL%4d ",
i);
483 printf(
"Segmentation for TPC field integral (%+.2f<Z<%+.2f cm | R<%.2f cm)\n", mMinZTPC, mMaxZTPC, mMaxRadiusTPC);
485 if (mParameterizationTPC) {
486 for (
int i = 0;
i < mNumberOfParameterizationTPC;
i++) {
487 printf(
"TPC%4d ",
i);
492 printf(
"Segmentation for TPC field ratios integral (%+.2f<Z<%+.2f cm | R<%.2f cm)\n", mMinZTPCRat, mMaxZTPCRat,
495 if (mParameterizationTPCRat) {
496 for (
int i = 0;
i < mNumberOfParameterizationTPCRat;
i++) {
497 printf(
"TPCRat%4d ",
i);
502 printf(
"Segmentation for Dipole (%+.2f<Z<%+.2f cm)\n", mMinDipoleZ, mMaxDipoleZ);
503 if (mParameterizationDipole) {
504 for (
int i = 0;
i < mNumberOfParameterizationDipole;
i++) {
505 printf(
"DIP%4d ",
i);
513 if (!mNumberOfParameterizationDipole) {
516 int xid, yid, zid = TMath::BinarySearch(mNumberOfDistinctZSegmentsDipole, mCoordinatesSegmentsZDipole,
519 Bool_t reCheck = kFALSE;
521 int ysegBeg = mBeginningOfSegmentsYDipole[zid];
523 for (yid = 0; yid < mNumberOfSegmentsYDipole[zid]; yid++) {
524 if (xyz[1] < mCoordinatesSegmentsYDipole[ysegBeg + yid]) {
533 int xsegBeg = mBeginningOfSegmentsXDipole[yid];
534 for (xid = 0; xid < mNumberOfSegmentsXDipole[yid]; xid++) {
535 if (xyz[0] < mCoordinatesSegmentsXDipole[xsegBeg + xid]) {
546 if (!reCheck && (xyz[2] - mCoordinatesSegmentsZDipole[zid] < 3.e-5) && zid &&
554 return mSegmentIdDipole[xid];
559 if (!mNumberOfParameterizationSolenoid) {
562 int rid,
pid, zid = TMath::BinarySearch(mNumberOfDistinctZSegmentsSolenoid, mCoordinatesSegmentsZSolenoid,
565 Bool_t reCheck = kFALSE;
567 int psegBeg = mBeginningOfSegmentsPSolenoid[zid];
568 for (
pid = 0;
pid < mNumberOfSegmentsPSolenoid[zid];
pid++) {
569 if (rpz[1] < mCoordinatesSegmentsPSolenoid[psegBeg +
pid]) {
578 int rsegBeg = mBeginningOfSegmentsRSolenoid[
pid];
579 for (rid = 0; rid < mNumberOfRSegmentsSolenoid[
pid]; rid++) {
580 if (rpz[0] < mCoordinatesSegmentsRSolenoid[rsegBeg + rid]) {
590 if (!reCheck && (rpz[2] - mCoordinatesSegmentsZSolenoid[zid] < 3.e-5) && zid &&
598 return mSegmentIdSolenoid[rid];
603 if (!mNumberOfParameterizationTPC) {
606 int rid,
pid, zid = TMath::BinarySearch(mNumberOfDistinctZSegmentsTPC, mCoordinatesSegmentsZTPC,
609 Bool_t reCheck = kFALSE;
611 int psegBeg = mBeginningOfSegmentsPTPC[zid];
613 for (
pid = 0;
pid < mNumberOfSegmentsPTPC[zid];
pid++) {
614 if (rpz[1] < mCoordinatesSegmentsPTPC[psegBeg +
pid]) {
623 int rsegBeg = mBeginningOfSegmentsRTPC[
pid];
624 for (rid = 0; rid < mNumberOfRSegmentsTPC[
pid]; rid++) {
625 if (rpz[0] < mCoordinatesSegmentsRTPC[rsegBeg + rid]) {
635 if (!reCheck && (rpz[2] - mCoordinatesSegmentsZTPC[zid] < 3.e-5) && zid &&
643 return mSegmentIdTPC[rid];
648 if (!mNumberOfParameterizationTPCRat) {
651 int rid,
pid, zid = TMath::BinarySearch(mNumberOfDistinctZSegmentsTPCRat, mCoordinatesSegmentsZTPCRat,
654 Bool_t reCheck = kFALSE;
656 int psegBeg = mBeginningOfSegmentsPTPCRat[zid];
658 for (
pid = 0;
pid < mNumberOfSegmentsPTPCRat[zid];
pid++) {
659 if (rpz[1] < mCoordinatesSegmentsPTPCRat[psegBeg +
pid]) {
668 int rsegBeg = mBeginningOfSegmentsRTPCRat[
pid];
669 for (rid = 0; rid < mNumberOfRSegmentsTPCRat[
pid]; rid++) {
670 if (rpz[0] < mCoordinatesSegmentsRTPCRat[rsegBeg + rid]) {
680 if (!reCheck && (rpz[2] - mCoordinatesSegmentsZTPCRat[zid] < 3.e-5) && zid &&
688 return mSegmentIdTPCRat[rid];
693 static Double_t rphiz[3];
698#ifndef _BRING_TO_BOUNDARY_
700 for (
int i = 3;
i--;) {
715 static Double_t rphiz[3];
720#ifndef _BRING_TO_BOUNDARY_
723 for (
int i = 3;
i--;) {
743#ifndef _BRING_TO_BOUNDARY_
759#ifndef _BRING_TO_BOUNDARY_
762 return par->
Eval(rphiz, 2);
770 b[0] =
b[1] =
b[2] = 0;
773 if (
id >= mNumberOfParameterizationTPC) {
774 LOG(error) <<
"MagneticWrapperChebyshev::getTPCIntegralCylindrical: Wrong TPCParam segment " <<
id;
775 b[0] =
b[1] =
b[2] = 0;
783 b[0] =
b[1] =
b[2] = 0;
791 b[0] =
b[1] =
b[2] = 0;
794 if (
id >= mNumberOfParameterizationTPCRat) {
795 LOG(error) <<
"MagneticWrapperChebyshev::getTPCRatIntegralCylindrical: Wrong TPCRatParam segment " <<
id;
796 b[0] =
b[1] =
b[2] = 0;
804 b[0] =
b[1] =
b[2] = 0;
811 LOG(error) << R
"(MagneticWrapperChebyshev::loadData: Expected: ")" << expected << R"( <name>", found ")" << buffs.Data() << "\"\nStop\n";
816#ifdef _INC_CREATION_Chebyshev3D_
818void MagneticWrapperChebyshev::loadData(
const char* inpfile)
820 TString strf = inpfile;
821 gSystem->ExpandPathName(strf);
822 FILE*
stream = fopen(strf,
"r");
825 printf(
"Did not find input file %s\n", strf.Data());
834 if (buffs.First(
' ') > 0) {
835 SetName(buffs.Data() + buffs.First(
' ') + 1);
844 int nparSol = buffs.Atoi();
846 for (
int ip = 0; ip < nparSol; ip++) {
849 addParameterSolenoid(cheb);
860 int nparTPCInt = buffs.Atoi();
862 for (
int ip = 0; ip < nparTPCInt; ip++) {
865 addParameterTPCIntegral(cheb);
876 int nparTPCRatInt = buffs.Atoi();
878 for (
int ip = 0; ip < nparTPCRatInt; ip++) {
881 addParameterTPCRatIntegral(cheb);
892 int nparDip = buffs.Atoi();
894 for (
int ip = 0; ip < nparDip; ip++) {
897 addParameterDipole(cheb);
905 if (!buffs.BeginsWith(
"END ") && !buffs.Contains(GetName())) {
906 LOG(error) << R
"(MagneticWrapperChebyshev::loadData: Expected: "END )"
907 << GetName() << R"( ", found ")" << buffs.Data() << "\"\nStop\n";
912 buildTableSolenoid();
914 buildTableTPCIntegral();
915 buildTableTPCRatIntegral();
917 printf(
"Loaded magnetic field \"%s\" from %s\n", GetName(), strf.Data());
920void MagneticWrapperChebyshev::buildTableSolenoid()
922 buildTable(mNumberOfParameterizationSolenoid, mParameterizationSolenoid, mNumberOfDistinctZSegmentsSolenoid,
923 mNumberOfDistinctPSegmentsSolenoid, mNumberOfDistinctRSegmentsSolenoid, mMinZSolenoid, mMaxZSolenoid,
924 &mCoordinatesSegmentsZSolenoid, &mCoordinatesSegmentsPSolenoid, &mCoordinatesSegmentsRSolenoid,
925 &mBeginningOfSegmentsPSolenoid, &mNumberOfSegmentsPSolenoid, &mBeginningOfSegmentsRSolenoid,
926 &mNumberOfRSegmentsSolenoid, &mSegmentIdSolenoid);
929void MagneticWrapperChebyshev::buildTableDipole()
931 buildTable(mNumberOfParameterizationDipole, mParameterizationDipole, mNumberOfDistinctZSegmentsDipole,
932 mNumberOfDistinctYSegmentsDipole, mNumberOfDistinctXSegmentsDipole, mMinDipoleZ, mMaxDipoleZ,
933 &mCoordinatesSegmentsZDipole, &mCoordinatesSegmentsYDipole, &mCoordinatesSegmentsXDipole,
934 &mBeginningOfSegmentsYDipole, &mNumberOfSegmentsYDipole, &mBeginningOfSegmentsXDipole,
935 &mNumberOfSegmentsXDipole, &mSegmentIdDipole);
938void MagneticWrapperChebyshev::buildTableTPCIntegral()
940 buildTable(mNumberOfParameterizationTPC, mParameterizationTPC, mNumberOfDistinctZSegmentsTPC,
941 mNumberOfDistinctPSegmentsTPC, mNumberOfDistinctRSegmentsTPC, mMinZTPC, mMaxZTPC,
942 &mCoordinatesSegmentsZTPC, &mCoordinatesSegmentsPTPC, &mCoordinatesSegmentsRTPC, &mBeginningOfSegmentsPTPC,
943 &mNumberOfSegmentsPTPC, &mBeginningOfSegmentsRTPC, &mNumberOfRSegmentsTPC, &mSegmentIdTPC);
946void MagneticWrapperChebyshev::buildTableTPCRatIntegral()
948 buildTable(mNumberOfParameterizationTPCRat, mParameterizationTPCRat, mNumberOfDistinctZSegmentsTPCRat,
949 mNumberOfDistinctPSegmentsTPCRat, mNumberOfDistinctRSegmentsTPCRat, mMinZTPCRat, mMaxZTPCRat,
950 &mCoordinatesSegmentsZTPCRat, &mCoordinatesSegmentsPTPCRat, &mCoordinatesSegmentsRTPCRat,
951 &mBeginningOfSegmentsPTPCRat, &mNumberOfSegmentsPTPCRat, &mBeginningOfSegmentsRTPCRat,
952 &mNumberOfRSegmentsTPCRat, &mSegmentIdTPCRat);
957#ifdef _INC_CREATION_Chebyshev3D_
959 : mNumberOfParameterizationSolenoid(0),
960 mNumberOfDistinctZSegmentsSolenoid(0),
961 mNumberOfDistinctPSegmentsSolenoid(0),
962 mNumberOfDistinctRSegmentsSolenoid(0),
963 mCoordinatesSegmentsZSolenoid(nullptr),
964 mCoordinatesSegmentsPSolenoid(nullptr),
965 mCoordinatesSegmentsRSolenoid(nullptr),
966 mBeginningOfSegmentsPSolenoid(nullptr),
967 mNumberOfSegmentsPSolenoid(nullptr),
968 mBeginningOfSegmentsRSolenoid(nullptr),
969 mNumberOfRSegmentsSolenoid(nullptr),
970 mSegmentIdSolenoid(nullptr),
972 mMaxZSolenoid(-1.e6),
973 mParameterizationSolenoid(nullptr),
974 mMaxRadiusSolenoid(0),
975 mNumberOfParameterizationTPC(0),
976 mNumberOfDistinctZSegmentsTPC(0),
977 mNumberOfDistinctPSegmentsTPC(0),
978 mNumberOfDistinctRSegmentsTPC(0),
979 mCoordinatesSegmentsZTPC(nullptr),
980 mCoordinatesSegmentsPTPC(nullptr),
981 mCoordinatesSegmentsRTPC(nullptr),
982 mBeginningOfSegmentsPTPC(nullptr),
983 mNumberOfSegmentsPTPC(nullptr),
984 mBeginningOfSegmentsRTPC(nullptr),
985 mNumberOfRSegmentsTPC(nullptr),
986 mSegmentIdTPC(nullptr),
989 mParameterizationTPC(nullptr),
991 mNumberOfParameterizationTPCRat(0),
992 mNumberOfDistinctZSegmentsTPCRat(0),
993 mNumberOfDistinctPSegmentsTPCRat(0),
994 mNumberOfDistinctRSegmentsTPCRat(0),
995 mCoordinatesSegmentsZTPCRat(nullptr),
996 mCoordinatesSegmentsPTPCRat(nullptr),
997 mCoordinatesSegmentsRTPCRat(nullptr),
998 mBeginningOfSegmentsPTPCRat(nullptr),
999 mNumberOfSegmentsPTPCRat(nullptr),
1000 mBeginningOfSegmentsRTPCRat(nullptr),
1001 mNumberOfRSegmentsTPCRat(nullptr),
1002 mSegmentIdTPCRat(nullptr),
1005 mParameterizationTPCRat(nullptr),
1006 mMaxRadiusTPCRat(0),
1007 mNumberOfParameterizationDipole(0),
1008 mNumberOfDistinctZSegmentsDipole(0),
1009 mNumberOfDistinctYSegmentsDipole(0),
1010 mNumberOfDistinctXSegmentsDipole(0),
1011 mCoordinatesSegmentsZDipole(nullptr),
1012 mCoordinatesSegmentsYDipole(nullptr),
1013 mCoordinatesSegmentsXDipole(nullptr),
1014 mBeginningOfSegmentsYDipole(nullptr),
1015 mNumberOfSegmentsYDipole(nullptr),
1016 mBeginningOfSegmentsXDipole(nullptr),
1017 mNumberOfSegmentsXDipole(nullptr),
1018 mSegmentIdDipole(nullptr),
1021 mParameterizationDipole(nullptr)
1026void MagneticWrapperChebyshev::addParameterSolenoid(
const Chebyshev3D*
param)
1028 if (!mParameterizationSolenoid) {
1029 mParameterizationSolenoid =
new TObjArray();
1032 mNumberOfParameterizationSolenoid++;
1033 if (mMaxRadiusSolenoid < param->getBoundMax(0)) {
1034 mMaxRadiusSolenoid =
param->getBoundMax(0);
1038void MagneticWrapperChebyshev::addParameterTPCIntegral(
const Chebyshev3D*
param)
1040 if (!mParameterizationTPC) {
1041 mParameterizationTPC =
new TObjArray();
1044 mNumberOfParameterizationTPC++;
1045 if (mMaxRadiusTPC < param->getBoundMax(0)) {
1046 mMaxRadiusTPC =
param->getBoundMax(0);
1050void MagneticWrapperChebyshev::addParameterTPCRatIntegral(
const Chebyshev3D*
param)
1052 if (!mParameterizationTPCRat) {
1053 mParameterizationTPCRat =
new TObjArray();
1056 mNumberOfParameterizationTPCRat++;
1057 if (mMaxRadiusTPCRat < param->getBoundMax(0)) {
1058 mMaxRadiusTPCRat =
param->getBoundMax(0);
1064 if (!mParameterizationDipole) {
1065 mParameterizationDipole =
new TObjArray();
1068 mNumberOfParameterizationDipole++;
1071void MagneticWrapperChebyshev::resetDipole()
1073 if (mNumberOfParameterizationDipole) {
1074 delete mParameterizationDipole;
1075 mParameterizationDipole =
nullptr;
1076 delete[] mCoordinatesSegmentsZDipole;
1077 mCoordinatesSegmentsZDipole =
nullptr;
1078 delete[] mCoordinatesSegmentsXDipole;
1079 mCoordinatesSegmentsXDipole =
nullptr;
1080 delete[] mCoordinatesSegmentsYDipole;
1081 mCoordinatesSegmentsYDipole =
nullptr;
1082 delete[] mBeginningOfSegmentsYDipole;
1083 mBeginningOfSegmentsYDipole =
nullptr;
1084 delete[] mNumberOfSegmentsYDipole;
1085 mNumberOfSegmentsYDipole =
nullptr;
1086 delete[] mBeginningOfSegmentsXDipole;
1087 mBeginningOfSegmentsXDipole =
nullptr;
1088 delete[] mNumberOfSegmentsXDipole;
1089 mNumberOfSegmentsXDipole =
nullptr;
1090 delete[] mSegmentIdDipole;
1091 mSegmentIdDipole =
nullptr;
1093 mNumberOfParameterizationDipole = mNumberOfDistinctZSegmentsDipole = mNumberOfDistinctXSegmentsDipole =
1094 mNumberOfDistinctYSegmentsDipole = 0;
1099void MagneticWrapperChebyshev::resetSolenoid()
1101 if (mNumberOfParameterizationSolenoid) {
1102 delete mParameterizationSolenoid;
1103 mParameterizationSolenoid =
nullptr;
1104 delete[] mCoordinatesSegmentsZSolenoid;
1105 mCoordinatesSegmentsZSolenoid =
nullptr;
1106 delete[] mCoordinatesSegmentsPSolenoid;
1107 mCoordinatesSegmentsPSolenoid =
nullptr;
1108 delete[] mCoordinatesSegmentsRSolenoid;
1109 mCoordinatesSegmentsRSolenoid =
nullptr;
1110 delete[] mBeginningOfSegmentsPSolenoid;
1111 mBeginningOfSegmentsPSolenoid =
nullptr;
1112 delete[] mNumberOfSegmentsPSolenoid;
1113 mNumberOfSegmentsPSolenoid =
nullptr;
1114 delete[] mBeginningOfSegmentsRSolenoid;
1115 mBeginningOfSegmentsRSolenoid =
nullptr;
1116 delete[] mNumberOfRSegmentsSolenoid;
1117 mNumberOfRSegmentsSolenoid =
nullptr;
1118 delete[] mSegmentIdSolenoid;
1119 mSegmentIdSolenoid =
nullptr;
1121 mNumberOfParameterizationSolenoid = mNumberOfDistinctZSegmentsSolenoid = mNumberOfDistinctPSegmentsSolenoid =
1122 mNumberOfDistinctRSegmentsSolenoid = 0;
1123 mMinZSolenoid = 1e6;
1124 mMaxZSolenoid = -1e6;
1125 mMaxRadiusSolenoid = 0;
1128void MagneticWrapperChebyshev::resetTPCIntegral()
1130 if (mNumberOfParameterizationTPC) {
1131 delete mParameterizationTPC;
1132 mParameterizationTPC =
nullptr;
1133 delete[] mCoordinatesSegmentsZTPC;
1134 mCoordinatesSegmentsZTPC =
nullptr;
1135 delete[] mCoordinatesSegmentsPTPC;
1136 mCoordinatesSegmentsPTPC =
nullptr;
1137 delete[] mCoordinatesSegmentsRTPC;
1138 mCoordinatesSegmentsRTPC =
nullptr;
1139 delete[] mBeginningOfSegmentsPTPC;
1140 mBeginningOfSegmentsPTPC =
nullptr;
1141 delete[] mNumberOfSegmentsPTPC;
1142 mNumberOfSegmentsPTPC =
nullptr;
1143 delete[] mBeginningOfSegmentsRTPC;
1144 mBeginningOfSegmentsRTPC =
nullptr;
1145 delete[] mNumberOfRSegmentsTPC;
1146 mNumberOfRSegmentsTPC =
nullptr;
1147 delete[] mSegmentIdTPC;
1148 mSegmentIdTPC =
nullptr;
1150 mNumberOfParameterizationTPC = mNumberOfDistinctZSegmentsTPC = mNumberOfDistinctPSegmentsTPC =
1151 mNumberOfDistinctRSegmentsTPC = 0;
1157void MagneticWrapperChebyshev::resetTPCRatIntegral()
1159 if (mNumberOfParameterizationTPCRat) {
1160 delete mParameterizationTPCRat;
1161 mParameterizationTPCRat =
nullptr;
1162 delete[] mCoordinatesSegmentsZTPCRat;
1163 mCoordinatesSegmentsZTPCRat =
nullptr;
1164 delete[] mCoordinatesSegmentsPTPCRat;
1165 mCoordinatesSegmentsPTPCRat =
nullptr;
1166 delete[] mCoordinatesSegmentsRTPCRat;
1167 mCoordinatesSegmentsRTPCRat =
nullptr;
1168 delete[] mBeginningOfSegmentsPTPCRat;
1169 mBeginningOfSegmentsPTPCRat =
nullptr;
1170 delete[] mNumberOfSegmentsPTPCRat;
1171 mNumberOfSegmentsPTPCRat =
nullptr;
1172 delete[] mBeginningOfSegmentsRTPCRat;
1173 mBeginningOfSegmentsRTPCRat =
nullptr;
1174 delete[] mNumberOfRSegmentsTPCRat;
1175 mNumberOfRSegmentsTPCRat =
nullptr;
1176 delete[] mSegmentIdTPCRat;
1177 mSegmentIdTPCRat =
nullptr;
1179 mNumberOfParameterizationTPCRat = mNumberOfDistinctZSegmentsTPCRat = mNumberOfDistinctPSegmentsTPCRat =
1180 mNumberOfDistinctRSegmentsTPCRat = 0;
1183 mMaxRadiusTPCRat = 0;
1186void MagneticWrapperChebyshev::buildTable(Int_t npar, TObjArray* parArr, Int_t& nZSeg, Int_t& nYSeg, Int_t& nXSeg,
1188 Int_t** begSegY, Int_t** nSegY, Int_t** begSegX, Int_t** nSegX, Int_t** segID)
1193 TArrayF segYArr, segXArr;
1194 TArrayI begSegYDipArr, begSegXDipArr;
1195 TArrayI nSegYDipArr, nSegXDipArr;
1197 float *tmpSegZ, *tmpSegY, *tmpSegX;
1200 nZSeg = segmentDimension(&tmpSegZ, parArr, npar, 2, 1, -1, 1, -1, 1, -1) - 1;
1205 begSegYDipArr.Set(nZSeg);
1206 nSegYDipArr.Set(nZSeg);
1208 for (
int iz = 0;
iz < nZSeg;
iz++) {
1209 LOGF(
debug,
"\nZSegment#%d %+e : %+e\n", iz, tmpSegZ[iz], tmpSegZ[iz + 1]);
1210 int ny = segmentDimension(&tmpSegY, parArr, npar, 1, 1, -1, 1, -1, tmpSegZ[iz], tmpSegZ[iz + 1]) - 1;
1211 segYArr.Set(ny + nYSeg);
1212 for (
int iy = 0;
iy < ny;
iy++) {
1213 segYArr[nYSeg +
iy] = tmpSegY[
iy];
1215 begSegYDipArr[
iz] = nYSeg;
1216 nSegYDipArr[
iz] = ny;
1217 LOGF(
debug,
" Found %d YSegments, to start from %d\n", ny, begSegYDipArr[iz]);
1220 begSegXDipArr.Set(nYSeg + ny);
1221 nSegXDipArr.Set(nYSeg + ny);
1222 xyz[2] = (tmpSegZ[
iz] + tmpSegZ[
iz + 1]) / 2.;
1224 for (
int iy = 0;
iy < ny;
iy++) {
1225 int isg = nYSeg +
iy;
1226 LOGF(
debug,
"\n YSegment#%d %+e : %+e\n", iy, tmpSegY[iy], tmpSegY[iy + 1]);
1228 segmentDimension(&tmpSegX, parArr, npar, 0, 1, -1, tmpSegY[iy], tmpSegY[iy + 1], tmpSegZ[iz], tmpSegZ[iz + 1]) -
1231 segXArr.Set(nx + nXSeg);
1232 for (
int ix = 0;
ix < nx;
ix++) {
1233 segXArr[nXSeg +
ix] = tmpSegX[
ix];
1235 begSegXDipArr[isg] = nXSeg;
1236 nSegXDipArr[isg] = nx;
1237 LOGF(
debug,
" Found %d XSegments, to start from %d\n", nx, begSegXDipArr[isg]);
1239 segIDArr.Set(nXSeg + nx);
1242 xyz[1] = (tmpSegY[
iy] + tmpSegY[
iy + 1]) / 2.;
1244 for (
int ix = 0;
ix < nx;
ix++) {
1245 xyz[0] = (tmpSegX[
ix] + tmpSegX[
ix + 1]) / 2.;
1246 for (
int ipar = 0; ipar < npar; ipar++) {
1251 segIDArr[nXSeg +
ix] = ipar;
1264 maxZ = tmpSegZ[nZSeg];
1266 for (
int i = nZSeg;
i--;) {
1267 (*segZ)[
i] = tmpSegZ[
i];
1273 (*begSegY) =
new Int_t[nZSeg];
1274 (*nSegY) =
new Int_t[nZSeg];
1275 (*begSegX) =
new Int_t[nYSeg];
1276 (*nSegX) =
new Int_t[nYSeg];
1277 (*segID) =
new Int_t[nXSeg];
1279 for (
int i = nYSeg;
i--;) {
1280 (*segY)[
i] = segYArr[
i];
1282 for (
int i = nXSeg;
i--;) {
1283 (*segX)[
i] = segXArr[
i];
1285 for (
int i = nZSeg;
i--;) {
1286 (*begSegY)[
i] = begSegYDipArr[
i];
1287 (*nSegY)[
i] = nSegYDipArr[
i];
1289 for (
int i = nYSeg;
i--;) {
1290 (*begSegX)[
i] = begSegXDipArr[
i];
1291 (*nSegX)[
i] = nSegXDipArr[
i];
1293 for (
int i = nXSeg;
i--;) {
1294 (*segID)[
i] = segIDArr[
i];
1391void MagneticWrapperChebyshev::saveData(
const char* outfile)
const
1393 TString strf = outfile;
1394 gSystem->ExpandPathName(strf);
1395 FILE*
stream = fopen(strf,
"w+");
1398 fprintf(
stream,
"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n", GetName());
1399 fprintf(
stream,
"START SOLENOID\n#Number of pieces\n%d\n", mNumberOfParameterizationSolenoid);
1400 for (
int ip = 0; ip < mNumberOfParameterizationSolenoid; ip++) {
1403 fprintf(
stream,
"#\nEND SOLENOID\n");
1406 fprintf(
stream,
"START TPCINT\n#Number of pieces\n%d\n", mNumberOfParameterizationTPC);
1407 for (
int ip = 0; ip < mNumberOfParameterizationTPC; ip++) {
1410 fprintf(
stream,
"#\nEND TPCINT\n");
1413 fprintf(
stream,
"START TPCRatINT\n#Number of pieces\n%d\n", mNumberOfParameterizationTPCRat);
1414 for (
int ip = 0; ip < mNumberOfParameterizationTPCRat; ip++) {
1417 fprintf(
stream,
"#\nEND TPCRatINT\n");
1420 fprintf(
stream,
"START DIPOLE\n#Number of pieces\n%d\n", mNumberOfParameterizationDipole);
1421 for (
int ip = 0; ip < mNumberOfParameterizationDipole; ip++) {
1424 fprintf(
stream,
"#\nEND DIPOLE\n");
1426 fprintf(
stream,
"#\nEND %s\n", GetName());
1431Int_t MagneticWrapperChebyshev::segmentDimension(
float**
seg,
const TObjArray* par,
int npar,
int dim,
float xmn,
1432 float xmx,
float ymn,
float ymx,
float zmn,
float zmx)
1434 auto* tmpC =
new float[2 * npar];
1435 auto* tmpInd =
new int[2 * npar];
1437 for (
int ip = 0; ip < npar; ip++) {
1453 TMath::Sort(nseg0, tmpC, tmpInd, kFALSE);
1457 for (
int ip = 0; ip < nseg0; ip++) {
1458 if (TMath::Abs(cprev - tmpC[tmpInd[ip]]) > 1e-4) {
1459 cprev = tmpC[tmpInd[ip]];
1466 *
seg =
new float[nseg];
1468 for (
int ip = 0; ip < nseg0; ip++) {
1469 if (tmpInd[ip] >= 0) {
1470 (*seg)[nseg++] = tmpC[tmpInd[ip]];
o2::mch::mapping::CathodeSegmentation seg
void checkExpected(char const *expected, TString &buffs)
ClassImp(MagneticWrapperChebyshev)
void fieldCylindricalSolenoid(const Double_t *rphiz, Double_t *b) const
o2::math_utils::Chebyshev3D * getParameterDipole(Int_t ipar) const
MagneticWrapperChebyshev & operator=(const MagneticWrapperChebyshev &rhs)
Assignment operator.
void Print(Option_t *="") const override
Prints info.
MagneticWrapperChebyshev()
Default constructor.
void copyFrom(const MagneticWrapperChebyshev &src)
Copy method.
Float_t getMinZTPCIntegral() const
o2::math_utils::Chebyshev3D * getParameterTPCRatIntegral(Int_t ipar) const
Double_t getBz(const Double_t *xyz) const
Float_t getMinZTPCRatIntegral() const
Float_t getMaxRTPCIntegral() const
Float_t getMaxZTPCIntegral() const
void Clear(const Option_t *="") override
Clears all dynamic parts.
Double_t fieldCylindricalSolenoidBz(const Double_t *rphiz) const
Float_t getMaxZTPCRatIntegral() const
Int_t findDipoleSegment(const Double_t *xyz) const
Finds the segment containing point xyz. If it is outside it finds the closest segment.
Float_t getMaxRTPCRatIntegral() const
void getTPCIntegralCylindrical(const Double_t *rphiz, Double_t *b) const
static void cylindricalToCartesianCylB(const Double_t *rphiz, const Double_t *brphiz, Double_t *bxyz)
Converts field in cylindrical coordinates to cartesian system, point is in cyl.system.
o2::math_utils::Chebyshev3D * getParameterSolenoid(Int_t ipar) const
void getTPCRatIntegral(const Double_t *xyz, Double_t *b) const
Int_t findTPCRatSegment(const Double_t *xyz) const
Finds the segment containing point xyz. If it is outside it finds the closest segment.
virtual void Field(const Double_t *xyz, Double_t *b) const
void getTPCIntegral(const Double_t *xyz, Double_t *b) const
Int_t findTPCSegment(const Double_t *xyz) const
Finds the segment containing point xyz. If it is outside it finds the closest segment.
o2::math_utils::Chebyshev3D * getParameterTPCIntegral(Int_t ipar) const
Int_t findSolenoidSegment(const Double_t *xyz) const
Finds the segment containing point xyz. If it is outside it finds the closest segment.
static void cartesianToCylindrical(const Double_t *xyz, Double_t *rphiz)
void getTPCRatIntegralCylindrical(const Double_t *rphiz, Double_t *b) const
static void readLine(TString &str, FILE *stream)
Reads single line from the stream, skipping empty and commented lines. EOF is not expected.
Bool_t isInside(const Float_t *par) const
Checks if the point is inside of the fitted box.
Float_t getBoundMin(int i) const
void Print(const Option_t *opt="") const override
void Eval(const Float_t *par, Float_t *res)
Evaluates Chebyshev parameterization for 3d->DimOut function.
Float_t getBoundMax(int i) const
GLboolean GLboolean GLboolean b
GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat maxZ
std::tuple< TFile *, TTreeReader * > loadData(const std::string inFile)
std::map< std::string, ID > expected
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"