+void AliTPCcalibTime::BookDistortionMaps(){
+ //
+ // Book ndimensional histograms of distortions/residuals
+ // Only primary tracks are selected for analysis
+ //
+
+ Double_t xminTrack[5], xmaxTrack[5];
+ Int_t binsTrack[5];
+ TString axisName[5];
+ TString axisTitle[5];
+ //
+ binsTrack[0] =50;
+ axisName[0] ="#Delta";
+ axisTitle[0] ="#Delta";
+ //
+ binsTrack[1] =20;
+ xminTrack[1] =-1.5; xmaxTrack[1]=1.5;
+ axisName[1] ="tanTheta";
+ axisTitle[1] ="tan(#Theta)";
+ //
+ binsTrack[2] =90;
+ xminTrack[2] =-TMath::Pi(); xmaxTrack[2]=TMath::Pi();
+ axisName[2] ="phi";
+ axisTitle[2] ="#phi";
+ //
+ binsTrack[3] =20;
+ xminTrack[3] =-1.; xmaxTrack[3]=1.; // 0.33 GeV cut
+ axisName[3] ="snp";
+ axisTitle[3] ="snp";
+ //
+ binsTrack[4] =10;
+ xminTrack[4] =120.; xmaxTrack[4]=215.; // crossing radius for CE only
+ axisName[4] ="r";
+ axisTitle[4] ="r(cm)";
+ //
+ // delta y
+ xminTrack[0] =-1.5; xmaxTrack[0]=1.5; //
+ fResHistoTPCCE[0] = new THnSparseS("TPCCE#Delta_{Y} (cm)","#Delta_{Y} (cm)", 5, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCITS[0] = new THnSparseS("TPCITS#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCvertex[0] = new THnSparseS("TPCVertex#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =-1.5; xmaxTrack[0]=1.5; //
+ fResHistoTPCTRD[0] = new THnSparseS("TPCTRD#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =-5; xmaxTrack[0]=5; //
+ fResHistoTPCTOF[0] = new THnSparseS("TPCTOF#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ //
+ // delta z
+ xminTrack[0] =-3.; xmaxTrack[0]=3.; //
+ fResHistoTPCCE[1] = new THnSparseS("TPCCE#Delta_{Z} (cm)","#Delta_{Z} (cm)", 5, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCITS[1] = new THnSparseS("TPCITS#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCvertex[1] = new THnSparseS("TPCVertex#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTRD[1] = new THnSparseS("TPCTRD#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ xminTrack[0] =-5.; xmaxTrack[0]=5.; //
+ fResHistoTPCTOF[1] = new THnSparseS("TPCTOF#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
+ //
+ // delta snp-P2
+ xminTrack[0] =-0.015; xmaxTrack[0]=0.015; //
+ fResHistoTPCCE[2] = new THnSparseS("TPCCE#Delta_{#phi}","#Delta_{#phi}", 5, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCITS[2] = new THnSparseS("TPCITS#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCvertex[2] = new THnSparseS("TPCITSv#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTRD[2] = new THnSparseS("TPCTRD#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTOF[2] = new THnSparseS("TPCTOF#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
+ //
+ // delta theta-P3
+ xminTrack[0] =-0.025; xmaxTrack[0]=0.025; //
+ fResHistoTPCCE[3] = new THnSparseS("TPCCE#Delta_{#theta}","#Delta_{#theta}", 5, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCITS[3] = new THnSparseS("TPCITS#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCvertex[3] = new THnSparseS("TPCITSv#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTRD[3] = new THnSparseS("TPCTRD#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTOF[3] = new THnSparseS("TPCTOF#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
+ //
+ // delta theta-P4
+ xminTrack[0] =-0.2; xmaxTrack[0]=0.2; //
+ fResHistoTPCCE[4] = new THnSparseS("TPCCE#Delta_{1/pt}","#Delta_{1/pt}", 5, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCITS[4] = new THnSparseS("TPCITS#Delta_{1/pt}","#Delta_{1/pt}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCvertex[4] = new THnSparseS("TPCITSv#Delta_{1/pt}","#Delta_{1/pt}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTRD[4] = new THnSparseS("TPCTRD#Delta_{1/pt}","#Delta_{1/pt}", 4, binsTrack,xminTrack, xmaxTrack);
+ fResHistoTPCTOF[4] = new THnSparseS("TPCTOF#Delta_{1/pt}","#Delta_{1/pt}", 4, binsTrack,xminTrack, xmaxTrack);
+ //
+ for (Int_t ivar=0;ivar<4;ivar++){
+ for (Int_t ivar2=0;ivar2<5;ivar2++){
+ fResHistoTPCCE[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+ fResHistoTPCCE[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+ if (ivar2<4){
+ fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+ fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+ fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+ fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+ fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data());
+ fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data());
+ }
+ }
+ }
+}
+
+
+void AliTPCcalibTime::FillResHistoTPCCE(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pTPCOut ){
+ //
+ // fill residual histograms pTPCOut-pTPCin - trac crossing CE
+ // Histogram
+ //
+ Double_t histoX[5];
+ Double_t xyz[3];
+ pTPCIn->GetXYZ(xyz);
+ Double_t phi= TMath::ATan2(xyz[1],xyz[0]);
+ histoX[1]= pTPCIn->GetTgl();
+ histoX[2]= phi;
+ histoX[3]= pTPCIn->GetSnp();
+ histoX[4]= pTPCIn->GetX();
+ AliExternalTrackParam lout(*pTPCOut);
+ lout.Rotate(pTPCIn->GetAlpha());
+ lout.PropagateTo(pTPCIn->GetX(),fMagF);
+ //
+ for (Int_t ihisto=0; ihisto<5; ihisto++){
+ histoX[0]=lout.GetParameter()[ihisto]-pTPCIn->GetParameter()[ihisto];
+ fResHistoTPCCE[ihisto]->Fill(histoX);
+ }
+}
+void AliTPCcalibTime::FillResHistoTPCITS(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pITSOut ){
+ //
+ // fill residual histograms pTPCIn-pITSOut
+ // Histogram is filled only for primary tracks
+ //
+ Double_t histoX[4];
+ Double_t xyz[3];
+ pTPCIn->GetXYZ(xyz);
+ Double_t phi= TMath::ATan2(xyz[1],xyz[0]);
+ histoX[1]= pTPCIn->GetTgl();
+ histoX[2]= phi;
+ histoX[3]= pTPCIn->GetSnp();
+ AliExternalTrackParam lits(*pITSOut);
+ lits.Rotate(pTPCIn->GetAlpha());
+ lits.PropagateTo(pTPCIn->GetX(),fMagF);
+ //
+ for (Int_t ihisto=0; ihisto<5; ihisto++){
+ histoX[0]=pTPCIn->GetParameter()[ihisto]-lits.GetParameter()[ihisto];
+ fResHistoTPCITS[ihisto]->Fill(histoX);
+ }
+}
+
+
+void AliTPCcalibTime::FillResHistoTPC(const AliESDtrack * pTrack){
+ //
+ // fill residual histograms pTPC - vertex
+ // Histogram is filled only for primary tracks
+ //
+ Double_t histoX[4];
+ const AliExternalTrackParam * pTPCIn = pTrack->GetInnerParam();
+ AliExternalTrackParam pTPCvertex(*(pTrack->GetInnerParam()));
+ //
+ AliExternalTrackParam lits(*pTrack);
+ if (TMath::Abs(pTrack->GetY())>3) return; // beam pipe
+ pTPCvertex.Rotate(lits.GetAlpha());
+ //pTPCvertex.PropagateTo(pTPCvertex->GetX(),fMagF);
+ AliTracker::PropagateTrackToBxByBz(&pTPCvertex,lits.GetX(),0.1,2,kFALSE);
+ AliTracker::PropagateTrackToBxByBz(&pTPCvertex,lits.GetX(),0.1,0.1,kFALSE);
+ Double_t xyz[3];
+ pTPCIn->GetXYZ(xyz);
+ Double_t phi= TMath::ATan2(xyz[1],xyz[0]);
+ histoX[1]= pTPCIn->GetTgl();
+ histoX[2]= phi;
+ histoX[3]= pTPCIn->GetSnp();
+ //
+ Float_t dca[2], cov[3];
+ pTrack->GetImpactParametersTPC(dca,cov);
+ for (Int_t ihisto=0; ihisto<5; ihisto++){
+ histoX[0]=pTPCvertex.GetParameter()[ihisto]-lits.GetParameter()[ihisto];
+ // if (ihisto<2) histoX[0]=dca[ihisto];
+ fResHistoTPCvertex[ihisto]->Fill(histoX);
+ }
+}
+
+
+void AliTPCcalibTime::FillResHistoTPCTRD(const AliExternalTrackParam * pTPCOut, const AliExternalTrackParam * pTRDIn ){
+ //
+ // fill resuidual histogram TPCout-TRDin
+ //
+ Double_t histoX[4];
+ Double_t xyz[3];
+ pTPCOut->GetXYZ(xyz);
+ Double_t phi= TMath::ATan2(xyz[1],xyz[0]);
+ histoX[1]= pTPCOut->GetTgl();
+ histoX[2]= phi;
+ histoX[3]= pTPCOut->GetSnp();
+ //
+ AliExternalTrackParam ltrd(*pTRDIn);
+ ltrd.Rotate(pTPCOut->GetAlpha());
+ // ltrd.PropagateTo(pTPCOut->GetX(),fMagF);
+ AliTracker::PropagateTrackToBxByBz(<rd,pTPCOut->GetX(),0.1,0.1,kFALSE);
+
+ for (Int_t ihisto=0; ihisto<5; ihisto++){
+ histoX[0]=pTPCOut->GetParameter()[ihisto]-ltrd.GetParameter()[ihisto];
+ fResHistoTPCTRD[ihisto]->Fill(histoX);
+ }
+
+}
+
+void AliTPCcalibTime::FillResHistoTPCTOF(const AliExternalTrackParam * pTPCOut, const AliExternalTrackParam * pTOFIn ){
+ //
+ // fill resuidual histogram TPCout-TOFin
+ // track propagated to the TOF position
+ Double_t histoX[4];
+ Double_t xyz[3];
+
+ AliExternalTrackParam ltpc(*pTPCOut);
+ ltpc.Rotate(pTOFIn->GetAlpha());
+ AliTracker::PropagateTrackToBxByBz(<pc,pTOFIn->GetX(),0.1,0.1,kFALSE);
+ //
+ ltpc.GetXYZ(xyz);
+ Double_t phi= TMath::ATan2(xyz[1],xyz[0]);
+ histoX[1]= ltpc.GetTgl();
+ histoX[2]= phi;
+ histoX[3]= ltpc.GetSnp();
+ //
+ for (Int_t ihisto=0; ihisto<2; ihisto++){
+ histoX[0]=ltpc.GetParameter()[ihisto]-pTOFIn->GetParameter()[ihisto];
+ fResHistoTPCTOF[ihisto]->Fill(histoX);
+ }
+
+}