36 #include "TLinearFitter.h"
38 #include "TObjString.h"
40 #include "TTreeStream.h"
41 #include "AliTrackPointArray.h"
56 Int_t last= fgFormulasName->GetEntries();
57 fgFormulasName->AddLast(
new TObjString(name));
58 fgFormulas[last]=formula;
103 for (Int_t i=0;i<entries;i++){
153 fCoordSystem(coordSystem),
168 if (fx)
fNameX=
new TString(fx);
169 if (fy)
fNameY=
new TString(fy);
170 if (fz)
fNameZ=
new TString(fz);
182 fParam(trafo.fParam),
183 fSigma(trafo.fSigma),
184 fSigmaMax(trafo.fSigma),
185 fSigma2Time(trafo.fSigma2Time),
187 fIsActive(trafo.fIsActive),
248 TBits * bits =
new TBits(72);
249 for (Int_t i=0; i<72;i++){
250 if (i%36<18 && aside) (*bits)[i]=kTRUE;
251 if (i%36<18 && (!aside)) (*bits)[i]=kFALSE;
252 if (i%36>=18 && aside) (*bits)[i]=kFALSE;
253 if (i%36>=18 && (!aside)) (*bits)[i]=kTRUE;
261 TBits * bits =
new TBits(72);
262 for (Int_t i=0; i<72;i++){
316 Double_t xyz[5]={x,y,z, param,volID};
317 Double_t alpha = TMath::ATan2(y,x);
318 Double_t ca = TMath::Cos(alpha);
319 Double_t sa = TMath::Sin(alpha);
323 Double_t dxdydz[3]={0,0,0};
328 if (coord==0)
return dxdydz[0];
329 if (coord==1)
return dxdydz[1];
330 if (coord==2)
return dxdydz[2];
331 if (coord==3)
return dxdydz[0]*ca+dxdydz[1]*sa;
332 if (coord==4)
return -dxdydz[0]*sa+dxdydz[1]*ca;
333 if (coord==5)
return dxdydz[2];
337 if (coord==2||coord==5) {
341 Double_t rrphiz[3]={0,0,0};
344 alpha = TMath::ATan2(y,x);
345 ca = TMath::Cos(alpha);
346 sa = TMath::Sin(alpha);
347 if (coord==0)
return ca*rrphiz[0]-sa*rrphiz[1];
348 if (coord==1)
return sa*rrphiz[0]+ca*rrphiz[1];
349 if (coord==3)
return rrphiz[0];
350 if (coord==4)
return rrphiz[1];
366 Double_t rInner=78.8;
367 Double_t rOuter=258.0;
368 Double_t deltaR = rOuter-rInner;
369 Double_t radius = (TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1])-rInner)*2./deltaR;
370 Double_t driftM = (0.5 - TMath::Abs(xyz[2]/250.))*2.0;
371 Double_t delta = TMath::Power(radius,param[0])*TMath::Power(driftM,param[1]);
381 Double_t driftP = TMath::Power(1. - TMath::Abs(xyz[2]/250.), param[0]);
382 Int_t sector = TMath::Nint(xyz[4]);
383 Double_t deltaZ = (sector%36<18) ? -driftP : driftP;
384 return deltaZ*xyz[3];
394 Int_t sector = TMath::Nint(xyz[4]);
395 Double_t sign = (sector%36<18) ? -1 : 1;
405 Double_t driftP = TMath::Power(1. - TMath::Abs(xyz[2]/250.), param[0]);
406 Double_t gy = xyz[1]/250.;
407 Int_t sector = TMath::Nint(xyz[4]);
408 Double_t deltaZ = (sector%36<18) ? -driftP : driftP;
409 return deltaZ*xyz[3]*gy;
420 Double_t alpha = TMath::ATan2(xyz[1],xyz[0]);
421 Double_t sector = TMath::Nint(9*alpha/TMath::Pi()-0.5);
422 Double_t localAlpha = (alpha-(sector+0.5)*TMath::Pi()/9.);
423 Double_t radius = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1])/250.;
425 Double_t deltaAlpha = radius*TMath::Power(2.*9.*localAlpha/TMath::Pi(),param[0]);
426 return deltaAlpha*xyz[3];
436 Double_t alpha = TMath::ATan2(xyz[1],xyz[0]);
437 Double_t sector = TMath::Nint(9*alpha/TMath::Pi()-0.5);
438 Double_t localAlpha = (alpha-(sector+0.5)*TMath::Pi()/9.);
439 Double_t radius = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]);
440 Double_t deltaAlpha = TMath::Pi()/18.-TMath::Abs(localAlpha);
441 Double_t distEdge = (deltaAlpha*radius);
442 Double_t factor = 1./(1.+(distEdge-param[0])/param[1]);
443 return factor*xyz[3]*((localAlpha>0)? -1.:1.);
452 Double_t rInner=78.8;
453 Double_t rFirst=85.2;
454 Double_t deltaR = rFirst-rInner;
455 Double_t ndistR = (TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1])-rInner)/deltaR;
456 Double_t driftM = (0.5 - TMath::Abs(xyz[2]/250.))*2.;
457 Double_t value = TMath::Power(driftM,param[0])/ndistR;
466 Double_t rLast=245.8;
467 Double_t rOuter=258.0;
468 Double_t deltaR = rOuter-rLast;
469 Double_t ndistR = (rOuter-TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]))/deltaR;
470 Double_t driftM = (0.5 - TMath::Abs(xyz[2]/250.))*2.;
471 Double_t value = TMath::Power(driftM,param[0])/ndistR;
484 Double_t rInner=78.8;
485 Double_t rFirst=85.2;
486 Double_t rLast=245.8;
487 Double_t rOuter=258.0;
489 Double_t radius = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]);
491 Double_t deltaFC = (param[0]<0.5)? TMath::Abs(radius-rFirst) : TMath::Abs(radius-rLast);
492 deltaFC/=(rOuter-rInner);
493 Double_t scalingFC = 1./(1.+deltaFC/(param[1]));
495 Double_t drift = 1.-TMath::Abs(xyz[2]/250.);
496 Double_t scalingROC = (1.-1./(1.+drift/param[2]));
498 return xyz[3]*scalingFC*scalingROC;
510 Double_t rInner=78.8;
511 Double_t rFirst=85.2;
512 Double_t rLast =245.8;
513 Double_t rOuter=258.0;
515 Double_t radius = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]);
517 Double_t deltaFC = (param[0]<0.5)? TMath::Abs(radius-rFirst) : TMath::Abs(radius-rLast);
518 deltaFC/=(rOuter-rInner);
519 Double_t scalingFC = 1./(1.+deltaFC/(param[1]));
521 Double_t drift = 1.-TMath::Abs(xyz[2]/250.);
522 Double_t scalingCE = 1/(1.+(1.-drift)/param[2]);
524 return xyz[3]*scalingFC*scalingCE;
547 Int_t sector = TMath::Nint(xyz[4]);
548 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
549 Double_t ca = TMath::Cos(alpha);
551 const Double_t xIROCOROC = 133.4;
552 Double_t factor = xyz[3];
553 if (param[0]>0) factor*=TMath::Cos(alpha*param[0]);
554 if (param[1]>0) factor*=TMath::Sin(alpha*param[1]);
555 if (param[2]>0.5 && TMath::Sqrt(xyz[1]*xyz[1]+xyz[0]*xyz[0])>xIROCOROC) factor*=-1;
568 Int_t sector = TMath::Nint(xyz[4]);
569 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
571 Double_t sa = TMath::Sin(alpha);
572 const Double_t xIROCOROC = 133.4;
573 Double_t factor = xyz[3];
574 if (param[0]>0) factor*=TMath::Cos(alpha*param[0]);
575 if (param[1]>0) factor*=TMath::Sin(alpha*param[1]);
576 if (param[2]>0.5 && TMath::Sqrt(xyz[1]*xyz[1]+xyz[0]*xyz[0])>xIROCOROC) factor*=-1;
589 Int_t sector = TMath::Nint(xyz[4]);
590 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
592 Double_t sa = TMath::Sin(alpha);
593 const Double_t xIROCOROC = 133.4;
594 Double_t factor = xyz[3];
595 if (param[0]>0) factor*=TMath::Cos(alpha*param[0]);
596 if (param[1]>0) factor*=TMath::Sin(alpha*param[1]);
597 if (param[2]>0.5 && TMath::Sqrt(xyz[1]*xyz[1]+xyz[0]*xyz[0])>xIROCOROC) factor*=-1;
610 Int_t sector = TMath::Nint(xyz[4]);
611 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
612 Double_t ca = TMath::Cos(alpha);
614 const Double_t xIROCOROC = 133.4;
615 Double_t factor = xyz[3];
616 if (param[0]>0) factor*=TMath::Cos(alpha*param[0]);
617 if (param[1]>0) factor*=TMath::Sin(alpha*param[1]);
618 if (param[2]>0.5 && TMath::Sqrt(xyz[1]*xyz[1]+xyz[0]*xyz[0])>xIROCOROC) factor*=-1;
632 Int_t sector = TMath::Nint(xyz[4]);
633 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
634 Double_t ca = TMath::Cos(alpha);
635 Double_t sa = TMath::Sin(alpha);
636 Double_t lx = xyz[0]*ca + xyz[1]*sa;
637 Double_t ly = -xyz[0]*sa + xyz[1]*ca;
639 const Double_t xIROCOROC = 133.4;
641 Double_t rot = xyz[3]*0.001;
642 if (param[0]>0) rot*=TMath::Cos(alpha*param[0]);
643 if (param[1]>0) rot*=TMath::Sin(alpha*param[1]);
644 if (param[2]>0.5 && lx>0) rot*=-1;
646 Double_t dlxR = - ly*rot;
647 Double_t dlyR = lx*rot;
648 Double_t dgxR = dlxR*ca - dlyR*sa;
662 Int_t sector = TMath::Nint(xyz[4]);
663 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
664 Double_t ca = TMath::Cos(alpha);
665 Double_t sa = TMath::Sin(alpha);
666 Double_t lx = xyz[0]*ca + xyz[1]*sa;
667 Double_t ly = -xyz[0]*sa + xyz[1]*ca;
669 const Double_t xIROCOROC = 133.4;
671 Double_t rot = xyz[3]*0.001;
672 if (param[0]>0) rot*=TMath::Cos(alpha*param[0]);
673 if (param[1]>0) rot*=TMath::Sin(alpha*param[1]);
674 if (param[2]>0.5 && lx>0) rot*=-1;
675 Double_t dlxR = - ly*rot;
676 Double_t dlyR = lx*rot;
678 Double_t dgyR = dlxR*sa + dlyR*ca;
690 Int_t sector = TMath::Nint(xyz[4]);
691 Double_t signZ = (sector%36<18) ? 1: -1;
692 if (sector<36)
return 0;
694 const Double_t radiusLong = 198.1;
696 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
697 Double_t ca = TMath::Cos(alpha);
698 Double_t sa = TMath::Sin(alpha);
699 Double_t lx = xyz[0]*ca + xyz[1]*sa;
700 Double_t sign = (lx<radiusLong) ? 1:-1;
701 return xyz[3]*sign*signZ;
710 Int_t sector = TMath::Nint(xyz[4]);
711 Double_t delta = (sector%36<18) ? 1: -1;
712 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
713 Double_t ca = TMath::Cos(alpha);
714 Double_t sa = TMath::Sin(alpha);
715 Double_t lx = xyz[0]*ca + xyz[1]*sa;
717 const Double_t xIROCOROC = 133.4;
718 if (param[0]>0) delta *= TMath::Cos(param[0]*alpha);
719 if (param[1]>0) delta *= TMath::Sin(param[1]*alpha);
720 if (param[2]>0.5 && lx >xIROCOROC) delta *=-1;
734 const Double_t rFirst=85.2;
735 const Double_t rLast =245.8;
736 const Double_t xIROCOROC = 133.4;
738 Int_t sector = TMath::Nint(xyz[4]);
739 Double_t alpha = TMath::Pi()*(sector+0.5)/9;
740 Double_t ca = TMath::Cos(alpha);
741 Double_t sa = TMath::Sin(alpha);
742 Double_t lx = xyz[0]*ca + xyz[1]*sa;
743 Double_t deltaR = 2.0*(lx-xIROCOROC)/(rLast-rFirst);
744 if (param[0]>0) deltaR *= TMath::Cos(param[0]*alpha);
745 if (param[1]>0) deltaR *= TMath::Sin(param[1]*alpha);
746 if (param[2]>0.5 && lx >xIROCOROC) deltaR *=-1;
747 return deltaR*xyz[3];