258 Double_t XX, YY, ZZ, X, Y, Z, FX, FY, FZ, pfScale;
259 Float_t fHemiX = 1., fHemiY = 1., fHemiZ = 1;
261 X = Point[0] -
fPosX;
262 Y = Point[1] -
fPosY;
263 Z = Point[2] -
fPosZ;
271 PALC0(XX * 0.01, YY * 0.01, ZZ * 0.01, &FX, &FY,
281 if (X < 0.) fHemiX = -1.;
282 if (Y < 0.) fHemiY = -1.;
284 FX = FX * fHemiX * fHemiY;
286 if ((fType == 3) && (Z < 0.))
289 FZ = FZ * fHemiY * fHemiZ;
333 const char* BsFortranAsciiFileName3)
338 TString fileNam1 = BsFortranAsciiFileName1;
339 ifstream fBsFortranAscii1(fileNam1);
340 if (!fBsFortranAscii1.is_open()) {
341 cerr <<
"ERROR: File " << BsFortranAsciiFileName1 <<
" not opened!" << endl;
346 fX =
new TArrayF(
LL1);
347 UX1 =
fX->GetArray();
348 for (i = 0; i <
LL1; i++) {
349 fBsFortranAscii1 >> val;
355 for (i = 0; i <
NDIM; i++) {
356 fBsFortranAscii1 >> val;
357 fBsBx->AddAt(val, i);
360 fBsFortranAscii1.close();
363 TString fileNam2 = BsFortranAsciiFileName2;
364 ifstream fBsFortranAscii2(fileNam2);
365 if (!fBsFortranAscii2.is_open()) {
366 cerr <<
"ERROR: File " << BsFortranAsciiFileName2 <<
" not opened!" << endl;
370 fY =
new TArrayF(
LL2);
371 UX2 =
fY->GetArray();
372 for (i = 0; i <
LL2; i++) {
373 fBsFortranAscii2 >> val;
378 for (i = 0; i <
NDIM; i++) {
379 fBsFortranAscii2 >> val;
380 fBsBy->AddAt(val, i);
382 fBsFortranAscii2.close();
385 TString fileNam3 = BsFortranAsciiFileName3;
386 ifstream fBsFortranAscii3(fileNam3);
387 if (!fBsFortranAscii3.is_open()) {
388 cerr <<
"ERROR: File " << BsFortranAsciiFileName3 <<
" not opened!" << endl;
392 fZ =
new TArrayF(
LL3);
393 UX3 =
fZ->GetArray();
394 for (i = 0; i <
LL3; i++) {
395 fBsFortranAscii3 >> val;
400 for (i = 0; i <
NDIM; i++) {
401 fBsFortranAscii3 >> val;
402 fBsBz->AddAt(val, i);
404 fBsFortranAscii3.close();
408void CbmBsField::PALC0(Double_t X, Double_t Y, Double_t Z, Double_t* BX, Double_t* BY, Double_t* BZ)
410 Double_t UX[4], UY[4], UZ[4], X0, X1, X2, X3, X4, X5, X6, X7, Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7, VX0, VX1, VX2, VX3, VX4,
412 Long64_t INT1[4], INT2[4], INT3[4], KK, K1, K2, K3, KK1, KK2, KK3, NN0, I1, JJ0, I2, JJ1, I3, JJ2;
413 Double_t EPS = 1.0e-7, XRZYX, YRZYX, ZRZYX, XRZY, YRZY, ZRZY, XRZ, YRZ, ZRZ, SS3, SS2, SS1;
414 Int_t izero4 = 3, izero5 = 4;
415 if (X < (
UX1[izero4] - EPS))
goto m100;
416 for (KK = izero5; KK <
LL1; KK++) {
417 if (X <=
UX1[KK])
goto m52;
422 if (Y < (
UX2[izero4] - EPS))
goto m100;
423 for (KK = izero5; KK <
LL2; KK++) {
424 if (Y <=
UX2[KK])
goto m54;
429 if (Z < (
UX3[izero4] - EPS))
goto m100;
431 for (KK = izero5; KK <
LL3; KK++) {
432 if (Z <=
UX3[KK])
goto m56;
445 UX[1 - 1] =
SPL0(X, X0, X1, X2, X3, X4);
446 UX[2 - 1] =
SPL0(X, X1, X2, X3, X4, X5);
447 UX[3 - 1] =
SPL0(X, X2, X3, X4, X5, X6);
448 UX[4 - 1] =
SPL0(X, X3, X4, X5, X6, X7);
458 UY[1 - 1] =
SPL0(Y, Y0, Y1, Y2, Y3, Y4);
459 UY[2 - 1] =
SPL0(Y, Y1, Y2, Y3, Y4, Y5);
460 UY[3 - 1] =
SPL0(Y, Y2, Y3, Y4, Y5, Y6);
461 UY[4 - 1] =
SPL0(Y, Y3, Y4, Y5, Y6, Y7);
471 UZ[1 - 1] =
SPL0(Z, VX0, VX1, VX2, VX3, VX4);
472 UZ[2 - 1] =
SPL0(Z, VX1, VX2, VX3, VX4, VX5);
473 UZ[3 - 1] =
SPL0(Z, VX2, VX3, VX4, VX5, VX6);
474 UZ[4 - 1] =
SPL0(Z, VX3, VX4, VX5, VX6, VX7);
477 if (KK2 < 0) KK2 = 0;
479 if (KK3 < 0) KK3 = 0;
480 NN0 = KK1 +
II1 * (KK2 +
II2 * (KK3));
482 INT1[2 - 1] = NN0 + 1;
483 INT1[3 - 1] = NN0 + 2;
484 INT1[4 - 1] = NN0 + 3;
487 INT2[2 - 1] = (1) *
II1;
488 INT2[3 - 1] = (2) *
II1;
489 INT2[4 - 1] = (3) *
II1;
493 INT3[2 - 1] = (1) *
II1 *
II2;
494 INT3[3 - 1] = (2) *
II1 *
II2;
495 INT3[4 - 1] = (3) *
II1 *
II2;
501 for (I1 = 1; I1 <= 4; I1++) {
507 for (I2 = 1; I2 <= 4; I2++) {
508 JJ1 = JJ0 + INT2[I2 - 1];
512 for (I3 = 1; I3 <= 4; I3++) {
513 JJ2 = JJ1 + INT3[I3 - 1];
515 XRZ = XRZ +
F0[JJ2] * SS3;
516 YRZ = YRZ +
G0[JJ2] * SS3;
517 ZRZ = ZRZ +
U0[JJ2] * SS3;
520 XRZY = XRZY + XRZ * SS2;
521 YRZY = YRZY + YRZ * SS2;
522 ZRZY = ZRZY + ZRZ * SS2;
525 XRZYX = XRZYX + XRZY * SS1;
526 YRZYX = YRZYX + YRZY * SS1;
527 ZRZYX = ZRZYX + ZRZY * SS1;
545 Double_t W0, C0,
TT, RR, TPL, W1, W2, W3, value_SPL0;
546 if (T < X0)
goto n100;
547 if (T < X1)
goto n200;
548 if (T < X2)
goto n300;
549 if (T < X3)
goto n400;
550 if (T > X4)
goto n100;
552 W0 = (X1 - X0) * (X2 - X0) * (X3 - X0) * (X4 - X0);
555 TPL = RR * (
TT *
TT *
TT);
556 W1 = (X0 - X1) * (X2 - X1) * (X3 - X1) * (X4 - X1);
559 TPL = RR * (
TT *
TT *
TT) + TPL;
560 W2 = (X0 - X2) * (X1 - X2) * (X3 - X2) * (X4 - X2);
563 TPL = RR * (
TT *
TT *
TT) + TPL;
564 W3 = (X0 - X3) * (X1 - X3) * (X2 - X3) * (X4 - X3);
567 value_SPL0 = RR * (
TT *
TT *
TT) + TPL;
571 W0 = (X1 - X0) * (X2 - X0) * (X3 - X0) * (X4 - X0);
574 value_SPL0 = RR * (
TT *
TT *
TT);
578 W0 = (X1 - X0) * (X2 - X0) * (X3 - X0) * (X4 - X0);
581 TPL = RR * (
TT *
TT *
TT);
582 W1 = (X0 - X1) * (X2 - X1) * (X3 - X1) * (X4 - X1);
585 value_SPL0 = RR * (
TT *
TT *
TT) + TPL;
589 W0 = (X1 - X0) * (X2 - X0) * (X3 - X0) * (X4 - X0);
592 TPL = RR * (
TT *
TT *
TT);
593 W1 = (X0 - X1) * (X2 - X1) * (X3 - X1) * (X4 - X1);
596 TPL = RR * (
TT *
TT *
TT) + TPL;
597 W2 = (X0 - X2) * (X1 - X2) * (X3 - X2) * (X4 - X2);
600 value_SPL0 = RR * (
TT *
TT *
TT) + TPL;