49 chainTr->SetAlias(
"dP0",
"tp1.fP[0]-tp2.fP[0]");
50 chainTr->SetAlias(
"dP1",
"tp1.fP[1]-tp2.fP[1]");
51 chainTr->SetAlias(
"dP2",
"tp1.fP[2]-tp2.fP[2]");
52 chainTr->SetAlias(
"dP3",
"tp1.fP[3]-tp2.fP[3]");
53 chainTr->SetAlias(
"dP4",
"tp1.fP[4]-tp2.fP[4]");
55 chainTr->SetAlias(
"sP0",
"sqrt(tp1.fC[0]+tp2.fC[0])");
56 chainTr->SetAlias(
"sP1",
"sqrt(tp1.fC[2]+tp2.fC[2])");
57 chainTr->SetAlias(
"sP2",
"sqrt(tp1.fC[5]+tp2.fC[5])");
58 chainTr->SetAlias(
"sP3",
"sqrt(tp1.fC[9]+tp2.fC[9])");
59 chainTr->SetAlias(
"sP4",
"sqrt(tp1.fC[14]+tp2.fC[14])");
61 chainTr->SetAlias(
"pP0",
"dP0/sP0");
62 chainTr->SetAlias(
"pP1",
"dP1/sP1");
63 chainTr->SetAlias(
"pP2",
"dP2/sP2");
64 chainTr->SetAlias(
"pP3",
"dP3/sP3");
66 chainTr->SetAlias(
"side",
"(sign(tp1.fP[1])+0)");
67 chainTr->SetAlias(
"dR",
"(1-abs(tp1.fP[1]/250.))");
68 chainTr->SetAlias(
"ta0",
"(tp1.fP[2]+tp2.fP[2])*0.5");
69 chainTr->SetAlias(
"ta1",
"(tp1.fP[3]+tp2.fP[3])*0.5");
70 chainTr->SetAlias(
"ca",
"cos(tp1.fAlpha+0)");
71 chainTr->SetAlias(
"sa",
"sin(tp1.fAlpha+0)");
73 chainTr->SetAlias(
"meanZ",
"(tp1.fP[1]+tp2.fP[1])*0.5");
74 chainTr->SetAlias(
"vx1",
"(v1.fElements[0]+0)");
75 chainTr->SetAlias(
"vy1",
"(v1.fElements[1]+0)");
76 chainTr->SetAlias(
"vz1",
"(v1.fElements[2]+0)");
77 chainTr->SetAlias(
"vdydx1",
"(v1.fElements[3]+0)");
78 chainTr->SetAlias(
"vdzdx1",
"(v1.fElements[4]+0)");
79 chainTr->SetAlias(
"vx2",
"(v2.fElements[0]+0)");
80 chainTr->SetAlias(
"vy2",
"(v2.fElements[1]+0)");
81 chainTr->SetAlias(
"vz2",
"(v2.fElements[2]+0)");
82 chainTr->SetAlias(
"vdydx2",
"(v2.fElements[3]+0)");
83 chainTr->SetAlias(
"vdzdx2",
"(v2.fElements[4]+0)");
87 chainTr->SetAlias(
"dx1",
"(AliTPCcalibAlign::SCorrect(0,0,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vx1)");
88 chainTr->SetAlias(
"dy1",
"(AliTPCcalibAlign::SCorrect(0,1,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vy1)");
89 chainTr->SetAlias(
"dz1",
"(AliTPCcalibAlign::SCorrect(0,2,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vz1)");
90 chainTr->SetAlias(
"ddy1",
"(AliTPCcalibAlign::SCorrect(0,3,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdydx1)");
91 chainTr->SetAlias(
"ddz1",
"(AliTPCcalibAlign::SCorrect(0,4,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdzdx1)");
92 chainTr->SetAlias(
"ddy01",
"(AliTPCcalibAlign::SCorrect(0,5,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdydx1)");
93 chainTr->SetAlias(
"ddz01",
"(AliTPCcalibAlign::SCorrect(0,6,s1,s2,vx1,vy1,vz1,vdydx1,vdzdx1)-vdzdx1)");
102 TCut cutS0(
"sqrt(tp2.fC[0]+tp2.fC[0])<0.2");
103 TCut cutS1(
"sqrt(tp2.fC[2]+tp2.fC[2])<0.2");
104 TCut cutS2(
"sqrt(tp2.fC[5]+tp2.fC[5])<0.01");
105 TCut cutS3(
"sqrt(tp2.fC[9]+tp2.fC[9])<0.01");
106 TCut cutS4(
"sqrt(tp2.fC[14]+tp2.fC[14])<0.5");
107 TCut
cutS=cutS0+cutS1+cutS2+cutS3+cutS4;
110 TCut cutP0(
"abs(tp1.fP[0]-tp2.fP[0])<0.6");
111 TCut cutP1(
"abs(tp1.fP[1]-tp2.fP[1])<0.6");
112 TCut cutP2(
"abs(tp1.fP[2]-tp2.fP[2])<0.03");
113 TCut cutP3(
"abs(tp1.fP[3]-tp2.fP[3])<0.03");
114 TCut cutP=cutP0+cutP1+cutP2+cutP3;
117 chainTr->Draw(
">>listELP",cutAll,
"entryList");
118 TEntryList *
elist = (TEntryList*)gDirectory->Get(
"listELP");
130 align.MakeTree(
"alignTree.root");
137 TFile falignTreeNoMag(
"/lustre_alpha/alice/miranov/rec/LHC08d/nomag/alignTree.root");
138 TTree * treeAlignNoMag = (TTree*)falignTreeNoMag.Get(
"Align");
139 TFile falignTree(
"alignTree.root");
140 TTree * treeAlign = (TTree*)falignTree.Get(
"Align");
141 treeAlign->AddFriend(treeAlignNoMag,
"NoMag");
142 treeAlignNoMag->SetMarkerStyle(26);
143 treeAlign->SetMarkerStyle(25);
152 for (Int_t i=0;i<72; i++) {
153 TMatrixD *
mat =
new TMatrixD(4,4);
164 TTreeSRedirector *cstream =
new TTreeSRedirector(
"galign.root");
166 for (Int_t iter=0; iter<10;iter++){
167 printf(
"Iter=\t%d\n",iter);
168 for (Int_t is0=0;is0<72; is0++) {
171 TMatrixD matDiff(4,4);
173 for (Int_t is1=0;is1<72; is1++) {
174 Bool_t invers=kFALSE;
175 const TMatrixD *
mat =
align.GetTransformation(is0,is1,0);
178 mat =
align.GetTransformation(is1,is0,0);
182 if ( (is1%18-is0%18)!=0) weight*=0.3;
183 if (is1/36>is0/36) weight*=2./3.;
184 if (is1/36<is0/36) weight*=1./3.;
187 TMatrixD matT = *
mat;
188 if (invers) matT.Invert();
191 (*cstream)<<
"LAlign"<<
203 for (Int_t is0=0;is0<72; is0++) {
209 (*cstream)<<
"GAlign"<<
243 fstring+=
"dR*side++";
244 fstring+=
"dR*dR*side++";
245 fstring+=
"dR*sa*side++";
246 fstring+=
"dR*ca*side++";
247 fstring+=
"ta0*side++";
248 fstring+=
"ta1*side++";
250 TString * strP0 = TStatToolkit::FitPlane(
chainTr,
"dP0:sP0", fstring.Data(),
cutS,
chi2,
npoints,fitParam,covMatrix);
251 chi2V[0]=TMath::Sqrt(chi2/npoints);
252 chainTr->SetAlias(
"corrP0",strP0->Data());
254 TString * strP1 = TStatToolkit::FitPlane(
chainTr,
"dP1:sP1", fstring.Data(),
cutS,
chi2,
npoints,fitParam,covMatrix);
255 chi2V[1]=TMath::Sqrt(chi2/npoints);
256 chainTr->SetAlias(
"corrP1",strP1->Data());
258 TString * strP2 = TStatToolkit::FitPlane(
chainTr,
"dP2:sP2", fstring.Data(),
cutS,
chi2,
npoints,fitParam,covMatrix);
259 chi2V[2]=TMath::Sqrt(chi2/npoints);
260 chainTr->SetAlias(
"corrP2",strP2->Data());
263 chi2V[3]=TMath::Sqrt(chi2/npoints);
264 chainTr->SetAlias(
"corrP3",strP3->Data());
266 TString * strP4 = TStatToolkit::FitPlane(
chainTr,
"dP4:sP4", fstring.Data(),
cutS,
chi2,
npoints,fitParam,covMatrix);
267 chi2V[4]=TMath::Sqrt(chi2/npoints);
268 chainTr->SetAlias(
"corrP4",strP4->Data());
274 TH2F * hdP0Z =
new TH2F(
"hdP0Z",
"hdP0Z",10,-250,250,100,-0.5,0.5);
275 TH2F * hdP0ZNoCor =
new TH2F(
"hdP0ZNoCor",
"hdP0ZNoCor",10,-250,250,100,-0.5,0.5);
280 hdP0ZNoCor->FitSlicesY();
281 hdP0Z_2->SetMinimum(0);
282 hdP0Z_2->SetXTitle(
"Z position (cm)");
283 hdP0Z_2->SetYTitle(
"#sigma_{y} (cm)");
284 hdP0Z_2->SetMarkerStyle(25);
285 hdP0ZNoCor_2->SetMarkerStyle(26);
287 hdP0ZNoCor_2->Draw(
"same");
288 gPad->SaveAs(
"picAlign/SigmaY_z.gif");
289 gPad->SaveAs(
"picAlign/SigmaY_z.eps");
291 hdP0ZNoCor_1->SetXTitle(
"Z position (cm)");
292 hdP0ZNoCor_1->SetYTitle(
"#Delta{y} (cm)");
293 hdP0Z_1->SetMarkerStyle(25);
294 hdP0ZNoCor_1->SetMarkerStyle(26);
295 hdP0ZNoCor_1->Draw(
"");
296 hdP0Z_1->Draw(
"same");
297 gPad->SaveAs(
"picAlign/DeltaY_z.gif");
298 gPad->SaveAs(
"picAlign/DeltaY_z.eps");
301 TH2F * hdPP0Z =
new TH2F(
"hdPP0Z",
"hdPP0Z",8,-200,200,50,-5.05,5.05);
302 TH2F * hncdPP0Z =
new TH2F(
"hncdPP0Z",
"hncdPP0Z",8,-200,200,50,-5.05,5.05);
305 hdPP0Z->FitSlicesY();
306 hncdPP0Z->FitSlicesY();
307 hdPP0Z_2->SetMarkerStyle(25);
308 hncdPP0Z_2->SetMarkerStyle(26);
309 hdPP0Z_2->SetMinimum(0);
310 hdPP0Z_2->SetXTitle(
"Z position (cm)");
311 hdPP0Z_2->SetYTitle(
"#sigma y (Unit) ");
313 hncdPP0Z_2->Draw(
"same");
314 gPad->SaveAs(
"picAlign/PullY_z.gif");
315 gPad->SaveAs(
"picAlign/PullY_z.eps");
321 TH2F * hdP1Z =
new TH2F(
"hdP1Z",
"hdP1Z",10,-250,250,100,-0.2,0.2);
322 TH2F * hdP1ZNoCor =
new TH2F(
"hdP1ZNoCor",
"hdP1ZNoCor",10,-250,250,100,-0.2,0.2);
327 hdP1ZNoCor->FitSlicesY();
328 hdP1Z_2->SetMinimum(0);
329 hdP1Z_2->SetXTitle(
"Z position (cm)");
330 hdP1Z_2->SetYTitle(
"#sigma_{z} (cm)");
331 hdP1Z_2->SetMarkerStyle(25);
332 hdP1ZNoCor_2->SetMarkerStyle(26);
334 hdP1ZNoCor_2->Draw(
"same");
335 gPad->SaveAs(
"picAlign/SigmaZ_z.gif");
336 gPad->SaveAs(
"picAlign/SigmaZ_z.eps");
338 hdP1ZNoCor_1->SetXTitle(
"Z position (cm)");
339 hdP1ZNoCor_1->SetYTitle(
"#Delta{z} (cm)");
340 hdP1Z_1->SetMarkerStyle(25);
341 hdP1ZNoCor_1->SetMarkerStyle(26);
342 hdP1ZNoCor_1->Draw(
"");
343 hdP1Z_1->Draw(
"same");
344 gPad->SaveAs(
"picAlign/DeltaZ_z.gif");
345 gPad->SaveAs(
"picAlign/DeltaZ_z.eps");
348 TH2F * hdPP1Z =
new TH2F(
"hdPP1Z",
"hdPP1Z",8,-200,200,50,-5.05,5.05);
349 TH2F * hncdPP1Z =
new TH2F(
"hncdPP1Z",
"hncdPP1Z",8,-200,200,50,-5.05,5.05);
352 hdPP1Z->FitSlicesY();
353 hncdPP1Z->FitSlicesY();
354 hdPP1Z_2->SetMarkerStyle(25);
355 hncdPP1Z_2->SetMarkerStyle(26);
356 hdPP1Z_2->SetMinimum(0);
357 hdPP1Z_2->SetXTitle(
"Z position (cm)");
358 hdPP1Z_2->SetYTitle(
"#sigma z (Unit) ");
360 hncdPP1Z_2->Draw(
"same");
361 gPad->SaveAs(
"picAlign/PullZ_z.gif");
362 gPad->SaveAs(
"picAlign/PullZ_z.eps");
369 TH2F * hdP4Z =
new TH2F(
"hdP4Z",
"hdP4Z",10,-250,250,100,-0.4,0.4);
370 TH2F * hdP4ZNoCor =
new TH2F(
"hdP4ZNoCor",
"hdP4ZNoCor",10,-250,250,100,-0.4,0.4);
375 hdP4ZNoCor->FitSlicesY();
376 hdP4Z_2->SetMinimum(0);
377 hdP4Z_2->SetXTitle(
"Z position (cm)");
378 hdP4Z_2->SetYTitle(
"#sigma_{1/pt} (1/GeV)");
379 hdP4Z_2->SetMarkerStyle(25);
380 hdP4ZNoCor_2->SetMarkerStyle(26);
382 hdP4ZNoCor_2->Draw(
"same");
383 gPad->SaveAs(
"picAlign/SigmaP4_z.gif");
384 gPad->SaveAs(
"picAlign/SigmaP4_z.eps");
386 hdP4ZNoCor_1->SetXTitle(
"Z position (cm)");
387 hdP4ZNoCor_1->SetYTitle(
"#Delta_{1/p_{t}} (1/GeV)");
388 hdP4Z_1->SetMarkerStyle(25);
389 hdP4ZNoCor_1->SetMarkerStyle(26);
390 hdP4ZNoCor_1->Draw(
"");
391 hdP4Z_1->Draw(
"same");
392 gPad->SaveAs(
"picAlign/DeltaP4_z.gif");
393 gPad->SaveAs(
"picAlign/DeltaP4_z.eps");
396 TH2F * hdPP4Z =
new TH2F(
"hdPP4Z",
"hdPP4Z",8,-200,200,50,-5.05,5.05);
397 TH2F * hncdPP4Z =
new TH2F(
"hncdPP4Z",
"hncdPP4Z",8,-200,200,50,-5.05,5.05);
400 hdPP4Z->FitSlicesY();
401 hncdPP4Z->FitSlicesY();
402 hdPP4Z_2->SetMarkerStyle(25);
403 hncdPP4Z_2->SetMarkerStyle(26);
404 hdPP4Z_2->SetMinimum(0);
405 hdPP4Z_2->SetXTitle(
"Z position (cm)");
406 hdPP4Z_2->SetYTitle(
"#sigma 1/p_{t} (Unit) ");
408 hncdPP4Z_2->Draw(
"same");
409 gPad->SaveAs(
"picAlign/PullP4_z.gif");
410 gPad->SaveAs(
"picAlign/PullP4_z.eps");
421 AliTPCcalibAlign
align;
425 AliExternalTrackParam * tp1 = 0;
426 AliExternalTrackParam * tp2 = 0;
430 for (Int_t i=0; i<
elist->GetN(); i++){
432 chainTracklet->GetBranch(
"tp1.")->SetAddress(&tp1);
433 chainTracklet->GetBranch(
"tp2.")->SetAddress(&tp2);
434 chainTracklet->GetBranch(
"v1.")->SetAddress(&vec1);
435 chainTracklet->GetBranch(
"v2.")->SetAddress(&vec2);
436 chainTracklet->GetBranch(
"s1")->SetAddress(&s1);
437 chainTracklet->GetBranch(
"s2")->SetAddress(&s2);
438 chainTracklet->GetEntry(i);
439 if (i%100==0)
printf(
"%d\t%d\t%d\t\n",i, s1,s2);
441 TLinearFitter * fitter = align.GetOrMakeFitter6(s1,s2);
442 if (fitter) align.Process6(vec1->GetMatrixArray(),vec2->GetMatrixArray(),fitter);
453 chainTr->Draw(
"vy2-vy1:s1>>hisdYNoCor(36,0,36,100,-0.3,0.3)",
"abs(s2-s1-36)<1",
"",40000);
454 chainTr->Draw(
"vy2-vy1-dy1:s1>>hisdYCor(36,0,36,100,-0.3,0.3)",
"abs(s2-s1-36)<1",
"",40000);
455 hisdYCor->FitSlicesY();
456 hisdYNoCor->FitSlicesY();
457 hisdYCor_1->Draw(
"");
465 treeAlign->Draw(
"1000*m6.fElements[4]",
"s2==s1+36&&nphi>100");
466 htemp->SetXTitle(
"#Delta_{#phi} (mrad)");
467 gPad->SaveAs(
"picAlign/mag5dPhi.eps");
468 gPad->SaveAs(
"picAlign/mag5dPhi.gif");
470 treeAlignNoMag->Draw(
"1000*m6.fElements[4]",
"s2==s1+36&&nphi>100");
471 htemp->SetXTitle(
"#Delta_{#phi} (mrad)");
472 gPad->SaveAs(
"picAlign/nomagdPhi.eps");
473 gPad->SaveAs(
"picAlign/nomagdPhi.gif");
477 treeAlign->Draw(
"1000*(m6.fElements[4]-NoMag.m6.fElements[4])",
"s2==s1+36&&nphi>100");
478 htemp->SetXTitle(
"#Delta_{#phi} (mrad)");
479 gPad->SaveAs(
"picAlign/diffnomagmag5dPhi.eps");
480 gPad->SaveAs(
"picAlign/diffnomagmag5dPhi.gif");
488 treeAlign->Draw(
"1000*m6.fElements[8]",
"s2==s1+36&&nphi>100");
489 htemp->SetXTitle(
"#Delta_{#theta} (mrad)");
490 gPad->SaveAs(
"picAlign/mag5dTheta.eps");
491 gPad->SaveAs(
"picAlign/mag5dTheta.gif");
493 treeAlignNoMag->Draw(
"1000*m6.fElements[8]",
"s2==s1+36&&nphi>100");
494 htemp->SetXTitle(
"#Delta_{#theta} (mrad)");
495 gPad->SaveAs(
"picAlign/nomagdTheta.eps");
496 gPad->SaveAs(
"picAlign/nomagdTheta.gif");
500 treeAlign->Draw(
"1000*(m6.fElements[8]-NoMag.m6.fElements[8])",
"s2==s1+36&&nphi>100");
501 htemp->SetXTitle(
"#Delta_{#theta} (mrad)");
502 gPad->SaveAs(
"picAlign/diffnomagmag5dTheta.eps");
503 gPad->SaveAs(
"picAlign/diffnomagmag5dTheta.gif");
506 treeAlign->Draw(
"1000*(m6.fElements[8]):s1",
"s2==s1+36&&nphi>100");
507 htemp->SetYTitle(
"#Delta_{#theta} (mrad)");
508 htemp->SetXTitle(
"Sector number");
509 treeAlignNoMag->Draw(
"1000*(m6.fElements[8]):s1",
"s2==s1+36&&nphi>100",
"same");
510 gPad->SaveAs(
"picAlign/diffnomagmag5dTheta_s1.eps");
511 gPad->SaveAs(
"picAlign/diffnomagmag5dTheta_s1.gif");
520 treeAlign->Draw(
"dz",
"s2==s1+36&&nphi>100");
521 htemp->SetXTitle(
"#Delta_{Z} (cm)");
522 gPad->SaveAs(
"picAlign/mag5dZ.eps");
523 gPad->SaveAs(
"picAlign/mag5dZ.gif");
525 treeAlignNoMag->Draw(
"dz",
"s2==s1+36&&nphi>100");
526 htemp->SetXTitle(
"#Delta_{Z} (cm)");
527 gPad->SaveAs(
"picAlign/nomagdZ.eps");
528 gPad->SaveAs(
"picAlign/nomagdZ.gif");
532 treeAlign->Draw(
"(dz-NoMag.dz)",
"s2==s1+36&&nphi>100");
533 htemp->SetXTitle(
"#Delta_{Z} (cm)");
534 gPad->SaveAs(
"picAlign/diffnomagmag5dZ.eps");
535 gPad->SaveAs(
"picAlign/diffnomagmag5dZ.gif");
538 treeAlign->Draw(
"dz:s1",
"s2==s1+36&&nphi>100");
539 htemp->SetYTitle(
"#Delta_{Z} (cm)");
540 htemp->SetXTitle(
"Sector number");
541 treeAlignNoMag->Draw(
"dz:s1",
"s2==s1+36&&nphi>100",
"same");
542 gPad->SaveAs(
"picAlign/diffnomagmag5dZ_s1.eps");
543 gPad->SaveAs(
"picAlign/diffnomagmag5dZ_s1.gif");
550 treeAlign->Draw(
"dy",
"s2==s1+36&&nphi>100");
551 htemp->SetXTitle(
"#Delta_{Y} (cm)");
552 gPad->SaveAs(
"picAlign/mag5dY.eps");
553 gPad->SaveAs(
"picAlign/mag5dY.gif");
555 treeAlignNoMag->Draw(
"dy",
"s2==s1+36&&nphi>100");
556 htemp->SetXTitle(
"#Delta_{Y} (cm)");
557 gPad->SaveAs(
"picAlign/nomagdY.eps");
558 gPad->SaveAs(
"picAlign/nomagdY.gif");
562 treeAlign->Draw(
"(dy-NoMag.dy)",
"s2==s1+36&&nphi>100");
563 htemp->SetXTitle(
"#Delta_{Y} (cm)");
564 gPad->SaveAs(
"picAlign/diffnomagmag5dY.eps");
565 gPad->SaveAs(
"picAlign/diffnomagmag5dY.gif");
568 treeAlign->Draw(
"dy:s1",
"s2==s1+36&&nphi>100");
569 htemp->SetYTitle(
"#Delta_{Y} (cm)");
570 htemp->SetXTitle(
"Sector number");
571 treeAlignNoMag->Draw(
"dy:s1",
"s2==s1+36&&nphi>100",
"same");
572 gPad->SaveAs(
"picAlign/diffnomagmag5dY_s1.eps");
573 gPad->SaveAs(
"picAlign/diffnomagmag5dY_s1.gif");
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
TMatrixD * arrayAlignTmp[72]
TMatrixD * arrayAlign[72]