38 #include "TLinearFitter.h" 42 #include "TEntryList.h" 44 #include "THnSparse.h" 83 const Double_t
rmsCut09[6]={0.15,0.9,0.015, 0.2, 0.9, 0.015};
98 TCut *
cP3[4]={0,0,0,0};
102 TCut *
cA[4]={0,0,0,0};
138 void CalibAlignKalman(Int_t
npoints, Int_t maxFiles, Int_t startFile, Int_t trackDump, Int_t nSkipTrack, Int_t nSkipTrackOffset, Int_t nSkip, Int_t nSkipOffset, Int_t bfilterTest){
149 TFile ftrafo(
"kalmanFitApply.root");
151 if (kalmanFitApply) {
152 printf(
"Loaded transforamtion\n");
156 printf(
"Not trnasformation specified\n");
161 gSystem->AddIncludePath(
"-I$ALICE_ROOT/TPC/macros");
162 gROOT->LoadMacro(
"$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+");
179 kalmanFitNew->
Init();
180 kalmanFitOrig->
Init();
207 cSide[0] =
new TCut(
"cutAA",
"p0In.fP[1]>0&&p1In.fP[1]>0");
208 cSide[1] =
new TCut(
"cutCC",
"p0In.fP[1]<0&&p1In.fP[1]<0");
209 cSide[2] =
new TCut(
"cutAC",
"p0In.fP[1]>0&&p1In.fP[1]<0");
210 cSide[3] =
new TCut(
"cutCA",
"p0In.fP[1]<0&&p1In.fP[1]>0");
212 TH1F * phisP3 =
new TH1F(
"hhisP3",
"hhisP3",100,-0.01,0.01);
213 TH1F * phisSP3 =
new TH1F(
"hhisSP3",
"hhisSP3",100,-0.001,0.001);
214 TH1F * phisP4 =
new TH1F(
"hhisP4",
"hhisP4",100,-0.1,0.1);
215 TH1F * phisM4 =
new TH1F(
"hhisM4",
"hhisM4",100,-0.01,0.01);
219 TF1 *fg =
new TF1(
"fg",
"gaus");
220 for (Int_t iter=0; iter<2; iter++){
221 for (Int_t ic=0;ic<4;ic++){
229 chainPoints->Draw(
"p0In.fP[3]+p1In.fP[3]>>hhisP3",*
cA[ic],
"goff");
230 phisP3->Fit(fg,
"QNR",
"QNR",phisP3->GetBinCenter(phisP3->GetMaximumBin())-0.003,phisP3->GetBinCenter(phisP3->GetMaximumBin())+0.003);
231 cP3[ic]=
new TCut(Form(
"abs(p0In.fP[3]+p1In.fP[3]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma));
232 cutMatrix(7*ic+0,0) = fg->GetParameter(1);
233 cutMatrix(7*ic+0,1) = fg->GetParameter(2);
237 chainPoints->Draw(
"p0Out.fP[3]-p0In.fP[3]>>hhisSP3",*
cA[ic],
"goff");
238 phisSP3->Fit(fg,
"QNR",
"QNR",phisP3->GetBinCenter(phisSP3->GetMaximumBin())-0.0015,phisP3->GetBinCenter(phisSP3->GetMaximumBin())+0.0015);
239 cSP3[ic]=
new TCut(Form(
"abs(p0Out.fP[3]-p0In.fP[3]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma));
240 cutMatrix(7*ic+1,0) = fg->GetParameter(1);
241 cutMatrix(7*ic+1,1) = fg->GetParameter(2);
243 chainPoints->Draw(
"p1Out.fP[3]-p1In.fP[3]>>hhisSP3",*
cA[ic],
"goff");
244 phisSP3->Fit(fg,
"QNR",
"QNR",phisP3->GetBinCenter(phisSP3->GetMaximumBin())-0.0015,phisP3->GetBinCenter(phisSP3->GetMaximumBin())+0.0015);
245 *
cSP3[ic]+=Form(
"abs(p1Out.fP[3]-p1In.fP[3]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma);
246 cutMatrix(7*ic+2,0) = fg->GetParameter(1);
247 cutMatrix(7*ic+2,1) = fg->GetParameter(2);
252 phisP4->Fit(fg,
"QNR",
"QNR",phisP4->GetBinCenter(phisP4->GetMaximumBin())-0.03,phisP4->GetBinCenter(phisP4->GetMaximumBin())+0.03);
253 cP4[ic]=
new TCut(Form(
"abs(p0Out.fP[4]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma));
254 cutMatrix(7*ic+3,0) = fg->GetParameter(1);
255 cutMatrix(7*ic+3,1) = fg->GetParameter(2);
257 phisP4->Fit(fg,
"QNR",
"QNR",phisP4->GetBinCenter(phisP4->GetMaximumBin())-0.03,phisP4->GetBinCenter(phisP4->GetMaximumBin())+0.03);
258 *
cP4[ic]+=Form(
"abs(p1Out.fP[4]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma);
259 cutMatrix(7*ic+4,0) = fg->GetParameter(1);
260 cutMatrix(7*ic+4,1) = fg->GetParameter(2);
265 chainPoints->Draw(
"p0Out.fP[4]-p0In.fP[4]>>hhisM4",*
cA[ic],
"goff");
266 phisM4->Fit(fg,
"QNR",
"QNR",phisM4->GetBinCenter(phisM4->GetMaximumBin())-0.03,phisM4->GetBinCenter(phisM4->GetMaximumBin())+0.03);
267 cM4[ic]=
new TCut(Form(
"abs(p0Out.fP[4]-p0In.fP[4]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma));
268 cutMatrix(7*ic+5,0) = fg->GetParameter(1);
269 cutMatrix(7*ic+5,1) = fg->GetParameter(2);
271 chainPoints->Draw(
"p1Out.fP[4]-p1In.fP[4]>>hhisM4",*
cA[ic],
"goff");
272 phisM4->Fit(fg,
"QNR",
"QNR",phisM4->GetBinCenter(phisM4->GetMaximumBin())-0.03,phisM4->GetBinCenter(phisM4->GetMaximumBin())+0.03);
273 *
cM4[ic]+=Form(
"abs(p1Out.fP[4]-p1In.fP[4]-%f)<%f",fg->GetParameter(1), fg->GetParameter(2)*
kNsigma);
274 cutMatrix(7*ic+6,0) = fg->GetParameter(1);
275 cutMatrix(7*ic+6,1) = fg->GetParameter(2);
285 cutAll = (*
cA[0])||(*
cA[1])||(*
cA[2])||(*
cA[3])+
"abs(mag)<0.01&&ncont>0&&p.fNPoints>120";
295 elist = (TEntryList*)gDirectory->Get(
"listEL");
297 elist->SetDirectory(0);
309 elist->Write(
"eventList");
323 printf(
"\n*\n*\n*Selected entries = %d\n*\n*\n*",Int_t(
elist->GetN()));
326 for (Int_t itrack=0;itrack<
elist->GetN(); itrack++){
330 if (accepted>maxTracks)
break;
338 if (!vecRMS09)
continue;
340 if ((*vecRMS09)[0] >
rmsCut09[0]) isOK=kFALSE;
341 if ((*vecRMS09)[1]/(*vecRMS09)[0] >
rmsCut09[1]) isOK=kFALSE;;
342 if ((*vecRMS09)[2] >
rmsCut09[2]) isOK=kFALSE;
343 if ((*vecRMS09)[3] >
rmsCut09[3]) isOK=kFALSE;
344 if ((*vecRMS09)[4]/(*vecRMS09)[0] >
rmsCut09[4]) isOK=kFALSE;
345 if ((*vecRMS09)[5] >
rmsCut09[5]) isOK=kFALSE;
353 for (Int_t idir=-1; idir<=1; idir++){
355 if (!pointsF)
continue;
360 if (idir==0) accepted++;
362 if (accepted%50==0) {
370 if (accepted%trackDump==0) {
380 kalmanFitNew->Write(
"kalmanFit");
382 kalmanFitOrig->Write(
"kalmanFitOrig");
384 if (kalmanFitApply) kalmanFitApply->Write(
"kalmanFitApply");
400 for (Int_t i=0;i<6;i++){
419 for (Int_t itrack=0;itrack<
elist->GetN(); itrack++){
423 if (accepted>maxTracks)
break;
427 for (Int_t iscalib=0; iscalib<1;iscalib++){
429 if (iscalib==0) pcstream=pcstreamNonCalib;
430 if (iscalib>0) pcstream=pcstreamCalib;
431 for (Int_t idir=-1; idir<=1; idir++){
433 if (!pointsF)
continue;
435 if (idir==0) accepted++;
441 if (accepted%trackDump==0) {
445 pcstreamCalib->
GetFile()->cd();
446 kalmanFitters[0]->Write(
"fitUpNonCalib");
447 kalmanFitters[1]->Write(
"fitUpDownNonCalib");
448 kalmanFitters[2]->Write(
"fitDownNonCalib");
449 kalmanFitters[3]->Write(
"fitUpCalib");
450 kalmanFitters[4]->Write(
"fitUpDownCalib");
451 kalmanFitters[5]->Write(
"fitDownCalib");
452 delete pcstreamCalib;
453 delete pcstreamNonCalib;
478 for (Int_t itrack=0;itrack<
elist->GetN(); itrack++){
481 if (accepted>maxTracks)
break;
486 if (accepted%trackDump==0) {
502 Int_t npointsF = (npoints-nskipOffset-1)/nskip;
506 for (Int_t ipoint=nskipOffset; ipoint<
npoints; ipoint+=nskip){
508 if (!points.
GetPoint(point,ipoint))
continue;
511 if (used==npointsF)
break;
521 TLinearFitter lfitY(2,
"pol1");
522 TLinearFitter lfitZ(2,
"pol1");
526 lfitY.StoreData(kTRUE);
527 lfitZ.StoreData(kTRUE);
529 if (npoints<2)
return 0;
530 Double_t currentAlpha = TMath::ATan2(points.
GetY()[npoints-1]-points.
GetY()[0], points.
GetX()[npoints-1]-points.
GetX()[0]);
531 Double_t ca = TMath::Cos(currentAlpha);
532 Double_t sa = TMath::Sin(currentAlpha);
536 Double_t maxX =-10000, minX=10000;
537 for (Int_t ipoint=0; ipoint<npoints-1; ipoint++){
538 Double_t rx = ca*points.
GetX()[ipoint]+sa*points.
GetY()[ipoint];
539 Double_t ry = -sa*points.
GetX()[ipoint]+ca*points.
GetY()[ipoint];
540 Double_t rz = points.
GetZ()[ipoint];
541 if (dir== 1 && rx<0)
continue;
542 if (dir==-1 && rx>0)
continue;
543 if (maxX<rx) maxX=rx;
544 if (minX>rx) minX=rx;
545 lfitY.AddPoint(&rx,ry,1);
546 lfitZ.AddPoint(&rx,rz,1);
548 if (TMath::Abs(maxX-minX)<
kArmCut)
return 0;
549 if (lfitY.GetNpoints()<
knclCut)
return 0;
553 lfitY.GetParameters(vecY);
554 lfitZ.GetParameters(vecZ);
556 Double_t chi2Y = lfitY.GetChisquare()/lfitY.GetNpoints();
557 Double_t chi2Z = lfitZ.GetChisquare()/lfitZ.GetNpoints();
566 for (Int_t iter=0; iter<2;iter++){
567 for (Int_t ipoint=0; ipoint<npoints-1; ipoint++){
569 if (!points.
GetPoint(point,ipoint))
continue;
570 Double_t rx = ca*points.
GetX()[ipoint]+sa*points.
GetY()[ipoint];
571 Double_t ry = -sa*points.
GetX()[ipoint]+ca*points.
GetY()[ipoint];
572 Double_t rz = points.
GetZ()[ipoint];
573 if (dir== 1 && rx<0)
continue;
574 if (dir==-1 && rx>0)
continue;
575 Double_t erry = TMath::Sqrt(chi2Y);
576 Double_t errz = TMath::Sqrt(chi2Z);
577 Double_t fy = vecY[0]+vecY[1]*rx;
578 Double_t fz = vecZ[0]+vecZ[1]*rx;
579 if (TMath::Abs(fy-ry)>erry*
kSigmaCut)
continue;
580 if (TMath::Abs(fz-rz)>errz*kSigmaCut)
continue;
582 if (pointsF) pointsF->
AddPoint(toBeUsed,&point);
586 (*pcstream)<<
"filter"<<
588 "accepted="<<accepted<<
612 if (npoints<1)
return 0;
613 Double_t currentAlpha = TMath::ATan2(points.
GetY()[npoints-1]-points.
GetY()[0], points.
GetX()[npoints-1]-points.
GetX()[0]);
614 Double_t ca = TMath::Cos(currentAlpha);
615 Double_t sa = TMath::Sin(currentAlpha);
619 Double_t *rxvector =
new Double_t[
npoints];
620 Int_t *indexes =
new Int_t[
npoints];
621 for (Int_t ipoint=0; ipoint<npoints-1; ipoint++){
622 rxvector[ipoint]=ca*points.
GetX()[ipoint]+sa*points.
GetY()[ipoint];
624 TMath::Sort(npoints, rxvector,indexes,kFALSE);
627 for (Int_t ipoint=0; ipoint<
npoints; ipoint++){
628 if (!points.
GetPoint(point,indexes[ipoint]))
continue;
629 pointsSorted->
AddPoint(ipoint,&point);
640 const Int_t kMinPoints= 70;
641 const Double_t kResY = 0.1;
642 const Double_t kResZ = 0.1;
643 const Double_t kMisY = 0.02;
644 const Double_t kMisZ = 0.02;
645 const Double_t kLArm = 120.;
646 const Double_t kACsideFac = 10.;
647 const Double_t kMS0 = kResY/20.;
650 if (npoints<kMinPoints)
return 0;
652 TVectorD *vecPos[11]={0,0,0,0,0,0,0,0,0,0,0};
653 for (Int_t i=0;i<11;i++){
658 Double_t currentAlpha = TMath::ATan2(points.
GetY()[npoints-1]-points.
GetY()[0], points.
GetX()[npoints-1]-points.
GetX()[0]);
659 Double_t ca = TMath::Cos(currentAlpha);
660 Double_t sa = TMath::Sin(currentAlpha);
663 TMatrixD trParamY(2,1),trCovarY(2,2);
664 TMatrixD trParamZ(2,1),trCovarZ(2,2);
680 mat1(0,0)=1.; mat1(0,1)=0.;
681 mat1(1,0)=0.; mat1(1,1)=1.;
687 for (Int_t idir=0; idir<2;idir++){
690 for (Int_t ip=0; ip<
npoints; ip++){
692 if (idir>0) ipoint = npoints-ip-1;
693 Double_t rx = ca*points.
GetX()[ipoint]+sa*points.
GetY()[ipoint];
694 Double_t ry = -sa*points.
GetX()[ipoint]+ca*points.
GetY()[ipoint];
695 Double_t rz = points.
GetZ()[ipoint];
700 Double_t rxm = ca*points.
GetX()[npoints/2]+sa*points.
GetY()[npoints/2];
701 Double_t rym = -sa*points.
GetX()[npoints/2]+ca*points.
GetY()[npoints/2];
702 Double_t rzm = points.
GetZ()[npoints/2];
704 trParamY(1,0) = (rym-ry)/(rxm-rx);
706 trParamZ(1,0) = (rzm-rz)/(rxm-rx);
708 trCovarY(0,0) = kResY*kResY;
709 trCovarY(1,1) = (kResY*kResY)/((rxm-rx)*(rxm-rx));
710 trCovarZ(0,0) = kResZ*kResZ;
711 trCovarZ(1,1) = (kResZ*kResZ)/((rxm-rx)*(rxm-rx));
718 if ((volId%36)<18 && (lastVolId%36)>=18){
720 trCovarY(0,0)+=kMisY*kMisY*kACsideFac;
721 trCovarZ(0,0)+=kMisZ*kMisZ*kACsideFac;
722 trCovarY(1,1)+=kACsideFac*(kMisY*kMisY)/(kLArm*kLArm);;
723 trCovarZ(1,1)+=kACsideFac*(kMisZ*kMisZ)/(kLArm*kLArm);
726 if (volId!=lastVolId){
728 trCovarY(0,0)+=kMisY*kMisY;
729 trCovarZ(0,0)+=kMisZ*kMisZ;
730 trCovarY(1,1)+=(kMisY*kMisY)/(kLArm*kLArm);;
731 trCovarZ(1,1)+=(kMisZ*kMisZ)/(kLArm*kLArm);
737 Double_t deltaX=rx-lastX;
738 trParamY(0,0)+=deltaX*trParamY(1,0);
739 trParamZ(0,0)+=deltaX*trParamZ(1,0);
740 matFk(0,0)=1; matFk(0,1)=deltaX;
741 matFk(1,0)=0; matFk(1,1)=1;
742 matFkT=matFk.T(); matFk.T();
743 covXk2=matFk*trCovarY*matFkT;
745 covXk2=matFk*trCovarZ*matFkT;
749 trCovarY(1,1)+=TMath::Abs(deltaX)*kMS0*kMS0;
750 trCovarZ(1,1)+=TMath::Abs(deltaX)*kMS0*kMS0;
755 for (Int_t coord=0; coord<2;coord++){
756 TMatrixD* pvecXk = (coord==0)? &trParamY: &trParamZ;
757 TMatrixD* pcovXk = (coord==0)? &trCovarY: &trCovarZ;
761 measR(0,0) = (coord==0) ? kResY:kResZ;
762 vecZk(0,0) = (coord==0) ? ry:rz;
764 vecYk = vecZk-matHk*vecXk;
765 matHkT=matHk.T(); matHk.T();
766 matSk = (matHk*(covXk*matHkT))+measR;
768 matKk = (covXk*matHkT)*matSk;
770 covXk2= (mat1-(matKk*matHk));
771 covXk3 = covXk2*covXk;
772 vecXk += matKk*vecYk;
778 (*vecPos[0])[ipoint]=rx;
779 (*vecPos[1])[ipoint]=ry;
780 (*vecPos[2])[ipoint]=rz;
782 (*vecPos[4*idir+0+3])[ipoint]=trParamY(0,0);
783 (*vecPos[4*idir+1+3])[ipoint]=trParamY(1,0);
785 (*vecPos[4*idir+2+3])[ipoint]=trParamZ(0,0);
786 (*vecPos[4*idir+3+3])[ipoint]=trParamZ(1,0);
797 Int_t npoints09 = Int_t(npoints*0.9);
799 vec=(*(vecPos[3])-*(vecPos[1]));
800 rms[0]=TMath::RMS(npoints, vec.GetMatrixArray());
804 vec=(*(vecPos[7])-*(vecPos[3]));
805 rms[1]=TMath::RMS(npoints, vec.GetMatrixArray());
809 vec=(*(vecPos[8])-*(vecPos[4]));
810 rms[2]=TMath::RMS(npoints, vec.GetMatrixArray());
815 vec=(*(vecPos[5])-*(vecPos[2]));
816 rms[3]=TMath::RMS(npoints, vec.GetMatrixArray());
820 vec=(*(vecPos[9])-*(vecPos[5]));
821 rms[4]=TMath::RMS(npoints, vec.GetMatrixArray());
825 vec=(*(vecPos[10])-*(vecPos[6]));
826 rms[5]=TMath::RMS(npoints, vec.GetMatrixArray());
838 "mean09.="<<&mean09<<
844 for (Int_t i=0;i<11;i++){
867 for (Int_t iside=0; iside<=1; iside++)
868 for (Int_t ipolR=0; ipolR<2; ipolR++){
869 for (Int_t ipolZ=0; ipolZ<3; ipolZ++){
872 if (ipolR+ipolZ==0)
continue;
873 sprintf(tname,
"tTPCscalingRPolR%dDr%dSide%d",ipolR,ipolZ,iside);
875 transformation->
SetParams(0,0.2,0,&fpar);
883 for (Int_t iside=0; iside<=1; iside++)
884 for (Int_t ipol=0; ipol<3; ipol++){
886 sprintf(tname,
"tTPCscalingRIFC%dSide%d",ipol,iside);
888 transformation->
SetParams(0,0.2,0,&fpar);
894 for (Int_t iside=0; iside<=1; iside++)
895 for (Int_t ipol=0; ipol<3; ipol++){
898 sprintf(tname,
"tTPCscalingROFC%dSide%d",ipol,iside);
900 transformation->
SetParams(0,0.2,0,&fpar);
914 for (Int_t i=0;i<72;i++){
925 transformation =
new AliTPCTransformation(
"tscalingLocalPhiIROC",
new TBits(maskInner), 0,
"TPCscalingPhiLocal",0, 1);
926 transformation->
SetParams(0,0.02,0,&fpar);
928 transformation =
new AliTPCTransformation(
"tscalingLocalPhiOROC",
new TBits(maskOuter), 0,
"TPCscalingPhiLocal",0, 1);
929 transformation->
SetParams(0,0.02,0,&fpar);
941 transformation->
SetParams(0,4.,1.,&fpar);
945 transformation->
SetParams(0,0.2,0.0,&fpar);
956 fpar[0]=0; fpar[1]=0; fpar[2]=0;
962 for (Int_t i=0; i<=ncos;i++){
967 sprintf(tname,
"tTPCDeltaZIROCOROCSideA_Cos%d",i);
969 transformation->
SetParams(0,0.03,0,&fpar);
972 sprintf(tname,
"tTPCDeltaZIROCOROCSideC_Cos%d",i);
974 transformation->
SetParams(0,0.03,0,&fpar);
980 sprintf(tname,
"tTPCDeltaZSectorSideA_Cos%d",i);
982 transformation->
SetParams(0,0.1,0,&fpar);
985 sprintf(tname,
"tTPCDeltaZSectorSideC_Cos%d",i);
987 transformation->
SetParams(0,0.1,0,&fpar);
991 for (Int_t i=1; i<=nsin;i++){
996 sprintf(tname,
"tTPCDeltaZIROCOROCSideA_Sin%d",i);
998 transformation->
SetParams(0,0.03,0,&fpar);
1001 sprintf(tname,
"tTPCDeltaZIROCOROCSideC_Sin%d",i);
1003 transformation->
SetParams(0,0.03,0,&fpar);
1009 sprintf(tname,
"tTPCDeltaZSectorSideA_Sin%d",i);
1011 transformation->
SetParams(0,0.1,0,&fpar);
1014 sprintf(tname,
"tTPCDeltaZSectorSideC_Sin%d",i);
1016 transformation->
SetParams(0,0.1,0,&fpar);
1029 fpar[0]=0; fpar[1]=0; fpar[2]=0;
1035 for (Int_t i=0; i<=ncos;i++){
1040 sprintf(tname,
"tTPCTiltingZIROCOROCSideA_Cos%d",i);
1042 transformation->
SetParams(0,0.03,0,&fpar);
1045 sprintf(tname,
"tTPCTiltingZIROCOROCSideC_Cos%d",i);
1047 transformation->
SetParams(0,0.03,0,&fpar);
1053 sprintf(tname,
"tTPCTiltingZSectorSideA_Cos%d",i);
1055 transformation->
SetParams(0,0.1,0,&fpar);
1058 sprintf(tname,
"tTPCTiltingZSectorSideC_Cos%d",i);
1060 transformation->
SetParams(0,0.1,0,&fpar);
1064 for (Int_t i=1; i<=nsin;i++){
1069 sprintf(tname,
"tTPCTiltingZIROCOROCSideA_Sin%d",i);
1071 transformation->
SetParams(0,0.03,0,&fpar);
1074 sprintf(tname,
"tTPCTiltingZIROCOROCSideC_Sin%d",i);
1076 transformation->
SetParams(0,0.03,0,&fpar);
1082 sprintf(tname,
"tTPCTiltingZSectorSideA_Sin%d",i);
1084 transformation->
SetParams(0,0.1,0,&fpar);
1087 sprintf(tname,
"tTPCTiltingZSectorSideC_Sin%d",i);
1089 transformation->
SetParams(0,0.1,0,&fpar);
1101 TBits maskInnerA(72);
1102 TBits maskInnerC(72);
1103 for (Int_t i=0;i<72;i++){
1105 if (i%36<18) maskInnerA[i]=kTRUE;
1106 if (i%36>=18) maskInnerC[i]=kTRUE;
1111 transformation =
new AliTPCTransformation(
"tTPCDeltaLxIROCA",
new TBits(maskInnerA),
"TPClocaldLxdGX",
"TPClocaldLxdGY",0, 0);
1112 transformation->
SetParams(0,0.2,0,&fpar);
1114 transformation =
new AliTPCTransformation(
"tTPCDeltaLxIROCC",
new TBits(maskInnerC),
"TPClocaldLxdGX",
"TPClocaldLxdGY",0, 0);
1115 transformation->
SetParams(0,0.2,0,&fpar);
1118 transformation =
new AliTPCTransformation(
"tTPCDeltaLyIROCA",
new TBits(maskInnerA),
"TPClocaldLydGX",
"TPClocaldLydGY",0, 0);
1119 transformation->
SetParams(0,0.2,0,&fpar);
1121 transformation =
new AliTPCTransformation(
"tTPCDeltaLyIROCC",
new TBits(maskInnerC),
"TPClocaldLydGX",
"TPClocaldLydGY",0, 0);
1122 transformation->
SetParams(0,0.2,0,&fpar);
1133 for (Int_t isec=0; isec<36;isec++){
1138 sprintf(tname,
"tTPClocalLxIROC%d",isec);
1139 transformation =
new AliTPCTransformation(tname,
new TBits(mask),
"TPClocaldLydGX",
"TPClocaldLydGY",0, 0);
1140 transformation->
SetParams(0,0.2,0,&fpar);
1143 sprintf(tname,
"tTPClocalLyIROC%d",isec);
1144 transformation =
new AliTPCTransformation(tname,
new TBits(mask),
"TPClocaldLydGX",
"TPClocaldLydGY",0, 0);
1145 transformation->
SetParams(0,0.2,0,&fpar);
1148 sprintf(tname,
"tTPClocalRzIROC%d",isec);
1149 transformation =
new AliTPCTransformation(tname,
new TBits(mask),
"TPClocaldLydGX",
"TPClocaldRzdGY",0, 0);
1150 transformation->
SetParams(0,0.2,0,&fpar);
1155 for (Int_t isec=0; isec<36;isec++){
1156 if (isec%18==fixSector)
continue;
1159 mask[isec+36]=kTRUE;
1162 sprintf(tname,
"tTPClocalLxSector%d",isec);
1163 transformation =
new AliTPCTransformation(tname,
new TBits(mask),
"TPClocaldLydGX",
"TPClocaldLydGY",0, 0);
1164 transformation->
SetParams(0,0.2,0,&fpar);
1167 sprintf(tname,
"tTPClocalLySector%d",isec);
1168 transformation =
new AliTPCTransformation(tname,
new TBits(mask),
"TPClocaldLydGX",
"TPClocaldLydGY",0, 0);
1169 transformation->
SetParams(0,0.2,0,&fpar);
1172 sprintf(tname,
"tTPClocalRzSector%d",isec);
1173 transformation =
new AliTPCTransformation(tname,
new TBits(mask),
"TPClocaldLydGX",
"TPClocaldRzdGY",0, 0);
1174 transformation->
SetParams(0,0.2,0,&fpar);
1188 for (Int_t i=0; i<=ncos;i++){
1196 sprintf(tname,
"tTPClocalLxIROCOROCSideA_Cos%d",i);
1198 transformation->
SetParams(0,0.03,0,&fpar);
1200 sprintf(tname,
"tTPClocalLxIROCOROCSideC_Cos%d",i);
1202 transformation->
SetParams(0,0.03,0,&fpar);
1208 sprintf(tname,
"tTPClocalLyIROCOROCSideA_Cos%d",i);
1210 transformation->
SetParams(0,0.03,0,&fpar);
1212 sprintf(tname,
"tTPClocalLyIROCOROCSideC_Cos%d",i);
1214 transformation->
SetParams(0,0.03,0,&fpar);
1221 sprintf(tname,
"tTPClocalRzIROCOROCSideA_Cos%d",i);
1223 transformation->
SetParams(0,0.3,0,&fpar);
1225 sprintf(tname,
"tTPClocalRzIROCOROCSideC_Cos%d",i);
1227 transformation->
SetParams(0,0.3,0,&fpar);
1231 for (Int_t i=1; i<=nsin;i++){
1239 sprintf(tname,
"tTPClocalLxIROCOROCSideA_Sin%d",i);
1241 transformation->
SetParams(0,0.03,0,&fpar);
1243 sprintf(tname,
"tTPClocalLxIROCOROCSideC_Sin%d",i);
1245 transformation->
SetParams(0,0.03,0,&fpar);
1251 sprintf(tname,
"tTPClocalLyIROCOROCSideA_Sin%d",i);
1253 transformation->
SetParams(0,0.03,0,&fpar);
1255 sprintf(tname,
"tTPClocalLyIROCOROCSideC_Sin%d",i);
1257 transformation->
SetParams(0,0.03,0,&fpar);
1264 sprintf(tname,
"tTPClocalRzIROCOROCSideA_Sin%d",i);
1266 transformation->
SetParams(0,0.3,0,&fpar);
1268 sprintf(tname,
"tTPClocalRzIROCOROCSideC_Sin%d",i);
1270 transformation->
SetParams(0,0.3,0,&fpar);
1281 for (Int_t i=0; i<=ncos;i++){
1290 sprintf(tname,
"tTPClocalLxSectorSideA_Cos%d",i);
1292 transformation->
SetParams(0,0.03,0,&fpar);
1298 sprintf(tname,
"tTPClocalLySectorSideA_Cos%d",i);
1300 transformation->
SetParams(0,0.03,0,&fpar);
1309 sprintf(tname,
"tTPClocalLxSectorSideC_Cos%d",i);
1311 transformation->
SetParams(0,0.03,0,&fpar);
1316 sprintf(tname,
"tTPClocalLySectorSideC_Cos%d",i);
1318 transformation->
SetParams(0,0.03,0,&fpar);
1324 sprintf(tname,
"tTPClocalRzSectorSideA_Cos%d",i);
1326 transformation->
SetParams(0,0.3,0,&fpar);
1328 sprintf(tname,
"tTPClocalRzSectorSideC_Cos%d",i);
1330 transformation->
SetParams(0,0.3,0,&fpar);
1340 for (Int_t i=1; i<=nsin;i++){
1348 sprintf(tname,
"tTPClocalLxSectorSideA_Sin%d",i);
1350 transformation->
SetParams(0,0.03,0,&fpar);
1352 sprintf(tname,
"tTPClocalLxSectorSideC_Sin%d",i);
1354 transformation->
SetParams(0,0.03,0,&fpar);
1360 sprintf(tname,
"tTPClocalLySectorSideA_Sin%d",i);
1362 transformation->
SetParams(0,0.03,0,&fpar);
1364 sprintf(tname,
"tTPClocalLySectorSideC_Sin%d",i);
1366 transformation->
SetParams(0,0.03,0,&fpar);
1373 sprintf(tname,
"tTPClocalRzSectorSideA_Sin%d",i);
1375 transformation->
SetParams(0,0.3,0,&fpar);
1377 sprintf(tname,
"tTPClocalRzSectorSideC_Sin%d",i);
1379 transformation->
SetParams(0,0.3,0,&fpar);
1385 for (Int_t i=0;i<8;i++){
1394 for (Int_t i=0;i<8;i++){
1403 for (Int_t i=0;i<8;i++){
1415 TF1 fg(
"fg",
"gaus");
1424 for (Int_t i=0; i<8;i++){
1426 his->Fit(&fg,
"",
"", -0.15,0.15);
1427 sideARMS(i,0) = fg.GetParameter(2);
1428 his->SetDirectory(0);
1429 his->SetName(Form(
"Original SideA_%s",his->GetName()));
1430 his->SetTitle(Form(
"Original SideA_%s",his->GetTitle()));
1431 arrayOut.AddLast(his);
1433 his->Fit(&fg,
"",
"", -0.15,0.15);
1434 sideARMS(i,1) = fg.GetParameter(2);
1435 his->SetDirectory(0);
1436 his->SetName(Form(
"Aligned SideA_%s",his->GetName()));
1437 his->SetTitle(Form(
"Aligned SideA_%s",his->GetTitle()));
1438 arrayOut.AddLast(his);
1444 for (Int_t i=0; i<8;i++){
1446 his->Fit(&fg,
"",
"", -0.15,0.15);
1447 sideCRMS(i,0) = fg.GetParameter(2);
1448 his->SetDirectory(0);
1449 his->SetName(Form(
"Original SideC_%s",his->GetName()));
1450 his->SetTitle(Form(
"Original SideC_%s",his->GetTitle()));
1451 arrayOut.AddLast(his);
1453 his->Fit(&fg,
"",
"", -0.15,0.15);
1454 sideCRMS(i,1) = fg.GetParameter(2);
1455 his->SetDirectory(0);
1456 his->SetName(Form(
"Aligned SideC_%s",his->GetName()));
1457 his->SetTitle(Form(
"Aligned SideC_%s",his->GetTitle()));
1458 arrayOut.AddLast(his);
1464 for (Int_t i=0; i<8;i++){
1466 his->Fit(&fg,
"",
"", -0.15,0.15);
1467 sideACRMS(i,0) = fg.GetParameter(2);
1468 his->SetDirectory(0);
1469 his->SetName(Form(
"Original SideAC_%s",his->GetName()));
1470 his->SetTitle(Form(
"Original SideAC_%s",his->GetTitle()));
1471 arrayOut.AddLast(his);
1473 his->Fit(&fg,
"",
"", -0.15,0.15);
1474 sideACRMS(i,1) = fg.GetParameter(2);
1475 his->SetDirectory(0);
1476 his->SetName(Form(
"Aligned SideC_%s",his->GetName()));
1477 his->SetTitle(Form(
"Aligned SideC_%s",his->GetTitle()));
1478 arrayOut.AddLast(his);
1489 TFolder *folderBase =
new TFolder(
"TPC align",
"TPC align");
1492 TString maskDelta[8];
1493 TString maskAlign[2]={
"Orig",
"Alig");
1494 for (Int_t i=0; i<8;i++){
1498 Int_t entries = arrayOut->GetEntries();
1505 void MergeKalman(
const char * list =
"kalmanFit.list"){
1510 TString currentFile;
1518 printf(
"%d\t%d\t%s\n", counter,currentFile.Length(),currentFile.Data());
1519 if (currentFile.Length()==0)
continue;
1521 TEntryList * tlist = (TEntryList*) ffit->Get(
"eventList");
1523 if (tlist&&cMatrix){
1524 printf(
"Track entries=%d\n",tlist->GetN());
1525 if (cMatrix->Sum()<=0.00000001) {
1526 printf(
"Problem with track selection\n");
1530 printf(
"Problem with track selection\n");
1537 if (!kalmanFitNew) {kalmanFitNew=
fit;
continue;};
1538 kalmanFitNew->
Add(fit);
1547 currentFile.ReplaceAll(
"TPC",
"TPCOrig");
1548 printf(
"%d\t%d\t%s\n", counter,currentFile.Length(),currentFile.Data());
1549 if (currentFile.Length()==0)
continue;
1553 if (!kalmanFitOrig) {kalmanFitOrig=
fit;
continue;};
1554 kalmanFitOrig->
Add(fit);
1562 TFile
f(
"mergeKalmanFit.root",
"recreate");
1563 kalmanFitNew->Write(
"kalmanFitNew");
1564 kalmanFitOrig->Write(
"kalmanFitOrig");
Bool_t AddPoint(Int_t i, const AliTrackPoint *p)
THnSparse * fLinearTrackDelta[12]
linear tracks matching residuals - delta
void AddPhiScaling(AliTPCkalmanFit *kalmanFit)
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
TFile * Open(const char *filename, Long64_t &nevents)
const Float_t krmsZcutGlobal
void FitTrackLinear(AliTrackPointArray &points, TTreeSRedirector *debug=0, Float_t scalingRMSY=1., Float_t scalingRMSZ=1.)
TVectorD * EstimateScatteringKalmanLinear(AliTrackPointArray &points, AliExternalTrackParam &p0, AliExternalTrackParam &p1, TTreeSRedirector *pcstream)
AliTPCkalmanFit * kalmanFitApply
void AddFitFieldCage(AliTPCkalmanFit *kalmanFit)
AliTrackPointArray * SkipPoints(AliTrackPointArray &points, Int_t nskip, Int_t nskipOffset)
void AddAlignOROCIROCFourier(AliTPCkalmanFit *kalmanFit, Int_t ncos, Int_t nsin)
void AddAlignSectorFourier(AliTPCkalmanFit *kalmanFit, Int_t ncos, Int_t nsin)
const Float_t * GetY() const
void DumpQA1D(TObjArray &arrayOut)
void TestScattering(Int_t maxTracks, Int_t trackDump)
AliTPCkalmanFit * FitPointsLinear(Int_t maxTracks, Int_t trackDump)
const Float_t krmsYcutGlobal
TTreeSRedirector * pcstream
void CalibAlignKalman(Int_t npoints, Int_t maxFiles, Int_t startFile, Int_t trackDump, Int_t nSkipTrack, Int_t nSkipTrackOffset, Int_t nSkip, Int_t nSkipOffset, Int_t bfilterTest)
void AddZShift(AliTPCkalmanFit *kalmanFit, Int_t ncos, Int_t nsin)
TMatrixD cutMatrix(4 *7, 2)
void PropagateTime(Int_t time)
const UShort_t * GetVolumeID() const
void ApplyCalibration(AliTrackPointArray *array, Double_t csign)
void InitTransformation()
Bool_t GetPoint(AliTrackPoint &p, Int_t i) const
AliTrackPointArray * FilterPoints(AliTrackPointArray &points, Int_t dir, TTreeSRedirector *pcstream)
AliTPCkalmanFit * kalmanFitNew
const Double_t rmsCut09[6]
Bool_t DumpCalib(const char *mask=0, Float_t correlationCut=-1)
AliTPCkalmanFit * kalmanFitOrig
void DumpTrackLinear(AliTrackPointArray &points, TTreeSRedirector *debug)
void AddLocalXYMisalignmentSector(AliTPCkalmanFit *kalmanFit)
AliTrackPointArray * SortPoints(AliTrackPointArray &points)
void QAPointsLinear(Int_t maxTracks, Int_t trackDump)
static AliTrackPointArray * SortPoints(AliTrackPointArray &points)
void AddCalibration(AliTPCTransformation *calib)
static AliMagF::BMap_t mag
void AddDrift(AliTPCkalmanFit *kalmanFit)
void MakeFolders(TObjArray *arrayOut)
static void AddStamp(const char *sname, Int_t id0=-1, Int_t id1=-1, Int_t id2=-1, Int_t id3=-1)
void AddZTilting(AliTPCkalmanFit *kalmanFit, Int_t ncos, Int_t nsin)
class TVectorT< Double_t > TVectorD
void AddLocalXYMisalignment(AliTPCkalmanFit *kalmanFit)
AliTPCkalmanFit * SetupFit()
static void EvaluateUni(const Int_t nvectors, const Double_t *data, Double_t &mean, Double_t &sigma, const Int_t hSub)
void Add(const AliTPCkalmanFit *kalman)
AliTPCkalmanFit * CalibAlignKalmanFit(Int_t maxTracks, Int_t trackDump)
const Float_t * GetZ() const
class TMatrixT< Double_t > TMatrixD
const Float_t * GetX() const