2 #include "TTreeStream.h"
4 #include "AliExternalTrackParam.h"
8 // Test Progaram for AliRieman class
11 // 1. Load compiled macros
12 // 2. Run function TestRieman()
13 // 3. Open file and tree with results
14 // 4. Check results - residuals - pulls
15 // See example bellow:
21 TFile f("TestRieman.root");
22 TTree * tree = (TTree*)f.Get("Test");
23 tree->Draw("Rieman.fZ-RiemanRef.fZ:Rieman.fX")
25 AliComparisonDraw comp;
27 comp->DrawXY("Par0.fP[2]","(Par0.fP[4]-ParR.fP[4])/sqrt(ParR.fC[14])","1","1",5,-0.1,0.1,-5.1,5.1);
34 void GetProlongation(Double_t xk, Double_t &x, Double_t *param, Double_t &y, Double_t &z){
36 Double_t f1=param[2], f2=f1 + param[4]*dx;
37 Double_t r1=TMath::Sqrt((1.-f1)*(1.+f1)), r2=TMath::Sqrt((1.-f2)*(1.+f2));
38 y = param[0] + dx*(f1+f2)/(r1+r2);
39 //z = param[1] + dx*(r2 + f2*(f1+f2)/(r1+r2))*param[3];
40 //z = param[1] + dx*(f1+f2)/(f1*r2 + f2*r1)*param[3];
41 Double_t dy = y-param[0];
42 Double_t dfi = 2*TMath::ASin(0.5*TMath::Sqrt(dx*dx+dy*dy)*TMath::Abs(param[4]));
43 Double_t sign = (dx>0) ? 1:-1;
44 z = param[1] + sign*param[3]*dfi/param[4];
49 const Double_t kB2C=0.299792458e-3;
50 TTreeSRedirector cstream("TestRieman.root");
51 AliRieman rieman(1000);
52 AliRieman riemanR(1000);
53 AliRieman riemanRef(1000);
55 Double_t param[5], paramIdeal[5], paramR[5];
57 for (Int_t i=0; i<10000; i++){
61 Double_t r = 600*(1+0.5*(gRandom->Rndm()-0.5));
62 Double_t kz = 2*(gRandom->Rndm()-0.5);
63 Double_t snp = (gRandom->Rndm()-0.5)*0.3;
64 Double_t sy =0.1, sz =0.1;
65 Double_t sign = (gRandom->Rndm()>0.5? -1:1);
68 Double_t y0 = snp*x0+10*(gRandom->Rndm()-0.5);
69 Double_t z0 = kz*x0+20*(gRandom->Rndm()-0.5);
75 Double_t covar[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
76 Double_t covarI[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
77 Double_t covarR[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
78 AliExternalTrackParam trackParam(x0, 0, param, covar);
84 // for (Float_t dx =0; dx<90; dx+=5){trackParam.PropagateTo(dx,1./kB2C);}
85 for (Int_t ipoint =0; ipoint<npoints; ipoint++){
86 Double_t x = 90 + ipoint;
88 GetProlongation(x, x0, param,y,z);
89 // trackParam.PropagateTo(x,1./kB2C);
90 // y = trackParam.GetY();
91 // z = trackParam.GetZ();
92 // for (Float_t dx =0; dx<1; dx+=1){trackParam.PropagateTo(x+dx,1./kB2C);}
94 // trackParam.GetXYZAt(x,1./kB2C,xyz);
98 rieman.AddPoint(x,y,z,sy,sz);
99 riemanR.AddPoint(x, gRandom->Gaus(y,sy), gRandom->Gaus(z,sz), sy,sz);
104 // track extrapolation errrs
106 for (Int_t ipoint =0; ipoint<npoints; ipoint++){
107 Double_t x = rieman.GetX()[ipoint];
108 Double_t y = riemanR.GetYat(x);
109 Double_t z = riemanR.GetZat(x);
110 Double_t sty = riemanR.GetErrY(x);
111 Double_t stz = riemanR.GetErrZ(x);
112 riemanRef.AddPoint(x, y,z,sty,stz);
115 rieman.GetExternalParameters(x0, paramIdeal,covarI);
116 riemanR.GetExternalParameters(x0, paramR,covarR);
118 AliExternalTrackParam trackParamI(x0, 0, paramIdeal, covarI);
119 AliExternalTrackParam trackParamR(x0, 0, paramR, covarR);
120 AliRieman * res = rieman.MakeResiduals(); // residuals
121 AliRieman * resR = riemanR.MakeResiduals(); // residuals
124 "Par0.="<<&trackParam<<
125 "ParI.="<<&trackParamI<<
126 "ParR.="<<&trackParamR<<
127 "Rieman.="<<&rieman<<
128 "RiemanR.="<<&riemanR<<
129 "RiemanRef.="<<&riemanRef<<