ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//  AliTPCPRF2D -                                                            //
//  Pad response function object in two dimesions                            //
//  This class contains the basic functions for the                          //
//  calculation of PRF according generic charge distribution                 //
//  In Update function object calculate table of response function           //
//  in discrete x and y position                                             //
// This table is used for interpolation od response function in any position //
// (function GetPRF)                                                          //
//                                                                           // 
//  Origin: Marian Ivanov, Uni. of Bratislava, ivanov@fmph.uniba.sk          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>
#include <TCanvas.h>
#include <TClass.h>
#include <TF2.h>
#include <TH1.h> 
#include <TMath.h>
#include <TPad.h>
#include <TPaveText.h>
#include <TStyle.h>
#include <TText.h>
#include <string.h>

#include "AliH2F.h"
#include "AliTPCPRF2D.h"


extern TStyle * gStyle;

const Double_t AliTPCPRF2D::fgkDegtoRad = 0.01745329251994;
const Double_t AliTPCPRF2D::fgkSQRT12=3.464101;
const Int_t   AliTPCPRF2D::fgkNPRF = 100;


static Double_t FunGauss2D(const Double_t *const x, const Double_t *const par)
{ 
//Gauss function  -needde by the generic function object 
  return ( TMath::Exp(-(x[0]*x[0])/(2*par[0]*par[0]))*
	   TMath::Exp(-(x[1]*x[1])/(2*par[1]*par[1])));

}

static Double_t FunCosh2D(const Double_t *const x, const Double_t *const par)
{
 //Cosh function  -needde by the generic function object 
  return ( 1/(TMath::CosH(3.14159*x[0]/(2*par[0]))*
	   TMath::CosH(3.14159*x[1]/(2*par[1]))));
}    

static Double_t FunGati2D(const Double_t *const x, const Double_t *const par)
{
  //Gati function  -needde by the generic function object 
  Float_t k3=par[1];
  Float_t k3R=TMath::Sqrt(k3);
  Float_t k2=(TMath::Pi()/2)*(1-k3R/2.);
  Float_t k1=k2*k3R/(4*TMath::ATan(k3R));
  Float_t l=x[0]/par[0];
  Float_t tan2=TMath::TanH(k2*l);
  tan2*=tan2;
  Float_t res = k1*(1-tan2)/(1+k3*tan2);
 //par[4] = is equal to k3Y
  k3=par[4];
  k3R=TMath::Sqrt(k3);
  k2=(TMath::Pi()/2)*(1-k3R/2.);
  k1=k2*k3R/(4*TMath::ATan(k3R));
  l=x[1]/par[0];
  tan2=TMath::TanH(k2*l); 
  tan2*=tan2;
  res = res*k1*(1-tan2)/(1+k3*tan2);   
  return res;  
}   

///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

ClassImp(AliTPCPRF2D)

AliTPCPRF2D::AliTPCPRF2D()
            :TObject(),
             fcharge(0),
             fY1(0.),
             fY2(0.),
             fNYdiv(0),
             fNChargeArray(0),
             fChargeArray(0),
             fHeightFull(0.),
             fHeightS(0.),
             fShiftY(0.),
             fWidth(0.),
             fK(0.),
             fNPRF(0),
             fNdiv(5),
             fDStep(0.),
             fKNorm(1.),
             fInteg(0.),
             fGRF(0),
             fK3X(0.),
             fK3Y(0.),
             fPadDistance(0.),
             fOrigSigmaX(0.),
             fOrigSigmaY(0.),
             fChargeAngle(0.),
             fPadAngle(0.),
             fSigmaX(0.),
             fSigmaY(0.),
             fMeanX(0.),
             fMeanY(0.),
             fInterX(0),
             fInterY(0),
             fCurrentY(0.),
             fDYtoWire(0.),
             fDStepM1(0.)             
{
  //default constructor for response function object

  fNPRF =fgkNPRF ;
  for(Int_t i=0;i<5;i++){
        funParam[i]=0.;
        fType[i]=0;
  }
  

  //chewron default values   
  SetPad(0.8,0.8);
  SetChevron(0.2,0.0,1.0);
  SetY(-0.2,0.2,2);
  SetInterpolationType(2,0);
}

AliTPCPRF2D::~AliTPCPRF2D()
{
  if (fChargeArray!=0) delete [] fChargeArray;
  if (fGRF !=0 ) fGRF->Delete(); 
}

void AliTPCPRF2D::SetY(Float_t y1, Float_t y2, Int_t nYdiv)
{
  //
  //set virtual line position
  //first and last line and number of lines
  fNYdiv = nYdiv;
  fY1=y1;
  fY2=y2;
}

void AliTPCPRF2D::SetPad(Float_t width, Float_t height)
{
  //set base chevron parameters
 fHeightFull=height;
 fWidth=width;
}
void AliTPCPRF2D::SetChevron(Float_t hstep, 
			Float_t shifty, 
			Float_t fac)
{
  //set shaping of chewron parameters
  fHeightS=hstep;
  fShiftY=shifty;
  fK=fac;
}

void AliTPCPRF2D::SetChParam(Float_t width, Float_t height,
		  Float_t hstep, Float_t shifty, Float_t fac)
{
  SetPad(width,height);
  SetChevron(hstep,shifty,fac);
}


Float_t AliTPCPRF2D::GetPRF(Float_t xin, Float_t yin)
{
  //function which return pad response
  //for the charge in distance xin 
  //return  cubic aproximation of PRF or PRF at nearest virtual wire
   if (fChargeArray==0) return 0;
  //transform position to "wire position"
  Float_t y=fDYtoWire*(yin-fY1);
  if (fNYdiv == 1) y=fY1;
  //normaly it find nearest line charge
  if (fInterY ==0){   
    Int_t i=Int_t(0.5+y);
    if (y<0) i=Int_t(-0.5+y);
    if ((i<0) || (i>=fNYdiv) ) return 0;
    fcharge   = &(fChargeArray[i*fNPRF]);
    return GetPRFActiv(xin);
  }
  //make interpolation from more fore lines
  Int_t i= Int_t(y);
  Float_t res;
  if ((i<0) || (i>=fNYdiv) ) return 0;
  Float_t z0=0;
  Float_t z1=0;
  Float_t z2=0;
  Float_t z3=0;
  if (i>0) {
    fcharge =&(fChargeArray[(i-1)*fNPRF]);
    z0 = GetPRFActiv(xin);
  }
  fcharge =&(fChargeArray[i*fNPRF]);
  z1=GetPRFActiv(xin);
  if ((i+1)<fNYdiv){
    fcharge =&(fChargeArray[(i+1)*fNPRF]);
    z2 = GetPRFActiv(xin);
  }
  if ((i+2)<fNYdiv){
    fcharge =&(fChargeArray[(i+2)*fNPRF]);
    z3 = GetPRFActiv(xin);
  }
  Float_t a,b,c,d,k,l;
  a=z1;
  b=(z2-z0)/2.;
  k=z2-a-b;
  l=(z3-z1)/2.-b;
  d=l-2*k;
  c=k-d;
  Float_t dy=y-Float_t(i);
  
  res = a+b*dy+c*dy*dy+d*dy*dy*dy;  
  return res;            
} 


Float_t AliTPCPRF2D::GetPRFActiv(Float_t xin)
{
  //GEt response function on given charege line 
  //return spline aproximaton 
  Float_t x = (xin*fDStepM1)+fNPRF/2;
  Int_t i = Int_t(x);
  
  if  ( (i>1) && ((i+2)<fNPRF)) {
    Float_t a,b,c,d,k,l;
    a = fcharge[i];
    b = (fcharge[i+1]-fcharge[i-1])*0.5; 
    k = fcharge[i+1]-a-b;
    l = (fcharge[i+2]-fcharge[i])*0.5-b;
    d=l-2.*k;
    c=k-d;
    Float_t dx=x-Float_t(i);
    Float_t res = a+b*dx+c*dx*dx+d*dx*dx*dx;  
    return res;
  }
  else return 0;
}


Float_t  AliTPCPRF2D::GetGRF(Float_t xin, Float_t yin)
{  
  //function which returnoriginal charge distribution
  //this function is just normalised for fKnorm
  if (GetGRF() != 0 ) 
    return fKNorm*GetGRF()->Eval(xin,yin)/fInteg;
      else
    return 0.;
}

   
void AliTPCPRF2D::SetParam( TF2 *const GRF,  Float_t kNorm, 
		       Float_t sigmaX, Float_t sigmaY)
{
  //adjust parameters of the original charge distribution
  //and pad size parameters
   if (fGRF !=0 ) fGRF->Delete();
   fGRF = GRF;
   fKNorm = kNorm;
   //sprintf(fType,"User");
   snprintf(fType,5,"User");
   if (sigmaX ==0) sigmaX=(fWidth*(1+TMath::Abs(fK)))/fgkSQRT12;
   if (sigmaY ==0) sigmaY=(fWidth*(1+TMath::Abs(fK)))/fgkSQRT12;
   fOrigSigmaX=sigmaX; 
   fOrigSigmaY=sigmaY; 
   Double_t estimsigma = 
     TMath::Sqrt(sigmaX*sigmaX+(fWidth*fWidth*(1+TMath::Abs(fK))/12)+
		 TMath::Tan(fPadAngle*fgkDegtoRad)*TMath::Tan(fPadAngle*fgkDegtoRad)*fHeightFull*fHeightFull/12);   
   if (estimsigma < 5*sigmaX) {
     fDStep = estimsigma/10.;
     fNPRF  = Int_t(estimsigma*8./fDStep); 
   }
   else{
     fDStep = sigmaX; 
     Double_t width = fWidth*(1+TMath::Abs(fK))+TMath::Abs(TMath::Tan(fPadAngle*fgkDegtoRad))*fHeightFull;
     fNPRF = Int_t((width+8.*sigmaX)/fDStep);
   };

}
  

void AliTPCPRF2D::SetGauss(Float_t sigmaX, Float_t sigmaY,
		      Float_t kNorm)
{
  // 
  // set parameters for Gauss generic charge distribution
  //
  fKNorm = kNorm;
  fOrigSigmaX=sigmaX;
  fOrigSigmaY=sigmaY;
  //sprintf(fType,"Gauss");
  snprintf(fType,5,"Gauss");
  if (fGRF !=0 ) fGRF->Delete();
  fGRF = new TF2("FunGauss2D",FunGauss2D,-5.,5.,-5.,5.,4);
  
  funParam[0]=sigmaX;
  funParam[1]=sigmaY;  
  funParam[2]=fK;
  funParam[3]=fHeightS;    
 
  fGRF->SetParameters(funParam); 
  Double_t estimsigma = 
     TMath::Sqrt(sigmaX*sigmaX+(fWidth*fWidth*(1+TMath::Abs(fK))/12)+
		 TMath::Tan(fPadAngle)*TMath::Tan(fPadAngle*fgkDegtoRad)*fHeightFull*fHeightFull/12);   
   if (estimsigma < 5*sigmaX) {
     fDStep = estimsigma/10.;
     fNPRF  = Int_t(estimsigma*8./fDStep); 
   }
   else{
     fDStep = sigmaX; 
     Double_t width = fWidth*(1+TMath::Abs(fK))+TMath::Abs(TMath::Tan(fPadAngle*fgkDegtoRad))*fHeightFull;
     fNPRF = Int_t((width+8.*sigmaX)/fDStep);
   };
 
  
}
void AliTPCPRF2D::SetCosh(Float_t sigmaX, Float_t sigmaY,
		     Float_t kNorm)
{ 
  // set parameters for Cosh generic charge distribution
  //
  fKNorm = kNorm;
  fOrigSigmaX=sigmaX;
  fOrigSigmaY=sigmaY; 
  //  sprintf(fType,"Cosh");
  snprintf(fType,5,"Cosh");
  if (fGRF !=0 ) fGRF->Delete();
  fGRF = new TF2("FunCosh2D",	FunCosh2D,-5.,5.,-5.,5.,4);   
  funParam[0]=sigmaX;
  funParam[1]=sigmaY;
  funParam[2]=fK;  
  funParam[3]=fHeightS;
  fGRF->SetParameters(funParam);

  Double_t estimsigma = TMath::Sqrt(sigmaX*sigmaX+fWidth*fWidth*(1+TMath::Abs(fK))/12);   
  if (estimsigma < 5*sigmaX) {
    fDStep = estimsigma/10.;
    fNPRF  = Int_t(estimsigma*8./fDStep); 
  }
  else{
    fDStep = sigmaX; 
    fNPRF = Int_t((1.2*fWidth*(1+TMath::Abs(fK))+8.*sigmaX)/fDStep);
  };  
 
}

void AliTPCPRF2D::SetGati(Float_t K3X, Float_t K3Y,
		     Float_t padDistance,
		     Float_t kNorm)
{
  // set parameters for Gati generic charge distribution
  //
  fKNorm = kNorm;
  fK3X=K3X;
  fK3Y=K3Y;
  fPadDistance=padDistance;  
  //sprintf(fType,"Gati");
  snprintf(fType,5,"Gati");
  if (fGRF !=0 ) fGRF->Delete();
  fGRF = new TF2("FunGati2D",	FunGati2D,-5.,5.,-5.,5.,5);  
 
  funParam[0]=padDistance;
  funParam[1]=K3X;
  funParam[2]=fK;  
  funParam[3]=fHeightS;
  funParam[4]=K3Y;
  fGRF->SetParameters(funParam);
  fOrigSigmaX=padDistance;
  fOrigSigmaY=padDistance;
  Float_t sigmaX = fOrigSigmaX;
  Double_t estimsigma = TMath::Sqrt(sigmaX*sigmaX+fWidth*fWidth*(1+TMath::Abs(fK))/12);   
  if (estimsigma < 5*sigmaX) {
    fDStep = estimsigma/10.;
    fNPRF  = Int_t(estimsigma*8./fDStep); 
  }
  else{
    fDStep = sigmaX; 
    fNPRF = Int_t((1.2*fWidth*(1+TMath::Abs(fK))+8.*sigmaX)/fDStep);
  };
}



void AliTPCPRF2D::Update()
{
  //
  //update fields  with interpolated values for
  //PRF calculation

  if ( fGRF == 0 ) return;  
  //initialize interpolated values to 0
  Int_t i;
  if (fChargeArray!=0) delete [] fChargeArray;
  fChargeArray = new Float_t[fNPRF*fNYdiv];
  fNChargeArray = fNPRF*fNYdiv;
  for (i =0; i<fNPRF*fNYdiv;i++)  fChargeArray[i] = 0;
  //firstly calculate total integral of charge

  ////////////////////////////////////////////////////////
  //I'm waiting for normal integral
  //in this moment only sum
  Float_t x2=  4*fOrigSigmaX;
  Float_t y2=  4*fOrigSigmaY;
  Float_t dx = fOrigSigmaX/Float_t(fNdiv*6);
  Float_t dy = fOrigSigmaY/Float_t(fNdiv*6);  
  Int_t nx  = Int_t(0.5+x2/dx);
  Int_t ny  = Int_t(0.5+y2/dy);
  Int_t ix,iy;
  fInteg  = 0;
  Double_t dInteg =0;
  for (ix=-nx;ix<=nx;ix++)
    for ( iy=-ny;iy<=ny;iy++) 
      dInteg+=fGRF->Eval(Float_t(ix)*dx,Float_t(iy)*dy)*dx*dy;  
  /////////////////////////////////////////////////////
  fInteg =dInteg;
  if ( fInteg == 0 ) fInteg = 1; 

  for (i=0; i<fNYdiv; i++){
    if (fNYdiv == 1) fCurrentY = fY1;
    else
      fCurrentY = fY1+Double_t(i)*(fY2-fY1)/Double_t(fNYdiv-1);
    fcharge   = &(fChargeArray[i*fNPRF]);
    Update1();
  }
  //calculate conversion coefitient to convert position to virtual wire
  fDYtoWire=Float_t(fNYdiv-1)/(fY2-fY1);
  fDStepM1=1/fDStep;
  UpdateSigma();
}

void AliTPCPRF2D::Update1()
{
  //
  //update fields  with interpolated values for
  //PRF calculation for given charge line
  Int_t i;
  Double_t cos = TMath::Cos(fChargeAngle);
  Double_t sin = TMath::Sin(fChargeAngle);
  const Double_t kprec =0.00000001;
  //integrate charge over pad for different distance of pad
  for (i =0; i<fNPRF;i++){      
    //x in cm fWidth in cm
    //calculate integral 
    Double_t xch = fDStep * (Double_t)(i-fNPRF/2);
    fcharge[i]=0;
    Double_t k=1;  
    
    
    for (Double_t ym=-fHeightFull/2.-fShiftY;  ym<fHeightFull/2.-kprec;ym+=fHeightS){	
      Double_t y2chev=TMath::Min((ym+fHeightS),Double_t(fHeightFull/2.)); // end of chevron step
      Double_t y1chev= ym;  //beginning of chevron step
      Double_t y2 = TMath::Min(y2chev,fCurrentY+3.5*fOrigSigmaY);
      Double_t y1 = TMath::Max((y1chev),Double_t(-fHeightFull/2.));
      y1 = TMath::Max(y1chev,fCurrentY-3.5*fOrigSigmaY);

      Double_t x0 = fWidth*(-1.-(Double_t(k)*fK))*0.5+ym*TMath::Tan(fPadAngle*fgkDegtoRad);
      Double_t kx  = Double_t(k)*(fK*fWidth)/fHeightS;     
      kx = TMath::Tan(TMath::ATan(kx))+TMath::Tan(fPadAngle*fgkDegtoRad);     

      Int_t ny = TMath::Max(Int_t(fNdiv*TMath::Exp(-(y1-fCurrentY)*(y1-fCurrentY)/(2*fOrigSigmaY*fOrigSigmaY))),4);
      Double_t dy = TMath::Min(fOrigSigmaY/Double_t(ny),y2-y1);
      Double_t ndy = dy;
      
      //loop over different y strips with variable step size  dy
      if (y2>(y1+kprec)) for (Double_t y = y1; y<y2+kprec;){      
	//new step SIZE 
	
	ny = TMath::Max(Int_t(fNdiv*TMath::Exp(-(y-fCurrentY)*(y-fCurrentY)/(2*fOrigSigmaY*fOrigSigmaY))),5);
	ndy = fOrigSigmaY/Double_t(ny); 
	if (ndy>(y2-y-dy)) {
	  ndy =y2-y-dy;
	  if (ndy<kprec) ndy=2*kprec; //calculate new delta y
	}
	//		
	Double_t sumch=0;
	//calculation of x borders and initial step
	Double_t deltay = (y-y1chev);	 	

	Double_t xp1  = x0+deltay*kx;
                //x begining of pad at position y
	Double_t xp2 =xp1+fWidth;        //x end of pad at position y
	Double_t xp3 =xp1+kx*dy; //...at position y+dy
	Double_t xp4 =xp2+kx*dy; //..  
	
	Double_t x1 = TMath::Min(xp1,xp3);
	x1 = TMath::Max(xp1,xch-3.5*fOrigSigmaX); //beging of integration
	Double_t x2 = TMath::Max(xp2,xp4);
	 x2 = TMath::Min(xp2+dy*kx,xch+3.5*fOrigSigmaX); //end of integration

	Int_t nx = TMath::Max(Int_t(fNdiv*TMath::Exp(-(x1-xch)*(x1-xch)/(2*fOrigSigmaX*fOrigSigmaX))*
				    TMath::Exp(-(y1-fCurrentY)*(y1-fCurrentY)/(2*fOrigSigmaY*fOrigSigmaY))),2);
	Double_t dx = TMath::Min(fOrigSigmaX/Double_t(nx),x2-x1)/5.; //on the border more iteration
	Double_t ndx=dx;
	
	if (x2>(x1+kprec)) {
	  for (Double_t x = x1; x<x2+kprec ;){
	  //new step SIZE 	  
	  nx = TMath::Max(Int_t(fNdiv*TMath::Exp(-(x-xch)*(x-xch)/(2*fOrigSigmaX*fOrigSigmaX))),3);	  
	  ndx = fOrigSigmaX/Double_t(nx);
	  if (ndx>(x2-x-dx)) {
	    ndx =x2-x-dx;	 	   
	  }
          if ( ( (x+dx+ndx)<TMath::Max(xp3,xp1)) || ( (x+dx+ndx)>TMath::Min(xp4,xp2))) {
	    ndx/=5.;
	  }	  
	  if (ndx<kprec) ndx=2*kprec;
	  //INTEGRAL APROXIMATION
	  Double_t ddx,ddy,dddx,dddy;
	  ddx = xch-(x+dx/2.);
	  ddy = fCurrentY-(y+dy/2.);
	  dddx = cos*ddx-sin*ddy;
	  dddy = sin*ddx+cos*ddy;
	  Double_t z0=fGRF->Eval(dddx,dddy);  //middle point
	  
	  ddx = xch-(x+dx/2.);
	  ddy = fCurrentY-(y);
	  dddx = cos*ddx-sin*ddy;
	  dddy = sin*ddx+cos*ddy;
	  Double_t z1=fGRF->Eval(dddx,dddy);  //point down
	  
	  ddx = xch-(x+dx/2.);
	  ddy = fCurrentY-(y+dy);
	  dddx = cos*ddx-sin*ddy;
	  dddy = sin*ddx+cos*ddy;
	  Double_t z3=fGRF->Eval(dddx,dddy);  //point up
	  
	  ddx = xch-(x);
	  ddy = fCurrentY-(y+dy/2.);
	  dddx = cos*ddx-sin*ddy;
	  dddy = sin*ddx+cos*ddy;
	  Double_t z2=fGRF->Eval(dddx,dddy);  //point left  
	  
	  ddx = xch-(x+dx);
	  ddy = fCurrentY-(y+dy/2.);
	  dddx = cos*ddx-sin*ddy;
	  dddy = sin*ddx+cos*ddy;
	  Double_t z4=fGRF->Eval(dddx,dddy);  //point right
	  
	  
	  if (z0<0) {z0=0;z1=0;z2=0;z3=0;z4=0;}
	  
	  Double_t f2x= (z3+z1-2*z0)*4.;//second derivation in y
	  Double_t f2y= (z2+z4-2*z0)*4.;//second derivation in x
	  Double_t f1y= (z3-z1);
	  Double_t z ;	  
	  z = (z0+f2x/6.+f2y/6.);//second order aproxiation of integral	    
	  if (kx>kprec){  //positive derivation
	    if (x<(xp1+dy*kx)){                //calculate volume at left border 
	      Double_t xx1  = x;
	      Double_t xx2  = TMath::Min(x+dx,xp1+dy*kx);
	      Double_t yy1  = y+(xx1-xp1)/kx;
	      Double_t yy2  = TMath::Min(y+(xx2-xp1)/kx,y+dy);	      
	      z=z0;
	      if (yy2<y+dy) {		
		z-= z0*(y+dy-yy2)/dy; //constant part rectangle
		z-= f1y*(xx2-xx1)*(y+dy-yy2)*(y+dy-yy2)/(2.*dx*dy);
	      }
	      z-=z0*(xx2-xx1)*(yy2-yy1)/(2*dx*dy); //constant part rectangle
	      
	    }
	    if (x>xp2){          //calculate volume at right  border 
	      Double_t xx1  = x;
	      Double_t xx2  = x+dx;
	      Double_t yy1  = y+(xx1-xp2)/kx;
	      Double_t yy2  = y+(xx2-xp2)/kx;		     
	      z=z0;
	      //rectangle part
	      z-=z0*(yy1-y)/dy; //constant part
	      z-=f1y*(xx2-xx1)*(yy1-y)*(yy1-y)/(2*dx*dy);
	      //triangle part         
	      z-=z0*(xx2-xx1)*(yy2-yy1)/(2*dx*dy); //constant part	      
	    }
	  }	  
	  if (kx<-kprec){ //negative  derivation	    
	    if (x<(xp1+dy*kx)){       //calculate volume at left border          
	      Double_t xx1  = x;
	      Double_t xx2  = TMath::Min(x+dx,xp3-dy/kx);
	      Double_t yy1  = y+(xx1-xp1)/kx;
	      Double_t yy2  = TMath::Max(y,yy1+(xx2-xx1)/kx); //yy2<yy1 
	      z = z0;
	      z-= z0*(yy2-y)/dy; // constant part rectangle 
	      z-= f1y*(xx2-xx1)*(yy2-y)*(yy2-y)/(2.*dx*dy); 
	      z-=z0*(xx2-xx1)*(yy1-yy2)/(2*dx*dy); //constant part triangle
	    }
	    if (x>xp2){       //calculate volume at right  border 
	      Double_t xx1  = TMath::Max(x,xp2+dy*kx);
	      Double_t xx2  = x+dx;
	      Double_t yy1  = TMath::Min(y+dy,y-(xp2-xx1)/kx);
	      Double_t yy2  = y-(xp2-xx2)/kx;
	      z=z0;
	      z-=z0*(yy2-y)/dy;  //constant part rextangle
	      z-= f1y*(xx2-xx1)*(yy2-y)*(yy2-y)/(2.*dx*dy); 
	      z-=z0*(xx2-xx1)*(yy1-yy2)/(2*dx*dy); //constant part triangle
	    }     	    
	  }	
	       
	  if (z>0.)	      sumch+=fKNorm*z*dx*dy/fInteg;
	  
	  x+=dx;
	  dx = ndx;
	}; //loop over x  	  
	fcharge[i]+=sumch;
	}//if x2>x1
	y+=dy;
	dy =ndy;
      }//step over different y
      k*=-1.;
    }//step over chevron 
    
   }//step over different points on line NPRF
}

void AliTPCPRF2D::UpdateSigma()
{
  //
  //calulate effective sigma X and sigma y of PRF
  fMeanX = 0;
  fMeanY = 0;
  fSigmaX = 0;
  fSigmaY = 0;
 
  Float_t sum =0;
  Int_t i;
  Float_t x,y;

  for (i=-1; i<=fNYdiv; i++){
    if (fNYdiv == 1) y = fY1;
    else
      y = fY1+Float_t(i)*(fY2-fY1)/Float_t(fNYdiv-1);
    for (x =-fNPRF*fDStep; x<fNPRF*fDStep;x+=fDStep)
      {      
	//x in cm fWidth in cm
	Float_t weight = GetPRF(x,y);
	fSigmaX+=x*x*weight; 
	fSigmaY+=y*y*weight;
	fMeanX+=x*weight;
	fMeanY+=y*weight;
	sum+=weight;
    };  
  }
  if (sum>0){
    fMeanX/=sum;
    fMeanY/=sum;    
    fSigmaX = TMath::Sqrt(fSigmaX/sum-fMeanX*fMeanX);
    fSigmaY = TMath::Sqrt(fSigmaY/sum-fMeanY*fMeanY);   
  }
  else fSigmaX=0; 
}


void AliTPCPRF2D::Streamer(TBuffer &xRuub)
{
   // Stream an object of class AliTPCPRF2D

   if (xRuub.IsReading()) {
      UInt_t xRuus, xRuuc;
      Version_t xRuuv = xRuub.ReadVersion(&xRuus, &xRuuc);
      AliTPCPRF2D::Class()->ReadBuffer(xRuub, this, xRuuv, xRuus, xRuuc);
      //read functions
      if (strncmp(fType,"User",3)!=0){
	delete fGRF;  
        if (strncmp(fType,"Gauss",3)==0) 
	  fGRF = new TF2("FunGauss2D",FunGauss2D,-5.,5.,-5.,5.,4);
        if (strncmp(fType,"Cosh",3)==0) 
	  fGRF = new TF2("FunCosh2D",FunCosh2D,-5.,5.,-5.,5.,4);
        if (strncmp(fType,"Gati",3)==0) 
	  fGRF = new TF2("FunGati2D",FunGati2D,-5.,5.,-5.,5.,5);      
        if (fGRF!=0) fGRF->SetParameters(funParam);
      }
      //calculate conversion coefitient to convert position to virtual wire
      fDYtoWire=Float_t(fNYdiv-1)/(fY2-fY1);
      fDStepM1=1/fDStep;
   } else {
      AliTPCPRF2D::Class()->WriteBuffer(xRuub,this);
   }
}


TH1F *  AliTPCPRF2D::GenerDrawXHisto(Float_t x1, Float_t x2,Float_t y)
{
  //gener one dimensional hist of pad response function
  //  at position y 
  char s[100]; 
  const Int_t kn=200;
  //sprintf(s,"Pad Response Function"); 
  snprintf(s,100,"Pad Response Function");  
  TH1F * hPRFc = new TH1F("hPRFc",s,kn+1,x1,x2);
  Float_t x=x1;
  Float_t y1;

  for (Int_t i = 0;i<kn+1;i++)
    {
      x+=(x2-x1)/Float_t(kn);
      y1 = GetPRF(x,y);
      hPRFc->Fill(x,y1);
    };
  hPRFc->SetXTitle("pad  (cm)");
  return hPRFc;
}  

AliH2F * AliTPCPRF2D::GenerDrawHisto(Float_t x1, Float_t x2, Float_t y1, Float_t y2, Int_t Nx, Int_t Ny)
{
  //
  //gener two dimensional histogram with PRF
  //
  char s[100];
  //sprintf(s,"Pad Response Function"); 
  snprintf(s,100,"Pad Response Function");  
  AliH2F * hPRFc = new AliH2F("hPRFc",s,Nx,x1,x2,Ny,y1,y2);
  Float_t dx=(x2-x1)/Float_t(Nx);
  Float_t dy=(y2-y1)/Float_t(Ny) ;
  Float_t x,y,z; 
  x = x1;
  y = y1;
  for ( Int_t i  = 0;i<=Nx;i++,x+=dx){
    y=y1;
    for (Int_t j  = 0;j<=Ny;j++,y+=dy){
      z = GetPRF(x,y);
      hPRFc->SetBinContent(hPRFc->GetBin(i,j),z);
    };
  }; 
  hPRFc->SetXTitle("pad direction (cm)");
  hPRFc->SetYTitle("pad row  direction (cm)");
  hPRFc->SetTitleOffset(1.5,"X");
  hPRFc->SetTitleOffset(1.5,"Y");
  return hPRFc;
}


AliH2F * AliTPCPRF2D::GenerDrawDistHisto(Float_t x1, Float_t x2, Float_t y1, Float_t y2, Int_t Nx, Int_t Ny, Float_t  thr)
{
  //return histogram with distortion
  const Float_t kminth=0.00001;
  if (thr<kminth) thr=kminth;
  char s[100]; 
  //sprintf(s,"COG distortion of PRF (threshold=%2.2f)",thr); 
  snprintf(s,100,"COG distortion of PRF (threshold=%2.2f)",thr); 
  AliH2F * hPRFDist = new AliH2F("hDistortion",s,Nx,x1,x2,Ny,y1,y2);
  Float_t dx=(x2-x1)/Float_t(Nx);
  Float_t dy=(y2-y1)/Float_t(Ny) ;
  Float_t x,y,z,ddx;
  x=x1;
  for ( Int_t i  = 0;i<=Nx;i++,x+=dx){
    y=y1;
    for(Int_t j  = 0;j<=Ny;j++,y+=dy)      
      {
	Float_t sumx=0;
	Float_t sum=0;
	for (Int_t k=-3;k<=3;k++)
	  {	    
	    Float_t padx=Float_t(k)*fWidth;
	    z = GetPRF(x-padx,y); 
	    if (z>thr){
	      sum+=z;
	      sumx+=z*padx;
	    }	
	  };	
	if (sum>kminth)  
	  {
	    ddx = (x-(sumx/sum));
	  }
	else ddx=-1;
	if (TMath::Abs(ddx)<10) 	hPRFDist->SetBinContent(hPRFDist->GetBin(i,j),ddx);
      }
  }

  hPRFDist->SetXTitle("pad direction (cm)");
  hPRFDist->SetYTitle("pad row  direction (cm)");
  hPRFDist->SetTitleOffset(1.5,"X");
  hPRFDist->SetTitleOffset(1.5,"Y");
  return hPRFDist;
}  
  




void AliTPCPRF2D::DrawX(Float_t x1 ,Float_t x2,Float_t y1,Float_t y2, Int_t N)
{ 
  //
  //draw pad response function at interval <x1,x2> at  given y position
  //
  if (N<0) return;
  TCanvas  * c1 = new TCanvas("PRFX","Pad response function",700,900);
  c1->cd();  
  
  TPaveText * comment = new TPaveText(0.05,0.02,0.95,0.20,"NDC");
  comment->SetTextAlign(12);
  comment->SetFillColor(42);
  DrawComment(comment);  
  comment->Draw();
  c1->cd(); 

  TPad * pad2 = new TPad("pPRF","",0.05,0.22,0.95,0.95);
  pad2->Divide(2,(N+1)/2);
  pad2->Draw();
  gStyle->SetOptFit(1);
  gStyle->SetOptStat(1); 
  for (Int_t i=0;i<N;i++){
    char ch[200];
    Float_t y;
    if (N==1) y=y1;
    else y = y1+i*(y2-y1)/Float_t(N-1);
    pad2->cd(i+1);
    TH1F * hPRFc =GenerDrawXHisto(x1, x2,y);
    //sprintf(ch,"PRF at wire position: %2.3f",y);
    snprintf(ch,40,"PRF at wire position: %2.3f",y);
    hPRFc->SetTitle(ch);  
    //sprintf(ch,"PRF %d",i);
    snprintf(ch,15,"PRF %d",i);
    hPRFc->SetName(ch);  
     hPRFc->Fit("gaus");
  }
 
}



void AliTPCPRF2D::DrawPRF(Float_t x1 ,Float_t x2,Float_t y1, Float_t y2, Int_t Nx, Int_t Ny)
{ 
  //
  //
  TCanvas  * c1 = new TCanvas("canPRF","Pad response function",700,900);
  c1->cd();
  TPad * pad2 = new TPad("pad2PRF","",0.05,0.22,0.95,0.95);
  pad2->Draw(); 
  gStyle->SetOptFit(1);
  gStyle->SetOptStat(1); 
  TH2F * hPRFc = GenerDrawHisto(x1, x2, y1, y2, Nx,Ny);   
  pad2->cd();
  hPRFc->Draw("surf");
  c1->cd(); 
  TPaveText * comment = new TPaveText(0.05,0.02,0.95,0.20,"NDC");
  comment->SetTextAlign(12);
  comment->SetFillColor(42);
  DrawComment(comment);  
  comment->Draw();
}

void AliTPCPRF2D::DrawDist(Float_t x1 ,Float_t x2,Float_t y1, Float_t y2, Int_t Nx, Int_t Ny, Float_t thr)
{ 
  //
  //draw distortion of the COG method - for different threshold parameter
  TCanvas  * c1 = new TCanvas("padDistortion","COG distortion",700,900);
  c1->cd();
  TPad * pad1 = new TPad("dist","",0.05,0.55,0.95,0.95,21);
  pad1->Draw();
  TPad * pad2 = new TPad("dist","",0.05,0.22,0.95,0.53,21);
  pad2->Draw();
  gStyle->SetOptFit(1);
  gStyle->SetOptStat(0); 
  
  AliH2F * hPRFDist = GenerDrawDistHisto(x1, x2, y1, y2, Nx,Ny,thr); 
  
  pad1->cd();
  hPRFDist->Draw("surf");
  Float_t distmax =hPRFDist->GetMaximum();
  Float_t distmin =hPRFDist->GetMinimum();
  gStyle->SetOptStat(1); 
  
  TH1F * dist = hPRFDist->GetAmplitudes(distmin,distmax,distmin-1);
  pad2->cd();
  dist->Draw();
  c1->cd(); 
  TPaveText * comment = new TPaveText(0.05,0.02,0.95,0.20,"NDC");
  comment->SetTextAlign(12);
  comment->SetFillColor(42);
  DrawComment(comment);  
  comment->Draw();
}

void AliTPCPRF2D::DrawComment(TPaveText *comment)
{
  //
  //function to write comment to picture 
  
  char s[100];
  //draw comments to picture
  TText * title = comment->AddText("Pad Response Function  parameters:");
  title->SetTextSize(0.03);
  //sprintf(s,"Height of pad:  %2.2f cm",fHeightFull);
  snprintf(s,100,"Height of pad:  %2.2f cm",fHeightFull);
  comment->AddText(s);
  //sprintf(s,"Width pad:  %2.2f cm",fWidth);
  snprintf(s,100,"Width pad:  %2.2f cm",fWidth);
  comment->AddText(s);
  //sprintf(s,"Pad Angle:  %2.2f ",fPadAngle);
  snprintf(s,100,"Pad Angle:  %2.2f ",fPadAngle);
  comment->AddText(s);
  
  if (TMath::Abs(fK)>0.0001){
    //sprintf(s,"Height of one chevron unit h:  %2.2f cm",2*fHeightS);
    snprintf(s,100,"Height of one chevron unit h:  %2.2f cm",2*fHeightS);
    comment->AddText(s);
    //sprintf(s,"Overlap factor:  %2.2f",fK);
    snprintf(s,100,"Overlap factor:  %2.2f",fK);
    comment->AddText(s); 
  }

  if (strncmp(fType,"User",3)==0){
    //sprintf(s,"Charge distribution - user defined function  %s ",fGRF->GetTitle());
    snprintf(s,100,"Charge distribution - user defined function  %s ",fGRF->GetTitle());
    comment->AddText(s);  
    //sprintf(s,"Sigma x of charge distribution: %2.2f ",fOrigSigmaX);
    snprintf(s,100,"Sigma x of charge distribution: %2.2f ",fOrigSigmaX);  
    comment->AddText(s);  
    //sprintf(s,"Sigma y of charge distribution: %2.2f ",fOrigSigmaY);
    snprintf(s,100,"Sigma y of charge distribution: %2.2f ",fOrigSigmaY);
    comment->AddText(s); 
  }
  if (strncmp(fType,"Gauss",3)==0){
    //sprintf(s,"Gauss charge distribution");
    snprintf(s,100,"Gauss charge distribution");
    comment->AddText(s);  
    //sprintf(s,"Sigma x of charge distribution: %2.2f ",fOrigSigmaX);
    snprintf(s,100,"Sigma x of charge distribution: %2.2f ",fOrigSigmaX);
    comment->AddText(s);  
    //sprintf(s,"Sigma y of charge distribution: %2.2f ",fOrigSigmaY);
    snprintf(s,100,"Sigma y of charge distribution: %2.2f ",fOrigSigmaY);
    comment->AddText(s); 
  }
  if (strncmp(fType,"Gati",3)==0){
    //sprintf(s,"Gati charge distribution");
    snprintf(s,100,"Gati charge distribution");
    comment->AddText(s);  
    //sprintf(s,"K3X of Gati : %2.2f ",fK3X);
    snprintf(s,100,"K3X of Gati : %2.2f ",fK3X);
    comment->AddText(s);  
    //sprintf(s,"K3Y of Gati: %2.2f ",fK3Y);
    snprintf(s,100,"K3Y of Gati: %2.2f ",fK3Y);
    comment->AddText(s); 
    //sprintf(s,"Wire to Pad Distance: %2.2f ",fPadDistance);
    snprintf(s,100,"Wire to Pad Distance: %2.2f ",fPadDistance);
    comment->AddText(s); 
  }
  if (strncmp(fType,"Cosh",3)==0){
    //sprintf(s,"Cosh charge distribution");
    snprintf(s,100,"Cosh charge distribution");
    comment->AddText(s);  
    //sprintf(s,"Sigma x of charge distribution: %2.2f ",fOrigSigmaX);
    snprintf(s,100,"Sigma x of charge distribution: %2.2f ",fOrigSigmaX);
    comment->AddText(s);  
    //sprintf(s,"Sigma y of charge distribution: %2.2f ",fOrigSigmaY);
    snprintf(s,100,"Sigma y of charge distribution: %2.2f ",fOrigSigmaY);
    comment->AddText(s); 
  }
  //sprintf(s,"Normalisation: %2.2f ",fKNorm);
  snprintf(s,100,"Normalisation: %2.2f ",fKNorm);
  comment->AddText(s);    
}

 AliTPCPRF2D.cxx:1
 AliTPCPRF2D.cxx:2
 AliTPCPRF2D.cxx:3
 AliTPCPRF2D.cxx:4
 AliTPCPRF2D.cxx:5
 AliTPCPRF2D.cxx:6
 AliTPCPRF2D.cxx:7
 AliTPCPRF2D.cxx:8
 AliTPCPRF2D.cxx:9
 AliTPCPRF2D.cxx:10
 AliTPCPRF2D.cxx:11
 AliTPCPRF2D.cxx:12
 AliTPCPRF2D.cxx:13
 AliTPCPRF2D.cxx:14
 AliTPCPRF2D.cxx:15
 AliTPCPRF2D.cxx:16
 AliTPCPRF2D.cxx:17
 AliTPCPRF2D.cxx:18
 AliTPCPRF2D.cxx:19
 AliTPCPRF2D.cxx:20
 AliTPCPRF2D.cxx:21
 AliTPCPRF2D.cxx:22
 AliTPCPRF2D.cxx:23
 AliTPCPRF2D.cxx:24
 AliTPCPRF2D.cxx:25
 AliTPCPRF2D.cxx:26
 AliTPCPRF2D.cxx:27
 AliTPCPRF2D.cxx:28
 AliTPCPRF2D.cxx:29
 AliTPCPRF2D.cxx:30
 AliTPCPRF2D.cxx:31
 AliTPCPRF2D.cxx:32
 AliTPCPRF2D.cxx:33
 AliTPCPRF2D.cxx:34
 AliTPCPRF2D.cxx:35
 AliTPCPRF2D.cxx:36
 AliTPCPRF2D.cxx:37
 AliTPCPRF2D.cxx:38
 AliTPCPRF2D.cxx:39
 AliTPCPRF2D.cxx:40
 AliTPCPRF2D.cxx:41
 AliTPCPRF2D.cxx:42
 AliTPCPRF2D.cxx:43
 AliTPCPRF2D.cxx:44
 AliTPCPRF2D.cxx:45
 AliTPCPRF2D.cxx:46
 AliTPCPRF2D.cxx:47
 AliTPCPRF2D.cxx:48
 AliTPCPRF2D.cxx:49
 AliTPCPRF2D.cxx:50
 AliTPCPRF2D.cxx:51
 AliTPCPRF2D.cxx:52
 AliTPCPRF2D.cxx:53
 AliTPCPRF2D.cxx:54
 AliTPCPRF2D.cxx:55
 AliTPCPRF2D.cxx:56
 AliTPCPRF2D.cxx:57
 AliTPCPRF2D.cxx:58
 AliTPCPRF2D.cxx:59
 AliTPCPRF2D.cxx:60
 AliTPCPRF2D.cxx:61
 AliTPCPRF2D.cxx:62
 AliTPCPRF2D.cxx:63
 AliTPCPRF2D.cxx:64
 AliTPCPRF2D.cxx:65
 AliTPCPRF2D.cxx:66
 AliTPCPRF2D.cxx:67
 AliTPCPRF2D.cxx:68
 AliTPCPRF2D.cxx:69
 AliTPCPRF2D.cxx:70
 AliTPCPRF2D.cxx:71
 AliTPCPRF2D.cxx:72
 AliTPCPRF2D.cxx:73
 AliTPCPRF2D.cxx:74
 AliTPCPRF2D.cxx:75
 AliTPCPRF2D.cxx:76
 AliTPCPRF2D.cxx:77
 AliTPCPRF2D.cxx:78
 AliTPCPRF2D.cxx:79
 AliTPCPRF2D.cxx:80
 AliTPCPRF2D.cxx:81
 AliTPCPRF2D.cxx:82
 AliTPCPRF2D.cxx:83
 AliTPCPRF2D.cxx:84
 AliTPCPRF2D.cxx:85
 AliTPCPRF2D.cxx:86
 AliTPCPRF2D.cxx:87
 AliTPCPRF2D.cxx:88
 AliTPCPRF2D.cxx:89
 AliTPCPRF2D.cxx:90
 AliTPCPRF2D.cxx:91
 AliTPCPRF2D.cxx:92
 AliTPCPRF2D.cxx:93
 AliTPCPRF2D.cxx:94
 AliTPCPRF2D.cxx:95
 AliTPCPRF2D.cxx:96
 AliTPCPRF2D.cxx:97
 AliTPCPRF2D.cxx:98
 AliTPCPRF2D.cxx:99
 AliTPCPRF2D.cxx:100
 AliTPCPRF2D.cxx:101
 AliTPCPRF2D.cxx:102
 AliTPCPRF2D.cxx:103
 AliTPCPRF2D.cxx:104
 AliTPCPRF2D.cxx:105
 AliTPCPRF2D.cxx:106
 AliTPCPRF2D.cxx:107
 AliTPCPRF2D.cxx:108
 AliTPCPRF2D.cxx:109
 AliTPCPRF2D.cxx:110
 AliTPCPRF2D.cxx:111
 AliTPCPRF2D.cxx:112
 AliTPCPRF2D.cxx:113
 AliTPCPRF2D.cxx:114
 AliTPCPRF2D.cxx:115
 AliTPCPRF2D.cxx:116
 AliTPCPRF2D.cxx:117
 AliTPCPRF2D.cxx:118
 AliTPCPRF2D.cxx:119
 AliTPCPRF2D.cxx:120
 AliTPCPRF2D.cxx:121
 AliTPCPRF2D.cxx:122
 AliTPCPRF2D.cxx:123
 AliTPCPRF2D.cxx:124
 AliTPCPRF2D.cxx:125
 AliTPCPRF2D.cxx:126
 AliTPCPRF2D.cxx:127
 AliTPCPRF2D.cxx:128
 AliTPCPRF2D.cxx:129
 AliTPCPRF2D.cxx:130
 AliTPCPRF2D.cxx:131
 AliTPCPRF2D.cxx:132
 AliTPCPRF2D.cxx:133
 AliTPCPRF2D.cxx:134
 AliTPCPRF2D.cxx:135
 AliTPCPRF2D.cxx:136
 AliTPCPRF2D.cxx:137
 AliTPCPRF2D.cxx:138
 AliTPCPRF2D.cxx:139
 AliTPCPRF2D.cxx:140
 AliTPCPRF2D.cxx:141
 AliTPCPRF2D.cxx:142
 AliTPCPRF2D.cxx:143
 AliTPCPRF2D.cxx:144
 AliTPCPRF2D.cxx:145
 AliTPCPRF2D.cxx:146
 AliTPCPRF2D.cxx:147
 AliTPCPRF2D.cxx:148
 AliTPCPRF2D.cxx:149
 AliTPCPRF2D.cxx:150
 AliTPCPRF2D.cxx:151
 AliTPCPRF2D.cxx:152
 AliTPCPRF2D.cxx:153
 AliTPCPRF2D.cxx:154
 AliTPCPRF2D.cxx:155
 AliTPCPRF2D.cxx:156
 AliTPCPRF2D.cxx:157
 AliTPCPRF2D.cxx:158
 AliTPCPRF2D.cxx:159
 AliTPCPRF2D.cxx:160
 AliTPCPRF2D.cxx:161
 AliTPCPRF2D.cxx:162
 AliTPCPRF2D.cxx:163
 AliTPCPRF2D.cxx:164
 AliTPCPRF2D.cxx:165
 AliTPCPRF2D.cxx:166
 AliTPCPRF2D.cxx:167
 AliTPCPRF2D.cxx:168
 AliTPCPRF2D.cxx:169
 AliTPCPRF2D.cxx:170
 AliTPCPRF2D.cxx:171
 AliTPCPRF2D.cxx:172
 AliTPCPRF2D.cxx:173
 AliTPCPRF2D.cxx:174
 AliTPCPRF2D.cxx:175
 AliTPCPRF2D.cxx:176
 AliTPCPRF2D.cxx:177
 AliTPCPRF2D.cxx:178
 AliTPCPRF2D.cxx:179
 AliTPCPRF2D.cxx:180
 AliTPCPRF2D.cxx:181
 AliTPCPRF2D.cxx:182
 AliTPCPRF2D.cxx:183
 AliTPCPRF2D.cxx:184
 AliTPCPRF2D.cxx:185
 AliTPCPRF2D.cxx:186
 AliTPCPRF2D.cxx:187
 AliTPCPRF2D.cxx:188
 AliTPCPRF2D.cxx:189
 AliTPCPRF2D.cxx:190
 AliTPCPRF2D.cxx:191
 AliTPCPRF2D.cxx:192
 AliTPCPRF2D.cxx:193
 AliTPCPRF2D.cxx:194
 AliTPCPRF2D.cxx:195
 AliTPCPRF2D.cxx:196
 AliTPCPRF2D.cxx:197
 AliTPCPRF2D.cxx:198
 AliTPCPRF2D.cxx:199
 AliTPCPRF2D.cxx:200
 AliTPCPRF2D.cxx:201
 AliTPCPRF2D.cxx:202
 AliTPCPRF2D.cxx:203
 AliTPCPRF2D.cxx:204
 AliTPCPRF2D.cxx:205
 AliTPCPRF2D.cxx:206
 AliTPCPRF2D.cxx:207
 AliTPCPRF2D.cxx:208
 AliTPCPRF2D.cxx:209
 AliTPCPRF2D.cxx:210
 AliTPCPRF2D.cxx:211
 AliTPCPRF2D.cxx:212
 AliTPCPRF2D.cxx:213
 AliTPCPRF2D.cxx:214
 AliTPCPRF2D.cxx:215
 AliTPCPRF2D.cxx:216
 AliTPCPRF2D.cxx:217
 AliTPCPRF2D.cxx:218
 AliTPCPRF2D.cxx:219
 AliTPCPRF2D.cxx:220
 AliTPCPRF2D.cxx:221
 AliTPCPRF2D.cxx:222
 AliTPCPRF2D.cxx:223
 AliTPCPRF2D.cxx:224
 AliTPCPRF2D.cxx:225
 AliTPCPRF2D.cxx:226
 AliTPCPRF2D.cxx:227
 AliTPCPRF2D.cxx:228
 AliTPCPRF2D.cxx:229
 AliTPCPRF2D.cxx:230
 AliTPCPRF2D.cxx:231
 AliTPCPRF2D.cxx:232
 AliTPCPRF2D.cxx:233
 AliTPCPRF2D.cxx:234
 AliTPCPRF2D.cxx:235
 AliTPCPRF2D.cxx:236
 AliTPCPRF2D.cxx:237
 AliTPCPRF2D.cxx:238
 AliTPCPRF2D.cxx:239
 AliTPCPRF2D.cxx:240
 AliTPCPRF2D.cxx:241
 AliTPCPRF2D.cxx:242
 AliTPCPRF2D.cxx:243
 AliTPCPRF2D.cxx:244
 AliTPCPRF2D.cxx:245
 AliTPCPRF2D.cxx:246
 AliTPCPRF2D.cxx:247
 AliTPCPRF2D.cxx:248
 AliTPCPRF2D.cxx:249
 AliTPCPRF2D.cxx:250
 AliTPCPRF2D.cxx:251
 AliTPCPRF2D.cxx:252
 AliTPCPRF2D.cxx:253
 AliTPCPRF2D.cxx:254
 AliTPCPRF2D.cxx:255
 AliTPCPRF2D.cxx:256
 AliTPCPRF2D.cxx:257
 AliTPCPRF2D.cxx:258
 AliTPCPRF2D.cxx:259
 AliTPCPRF2D.cxx:260
 AliTPCPRF2D.cxx:261
 AliTPCPRF2D.cxx:262
 AliTPCPRF2D.cxx:263
 AliTPCPRF2D.cxx:264
 AliTPCPRF2D.cxx:265
 AliTPCPRF2D.cxx:266
 AliTPCPRF2D.cxx:267
 AliTPCPRF2D.cxx:268
 AliTPCPRF2D.cxx:269
 AliTPCPRF2D.cxx:270
 AliTPCPRF2D.cxx:271
 AliTPCPRF2D.cxx:272
 AliTPCPRF2D.cxx:273
 AliTPCPRF2D.cxx:274
 AliTPCPRF2D.cxx:275
 AliTPCPRF2D.cxx:276
 AliTPCPRF2D.cxx:277
 AliTPCPRF2D.cxx:278
 AliTPCPRF2D.cxx:279
 AliTPCPRF2D.cxx:280
 AliTPCPRF2D.cxx:281
 AliTPCPRF2D.cxx:282
 AliTPCPRF2D.cxx:283
 AliTPCPRF2D.cxx:284
 AliTPCPRF2D.cxx:285
 AliTPCPRF2D.cxx:286
 AliTPCPRF2D.cxx:287
 AliTPCPRF2D.cxx:288
 AliTPCPRF2D.cxx:289
 AliTPCPRF2D.cxx:290
 AliTPCPRF2D.cxx:291
 AliTPCPRF2D.cxx:292
 AliTPCPRF2D.cxx:293
 AliTPCPRF2D.cxx:294
 AliTPCPRF2D.cxx:295
 AliTPCPRF2D.cxx:296
 AliTPCPRF2D.cxx:297
 AliTPCPRF2D.cxx:298
 AliTPCPRF2D.cxx:299
 AliTPCPRF2D.cxx:300
 AliTPCPRF2D.cxx:301
 AliTPCPRF2D.cxx:302
 AliTPCPRF2D.cxx:303
 AliTPCPRF2D.cxx:304
 AliTPCPRF2D.cxx:305
 AliTPCPRF2D.cxx:306
 AliTPCPRF2D.cxx:307
 AliTPCPRF2D.cxx:308
 AliTPCPRF2D.cxx:309
 AliTPCPRF2D.cxx:310
 AliTPCPRF2D.cxx:311
 AliTPCPRF2D.cxx:312
 AliTPCPRF2D.cxx:313
 AliTPCPRF2D.cxx:314
 AliTPCPRF2D.cxx:315
 AliTPCPRF2D.cxx:316
 AliTPCPRF2D.cxx:317
 AliTPCPRF2D.cxx:318
 AliTPCPRF2D.cxx:319
 AliTPCPRF2D.cxx:320
 AliTPCPRF2D.cxx:321
 AliTPCPRF2D.cxx:322
 AliTPCPRF2D.cxx:323
 AliTPCPRF2D.cxx:324
 AliTPCPRF2D.cxx:325
 AliTPCPRF2D.cxx:326
 AliTPCPRF2D.cxx:327
 AliTPCPRF2D.cxx:328
 AliTPCPRF2D.cxx:329
 AliTPCPRF2D.cxx:330
 AliTPCPRF2D.cxx:331
 AliTPCPRF2D.cxx:332
 AliTPCPRF2D.cxx:333
 AliTPCPRF2D.cxx:334
 AliTPCPRF2D.cxx:335
 AliTPCPRF2D.cxx:336
 AliTPCPRF2D.cxx:337
 AliTPCPRF2D.cxx:338
 AliTPCPRF2D.cxx:339
 AliTPCPRF2D.cxx:340
 AliTPCPRF2D.cxx:341
 AliTPCPRF2D.cxx:342
 AliTPCPRF2D.cxx:343
 AliTPCPRF2D.cxx:344
 AliTPCPRF2D.cxx:345
 AliTPCPRF2D.cxx:346
 AliTPCPRF2D.cxx:347
 AliTPCPRF2D.cxx:348
 AliTPCPRF2D.cxx:349
 AliTPCPRF2D.cxx:350
 AliTPCPRF2D.cxx:351
 AliTPCPRF2D.cxx:352
 AliTPCPRF2D.cxx:353
 AliTPCPRF2D.cxx:354
 AliTPCPRF2D.cxx:355
 AliTPCPRF2D.cxx:356
 AliTPCPRF2D.cxx:357
 AliTPCPRF2D.cxx:358
 AliTPCPRF2D.cxx:359
 AliTPCPRF2D.cxx:360
 AliTPCPRF2D.cxx:361
 AliTPCPRF2D.cxx:362
 AliTPCPRF2D.cxx:363
 AliTPCPRF2D.cxx:364
 AliTPCPRF2D.cxx:365
 AliTPCPRF2D.cxx:366
 AliTPCPRF2D.cxx:367
 AliTPCPRF2D.cxx:368
 AliTPCPRF2D.cxx:369
 AliTPCPRF2D.cxx:370
 AliTPCPRF2D.cxx:371
 AliTPCPRF2D.cxx:372
 AliTPCPRF2D.cxx:373
 AliTPCPRF2D.cxx:374
 AliTPCPRF2D.cxx:375
 AliTPCPRF2D.cxx:376
 AliTPCPRF2D.cxx:377
 AliTPCPRF2D.cxx:378
 AliTPCPRF2D.cxx:379
 AliTPCPRF2D.cxx:380
 AliTPCPRF2D.cxx:381
 AliTPCPRF2D.cxx:382
 AliTPCPRF2D.cxx:383
 AliTPCPRF2D.cxx:384
 AliTPCPRF2D.cxx:385
 AliTPCPRF2D.cxx:386
 AliTPCPRF2D.cxx:387
 AliTPCPRF2D.cxx:388
 AliTPCPRF2D.cxx:389
 AliTPCPRF2D.cxx:390
 AliTPCPRF2D.cxx:391
 AliTPCPRF2D.cxx:392
 AliTPCPRF2D.cxx:393
 AliTPCPRF2D.cxx:394
 AliTPCPRF2D.cxx:395
 AliTPCPRF2D.cxx:396
 AliTPCPRF2D.cxx:397
 AliTPCPRF2D.cxx:398
 AliTPCPRF2D.cxx:399
 AliTPCPRF2D.cxx:400
 AliTPCPRF2D.cxx:401
 AliTPCPRF2D.cxx:402
 AliTPCPRF2D.cxx:403
 AliTPCPRF2D.cxx:404
 AliTPCPRF2D.cxx:405
 AliTPCPRF2D.cxx:406
 AliTPCPRF2D.cxx:407
 AliTPCPRF2D.cxx:408
 AliTPCPRF2D.cxx:409
 AliTPCPRF2D.cxx:410
 AliTPCPRF2D.cxx:411
 AliTPCPRF2D.cxx:412
 AliTPCPRF2D.cxx:413
 AliTPCPRF2D.cxx:414
 AliTPCPRF2D.cxx:415
 AliTPCPRF2D.cxx:416
 AliTPCPRF2D.cxx:417
 AliTPCPRF2D.cxx:418
 AliTPCPRF2D.cxx:419
 AliTPCPRF2D.cxx:420
 AliTPCPRF2D.cxx:421
 AliTPCPRF2D.cxx:422
 AliTPCPRF2D.cxx:423
 AliTPCPRF2D.cxx:424
 AliTPCPRF2D.cxx:425
 AliTPCPRF2D.cxx:426
 AliTPCPRF2D.cxx:427
 AliTPCPRF2D.cxx:428
 AliTPCPRF2D.cxx:429
 AliTPCPRF2D.cxx:430
 AliTPCPRF2D.cxx:431
 AliTPCPRF2D.cxx:432
 AliTPCPRF2D.cxx:433
 AliTPCPRF2D.cxx:434
 AliTPCPRF2D.cxx:435
 AliTPCPRF2D.cxx:436
 AliTPCPRF2D.cxx:437
 AliTPCPRF2D.cxx:438
 AliTPCPRF2D.cxx:439
 AliTPCPRF2D.cxx:440
 AliTPCPRF2D.cxx:441
 AliTPCPRF2D.cxx:442
 AliTPCPRF2D.cxx:443
 AliTPCPRF2D.cxx:444
 AliTPCPRF2D.cxx:445
 AliTPCPRF2D.cxx:446
 AliTPCPRF2D.cxx:447
 AliTPCPRF2D.cxx:448
 AliTPCPRF2D.cxx:449
 AliTPCPRF2D.cxx:450
 AliTPCPRF2D.cxx:451
 AliTPCPRF2D.cxx:452
 AliTPCPRF2D.cxx:453
 AliTPCPRF2D.cxx:454
 AliTPCPRF2D.cxx:455
 AliTPCPRF2D.cxx:456
 AliTPCPRF2D.cxx:457
 AliTPCPRF2D.cxx:458
 AliTPCPRF2D.cxx:459
 AliTPCPRF2D.cxx:460
 AliTPCPRF2D.cxx:461
 AliTPCPRF2D.cxx:462
 AliTPCPRF2D.cxx:463
 AliTPCPRF2D.cxx:464
 AliTPCPRF2D.cxx:465
 AliTPCPRF2D.cxx:466
 AliTPCPRF2D.cxx:467
 AliTPCPRF2D.cxx:468
 AliTPCPRF2D.cxx:469
 AliTPCPRF2D.cxx:470
 AliTPCPRF2D.cxx:471
 AliTPCPRF2D.cxx:472
 AliTPCPRF2D.cxx:473
 AliTPCPRF2D.cxx:474
 AliTPCPRF2D.cxx:475
 AliTPCPRF2D.cxx:476
 AliTPCPRF2D.cxx:477
 AliTPCPRF2D.cxx:478
 AliTPCPRF2D.cxx:479
 AliTPCPRF2D.cxx:480
 AliTPCPRF2D.cxx:481
 AliTPCPRF2D.cxx:482
 AliTPCPRF2D.cxx:483
 AliTPCPRF2D.cxx:484
 AliTPCPRF2D.cxx:485
 AliTPCPRF2D.cxx:486
 AliTPCPRF2D.cxx:487
 AliTPCPRF2D.cxx:488
 AliTPCPRF2D.cxx:489
 AliTPCPRF2D.cxx:490
 AliTPCPRF2D.cxx:491
 AliTPCPRF2D.cxx:492
 AliTPCPRF2D.cxx:493
 AliTPCPRF2D.cxx:494
 AliTPCPRF2D.cxx:495
 AliTPCPRF2D.cxx:496
 AliTPCPRF2D.cxx:497
 AliTPCPRF2D.cxx:498
 AliTPCPRF2D.cxx:499
 AliTPCPRF2D.cxx:500
 AliTPCPRF2D.cxx:501
 AliTPCPRF2D.cxx:502
 AliTPCPRF2D.cxx:503
 AliTPCPRF2D.cxx:504
 AliTPCPRF2D.cxx:505
 AliTPCPRF2D.cxx:506
 AliTPCPRF2D.cxx:507
 AliTPCPRF2D.cxx:508
 AliTPCPRF2D.cxx:509
 AliTPCPRF2D.cxx:510
 AliTPCPRF2D.cxx:511
 AliTPCPRF2D.cxx:512
 AliTPCPRF2D.cxx:513
 AliTPCPRF2D.cxx:514
 AliTPCPRF2D.cxx:515
 AliTPCPRF2D.cxx:516
 AliTPCPRF2D.cxx:517
 AliTPCPRF2D.cxx:518
 AliTPCPRF2D.cxx:519
 AliTPCPRF2D.cxx:520
 AliTPCPRF2D.cxx:521
 AliTPCPRF2D.cxx:522
 AliTPCPRF2D.cxx:523
 AliTPCPRF2D.cxx:524
 AliTPCPRF2D.cxx:525
 AliTPCPRF2D.cxx:526
 AliTPCPRF2D.cxx:527
 AliTPCPRF2D.cxx:528
 AliTPCPRF2D.cxx:529
 AliTPCPRF2D.cxx:530
 AliTPCPRF2D.cxx:531
 AliTPCPRF2D.cxx:532
 AliTPCPRF2D.cxx:533
 AliTPCPRF2D.cxx:534
 AliTPCPRF2D.cxx:535
 AliTPCPRF2D.cxx:536
 AliTPCPRF2D.cxx:537
 AliTPCPRF2D.cxx:538
 AliTPCPRF2D.cxx:539
 AliTPCPRF2D.cxx:540
 AliTPCPRF2D.cxx:541
 AliTPCPRF2D.cxx:542
 AliTPCPRF2D.cxx:543
 AliTPCPRF2D.cxx:544
 AliTPCPRF2D.cxx:545
 AliTPCPRF2D.cxx:546
 AliTPCPRF2D.cxx:547
 AliTPCPRF2D.cxx:548
 AliTPCPRF2D.cxx:549
 AliTPCPRF2D.cxx:550
 AliTPCPRF2D.cxx:551
 AliTPCPRF2D.cxx:552
 AliTPCPRF2D.cxx:553
 AliTPCPRF2D.cxx:554
 AliTPCPRF2D.cxx:555
 AliTPCPRF2D.cxx:556
 AliTPCPRF2D.cxx:557
 AliTPCPRF2D.cxx:558
 AliTPCPRF2D.cxx:559
 AliTPCPRF2D.cxx:560
 AliTPCPRF2D.cxx:561
 AliTPCPRF2D.cxx:562
 AliTPCPRF2D.cxx:563
 AliTPCPRF2D.cxx:564
 AliTPCPRF2D.cxx:565
 AliTPCPRF2D.cxx:566
 AliTPCPRF2D.cxx:567
 AliTPCPRF2D.cxx:568
 AliTPCPRF2D.cxx:569
 AliTPCPRF2D.cxx:570
 AliTPCPRF2D.cxx:571
 AliTPCPRF2D.cxx:572
 AliTPCPRF2D.cxx:573
 AliTPCPRF2D.cxx:574
 AliTPCPRF2D.cxx:575
 AliTPCPRF2D.cxx:576
 AliTPCPRF2D.cxx:577
 AliTPCPRF2D.cxx:578
 AliTPCPRF2D.cxx:579
 AliTPCPRF2D.cxx:580
 AliTPCPRF2D.cxx:581
 AliTPCPRF2D.cxx:582
 AliTPCPRF2D.cxx:583
 AliTPCPRF2D.cxx:584
 AliTPCPRF2D.cxx:585
 AliTPCPRF2D.cxx:586
 AliTPCPRF2D.cxx:587
 AliTPCPRF2D.cxx:588
 AliTPCPRF2D.cxx:589
 AliTPCPRF2D.cxx:590
 AliTPCPRF2D.cxx:591
 AliTPCPRF2D.cxx:592
 AliTPCPRF2D.cxx:593
 AliTPCPRF2D.cxx:594
 AliTPCPRF2D.cxx:595
 AliTPCPRF2D.cxx:596
 AliTPCPRF2D.cxx:597
 AliTPCPRF2D.cxx:598
 AliTPCPRF2D.cxx:599
 AliTPCPRF2D.cxx:600
 AliTPCPRF2D.cxx:601
 AliTPCPRF2D.cxx:602
 AliTPCPRF2D.cxx:603
 AliTPCPRF2D.cxx:604
 AliTPCPRF2D.cxx:605
 AliTPCPRF2D.cxx:606
 AliTPCPRF2D.cxx:607
 AliTPCPRF2D.cxx:608
 AliTPCPRF2D.cxx:609
 AliTPCPRF2D.cxx:610
 AliTPCPRF2D.cxx:611
 AliTPCPRF2D.cxx:612
 AliTPCPRF2D.cxx:613
 AliTPCPRF2D.cxx:614
 AliTPCPRF2D.cxx:615
 AliTPCPRF2D.cxx:616
 AliTPCPRF2D.cxx:617
 AliTPCPRF2D.cxx:618
 AliTPCPRF2D.cxx:619
 AliTPCPRF2D.cxx:620
 AliTPCPRF2D.cxx:621
 AliTPCPRF2D.cxx:622
 AliTPCPRF2D.cxx:623
 AliTPCPRF2D.cxx:624
 AliTPCPRF2D.cxx:625
 AliTPCPRF2D.cxx:626
 AliTPCPRF2D.cxx:627
 AliTPCPRF2D.cxx:628
 AliTPCPRF2D.cxx:629
 AliTPCPRF2D.cxx:630
 AliTPCPRF2D.cxx:631
 AliTPCPRF2D.cxx:632
 AliTPCPRF2D.cxx:633
 AliTPCPRF2D.cxx:634
 AliTPCPRF2D.cxx:635
 AliTPCPRF2D.cxx:636
 AliTPCPRF2D.cxx:637
 AliTPCPRF2D.cxx:638
 AliTPCPRF2D.cxx:639
 AliTPCPRF2D.cxx:640
 AliTPCPRF2D.cxx:641
 AliTPCPRF2D.cxx:642
 AliTPCPRF2D.cxx:643
 AliTPCPRF2D.cxx:644
 AliTPCPRF2D.cxx:645
 AliTPCPRF2D.cxx:646
 AliTPCPRF2D.cxx:647
 AliTPCPRF2D.cxx:648
 AliTPCPRF2D.cxx:649
 AliTPCPRF2D.cxx:650
 AliTPCPRF2D.cxx:651
 AliTPCPRF2D.cxx:652
 AliTPCPRF2D.cxx:653
 AliTPCPRF2D.cxx:654
 AliTPCPRF2D.cxx:655
 AliTPCPRF2D.cxx:656
 AliTPCPRF2D.cxx:657
 AliTPCPRF2D.cxx:658
 AliTPCPRF2D.cxx:659
 AliTPCPRF2D.cxx:660
 AliTPCPRF2D.cxx:661
 AliTPCPRF2D.cxx:662
 AliTPCPRF2D.cxx:663
 AliTPCPRF2D.cxx:664
 AliTPCPRF2D.cxx:665
 AliTPCPRF2D.cxx:666
 AliTPCPRF2D.cxx:667
 AliTPCPRF2D.cxx:668
 AliTPCPRF2D.cxx:669
 AliTPCPRF2D.cxx:670
 AliTPCPRF2D.cxx:671
 AliTPCPRF2D.cxx:672
 AliTPCPRF2D.cxx:673
 AliTPCPRF2D.cxx:674
 AliTPCPRF2D.cxx:675
 AliTPCPRF2D.cxx:676
 AliTPCPRF2D.cxx:677
 AliTPCPRF2D.cxx:678
 AliTPCPRF2D.cxx:679
 AliTPCPRF2D.cxx:680
 AliTPCPRF2D.cxx:681
 AliTPCPRF2D.cxx:682
 AliTPCPRF2D.cxx:683
 AliTPCPRF2D.cxx:684
 AliTPCPRF2D.cxx:685
 AliTPCPRF2D.cxx:686
 AliTPCPRF2D.cxx:687
 AliTPCPRF2D.cxx:688
 AliTPCPRF2D.cxx:689
 AliTPCPRF2D.cxx:690
 AliTPCPRF2D.cxx:691
 AliTPCPRF2D.cxx:692
 AliTPCPRF2D.cxx:693
 AliTPCPRF2D.cxx:694
 AliTPCPRF2D.cxx:695
 AliTPCPRF2D.cxx:696
 AliTPCPRF2D.cxx:697
 AliTPCPRF2D.cxx:698
 AliTPCPRF2D.cxx:699
 AliTPCPRF2D.cxx:700
 AliTPCPRF2D.cxx:701
 AliTPCPRF2D.cxx:702
 AliTPCPRF2D.cxx:703
 AliTPCPRF2D.cxx:704
 AliTPCPRF2D.cxx:705
 AliTPCPRF2D.cxx:706
 AliTPCPRF2D.cxx:707
 AliTPCPRF2D.cxx:708
 AliTPCPRF2D.cxx:709
 AliTPCPRF2D.cxx:710
 AliTPCPRF2D.cxx:711
 AliTPCPRF2D.cxx:712
 AliTPCPRF2D.cxx:713
 AliTPCPRF2D.cxx:714
 AliTPCPRF2D.cxx:715
 AliTPCPRF2D.cxx:716
 AliTPCPRF2D.cxx:717
 AliTPCPRF2D.cxx:718
 AliTPCPRF2D.cxx:719
 AliTPCPRF2D.cxx:720
 AliTPCPRF2D.cxx:721
 AliTPCPRF2D.cxx:722
 AliTPCPRF2D.cxx:723
 AliTPCPRF2D.cxx:724
 AliTPCPRF2D.cxx:725
 AliTPCPRF2D.cxx:726
 AliTPCPRF2D.cxx:727
 AliTPCPRF2D.cxx:728
 AliTPCPRF2D.cxx:729
 AliTPCPRF2D.cxx:730
 AliTPCPRF2D.cxx:731
 AliTPCPRF2D.cxx:732
 AliTPCPRF2D.cxx:733
 AliTPCPRF2D.cxx:734
 AliTPCPRF2D.cxx:735
 AliTPCPRF2D.cxx:736
 AliTPCPRF2D.cxx:737
 AliTPCPRF2D.cxx:738
 AliTPCPRF2D.cxx:739
 AliTPCPRF2D.cxx:740
 AliTPCPRF2D.cxx:741
 AliTPCPRF2D.cxx:742
 AliTPCPRF2D.cxx:743
 AliTPCPRF2D.cxx:744
 AliTPCPRF2D.cxx:745
 AliTPCPRF2D.cxx:746
 AliTPCPRF2D.cxx:747
 AliTPCPRF2D.cxx:748
 AliTPCPRF2D.cxx:749
 AliTPCPRF2D.cxx:750
 AliTPCPRF2D.cxx:751
 AliTPCPRF2D.cxx:752
 AliTPCPRF2D.cxx:753
 AliTPCPRF2D.cxx:754
 AliTPCPRF2D.cxx:755
 AliTPCPRF2D.cxx:756
 AliTPCPRF2D.cxx:757
 AliTPCPRF2D.cxx:758
 AliTPCPRF2D.cxx:759
 AliTPCPRF2D.cxx:760
 AliTPCPRF2D.cxx:761
 AliTPCPRF2D.cxx:762
 AliTPCPRF2D.cxx:763
 AliTPCPRF2D.cxx:764
 AliTPCPRF2D.cxx:765
 AliTPCPRF2D.cxx:766
 AliTPCPRF2D.cxx:767
 AliTPCPRF2D.cxx:768
 AliTPCPRF2D.cxx:769
 AliTPCPRF2D.cxx:770
 AliTPCPRF2D.cxx:771
 AliTPCPRF2D.cxx:772
 AliTPCPRF2D.cxx:773
 AliTPCPRF2D.cxx:774
 AliTPCPRF2D.cxx:775
 AliTPCPRF2D.cxx:776
 AliTPCPRF2D.cxx:777
 AliTPCPRF2D.cxx:778
 AliTPCPRF2D.cxx:779
 AliTPCPRF2D.cxx:780
 AliTPCPRF2D.cxx:781
 AliTPCPRF2D.cxx:782
 AliTPCPRF2D.cxx:783
 AliTPCPRF2D.cxx:784
 AliTPCPRF2D.cxx:785
 AliTPCPRF2D.cxx:786
 AliTPCPRF2D.cxx:787
 AliTPCPRF2D.cxx:788
 AliTPCPRF2D.cxx:789
 AliTPCPRF2D.cxx:790
 AliTPCPRF2D.cxx:791
 AliTPCPRF2D.cxx:792
 AliTPCPRF2D.cxx:793
 AliTPCPRF2D.cxx:794
 AliTPCPRF2D.cxx:795
 AliTPCPRF2D.cxx:796
 AliTPCPRF2D.cxx:797
 AliTPCPRF2D.cxx:798
 AliTPCPRF2D.cxx:799
 AliTPCPRF2D.cxx:800
 AliTPCPRF2D.cxx:801
 AliTPCPRF2D.cxx:802
 AliTPCPRF2D.cxx:803
 AliTPCPRF2D.cxx:804
 AliTPCPRF2D.cxx:805
 AliTPCPRF2D.cxx:806
 AliTPCPRF2D.cxx:807
 AliTPCPRF2D.cxx:808
 AliTPCPRF2D.cxx:809
 AliTPCPRF2D.cxx:810
 AliTPCPRF2D.cxx:811
 AliTPCPRF2D.cxx:812
 AliTPCPRF2D.cxx:813
 AliTPCPRF2D.cxx:814
 AliTPCPRF2D.cxx:815
 AliTPCPRF2D.cxx:816
 AliTPCPRF2D.cxx:817
 AliTPCPRF2D.cxx:818
 AliTPCPRF2D.cxx:819
 AliTPCPRF2D.cxx:820
 AliTPCPRF2D.cxx:821
 AliTPCPRF2D.cxx:822
 AliTPCPRF2D.cxx:823
 AliTPCPRF2D.cxx:824
 AliTPCPRF2D.cxx:825
 AliTPCPRF2D.cxx:826
 AliTPCPRF2D.cxx:827
 AliTPCPRF2D.cxx:828
 AliTPCPRF2D.cxx:829
 AliTPCPRF2D.cxx:830
 AliTPCPRF2D.cxx:831
 AliTPCPRF2D.cxx:832
 AliTPCPRF2D.cxx:833
 AliTPCPRF2D.cxx:834
 AliTPCPRF2D.cxx:835
 AliTPCPRF2D.cxx:836
 AliTPCPRF2D.cxx:837
 AliTPCPRF2D.cxx:838
 AliTPCPRF2D.cxx:839
 AliTPCPRF2D.cxx:840
 AliTPCPRF2D.cxx:841
 AliTPCPRF2D.cxx:842
 AliTPCPRF2D.cxx:843
 AliTPCPRF2D.cxx:844
 AliTPCPRF2D.cxx:845
 AliTPCPRF2D.cxx:846
 AliTPCPRF2D.cxx:847
 AliTPCPRF2D.cxx:848
 AliTPCPRF2D.cxx:849
 AliTPCPRF2D.cxx:850
 AliTPCPRF2D.cxx:851
 AliTPCPRF2D.cxx:852
 AliTPCPRF2D.cxx:853
 AliTPCPRF2D.cxx:854
 AliTPCPRF2D.cxx:855
 AliTPCPRF2D.cxx:856
 AliTPCPRF2D.cxx:857
 AliTPCPRF2D.cxx:858
 AliTPCPRF2D.cxx:859
 AliTPCPRF2D.cxx:860
 AliTPCPRF2D.cxx:861
 AliTPCPRF2D.cxx:862
 AliTPCPRF2D.cxx:863
 AliTPCPRF2D.cxx:864
 AliTPCPRF2D.cxx:865
 AliTPCPRF2D.cxx:866
 AliTPCPRF2D.cxx:867
 AliTPCPRF2D.cxx:868
 AliTPCPRF2D.cxx:869
 AliTPCPRF2D.cxx:870
 AliTPCPRF2D.cxx:871
 AliTPCPRF2D.cxx:872
 AliTPCPRF2D.cxx:873
 AliTPCPRF2D.cxx:874
 AliTPCPRF2D.cxx:875
 AliTPCPRF2D.cxx:876
 AliTPCPRF2D.cxx:877
 AliTPCPRF2D.cxx:878
 AliTPCPRF2D.cxx:879
 AliTPCPRF2D.cxx:880
 AliTPCPRF2D.cxx:881
 AliTPCPRF2D.cxx:882
 AliTPCPRF2D.cxx:883
 AliTPCPRF2D.cxx:884
 AliTPCPRF2D.cxx:885
 AliTPCPRF2D.cxx:886
 AliTPCPRF2D.cxx:887
 AliTPCPRF2D.cxx:888
 AliTPCPRF2D.cxx:889
 AliTPCPRF2D.cxx:890
 AliTPCPRF2D.cxx:891
 AliTPCPRF2D.cxx:892
 AliTPCPRF2D.cxx:893
 AliTPCPRF2D.cxx:894
 AliTPCPRF2D.cxx:895
 AliTPCPRF2D.cxx:896
 AliTPCPRF2D.cxx:897
 AliTPCPRF2D.cxx:898
 AliTPCPRF2D.cxx:899
 AliTPCPRF2D.cxx:900
 AliTPCPRF2D.cxx:901
 AliTPCPRF2D.cxx:902
 AliTPCPRF2D.cxx:903
 AliTPCPRF2D.cxx:904
 AliTPCPRF2D.cxx:905
 AliTPCPRF2D.cxx:906
 AliTPCPRF2D.cxx:907
 AliTPCPRF2D.cxx:908
 AliTPCPRF2D.cxx:909
 AliTPCPRF2D.cxx:910
 AliTPCPRF2D.cxx:911
 AliTPCPRF2D.cxx:912
 AliTPCPRF2D.cxx:913
 AliTPCPRF2D.cxx:914
 AliTPCPRF2D.cxx:915
 AliTPCPRF2D.cxx:916
 AliTPCPRF2D.cxx:917
 AliTPCPRF2D.cxx:918
 AliTPCPRF2D.cxx:919
 AliTPCPRF2D.cxx:920
 AliTPCPRF2D.cxx:921
 AliTPCPRF2D.cxx:922
 AliTPCPRF2D.cxx:923
 AliTPCPRF2D.cxx:924
 AliTPCPRF2D.cxx:925
 AliTPCPRF2D.cxx:926
 AliTPCPRF2D.cxx:927
 AliTPCPRF2D.cxx:928
 AliTPCPRF2D.cxx:929
 AliTPCPRF2D.cxx:930
 AliTPCPRF2D.cxx:931
 AliTPCPRF2D.cxx:932
 AliTPCPRF2D.cxx:933
 AliTPCPRF2D.cxx:934
 AliTPCPRF2D.cxx:935
 AliTPCPRF2D.cxx:936
 AliTPCPRF2D.cxx:937
 AliTPCPRF2D.cxx:938
 AliTPCPRF2D.cxx:939
 AliTPCPRF2D.cxx:940
 AliTPCPRF2D.cxx:941
 AliTPCPRF2D.cxx:942
 AliTPCPRF2D.cxx:943
 AliTPCPRF2D.cxx:944
 AliTPCPRF2D.cxx:945
 AliTPCPRF2D.cxx:946
 AliTPCPRF2D.cxx:947
 AliTPCPRF2D.cxx:948
 AliTPCPRF2D.cxx:949
 AliTPCPRF2D.cxx:950
 AliTPCPRF2D.cxx:951
 AliTPCPRF2D.cxx:952
 AliTPCPRF2D.cxx:953
 AliTPCPRF2D.cxx:954
 AliTPCPRF2D.cxx:955
 AliTPCPRF2D.cxx:956
 AliTPCPRF2D.cxx:957
 AliTPCPRF2D.cxx:958
 AliTPCPRF2D.cxx:959
 AliTPCPRF2D.cxx:960
 AliTPCPRF2D.cxx:961
 AliTPCPRF2D.cxx:962
 AliTPCPRF2D.cxx:963
 AliTPCPRF2D.cxx:964
 AliTPCPRF2D.cxx:965
 AliTPCPRF2D.cxx:966
 AliTPCPRF2D.cxx:967
 AliTPCPRF2D.cxx:968
 AliTPCPRF2D.cxx:969
 AliTPCPRF2D.cxx:970
 AliTPCPRF2D.cxx:971
 AliTPCPRF2D.cxx:972
 AliTPCPRF2D.cxx:973
 AliTPCPRF2D.cxx:974
 AliTPCPRF2D.cxx:975
 AliTPCPRF2D.cxx:976