// <h2> AliTPCCorrection class </h2>
//
// The AliTPCCorrection class provides a general framework to deal with space point distortions.
// An correction class which inherits from here is for example AliTPCExBBShape or AliTPCExBTwist. <br>
// General virtual functions are (for example) CorrectPoint(x,roc) where x is the vector of initial
// positions in cartesian coordinates and roc represents the read-out chamber number according to
// the offline numbering convention. The vector x is overwritten with the corrected coordinates. <br>
// An alternative usage would be CorrectPoint(x,roc,dx), which leaves the vector x untouched, but
// returns the distortions via the vector dx. <br>
// This class is normally used via the general class AliTPCComposedCorrection.
// <p>
// Furthermore, the class contains basic geometrical descriptions like field cage radii
// (fgkIFCRadius, fgkOFCRadius) and length (fgkTPCZ0) plus the voltages. Also, the definitions
// of size and widths of the fulcrums building the grid of the final look-up table, which is
// then interpolated, is defined in kNX and fgkXList).
// <p>
// All physics-model classes below are derived from this class in order to not duplicate code
// and to allow a uniform treatment of all physics models.
// <p>
// <h3> Poisson solver </h3>
// A numerical solver of the Poisson equation (relaxation technique) is implemented for 2-dimensional
// geometries (r,z) as well as for 3-dimensional problems (r,$\phi$,z). The corresponding function
// names are PoissonRelaxation?D. The relevant function arguments are the arrays of the boundary and
// initial conditions (ArrayofArrayV, ArrayofChargeDensities) as well as the grid granularity which
// is used during the calculation. These inputs can be chosen according to the needs of the physical
// effect which is supposed to be simulated. In the 3D version, different symmetry conditions can be set
// in order to reduce the calculation time (used in AliTPCFCVoltError3D).
// <p>
// <h3> Unified plotting functionality </h3>
// Generic plot functions were implemented. They return a histogram pointer in the chosen plane of
// the TPC drift volume with a selectable grid granularity and the magnitude of the correction vector.
// For example, the function CreateHistoDZinXY(z,nx,ny) returns a 2-dimensional histogram which contains
// the longitudinal corrections $dz$ in the (x,y)-plane at the given z position with the granularity of
// nx and ny. The magnitude of the corrections is defined by the class from which this function is called.
// In the same manner, standard plots for the (r,$\phi$)-plane and for the other corrections like $dr$ and $rd\phi$ are available
// <p>
// Note: This class is normally used via the class AliTPCComposedCorrection
// End_Html
// {
// gROOT->SetStyle("Plain"); gStyle->SetPalette(1);
// TCanvas *c2 = new TCanvas("cAliTPCCorrection","cAliTPCCorrection",700,1050); c2->Divide(2,3);
// AliTPCROCVoltError3D roc; // EXAMPLE PLOTS - SEE BELOW
// roc.SetROCDataFileName("$ALICE_ROOT/TPC/Calib/maps/TPCROCdzSurvey.root");
// roc.SetOmegaTauT1T2(0,1,1); // B=0
// Float_t z0 = 1; // at +1 cm -> A side
// c2->cd(1); roc.CreateHistoDRinXY(1.,300,300)->Draw("cont4z");
// c2->cd(3);roc.CreateHistoDRPhiinXY(1.,300,300)->Draw("cont4z");
// c2->cd(5);roc.CreateHistoDZinXY(1.,300,300)->Draw("cont4z");
// Float_t phi0=0.5;
// c2->cd(2);roc.CreateHistoDRinZR(phi0)->Draw("surf2");
// c2->cd(4);roc.CreateHistoDRPhiinZR(phi0)->Draw("surf2");
// c2->cd(6);roc.CreateHistoDZinZR(phi0)->Draw("surf2");
// return c2;
// }
// End_Macro
// <p>
// Date: 27/04/2010 <br>
// Authors: Magnus Mager, Stefan Rossegger, Jim Thomas
// End_Html
#include "Riostream.h"
#include <TH2F.h>
#include <TMath.h>
#include <TROOT.h>
#include <TTreeStream.h>
#include <TTree.h>
#include <TFile.h>
#include <TTimeStamp.h>
#include <AliCDBStorage.h>
#include <AliCDBId.h>
#include <AliCDBMetaData.h>
#include "TVectorD.h"
#include "AliTPCParamSR.h"
#include "AliTPCCorrection.h"
#include "AliLog.h"
#include "AliExternalTrackParam.h"
#include "AliTrackPointArray.h"
#include "TDatabasePDG.h"
#include "AliTrackerBase.h"
#include "AliTPCROC.h"
#include "THnSparse.h"
#include "AliTPCLaserTrack.h"
#include "AliESDVertex.h"
#include "AliVertexerTracks.h"
#include "TDatabasePDG.h"
#include "TF1.h"
#include "TRandom.h"
#include "TDatabasePDG.h"
#include "AliTPCTransform.h"
#include "AliTPCcalibDB.h"
#include "AliTPCExB.h"
#include "AliTPCRecoParam.h"
#include "TLinearFitter.h"
#include <AliSysInfo.h>
ClassImp(AliTPCCorrection)
TObjArray *AliTPCCorrection::fgVisualCorrection=0;
const Double_t AliTPCCorrection::fgkTPCZ0 = 249.7;
const Double_t AliTPCCorrection::fgkIFCRadius= 83.5;
const Double_t AliTPCCorrection::fgkOFCRadius= 254.5;
const Double_t AliTPCCorrection::fgkZOffSet = 0.2;
const Double_t AliTPCCorrection::fgkCathodeV = -100000.0;
const Double_t AliTPCCorrection::fgkGG = -70.0;
const Double_t AliTPCCorrection::fgkdvdE = 0.0024;
const Double_t AliTPCCorrection::fgkEM = -1.602176487e-19/9.10938215e-31;
const Double_t AliTPCCorrection::fgke0 = 8.854187817e-12;
AliTPCCorrection::AliTPCCorrection()
: TNamed("correction_unity","unity"),fILow(0),fJLow(0),fKLow(0), fT1(1), fT2(1), fIsLocal(kFALSE)
{
if (!fgVisualCorrection) fgVisualCorrection= new TObjArray;
InitLookUpfulcrums();
}
AliTPCCorrection::AliTPCCorrection(const char *name,const char *title)
: TNamed(name,title),fILow(0),fJLow(0),fKLow(0), fT1(1), fT2(1), fIsLocal(kFALSE)
{
if (!fgVisualCorrection) fgVisualCorrection= new TObjArray;
InitLookUpfulcrums();
}
AliTPCCorrection::~AliTPCCorrection() {
}
Bool_t AliTPCCorrection::AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight){
if (corr==NULL) {
AliError("Zerro pointer - correction");
return kFALSE;
}
AliError(TString::Format("Correction %s not implementend",IsA()->GetName()).Data());
return kFALSE;
}
void AliTPCCorrection::CorrectPoint(Float_t x[], Short_t roc) {
Float_t dx[3];
GetCorrection(x,roc,dx);
for (Int_t j=0;j<3;++j) x[j]+=dx[j];
}
void AliTPCCorrection::CorrectPoint(const Float_t x[], Short_t roc,Float_t xp[]) {
Float_t dx[3];
GetCorrection(x,roc,dx);
for (Int_t j=0;j<3;++j) xp[j]=x[j]+dx[j];
}
void AliTPCCorrection::DistortPoint(Float_t x[], Short_t roc) {
Float_t dx[3];
GetDistortion(x,roc,dx);
for (Int_t j=0;j<3;++j) x[j]+=dx[j];
}
void AliTPCCorrection::DistortPointLocal(Float_t x[], Short_t roc) {
Float_t gxyz[3]={0,0,0};
Double_t alpha = TMath::TwoPi()*(roc%18+0.5)/18;
Double_t ca=TMath::Cos(alpha), sa= TMath::Sin(alpha);
gxyz[0]= ca*x[0]+sa*x[1];
gxyz[1]= -sa*x[0]+ca*x[1];
gxyz[2]= x[2];
DistortPoint(gxyz,roc);
x[0]= ca*gxyz[0]-sa*gxyz[1];
x[1]= +sa*gxyz[0]+ca*gxyz[1];
x[2]= gxyz[2];
}
void AliTPCCorrection::CorrectPointLocal(Float_t x[], Short_t roc) {
Float_t gxyz[3]={0,0,0};
Double_t alpha = TMath::TwoPi()*(roc%18+0.5)/18;
Double_t ca=TMath::Cos(alpha), sa= TMath::Sin(alpha);
gxyz[0]= ca*x[0]+sa*x[1];
gxyz[1]= -sa*x[0]+ca*x[1];
gxyz[2]= x[2];
CorrectPoint(gxyz,roc);
x[0]= ca*gxyz[0]-sa*gxyz[1];
x[1]= sa*gxyz[0]+ca*gxyz[1];
x[2]= gxyz[2];
}
void AliTPCCorrection::DistortPoint(const Float_t x[], Short_t roc,Float_t xp[]) {
Float_t dx[3];
GetDistortion(x,roc,dx);
for (Int_t j=0;j<3;++j) xp[j]=x[j]+dx[j];
}
void AliTPCCorrection::GetCorrection(const Float_t [], Short_t ,Float_t dx[]) {
for (Int_t j=0;j<3;++j) { dx[j]=0.; }
}
void AliTPCCorrection::GetDistortion(const Float_t x[], Short_t roc,Float_t dx[]) {
GetCorrection(x,roc,dx);
for (Int_t j=0;j<3;++j) dx[j]=-dx[j];
}
void AliTPCCorrection::GetCorrectionDz(const Float_t x[], Short_t roc,Float_t dx[], Float_t delta) {
static TLinearFitter fitx(2,"pol1");
static TLinearFitter fity(2,"pol1");
static TLinearFitter fitz(2,"pol1");
fitx.ClearPoints();
fity.ClearPoints();
fitz.ClearPoints();
Int_t zmin=-2;
Int_t zmax=0;
if ((roc%36)<18) {
if ((x[2]+zmin*delta)<0){
zmin=0;
zmax=2;
if ((x[2]-delta)>0){
zmin=-1;
zmax=1;
}
}
} else {
zmin=0;
zmax=2;
if ((x[2]+zmax*delta)>0){
zmin=-2;
zmax=0;
if ((x[2]+delta)<0){
zmin=-1;
zmax=1;
}
}
}
for (Int_t xdelta=-1; xdelta<=1; xdelta++)
for (Int_t ydelta=-1; ydelta<=1; ydelta++){
for (Int_t zdelta=zmin; zdelta<=zmax; zdelta++){
Float_t xyz[3]={x[0]+xdelta*delta, x[1]+ydelta*delta, x[2]+zdelta*delta};
Float_t dxyz[3];
GetCorrection(xyz,roc,dxyz);
Double_t adelta=zdelta*delta;
fitx.AddPoint(&adelta, dxyz[0]);
fity.AddPoint(&adelta, dxyz[1]);
fitz.AddPoint(&adelta, dxyz[2]);
}
}
fitx.Eval();
fity.Eval();
fitz.Eval();
dx[0] = fitx.GetParameter(1);
dx[1] = fity.GetParameter(1);
dx[2] = fitz.GetParameter(1);
}
void AliTPCCorrection::GetDistortionDz(const Float_t x[], Short_t roc,Float_t dx[], Float_t delta) {
static TLinearFitter fitx(2,"pol1");
static TLinearFitter fity(2,"pol1");
static TLinearFitter fitz(2,"pol1");
fitx.ClearPoints();
fity.ClearPoints();
fitz.ClearPoints();
Int_t zmin=-1;
Int_t zmax=1;
if ((roc%36)<18) {
if ((x[2]+zmin*delta)<0){
zmin=0;
zmax=2;
}
} else {
if ((x[2]+zmax*delta)>0){
zmin=-2;
zmax=0;
}
}
for (Int_t xdelta=-1; xdelta<=1; xdelta++)
for (Int_t ydelta=-1; ydelta<=1; ydelta++){
for (Int_t zdelta=zmin; zdelta<=zmax; zdelta++){
Float_t xyz[3]={x[0]+xdelta*delta, x[1]+ydelta*delta, x[2]+zdelta*delta};
Float_t dxyz[3];
GetDistortion(xyz,roc,dxyz);
Double_t adelta=zdelta*delta;
fitx.AddPoint(&adelta, dxyz[0]);
fity.AddPoint(&adelta, dxyz[1]);
fitz.AddPoint(&adelta, dxyz[2]);
}
}
fitx.Eval();
fity.Eval();
fitz.Eval();
dx[0] = fitx.GetParameter(1);
dx[1] = fity.GetParameter(1);
dx[2] = fitz.GetParameter(1);
}
void AliTPCCorrection::GetCorrectionIntegralDz(const Float_t x[], Short_t roc,Float_t dx[], Float_t delta){
Float_t zroc= ((roc%36)<18) ? fgkTPCZ0:-fgkTPCZ0;
Double_t zdrift = TMath::Abs(x[2]-zroc);
Int_t nsteps = Int_t(zdrift/delta)+1;
Float_t xyz[3]={x[0],x[1],zroc};
Float_t dxyz[3]={x[0],x[1],x[2]};
Short_t side=(roc/18)%2;
Float_t sign=1-2*side;
Double_t sumdz=0;
for (Int_t i=0;i<nsteps; i++){
Float_t deltaZ=delta*(-sign);
if (side==0){
if (xyz[2]+deltaZ<0) deltaZ=-xyz[2]+1e-20;
} else {
if (xyz[2]+deltaZ>0) deltaZ=xyz[2]-+1e-20;
}
Float_t xyz2[3]={xyz[0],xyz[1],static_cast<Float_t>(xyz[2]+deltaZ/2.)};
GetCorrectionDz(xyz2,roc,dxyz,delta/2.);
xyz[0]+=deltaZ*dxyz[0];
xyz[1]+=deltaZ*dxyz[1];
xyz[2]+=deltaZ;
sumdz+=deltaZ*dxyz[2];
}
dx[0]=xyz[0]-x[0];
dx[1]=xyz[1]-x[1];
dx[2]= sumdz;
}
void AliTPCCorrection::GetDistortionIntegralDz(const Float_t x[], Short_t roc,Float_t dx[], Float_t delta){
Float_t zroc= ((roc%36)<18) ? fgkTPCZ0:-fgkTPCZ0;
Double_t zdrift = TMath::Abs(x[2]-zroc);
Int_t nsteps = Int_t(zdrift/delta)+1;
Float_t xyz[3]={x[0],x[1],x[2]};
Float_t dxyz[3]={x[0],x[1],x[2]};
Float_t sign=((roc%36)<18) ? 1.:-1.;
Double_t sumdz=0;
for (Int_t i=0;i<nsteps; i++){
Float_t deltaZ=delta;
if (xyz[2]+deltaZ>fgkTPCZ0) deltaZ=TMath::Abs(xyz[2]-zroc);
if (xyz[2]-deltaZ<-fgkTPCZ0) deltaZ=TMath::Abs(xyz[2]-zroc);
deltaZ*=sign;
Float_t xyz2[3]={xyz[0],xyz[1],static_cast<Float_t>(xyz[2]+deltaZ/2.)};
GetDistortionDz(xyz2,roc,dxyz,delta/2.);
xyz[0]+=-deltaZ*dxyz[0];
xyz[1]+=-deltaZ*dxyz[1];
xyz[2]+=deltaZ;
sumdz+=-deltaZ*dxyz[2];
}
dx[0]=xyz[0]-x[0];
dx[1]=xyz[1]-x[1];
dx[2]= sumdz;
}
void AliTPCCorrection::Init() {
}
void AliTPCCorrection::Update(const TTimeStamp &) {
}
void AliTPCCorrection::Print(Option_t* ) const {
printf("TPC spacepoint correction: \"%s\"\n",GetTitle());
}
void AliTPCCorrection:: SetOmegaTauT1T2(Float_t ,Float_t t1,Float_t t2) {
fT1=t1;
fT2=t2;
}
TH2F* AliTPCCorrection::CreateHistoDRinXY(Float_t z,Int_t nx,Int_t ny) {
AliTPCParam* tpcparam = new AliTPCParamSR;
TH2F *h=CreateTH2F("dr_xy",GetTitle(),"x [cm]","y [cm]","dr [cm]",
nx,-250.,250.,ny,-250.,250.);
Float_t x[3],dx[3];
x[2]=z;
Int_t roc=z>0.?0:18;
for (Int_t iy=1;iy<=ny;++iy) {
x[1]=h->GetYaxis()->GetBinCenter(iy);
for (Int_t ix=1;ix<=nx;++ix) {
x[0]=h->GetXaxis()->GetBinCenter(ix);
GetCorrection(x,roc,dx);
Float_t r0=TMath::Sqrt((x[0] )*(x[0] )+(x[1] )*(x[1] ));
if (tpcparam->GetPadRowRadii(0,0)<=r0 && r0<=tpcparam->GetPadRowRadii(36,95)) {
Float_t r1=TMath::Sqrt((x[0]+dx[0])*(x[0]+dx[0])+(x[1]+dx[1])*(x[1]+dx[1]));
h->SetBinContent(ix,iy,r1-r0);
}
else
h->SetBinContent(ix,iy,0.);
}
}
delete tpcparam;
return h;
}
TH2F* AliTPCCorrection::CreateHistoDRPhiinXY(Float_t z,Int_t nx,Int_t ny) {
AliTPCParam* tpcparam = new AliTPCParamSR;
TH2F *h=CreateTH2F("drphi_xy",GetTitle(),"x [cm]","y [cm]","drphi [cm]",
nx,-250.,250.,ny,-250.,250.);
Float_t x[3],dx[3];
x[2]=z;
Int_t roc=z>0.?0:18;
for (Int_t iy=1;iy<=ny;++iy) {
x[1]=h->GetYaxis()->GetBinCenter(iy);
for (Int_t ix=1;ix<=nx;++ix) {
x[0]=h->GetXaxis()->GetBinCenter(ix);
GetCorrection(x,roc,dx);
Float_t r0=TMath::Sqrt((x[0] )*(x[0] )+(x[1] )*(x[1] ));
if (tpcparam->GetPadRowRadii(0,0)<=r0 && r0<=tpcparam->GetPadRowRadii(36,95)) {
Float_t phi0=TMath::ATan2(x[1] ,x[0] );
Float_t phi1=TMath::ATan2(x[1]+dx[1],x[0]+dx[0]);
Float_t dphi=phi1-phi0;
if (dphi<TMath::Pi()) dphi+=TMath::TwoPi();
if (dphi>TMath::Pi()) dphi-=TMath::TwoPi();
h->SetBinContent(ix,iy,r0*dphi);
}
else
h->SetBinContent(ix,iy,0.);
}
}
delete tpcparam;
return h;
}
TH2F* AliTPCCorrection::CreateHistoDZinXY(Float_t z,Int_t nx,Int_t ny) {
AliTPCParam* tpcparam = new AliTPCParamSR;
TH2F *h=CreateTH2F("dz_xy",GetTitle(),"x [cm]","y [cm]","dz [cm]",
nx,-250.,250.,ny,-250.,250.);
Float_t x[3],dx[3];
x[2]=z;
Int_t roc=z>0.?0:18;
for (Int_t iy=1;iy<=ny;++iy) {
x[1]=h->GetYaxis()->GetBinCenter(iy);
for (Int_t ix=1;ix<=nx;++ix) {
x[0]=h->GetXaxis()->GetBinCenter(ix);
GetCorrection(x,roc,dx);
Float_t r0=TMath::Sqrt((x[0] )*(x[0] )+(x[1] )*(x[1] ));
if (tpcparam->GetPadRowRadii(0,0)<=r0 && r0<=tpcparam->GetPadRowRadii(36,95)) {
h->SetBinContent(ix,iy,dx[2]);
}
else
h->SetBinContent(ix,iy,0.);
}
}
delete tpcparam;
return h;
}
TH2F* AliTPCCorrection::CreateHistoDRinZR(Float_t phi,Int_t nz,Int_t nr) {
TH2F *h=CreateTH2F("dr_zr",GetTitle(),"z [cm]","r [cm]","dr [cm]",
nz,-250.,250.,nr,85.,250.);
Float_t x[3],dx[3];
for (Int_t ir=1;ir<=nr;++ir) {
Float_t radius=h->GetYaxis()->GetBinCenter(ir);
x[0]=radius*TMath::Cos(phi);
x[1]=radius*TMath::Sin(phi);
for (Int_t iz=1;iz<=nz;++iz) {
x[2]=h->GetXaxis()->GetBinCenter(iz);
Int_t roc=x[2]>0.?0:18;
GetCorrection(x,roc,dx);
Float_t r0=TMath::Sqrt((x[0] )*(x[0] )+(x[1] )*(x[1] ));
Float_t r1=TMath::Sqrt((x[0]+dx[0])*(x[0]+dx[0])+(x[1]+dx[1])*(x[1]+dx[1]));
h->SetBinContent(iz,ir,r1-r0);
}
}
return h;
}
TH2F* AliTPCCorrection::CreateHistoDRPhiinZR(Float_t phi,Int_t nz,Int_t nr) {
TH2F *h=CreateTH2F("drphi_zr",GetTitle(),"z [cm]","r [cm]","drphi [cm]",
nz,-250.,250.,nr,85.,250.);
Float_t x[3],dx[3];
for (Int_t iz=1;iz<=nz;++iz) {
x[2]=h->GetXaxis()->GetBinCenter(iz);
Int_t roc=x[2]>0.?0:18;
for (Int_t ir=1;ir<=nr;++ir) {
Float_t radius=h->GetYaxis()->GetBinCenter(ir);
x[0]=radius*TMath::Cos(phi);
x[1]=radius*TMath::Sin(phi);
GetCorrection(x,roc,dx);
Float_t r0=TMath::Sqrt((x[0] )*(x[0] )+(x[1] )*(x[1] ));
Float_t phi0=TMath::ATan2(x[1] ,x[0] );
Float_t phi1=TMath::ATan2(x[1]+dx[1],x[0]+dx[0]);
Float_t dphi=phi1-phi0;
if (dphi<TMath::Pi()) dphi+=TMath::TwoPi();
if (dphi>TMath::Pi()) dphi-=TMath::TwoPi();
h->SetBinContent(iz,ir,r0*dphi);
}
}
return h;
}
TH2F* AliTPCCorrection::CreateHistoDZinZR(Float_t phi,Int_t nz,Int_t nr) {
TH2F *h=CreateTH2F("dz_zr",GetTitle(),"z [cm]","r [cm]","dz [cm]",
nz,-250.,250.,nr,85.,250.);
Float_t x[3],dx[3];
for (Int_t ir=1;ir<=nr;++ir) {
Float_t radius=h->GetYaxis()->GetBinCenter(ir);
x[0]=radius*TMath::Cos(phi);
x[1]=radius*TMath::Sin(phi);
for (Int_t iz=1;iz<=nz;++iz) {
x[2]=h->GetXaxis()->GetBinCenter(iz);
Int_t roc=x[2]>0.?0:18;
GetCorrection(x,roc,dx);
h->SetBinContent(iz,ir,dx[2]);
}
}
return h;
}
TH2F* AliTPCCorrection::CreateTH2F(const char *name,const char *title,
const char *xlabel,const char *ylabel,const char *zlabel,
Int_t nbinsx,Double_t xlow,Double_t xup,
Int_t nbinsy,Double_t ylow,Double_t yup) {
TString hname=name;
Int_t i=0;
if (gDirectory) {
while (gDirectory->FindObject(hname.Data())) {
hname =name;
hname+="_";
hname+=i;
++i;
}
}
TH2F *h=new TH2F(hname.Data(),title,
nbinsx,xlow,xup,
nbinsy,ylow,yup);
h->GetXaxis()->SetTitle(xlabel);
h->GetYaxis()->SetTitle(ylabel);
h->GetZaxis()->SetTitle(zlabel);
h->SetStats(0);
return h;
}
void AliTPCCorrection::Interpolate2DEdistortion( Int_t order, Double_t r, Double_t z,
const Double_t er[kNZ][kNR], Double_t &erValue ) {
Double_t saveEr[5] = {0,0,0,0,0};
Search( kNZ, fgkZList, z, fJLow ) ;
Search( kNR, fgkRList, r, fKLow ) ;
if ( fJLow < 0 ) fJLow = 0 ;
if ( fKLow < 0 ) fKLow = 0 ;
if ( fJLow + order >= kNZ - 1 ) fJLow = kNZ - 1 - order ;
if ( fKLow + order >= kNR - 1 ) fKLow = kNR - 1 - order ;
for ( Int_t j = fJLow ; j < fJLow + order + 1 ; j++ ) {
saveEr[j-fJLow] = Interpolate( &fgkRList[fKLow], &er[j][fKLow], order, r ) ;
}
erValue = Interpolate( &fgkZList[fJLow], saveEr, order, z ) ;
}
void AliTPCCorrection::Interpolate3DEdistortion( Int_t order, Double_t r, Float_t phi, Double_t z,
const Double_t er[kNZ][kNPhi][kNR], const Double_t ephi[kNZ][kNPhi][kNR], const Double_t ez[kNZ][kNPhi][kNR],
Double_t &erValue, Double_t &ephiValue, Double_t &ezValue) {
Double_t saveEr[5]= {0,0,0,0,0};
Double_t savedEr[5]= {0,0,0,0,0} ;
Double_t saveEphi[5]= {0,0,0,0,0};
Double_t savedEphi[5]= {0,0,0,0,0} ;
Double_t saveEz[5]= {0,0,0,0,0};
Double_t savedEz[5]= {0,0,0,0,0} ;
Search( kNZ, fgkZList, z, fILow ) ;
Search( kNPhi, fgkPhiList, z, fJLow ) ;
Search( kNR, fgkRList, r, fKLow ) ;
if ( fILow < 0 ) fILow = 0 ;
if ( fJLow < 0 ) fJLow = 0 ;
if ( fKLow < 0 ) fKLow = 0 ;
if ( fILow + order >= kNZ - 1 ) fILow = kNZ - 1 - order ;
if ( fJLow + order >= kNPhi - 1 ) fJLow = kNPhi - 1 - order ;
if ( fKLow + order >= kNR - 1 ) fKLow = kNR - 1 - order ;
for ( Int_t i = fILow ; i < fILow + order + 1 ; i++ ) {
for ( Int_t j = fJLow ; j < fJLow + order + 1 ; j++ ) {
saveEr[j-fJLow] = Interpolate( &fgkRList[fKLow], &er[i][j][fKLow], order, r ) ;
saveEphi[j-fJLow] = Interpolate( &fgkRList[fKLow], &ephi[i][j][fKLow], order, r ) ;
saveEz[j-fJLow] = Interpolate( &fgkRList[fKLow], &ez[i][j][fKLow], order, r ) ;
}
savedEr[i-fILow] = Interpolate( &fgkPhiList[fJLow], saveEr, order, phi ) ;
savedEphi[i-fILow] = Interpolate( &fgkPhiList[fJLow], saveEphi, order, phi ) ;
savedEz[i-fILow] = Interpolate( &fgkPhiList[fJLow], saveEz, order, phi ) ;
}
erValue = Interpolate( &fgkZList[fILow], savedEr, order, z ) ;
ephiValue = Interpolate( &fgkZList[fILow], savedEphi, order, z ) ;
ezValue = Interpolate( &fgkZList[fILow], savedEz, order, z ) ;
}
Double_t AliTPCCorrection::Interpolate2DTable( Int_t order, Double_t x, Double_t y,
Int_t nx, Int_t ny, const Double_t xv[], const Double_t yv[],
const TMatrixD &array ) {
static Int_t jlow = 0, klow = 0 ;
Double_t saveArray[5] = {0,0,0,0,0} ;
Search( nx, xv, x, jlow ) ;
Search( ny, yv, y, klow ) ;
if ( jlow < 0 ) jlow = 0 ;
if ( klow < 0 ) klow = 0 ;
if ( jlow + order >= nx - 1 ) jlow = nx - 1 - order ;
if ( klow + order >= ny - 1 ) klow = ny - 1 - order ;
for ( Int_t j = jlow ; j < jlow + order + 1 ; j++ )
{
Double_t *ajkl = &((TMatrixD&)array)(j,klow);
saveArray[j-jlow] = Interpolate( &yv[klow], ajkl , order, y ) ;
}
return( Interpolate( &xv[jlow], saveArray, order, x ) ) ;
}
Double_t AliTPCCorrection::Interpolate3DTable( Int_t order, Double_t x, Double_t y, Double_t z,
Int_t nx, Int_t ny, Int_t nz,
const Double_t xv[], const Double_t yv[], const Double_t zv[],
TMatrixD **arrayofArrays ) {
static Int_t ilow = 0, jlow = 0, klow = 0 ;
Double_t saveArray[5]= {0,0,0,0,0};
Double_t savedArray[5]= {0,0,0,0,0} ;
Search( nx, xv, x, ilow ) ;
Search( ny, yv, y, jlow ) ;
Search( nz, zv, z, klow ) ;
if ( ilow < 0 ) ilow = 0 ;
if ( jlow < 0 ) jlow = 0 ;
if ( klow < 0 ) klow = 0 ;
if ( ilow + order >= nx - 1 ) ilow = nx - 1 - order ;
if ( jlow + order >= ny - 1 ) jlow = ny - 1 - order ;
if ( klow + order >= nz - 1 ) klow = nz - 1 - order ;
for ( Int_t k = klow ; k < klow + order + 1 ; k++ )
{
TMatrixD &table = *arrayofArrays[k] ;
for ( Int_t i = ilow ; i < ilow + order + 1 ; i++ )
{
saveArray[i-ilow] = Interpolate( &yv[jlow], &table(i,jlow), order, y ) ;
}
savedArray[k-klow] = Interpolate( &xv[ilow], saveArray, order, x ) ;
}
return( Interpolate( &zv[klow], savedArray, order, z ) ) ;
}
Double_t AliTPCCorrection::Interpolate( const Double_t xArray[], const Double_t yArray[],
Int_t order, Double_t x ) {
Double_t y ;
if ( order == 2 ) {
y = (x-xArray[1]) * (x-xArray[2]) * yArray[0] / ( (xArray[0]-xArray[1]) * (xArray[0]-xArray[2]) ) ;
y += (x-xArray[2]) * (x-xArray[0]) * yArray[1] / ( (xArray[1]-xArray[2]) * (xArray[1]-xArray[0]) ) ;
y += (x-xArray[0]) * (x-xArray[1]) * yArray[2] / ( (xArray[2]-xArray[0]) * (xArray[2]-xArray[1]) ) ;
} else {
y = yArray[0] + ( yArray[1]-yArray[0] ) * ( x-xArray[0] ) / ( xArray[1] - xArray[0] ) ;
}
return (y);
}
Float_t AliTPCCorrection::Interpolate2DTable( Int_t order, Double_t x, Double_t y,
Int_t nx, Int_t ny, const Double_t xv[], const Double_t yv[],
const TMatrixF &array ) {
static Int_t jlow = 0, klow = 0 ;
Float_t saveArray[5] = {0.,0.,0.,0.,0.} ;
Search( nx, xv, x, jlow ) ;
Search( ny, yv, y, klow ) ;
if ( jlow < 0 ) jlow = 0 ;
if ( klow < 0 ) klow = 0 ;
if ( jlow + order >= nx - 1 ) jlow = nx - 1 - order ;
if ( klow + order >= ny - 1 ) klow = ny - 1 - order ;
for ( Int_t j = jlow ; j < jlow + order + 1 ; j++ )
{
Float_t *ajkl = &((TMatrixF&)array)(j,klow);
saveArray[j-jlow] = Interpolate( &yv[klow], ajkl , order, y ) ;
}
return( Interpolate( &xv[jlow], saveArray, order, x ) ) ;
}
Float_t AliTPCCorrection::Interpolate3DTable( Int_t order, Double_t x, Double_t y, Double_t z,
Int_t nx, Int_t ny, Int_t nz,
const Double_t xv[], const Double_t yv[], const Double_t zv[],
TMatrixF **arrayofArrays ) {
static Int_t ilow = 0, jlow = 0, klow = 0 ;
Float_t saveArray[5]= {0.,0.,0.,0.,0.};
Float_t savedArray[5]= {0.,0.,0.,0.,0.} ;
Search( nx, xv, x, ilow ) ;
Search( ny, yv, y, jlow ) ;
Search( nz, zv, z, klow ) ;
if ( ilow < 0 ) ilow = 0 ;
if ( jlow < 0 ) jlow = 0 ;
if ( klow < 0 ) klow = 0 ;
if ( ilow + order >= nx - 1 ) ilow = nx - 1 - order ;
if ( jlow + order >= ny - 1 ) jlow = ny - 1 - order ;
if ( klow + order >= nz - 1 ) klow = nz - 1 - order ;
for ( Int_t k = klow ; k < klow + order + 1 ; k++ )
{
TMatrixF &table = *arrayofArrays[k] ;
for ( Int_t i = ilow ; i < ilow + order + 1 ; i++ )
{
saveArray[i-ilow] = Interpolate( &yv[jlow], &table(i,jlow), order, y ) ;
}
savedArray[k-klow] = Interpolate( &xv[ilow], saveArray, order, x ) ;
}
return( Interpolate( &zv[klow], savedArray, order, z ) ) ;
}
Float_t AliTPCCorrection::Interpolate( const Double_t xArray[], const Float_t yArray[],
Int_t order, Double_t x ) {
Float_t y ;
if ( order == 2 ) {
y = (x-xArray[1]) * (x-xArray[2]) * yArray[0] / ( (xArray[0]-xArray[1]) * (xArray[0]-xArray[2]) ) ;
y += (x-xArray[2]) * (x-xArray[0]) * yArray[1] / ( (xArray[1]-xArray[2]) * (xArray[1]-xArray[0]) ) ;
y += (x-xArray[0]) * (x-xArray[1]) * yArray[2] / ( (xArray[2]-xArray[0]) * (xArray[2]-xArray[1]) ) ;
} else {
y = yArray[0] + ( yArray[1]-yArray[0] ) * ( x-xArray[0] ) / ( xArray[1] - xArray[0] ) ;
}
return (y);
}
void AliTPCCorrection::Search( Int_t n, const Double_t xArray[], Double_t x, Int_t &low ) {
Long_t middle, high ;
Int_t ascend = 0, increment = 1 ;
if ( xArray[n-1] >= xArray[0] ) ascend = 1 ;
if ( low < 0 || low > n-1 ) {
low = -1 ; high = n ;
} else {
if ( (Int_t)( x >= xArray[low] ) == ascend ) {
if ( low == n-1 ) return ;
high = low + 1 ;
while ( (Int_t)( x >= xArray[high] ) == ascend ) {
low = high ;
increment *= 2 ;
high = low + increment ;
if ( high > n-1 ) { high = n ; break ; }
}
} else {
if ( low == 0 ) { low = -1 ; return ; }
high = low - 1 ;
while ( (Int_t)( x < xArray[low] ) == ascend ) {
high = low ;
increment *= 2 ;
if ( increment >= high ) { low = -1 ; break ; }
else low = high - increment ;
}
}
}
while ( (high-low) != 1 ) {
middle = ( high + low ) / 2 ;
if ( (Int_t)( x >= xArray[middle] ) == ascend )
low = middle ;
else
high = middle ;
}
if ( x == xArray[n-1] ) low = n-2 ;
if ( x == xArray[0] ) low = 0 ;
}
void AliTPCCorrection::InitLookUpfulcrums() {
AliTPCROC * roc = AliTPCROC::Instance();
const Double_t rLow = TMath::Floor(roc->GetPadRowRadii(0,0))-1;
fgkRList[0] = rLow;
for (Int_t i = 1; i<kNR; i++) {
fgkRList[i] = fgkRList[i-1] + 3.5;
if (fgkRList[i]<90 ||fgkRList[i]>245)
fgkRList[i] = fgkRList[i-1] + 0.5;
else if (fgkRList[i]<100 || fgkRList[i]>235)
fgkRList[i] = fgkRList[i-1] + 1.5;
else if (fgkRList[i]<120 || fgkRList[i]>225)
fgkRList[i] = fgkRList[i-1] + 2.5;
}
fgkZList[0] = -249.5;
fgkZList[kNZ-1] = 249.5;
for (Int_t j = 1; j<kNZ/2; j++) {
fgkZList[j] = fgkZList[j-1];
if (TMath::Abs(fgkZList[j])< 0.15)
fgkZList[j] = fgkZList[j-1] + 0.09;
else if(TMath::Abs(fgkZList[j])< 0.6)
fgkZList[j] = fgkZList[j-1] + 0.4;
else if (TMath::Abs(fgkZList[j])< 2.5 || TMath::Abs(fgkZList[j])>248)
fgkZList[j] = fgkZList[j-1] + 0.5;
else if (TMath::Abs(fgkZList[j])<10 || TMath::Abs(fgkZList[j])>235)
fgkZList[j] = fgkZList[j-1] + 1.5;
else if (TMath::Abs(fgkZList[j])<25 || TMath::Abs(fgkZList[j])>225)
fgkZList[j] = fgkZList[j-1] + 2.5;
else
fgkZList[j] = fgkZList[j-1] + 4;
fgkZList[kNZ-j-1] = -fgkZList[j];
}
for (Int_t k = 0; k<kNPhi; k++)
fgkPhiList[k] = TMath::TwoPi()*k/(kNPhi-1);
}
void AliTPCCorrection::PoissonRelaxation2D(TMatrixD &arrayV, TMatrixD &chargeDensity,
TMatrixD &arrayErOverEz, TMatrixD &arrayDeltaEz,
Int_t rows, Int_t columns, Int_t iterations,
Bool_t rocDisplacement ) {
Double_t ezField = (fgkCathodeV-fgkGG)/fgkTPCZ0;
const Float_t gridSizeR = (fgkOFCRadius-fgkIFCRadius) / (rows-1) ;
const Float_t gridSizeZ = fgkTPCZ0 / (columns-1) ;
const Float_t ratio = gridSizeR*gridSizeR / (gridSizeZ*gridSizeZ) ;
TMatrixD arrayEr(rows,columns) ;
TMatrixD arrayEz(rows,columns) ;
if ( !IsPowerOfTwo(rows-1) ) {
AliError("PoissonRelaxation - Error in the number of rows. Must be 2**M - 1");
return;
}
if ( !IsPowerOfTwo(columns-1) ) {
AliError("PoissonRelaxation - Error in the number of columns. Must be 2**N - 1");
return;
}
Int_t iOne = (rows-1)/4 ;
Int_t jOne = (columns-1)/4 ;
Int_t loops = 1 + (int) ( 0.5 + TMath::Log2( (double) TMath::Max(iOne,jOne) ) ) ;
for ( Int_t count = 0 ; count < loops ; count++ ) {
Float_t tempGridSizeR = gridSizeR * iOne ;
Float_t tempRatio = ratio * iOne * iOne / ( jOne * jOne ) ;
Float_t tempFourth = 1.0 / (2.0 + 2.0*tempRatio) ;
std::vector<float> coef1(rows) ;
std::vector<float> coef2(rows) ;
for ( Int_t i = iOne ; i < rows-1 ; i+=iOne ) {
Float_t radius = fgkIFCRadius + i*gridSizeR ;
coef1[i] = 1.0 + tempGridSizeR/(2*radius);
coef2[i] = 1.0 - tempGridSizeR/(2*radius);
}
TMatrixD sumChargeDensity(rows,columns) ;
for ( Int_t i = iOne ; i < rows-1 ; i += iOne ) {
Float_t radius = fgkIFCRadius + iOne*gridSizeR ;
for ( Int_t j = jOne ; j < columns-1 ; j += jOne ) {
if ( iOne == 1 && jOne == 1 ) sumChargeDensity(i,j) = chargeDensity(i,j) ;
else {
Float_t weight = 0.0 ;
Float_t sum = 0.0 ;
sumChargeDensity(i,j) = 0.0 ;
for ( Int_t ii = i-iOne/2 ; ii <= i+iOne/2 ; ii++ ) {
for ( Int_t jj = j-jOne/2 ; jj <= j+jOne/2 ; jj++ ) {
if ( ii == i-iOne/2 || ii == i+iOne/2 || jj == j-jOne/2 || jj == j+jOne/2 ) weight = 0.5 ;
else
weight = 1.0 ;
sumChargeDensity(i,j) += chargeDensity(ii,jj)*weight*radius ;
sum += weight*radius ;
}
}
sumChargeDensity(i,j) /= sum ;
}
sumChargeDensity(i,j) *= tempGridSizeR*tempGridSizeR;
}
}
for ( Int_t k = 1 ; k <= iterations; k++ ) {
Float_t overRelax = 1.0 + TMath::Sqrt( TMath::Cos( (k*TMath::PiOver2())/iterations ) ) ;
Float_t overRelaxM1 = overRelax - 1.0 ;
Float_t overRelaxtempFourth, overRelaxcoef5 ;
overRelaxtempFourth = overRelax * tempFourth ;
overRelaxcoef5 = overRelaxM1 / overRelaxtempFourth ;
for ( Int_t i = iOne ; i < rows-1 ; i += iOne ) {
for ( Int_t j = jOne ; j < columns-1 ; j += jOne ) {
arrayV(i,j) = ( coef2[i] * arrayV(i-iOne,j)
+ tempRatio * ( arrayV(i,j-jOne) + arrayV(i,j+jOne) )
- overRelaxcoef5 * arrayV(i,j)
+ coef1[i] * arrayV(i+iOne,j)
+ sumChargeDensity(i,j)
) * overRelaxtempFourth;
}
}
if ( k == iterations ) {
for ( Int_t i = iOne ; i < rows-1 ; i += iOne ) {
for ( Int_t j = jOne ; j < columns-1 ; j += jOne ) {
if ( iOne > 1 ) {
arrayV(i+iOne/2,j) = ( arrayV(i+iOne,j) + arrayV(i,j) ) / 2 ;
if ( i == iOne ) arrayV(i-iOne/2,j) = ( arrayV(0,j) + arrayV(iOne,j) ) / 2 ;
}
if ( jOne > 1 ) {
arrayV(i,j+jOne/2) = ( arrayV(i,j+jOne) + arrayV(i,j) ) / 2 ;
if ( j == jOne ) arrayV(i,j-jOne/2) = ( arrayV(i,0) + arrayV(i,jOne) ) / 2 ;
}
if ( iOne > 1 && jOne > 1 ) {
arrayV(i+iOne/2,j+jOne/2) = ( arrayV(i+iOne,j+jOne) + arrayV(i,j) ) / 2 ;
if ( i == iOne ) arrayV(i-iOne/2,j-jOne/2) = ( arrayV(0,j-jOne) + arrayV(iOne,j) ) / 2 ;
if ( j == jOne ) arrayV(i-iOne/2,j-jOne/2) = ( arrayV(i-iOne,0) + arrayV(i,jOne) ) / 2 ;
}
}
}
}
}
iOne = iOne / 2 ; if ( iOne < 1 ) iOne = 1 ;
jOne = jOne / 2 ; if ( jOne < 1 ) jOne = 1 ;
sumChargeDensity.Clear();
}
for ( Int_t j = 0 ; j < columns ; j++ ) {
for ( Int_t i = 1 ; i < rows-1 ; i++ ) arrayEr(i,j) = -1 * ( arrayV(i+1,j) - arrayV(i-1,j) ) / (2*gridSizeR) ;
arrayEr(0,j) = -1 * ( -0.5*arrayV(2,j) + 2.0*arrayV(1,j) - 1.5*arrayV(0,j) ) / gridSizeR ;
arrayEr(rows-1,j) = -1 * ( 1.5*arrayV(rows-1,j) - 2.0*arrayV(rows-2,j) + 0.5*arrayV(rows-3,j) ) / gridSizeR ;
}
for ( Int_t i = 0 ; i < rows ; i++) {
for ( Int_t j = 1 ; j < columns-1 ; j++ ) arrayEz(i,j) = -1 * ( arrayV(i,j+1) - arrayV(i,j-1) ) / (2*gridSizeZ) ;
arrayEz(i,0) = -1 * ( -0.5*arrayV(i,2) + 2.0*arrayV(i,1) - 1.5*arrayV(i,0) ) / gridSizeZ ;
arrayEz(i,columns-1) = -1 * ( 1.5*arrayV(i,columns-1) - 2.0*arrayV(i,columns-2) + 0.5*arrayV(i,columns-3) ) / gridSizeZ ;
}
for ( Int_t i = 0 ; i < rows ; i++) {
for ( Int_t j = 0 ; j < columns ; j++ ) {
arrayEz(i,j) += ezField;
}
}
for ( Int_t j = 0 ; j < columns ; j++ ) {
for ( Int_t i = 0 ; i < rows ; i++ ) {
Int_t index = 1 ;
arrayErOverEz(i,j) = 0.0 ;
arrayDeltaEz(i,j) = 0.0 ;
for ( Int_t k = j ; k < columns ; k++ ) {
arrayErOverEz(i,j) += index*(gridSizeZ/3.0)*arrayEr(i,k)/arrayEz(i,k) ;
arrayDeltaEz(i,j) += index*(gridSizeZ/3.0)*(arrayEz(i,k)-ezField) ;
if ( index != 4 ) index = 4; else index = 2 ;
}
if ( index == 4 ) {
arrayErOverEz(i,j) -= (gridSizeZ/3.0)*arrayEr(i,columns-1)/arrayEz(i,columns-1) ;
arrayDeltaEz(i,j) -= (gridSizeZ/3.0)*(arrayEz(i,columns-1)-ezField) ;
}
if ( index == 2 ) {
arrayErOverEz(i,j) += (gridSizeZ/3.0) * ( 0.5*arrayEr(i,columns-2)/arrayEz(i,columns-2)
-2.5*arrayEr(i,columns-1)/arrayEz(i,columns-1));
arrayDeltaEz(i,j) += (gridSizeZ/3.0) * ( 0.5*(arrayEz(i,columns-2)-ezField)
-2.5*(arrayEz(i,columns-1)-ezField));
}
if ( j == columns-2 ) {
arrayErOverEz(i,j) = (gridSizeZ/3.0) * ( 1.5*arrayEr(i,columns-2)/arrayEz(i,columns-2)
+1.5*arrayEr(i,columns-1)/arrayEz(i,columns-1) ) ;
arrayDeltaEz(i,j) = (gridSizeZ/3.0) * ( 1.5*(arrayEz(i,columns-2)-ezField)
+1.5*(arrayEz(i,columns-1)-ezField) ) ;
}
if ( j == columns-1 ) {
arrayErOverEz(i,j) = 0.0 ;
arrayDeltaEz(i,j) = 0.0 ;
}
}
}
for ( Int_t j = 0 ; j < columns ; j++ ) {
for ( Int_t i = 0 ; i < rows ; i++ ) {
arrayDeltaEz(i,j) = arrayDeltaEz(i,j)*fgkdvdE;
Double_t dzROCShift = arrayV(i, columns -1)/ezField;
if ( rocDisplacement ) arrayDeltaEz(i,j) = arrayDeltaEz(i,j) + dzROCShift;
}
}
arrayEr.Clear();
arrayEz.Clear();
}
void AliTPCCorrection::PoissonRelaxation3D( TMatrixD**arrayofArrayV, TMatrixD**arrayofChargeDensities,
TMatrixD**arrayofEroverEz, TMatrixD**arrayofEPhioverEz, TMatrixD**arrayofDeltaEz,
Int_t rows, Int_t columns, Int_t phislices,
Float_t deltaphi, Int_t iterations, Int_t symmetry,
Bool_t rocDisplacement ) {
const Double_t ezField = (fgkCathodeV-fgkGG)/fgkTPCZ0;
const Float_t gridSizeR = (fgkOFCRadius-fgkIFCRadius) / (rows-1) ;
const Float_t gridSizePhi = deltaphi ;
const Float_t gridSizeZ = fgkTPCZ0 / (columns-1) ;
const Float_t ratioPhi = gridSizeR*gridSizeR / (gridSizePhi*gridSizePhi) ;
const Float_t ratioZ = gridSizeR*gridSizeR / (gridSizeZ*gridSizeZ) ;
TMatrixD arrayE(rows,columns) ;
if ( !IsPowerOfTwo((rows-1)) ) {
AliError("Poisson3DRelaxation - Error in the number of rows. Must be 2**M - 1");
return; }
if ( !IsPowerOfTwo((columns-1)) ) {
AliError("Poisson3DRelaxation - Error in the number of columns. Must be 2**N - 1");
return; }
if ( phislices <= 3 ) {
AliError("Poisson3DRelaxation - Error in the number of phislices. Must be larger than 3");
return; }
if ( phislices > 1000 ) {
AliError("Poisson3D phislices > 1000 is not allowed (nor wise) ");
return; }
Int_t loops, mplus, mminus, signplus, signminus ;
Int_t ione = (rows-1)/4 ;
Int_t jone = (columns-1)/4 ;
loops = TMath::Max(ione, jone) ;
loops = 1 + (int) ( 0.5 + TMath::Log2((double)loops) ) ;
TMatrixD* arrayofSumChargeDensities[1000] ;
for ( Int_t i = 0 ; i < phislices ; i++ ) { arrayofSumChargeDensities[i] = new TMatrixD(rows,columns) ; }
AliSysInfo::AddStamp("3DInit", 10,0,0);
for ( Int_t count = 0 ; count < loops ; count++ ) {
AliSysInfo::AddStamp("3Diter", 20,count,0);
Float_t tempgridSizeR = gridSizeR * ione ;
Float_t tempratioPhi = ratioPhi * ione * ione ;
Float_t tempratioZ = ratioZ * ione * ione / ( jone * jone ) ;
std::vector<float> coef1(rows) ;
std::vector<float> coef2(rows) ;
std::vector<float> coef3(rows) ;
std::vector<float> coef4(rows) ;
for ( Int_t i = ione ; i < rows-1 ; i+=ione ) {
Float_t radius = fgkIFCRadius + i*gridSizeR ;
coef1[i] = 1.0 + tempgridSizeR/(2*radius);
coef2[i] = 1.0 - tempgridSizeR/(2*radius);
coef3[i] = tempratioPhi/(radius*radius);
coef4[i] = 0.5 / (1.0 + tempratioZ + coef3[i]);
}
for ( Int_t m = 0 ; m < phislices ; m++ ) {
TMatrixD &chargeDensity = *arrayofChargeDensities[m] ;
TMatrixD &sumChargeDensity = *arrayofSumChargeDensities[m] ;
for ( Int_t i = ione ; i < rows-1 ; i += ione ) {
Float_t radius = fgkIFCRadius + i*gridSizeR ;
for ( Int_t j = jone ; j < columns-1 ; j += jone ) {
if ( ione == 1 && jone == 1 ) sumChargeDensity(i,j) = chargeDensity(i,j) ;
else {
Float_t weight = 0.0 ;
Float_t sum = 0.0 ;
sumChargeDensity(i,j) = 0.0 ;
for ( Int_t ii = i-ione/2 ; ii <= i+ione/2 ; ii++ ) {
for ( Int_t jj = j-jone/2 ; jj <= j+jone/2 ; jj++ ) {
if ( ii == i-ione/2 || ii == i+ione/2 || jj == j-jone/2 || jj == j+jone/2 ) weight = 0.5 ;
else
weight = 1.0 ;
sumChargeDensity(i,j) += chargeDensity(ii,jj)*weight*radius ;
sum += weight*radius ;
}
}
sumChargeDensity(i,j) /= sum ;
}
sumChargeDensity(i,j) *= tempgridSizeR*tempgridSizeR;
}
}
}
for ( Int_t k = 1 ; k <= iterations; k++ ) {
Float_t overRelax = 1.0 + TMath::Sqrt( TMath::Cos( (k*TMath::PiOver2())/iterations ) ) ;
Float_t overRelaxM1 = overRelax - 1.0 ;
std::vector<float> overRelaxcoef4(rows) ;
std::vector<float> overRelaxcoef5(rows) ;
for ( Int_t i = ione ; i < rows-1 ; i+=ione ) {
overRelaxcoef4[i] = overRelax * coef4[i] ;
overRelaxcoef5[i] = overRelaxM1 / overRelaxcoef4[i] ;
}
for ( Int_t m = 0 ; m < phislices ; m++ ) {
mplus = m + 1; signplus = 1 ;
mminus = m - 1 ; signminus = 1 ;
if (symmetry==1) {
if ( mplus > phislices-1 ) mplus = phislices - 2 ;
if ( mminus < 0 ) mminus = 1 ;
}
else if (symmetry==-1) {
if ( mplus > phislices-1 ) { mplus = phislices - 2 ; signplus = -1 ; }
if ( mminus < 0 ) { mminus = 1 ; signminus = -1 ; }
}
else {
if ( mplus > phislices-1 ) mplus = m + 1 - phislices ;
if ( mminus < 0 ) mminus = m - 1 + phislices ;
}
TMatrixD& arrayV = *arrayofArrayV[m] ;
TMatrixD& arrayVP = *arrayofArrayV[mplus] ;
TMatrixD& arrayVM = *arrayofArrayV[mminus] ;
TMatrixD& sumChargeDensity = *arrayofSumChargeDensities[m] ;
Double_t *arrayVfast = arrayV.GetMatrixArray();
Double_t *arrayVPfast = arrayVP.GetMatrixArray();
Double_t *arrayVMfast = arrayVM.GetMatrixArray();
Double_t *sumChargeDensityFast=sumChargeDensity.GetMatrixArray();
if (0){
for ( Int_t i = ione ; i < rows-1 ; i+=ione ) {
for ( Int_t j = jone ; j < columns-1 ; j+=jone ) {
arrayV(i,j) = ( coef2[i] * arrayV(i-ione,j)
+ tempratioZ * ( arrayV(i,j-jone) + arrayV(i,j+jone) )
- overRelaxcoef5[i] * arrayV(i,j)
+ coef1[i] * arrayV(i+ione,j)
+ coef3[i] * ( signplus*arrayVP(i,j) + signminus*arrayVM(i,j) )
+ sumChargeDensity(i,j)
) * overRelaxcoef4[i] ;
}
}
}else{
for ( Int_t i = ione ; i < rows-1 ; i+=ione ) {
Double_t *arrayVfastI = &(arrayVfast[i*columns]);
Double_t *arrayVPfastI = &(arrayVPfast[i*columns]);
Double_t *arrayVMfastI = &(arrayVMfast[i*columns]);
Double_t *sumChargeDensityFastI=&(sumChargeDensityFast[i*columns]);
for ( Int_t j = jone ; j < columns-1 ; j+=jone ) {
Double_t resFast;
resFast = ( coef2[i] * arrayVfastI[j-columns*ione]
+ tempratioZ * ( arrayVfastI[j-jone] + arrayVfastI[j+jone] )
- overRelaxcoef5[i] * arrayVfastI[j]
+ coef1[i] * arrayVfastI[j+columns*ione]
+ coef3[i] * ( signplus* arrayVPfastI[j] + signminus*arrayVMfastI[j])
+ sumChargeDensityFastI[j]
) * overRelaxcoef4[i] ;
arrayVfastI[j]=resFast;
}
}
}
if ( k == iterations ) {
for ( Int_t i = ione ; i < rows-1 ; i+=ione ) {
for ( Int_t j = jone ; j < columns-1 ; j+=jone ) {
if ( ione > 1 ) {
arrayV(i+ione/2,j) = ( arrayV(i+ione,j) + arrayV(i,j) ) / 2 ;
if ( i == ione ) arrayV(i-ione/2,j) = ( arrayV(0,j) + arrayV(ione,j) ) / 2 ;
}
if ( jone > 1 ) {
arrayV(i,j+jone/2) = ( arrayV(i,j+jone) + arrayV(i,j) ) / 2 ;
if ( j == jone ) arrayV(i,j-jone/2) = ( arrayV(i,0) + arrayV(i,jone) ) / 2 ;
}
if ( ione > 1 && jone > 1 ) {
arrayV(i+ione/2,j+jone/2) = ( arrayV(i+ione,j+jone) + arrayV(i,j) ) / 2 ;
if ( i == ione ) arrayV(i-ione/2,j-jone/2) = ( arrayV(0,j-jone) + arrayV(ione,j) ) / 2 ;
if ( j == jone ) arrayV(i-ione/2,j-jone/2) = ( arrayV(i-ione,0) + arrayV(i,jone) ) / 2 ;
}
}
}
}
}
}
ione = ione / 2 ; if ( ione < 1 ) ione = 1 ;
jone = jone / 2 ; if ( jone < 1 ) jone = 1 ;
}
AliSysInfo::AddStamp("CalcField", 100,0,0);
for ( Int_t m = 0 ; m < phislices ; m++ ) {
TMatrixD& arrayV = *arrayofArrayV[m] ;
TMatrixD& eroverEz = *arrayofEroverEz[m] ;
for ( Int_t j = columns-1 ; j >= 0 ; j-- ) {
for ( Int_t i = 1 ; i < rows-1 ; i++ ) arrayE(i,j) = -1 * ( arrayV(i+1,j) - arrayV(i-1,j) ) / (2*gridSizeR) ;
arrayE(0,j) = -1 * ( -0.5*arrayV(2,j) + 2.0*arrayV(1,j) - 1.5*arrayV(0,j) ) / gridSizeR ;
arrayE(rows-1,j) = -1 * ( 1.5*arrayV(rows-1,j) - 2.0*arrayV(rows-2,j) + 0.5*arrayV(rows-3,j) ) / gridSizeR ;
for ( Int_t i = 0 ; i < rows ; i++ ) {
Int_t index = 1 ;
eroverEz(i,j) = 0.0 ;
for ( Int_t k = j ; k < columns ; k++ ) {
eroverEz(i,j) += index*(gridSizeZ/3.0)*arrayE(i,k)/(-1*ezField) ;
if ( index != 4 ) index = 4; else index = 2 ;
}
if ( index == 4 ) eroverEz(i,j) -= (gridSizeZ/3.0)*arrayE(i,columns-1)/ (-1*ezField) ;
if ( index == 2 ) eroverEz(i,j) +=
(gridSizeZ/3.0)*(0.5*arrayE(i,columns-2)-2.5*arrayE(i,columns-1))/(-1*ezField) ;
if ( j == columns-2 ) eroverEz(i,j) =
(gridSizeZ/3.0)*(1.5*arrayE(i,columns-2)+1.5*arrayE(i,columns-1))/(-1*ezField) ;
if ( j == columns-1 ) eroverEz(i,j) = 0.0 ;
}
}
}
AliSysInfo::AddStamp("IntegrateEr", 120,0,0);
for ( Int_t m = 0 ; m < phislices ; m++ ) {
mplus = m + 1; signplus = 1 ;
mminus = m - 1 ; signminus = 1 ;
if (symmetry==1) {
if ( mplus > phislices-1 ) mplus = phislices - 2 ;
if ( mminus < 0 ) mminus = 1 ;
}
else if (symmetry==-1) {
if ( mplus > phislices-1 ) { mplus = phislices - 2 ; signplus = -1 ; }
if ( mminus < 0 ) { mminus = 1 ; signminus = -1 ; }
}
else {
if ( mplus > phislices-1 ) mplus = m + 1 - phislices ;
if ( mminus < 0 ) mminus = m - 1 + phislices ;
}
TMatrixD &arrayVP = *arrayofArrayV[mplus] ;
TMatrixD &arrayVM = *arrayofArrayV[mminus] ;
TMatrixD &ePhioverEz = *arrayofEPhioverEz[m] ;
for ( Int_t j = columns-1 ; j >= 0 ; j-- ) {
for ( Int_t i = 0 ; i < rows ; i++ ) {
Float_t radius = fgkIFCRadius + i*gridSizeR ;
arrayE(i,j) = -1 * (signplus * arrayVP(i,j) - signminus * arrayVM(i,j) ) / (2*radius*gridSizePhi) ;
}
for ( Int_t i = 0 ; i < rows ; i++ ) {
Int_t index = 1 ;
ePhioverEz(i,j) = 0.0 ;
for ( Int_t k = j ; k < columns ; k++ ) {
ePhioverEz(i,j) += index*(gridSizeZ/3.0)*arrayE(i,k)/(-1*ezField) ;
if ( index != 4 ) index = 4; else index = 2 ;
}
if ( index == 4 ) ePhioverEz(i,j) -= (gridSizeZ/3.0)*arrayE(i,columns-1)/ (-1*ezField) ;
if ( index == 2 ) ePhioverEz(i,j) +=
(gridSizeZ/3.0)*(0.5*arrayE(i,columns-2)-2.5*arrayE(i,columns-1))/(-1*ezField) ;
if ( j == columns-2 ) ePhioverEz(i,j) =
(gridSizeZ/3.0)*(1.5*arrayE(i,columns-2)+1.5*arrayE(i,columns-1))/(-1*ezField) ;
if ( j == columns-1 ) ePhioverEz(i,j) = 0.0 ;
}
}
}
AliSysInfo::AddStamp("IntegrateEphi", 130,0,0);
for ( Int_t m = 0 ; m < phislices ; m++ ) {
TMatrixD& arrayV = *arrayofArrayV[m] ;
TMatrixD& deltaEz = *arrayofDeltaEz[m] ;
for ( Int_t i = 0 ; i < rows ; i++) {
for ( Int_t j = 1 ; j < columns-1 ; j++ ) arrayE(i,j) = -1 * ( arrayV(i,j+1) - arrayV(i,j-1) ) / (2*gridSizeZ) ;
arrayE(i,0) = -1 * ( -0.5*arrayV(i,2) + 2.0*arrayV(i,1) - 1.5*arrayV(i,0) ) / gridSizeZ ;
arrayE(i,columns-1) = -1 * ( 1.5*arrayV(i,columns-1) - 2.0*arrayV(i,columns-2) + 0.5*arrayV(i,columns-3) ) / gridSizeZ ;
}
for ( Int_t j = columns-1 ; j >= 0 ; j-- ) {
for ( Int_t i = 0 ; i < rows ; i++ ) {
Int_t index = 1 ;
deltaEz(i,j) = 0.0 ;
for ( Int_t k = j ; k < columns ; k++ ) {
deltaEz(i,j) += index*(gridSizeZ/3.0)*arrayE(i,k) ;
if ( index != 4 ) index = 4; else index = 2 ;
}
if ( index == 4 ) deltaEz(i,j) -= (gridSizeZ/3.0)*arrayE(i,columns-1) ;
if ( index == 2 ) deltaEz(i,j) +=
(gridSizeZ/3.0)*(0.5*arrayE(i,columns-2)-2.5*arrayE(i,columns-1)) ;
if ( j == columns-2 ) deltaEz(i,j) =
(gridSizeZ/3.0)*(1.5*arrayE(i,columns-2)+1.5*arrayE(i,columns-1)) ;
if ( j == columns-1 ) deltaEz(i,j) = 0.0 ;
}
}
for ( Int_t j = 0 ; j < columns ; j++ ) {
for ( Int_t i = 0 ; i < rows ; i++ ) {
deltaEz(i,j) = deltaEz(i,j)*fgkdvdE;
Double_t dzROCShift = arrayV(i, columns -1)/ezField;
if ( rocDisplacement ) deltaEz(i,j) = deltaEz(i,j) + dzROCShift;
}
}
}
AliSysInfo::AddStamp("IntegrateEz", 140,0,0);
for ( Int_t k = 0 ; k < phislices ; k++ )
{
arrayofSumChargeDensities[k]->Delete() ;
}
arrayE.Clear();
}
Int_t AliTPCCorrection::IsPowerOfTwo(Int_t i) const {
Int_t j = 0;
while( i > 0 ) { j += (i&1) ; i = (i>>1) ; }
if ( j == 1 ) return(1) ;
return(0) ;
}
AliExternalTrackParam * AliTPCCorrection::FitDistortedTrack(AliExternalTrackParam & trackIn, Double_t refX, Int_t dir, TTreeSRedirector * const pcstream){
AliTPCROC * roc = AliTPCROC::Instance();
const Int_t npoints0=roc->GetNRows(0)+roc->GetNRows(36);
const Double_t kRTPC0 =roc->GetPadRowRadii(0,0);
const Double_t kRTPC1 =roc->GetPadRowRadii(36,roc->GetNRows(36)-1);
const Double_t kMaxSnp = 0.85;
const Double_t kSigmaY=0.1;
const Double_t kSigmaZ=0.1;
const Double_t kMaxR=500;
const Double_t kMaxZ=500;
const Double_t kMaxZ0=220;
const Double_t kZcut=3;
const Double_t kMass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
Int_t npoints1=0;
Int_t npoints2=0;
AliExternalTrackParam track(trackIn);
AliTrackPointArray pointArray0(npoints0);
AliTrackPointArray pointArray1(npoints0);
Double_t xyz[3];
if (!AliTrackerBase::PropagateTrackTo(&track,kRTPC0,kMass,5,kTRUE,kMaxSnp)) return 0;
Int_t npoints=0;
Float_t covPoint[6]={0,0,0, static_cast<Float_t>(kSigmaY*kSigmaY),0,static_cast<Float_t>(kSigmaZ*kSigmaZ)};
for (Double_t radius=kRTPC0; radius<kRTPC1; radius++){
if (!AliTrackerBase::PropagateTrackTo(&track,radius,kMass,5,kTRUE,kMaxSnp)) return 0;
track.GetXYZ(xyz);
xyz[0]+=gRandom->Gaus(0,0.000005);
xyz[1]+=gRandom->Gaus(0,0.000005);
xyz[2]+=gRandom->Gaus(0,0.000005);
if (TMath::Abs(track.GetZ())>kMaxZ0) continue;
if (TMath::Abs(track.GetX())<kRTPC0) continue;
if (TMath::Abs(track.GetX())>kRTPC1) continue;
AliTrackPoint pIn0;
AliTrackPoint pIn1;
Int_t sector= (xyz[2]>0)? 0:18;
pointArray0.GetPoint(pIn0,npoints);
pointArray1.GetPoint(pIn1,npoints);
Double_t alpha = TMath::ATan2(xyz[1],xyz[0]);
Float_t distPoint[3]={static_cast<Float_t>(xyz[0]),static_cast<Float_t>(xyz[1]),static_cast<Float_t>(xyz[2])};
DistortPoint(distPoint, sector);
pIn0.SetXYZ(xyz[0], xyz[1],xyz[2]);
pIn1.SetXYZ(distPoint[0], distPoint[1],distPoint[2]);
track.Rotate(alpha);
AliTrackPoint prot0 = pIn0.Rotate(alpha);
AliTrackPoint prot1 = pIn1.Rotate(alpha);
prot0.SetXYZ(prot0.GetX(),prot0.GetY(), prot0.GetZ(),covPoint);
prot1.SetXYZ(prot1.GetX(),prot1.GetY(), prot1.GetZ(),covPoint);
pIn0=prot0.Rotate(-alpha);
pIn1=prot1.Rotate(-alpha);
pointArray0.AddPoint(npoints, &pIn0);
pointArray1.AddPoint(npoints, &pIn1);
npoints++;
if (npoints>=npoints0) break;
}
if (npoints<npoints0/4.) return 0;
AliExternalTrackParam *track0=0;
AliExternalTrackParam *track1=0;
AliTrackPoint point1,point2,point3;
if (dir==1) {
pointArray0.GetPoint(point1,1);
pointArray0.GetPoint(point2,11);
pointArray0.GetPoint(point3,21);
}
if (dir==-1){
pointArray0.GetPoint(point1,npoints-21);
pointArray0.GetPoint(point2,npoints-11);
pointArray0.GetPoint(point3,npoints-1);
}
if ((TMath::Abs(point1.GetX()-point3.GetX())+TMath::Abs(point1.GetY()-point3.GetY()))<10){
printf("fit points not properly initialized\n");
return 0;
}
track0 = AliTrackerBase::MakeSeed(point1, point2, point3);
track1 = AliTrackerBase::MakeSeed(point1, point2, point3);
track0->ResetCovariance(10);
track1->ResetCovariance(10);
if (TMath::Abs(AliTrackerBase::GetBz())<0.01){
((Double_t*)track0->GetParameter())[4]= trackIn.GetParameter()[4];
((Double_t*)track1->GetParameter())[4]= trackIn.GetParameter()[4];
}
for (Int_t jpoint=0; jpoint<npoints; jpoint++){
Int_t ipoint= (dir>0) ? jpoint: npoints-1-jpoint;
AliTrackPoint pIn0;
AliTrackPoint pIn1;
pointArray0.GetPoint(pIn0,ipoint);
pointArray1.GetPoint(pIn1,ipoint);
AliTrackPoint prot0 = pIn0.Rotate(track0->GetAlpha());
AliTrackPoint prot1 = pIn1.Rotate(track1->GetAlpha());
if (TMath::Abs(prot0.GetX())<kRTPC0) continue;
if (TMath::Abs(prot0.GetX())>kRTPC1) continue;
if (!AliTrackerBase::PropagateTrackTo(track0,prot0.GetX(),kMass,5,kFALSE,kMaxSnp)) break;
if (!AliTrackerBase::PropagateTrackTo(track1,prot0.GetX(),kMass,5,kFALSE,kMaxSnp)) break;
if (TMath::Abs(track0->GetZ())>kMaxZ) break;
if (TMath::Abs(track0->GetX())>kMaxR) break;
if (TMath::Abs(track1->GetZ())>kMaxZ) break;
if (TMath::Abs(track1->GetX())>kMaxR) break;
if (dir>0 && track1->GetX()>refX) continue;
if (dir<0 && track1->GetX()<refX) continue;
if (TMath::Abs(track1->GetZ())<kZcut)continue;
track.GetXYZ(xyz);
Double_t pointPos[2]={0,0};
Double_t pointCov[3]={0,0,0};
pointPos[0]=prot0.GetY();
pointPos[1]=prot0.GetZ();
pointCov[0]=prot0.GetCov()[3];
pointCov[1]=prot0.GetCov()[4];
pointCov[2]=prot0.GetCov()[5];
if (!track0->Update(pointPos,pointCov)) break;
Double_t deltaX=prot1.GetX()-prot0.GetX();
Double_t deltaYX=deltaX*TMath::Tan(TMath::ASin(track1->GetSnp()));
Double_t deltaZX=deltaX*track1->GetTgl();
pointPos[0]=prot1.GetY()-deltaYX;
pointPos[1]=prot1.GetZ()-deltaZX;
pointCov[0]=prot1.GetCov()[3];
pointCov[1]=prot1.GetCov()[4];
pointCov[2]=prot1.GetCov()[5];
if (!track1->Update(pointPos,pointCov)) break;
npoints1++;
npoints2++;
}
if (npoints2<npoints/4.) return 0;
AliTrackerBase::PropagateTrackTo(track0,refX,kMass,5.,kTRUE,kMaxSnp);
AliTrackerBase::PropagateTrackTo(track0,refX,kMass,1.,kTRUE,kMaxSnp);
track1->Rotate(track0->GetAlpha());
AliTrackerBase::PropagateTrackTo(track1,track0->GetX(),kMass,5.,kFALSE,kMaxSnp);
if (pcstream) (*pcstream)<<Form("fitDistort%s",GetName())<<
"point0.="<<&pointArray0<<
"point1.="<<&pointArray1<<
"trackIn.="<<&track<<
"track0.="<<track0<<
"track1.="<<track1<<
"\n";
new(&trackIn) AliExternalTrackParam(*track0);
delete track0;
return track1;
}
TTree* AliTPCCorrection::CreateDistortionTree(Double_t step){
TTreeSRedirector *pcstream = new TTreeSRedirector(Form("correction%s.root",GetName()));
Float_t xyz[3];
for (Double_t x= -250; x<250; x+=step){
for (Double_t y= -250; y<250; y+=step){
Double_t r = TMath::Sqrt(x*x+y*y);
if (r<80) continue;
if (r>250) continue;
for (Double_t z= -250; z<250; z+=step){
Int_t roc=(z>0)?0:18;
xyz[0]=x;
xyz[1]=y;
xyz[2]=z;
Double_t phi = TMath::ATan2(y,x);
DistortPoint(xyz,roc);
Double_t r1 = TMath::Sqrt(xyz[0]*xyz[0]+xyz[1]*xyz[1]);
Double_t phi1 = TMath::ATan2(xyz[1],xyz[0]);
if ((phi1-phi)>TMath::Pi()) phi1-=TMath::Pi();
if ((phi1-phi)<-TMath::Pi()) phi1+=TMath::Pi();
Double_t dx = xyz[0]-x;
Double_t dy = xyz[1]-y;
Double_t dz = xyz[2]-z;
Double_t dr=r1-r;
Double_t drphi=(phi1-phi)*r;
(*pcstream)<<"distortion"<<
"x="<<x<<
"y="<<y<<
"z="<<z<<
"r="<<r<<
"phi="<<phi<<
"x1="<<xyz[0]<<
"y1="<<xyz[1]<<
"z1="<<xyz[2]<<
"r1="<<r1<<
"phi1="<<phi1<<
"dx="<<dx<<
"dy="<<dy<<
"dz="<<dz<<
"dr="<<dr<<
"drphi="<<drphi<<
"\n";
}
}
}
delete pcstream;
TFile f(Form("correction%s.root",GetName()));
TTree * tree = (TTree*)f.Get("distortion");
TTree * tree2= tree->CopyTree("1");
tree2->SetName(Form("dist%s",GetName()));
tree2->SetDirectory(0);
delete tree;
return tree2;
}
void AliTPCCorrection::MakeTrackDistortionTree(TTree *tinput, Int_t dtype, Int_t ptype, const TObjArray * corrArray, Int_t step, Int_t offset, Bool_t debug ){
const Double_t kMaxSnp = 0.85;
const Double_t kcutSnp=0.25;
const Double_t kcutTheta=1.;
const Double_t kRadiusTPC=85;
const Double_t kMass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
const Int_t kMinEntries=20;
Double_t phi,theta, snp, mean,rms, entries,sector,dsec;
Float_t refX;
Int_t run;
tinput->SetBranchAddress("run",&run);
tinput->SetBranchAddress("theta",&theta);
tinput->SetBranchAddress("phi", &phi);
tinput->SetBranchAddress("snp",&snp);
tinput->SetBranchAddress("mean",&mean);
tinput->SetBranchAddress("rms",&rms);
tinput->SetBranchAddress("entries",&entries);
tinput->SetBranchAddress("sector",§or);
tinput->SetBranchAddress("dsec",&dsec);
tinput->SetBranchAddress("refX",&refX);
TTreeSRedirector *pcstream = new TTreeSRedirector(Form("distortion%d_%d_%d.root",dtype,ptype,offset));
Int_t nentries=tinput->GetEntries();
Int_t ncorr=corrArray->GetEntries();
Double_t corrections[100]={0};
Double_t tPar[5];
Double_t cov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Int_t dir=0;
if (dtype==5 || dtype==6) dtype=4;
if (dtype==0) { dir=-1;}
if (dtype==1) { dir=1;}
if (dtype==2) { dir=-1;}
if (dtype==3) { dir=1;}
if (dtype==4) { dir=-1;}
for (Int_t ientry=offset; ientry<nentries; ientry+=step){
tinput->GetEntry(ientry);
if (TMath::Abs(snp)>kMaxSnp) continue;
tPar[0]=0;
tPar[1]=theta*refX;
if (dtype==2) tPar[1]=theta*kRadiusTPC;
tPar[2]=snp;
tPar[3]=theta;
tPar[4]=(gRandom->Rndm()-0.5)*0.02;
if (dtype==4){
tPar[1]=0;
}
if (TMath::Abs(snp) >kcutSnp) continue;
if (TMath::Abs(theta) >kcutTheta) continue;
printf("%f\t%f\t%f\t%f\t%f\t%f\n",entries, sector,theta,snp, mean,rms);
Double_t bz=AliTrackerBase::GetBz();
if (dtype !=4) {
if (dtype!=2 && TMath::Abs(bz)>0.1 ) tPar[4]=snp/(refX*bz*kB2C*2);
if (dtype==2 && TMath::Abs(bz)>0.1 ) {
tPar[4]=snp/(kRadiusTPC*bz*kB2C*2);
}
}
tPar[4]+=(gRandom->Rndm()-0.5)*0.02;
AliExternalTrackParam track(refX,phi,tPar,cov);
Double_t xyz[3];
track.GetXYZ(xyz);
Int_t id=0;
Double_t pt=1./tPar[4];
Double_t dRrec=0;
Double_t refXD=refX;
(*pcstream)<<"fit"<<
"run="<<run<<
"bz="<<bz<<
"dtype="<<dtype<<
"ptype="<<ptype<<
"theta="<<theta<<
"phi="<<phi<<
"snp="<<snp<<
"mean="<<mean<<
"rms="<<rms<<
"sector="<<sector<<
"dsec="<<dsec<<
"refX="<<refXD<<
"gx="<<xyz[0]<<
"gy="<<xyz[1]<<
"gz="<<xyz[2]<<
"dRrec="<<dRrec<<
"pt="<<pt<<
"id="<<id<<
"entries="<<entries;
Bool_t isOK=kTRUE;
if (entries<kMinEntries) isOK=kFALSE;
if (dtype!=4) for (Int_t icorr=0; icorr<ncorr; icorr++) {
AliTPCCorrection *corr = (AliTPCCorrection*)corrArray->At(icorr);
corrections[icorr]=0;
if (entries>kMinEntries){
AliExternalTrackParam trackIn(refX,phi,tPar,cov);
AliExternalTrackParam *trackOut = 0;
if (debug) trackOut=corr->FitDistortedTrack(trackIn, refX, dir,pcstream);
if (!debug) trackOut=corr->FitDistortedTrack(trackIn, refX, dir,0);
if (dtype==0) {dir= -1;}
if (dtype==1) {dir= 1;}
if (dtype==2) {dir= -1;}
if (dtype==3) {dir= 1;}
if (trackOut){
if (!AliTrackerBase::PropagateTrackTo(&trackIn,refX,kMass,5,kTRUE,kMaxSnp)) isOK=kFALSE;
if (!trackOut->Rotate(trackIn.GetAlpha())) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(trackOut,trackIn.GetX(),kMass,5,kFALSE,kMaxSnp)) isOK=kFALSE;
corrections[icorr]= trackOut->GetParameter()[ptype]-trackIn.GetParameter()[ptype];
delete trackOut;
}else{
corrections[icorr]=0;
isOK=kFALSE;
}
}
(*pcstream)<<"fit"<<
Form("%s=",corr->GetName())<<corrections[icorr];
}
if (dtype==4) for (Int_t icorr=0; icorr<ncorr; icorr++) {
AliTPCCorrection *corr = (AliTPCCorrection*)corrArray->At(icorr);
corrections[icorr]=0;
if (entries>kMinEntries){
AliExternalTrackParam trackIn0(refX,phi,tPar,cov);
AliExternalTrackParam trackIn1(refX,phi,tPar,cov);
AliExternalTrackParam *trackOut0 = 0;
AliExternalTrackParam *trackOut1 = 0;
if (debug) trackOut0=corr->FitDistortedTrack(trackIn0, refX, dir,pcstream);
if (!debug) trackOut0=corr->FitDistortedTrack(trackIn0, refX, dir,0);
if (debug) trackOut1=corr->FitDistortedTrack(trackIn1, refX, -dir,pcstream);
if (!debug) trackOut1=corr->FitDistortedTrack(trackIn1, refX, -dir,0);
if (trackOut0 && trackOut1){
if (!AliTrackerBase::PropagateTrackTo(&trackIn0,refX,kMass,5,kTRUE,kMaxSnp)) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(&trackIn0,refX,kMass,1,kFALSE,kMaxSnp)) isOK=kFALSE;
if (!trackOut0->Rotate(trackIn0.GetAlpha())) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(trackOut0,trackIn0.GetX(),kMass,5,kFALSE,kMaxSnp)) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(&trackIn1,refX,kMass,5,kTRUE,kMaxSnp)) isOK=kFALSE;
if (!trackIn1.Rotate(trackIn0.GetAlpha())) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(&trackIn1,trackIn0.GetX(),kMass,1,kFALSE,kMaxSnp)) isOK=kFALSE;
if (!trackOut1->Rotate(trackIn1.GetAlpha())) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(trackOut1,trackIn1.GetX(),kMass,5,kFALSE,kMaxSnp)) isOK=kFALSE;
corrections[icorr] = (trackOut0->GetParameter()[ptype]-trackIn0.GetParameter()[ptype]);
corrections[icorr]-= (trackOut1->GetParameter()[ptype]-trackIn1.GetParameter()[ptype]);
if (isOK)
if ((TMath::Abs(trackOut0->GetX()-trackOut1->GetX())>0.1)||
(TMath::Abs(trackOut0->GetX()-trackIn1.GetX())>0.1)||
(TMath::Abs(trackOut0->GetAlpha()-trackOut1->GetAlpha())>0.00001)||
(TMath::Abs(trackOut0->GetAlpha()-trackIn1.GetAlpha())>0.00001)||
(TMath::Abs(trackIn0.GetTgl()-trackIn1.GetTgl())>0.0001)||
(TMath::Abs(trackIn0.GetSnp()-trackIn1.GetSnp())>0.0001)
){
isOK=kFALSE;
}
delete trackOut0;
delete trackOut1;
}else{
corrections[icorr]=0;
isOK=kFALSE;
}
}
(*pcstream)<<"fit"<<
Form("%s=",corr->GetName())<<corrections[icorr];
}
(*pcstream)<<"fit"<<"isOK="<<isOK<<"\n";
}
delete pcstream;
}
void AliTPCCorrection::MakeSectorDistortionTree(TTree *tinput, Int_t dtype, Int_t ptype, const TObjArray * corrArray, Int_t step, Int_t offset, Bool_t debug ){
const Double_t kMaxSnp = 0.8;
const Int_t kMinEntries=200;
const Double_t kMass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
Double_t phi,theta, snp, mean,rms, entries,sector,dsec,globalZ;
Int_t isec1, isec0;
Double_t refXD;
Float_t refX;
Int_t run;
tinput->SetBranchAddress("run",&run);
tinput->SetBranchAddress("theta",&theta);
tinput->SetBranchAddress("phi", &phi);
tinput->SetBranchAddress("snp",&snp);
tinput->SetBranchAddress("mean",&mean);
tinput->SetBranchAddress("rms",&rms);
tinput->SetBranchAddress("entries",&entries);
tinput->SetBranchAddress("sector",§or);
tinput->SetBranchAddress("dsec",&dsec);
tinput->SetBranchAddress("refX",&refXD);
tinput->SetBranchAddress("z",&globalZ);
tinput->SetBranchAddress("isec0",&isec0);
tinput->SetBranchAddress("isec1",&isec1);
TTreeSRedirector *pcstream = new TTreeSRedirector(Form("distortionSector%d_%d_%d.root",dtype,ptype,offset));
Int_t nentries=tinput->GetEntries();
Int_t ncorr=corrArray->GetEntries();
Double_t corrections[100]={0};
Double_t tPar[5];
Double_t cov[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Int_t dir=0;
for (Int_t ientry=offset; ientry<nentries; ientry+=step){
tinput->GetEntry(ientry);
refX=refXD;
Int_t id=-1;
if (TMath::Abs(TMath::Abs(isec0%18)-TMath::Abs(isec1%18))==0) id=1;
if (TMath::Abs(TMath::Abs(isec0%36)-TMath::Abs(isec1%36))==0) id=2;
if (dtype==10 && id==-1) continue;
dir=-1;
tPar[0]=0;
tPar[1]=globalZ;
tPar[2]=snp;
tPar[3]=theta;
tPar[4]=(gRandom->Rndm()-0.1)*0.2;
Double_t pt=1./tPar[4];
printf("%f\t%f\t%f\t%f\t%f\t%f\n",entries, sector,theta,snp, mean,rms);
Double_t bz=AliTrackerBase::GetBz();
AliExternalTrackParam track(refX,phi,tPar,cov);
Double_t xyz[3],xyzIn[3],xyzOut[3];
track.GetXYZ(xyz);
track.GetXYZAt(85,bz,xyzIn);
track.GetXYZAt(245,bz,xyzOut);
Double_t phiIn = TMath::ATan2(xyzIn[1],xyzIn[0]);
Double_t phiOut = TMath::ATan2(xyzOut[1],xyzOut[0]);
Double_t phiRef = TMath::ATan2(xyz[1],xyz[0]);
Int_t sectorRef = TMath::Nint(9.*phiRef/TMath::Pi()-0.5);
Int_t sectorIn = TMath::Nint(9.*phiIn/TMath::Pi()-0.5);
Int_t sectorOut = TMath::Nint(9.*phiOut/TMath::Pi()-0.5);
Bool_t isOK=kTRUE;
if (sectorIn!=sectorOut) isOK=kFALSE;
if (sectorIn!=sectorRef) isOK=kFALSE;
if (entries<kMinEntries/(1+TMath::Abs(globalZ/100.))) isOK=kFALSE;
if (TMath::Abs(theta)>1) isOK=kFALSE;
Double_t dRrec=0;
(*pcstream)<<"fit"<<
"run="<<run<<
"bz="<<bz<<
"dtype="<<dtype<<
"ptype="<<ptype<<
"theta="<<theta<<
"phi="<<phi<<
"snp="<<snp<<
"mean="<<mean<<
"rms="<<rms<<
"sector="<<sector<<
"dsec="<<dsec<<
"refX="<<refXD<<
"gx="<<xyz[0]<<
"gy="<<xyz[1]<<
"gz="<<xyz[2]<<
"dRrec="<<dRrec<<
"pt="<<pt<<
"id="<<id<<
"entries="<<entries;
AliExternalTrackParam *trackOut0 = 0;
AliExternalTrackParam *trackOut1 = 0;
AliExternalTrackParam *ptrackIn0 = 0;
AliExternalTrackParam *ptrackIn1 = 0;
for (Int_t icorr=0; icorr<ncorr; icorr++) {
AliTPCCorrection *corr = (AliTPCCorrection*)corrArray->At(icorr);
corrections[icorr]=0;
if (entries>kMinEntries &&isOK){
AliExternalTrackParam trackIn0(refX,phi,tPar,cov);
AliExternalTrackParam trackIn1(refX,phi,tPar,cov);
ptrackIn1=&trackIn0;
ptrackIn0=&trackIn1;
if (debug) trackOut0=corr->FitDistortedTrack(trackIn0, refX, dir,pcstream);
if (!debug) trackOut0=corr->FitDistortedTrack(trackIn0, refX, dir,0);
if (debug) trackOut1=corr->FitDistortedTrack(trackIn1, refX, -dir,pcstream);
if (!debug) trackOut1=corr->FitDistortedTrack(trackIn1, refX, -dir,0);
if (trackOut0 && trackOut1){
if (!AliTrackerBase::PropagateTrackTo(&trackIn0,refX,kMass,1,kTRUE,kMaxSnp)) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(&trackIn0,refX,kMass,1,kFALSE,kMaxSnp)) isOK=kFALSE;
if (!trackOut0->Rotate(trackIn0.GetAlpha())) isOK=kFALSE;
if (!trackIn1.Rotate(trackIn0.GetAlpha())) isOK=kFALSE;
if (!trackOut1->Rotate(trackIn0.GetAlpha())) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(trackOut0,refX,kMass,1,kFALSE,kMaxSnp)) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(&trackIn1,refX,kMass,1,kFALSE,kMaxSnp)) isOK=kFALSE;
if (!AliTrackerBase::PropagateTrackTo(trackOut1,refX,kMass,1,kFALSE,kMaxSnp)) isOK=kFALSE;
corrections[icorr] = (trackOut0->GetParameter()[ptype]-trackIn0.GetParameter()[ptype]);
corrections[icorr]-= (trackOut1->GetParameter()[ptype]-trackIn1.GetParameter()[ptype]);
(*pcstream)<<"fitDebug"<<
"mean="<<mean<<
"pIn0.="<<ptrackIn0<<
"pIn1.="<<ptrackIn1<<
"pOut0.="<<trackOut0<<
"pOut1.="<<trackOut1<<
"refX="<<refXD<<
"\n";
delete trackOut0;
delete trackOut1;
}else{
corrections[icorr]=0;
isOK=kFALSE;
}
}
(*pcstream)<<"fit"<<
Form("%s=",corr->GetName())<<corrections[icorr];
}
(*pcstream)<<"fit"<<"isOK="<<isOK<<"\n";
}
delete pcstream;
}
void AliTPCCorrection::MakeLaserDistortionTreeOld(TTree* tree, TObjArray *corrArray, Int_t itype){
const Double_t cutErrY=0.1;
const Double_t cutErrZ=0.1;
const Double_t kEpsilon=0.00000001;
const Double_t kMaxDist=1.;
const Double_t kMaxRMS=0.05;
TVectorD *vecdY=0;
TVectorD *vecdZ=0;
TVectorD *veceY=0;
TVectorD *veceZ=0;
AliTPCLaserTrack *ltr=0;
AliTPCLaserTrack::LoadTracks();
tree->SetBranchAddress("dY.",&vecdY);
tree->SetBranchAddress("dZ.",&vecdZ);
tree->SetBranchAddress("eY.",&veceY);
tree->SetBranchAddress("eZ.",&veceZ);
tree->SetBranchAddress("LTr.",<r);
Int_t entries= tree->GetEntries();
TTreeSRedirector *pcstream= new TTreeSRedirector("distortionLaser_0.root");
Double_t bz=AliTrackerBase::GetBz();
for (Int_t ientry=0; ientry<entries; ientry++){
tree->GetEntry(ientry);
if (!ltr->GetVecGX()){
ltr->UpdatePoints();
}
TVectorD * delta= (itype==0)? vecdY:vecdZ;
TVectorD * err= (itype==0)? veceY:veceZ;
TLinearFitter fitter(2,"pol1");
for (Int_t iter=0; iter<2; iter++){
Double_t kfit0=0, kfit1=0;
Int_t npoints=fitter.GetNpoints();
if (npoints>80){
fitter.Eval();
kfit0=fitter.GetParameter(0);
kfit1=fitter.GetParameter(1);
}
for (Int_t irow=0; irow<159; irow++){
Bool_t isOK=kTRUE;
Int_t isOKF=0;
Int_t nentries = 1000;
if (veceY->GetMatrixArray()[irow]>cutErrY||veceZ->GetMatrixArray()[irow]>cutErrZ) nentries=0;
if (veceY->GetMatrixArray()[irow]<kEpsilon||veceZ->GetMatrixArray()[irow]<kEpsilon) nentries=0;
Int_t dtype=5;
Double_t array[10];
Int_t first3=TMath::Max(irow-3,0);
Int_t last3 =TMath::Min(irow+3,159);
Int_t counter=0;
if ((*ltr->GetVecSec())[irow]>=0 && err) {
for (Int_t jrow=first3; jrow<=last3; jrow++){
if ((*ltr->GetVecSec())[irow]!= (*ltr->GetVecSec())[jrow]) continue;
if ((*err)[jrow]<kEpsilon) continue;
array[counter]=(*delta)[jrow];
counter++;
}
}
Double_t rms3 = 0;
Double_t mean3 = 0;
if (counter>2){
rms3 = TMath::RMS(counter,array);
mean3 = TMath::Mean(counter,array);
}else{
isOK=kFALSE;
}
Double_t phi =(*ltr->GetVecPhi())[irow];
Double_t theta =ltr->GetTgl();
Double_t mean=delta->GetMatrixArray()[irow];
Double_t gx=0,gy=0,gz=0;
Double_t snp = (*ltr->GetVecP2())[irow];
Double_t dRrec=0;
gx = (*ltr->GetVecGX())[irow];
gy = (*ltr->GetVecGY())[irow];
gz = (*ltr->GetVecGZ())[irow];
AliTPCcalibDB* calib=AliTPCcalibDB::Instance();
AliTPCCorrection * correction = calib->GetTPCComposedCorrection(AliTrackerBase::GetBz());
Double_t oldR=TMath::Sqrt(gx*gx+gy*gy);
Double_t fphi = TMath::ATan2(gy,gx);
Double_t fsector = 9.*fphi/TMath::Pi();
if (fsector<0) fsector+=18;
Double_t dsec = fsector-Int_t(fsector)-0.5;
Double_t refX=0;
Int_t id= ltr->GetId();
Double_t pt=0;
if (1 && oldR>1) {
Float_t xyz1[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
Int_t sector=(gz>0)?0:18;
correction->CorrectPoint(xyz1, sector);
refX=TMath::Sqrt(xyz1[0]*xyz1[0]+xyz1[1]*xyz1[1]);
dRrec=oldR-refX;
}
if (TMath::Abs(rms3)>kMaxRMS) isOK=kFALSE;
if (TMath::Abs(mean-mean3)>kMaxRMS) isOK=kFALSE;
if (counter<4) isOK=kFALSE;
if (npoints<90) isOK=kFALSE;
if (isOK){
fitter.AddPoint(&refX,mean);
}
Double_t deltaF=kfit0+kfit1*refX;
if (iter==1){
(*pcstream)<<"fitFull"<<
"bz="<<bz<<
"dtype="<<dtype<<
"ptype="<<itype<<
"theta="<<theta<<
"phi="<<phi<<
"snp="<<snp<<
"mean="<<mean3<<
"rms="<<rms3<<
"deltaF="<<deltaF<<
"npoints="<<npoints<<
"mean3="<<mean3<<
"rms3="<<rms3<<
"counter="<<counter<<
"sector="<<fsector<<
"dsec="<<dsec<<
"refX="<<refX<<
"gx="<<gx<<
"gy="<<gy<<
"gz="<<gz<<
"dRrec="<<dRrec<<
"id="<<id<<
"entries="<<nentries<<
"\n";
}
if (iter==1) (*pcstream)<<"fit"<<
"bz="<<bz<<
"dtype="<<dtype<<
"ptype="<<itype<<
"theta="<<theta<<
"phi="<<phi<<
"snp="<<snp<<
"mean="<<mean3<<
"rms="<<rms3<<
"sector="<<fsector<<
"dsec="<<dsec<<
"refX="<<refX<<
"gx="<<gx<<
"gy="<<gy<<
"gz="<<gz<<
"dRrec="<<dRrec<<
"pt="<<pt<<
"id="<<id<<
"entries="<<nentries;
Double_t ky = TMath::Tan(TMath::ASin(snp));
Int_t ncorr = corrArray->GetEntries();
Double_t r0 = TMath::Sqrt(gx*gx+gy*gy);
Double_t phi0 = TMath::ATan2(gy,gx);
Double_t distortions[1000]={0};
Double_t distortionsR[1000]={0};
if (iter==1){
for (Int_t icorr=0; icorr<ncorr; icorr++) {
AliTPCCorrection *corr = (AliTPCCorrection*)corrArray->At(icorr);
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
Int_t sector= (gz>0)? 0:18;
if (r0>80){
corr->DistortPoint(distPoint, sector);
}
if (itype==0 && r0>1){
Double_t r1 = TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1 = TMath::ATan2(distPoint[1],distPoint[0]);
Double_t drphi= r0*(phi1-phi0);
Double_t dr = r1-r0;
distortions[icorr] = drphi-ky*dr;
distortionsR[icorr] = dr;
}
if (TMath::Abs(distortions[icorr])>kMaxDist) {isOKF=icorr+1; isOK=kFALSE; }
if (TMath::Abs(distortionsR[icorr])>kMaxDist) {isOKF=icorr+1; isOK=kFALSE;}
(*pcstream)<<"fit"<<
Form("%s=",corr->GetName())<<distortions[icorr];
}
(*pcstream)<<"fit"<<"isOK="<<isOK<<"\n";
}
}
}
}
delete pcstream;
}
void AliTPCCorrection::MakeDistortionMap(THnSparse * his0, TTreeSRedirector * const pcstream, const char* hname, Int_t run, Float_t refX, Int_t type, Int_t integ){
const Int_t kMinEntries=10;
Double_t bz=AliTrackerBase::GetBz();
Int_t idim[4]={0,1,2,3};
Int_t nbins3=his0->GetAxis(3)->GetNbins();
Int_t first3=his0->GetAxis(3)->GetFirst();
Int_t last3 =his0->GetAxis(3)->GetLast();
for (Int_t ibin3=first3; ibin3<last3; ibin3+=1){
his0->GetAxis(3)->SetRange(TMath::Max(ibin3-integ,1),TMath::Min(ibin3+integ,nbins3));
Double_t x3= his0->GetAxis(3)->GetBinCenter(ibin3);
THnSparse * his3= his0->Projection(3,idim);
Int_t nbins2 = his3->GetAxis(2)->GetNbins();
Int_t first2 = his3->GetAxis(2)->GetFirst();
Int_t last2 = his3->GetAxis(2)->GetLast();
for (Int_t ibin2=first2; ibin2<last2; ibin2+=1){
his3->GetAxis(2)->SetRange(TMath::Max(ibin2-integ,1),TMath::Min(ibin2+integ,nbins2));
Double_t x2= his3->GetAxis(2)->GetBinCenter(ibin2);
THnSparse * his2= his3->Projection(2,idim);
Int_t nbins1 = his2->GetAxis(1)->GetNbins();
Int_t first1 = his2->GetAxis(1)->GetFirst();
Int_t last1 = his2->GetAxis(1)->GetLast();
for (Int_t ibin1=first1; ibin1<last1; ibin1++){
Double_t x1= his2->GetAxis(1)->GetBinCenter(ibin1);
his2->GetAxis(1)->SetRange(TMath::Max(ibin1-1,1),TMath::Min(ibin1+1,nbins1));
if (TMath::Abs(x1)<0.1){
if (x1<0) his2->GetAxis(1)->SetRange(TMath::Max(ibin1-1,1),TMath::Min(ibin1,nbins1));
if (x1>0) his2->GetAxis(1)->SetRange(TMath::Max(ibin1,1),TMath::Min(ibin1+1,nbins1));
}
if (TMath::Abs(x1)<0.06){
his2->GetAxis(1)->SetRange(TMath::Max(ibin1,1),TMath::Min(ibin1,nbins1));
}
TH1 * hisDelta = his2->Projection(0);
Double_t entries = hisDelta->GetEntries();
Double_t mean=0, rms=0;
if (entries>kMinEntries){
mean = hisDelta->GetMean();
rms = hisDelta->GetRMS();
}
Double_t sector = 9.*x2/TMath::Pi();
if (sector<0) sector+=18;
Double_t dsec = sector-Int_t(sector)-0.5;
Double_t z=refX*x1;
(*pcstream)<<hname<<
"run="<<run<<
"bz="<<bz<<
"theta="<<x1<<
"phi="<<x2<<
"z="<<z<<
"snp="<<x3<<
"entries="<<entries<<
"mean="<<mean<<
"rms="<<rms<<
"refX="<<refX<<
"type="<<type<<
"sector="<<sector<<
"dsec="<<dsec<<
"\n";
delete hisDelta;
}
delete his2;
}
delete his3;
}
}
void AliTPCCorrection::MakeDistortionMapCosmic(THnSparse * hisInput, TTreeSRedirector * const pcstream, const char* hname, Int_t run, Float_t refX, Int_t type){
const Int_t kMinEntries=10;
TH1 * hisDelta=0;
Int_t idim0[4]={0 , 5, 8, 3};
hisInput->GetAxis(1)->SetRangeUser(110,190);
hisInput->GetAxis(2)->SetRangeUser(-10,35);
hisInput->GetAxis(4)->SetRangeUser(-0.3,0.3);
hisInput->GetAxis(7)->SetRangeUser(3,100);
hisDelta= hisInput->Projection(0);
hisInput->GetAxis(0)->SetRangeUser(-6.*hisDelta->GetRMS(), +6.*hisDelta->GetRMS());
delete hisDelta;
THnSparse *his0= hisInput->Projection(4,idim0);
Int_t nbins1=his0->GetAxis(1)->GetNbins();
Int_t first1=his0->GetAxis(1)->GetFirst();
Int_t last1 =his0->GetAxis(1)->GetLast();
Double_t bz=AliTrackerBase::GetBz();
Int_t idim[4]={0,1, 2, 3};
for (Int_t ibin1=first1; ibin1<=last1; ibin1++){
Double_t x1= his0->GetAxis(1)->GetBinCenter(ibin1);
his0->GetAxis(1)->SetRange(TMath::Max(ibin1-1,1),TMath::Min(ibin1+1,nbins1));
THnSparse * his1 = his0->Projection(4,idim);
Int_t nbins3 = his1->GetAxis(3)->GetNbins();
Int_t first3 = his1->GetAxis(3)->GetFirst();
Int_t last3 = his1->GetAxis(3)->GetLast();
for (Int_t ibin3=first3-1; ibin3<=last3; ibin3+=1){
his1->GetAxis(3)->SetRange(TMath::Max(ibin3-1,1),TMath::Min(ibin3+1,nbins3));
Double_t x3= his1->GetAxis(3)->GetBinCenter(ibin3);
if (ibin3<first3) {
his1->GetAxis(3)->SetRangeUser(-1,1);
x3=0;
}
THnSparse * his3= his1->Projection(4,idim);
Int_t nbins2 = his3->GetAxis(2)->GetNbins();
Int_t first2 = his3->GetAxis(2)->GetFirst();
Int_t last2 = his3->GetAxis(2)->GetLast();
for (Int_t ibin2=first2; ibin2<=last2; ibin2+=1){
his3->GetAxis(2)->SetRange(TMath::Max(ibin2-1,1),TMath::Min(ibin2+1,nbins2));
Double_t x2= his3->GetAxis(2)->GetBinCenter(ibin2);
hisDelta = his3->Projection(0);
Double_t entries = hisDelta->GetEntries();
Double_t mean=0, rms=0;
if (entries>kMinEntries){
mean = hisDelta->GetMean();
rms = hisDelta->GetRMS();
}
Double_t sector = 9.*x2/TMath::Pi();
if (sector<0) sector+=18;
Double_t dsec = sector-Int_t(sector)-0.5;
Double_t snp=0;
(*pcstream)<<hname<<
"run="<<run<<
"bz="<<bz<<
"theta="<<x1<<
"phi="<<x2<<
"z="<<x3<<
"snp="<<snp<<
"entries="<<entries<<
"mean="<<mean<<
"rms="<<rms<<
"refX="<<refX<<
"type="<<type<<
"sector="<<sector<<
"dsec="<<dsec<<
"\n";
delete hisDelta;
printf("%f\t%f\t%f\t%f\t%f\n",x1,x3,x2, entries,mean);
}
delete his3;
}
delete his1;
}
delete his0;
}
void AliTPCCorrection::MakeDistortionMapSector(THnSparse * hisInput, TTreeSRedirector * const pcstream, const char* hname, Int_t run, Int_t type){
const Int_t kMinEntries=10;
THnSparse * hisSector0=0;
TH1 * htemp=0;
Double_t bz=AliTrackerBase::GetBz();
for (Int_t isec0=0; isec0<72; isec0++){
Int_t index0[9]={0, 4, 3, 7, 1, 2, 5, 6,8};
hisInput->GetAxis(6)->SetRangeUser(isec0-0.1,isec0+0.1);
hisSector0=hisInput->Projection(7,index0);
for (Int_t isec1=isec0+1; isec1<72; isec1++){
if ( TMath::Abs((isec0%18)-(isec1%18))>1.5 && TMath::Abs((isec0%18)-(isec1%18))<16.5) continue;
printf("Sectors %d\t%d\n",isec1,isec0);
hisSector0->GetAxis(6)->SetRangeUser(isec1-0.1,isec1+0.1);
TH1 * hisX=hisSector0->Projection(5);
Double_t refX= hisX->GetMean();
delete hisX;
TH1 *hisDelta=hisSector0->Projection(0);
Double_t dmean = hisDelta->GetMean();
Double_t drms = hisDelta->GetRMS();
hisSector0->GetAxis(0)->SetRangeUser(dmean-5.*drms, dmean+5.*drms);
delete hisDelta;
Int_t idim0[5]={0 , 1, 2, 3, 4};
THnSparse *hisSector1= hisSector0->Projection(5,idim0);
Int_t idim[5]={0, 1, 2, 3, 4};
Int_t firstPhi=hisSector1->GetAxis(4)->GetFirst();
Int_t lastPhi =hisSector1->GetAxis(4)->GetLast();
for (Int_t ibinPhi=firstPhi; ibinPhi<=lastPhi; ibinPhi+=1){
Double_t xPhi= hisSector1->GetAxis(4)->GetBinCenter(ibinPhi);
Double_t psec = (9*xPhi/TMath::Pi());
if (psec<0) psec+=18;
Bool_t isOK0=kFALSE;
Bool_t isOK1=kFALSE;
if (TMath::Abs(psec-isec0%18-0.5)<1. || TMath::Abs(psec-isec0%18-17.5)<1.) isOK0=kTRUE;
if (TMath::Abs(psec-isec1%18-0.5)<1. || TMath::Abs(psec-isec1%18-17.5)<1.) isOK1=kTRUE;
if (!isOK0) continue;
if (!isOK1) continue;
hisSector1->GetAxis(4)->SetRange(TMath::Max(ibinPhi-2,firstPhi),TMath::Min(ibinPhi+2,lastPhi));
if (isec1!=isec0+36) {
hisSector1->GetAxis(4)->SetRange(TMath::Max(ibinPhi-3,firstPhi),TMath::Min(ibinPhi+3,lastPhi));
}
htemp = hisSector1->Projection(4);
xPhi=htemp->GetMean();
delete htemp;
THnSparse * hisPhi = hisSector1->Projection(4,idim);
Int_t firstZ = hisPhi->GetAxis(3)->GetFirst();
Int_t lastZ = hisPhi->GetAxis(3)->GetLast();
for (Int_t ibinZ=firstZ; ibinZ<=lastZ; ibinZ+=1){
hisPhi->GetAxis(3)->SetRange(TMath::Max(ibinZ,firstZ),TMath::Min(ibinZ,lastZ));
if (isec1!=isec0+36) {
hisPhi->GetAxis(3)->SetRange(TMath::Max(ibinZ-1,firstZ),TMath::Min(ibinZ-1,lastZ));
}
htemp = hisPhi->Projection(3);
Double_t xZ= htemp->GetMean();
delete htemp;
THnSparse * hisZ= hisPhi->Projection(3,idim);
Int_t firstSnp = hisZ->GetAxis(2)->GetFirst();
Int_t lastSnp = hisZ->GetAxis(2)->GetLast();
for (Int_t ibinSnp=firstSnp; ibinSnp<=lastSnp; ibinSnp+=2){
hisZ->GetAxis(2)->SetRange(TMath::Max(ibinSnp-1,firstSnp),TMath::Min(ibinSnp+1,lastSnp));
if (isec1!=isec0+36) {
hisZ->GetAxis(2)->SetRange(TMath::Max(ibinSnp-2,firstSnp),TMath::Min(ibinSnp+2,lastSnp));
}
htemp = hisZ->Projection(2);
Double_t xSnp= htemp->GetMean();
delete htemp;
THnSparse * hisSnp= hisZ->Projection(2,idim);
Int_t firstTheta = hisSnp->GetAxis(1)->GetFirst();
Int_t lastTheta = hisSnp->GetAxis(1)->GetLast();
for (Int_t ibinTheta=firstTheta; ibinTheta<=lastTheta; ibinTheta+=2){
hisSnp->GetAxis(1)->SetRange(TMath::Max(ibinTheta-2,firstTheta),TMath::Min(ibinTheta+2,lastTheta));
if (isec1!=isec0+36) {
hisSnp->GetAxis(1)->SetRange(TMath::Max(ibinTheta-3,firstTheta),TMath::Min(ibinTheta+3,lastTheta));
}
htemp = hisSnp->Projection(1);
Double_t xTheta=htemp->GetMean();
delete htemp;
hisDelta = hisSnp->Projection(0);
Double_t entries = hisDelta->GetEntries();
Double_t mean=0, rms=0;
if (entries>kMinEntries){
mean = hisDelta->GetMean();
rms = hisDelta->GetRMS();
}
Double_t sector = 9.*xPhi/TMath::Pi();
if (sector<0) sector+=18;
Double_t dsec = sector-Int_t(sector)-0.5;
Int_t dtype=1;
(*pcstream)<<hname<<
"run="<<run<<
"bz="<<bz<<
"ptype="<<type<<
"dtype="<<dtype<<
"isec0="<<isec0<<
"isec1="<<isec1<<
"sector="<<sector<<
"dsec="<<dsec<<
"theta="<<xTheta<<
"phi="<<xPhi<<
"z="<<xZ<<
"snp="<<xSnp<<
"entries="<<entries<<
"mean="<<mean<<
"rms="<<rms<<
"refX="<<refX<<
"\n";
delete hisDelta;
printf("%d\t%d\t%f\t%f\t%f\t%f\t%f\t%f\n",isec0, isec1, xPhi,xZ,xSnp, xTheta, entries,mean);
}
delete hisSnp;
}
delete hisZ;
}
delete hisPhi;
}
delete hisSector1;
}
delete hisSector0;
}
}
void AliTPCCorrection::StoreInOCDB(Int_t startRun, Int_t endRun, const char *comment){
TString ocdbStorage="";
ocdbStorage+="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTPCCorrection");
metaData->SetResponsible("Marian Ivanov");
metaData->SetBeamPeriod(1);
metaData->SetAliRootVersion("05-25-01");
TString userName=gSystem->GetFromPipe("echo $USER");
TString date=gSystem->GetFromPipe("date");
if (!comment) metaData->SetComment(Form("Space point distortion calibration\n User: %s\n Data%s",userName.Data(),date.Data()));
if (comment) metaData->SetComment(comment);
AliCDBId* id1=NULL;
id1=new AliCDBId("TPC/Calib/Correction", startRun, endRun);
AliCDBStorage* gStorage = AliCDBManager::Instance()->GetStorage(ocdbStorage);
gStorage->Put(this, (*id1), metaData);
}
void AliTPCCorrection::FastSimDistortedVertex(Double_t orgVertex[3], Int_t nTracks, AliESDVertex &aV, AliESDVertex &avOrg, AliESDVertex &cV, AliESDVertex &cvOrg, TTreeSRedirector * const pcstream, Double_t etaCuts){
AliMagF* magF= (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
if (!magF) AliError("Magneticd field - not initialized");
Double_t bz = magF->SolenoidField();
printf("bz: %f\n",bz);
AliVertexerTracks *vertexer = new AliVertexerTracks(bz);
TObjArray aTrk;
TObjArray daTrk;
UShort_t *aId = new UShort_t[nTracks];
TObjArray cTrk;
TObjArray dcTrk;
UShort_t *cId = new UShort_t [nTracks];
Int_t id=0;
Double_t mass = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
TF1 fpt("fpt",Form("x*(1+(sqrt(x*x+%f^2)-%f)/([0]*[1]))^(-[0])",mass,mass),0.4,10);
fpt.SetParameters(7.24,0.120);
fpt.SetNpx(10000);
for(Int_t nt=0; nt<nTracks; nt++){
Double_t phi = gRandom->Uniform(0.0, 2*TMath::Pi());
Double_t eta = gRandom->Uniform(-etaCuts, etaCuts);
Double_t pt = fpt.GetRandom();
Short_t sign=1;
if(gRandom->Rndm() < 0.5){
sign =1;
}else{
sign=-1;
}
Double_t theta = 2*TMath::ATan(TMath::Exp(-eta))-TMath::Pi()/2.;
Double_t pxyz[3];
pxyz[0]=pt*TMath::Cos(phi);
pxyz[1]=pt*TMath::Sin(phi);
pxyz[2]=pt*TMath::Tan(theta);
Double_t cv[21]={0};
AliExternalTrackParam *t= new AliExternalTrackParam(orgVertex, pxyz, cv, sign);
Double_t refX=1.;
Int_t dir=-1;
AliExternalTrackParam *td = FitDistortedTrack(*t, refX, dir, NULL);
if (!td) continue;
if (pcstream) (*pcstream)<<"track"<<
"eta="<<eta<<
"theta="<<theta<<
"tOrig.="<<t<<
"td.="<<td<<
"\n";
if(( eta>0.07 )&&( eta<etaCuts )) {
if (td){
daTrk.AddLast(td);
aTrk.AddLast(t);
Int_t nn=aTrk.GetEntriesFast();
aId[nn]=id;
}
}else if(( eta<-0.07 )&&( eta>-etaCuts )){
if (td){
dcTrk.AddLast(td);
cTrk.AddLast(t);
Int_t nn=cTrk.GetEntriesFast();
cId[nn]=id;
}
}
id++;
}
vertexer->SetTPCMode();
vertexer->SetConstraintOff();
aV = *((AliESDVertex*)vertexer->FindPrimaryVertex(&daTrk,aId));
avOrg = *((AliESDVertex*)vertexer->FindPrimaryVertex(&aTrk,aId));
cV = *((AliESDVertex*)vertexer->FindPrimaryVertex(&dcTrk,cId));
cvOrg = *((AliESDVertex*)vertexer->FindPrimaryVertex(&cTrk,cId));
if (pcstream) (*pcstream)<<"vertex"<<
"x="<<orgVertex[0]<<
"y="<<orgVertex[1]<<
"z="<<orgVertex[2]<<
"av.="<<&aV<<
"cv.="<<&cV<<
"avO.="<<&avOrg<<
"cvO.="<<&cvOrg<<
"\n";
delete []aId;
delete []cId;
}
void AliTPCCorrection::AddVisualCorrection(AliTPCCorrection* corr, Int_t position){
if (!fgVisualCorrection) fgVisualCorrection=new TObjArray(10000);
if (position>=fgVisualCorrection->GetEntriesFast())
fgVisualCorrection->Expand((position+10)*2);
fgVisualCorrection->AddAt(corr, position);
}
AliTPCCorrection* AliTPCCorrection::GetVisualCorrection(Int_t position) {
return fgVisualCorrection? (AliTPCCorrection*)fgVisualCorrection->At(position):0;
}
Double_t AliTPCCorrection::GetCorrSector(Double_t sector, Double_t r, Double_t kZ, Int_t axisType, Int_t corrType){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi=sector*TMath::Pi()/9.;
Double_t gx = r*TMath::Cos(phi);
Double_t gy = r*TMath::Sin(phi);
Double_t gz = r*kZ;
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->DistortPoint(distPoint, nsector);
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi0=TMath::ATan2(gy,gx);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
if (axisType==3) return (TMath::Cos(phi)*(distPoint[0]-gx)+ TMath::Cos(phi)*(distPoint[1]-gy));
return phi1-phi0;
}
Double_t AliTPCCorrection::GetCorrXYZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi0= TMath::ATan2(gy,gx);
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->CorrectPoint(distPoint, nsector);
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
return phi1-phi0;
}
Double_t AliTPCCorrection::GetCorrXYZDz(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType,Double_t delta){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi0= TMath::ATan2(gy,gx);
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
Float_t dxyz[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->GetCorrectionDz(distPoint, nsector,dxyz,delta);
distPoint[0]+=dxyz[0];
distPoint[1]+=dxyz[1];
distPoint[2]+=dxyz[2];
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
return phi1-phi0;
}
Double_t AliTPCCorrection::GetCorrXYZIntegrateZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType,Double_t delta){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi0= TMath::ATan2(gy,gx);
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
Float_t dxyz[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->GetCorrectionIntegralDz(distPoint, nsector,dxyz,delta);
distPoint[0]+=dxyz[0];
distPoint[1]+=dxyz[1];
distPoint[2]+=dxyz[2];
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
return phi1-phi0;
}
Double_t AliTPCCorrection::GetDistXYZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi0= TMath::ATan2(gy,gx);
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->DistortPoint(distPoint, nsector);
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
return phi1-phi0;
}
Double_t AliTPCCorrection::GetDistXYZDz(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType,Double_t delta){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi0= TMath::ATan2(gy,gx);
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
Float_t dxyz[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->GetDistortionDz(distPoint, nsector,dxyz,delta);
distPoint[0]+=dxyz[0];
distPoint[1]+=dxyz[1];
distPoint[2]+=dxyz[2];
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
return phi1-phi0;
}
Double_t AliTPCCorrection::GetDistXYZIntegrateZ(Double_t gx, Double_t gy, Double_t gz, Int_t axisType, Int_t corrType,Double_t delta){
if (!fgVisualCorrection) return 0;
AliTPCCorrection *corr = (AliTPCCorrection*)fgVisualCorrection->At(corrType);
if (!corr) return 0;
Double_t phi0= TMath::ATan2(gy,gx);
Int_t nsector=(gz>=0) ? 0:18;
Float_t distPoint[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
Float_t dxyz[3]={static_cast<Float_t>(gx),static_cast<Float_t>(gy),static_cast<Float_t>(gz)};
corr->GetDistortionIntegralDz(distPoint, nsector,dxyz,delta);
distPoint[0]+=dxyz[0];
distPoint[1]+=dxyz[1];
distPoint[2]+=dxyz[2];
Double_t r0=TMath::Sqrt(gx*gx+gy*gy);
Double_t r1=TMath::Sqrt(distPoint[0]*distPoint[0]+distPoint[1]*distPoint[1]);
Double_t phi1=TMath::ATan2(distPoint[1],distPoint[0]);
if (axisType==0) return r1-r0;
if (axisType==1) return (phi1-phi0)*r0;
if (axisType==2) return distPoint[2]-gz;
return phi1-phi0;
}
void AliTPCCorrection::MakeLaserDistortionTree(TTree* tree, TObjArray *, Int_t ){
AliTPCcalibDB* calib=AliTPCcalibDB::Instance();
AliTPCCorrection * correction = calib->GetTPCComposedCorrection();
if (!correction) correction = calib->GetTPCComposedCorrection(AliTrackerBase::GetBz());
correction->AddVisualCorrection(correction,0);
const Double_t cutErrY=0.05;
const Double_t kSigmaCut=4;
const Double_t kEpsilon=0.00000001;
TVectorD *vecdY=0;
TVectorD *vecdZ=0;
TVectorD *veceY=0;
TVectorD *veceZ=0;
AliTPCLaserTrack *ltr=0;
AliTPCLaserTrack::LoadTracks();
tree->SetBranchAddress("dY.",&vecdY);
tree->SetBranchAddress("dZ.",&vecdZ);
tree->SetBranchAddress("eY.",&veceY);
tree->SetBranchAddress("eZ.",&veceZ);
tree->SetBranchAddress("LTr.",<r);
Int_t entries= tree->GetEntries();
TTreeSRedirector *pcstream= new TTreeSRedirector("distortionLaser_0.root");
Double_t bz=AliTrackerBase::GetBz();
for (Int_t ientry=0; ientry<entries; ientry++){
tree->GetEntry(ientry);
if (!ltr->GetVecGX()){
ltr->UpdatePoints();
}
TVectorD fit10(5);
TVectorD fit5(5);
printf("Entry\t%d\n",ientry);
for (Int_t irow0=0; irow0<158; irow0+=1){
TLinearFitter fitter10(4,"hyp3");
TLinearFitter fitter5(2,"hyp1");
Int_t sector= (Int_t)(*ltr->GetVecSec())[irow0];
if (sector<0) continue;
Double_t refX= (*ltr->GetVecLX())[irow0];
Int_t firstRow1 = TMath::Max(irow0-10,0);
Int_t lastRow1 = TMath::Min(irow0+10,158);
Double_t padWidth=(irow0<64)?0.4:0.6;
for (Int_t irow1=firstRow1; irow1<=lastRow1; irow1++){
if (TMath::Abs((*ltr->GetVecSec())[irow1]-sector)>kEpsilon) continue;
if (veceY->GetMatrixArray()[irow1]>cutErrY) continue;
if (TMath::Abs(vecdY->GetMatrixArray()[irow1])<kEpsilon) continue;
Double_t idealX= (*ltr->GetVecLX())[irow1];
Double_t idealY= (*ltr->GetVecLY())[irow1];
Double_t gx= (*ltr->GetVecGX())[irow1];
Double_t gy= (*ltr->GetVecGY())[irow1];
Double_t gz= (*ltr->GetVecGZ())[irow1];
Double_t measY=(*vecdY)[irow1]+idealY;
Double_t deltaR = GetCorrXYZ(gx, gy, gz, 0,0);
Double_t xxx[4]={idealX+deltaR-refX,TMath::Cos(idealY/padWidth), TMath::Sin(idealY/padWidth)};
fitter10.AddPoint(xxx,measY,1);
}
Bool_t isOK=kTRUE;
Double_t rms10=0;
Double_t mean10 =0;
Double_t slope10 =0;
Double_t cosPart10 = 0;
Double_t sinPart10 =0;
if (fitter10.GetNpoints()>10){
fitter10.Eval();
rms10=TMath::Sqrt(fitter10.GetChisquare()/(fitter10.GetNpoints()-4));
mean10 = fitter10.GetParameter(0);
slope10 = fitter10.GetParameter(1);
cosPart10 = fitter10.GetParameter(2);
sinPart10 = fitter10.GetParameter(3);
for (Int_t irow1=firstRow1+5; irow1<=lastRow1-5; irow1++){
if (TMath::Abs((*ltr->GetVecSec())[irow1]-sector)>kEpsilon) continue;
if (veceY->GetMatrixArray()[irow1]>cutErrY) continue;
if (TMath::Abs(vecdY->GetMatrixArray()[irow1])<kEpsilon) continue;
Double_t idealX= (*ltr->GetVecLX())[irow1];
Double_t idealY= (*ltr->GetVecLY())[irow1];
Double_t gx= (*ltr->GetVecGX())[irow1];
Double_t gy= (*ltr->GetVecGY())[irow1];
Double_t gz= (*ltr->GetVecGZ())[irow1];
Double_t measY=(*vecdY)[irow1]+idealY;
Double_t deltaR = GetCorrXYZ(gx, gy, gz, 0,0);
Double_t expY= mean10+slope10*(idealX+deltaR-refX);
if (TMath::Abs(measY-expY)>kSigmaCut*rms10) continue;
Double_t corr=cosPart10*TMath::Cos(idealY/padWidth)+sinPart10*TMath::Sin(idealY/padWidth);
Double_t xxx[4]={idealX+deltaR-refX,TMath::Cos(idealY/padWidth), TMath::Sin(idealY/padWidth)};
fitter5.AddPoint(xxx,measY-corr,1);
}
}else{
isOK=kFALSE;
}
if (fitter5.GetNpoints()<8) isOK=kFALSE;
Double_t rms5=0;
Double_t offset5 =0;
Double_t slope5 =0;
if (isOK){
fitter5.Eval();
rms5=TMath::Sqrt(fitter5.GetChisquare()/(fitter5.GetNpoints()-4));
offset5 = fitter5.GetParameter(0);
slope5 = fitter5.GetParameter(0);
}
Double_t dtype=5;
Double_t ptype=0;
Double_t phi =(*ltr->GetVecPhi())[irow0];
Double_t theta =ltr->GetTgl();
Double_t mean=(vecdY)->GetMatrixArray()[irow0];
Double_t gx=0,gy=0,gz=0;
Double_t snp = (*ltr->GetVecP2())[irow0];
Int_t bundle= ltr->GetBundle();
Int_t id= ltr->GetId();
gx = (*ltr->GetVecGX())[irow0];
gy = (*ltr->GetVecGY())[irow0];
gz = (*ltr->GetVecGZ())[irow0];
Double_t dRrec = GetCorrXYZ(gx, gy, gz, 0,0);
fitter10.GetParameters(fit10);
fitter5.GetParameters(fit5);
Double_t idealY= (*ltr->GetVecLY())[irow0];
Double_t measY=(*vecdY)[irow0]+idealY;
Double_t corr=cosPart10*TMath::Cos(idealY/padWidth)+sinPart10*TMath::Sin(idealY/padWidth);
if (TMath::Max(rms5,rms10)>0.06) isOK=kFALSE;
(*pcstream)<<"fitFull"<<
"bz="<<bz<<
"dtype="<<dtype<<
"ptype="<<ptype<<
"theta="<<theta<<
"phi="<<phi<<
"snp="<<snp<<
"sector="<<sector<<
"bundle="<<bundle<<
"refX="<<refX<<
"gx="<<gx<<
"gy="<<gy<<
"gz="<<gz<<
"dRrec="<<dRrec<<
"id="<<id<<
"rms10="<<rms10<<
"rms5="<<rms5<<
"fit10.="<<&fit10<<
"fit5.="<<&fit5<<
"measY="<<measY<<
"mean="<<mean<<
"idealY="<<idealY<<
"corr="<<corr<<
"isOK="<<isOK<<
"\n";
}
}
delete pcstream;
}
AliTPCCorrection.cxx:1000 AliTPCCorrection.cxx:1001 AliTPCCorrection.cxx:1002 AliTPCCorrection.cxx:1003 AliTPCCorrection.cxx:1004 AliTPCCorrection.cxx:1005 AliTPCCorrection.cxx:1006 AliTPCCorrection.cxx:1007 AliTPCCorrection.cxx:1008 AliTPCCorrection.cxx:1009 AliTPCCorrection.cxx:1010 AliTPCCorrection.cxx:1011 AliTPCCorrection.cxx:1012 AliTPCCorrection.cxx:1013 AliTPCCorrection.cxx:1014 AliTPCCorrection.cxx:1015 AliTPCCorrection.cxx:1016 AliTPCCorrection.cxx:1017 AliTPCCorrection.cxx:1018 AliTPCCorrection.cxx:1019 AliTPCCorrection.cxx:1020 AliTPCCorrection.cxx:1021 AliTPCCorrection.cxx:1022 AliTPCCorrection.cxx:1023 AliTPCCorrection.cxx:1024 AliTPCCorrection.cxx:1025 AliTPCCorrection.cxx:1026 AliTPCCorrection.cxx:1027 AliTPCCorrection.cxx:1028 AliTPCCorrection.cxx:1029 AliTPCCorrection.cxx:1030 AliTPCCorrection.cxx:1031 AliTPCCorrection.cxx:1032 AliTPCCorrection.cxx:1033 AliTPCCorrection.cxx:1034 AliTPCCorrection.cxx:1035 AliTPCCorrection.cxx:1036 AliTPCCorrection.cxx:1037 AliTPCCorrection.cxx:1038 AliTPCCorrection.cxx:1039 AliTPCCorrection.cxx:1040 AliTPCCorrection.cxx:1041 AliTPCCorrection.cxx:1042 AliTPCCorrection.cxx:1043 AliTPCCorrection.cxx:1044 AliTPCCorrection.cxx:1045 AliTPCCorrection.cxx:1046 AliTPCCorrection.cxx:1047 AliTPCCorrection.cxx:1048 AliTPCCorrection.cxx:1049 AliTPCCorrection.cxx:1050 AliTPCCorrection.cxx:1051 AliTPCCorrection.cxx:1052 AliTPCCorrection.cxx:1053 AliTPCCorrection.cxx:1054 AliTPCCorrection.cxx:1055 AliTPCCorrection.cxx:1056 AliTPCCorrection.cxx:1057 AliTPCCorrection.cxx:1058 AliTPCCorrection.cxx:1059 AliTPCCorrection.cxx:1060 AliTPCCorrection.cxx:1061 AliTPCCorrection.cxx:1062 AliTPCCorrection.cxx:1063 AliTPCCorrection.cxx:1064 AliTPCCorrection.cxx:1065 AliTPCCorrection.cxx:1066 AliTPCCorrection.cxx:1067 AliTPCCorrection.cxx:1068 AliTPCCorrection.cxx:1069 AliTPCCorrection.cxx:1070 AliTPCCorrection.cxx:1071 AliTPCCorrection.cxx:1072 AliTPCCorrection.cxx:1073 AliTPCCorrection.cxx:1074 AliTPCCorrection.cxx:1075 AliTPCCorrection.cxx:1076 AliTPCCorrection.cxx:1077 AliTPCCorrection.cxx:1078 AliTPCCorrection.cxx:1079 AliTPCCorrection.cxx:1080 AliTPCCorrection.cxx:1081 AliTPCCorrection.cxx:1082 AliTPCCorrection.cxx:1083 AliTPCCorrection.cxx:1084 AliTPCCorrection.cxx:1085 AliTPCCorrection.cxx:1086 AliTPCCorrection.cxx:1087 AliTPCCorrection.cxx:1088 AliTPCCorrection.cxx:1089 AliTPCCorrection.cxx:1090 AliTPCCorrection.cxx:1091 AliTPCCorrection.cxx:1092 AliTPCCorrection.cxx:1093 AliTPCCorrection.cxx:1094 AliTPCCorrection.cxx:1095 AliTPCCorrection.cxx:1096 AliTPCCorrection.cxx:1097 AliTPCCorrection.cxx:1098 AliTPCCorrection.cxx:1099 AliTPCCorrection.cxx:1100 AliTPCCorrection.cxx:1101 AliTPCCorrection.cxx:1102 AliTPCCorrection.cxx:1103 AliTPCCorrection.cxx:1104 AliTPCCorrection.cxx:1105 AliTPCCorrection.cxx:1106 AliTPCCorrection.cxx:1107 AliTPCCorrection.cxx:1108 AliTPCCorrection.cxx:1109 AliTPCCorrection.cxx:1110 AliTPCCorrection.cxx:1111 AliTPCCorrection.cxx:1112 AliTPCCorrection.cxx:1113 AliTPCCorrection.cxx:1114 AliTPCCorrection.cxx:1115 AliTPCCorrection.cxx:1116 AliTPCCorrection.cxx:1117 AliTPCCorrection.cxx:1118 AliTPCCorrection.cxx:1119 AliTPCCorrection.cxx:1120 AliTPCCorrection.cxx:1121 AliTPCCorrection.cxx:1122 AliTPCCorrection.cxx:1123 AliTPCCorrection.cxx:1124 AliTPCCorrection.cxx:1125 AliTPCCorrection.cxx:1126 AliTPCCorrection.cxx:1127 AliTPCCorrection.cxx:1128 AliTPCCorrection.cxx:1129 AliTPCCorrection.cxx:1130 AliTPCCorrection.cxx:1131 AliTPCCorrection.cxx:1132 AliTPCCorrection.cxx:1133 AliTPCCorrection.cxx:1134 AliTPCCorrection.cxx:1135 AliTPCCorrection.cxx:1136 AliTPCCorrection.cxx:1137 AliTPCCorrection.cxx:1138 AliTPCCorrection.cxx:1139 AliTPCCorrection.cxx:1140 AliTPCCorrection.cxx:1141 AliTPCCorrection.cxx:1142 AliTPCCorrection.cxx:1143 AliTPCCorrection.cxx:1144 AliTPCCorrection.cxx:1145 AliTPCCorrection.cxx:1146 AliTPCCorrection.cxx:1147 AliTPCCorrection.cxx:1148 AliTPCCorrection.cxx:1149 AliTPCCorrection.cxx:1150 AliTPCCorrection.cxx:1151 AliTPCCorrection.cxx:1152 AliTPCCorrection.cxx:1153 AliTPCCorrection.cxx:1154 AliTPCCorrection.cxx:1155 AliTPCCorrection.cxx:1156 AliTPCCorrection.cxx:1157 AliTPCCorrection.cxx:1158 AliTPCCorrection.cxx:1159 AliTPCCorrection.cxx:1160 AliTPCCorrection.cxx:1161 AliTPCCorrection.cxx:1162 AliTPCCorrection.cxx:1163 AliTPCCorrection.cxx:1164 AliTPCCorrection.cxx:1165 AliTPCCorrection.cxx:1166 AliTPCCorrection.cxx:1167 AliTPCCorrection.cxx:1168 AliTPCCorrection.cxx:1169 AliTPCCorrection.cxx:1170 AliTPCCorrection.cxx:1171 AliTPCCorrection.cxx:1172 AliTPCCorrection.cxx:1173 AliTPCCorrection.cxx:1174 AliTPCCorrection.cxx:1175 AliTPCCorrection.cxx:1176 AliTPCCorrection.cxx:1177 AliTPCCorrection.cxx:1178 AliTPCCorrection.cxx:1179 AliTPCCorrection.cxx:1180 AliTPCCorrection.cxx:1181 AliTPCCorrection.cxx:1182 AliTPCCorrection.cxx:1183 AliTPCCorrection.cxx:1184 AliTPCCorrection.cxx:1185 AliTPCCorrection.cxx:1186 AliTPCCorrection.cxx:1187 AliTPCCorrection.cxx:1188 AliTPCCorrection.cxx:1189 AliTPCCorrection.cxx:1190 AliTPCCorrection.cxx:1191 AliTPCCorrection.cxx:1192 AliTPCCorrection.cxx:1193 AliTPCCorrection.cxx:1194 AliTPCCorrection.cxx:1195 AliTPCCorrection.cxx:1196 AliTPCCorrection.cxx:1197 AliTPCCorrection.cxx:1198 AliTPCCorrection.cxx:1199 AliTPCCorrection.cxx:1200 AliTPCCorrection.cxx:1201 AliTPCCorrection.cxx:1202 AliTPCCorrection.cxx:1203 AliTPCCorrection.cxx:1204 AliTPCCorrection.cxx:1205 AliTPCCorrection.cxx:1206 AliTPCCorrection.cxx:1207 AliTPCCorrection.cxx:1208 AliTPCCorrection.cxx:1209 AliTPCCorrection.cxx:1210 AliTPCCorrection.cxx:1211 AliTPCCorrection.cxx:1212 AliTPCCorrection.cxx:1213 AliTPCCorrection.cxx:1214 AliTPCCorrection.cxx:1215 AliTPCCorrection.cxx:1216 AliTPCCorrection.cxx:1217 AliTPCCorrection.cxx:1218 AliTPCCorrection.cxx:1219 AliTPCCorrection.cxx:1220 AliTPCCorrection.cxx:1221 AliTPCCorrection.cxx:1222 AliTPCCorrection.cxx:1223 AliTPCCorrection.cxx:1224 AliTPCCorrection.cxx:1225 AliTPCCorrection.cxx:1226 AliTPCCorrection.cxx:1227 AliTPCCorrection.cxx:1228 AliTPCCorrection.cxx:1229 AliTPCCorrection.cxx:1230 AliTPCCorrection.cxx:1231 AliTPCCorrection.cxx:1232 AliTPCCorrection.cxx:1233 AliTPCCorrection.cxx:1234 AliTPCCorrection.cxx:1235 AliTPCCorrection.cxx:1236 AliTPCCorrection.cxx:1237 AliTPCCorrection.cxx:1238 AliTPCCorrection.cxx:1239 AliTPCCorrection.cxx:1240 AliTPCCorrection.cxx:1241 AliTPCCorrection.cxx:1242 AliTPCCorrection.cxx:1243 AliTPCCorrection.cxx:1244 AliTPCCorrection.cxx:1245 AliTPCCorrection.cxx:1246 AliTPCCorrection.cxx:1247 AliTPCCorrection.cxx:1248 AliTPCCorrection.cxx:1249 AliTPCCorrection.cxx:1250 AliTPCCorrection.cxx:1251 AliTPCCorrection.cxx:1252 AliTPCCorrection.cxx:1253 AliTPCCorrection.cxx:1254 AliTPCCorrection.cxx:1255 AliTPCCorrection.cxx:1256 AliTPCCorrection.cxx:1257 AliTPCCorrection.cxx:1258 AliTPCCorrection.cxx:1259 AliTPCCorrection.cxx:1260 AliTPCCorrection.cxx:1261 AliTPCCorrection.cxx:1262 AliTPCCorrection.cxx:1263 AliTPCCorrection.cxx:1264 AliTPCCorrection.cxx:1265 AliTPCCorrection.cxx:1266 AliTPCCorrection.cxx:1267 AliTPCCorrection.cxx:1268 AliTPCCorrection.cxx:1269 AliTPCCorrection.cxx:1270 AliTPCCorrection.cxx:1271 AliTPCCorrection.cxx:1272 AliTPCCorrection.cxx:1273 AliTPCCorrection.cxx:1274 AliTPCCorrection.cxx:1275 AliTPCCorrection.cxx:1276 AliTPCCorrection.cxx:1277 AliTPCCorrection.cxx:1278 AliTPCCorrection.cxx:1279 AliTPCCorrection.cxx:1280 AliTPCCorrection.cxx:1281 AliTPCCorrection.cxx:1282 AliTPCCorrection.cxx:1283 AliTPCCorrection.cxx:1284 AliTPCCorrection.cxx:1285 AliTPCCorrection.cxx:1286 AliTPCCorrection.cxx:1287 AliTPCCorrection.cxx:1288 AliTPCCorrection.cxx:1289 AliTPCCorrection.cxx:1290 AliTPCCorrection.cxx:1291 AliTPCCorrection.cxx:1292 AliTPCCorrection.cxx:1293 AliTPCCorrection.cxx:1294 AliTPCCorrection.cxx:1295 AliTPCCorrection.cxx:1296 AliTPCCorrection.cxx:1297 AliTPCCorrection.cxx:1298 AliTPCCorrection.cxx:1299 AliTPCCorrection.cxx:1300 AliTPCCorrection.cxx:1301 AliTPCCorrection.cxx:1302 AliTPCCorrection.cxx:1303 AliTPCCorrection.cxx:1304 AliTPCCorrection.cxx:1305 AliTPCCorrection.cxx:1306 AliTPCCorrection.cxx:1307 AliTPCCorrection.cxx:1308 AliTPCCorrection.cxx:1309 AliTPCCorrection.cxx:1310 AliTPCCorrection.cxx:1311 AliTPCCorrection.cxx:1312 AliTPCCorrection.cxx:1313 AliTPCCorrection.cxx:1314 AliTPCCorrection.cxx:1315 AliTPCCorrection.cxx:1316 AliTPCCorrection.cxx:1317 AliTPCCorrection.cxx:1318 AliTPCCorrection.cxx:1319 AliTPCCorrection.cxx:1320 AliTPCCorrection.cxx:1321 AliTPCCorrection.cxx:1322 AliTPCCorrection.cxx:1323 AliTPCCorrection.cxx:1324 AliTPCCorrection.cxx:1325 AliTPCCorrection.cxx:1326 AliTPCCorrection.cxx:1327 AliTPCCorrection.cxx:1328 AliTPCCorrection.cxx:1329 AliTPCCorrection.cxx:1330 AliTPCCorrection.cxx:1331 AliTPCCorrection.cxx:1332 AliTPCCorrection.cxx:1333 AliTPCCorrection.cxx:1334 AliTPCCorrection.cxx:1335 AliTPCCorrection.cxx:1336 AliTPCCorrection.cxx:1337 AliTPCCorrection.cxx:1338 AliTPCCorrection.cxx:1339 AliTPCCorrection.cxx:1340 AliTPCCorrection.cxx:1341 AliTPCCorrection.cxx:1342 AliTPCCorrection.cxx:1343 AliTPCCorrection.cxx:1344 AliTPCCorrection.cxx:1345 AliTPCCorrection.cxx:1346 AliTPCCorrection.cxx:1347 AliTPCCorrection.cxx:1348 AliTPCCorrection.cxx:1349 AliTPCCorrection.cxx:1350 AliTPCCorrection.cxx:1351 AliTPCCorrection.cxx:1352 AliTPCCorrection.cxx:1353 AliTPCCorrection.cxx:1354 AliTPCCorrection.cxx:1355 AliTPCCorrection.cxx:1356 AliTPCCorrection.cxx:1357 AliTPCCorrection.cxx:1358 AliTPCCorrection.cxx:1359 AliTPCCorrection.cxx:1360 AliTPCCorrection.cxx:1361 AliTPCCorrection.cxx:1362 AliTPCCorrection.cxx:1363 AliTPCCorrection.cxx:1364 AliTPCCorrection.cxx:1365 AliTPCCorrection.cxx:1366 AliTPCCorrection.cxx:1367 AliTPCCorrection.cxx:1368 AliTPCCorrection.cxx:1369 AliTPCCorrection.cxx:1370 AliTPCCorrection.cxx:1371 AliTPCCorrection.cxx:1372 AliTPCCorrection.cxx:1373 AliTPCCorrection.cxx:1374 AliTPCCorrection.cxx:1375 AliTPCCorrection.cxx:1376 AliTPCCorrection.cxx:1377 AliTPCCorrection.cxx:1378 AliTPCCorrection.cxx:1379 AliTPCCorrection.cxx:1380 AliTPCCorrection.cxx:1381 AliTPCCorrection.cxx:1382 AliTPCCorrection.cxx:1383 AliTPCCorrection.cxx:1384 AliTPCCorrection.cxx:1385 AliTPCCorrection.cxx:1386 AliTPCCorrection.cxx:1387 AliTPCCorrection.cxx:1388 AliTPCCorrection.cxx:1389 AliTPCCorrection.cxx:1390 AliTPCCorrection.cxx:1391 AliTPCCorrection.cxx:1392 AliTPCCorrection.cxx:1393 AliTPCCorrection.cxx:1394 AliTPCCorrection.cxx:1395 AliTPCCorrection.cxx:1396 AliTPCCorrection.cxx:1397 AliTPCCorrection.cxx:1398 AliTPCCorrection.cxx:1399 AliTPCCorrection.cxx:1400 AliTPCCorrection.cxx:1401 AliTPCCorrection.cxx:1402 AliTPCCorrection.cxx:1403 AliTPCCorrection.cxx:1404 AliTPCCorrection.cxx:1405 AliTPCCorrection.cxx:1406 AliTPCCorrection.cxx:1407 AliTPCCorrection.cxx:1408 AliTPCCorrection.cxx:1409 AliTPCCorrection.cxx:1410 AliTPCCorrection.cxx:1411 AliTPCCorrection.cxx:1412 AliTPCCorrection.cxx:1413 AliTPCCorrection.cxx:1414 AliTPCCorrection.cxx:1415 AliTPCCorrection.cxx:1416 AliTPCCorrection.cxx:1417 AliTPCCorrection.cxx:1418 AliTPCCorrection.cxx:1419 AliTPCCorrection.cxx:1420 AliTPCCorrection.cxx:1421 AliTPCCorrection.cxx:1422 AliTPCCorrection.cxx:1423 AliTPCCorrection.cxx:1424 AliTPCCorrection.cxx:1425 AliTPCCorrection.cxx:1426 AliTPCCorrection.cxx:1427 AliTPCCorrection.cxx:1428 AliTPCCorrection.cxx:1429 AliTPCCorrection.cxx:1430 AliTPCCorrection.cxx:1431 AliTPCCorrection.cxx:1432 AliTPCCorrection.cxx:1433 AliTPCCorrection.cxx:1434 AliTPCCorrection.cxx:1435 AliTPCCorrection.cxx:1436 AliTPCCorrection.cxx:1437 AliTPCCorrection.cxx:1438 AliTPCCorrection.cxx:1439 AliTPCCorrection.cxx:1440 AliTPCCorrection.cxx:1441 AliTPCCorrection.cxx:1442 AliTPCCorrection.cxx:1443 AliTPCCorrection.cxx:1444 AliTPCCorrection.cxx:1445 AliTPCCorrection.cxx:1446 AliTPCCorrection.cxx:1447 AliTPCCorrection.cxx:1448 AliTPCCorrection.cxx:1449 AliTPCCorrection.cxx:1450 AliTPCCorrection.cxx:1451 AliTPCCorrection.cxx:1452 AliTPCCorrection.cxx:1453 AliTPCCorrection.cxx:1454 AliTPCCorrection.cxx:1455 AliTPCCorrection.cxx:1456 AliTPCCorrection.cxx:1457 AliTPCCorrection.cxx:1458 AliTPCCorrection.cxx:1459 AliTPCCorrection.cxx:1460 AliTPCCorrection.cxx:1461 AliTPCCorrection.cxx:1462 AliTPCCorrection.cxx:1463 AliTPCCorrection.cxx:1464 AliTPCCorrection.cxx:1465 AliTPCCorrection.cxx:1466 AliTPCCorrection.cxx:1467 AliTPCCorrection.cxx:1468 AliTPCCorrection.cxx:1469 AliTPCCorrection.cxx:1470 AliTPCCorrection.cxx:1471 AliTPCCorrection.cxx:1472 AliTPCCorrection.cxx:1473 AliTPCCorrection.cxx:1474 AliTPCCorrection.cxx:1475 AliTPCCorrection.cxx:1476 AliTPCCorrection.cxx:1477 AliTPCCorrection.cxx:1478 AliTPCCorrection.cxx:1479 AliTPCCorrection.cxx:1480 AliTPCCorrection.cxx:1481 AliTPCCorrection.cxx:1482 AliTPCCorrection.cxx:1483 AliTPCCorrection.cxx:1484 AliTPCCorrection.cxx:1485 AliTPCCorrection.cxx:1486 AliTPCCorrection.cxx:1487 AliTPCCorrection.cxx:1488 AliTPCCorrection.cxx:1489 AliTPCCorrection.cxx:1490 AliTPCCorrection.cxx:1491 AliTPCCorrection.cxx:1492 AliTPCCorrection.cxx:1493 AliTPCCorrection.cxx:1494 AliTPCCorrection.cxx:1495 AliTPCCorrection.cxx:1496 AliTPCCorrection.cxx:1497 AliTPCCorrection.cxx:1498 AliTPCCorrection.cxx:1499 AliTPCCorrection.cxx:1500 AliTPCCorrection.cxx:1501 AliTPCCorrection.cxx:1502 AliTPCCorrection.cxx:1503 AliTPCCorrection.cxx:1504 AliTPCCorrection.cxx:1505 AliTPCCorrection.cxx:1506 AliTPCCorrection.cxx:1507 AliTPCCorrection.cxx:1508 AliTPCCorrection.cxx:1509 AliTPCCorrection.cxx:1510 AliTPCCorrection.cxx:1511 AliTPCCorrection.cxx:1512 AliTPCCorrection.cxx:1513 AliTPCCorrection.cxx:1514 AliTPCCorrection.cxx:1515 AliTPCCorrection.cxx:1516 AliTPCCorrection.cxx:1517 AliTPCCorrection.cxx:1518 AliTPCCorrection.cxx:1519 AliTPCCorrection.cxx:1520 AliTPCCorrection.cxx:1521 AliTPCCorrection.cxx:1522 AliTPCCorrection.cxx:1523 AliTPCCorrection.cxx:1524 AliTPCCorrection.cxx:1525 AliTPCCorrection.cxx:1526 AliTPCCorrection.cxx:1527 AliTPCCorrection.cxx:1528 AliTPCCorrection.cxx:1529 AliTPCCorrection.cxx:1530 AliTPCCorrection.cxx:1531 AliTPCCorrection.cxx:1532 AliTPCCorrection.cxx:1533 AliTPCCorrection.cxx:1534 AliTPCCorrection.cxx:1535 AliTPCCorrection.cxx:1536 AliTPCCorrection.cxx:1537 AliTPCCorrection.cxx:1538 AliTPCCorrection.cxx:1539 AliTPCCorrection.cxx:1540 AliTPCCorrection.cxx:1541 AliTPCCorrection.cxx:1542 AliTPCCorrection.cxx:1543 AliTPCCorrection.cxx:1544 AliTPCCorrection.cxx:1545 AliTPCCorrection.cxx:1546 AliTPCCorrection.cxx:1547 AliTPCCorrection.cxx:1548 AliTPCCorrection.cxx:1549 AliTPCCorrection.cxx:1550 AliTPCCorrection.cxx:1551 AliTPCCorrection.cxx:1552 AliTPCCorrection.cxx:1553 AliTPCCorrection.cxx:1554 AliTPCCorrection.cxx:1555 AliTPCCorrection.cxx:1556 AliTPCCorrection.cxx:1557 AliTPCCorrection.cxx:1558 AliTPCCorrection.cxx:1559 AliTPCCorrection.cxx:1560 AliTPCCorrection.cxx:1561 AliTPCCorrection.cxx:1562 AliTPCCorrection.cxx:1563 AliTPCCorrection.cxx:1564 AliTPCCorrection.cxx:1565 AliTPCCorrection.cxx:1566 AliTPCCorrection.cxx:1567 AliTPCCorrection.cxx:1568 AliTPCCorrection.cxx:1569 AliTPCCorrection.cxx:1570 AliTPCCorrection.cxx:1571 AliTPCCorrection.cxx:1572 AliTPCCorrection.cxx:1573 AliTPCCorrection.cxx:1574 AliTPCCorrection.cxx:1575 AliTPCCorrection.cxx:1576 AliTPCCorrection.cxx:1577 AliTPCCorrection.cxx:1578 AliTPCCorrection.cxx:1579 AliTPCCorrection.cxx:1580 AliTPCCorrection.cxx:1581 AliTPCCorrection.cxx:1582 AliTPCCorrection.cxx:1583 AliTPCCorrection.cxx:1584 AliTPCCorrection.cxx:1585 AliTPCCorrection.cxx:1586 AliTPCCorrection.cxx:1587 AliTPCCorrection.cxx:1588 AliTPCCorrection.cxx:1589 AliTPCCorrection.cxx:1590 AliTPCCorrection.cxx:1591 AliTPCCorrection.cxx:1592 AliTPCCorrection.cxx:1593 AliTPCCorrection.cxx:1594 AliTPCCorrection.cxx:1595 AliTPCCorrection.cxx:1596 AliTPCCorrection.cxx:1597 AliTPCCorrection.cxx:1598 AliTPCCorrection.cxx:1599 AliTPCCorrection.cxx:1600 AliTPCCorrection.cxx:1601 AliTPCCorrection.cxx:1602 AliTPCCorrection.cxx:1603 AliTPCCorrection.cxx:1604 AliTPCCorrection.cxx:1605 AliTPCCorrection.cxx:1606 AliTPCCorrection.cxx:1607 AliTPCCorrection.cxx:1608 AliTPCCorrection.cxx:1609 AliTPCCorrection.cxx:1610 AliTPCCorrection.cxx:1611 AliTPCCorrection.cxx:1612 AliTPCCorrection.cxx:1613 AliTPCCorrection.cxx:1614 AliTPCCorrection.cxx:1615 AliTPCCorrection.cxx:1616 AliTPCCorrection.cxx:1617 AliTPCCorrection.cxx:1618 AliTPCCorrection.cxx:1619 AliTPCCorrection.cxx:1620 AliTPCCorrection.cxx:1621 AliTPCCorrection.cxx:1622 AliTPCCorrection.cxx:1623 AliTPCCorrection.cxx:1624 AliTPCCorrection.cxx:1625 AliTPCCorrection.cxx:1626 AliTPCCorrection.cxx:1627 AliTPCCorrection.cxx:1628 AliTPCCorrection.cxx:1629 AliTPCCorrection.cxx:1630 AliTPCCorrection.cxx:1631 AliTPCCorrection.cxx:1632 AliTPCCorrection.cxx:1633 AliTPCCorrection.cxx:1634 AliTPCCorrection.cxx:1635 AliTPCCorrection.cxx:1636 AliTPCCorrection.cxx:1637 AliTPCCorrection.cxx:1638 AliTPCCorrection.cxx:1639 AliTPCCorrection.cxx:1640 AliTPCCorrection.cxx:1641 AliTPCCorrection.cxx:1642 AliTPCCorrection.cxx:1643 AliTPCCorrection.cxx:1644 AliTPCCorrection.cxx:1645 AliTPCCorrection.cxx:1646 AliTPCCorrection.cxx:1647 AliTPCCorrection.cxx:1648 AliTPCCorrection.cxx:1649 AliTPCCorrection.cxx:1650 AliTPCCorrection.cxx:1651 AliTPCCorrection.cxx:1652 AliTPCCorrection.cxx:1653 AliTPCCorrection.cxx:1654 AliTPCCorrection.cxx:1655 AliTPCCorrection.cxx:1656 AliTPCCorrection.cxx:1657 AliTPCCorrection.cxx:1658 AliTPCCorrection.cxx:1659 AliTPCCorrection.cxx:1660 AliTPCCorrection.cxx:1661 AliTPCCorrection.cxx:1662 AliTPCCorrection.cxx:1663 AliTPCCorrection.cxx:1664 AliTPCCorrection.cxx:1665 AliTPCCorrection.cxx:1666 AliTPCCorrection.cxx:1667 AliTPCCorrection.cxx:1668 AliTPCCorrection.cxx:1669 AliTPCCorrection.cxx:1670 AliTPCCorrection.cxx:1671 AliTPCCorrection.cxx:1672 AliTPCCorrection.cxx:1673 AliTPCCorrection.cxx:1674 AliTPCCorrection.cxx:1675 AliTPCCorrection.cxx:1676 AliTPCCorrection.cxx:1677 AliTPCCorrection.cxx:1678 AliTPCCorrection.cxx:1679 AliTPCCorrection.cxx:1680 AliTPCCorrection.cxx:1681 AliTPCCorrection.cxx:1682 AliTPCCorrection.cxx:1683 AliTPCCorrection.cxx:1684 AliTPCCorrection.cxx:1685 AliTPCCorrection.cxx:1686 AliTPCCorrection.cxx:1687 AliTPCCorrection.cxx:1688 AliTPCCorrection.cxx:1689 AliTPCCorrection.cxx:1690 AliTPCCorrection.cxx:1691 AliTPCCorrection.cxx:1692 AliTPCCorrection.cxx:1693 AliTPCCorrection.cxx:1694 AliTPCCorrection.cxx:1695 AliTPCCorrection.cxx:1696 AliTPCCorrection.cxx:1697 AliTPCCorrection.cxx:1698 AliTPCCorrection.cxx:1699 AliTPCCorrection.cxx:1700 AliTPCCorrection.cxx:1701 AliTPCCorrection.cxx:1702 AliTPCCorrection.cxx:1703 AliTPCCorrection.cxx:1704 AliTPCCorrection.cxx:1705 AliTPCCorrection.cxx:1706 AliTPCCorrection.cxx:1707 AliTPCCorrection.cxx:1708 AliTPCCorrection.cxx:1709 AliTPCCorrection.cxx:1710 AliTPCCorrection.cxx:1711 AliTPCCorrection.cxx:1712 AliTPCCorrection.cxx:1713 AliTPCCorrection.cxx:1714 AliTPCCorrection.cxx:1715 AliTPCCorrection.cxx:1716 AliTPCCorrection.cxx:1717 AliTPCCorrection.cxx:1718 AliTPCCorrection.cxx:1719 AliTPCCorrection.cxx:1720 AliTPCCorrection.cxx:1721 AliTPCCorrection.cxx:1722 AliTPCCorrection.cxx:1723 AliTPCCorrection.cxx:1724 AliTPCCorrection.cxx:1725 AliTPCCorrection.cxx:1726 AliTPCCorrection.cxx:1727 AliTPCCorrection.cxx:1728 AliTPCCorrection.cxx:1729 AliTPCCorrection.cxx:1730 AliTPCCorrection.cxx:1731 AliTPCCorrection.cxx:1732 AliTPCCorrection.cxx:1733 AliTPCCorrection.cxx:1734 AliTPCCorrection.cxx:1735 AliTPCCorrection.cxx:1736 AliTPCCorrection.cxx:1737 AliTPCCorrection.cxx:1738 AliTPCCorrection.cxx:1739 AliTPCCorrection.cxx:1740 AliTPCCorrection.cxx:1741 AliTPCCorrection.cxx:1742 AliTPCCorrection.cxx:1743 AliTPCCorrection.cxx:1744 AliTPCCorrection.cxx:1745 AliTPCCorrection.cxx:1746 AliTPCCorrection.cxx:1747 AliTPCCorrection.cxx:1748 AliTPCCorrection.cxx:1749 AliTPCCorrection.cxx:1750 AliTPCCorrection.cxx:1751 AliTPCCorrection.cxx:1752 AliTPCCorrection.cxx:1753 AliTPCCorrection.cxx:1754 AliTPCCorrection.cxx:1755 AliTPCCorrection.cxx:1756 AliTPCCorrection.cxx:1757 AliTPCCorrection.cxx:1758 AliTPCCorrection.cxx:1759 AliTPCCorrection.cxx:1760 AliTPCCorrection.cxx:1761 AliTPCCorrection.cxx:1762 AliTPCCorrection.cxx:1763 AliTPCCorrection.cxx:1764 AliTPCCorrection.cxx:1765 AliTPCCorrection.cxx:1766 AliTPCCorrection.cxx:1767 AliTPCCorrection.cxx:1768 AliTPCCorrection.cxx:1769 AliTPCCorrection.cxx:1770 AliTPCCorrection.cxx:1771 AliTPCCorrection.cxx:1772 AliTPCCorrection.cxx:1773 AliTPCCorrection.cxx:1774 AliTPCCorrection.cxx:1775 AliTPCCorrection.cxx:1776 AliTPCCorrection.cxx:1777 AliTPCCorrection.cxx:1778 AliTPCCorrection.cxx:1779 AliTPCCorrection.cxx:1780 AliTPCCorrection.cxx:1781 AliTPCCorrection.cxx:1782 AliTPCCorrection.cxx:1783 AliTPCCorrection.cxx:1784 AliTPCCorrection.cxx:1785 AliTPCCorrection.cxx:1786 AliTPCCorrection.cxx:1787 AliTPCCorrection.cxx:1788 AliTPCCorrection.cxx:1789 AliTPCCorrection.cxx:1790 AliTPCCorrection.cxx:1791 AliTPCCorrection.cxx:1792 AliTPCCorrection.cxx:1793 AliTPCCorrection.cxx:1794 AliTPCCorrection.cxx:1795 AliTPCCorrection.cxx:1796 AliTPCCorrection.cxx:1797 AliTPCCorrection.cxx:1798 AliTPCCorrection.cxx:1799 AliTPCCorrection.cxx:1800 AliTPCCorrection.cxx:1801 AliTPCCorrection.cxx:1802 AliTPCCorrection.cxx:1803 AliTPCCorrection.cxx:1804 AliTPCCorrection.cxx:1805 AliTPCCorrection.cxx:1806 AliTPCCorrection.cxx:1807 AliTPCCorrection.cxx:1808 AliTPCCorrection.cxx:1809 AliTPCCorrection.cxx:1810 AliTPCCorrection.cxx:1811 AliTPCCorrection.cxx:1812 AliTPCCorrection.cxx:1813 AliTPCCorrection.cxx:1814 AliTPCCorrection.cxx:1815 AliTPCCorrection.cxx:1816 AliTPCCorrection.cxx:1817 AliTPCCorrection.cxx:1818 AliTPCCorrection.cxx:1819 AliTPCCorrection.cxx:1820 AliTPCCorrection.cxx:1821 AliTPCCorrection.cxx:1822 AliTPCCorrection.cxx:1823 AliTPCCorrection.cxx:1824 AliTPCCorrection.cxx:1825 AliTPCCorrection.cxx:1826 AliTPCCorrection.cxx:1827 AliTPCCorrection.cxx:1828 AliTPCCorrection.cxx:1829 AliTPCCorrection.cxx:1830 AliTPCCorrection.cxx:1831 AliTPCCorrection.cxx:1832 AliTPCCorrection.cxx:1833 AliTPCCorrection.cxx:1834 AliTPCCorrection.cxx:1835 AliTPCCorrection.cxx:1836 AliTPCCorrection.cxx:1837 AliTPCCorrection.cxx:1838 AliTPCCorrection.cxx:1839 AliTPCCorrection.cxx:1840 AliTPCCorrection.cxx:1841 AliTPCCorrection.cxx:1842 AliTPCCorrection.cxx:1843 AliTPCCorrection.cxx:1844 AliTPCCorrection.cxx:1845 AliTPCCorrection.cxx:1846 AliTPCCorrection.cxx:1847 AliTPCCorrection.cxx:1848 AliTPCCorrection.cxx:1849 AliTPCCorrection.cxx:1850 AliTPCCorrection.cxx:1851 AliTPCCorrection.cxx:1852 AliTPCCorrection.cxx:1853 AliTPCCorrection.cxx:1854 AliTPCCorrection.cxx:1855 AliTPCCorrection.cxx:1856 AliTPCCorrection.cxx:1857 AliTPCCorrection.cxx:1858 AliTPCCorrection.cxx:1859 AliTPCCorrection.cxx:1860 AliTPCCorrection.cxx:1861 AliTPCCorrection.cxx:1862 AliTPCCorrection.cxx:1863 AliTPCCorrection.cxx:1864 AliTPCCorrection.cxx:1865 AliTPCCorrection.cxx:1866 AliTPCCorrection.cxx:1867 AliTPCCorrection.cxx:1868 AliTPCCorrection.cxx:1869 AliTPCCorrection.cxx:1870 AliTPCCorrection.cxx:1871 AliTPCCorrection.cxx:1872 AliTPCCorrection.cxx:1873 AliTPCCorrection.cxx:1874 AliTPCCorrection.cxx:1875 AliTPCCorrection.cxx:1876 AliTPCCorrection.cxx:1877 AliTPCCorrection.cxx:1878 AliTPCCorrection.cxx:1879 AliTPCCorrection.cxx:1880 AliTPCCorrection.cxx:1881 AliTPCCorrection.cxx:1882 AliTPCCorrection.cxx:1883 AliTPCCorrection.cxx:1884 AliTPCCorrection.cxx:1885 AliTPCCorrection.cxx:1886 AliTPCCorrection.cxx:1887 AliTPCCorrection.cxx:1888 AliTPCCorrection.cxx:1889 AliTPCCorrection.cxx:1890 AliTPCCorrection.cxx:1891 AliTPCCorrection.cxx:1892 AliTPCCorrection.cxx:1893 AliTPCCorrection.cxx:1894 AliTPCCorrection.cxx:1895 AliTPCCorrection.cxx:1896 AliTPCCorrection.cxx:1897 AliTPCCorrection.cxx:1898 AliTPCCorrection.cxx:1899 AliTPCCorrection.cxx:1900 AliTPCCorrection.cxx:1901 AliTPCCorrection.cxx:1902 AliTPCCorrection.cxx:1903 AliTPCCorrection.cxx:1904 AliTPCCorrection.cxx:1905 AliTPCCorrection.cxx:1906 AliTPCCorrection.cxx:1907 AliTPCCorrection.cxx:1908 AliTPCCorrection.cxx:1909 AliTPCCorrection.cxx:1910 AliTPCCorrection.cxx:1911 AliTPCCorrection.cxx:1912 AliTPCCorrection.cxx:1913 AliTPCCorrection.cxx:1914 AliTPCCorrection.cxx:1915 AliTPCCorrection.cxx:1916 AliTPCCorrection.cxx:1917 AliTPCCorrection.cxx:1918 AliTPCCorrection.cxx:1919 AliTPCCorrection.cxx:1920 AliTPCCorrection.cxx:1921 AliTPCCorrection.cxx:1922 AliTPCCorrection.cxx:1923 AliTPCCorrection.cxx:1924 AliTPCCorrection.cxx:1925 AliTPCCorrection.cxx:1926 AliTPCCorrection.cxx:1927 AliTPCCorrection.cxx:1928 AliTPCCorrection.cxx:1929 AliTPCCorrection.cxx:1930 AliTPCCorrection.cxx:1931 AliTPCCorrection.cxx:1932 AliTPCCorrection.cxx:1933 AliTPCCorrection.cxx:1934 AliTPCCorrection.cxx:1935 AliTPCCorrection.cxx:1936 AliTPCCorrection.cxx:1937 AliTPCCorrection.cxx:1938 AliTPCCorrection.cxx:1939 AliTPCCorrection.cxx:1940 AliTPCCorrection.cxx:1941 AliTPCCorrection.cxx:1942 AliTPCCorrection.cxx:1943 AliTPCCorrection.cxx:1944 AliTPCCorrection.cxx:1945 AliTPCCorrection.cxx:1946 AliTPCCorrection.cxx:1947 AliTPCCorrection.cxx:1948 AliTPCCorrection.cxx:1949 AliTPCCorrection.cxx:1950 AliTPCCorrection.cxx:1951 AliTPCCorrection.cxx:1952 AliTPCCorrection.cxx:1953 AliTPCCorrection.cxx:1954 AliTPCCorrection.cxx:1955 AliTPCCorrection.cxx:1956 AliTPCCorrection.cxx:1957 AliTPCCorrection.cxx:1958 AliTPCCorrection.cxx:1959 AliTPCCorrection.cxx:1960 AliTPCCorrection.cxx:1961 AliTPCCorrection.cxx:1962 AliTPCCorrection.cxx:1963 AliTPCCorrection.cxx:1964 AliTPCCorrection.cxx:1965 AliTPCCorrection.cxx:1966 AliTPCCorrection.cxx:1967 AliTPCCorrection.cxx:1968 AliTPCCorrection.cxx:1969 AliTPCCorrection.cxx:1970 AliTPCCorrection.cxx:1971 AliTPCCorrection.cxx:1972 AliTPCCorrection.cxx:1973 AliTPCCorrection.cxx:1974 AliTPCCorrection.cxx:1975 AliTPCCorrection.cxx:1976 AliTPCCorrection.cxx:1977 AliTPCCorrection.cxx:1978 AliTPCCorrection.cxx:1979 AliTPCCorrection.cxx:1980 AliTPCCorrection.cxx:1981 AliTPCCorrection.cxx:1982 AliTPCCorrection.cxx:1983 AliTPCCorrection.cxx:1984 AliTPCCorrection.cxx:1985 AliTPCCorrection.cxx:1986 AliTPCCorrection.cxx:1987 AliTPCCorrection.cxx:1988 AliTPCCorrection.cxx:1989 AliTPCCorrection.cxx:1990 AliTPCCorrection.cxx:1991 AliTPCCorrection.cxx:1992 AliTPCCorrection.cxx:1993 AliTPCCorrection.cxx:1994 AliTPCCorrection.cxx:1995 AliTPCCorrection.cxx:1996 AliTPCCorrection.cxx:1997 AliTPCCorrection.cxx:1998 AliTPCCorrection.cxx:1999 AliTPCCorrection.cxx:2000 AliTPCCorrection.cxx:2001 AliTPCCorrection.cxx:2002 AliTPCCorrection.cxx:2003 AliTPCCorrection.cxx:2004 AliTPCCorrection.cxx:2005 AliTPCCorrection.cxx:2006 AliTPCCorrection.cxx:2007 AliTPCCorrection.cxx:2008 AliTPCCorrection.cxx:2009 AliTPCCorrection.cxx:2010 AliTPCCorrection.cxx:2011 AliTPCCorrection.cxx:2012 AliTPCCorrection.cxx:2013 AliTPCCorrection.cxx:2014 AliTPCCorrection.cxx:2015 AliTPCCorrection.cxx:2016 AliTPCCorrection.cxx:2017 AliTPCCorrection.cxx:2018 AliTPCCorrection.cxx:2019 AliTPCCorrection.cxx:2020 AliTPCCorrection.cxx:2021 AliTPCCorrection.cxx:2022 AliTPCCorrection.cxx:2023 AliTPCCorrection.cxx:2024 AliTPCCorrection.cxx:2025 AliTPCCorrection.cxx:2026 AliTPCCorrection.cxx:2027 AliTPCCorrection.cxx:2028 AliTPCCorrection.cxx:2029 AliTPCCorrection.cxx:2030 AliTPCCorrection.cxx:2031 AliTPCCorrection.cxx:2032 AliTPCCorrection.cxx:2033 AliTPCCorrection.cxx:2034 AliTPCCorrection.cxx:2035 AliTPCCorrection.cxx:2036 AliTPCCorrection.cxx:2037 AliTPCCorrection.cxx:2038 AliTPCCorrection.cxx:2039 AliTPCCorrection.cxx:2040 AliTPCCorrection.cxx:2041 AliTPCCorrection.cxx:2042 AliTPCCorrection.cxx:2043 AliTPCCorrection.cxx:2044 AliTPCCorrection.cxx:2045 AliTPCCorrection.cxx:2046 AliTPCCorrection.cxx:2047 AliTPCCorrection.cxx:2048 AliTPCCorrection.cxx:2049 AliTPCCorrection.cxx:2050 AliTPCCorrection.cxx:2051 AliTPCCorrection.cxx:2052 AliTPCCorrection.cxx:2053 AliTPCCorrection.cxx:2054 AliTPCCorrection.cxx:2055 AliTPCCorrection.cxx:2056 AliTPCCorrection.cxx:2057 AliTPCCorrection.cxx:2058 AliTPCCorrection.cxx:2059 AliTPCCorrection.cxx:2060 AliTPCCorrection.cxx:2061 AliTPCCorrection.cxx:2062 AliTPCCorrection.cxx:2063 AliTPCCorrection.cxx:2064 AliTPCCorrection.cxx:2065 AliTPCCorrection.cxx:2066 AliTPCCorrection.cxx:2067 AliTPCCorrection.cxx:2068 AliTPCCorrection.cxx:2069 AliTPCCorrection.cxx:2070 AliTPCCorrection.cxx:2071 AliTPCCorrection.cxx:2072 AliTPCCorrection.cxx:2073 AliTPCCorrection.cxx:2074 AliTPCCorrection.cxx:2075 AliTPCCorrection.cxx:2076 AliTPCCorrection.cxx:2077 AliTPCCorrection.cxx:2078 AliTPCCorrection.cxx:2079 AliTPCCorrection.cxx:2080 AliTPCCorrection.cxx:2081 AliTPCCorrection.cxx:2082 AliTPCCorrection.cxx:2083 AliTPCCorrection.cxx:2084 AliTPCCorrection.cxx:2085 AliTPCCorrection.cxx:2086 AliTPCCorrection.cxx:2087 AliTPCCorrection.cxx:2088 AliTPCCorrection.cxx:2089 AliTPCCorrection.cxx:2090 AliTPCCorrection.cxx:2091 AliTPCCorrection.cxx:2092 AliTPCCorrection.cxx:2093 AliTPCCorrection.cxx:2094 AliTPCCorrection.cxx:2095 AliTPCCorrection.cxx:2096 AliTPCCorrection.cxx:2097 AliTPCCorrection.cxx:2098 AliTPCCorrection.cxx:2099 AliTPCCorrection.cxx:2100 AliTPCCorrection.cxx:2101 AliTPCCorrection.cxx:2102 AliTPCCorrection.cxx:2103 AliTPCCorrection.cxx:2104 AliTPCCorrection.cxx:2105 AliTPCCorrection.cxx:2106 AliTPCCorrection.cxx:2107 AliTPCCorrection.cxx:2108 AliTPCCorrection.cxx:2109 AliTPCCorrection.cxx:2110 AliTPCCorrection.cxx:2111 AliTPCCorrection.cxx:2112 AliTPCCorrection.cxx:2113 AliTPCCorrection.cxx:2114 AliTPCCorrection.cxx:2115 AliTPCCorrection.cxx:2116 AliTPCCorrection.cxx:2117 AliTPCCorrection.cxx:2118 AliTPCCorrection.cxx:2119 AliTPCCorrection.cxx:2120 AliTPCCorrection.cxx:2121 AliTPCCorrection.cxx:2122 AliTPCCorrection.cxx:2123 AliTPCCorrection.cxx:2124 AliTPCCorrection.cxx:2125 AliTPCCorrection.cxx:2126 AliTPCCorrection.cxx:2127 AliTPCCorrection.cxx:2128 AliTPCCorrection.cxx:2129 AliTPCCorrection.cxx:2130 AliTPCCorrection.cxx:2131 AliTPCCorrection.cxx:2132 AliTPCCorrection.cxx:2133 AliTPCCorrection.cxx:2134 AliTPCCorrection.cxx:2135 AliTPCCorrection.cxx:2136 AliTPCCorrection.cxx:2137 AliTPCCorrection.cxx:2138 AliTPCCorrection.cxx:2139 AliTPCCorrection.cxx:2140 AliTPCCorrection.cxx:2141 AliTPCCorrection.cxx:2142 AliTPCCorrection.cxx:2143 AliTPCCorrection.cxx:2144 AliTPCCorrection.cxx:2145 AliTPCCorrection.cxx:2146 AliTPCCorrection.cxx:2147 AliTPCCorrection.cxx:2148 AliTPCCorrection.cxx:2149 AliTPCCorrection.cxx:2150 AliTPCCorrection.cxx:2151 AliTPCCorrection.cxx:2152 AliTPCCorrection.cxx:2153 AliTPCCorrection.cxx:2154 AliTPCCorrection.cxx:2155 AliTPCCorrection.cxx:2156 AliTPCCorrection.cxx:2157 AliTPCCorrection.cxx:2158 AliTPCCorrection.cxx:2159 AliTPCCorrection.cxx:2160 AliTPCCorrection.cxx:2161 AliTPCCorrection.cxx:2162 AliTPCCorrection.cxx:2163 AliTPCCorrection.cxx:2164 AliTPCCorrection.cxx:2165 AliTPCCorrection.cxx:2166 AliTPCCorrection.cxx:2167 AliTPCCorrection.cxx:2168 AliTPCCorrection.cxx:2169 AliTPCCorrection.cxx:2170 AliTPCCorrection.cxx:2171 AliTPCCorrection.cxx:2172 AliTPCCorrection.cxx:2173 AliTPCCorrection.cxx:2174 AliTPCCorrection.cxx:2175 AliTPCCorrection.cxx:2176 AliTPCCorrection.cxx:2177 AliTPCCorrection.cxx:2178 AliTPCCorrection.cxx:2179 AliTPCCorrection.cxx:2180 AliTPCCorrection.cxx:2181 AliTPCCorrection.cxx:2182 AliTPCCorrection.cxx:2183 AliTPCCorrection.cxx:2184 AliTPCCorrection.cxx:2185 AliTPCCorrection.cxx:2186 AliTPCCorrection.cxx:2187 AliTPCCorrection.cxx:2188 AliTPCCorrection.cxx:2189 AliTPCCorrection.cxx:2190 AliTPCCorrection.cxx:2191 AliTPCCorrection.cxx:2192 AliTPCCorrection.cxx:2193 AliTPCCorrection.cxx:2194 AliTPCCorrection.cxx:2195 AliTPCCorrection.cxx:2196 AliTPCCorrection.cxx:2197 AliTPCCorrection.cxx:2198 AliTPCCorrection.cxx:2199 AliTPCCorrection.cxx:2200 AliTPCCorrection.cxx:2201 AliTPCCorrection.cxx:2202 AliTPCCorrection.cxx:2203 AliTPCCorrection.cxx:2204 AliTPCCorrection.cxx:2205 AliTPCCorrection.cxx:2206 AliTPCCorrection.cxx:2207 AliTPCCorrection.cxx:2208 AliTPCCorrection.cxx:2209 AliTPCCorrection.cxx:2210 AliTPCCorrection.cxx:2211 AliTPCCorrection.cxx:2212 AliTPCCorrection.cxx:2213 AliTPCCorrection.cxx:2214 AliTPCCorrection.cxx:2215 AliTPCCorrection.cxx:2216 AliTPCCorrection.cxx:2217 AliTPCCorrection.cxx:2218 AliTPCCorrection.cxx:2219 AliTPCCorrection.cxx:2220 AliTPCCorrection.cxx:2221 AliTPCCorrection.cxx:2222 AliTPCCorrection.cxx:2223 AliTPCCorrection.cxx:2224 AliTPCCorrection.cxx:2225 AliTPCCorrection.cxx:2226 AliTPCCorrection.cxx:2227 AliTPCCorrection.cxx:2228 AliTPCCorrection.cxx:2229 AliTPCCorrection.cxx:2230 AliTPCCorrection.cxx:2231 AliTPCCorrection.cxx:2232 AliTPCCorrection.cxx:2233 AliTPCCorrection.cxx:2234 AliTPCCorrection.cxx:2235 AliTPCCorrection.cxx:2236 AliTPCCorrection.cxx:2237 AliTPCCorrection.cxx:2238 AliTPCCorrection.cxx:2239 AliTPCCorrection.cxx:2240 AliTPCCorrection.cxx:2241 AliTPCCorrection.cxx:2242 AliTPCCorrection.cxx:2243 AliTPCCorrection.cxx:2244 AliTPCCorrection.cxx:2245 AliTPCCorrection.cxx:2246 AliTPCCorrection.cxx:2247 AliTPCCorrection.cxx:2248 AliTPCCorrection.cxx:2249 AliTPCCorrection.cxx:2250 AliTPCCorrection.cxx:2251 AliTPCCorrection.cxx:2252 AliTPCCorrection.cxx:2253 AliTPCCorrection.cxx:2254 AliTPCCorrection.cxx:2255 AliTPCCorrection.cxx:2256 AliTPCCorrection.cxx:2257 AliTPCCorrection.cxx:2258 AliTPCCorrection.cxx:2259 AliTPCCorrection.cxx:2260 AliTPCCorrection.cxx:2261 AliTPCCorrection.cxx:2262 AliTPCCorrection.cxx:2263 AliTPCCorrection.cxx:2264 AliTPCCorrection.cxx:2265 AliTPCCorrection.cxx:2266 AliTPCCorrection.cxx:2267 AliTPCCorrection.cxx:2268 AliTPCCorrection.cxx:2269 AliTPCCorrection.cxx:2270 AliTPCCorrection.cxx:2271 AliTPCCorrection.cxx:2272 AliTPCCorrection.cxx:2273 AliTPCCorrection.cxx:2274 AliTPCCorrection.cxx:2275 AliTPCCorrection.cxx:2276 AliTPCCorrection.cxx:2277 AliTPCCorrection.cxx:2278 AliTPCCorrection.cxx:2279 AliTPCCorrection.cxx:2280 AliTPCCorrection.cxx:2281 AliTPCCorrection.cxx:2282 AliTPCCorrection.cxx:2283 AliTPCCorrection.cxx:2284 AliTPCCorrection.cxx:2285 AliTPCCorrection.cxx:2286 AliTPCCorrection.cxx:2287 AliTPCCorrection.cxx:2288 AliTPCCorrection.cxx:2289 AliTPCCorrection.cxx:2290 AliTPCCorrection.cxx:2291 AliTPCCorrection.cxx:2292 AliTPCCorrection.cxx:2293 AliTPCCorrection.cxx:2294 AliTPCCorrection.cxx:2295 AliTPCCorrection.cxx:2296 AliTPCCorrection.cxx:2297 AliTPCCorrection.cxx:2298 AliTPCCorrection.cxx:2299 AliTPCCorrection.cxx:2300 AliTPCCorrection.cxx:2301 AliTPCCorrection.cxx:2302 AliTPCCorrection.cxx:2303 AliTPCCorrection.cxx:2304 AliTPCCorrection.cxx:2305 AliTPCCorrection.cxx:2306 AliTPCCorrection.cxx:2307 AliTPCCorrection.cxx:2308 AliTPCCorrection.cxx:2309 AliTPCCorrection.cxx:2310 AliTPCCorrection.cxx:2311 AliTPCCorrection.cxx:2312 AliTPCCorrection.cxx:2313 AliTPCCorrection.cxx:2314 AliTPCCorrection.cxx:2315 AliTPCCorrection.cxx:2316 AliTPCCorrection.cxx:2317 AliTPCCorrection.cxx:2318 AliTPCCorrection.cxx:2319 AliTPCCorrection.cxx:2320 AliTPCCorrection.cxx:2321 AliTPCCorrection.cxx:2322 AliTPCCorrection.cxx:2323 AliTPCCorrection.cxx:2324 AliTPCCorrection.cxx:2325 AliTPCCorrection.cxx:2326 AliTPCCorrection.cxx:2327 AliTPCCorrection.cxx:2328 AliTPCCorrection.cxx:2329 AliTPCCorrection.cxx:2330 AliTPCCorrection.cxx:2331 AliTPCCorrection.cxx:2332 AliTPCCorrection.cxx:2333 AliTPCCorrection.cxx:2334 AliTPCCorrection.cxx:2335 AliTPCCorrection.cxx:2336 AliTPCCorrection.cxx:2337 AliTPCCorrection.cxx:2338 AliTPCCorrection.cxx:2339 AliTPCCorrection.cxx:2340 AliTPCCorrection.cxx:2341 AliTPCCorrection.cxx:2342 AliTPCCorrection.cxx:2343 AliTPCCorrection.cxx:2344 AliTPCCorrection.cxx:2345 AliTPCCorrection.cxx:2346 AliTPCCorrection.cxx:2347 AliTPCCorrection.cxx:2348 AliTPCCorrection.cxx:2349 AliTPCCorrection.cxx:2350 AliTPCCorrection.cxx:2351 AliTPCCorrection.cxx:2352 AliTPCCorrection.cxx:2353 AliTPCCorrection.cxx:2354 AliTPCCorrection.cxx:2355 AliTPCCorrection.cxx:2356 AliTPCCorrection.cxx:2357 AliTPCCorrection.cxx:2358 AliTPCCorrection.cxx:2359 AliTPCCorrection.cxx:2360 AliTPCCorrection.cxx:2361 AliTPCCorrection.cxx:2362 AliTPCCorrection.cxx:2363 AliTPCCorrection.cxx:2364 AliTPCCorrection.cxx:2365 AliTPCCorrection.cxx:2366 AliTPCCorrection.cxx:2367 AliTPCCorrection.cxx:2368 AliTPCCorrection.cxx:2369 AliTPCCorrection.cxx:2370 AliTPCCorrection.cxx:2371 AliTPCCorrection.cxx:2372 AliTPCCorrection.cxx:2373 AliTPCCorrection.cxx:2374 AliTPCCorrection.cxx:2375 AliTPCCorrection.cxx:2376 AliTPCCorrection.cxx:2377 AliTPCCorrection.cxx:2378 AliTPCCorrection.cxx:2379 AliTPCCorrection.cxx:2380 AliTPCCorrection.cxx:2381 AliTPCCorrection.cxx:2382 AliTPCCorrection.cxx:2383 AliTPCCorrection.cxx:2384 AliTPCCorrection.cxx:2385 AliTPCCorrection.cxx:2386 AliTPCCorrection.cxx:2387 AliTPCCorrection.cxx:2388 AliTPCCorrection.cxx:2389 AliTPCCorrection.cxx:2390 AliTPCCorrection.cxx:2391 AliTPCCorrection.cxx:2392 AliTPCCorrection.cxx:2393 AliTPCCorrection.cxx:2394 AliTPCCorrection.cxx:2395 AliTPCCorrection.cxx:2396 AliTPCCorrection.cxx:2397 AliTPCCorrection.cxx:2398 AliTPCCorrection.cxx:2399 AliTPCCorrection.cxx:2400 AliTPCCorrection.cxx:2401 AliTPCCorrection.cxx:2402 AliTPCCorrection.cxx:2403 AliTPCCorrection.cxx:2404 AliTPCCorrection.cxx:2405 AliTPCCorrection.cxx:2406 AliTPCCorrection.cxx:2407 AliTPCCorrection.cxx:2408 AliTPCCorrection.cxx:2409 AliTPCCorrection.cxx:2410 AliTPCCorrection.cxx:2411 AliTPCCorrection.cxx:2412 AliTPCCorrection.cxx:2413 AliTPCCorrection.cxx:2414 AliTPCCorrection.cxx:2415 AliTPCCorrection.cxx:2416 AliTPCCorrection.cxx:2417 AliTPCCorrection.cxx:2418 AliTPCCorrection.cxx:2419 AliTPCCorrection.cxx:2420 AliTPCCorrection.cxx:2421 AliTPCCorrection.cxx:2422 AliTPCCorrection.cxx:2423 AliTPCCorrection.cxx:2424 AliTPCCorrection.cxx:2425 AliTPCCorrection.cxx:2426 AliTPCCorrection.cxx:2427 AliTPCCorrection.cxx:2428 AliTPCCorrection.cxx:2429 AliTPCCorrection.cxx:2430 AliTPCCorrection.cxx:2431 AliTPCCorrection.cxx:2432 AliTPCCorrection.cxx:2433 AliTPCCorrection.cxx:2434 AliTPCCorrection.cxx:2435 AliTPCCorrection.cxx:2436 AliTPCCorrection.cxx:2437 AliTPCCorrection.cxx:2438 AliTPCCorrection.cxx:2439 AliTPCCorrection.cxx:2440 AliTPCCorrection.cxx:2441 AliTPCCorrection.cxx:2442 AliTPCCorrection.cxx:2443 AliTPCCorrection.cxx:2444 AliTPCCorrection.cxx:2445 AliTPCCorrection.cxx:2446 AliTPCCorrection.cxx:2447 AliTPCCorrection.cxx:2448 AliTPCCorrection.cxx:2449 AliTPCCorrection.cxx:2450 AliTPCCorrection.cxx:2451 AliTPCCorrection.cxx:2452 AliTPCCorrection.cxx:2453 AliTPCCorrection.cxx:2454 AliTPCCorrection.cxx:2455 AliTPCCorrection.cxx:2456 AliTPCCorrection.cxx:2457 AliTPCCorrection.cxx:2458 AliTPCCorrection.cxx:2459 AliTPCCorrection.cxx:2460 AliTPCCorrection.cxx:2461 AliTPCCorrection.cxx:2462 AliTPCCorrection.cxx:2463 AliTPCCorrection.cxx:2464 AliTPCCorrection.cxx:2465 AliTPCCorrection.cxx:2466 AliTPCCorrection.cxx:2467 AliTPCCorrection.cxx:2468 AliTPCCorrection.cxx:2469 AliTPCCorrection.cxx:2470 AliTPCCorrection.cxx:2471 AliTPCCorrection.cxx:2472 AliTPCCorrection.cxx:2473 AliTPCCorrection.cxx:2474 AliTPCCorrection.cxx:2475 AliTPCCorrection.cxx:2476 AliTPCCorrection.cxx:2477 AliTPCCorrection.cxx:2478 AliTPCCorrection.cxx:2479 AliTPCCorrection.cxx:2480 AliTPCCorrection.cxx:2481 AliTPCCorrection.cxx:2482 AliTPCCorrection.cxx:2483 AliTPCCorrection.cxx:2484 AliTPCCorrection.cxx:2485 AliTPCCorrection.cxx:2486 AliTPCCorrection.cxx:2487 AliTPCCorrection.cxx:2488 AliTPCCorrection.cxx:2489 AliTPCCorrection.cxx:2490 AliTPCCorrection.cxx:2491 AliTPCCorrection.cxx:2492 AliTPCCorrection.cxx:2493 AliTPCCorrection.cxx:2494 AliTPCCorrection.cxx:2495 AliTPCCorrection.cxx:2496 AliTPCCorrection.cxx:2497 AliTPCCorrection.cxx:2498 AliTPCCorrection.cxx:2499 AliTPCCorrection.cxx:2500 AliTPCCorrection.cxx:2501 AliTPCCorrection.cxx:2502 AliTPCCorrection.cxx:2503 AliTPCCorrection.cxx:2504 AliTPCCorrection.cxx:2505 AliTPCCorrection.cxx:2506 AliTPCCorrection.cxx:2507 AliTPCCorrection.cxx:2508 AliTPCCorrection.cxx:2509 AliTPCCorrection.cxx:2510 AliTPCCorrection.cxx:2511 AliTPCCorrection.cxx:2512 AliTPCCorrection.cxx:2513 AliTPCCorrection.cxx:2514 AliTPCCorrection.cxx:2515 AliTPCCorrection.cxx:2516 AliTPCCorrection.cxx:2517 AliTPCCorrection.cxx:2518 AliTPCCorrection.cxx:2519 AliTPCCorrection.cxx:2520 AliTPCCorrection.cxx:2521 AliTPCCorrection.cxx:2522 AliTPCCorrection.cxx:2523 AliTPCCorrection.cxx:2524 AliTPCCorrection.cxx:2525 AliTPCCorrection.cxx:2526 AliTPCCorrection.cxx:2527 AliTPCCorrection.cxx:2528 AliTPCCorrection.cxx:2529 AliTPCCorrection.cxx:2530 AliTPCCorrection.cxx:2531 AliTPCCorrection.cxx:2532 AliTPCCorrection.cxx:2533 AliTPCCorrection.cxx:2534 AliTPCCorrection.cxx:2535 AliTPCCorrection.cxx:2536 AliTPCCorrection.cxx:2537 AliTPCCorrection.cxx:2538 AliTPCCorrection.cxx:2539 AliTPCCorrection.cxx:2540 AliTPCCorrection.cxx:2541 AliTPCCorrection.cxx:2542 AliTPCCorrection.cxx:2543 AliTPCCorrection.cxx:2544 AliTPCCorrection.cxx:2545 AliTPCCorrection.cxx:2546 AliTPCCorrection.cxx:2547 AliTPCCorrection.cxx:2548 AliTPCCorrection.cxx:2549 AliTPCCorrection.cxx:2550 AliTPCCorrection.cxx:2551 AliTPCCorrection.cxx:2552 AliTPCCorrection.cxx:2553 AliTPCCorrection.cxx:2554 AliTPCCorrection.cxx:2555 AliTPCCorrection.cxx:2556 AliTPCCorrection.cxx:2557 AliTPCCorrection.cxx:2558 AliTPCCorrection.cxx:2559 AliTPCCorrection.cxx:2560 AliTPCCorrection.cxx:2561 AliTPCCorrection.cxx:2562 AliTPCCorrection.cxx:2563 AliTPCCorrection.cxx:2564 AliTPCCorrection.cxx:2565 AliTPCCorrection.cxx:2566 AliTPCCorrection.cxx:2567 AliTPCCorrection.cxx:2568 AliTPCCorrection.cxx:2569 AliTPCCorrection.cxx:2570 AliTPCCorrection.cxx:2571 AliTPCCorrection.cxx:2572 AliTPCCorrection.cxx:2573 AliTPCCorrection.cxx:2574 AliTPCCorrection.cxx:2575 AliTPCCorrection.cxx:2576 AliTPCCorrection.cxx:2577 AliTPCCorrection.cxx:2578 AliTPCCorrection.cxx:2579 AliTPCCorrection.cxx:2580 AliTPCCorrection.cxx:2581 AliTPCCorrection.cxx:2582 AliTPCCorrection.cxx:2583 AliTPCCorrection.cxx:2584 AliTPCCorrection.cxx:2585 AliTPCCorrection.cxx:2586 AliTPCCorrection.cxx:2587 AliTPCCorrection.cxx:2588 AliTPCCorrection.cxx:2589 AliTPCCorrection.cxx:2590 AliTPCCorrection.cxx:2591 AliTPCCorrection.cxx:2592 AliTPCCorrection.cxx:2593 AliTPCCorrection.cxx:2594 AliTPCCorrection.cxx:2595 AliTPCCorrection.cxx:2596 AliTPCCorrection.cxx:2597 AliTPCCorrection.cxx:2598 AliTPCCorrection.cxx:2599 AliTPCCorrection.cxx:2600 AliTPCCorrection.cxx:2601 AliTPCCorrection.cxx:2602 AliTPCCorrection.cxx:2603 AliTPCCorrection.cxx:2604 AliTPCCorrection.cxx:2605 AliTPCCorrection.cxx:2606 AliTPCCorrection.cxx:2607 AliTPCCorrection.cxx:2608 AliTPCCorrection.cxx:2609 AliTPCCorrection.cxx:2610 AliTPCCorrection.cxx:2611 AliTPCCorrection.cxx:2612 AliTPCCorrection.cxx:2613 AliTPCCorrection.cxx:2614 AliTPCCorrection.cxx:2615 AliTPCCorrection.cxx:2616 AliTPCCorrection.cxx:2617 AliTPCCorrection.cxx:2618 AliTPCCorrection.cxx:2619 AliTPCCorrection.cxx:2620 AliTPCCorrection.cxx:2621 AliTPCCorrection.cxx:2622 AliTPCCorrection.cxx:2623 AliTPCCorrection.cxx:2624 AliTPCCorrection.cxx:2625 AliTPCCorrection.cxx:2626 AliTPCCorrection.cxx:2627 AliTPCCorrection.cxx:2628 AliTPCCorrection.cxx:2629 AliTPCCorrection.cxx:2630 AliTPCCorrection.cxx:2631 AliTPCCorrection.cxx:2632 AliTPCCorrection.cxx:2633 AliTPCCorrection.cxx:2634 AliTPCCorrection.cxx:2635 AliTPCCorrection.cxx:2636 AliTPCCorrection.cxx:2637 AliTPCCorrection.cxx:2638 AliTPCCorrection.cxx:2639 AliTPCCorrection.cxx:2640 AliTPCCorrection.cxx:2641 AliTPCCorrection.cxx:2642 AliTPCCorrection.cxx:2643 AliTPCCorrection.cxx:2644 AliTPCCorrection.cxx:2645 AliTPCCorrection.cxx:2646 AliTPCCorrection.cxx:2647 AliTPCCorrection.cxx:2648 AliTPCCorrection.cxx:2649 AliTPCCorrection.cxx:2650 AliTPCCorrection.cxx:2651 AliTPCCorrection.cxx:2652 AliTPCCorrection.cxx:2653 AliTPCCorrection.cxx:2654 AliTPCCorrection.cxx:2655 AliTPCCorrection.cxx:2656 AliTPCCorrection.cxx:2657 AliTPCCorrection.cxx:2658 AliTPCCorrection.cxx:2659 AliTPCCorrection.cxx:2660 AliTPCCorrection.cxx:2661 AliTPCCorrection.cxx:2662 AliTPCCorrection.cxx:2663 AliTPCCorrection.cxx:2664 AliTPCCorrection.cxx:2665 AliTPCCorrection.cxx:2666 AliTPCCorrection.cxx:2667 AliTPCCorrection.cxx:2668 AliTPCCorrection.cxx:2669 AliTPCCorrection.cxx:2670 AliTPCCorrection.cxx:2671 AliTPCCorrection.cxx:2672 AliTPCCorrection.cxx:2673 AliTPCCorrection.cxx:2674 AliTPCCorrection.cxx:2675 AliTPCCorrection.cxx:2676 AliTPCCorrection.cxx:2677 AliTPCCorrection.cxx:2678 AliTPCCorrection.cxx:2679 AliTPCCorrection.cxx:2680 AliTPCCorrection.cxx:2681 AliTPCCorrection.cxx:2682 AliTPCCorrection.cxx:2683 AliTPCCorrection.cxx:2684 AliTPCCorrection.cxx:2685 AliTPCCorrection.cxx:2686 AliTPCCorrection.cxx:2687 AliTPCCorrection.cxx:2688 AliTPCCorrection.cxx:2689 AliTPCCorrection.cxx:2690 AliTPCCorrection.cxx:2691 AliTPCCorrection.cxx:2692 AliTPCCorrection.cxx:2693 AliTPCCorrection.cxx:2694 AliTPCCorrection.cxx:2695 AliTPCCorrection.cxx:2696 AliTPCCorrection.cxx:2697 AliTPCCorrection.cxx:2698 AliTPCCorrection.cxx:2699 AliTPCCorrection.cxx:2700 AliTPCCorrection.cxx:2701 AliTPCCorrection.cxx:2702 AliTPCCorrection.cxx:2703 AliTPCCorrection.cxx:2704 AliTPCCorrection.cxx:2705 AliTPCCorrection.cxx:2706 AliTPCCorrection.cxx:2707 AliTPCCorrection.cxx:2708 AliTPCCorrection.cxx:2709 AliTPCCorrection.cxx:2710 AliTPCCorrection.cxx:2711 AliTPCCorrection.cxx:2712 AliTPCCorrection.cxx:2713 AliTPCCorrection.cxx:2714 AliTPCCorrection.cxx:2715 AliTPCCorrection.cxx:2716 AliTPCCorrection.cxx:2717 AliTPCCorrection.cxx:2718 AliTPCCorrection.cxx:2719 AliTPCCorrection.cxx:2720 AliTPCCorrection.cxx:2721 AliTPCCorrection.cxx:2722 AliTPCCorrection.cxx:2723 AliTPCCorrection.cxx:2724 AliTPCCorrection.cxx:2725 AliTPCCorrection.cxx:2726 AliTPCCorrection.cxx:2727 AliTPCCorrection.cxx:2728 AliTPCCorrection.cxx:2729 AliTPCCorrection.cxx:2730 AliTPCCorrection.cxx:2731 AliTPCCorrection.cxx:2732 AliTPCCorrection.cxx:2733 AliTPCCorrection.cxx:2734 AliTPCCorrection.cxx:2735 AliTPCCorrection.cxx:2736 AliTPCCorrection.cxx:2737 AliTPCCorrection.cxx:2738 AliTPCCorrection.cxx:2739 AliTPCCorrection.cxx:2740 AliTPCCorrection.cxx:2741 AliTPCCorrection.cxx:2742 AliTPCCorrection.cxx:2743 AliTPCCorrection.cxx:2744 AliTPCCorrection.cxx:2745 AliTPCCorrection.cxx:2746 AliTPCCorrection.cxx:2747 AliTPCCorrection.cxx:2748 AliTPCCorrection.cxx:2749 AliTPCCorrection.cxx:2750 AliTPCCorrection.cxx:2751 AliTPCCorrection.cxx:2752 AliTPCCorrection.cxx:2753 AliTPCCorrection.cxx:2754 AliTPCCorrection.cxx:2755 AliTPCCorrection.cxx:2756 AliTPCCorrection.cxx:2757 AliTPCCorrection.cxx:2758 AliTPCCorrection.cxx:2759 AliTPCCorrection.cxx:2760 AliTPCCorrection.cxx:2761 AliTPCCorrection.cxx:2762 AliTPCCorrection.cxx:2763 AliTPCCorrection.cxx:2764 AliTPCCorrection.cxx:2765 AliTPCCorrection.cxx:2766 AliTPCCorrection.cxx:2767 AliTPCCorrection.cxx:2768 AliTPCCorrection.cxx:2769 AliTPCCorrection.cxx:2770 AliTPCCorrection.cxx:2771 AliTPCCorrection.cxx:2772 AliTPCCorrection.cxx:2773 AliTPCCorrection.cxx:2774 AliTPCCorrection.cxx:2775 AliTPCCorrection.cxx:2776 AliTPCCorrection.cxx:2777 AliTPCCorrection.cxx:2778 AliTPCCorrection.cxx:2779 AliTPCCorrection.cxx:2780 AliTPCCorrection.cxx:2781 AliTPCCorrection.cxx:2782 AliTPCCorrection.cxx:2783 AliTPCCorrection.cxx:2784 AliTPCCorrection.cxx:2785 AliTPCCorrection.cxx:2786 AliTPCCorrection.cxx:2787 AliTPCCorrection.cxx:2788 AliTPCCorrection.cxx:2789 AliTPCCorrection.cxx:2790 AliTPCCorrection.cxx:2791 AliTPCCorrection.cxx:2792 AliTPCCorrection.cxx:2793 AliTPCCorrection.cxx:2794 AliTPCCorrection.cxx:2795 AliTPCCorrection.cxx:2796 AliTPCCorrection.cxx:2797 AliTPCCorrection.cxx:2798 AliTPCCorrection.cxx:2799 AliTPCCorrection.cxx:2800 AliTPCCorrection.cxx:2801 AliTPCCorrection.cxx:2802 AliTPCCorrection.cxx:2803 AliTPCCorrection.cxx:2804 AliTPCCorrection.cxx:2805 AliTPCCorrection.cxx:2806 AliTPCCorrection.cxx:2807 AliTPCCorrection.cxx:2808 AliTPCCorrection.cxx:2809 AliTPCCorrection.cxx:2810 AliTPCCorrection.cxx:2811 AliTPCCorrection.cxx:2812 AliTPCCorrection.cxx:2813 AliTPCCorrection.cxx:2814 AliTPCCorrection.cxx:2815 AliTPCCorrection.cxx:2816 AliTPCCorrection.cxx:2817 AliTPCCorrection.cxx:2818 AliTPCCorrection.cxx:2819 AliTPCCorrection.cxx:2820 AliTPCCorrection.cxx:2821 AliTPCCorrection.cxx:2822 AliTPCCorrection.cxx:2823 AliTPCCorrection.cxx:2824 AliTPCCorrection.cxx:2825 AliTPCCorrection.cxx:2826 AliTPCCorrection.cxx:2827 AliTPCCorrection.cxx:2828 AliTPCCorrection.cxx:2829 AliTPCCorrection.cxx:2830 AliTPCCorrection.cxx:2831 AliTPCCorrection.cxx:2832 AliTPCCorrection.cxx:2833 AliTPCCorrection.cxx:2834 AliTPCCorrection.cxx:2835 AliTPCCorrection.cxx:2836 AliTPCCorrection.cxx:2837 AliTPCCorrection.cxx:2838 AliTPCCorrection.cxx:2839 AliTPCCorrection.cxx:2840 AliTPCCorrection.cxx:2841 AliTPCCorrection.cxx:2842 AliTPCCorrection.cxx:2843 AliTPCCorrection.cxx:2844 AliTPCCorrection.cxx:2845 AliTPCCorrection.cxx:2846 AliTPCCorrection.cxx:2847 AliTPCCorrection.cxx:2848 AliTPCCorrection.cxx:2849 AliTPCCorrection.cxx:2850 AliTPCCorrection.cxx:2851 AliTPCCorrection.cxx:2852 AliTPCCorrection.cxx:2853 AliTPCCorrection.cxx:2854 AliTPCCorrection.cxx:2855 AliTPCCorrection.cxx:2856 AliTPCCorrection.cxx:2857 AliTPCCorrection.cxx:2858 AliTPCCorrection.cxx:2859 AliTPCCorrection.cxx:2860 AliTPCCorrection.cxx:2861 AliTPCCorrection.cxx:2862 AliTPCCorrection.cxx:2863 AliTPCCorrection.cxx:2864 AliTPCCorrection.cxx:2865 AliTPCCorrection.cxx:2866 AliTPCCorrection.cxx:2867 AliTPCCorrection.cxx:2868 AliTPCCorrection.cxx:2869 AliTPCCorrection.cxx:2870 AliTPCCorrection.cxx:2871 AliTPCCorrection.cxx:2872 AliTPCCorrection.cxx:2873 AliTPCCorrection.cxx:2874 AliTPCCorrection.cxx:2875 AliTPCCorrection.cxx:2876 AliTPCCorrection.cxx:2877 AliTPCCorrection.cxx:2878 AliTPCCorrection.cxx:2879 AliTPCCorrection.cxx:2880 AliTPCCorrection.cxx:2881 AliTPCCorrection.cxx:2882 AliTPCCorrection.cxx:2883 AliTPCCorrection.cxx:2884 AliTPCCorrection.cxx:2885 AliTPCCorrection.cxx:2886 AliTPCCorrection.cxx:2887 AliTPCCorrection.cxx:2888 AliTPCCorrection.cxx:2889 AliTPCCorrection.cxx:2890 AliTPCCorrection.cxx:2891 AliTPCCorrection.cxx:2892 AliTPCCorrection.cxx:2893 AliTPCCorrection.cxx:2894 AliTPCCorrection.cxx:2895 AliTPCCorrection.cxx:2896 AliTPCCorrection.cxx:2897 AliTPCCorrection.cxx:2898 AliTPCCorrection.cxx:2899 AliTPCCorrection.cxx:2900 AliTPCCorrection.cxx:2901 AliTPCCorrection.cxx:2902 AliTPCCorrection.cxx:2903 AliTPCCorrection.cxx:2904 AliTPCCorrection.cxx:2905 AliTPCCorrection.cxx:2906 AliTPCCorrection.cxx:2907 AliTPCCorrection.cxx:2908 AliTPCCorrection.cxx:2909 AliTPCCorrection.cxx:2910 AliTPCCorrection.cxx:2911 AliTPCCorrection.cxx:2912 AliTPCCorrection.cxx:2913 AliTPCCorrection.cxx:2914 AliTPCCorrection.cxx:2915 AliTPCCorrection.cxx:2916 AliTPCCorrection.cxx:2917 AliTPCCorrection.cxx:2918 AliTPCCorrection.cxx:2919 AliTPCCorrection.cxx:2920 AliTPCCorrection.cxx:2921 AliTPCCorrection.cxx:2922 AliTPCCorrection.cxx:2923 AliTPCCorrection.cxx:2924 AliTPCCorrection.cxx:2925 AliTPCCorrection.cxx:2926 AliTPCCorrection.cxx:2927 AliTPCCorrection.cxx:2928 AliTPCCorrection.cxx:2929 AliTPCCorrection.cxx:2930 AliTPCCorrection.cxx:2931 AliTPCCorrection.cxx:2932 AliTPCCorrection.cxx:2933 AliTPCCorrection.cxx:2934 AliTPCCorrection.cxx:2935 AliTPCCorrection.cxx:2936 AliTPCCorrection.cxx:2937 AliTPCCorrection.cxx:2938 AliTPCCorrection.cxx:2939 AliTPCCorrection.cxx:2940 AliTPCCorrection.cxx:2941 AliTPCCorrection.cxx:2942 AliTPCCorrection.cxx:2943 AliTPCCorrection.cxx:2944 AliTPCCorrection.cxx:2945 AliTPCCorrection.cxx:2946 AliTPCCorrection.cxx:2947 AliTPCCorrection.cxx:2948 AliTPCCorrection.cxx:2949 AliTPCCorrection.cxx:2950 AliTPCCorrection.cxx:2951 AliTPCCorrection.cxx:2952 AliTPCCorrection.cxx:2953 AliTPCCorrection.cxx:2954 AliTPCCorrection.cxx:2955 AliTPCCorrection.cxx:2956 AliTPCCorrection.cxx:2957 AliTPCCorrection.cxx:2958 AliTPCCorrection.cxx:2959 AliTPCCorrection.cxx:2960 AliTPCCorrection.cxx:2961 AliTPCCorrection.cxx:2962 AliTPCCorrection.cxx:2963 AliTPCCorrection.cxx:2964 AliTPCCorrection.cxx:2965 AliTPCCorrection.cxx:2966 AliTPCCorrection.cxx:2967 AliTPCCorrection.cxx:2968 AliTPCCorrection.cxx:2969 AliTPCCorrection.cxx:2970 AliTPCCorrection.cxx:2971 AliTPCCorrection.cxx:2972 AliTPCCorrection.cxx:2973 AliTPCCorrection.cxx:2974 AliTPCCorrection.cxx:2975 AliTPCCorrection.cxx:2976 AliTPCCorrection.cxx:2977 AliTPCCorrection.cxx:2978 AliTPCCorrection.cxx:2979 AliTPCCorrection.cxx:2980 AliTPCCorrection.cxx:2981 AliTPCCorrection.cxx:2982 AliTPCCorrection.cxx:2983 AliTPCCorrection.cxx:2984 AliTPCCorrection.cxx:2985 AliTPCCorrection.cxx:2986 AliTPCCorrection.cxx:2987 AliTPCCorrection.cxx:2988 AliTPCCorrection.cxx:2989 AliTPCCorrection.cxx:2990 AliTPCCorrection.cxx:2991 AliTPCCorrection.cxx:2992 AliTPCCorrection.cxx:2993 AliTPCCorrection.cxx:2994 AliTPCCorrection.cxx:2995 AliTPCCorrection.cxx:2996 AliTPCCorrection.cxx:2997 AliTPCCorrection.cxx:2998 AliTPCCorrection.cxx:2999 AliTPCCorrection.cxx:3000 AliTPCCorrection.cxx:3001 AliTPCCorrection.cxx:3002 AliTPCCorrection.cxx:3003 AliTPCCorrection.cxx:3004 AliTPCCorrection.cxx:3005 AliTPCCorrection.cxx:3006 AliTPCCorrection.cxx:3007 AliTPCCorrection.cxx:3008 AliTPCCorrection.cxx:3009 AliTPCCorrection.cxx:3010 AliTPCCorrection.cxx:3011 AliTPCCorrection.cxx:3012 AliTPCCorrection.cxx:3013 AliTPCCorrection.cxx:3014 AliTPCCorrection.cxx:3015 AliTPCCorrection.cxx:3016 AliTPCCorrection.cxx:3017 AliTPCCorrection.cxx:3018 AliTPCCorrection.cxx:3019 AliTPCCorrection.cxx:3020 AliTPCCorrection.cxx:3021 AliTPCCorrection.cxx:3022 AliTPCCorrection.cxx:3023 AliTPCCorrection.cxx:3024 AliTPCCorrection.cxx:3025 AliTPCCorrection.cxx:3026 AliTPCCorrection.cxx:3027 AliTPCCorrection.cxx:3028 AliTPCCorrection.cxx:3029 AliTPCCorrection.cxx:3030 AliTPCCorrection.cxx:3031 AliTPCCorrection.cxx:3032 AliTPCCorrection.cxx:3033 AliTPCCorrection.cxx:3034 AliTPCCorrection.cxx:3035 AliTPCCorrection.cxx:3036 AliTPCCorrection.cxx:3037 AliTPCCorrection.cxx:3038 AliTPCCorrection.cxx:3039 AliTPCCorrection.cxx:3040 AliTPCCorrection.cxx:3041 AliTPCCorrection.cxx:3042 AliTPCCorrection.cxx:3043 AliTPCCorrection.cxx:3044 AliTPCCorrection.cxx:3045 AliTPCCorrection.cxx:3046 AliTPCCorrection.cxx:3047 AliTPCCorrection.cxx:3048 AliTPCCorrection.cxx:3049 AliTPCCorrection.cxx:3050 AliTPCCorrection.cxx:3051 AliTPCCorrection.cxx:3052 AliTPCCorrection.cxx:3053 AliTPCCorrection.cxx:3054 AliTPCCorrection.cxx:3055 AliTPCCorrection.cxx:3056 AliTPCCorrection.cxx:3057 AliTPCCorrection.cxx:3058 AliTPCCorrection.cxx:3059 AliTPCCorrection.cxx:3060 AliTPCCorrection.cxx:3061 AliTPCCorrection.cxx:3062 AliTPCCorrection.cxx:3063 AliTPCCorrection.cxx:3064 AliTPCCorrection.cxx:3065 AliTPCCorrection.cxx:3066 AliTPCCorrection.cxx:3067 AliTPCCorrection.cxx:3068 AliTPCCorrection.cxx:3069 AliTPCCorrection.cxx:3070 AliTPCCorrection.cxx:3071 AliTPCCorrection.cxx:3072 AliTPCCorrection.cxx:3073 AliTPCCorrection.cxx:3074 AliTPCCorrection.cxx:3075 AliTPCCorrection.cxx:3076 AliTPCCorrection.cxx:3077 AliTPCCorrection.cxx:3078 AliTPCCorrection.cxx:3079 AliTPCCorrection.cxx:3080 AliTPCCorrection.cxx:3081 AliTPCCorrection.cxx:3082 AliTPCCorrection.cxx:3083 AliTPCCorrection.cxx:3084 AliTPCCorrection.cxx:3085 AliTPCCorrection.cxx:3086 AliTPCCorrection.cxx:3087 AliTPCCorrection.cxx:3088 AliTPCCorrection.cxx:3089 AliTPCCorrection.cxx:3090 AliTPCCorrection.cxx:3091 AliTPCCorrection.cxx:3092 AliTPCCorrection.cxx:3093 AliTPCCorrection.cxx:3094 AliTPCCorrection.cxx:3095 AliTPCCorrection.cxx:3096 AliTPCCorrection.cxx:3097 AliTPCCorrection.cxx:3098 AliTPCCorrection.cxx:3099 AliTPCCorrection.cxx:3100 AliTPCCorrection.cxx:3101 AliTPCCorrection.cxx:3102 AliTPCCorrection.cxx:3103 AliTPCCorrection.cxx:3104 AliTPCCorrection.cxx:3105 AliTPCCorrection.cxx:3106 AliTPCCorrection.cxx:3107 AliTPCCorrection.cxx:3108 AliTPCCorrection.cxx:3109 AliTPCCorrection.cxx:3110 AliTPCCorrection.cxx:3111 AliTPCCorrection.cxx:3112 AliTPCCorrection.cxx:3113 AliTPCCorrection.cxx:3114 AliTPCCorrection.cxx:3115 AliTPCCorrection.cxx:3116 AliTPCCorrection.cxx:3117 AliTPCCorrection.cxx:3118 AliTPCCorrection.cxx:3119 AliTPCCorrection.cxx:3120 AliTPCCorrection.cxx:3121 AliTPCCorrection.cxx:3122 AliTPCCorrection.cxx:3123 AliTPCCorrection.cxx:3124 AliTPCCorrection.cxx:3125 AliTPCCorrection.cxx:3126 AliTPCCorrection.cxx:3127 AliTPCCorrection.cxx:3128 AliTPCCorrection.cxx:3129 AliTPCCorrection.cxx:3130 AliTPCCorrection.cxx:3131 AliTPCCorrection.cxx:3132 AliTPCCorrection.cxx:3133 AliTPCCorrection.cxx:3134 AliTPCCorrection.cxx:3135 AliTPCCorrection.cxx:3136 AliTPCCorrection.cxx:3137 AliTPCCorrection.cxx:3138 AliTPCCorrection.cxx:3139 AliTPCCorrection.cxx:3140 AliTPCCorrection.cxx:3141 AliTPCCorrection.cxx:3142 AliTPCCorrection.cxx:3143 AliTPCCorrection.cxx:3144 AliTPCCorrection.cxx:3145 AliTPCCorrection.cxx:3146 AliTPCCorrection.cxx:3147 AliTPCCorrection.cxx:3148 AliTPCCorrection.cxx:3149 AliTPCCorrection.cxx:3150 AliTPCCorrection.cxx:3151 AliTPCCorrection.cxx:3152 AliTPCCorrection.cxx:3153 AliTPCCorrection.cxx:3154 AliTPCCorrection.cxx:3155 AliTPCCorrection.cxx:3156 AliTPCCorrection.cxx:3157 AliTPCCorrection.cxx:3158 AliTPCCorrection.cxx:3159 AliTPCCorrection.cxx:3160 AliTPCCorrection.cxx:3161 AliTPCCorrection.cxx:3162 AliTPCCorrection.cxx:3163 AliTPCCorrection.cxx:3164 AliTPCCorrection.cxx:3165 AliTPCCorrection.cxx:3166 AliTPCCorrection.cxx:3167 AliTPCCorrection.cxx:3168 AliTPCCorrection.cxx:3169 AliTPCCorrection.cxx:3170 AliTPCCorrection.cxx:3171 AliTPCCorrection.cxx:3172 AliTPCCorrection.cxx:3173 AliTPCCorrection.cxx:3174 AliTPCCorrection.cxx:3175 AliTPCCorrection.cxx:3176 AliTPCCorrection.cxx:3177 AliTPCCorrection.cxx:3178 AliTPCCorrection.cxx:3179 AliTPCCorrection.cxx:3180 AliTPCCorrection.cxx:3181 AliTPCCorrection.cxx:3182 AliTPCCorrection.cxx:3183 AliTPCCorrection.cxx:3184 AliTPCCorrection.cxx:3185 AliTPCCorrection.cxx:3186 AliTPCCorrection.cxx:3187 AliTPCCorrection.cxx:3188 AliTPCCorrection.cxx:3189 AliTPCCorrection.cxx:3190 AliTPCCorrection.cxx:3191 AliTPCCorrection.cxx:3192 AliTPCCorrection.cxx:3193 AliTPCCorrection.cxx:3194 AliTPCCorrection.cxx:3195 AliTPCCorrection.cxx:3196 AliTPCCorrection.cxx:3197 AliTPCCorrection.cxx:3198 AliTPCCorrection.cxx:3199 AliTPCCorrection.cxx:3200 AliTPCCorrection.cxx:3201 AliTPCCorrection.cxx:3202 AliTPCCorrection.cxx:3203 AliTPCCorrection.cxx:3204 AliTPCCorrection.cxx:3205 AliTPCCorrection.cxx:3206 AliTPCCorrection.cxx:3207 AliTPCCorrection.cxx:3208 AliTPCCorrection.cxx:3209 AliTPCCorrection.cxx:3210 AliTPCCorrection.cxx:3211 AliTPCCorrection.cxx:3212 AliTPCCorrection.cxx:3213 AliTPCCorrection.cxx:3214 AliTPCCorrection.cxx:3215 AliTPCCorrection.cxx:3216 AliTPCCorrection.cxx:3217 AliTPCCorrection.cxx:3218 AliTPCCorrection.cxx:3219 AliTPCCorrection.cxx:3220 AliTPCCorrection.cxx:3221 AliTPCCorrection.cxx:3222 AliTPCCorrection.cxx:3223 AliTPCCorrection.cxx:3224 AliTPCCorrection.cxx:3225 AliTPCCorrection.cxx:3226 AliTPCCorrection.cxx:3227 AliTPCCorrection.cxx:3228 AliTPCCorrection.cxx:3229 AliTPCCorrection.cxx:3230 AliTPCCorrection.cxx:3231 AliTPCCorrection.cxx:3232 AliTPCCorrection.cxx:3233 AliTPCCorrection.cxx:3234 AliTPCCorrection.cxx:3235 AliTPCCorrection.cxx:3236 AliTPCCorrection.cxx:3237 AliTPCCorrection.cxx:3238 AliTPCCorrection.cxx:3239 AliTPCCorrection.cxx:3240 AliTPCCorrection.cxx:3241 AliTPCCorrection.cxx:3242 AliTPCCorrection.cxx:3243 AliTPCCorrection.cxx:3244 AliTPCCorrection.cxx:3245 AliTPCCorrection.cxx:3246 AliTPCCorrection.cxx:3247 AliTPCCorrection.cxx:3248 AliTPCCorrection.cxx:3249 AliTPCCorrection.cxx:3250 AliTPCCorrection.cxx:3251 AliTPCCorrection.cxx:3252 AliTPCCorrection.cxx:3253 AliTPCCorrection.cxx:3254 AliTPCCorrection.cxx:3255 AliTPCCorrection.cxx:3256 AliTPCCorrection.cxx:3257 AliTPCCorrection.cxx:3258 AliTPCCorrection.cxx:3259 AliTPCCorrection.cxx:3260 AliTPCCorrection.cxx:3261 AliTPCCorrection.cxx:3262 AliTPCCorrection.cxx:3263 AliTPCCorrection.cxx:3264 AliTPCCorrection.cxx:3265 AliTPCCorrection.cxx:3266 AliTPCCorrection.cxx:3267 AliTPCCorrection.cxx:3268 AliTPCCorrection.cxx:3269 AliTPCCorrection.cxx:3270 AliTPCCorrection.cxx:3271 AliTPCCorrection.cxx:3272 AliTPCCorrection.cxx:3273 AliTPCCorrection.cxx:3274 AliTPCCorrection.cxx:3275 AliTPCCorrection.cxx:3276 AliTPCCorrection.cxx:3277 AliTPCCorrection.cxx:3278 AliTPCCorrection.cxx:3279 AliTPCCorrection.cxx:3280 AliTPCCorrection.cxx:3281 AliTPCCorrection.cxx:3282 AliTPCCorrection.cxx:3283 AliTPCCorrection.cxx:3284 AliTPCCorrection.cxx:3285 AliTPCCorrection.cxx:3286 AliTPCCorrection.cxx:3287 AliTPCCorrection.cxx:3288 AliTPCCorrection.cxx:3289 AliTPCCorrection.cxx:3290 AliTPCCorrection.cxx:3291 AliTPCCorrection.cxx:3292 AliTPCCorrection.cxx:3293 AliTPCCorrection.cxx:3294 AliTPCCorrection.cxx:3295 AliTPCCorrection.cxx:3296 AliTPCCorrection.cxx:3297 AliTPCCorrection.cxx:3298 AliTPCCorrection.cxx:3299 AliTPCCorrection.cxx:3300 AliTPCCorrection.cxx:3301 AliTPCCorrection.cxx:3302 AliTPCCorrection.cxx:3303 AliTPCCorrection.cxx:3304 AliTPCCorrection.cxx:3305 AliTPCCorrection.cxx:3306 AliTPCCorrection.cxx:3307 AliTPCCorrection.cxx:3308 AliTPCCorrection.cxx:3309 AliTPCCorrection.cxx:3310 AliTPCCorrection.cxx:3311 AliTPCCorrection.cxx:3312 AliTPCCorrection.cxx:3313 AliTPCCorrection.cxx:3314 AliTPCCorrection.cxx:3315 AliTPCCorrection.cxx:3316 AliTPCCorrection.cxx:3317 AliTPCCorrection.cxx:3318 AliTPCCorrection.cxx:3319 AliTPCCorrection.cxx:3320 AliTPCCorrection.cxx:3321 AliTPCCorrection.cxx:3322 AliTPCCorrection.cxx:3323 AliTPCCorrection.cxx:3324 AliTPCCorrection.cxx:3325 AliTPCCorrection.cxx:3326 AliTPCCorrection.cxx:3327 AliTPCCorrection.cxx:3328 AliTPCCorrection.cxx:3329 AliTPCCorrection.cxx:3330 AliTPCCorrection.cxx:3331 AliTPCCorrection.cxx:3332 AliTPCCorrection.cxx:3333 AliTPCCorrection.cxx:3334 AliTPCCorrection.cxx:3335 AliTPCCorrection.cxx:3336 AliTPCCorrection.cxx:3337 AliTPCCorrection.cxx:3338 AliTPCCorrection.cxx:3339 AliTPCCorrection.cxx:3340 AliTPCCorrection.cxx:3341 AliTPCCorrection.cxx:3342 AliTPCCorrection.cxx:3343 AliTPCCorrection.cxx:3344 AliTPCCorrection.cxx:3345 AliTPCCorrection.cxx:3346 AliTPCCorrection.cxx:3347 AliTPCCorrection.cxx:3348 AliTPCCorrection.cxx:3349 AliTPCCorrection.cxx:3350 AliTPCCorrection.cxx:3351 AliTPCCorrection.cxx:3352 AliTPCCorrection.cxx:3353 AliTPCCorrection.cxx:3354 AliTPCCorrection.cxx:3355 AliTPCCorrection.cxx:3356 AliTPCCorrection.cxx:3357 AliTPCCorrection.cxx:3358 AliTPCCorrection.cxx:3359 AliTPCCorrection.cxx:3360 AliTPCCorrection.cxx:3361 AliTPCCorrection.cxx:3362 AliTPCCorrection.cxx:3363 AliTPCCorrection.cxx:3364 AliTPCCorrection.cxx:3365 AliTPCCorrection.cxx:3366 AliTPCCorrection.cxx:3367 AliTPCCorrection.cxx:3368 AliTPCCorrection.cxx:3369 AliTPCCorrection.cxx:3370 AliTPCCorrection.cxx:3371 AliTPCCorrection.cxx:3372 AliTPCCorrection.cxx:3373 AliTPCCorrection.cxx:3374 AliTPCCorrection.cxx:3375 AliTPCCorrection.cxx:3376 AliTPCCorrection.cxx:3377 AliTPCCorrection.cxx:3378 AliTPCCorrection.cxx:3379 AliTPCCorrection.cxx:3380 AliTPCCorrection.cxx:3381 AliTPCCorrection.cxx:3382 AliTPCCorrection.cxx:3383 AliTPCCorrection.cxx:3384 AliTPCCorrection.cxx:3385 AliTPCCorrection.cxx:3386 AliTPCCorrection.cxx:3387 AliTPCCorrection.cxx:3388 AliTPCCorrection.cxx:3389 AliTPCCorrection.cxx:3390 AliTPCCorrection.cxx:3391 AliTPCCorrection.cxx:3392 AliTPCCorrection.cxx:3393 AliTPCCorrection.cxx:3394 AliTPCCorrection.cxx:3395 AliTPCCorrection.cxx:3396 AliTPCCorrection.cxx:3397 AliTPCCorrection.cxx:3398 AliTPCCorrection.cxx:3399 AliTPCCorrection.cxx:3400 AliTPCCorrection.cxx:3401 AliTPCCorrection.cxx:3402 AliTPCCorrection.cxx:3403 AliTPCCorrection.cxx:3404 AliTPCCorrection.cxx:3405 AliTPCCorrection.cxx:3406 AliTPCCorrection.cxx:3407 AliTPCCorrection.cxx:3408 AliTPCCorrection.cxx:3409 AliTPCCorrection.cxx:3410 AliTPCCorrection.cxx:3411 AliTPCCorrection.cxx:3412 AliTPCCorrection.cxx:3413 AliTPCCorrection.cxx:3414 AliTPCCorrection.cxx:3415 AliTPCCorrection.cxx:3416 AliTPCCorrection.cxx:3417 AliTPCCorrection.cxx:3418 AliTPCCorrection.cxx:3419 AliTPCCorrection.cxx:3420 AliTPCCorrection.cxx:3421 AliTPCCorrection.cxx:3422 AliTPCCorrection.cxx:3423 AliTPCCorrection.cxx:3424 AliTPCCorrection.cxx:3425 AliTPCCorrection.cxx:3426 AliTPCCorrection.cxx:3427 AliTPCCorrection.cxx:3428 AliTPCCorrection.cxx:3429 AliTPCCorrection.cxx:3430 AliTPCCorrection.cxx:3431 AliTPCCorrection.cxx:3432 AliTPCCorrection.cxx:3433 AliTPCCorrection.cxx:3434 AliTPCCorrection.cxx:3435 AliTPCCorrection.cxx:3436 AliTPCCorrection.cxx:3437 AliTPCCorrection.cxx:3438 AliTPCCorrection.cxx:3439 AliTPCCorrection.cxx:3440 AliTPCCorrection.cxx:3441 AliTPCCorrection.cxx:3442 AliTPCCorrection.cxx:3443 AliTPCCorrection.cxx:3444 AliTPCCorrection.cxx:3445 AliTPCCorrection.cxx:3446 AliTPCCorrection.cxx:3447 AliTPCCorrection.cxx:3448 AliTPCCorrection.cxx:3449 AliTPCCorrection.cxx:3450 AliTPCCorrection.cxx:3451 AliTPCCorrection.cxx:3452