ROOT logo
#include <TString.h>
#include <TMath.h>
#include "AliITSUSeed.h"
#include "AliLog.h"
#include "AliESDtrack.h"
using namespace TMath;

ClassImp(AliITSUSeed)

//_________________________________________________________________________
AliITSUSeed::AliITSUSeed() 
: fHitsPattern(0)
  ,fNChildren(0)
  ,fClID(0)
  ,fChi2Glo(0)
  ,fChi2Cl(0)
  ,fChi2Penalty(0)
  ,fChi2Match(0)
  ,fChi2ITSSA(0)
  ,fParent(0)
#ifdef _ITSU_TUNING_MODE_ // this is used only for tuning histo filling
  ,fOrdBranch(0) 
  ,fOrdCand(0)
#endif
{
  // def c-tor
  ResetFMatrix();
  for (int i=kNKElem;i--;) fKMatrix[i] = 0.;
  for (int i=kNRElem;i--;) fRMatrix[i] = 0.;
  fResid[0]=0.;
  fResid[1]=0.;  
  fCovIYZ[0]=0.;
  fCovIYZ[1]=0.;
  fCovIYZ[2]=0.;
}

//_________________________________________________________________________
AliITSUSeed::~AliITSUSeed()
{
  // d-tor
}

//_________________________________________________________________________
AliITSUSeed::AliITSUSeed(const AliITSUSeed& src) 
  :AliExternalTrackParam(src)
  ,fHitsPattern(src.fHitsPattern)
  ,fNChildren(src.fNChildren)
  ,fClID(src.fClID)
  ,fChi2Glo(src.fChi2Glo)
  ,fChi2Cl(src.fChi2Cl)
  ,fChi2Penalty(src.fChi2Penalty)
  ,fChi2Match(src.fChi2Match)
  ,fChi2ITSSA(src.fChi2ITSSA)
  ,fParent(src.fParent) 
#ifdef _ITSU_TUNING_MODE_ // this is used only for tuning histo filling
  ,fOrdBranch(src.fOrdBranch) 
  ,fOrdCand(src.fOrdCand)
#endif
{
  // def c-tor
  for (int i=kNFElem;i--;) fFMatrix[i] = src.fFMatrix[i];
  for (int i=kNKElem;i--;) fKMatrix[i] = src.fKMatrix[i];
  for (int i=kNRElem;i--;) fRMatrix[i] = src.fRMatrix[i];
  fResid[0]=src.fResid[0];
  fResid[1]=src.fResid[1];  
  fCovIYZ[0]=src.fCovIYZ[0];
  fCovIYZ[1]=src.fCovIYZ[1];
  fCovIYZ[2]=src.fCovIYZ[2];
  //
}

//_________________________________________________________________________
AliITSUSeed &AliITSUSeed::operator=(const AliITSUSeed& src) 
{
  // def c-tor
  if (this == &src) return *this;
  this->~AliITSUSeed();
  new(this) AliITSUSeed(src);
  return *this;
}

//_________________________________________________________________________
void AliITSUSeed::Print(Option_t* opt) const
{
  // print seed info
  int lr,cl = GetLrCluster(lr);
  printf("%cLr%d Nchild: %3d Cl:%4d Chi2Glo:%7.2f(%7.2f) Chi2Cl:%7.2f Penalty: %7.2f Mtc:%6.3f Bwd:%6.3f",IsKilled() ? '-':' ',
	 lr,GetNChildren(),cl,GetChi2Glo(),GetChi2GloNrm(),GetChi2Cl(), GetChi2Penalty(), GetChi2ITSTPC(), GetChi2ITSSA());
  printf(" |"); 
  int lrc=0;
  const AliITSUSeed *sdc = this;
  while(1) {
    if (lrc<lr) printf(".");
    else {
      sdc = sdc->GetParent(lrc);
      if (!sdc) break;
      printf("%c",sdc->GetClusterID()<0 ? '.': (sdc->IsFake() ? '-':'+')); 
    }
    lrc++;
  }
  printf("|\n");
  TString opts = opt; opts.ToLower();
  if (opts.Contains("etp")) AliExternalTrackParam::Print();
  if (opts.Contains("parent") && GetParent()) GetParent()->Print(opt);
}

//______________________________________________________________________________
void AliITSUSeed::InitFromSeed(const AliExternalTrackParam* seed)
{
  // init seed from ESD track
  TObject::Clear();
  AliExternalTrackParam::operator=(*seed);
  ResetFMatrix();
  fHitsPattern = 0;
  fClID = 0;
  fNChildren = 0;
  fChi2Glo = fChi2Cl = fChi2Penalty = 0;
  fParent = 0; //!!!
}


//______________________________________________________________________________
Float_t AliITSUSeed::GetChi2GloNrm() const
{
  int ndf = 2*GetNLayersHit() - 5;
  return (ndf>0 ? fChi2Glo/ndf : fChi2Glo) + fChi2Penalty;
}


//______________________________________________________________________________
Int_t AliITSUSeed::Compare(const TObject* obj)  const
{
  // compare clusters accodring to specific mode
  const AliITSUSeed* sd = (const AliITSUSeed*)obj;
  const Float_t kTol = 1e-5;
  if (!IsKilled() && sd->IsKilled()) return -1;
  if ( IsKilled() &&!sd->IsKilled()) return  1;
  //
  float chi2This  = GetChi2GloNrm();
  float chi2Other = sd->GetChi2GloNrm();

  if      (chi2This+kTol<chi2Other) return -1;
  else if (chi2This-kTol>chi2Other) return  1;
  return 0;
}

//______________________________________________________________________________
Bool_t AliITSUSeed::IsEqual(const TObject* obj)  const
{
  // compare clusters accodring to specific mode
  const AliITSUSeed* sd = (const AliITSUSeed*)obj;
  const Float_t kTol = 1e-5;
  if (IsKilled() != sd->IsKilled()) return kFALSE;
  return Abs(GetChi2GloNrm() - sd->GetChi2GloNrm())<kTol;
}

//______________________________________________________________________________
Bool_t AliITSUSeed::PropagateToX(Double_t xk, Double_t b) 
{
  // Propagate this track to the plane X=xk (cm) in the field "b" (kG)
  Double_t dx=xk-fX;
  if (TMath::Abs(dx)<=kAlmost0)  return kTRUE;

  Double_t crv=GetC(b);
  if (TMath::Abs(b) < kAlmost0Field) crv=0.;
  Double_t x2r = crv*dx;
  Double_t f1=fP[2], f2=f1 + x2r;
  if (TMath::Abs(f1) >= kAlmost1) return kFALSE;
  if (TMath::Abs(f2) >= kAlmost1) return kFALSE;
  if (TMath::Abs(fP[4])< kAlmost0) return kFALSE;

  Double_t &fP0=fP[0], &fP1=fP[1], &fP2=fP[2], &fP3=fP[3], &fP4=fP[4];
  Double_t 
  &fC00=fC[0],
  &fC10=fC[1],   &fC11=fC[2],  
  &fC20=fC[3],   &fC21=fC[4],   &fC22=fC[5],
  &fC30=fC[6],   &fC31=fC[7],   &fC32=fC[8],   &fC33=fC[9],  
  &fC40=fC[10],  &fC41=fC[11],  &fC42=fC[12],  &fC43=fC[13], &fC44=fC[14];

  Double_t r1=TMath::Sqrt((1.-f1)*(1.+f1)), r2=TMath::Sqrt((1.-f2)*(1.+f2));
  if (TMath::Abs(r1)<kAlmost0)  return kFALSE;
  if (TMath::Abs(r2)<kAlmost0)  return kFALSE;

  fX=xk;
  double dy2dx = (f1+f2)/(r1+r2);
  fP0 += dx*dy2dx;
  if (TMath::Abs(x2r)<0.05) {
    fP1 += dx*(r2 + f2*dy2dx)*fP3;  // Many thanks to P.Hristov !
    fP2 += x2r;
  }
  else { 
    // for small dx/R the linear apporximation of the arc by the segment is OK,
    // but at large dx/R the error is very large and leads to incorrect Z propagation
    // angle traversed delta = 2*asin(dist_start_end / R / 2), hence the arc is: R*deltaPhi
    // The dist_start_end is obtained from sqrt(dx^2+dy^2) = x/(r1+r2)*sqrt(2+f1*f2+r1*r2)
    // Similarly, the rotation angle in linear in dx only for dx<<R
    double chord = dx*TMath::Sqrt(1+dy2dx*dy2dx);   // distance from old position to new one
    double rot = 2*TMath::ASin(0.5*chord*crv); // angular difference seen from the circle center
    fP1 += rot/crv*fP3;
    fP2  = TMath::Sin(rot + TMath::ASin(fP2));
  }

  //f = F - 1
  double r1i = 1./r1;
  double r2i = 1./r2;
  double tg1 = f1*r1i;
  double tg2 = f2*r2i;
  double v0 = 1. + dy2dx*tg2;
  double v1 = (r1i+r2i)*(dy2dx*(tg1+tg2)+2);
  double v2 = (r1i+r2i)*v0;
  //
  double f24 = dx*crv/fP4;
  double f02 = dx*v1;
  double f04 = dx*v2*f24;
  double f12 = dx*fP3*    (f2*v1+dy2dx-tg2);
  double f13 = dx*r2*v0;
  double f14 = dx*f24*fP3*(f2*v2+dy2dx-tg2);
  //
  //b = C*ft
  Double_t b00=f02*fC20 + f04*fC40, b01=f12*fC20 + f14*fC40 + f13*fC30;
  Double_t b02=f24*fC40;
  Double_t b10=f02*fC21 + f04*fC41, b11=f12*fC21 + f14*fC41 + f13*fC31;
  Double_t b12=f24*fC41;
  Double_t b20=f02*fC22 + f04*fC42, b21=f12*fC22 + f14*fC42 + f13*fC32;
  Double_t b22=f24*fC42;
  Double_t b40=f02*fC42 + f04*fC44, b41=f12*fC42 + f14*fC44 + f13*fC43;
  Double_t b42=f24*fC44;
  Double_t b30=f02*fC32 + f04*fC43, b31=f12*fC32 + f14*fC43 + f13*fC33;
  Double_t b32=f24*fC43;
  
  //a = f*b = f*C*ft
  Double_t a00=f02*b20+f04*b40,a01=f02*b21+f04*b41,a02=f02*b22+f04*b42;
  Double_t a11=f12*b21+f14*b41+f13*b31,a12=f12*b22+f14*b42+f13*b32;
  Double_t a22=f24*b42;

  //F*C*Ft = C + (b + bt + a)
  fC00 += b00 + b00 + a00;
  fC10 += b10 + b01 + a01; 
  fC20 += b20 + b02 + a02;
  fC30 += b30;
  fC40 += b40;
  fC11 += b11 + b11 + a11;
  fC21 += b21 + b12 + a12;
  fC31 += b31; 
  fC41 += b41;
  fC22 += b22 + b22 + a22;
  fC32 += b32;
  fC42 += b42;
  //
  // update stored transformation matrix   F = Fnew*Fold
  fFMatrix[kF04] += f04 + f24*fFMatrix[kF02];
  fFMatrix[kF14] += f14 + f24*fFMatrix[kF12];
  fFMatrix[kF02] += f02;
  fFMatrix[kF12] += f12;
  fFMatrix[kF13] += f13;
  fFMatrix[kF24] += f24;
  //
  CheckCovariance();

  return kTRUE;
}

//__________________________________________________________________
Int_t AliITSUSeed::GetClusterIndex(Int_t ind) const
{
  // get ind-th cluster index
  int ncl = 0;
  const AliITSUSeed* seed = this;
  while(seed) {
    if ( seed->HasCluster() && (ncl++==ind) ) return seed->GetLrClusterID();//GetClusterID();
    seed = (AliITSUSeed*)seed->GetParent();
  }
  return -1;
  //
}

//______________________________________________________________________________
Bool_t AliITSUSeed::RotateToAlpha(Double_t alpha) 
{
  // Transform this track to the local coord. system rotated
  // by angle "alpha" (rad) with respect to the global coord. system. 
  //
  if (TMath::Abs(fP[2]) >= kAlmost1) {
     AliError(Form("Precondition is not satisfied: |sin(phi)|>1 ! %f",fP[2])); 
     return kFALSE;
  }
  //
  if      (alpha < -TMath::Pi()) alpha += 2*TMath::Pi();
  else if (alpha >= TMath::Pi()) alpha -= 2*TMath::Pi();
  //
  Double_t &fP0=fP[0];
  Double_t &fP2=fP[2];
  Double_t &fC00=fC[0];
  Double_t &fC10=fC[1];
  Double_t &fC20=fC[3];
  Double_t &fC21=fC[4];
  Double_t &fC22=fC[5];
  Double_t &fC30=fC[6];
  Double_t &fC32=fC[8];
  Double_t &fC40=fC[10];
  Double_t &fC42=fC[12];
  //
  Double_t x=fX;
  Double_t ca=TMath::Cos(alpha-fAlpha), sa=TMath::Sin(alpha-fAlpha);
  Double_t sf=fP2, cf=TMath::Sqrt((1.- fP2)*(1.+fP2)); // Improve precision
  // RS: check if rotation does no invalidate track model (cos(local_phi)>=0, i.e. particle
  // direction in local frame is along the X axis
  if ((cf*ca+sf*sa)<0) {
    AliDebug(1,Form("Rotation failed: local cos(phi) would become %.2f",cf*ca+sf*sa));
    return kFALSE;
  }
  //
  Double_t tmp=sf*ca - cf*sa;

  if (TMath::Abs(tmp) >= kAlmost1) {
     if (TMath::Abs(tmp) > 1.+ Double_t(FLT_EPSILON))  
        AliWarning(Form("Rotation failed ! %.10e",tmp));
     return kFALSE;
  }
  fAlpha = alpha;
  fX =  x*ca + fP0*sa;
  fP0= -x*sa + fP0*ca;
  fP2=  tmp;

  if (TMath::Abs(cf)<kAlmost0) {
    AliError(Form("Too small cosine value %f",cf)); 
    cf = kAlmost0;
  } 

  Double_t rr=(ca+sf/cf*sa);  

  fC00 *= (ca*ca);
  fC10 *= ca;
  fC20 *= ca*rr;
  fC21 *= rr;
  fC22 *= rr*rr;
  fC30 *= ca;
  fC32 *= rr;
  fC40 *= ca;
  fC42 *= rr;
  //
  fRMatrix[kR00] = ca;
  fRMatrix[kR22] = rr; 
  //
  CheckCovariance();

  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliITSUSeed::GetTrackingXAtXAlpha(double xOther, double alpOther, double bz, double &xdst)
{
  // calculate X and Y in the tracking frame of the track, corresponding to other X,Alpha tracking
  double ca=TMath::Cos(alpOther-fAlpha), sa=TMath::Sin(alpOther-fAlpha);
  double &y=fP[0], &sf=fP[2], cf=Sqrt((1.-sf)*(1.+sf));
  double eta = xOther - fX*ca - y*sa;
  double xi  = sf*ca - cf*sa;
  if (Abs(xi)>= kAlmost1) return kFALSE;
  double nu  = xi + GetC(bz)*eta;
  if (Abs(nu)>= kAlmost1) return kFALSE;
  xdst = xOther*ca - sa*( y*ca-fX*sa + eta*(xi+nu)/(Sqrt((1.-xi)*(1.+xi)) + Sqrt((1.-nu)*(1.+nu))) );
  return kTRUE;
}

//____________________________________________________________________
Double_t AliITSUSeed::GetPredictedChi2(Double_t p[2],Double_t cov[3]) 
{
  // Estimate the chi2 of the space point "p" with the cov. matrix "cov"
  // Store info needed for update and smoothing
  Double_t sdd = fC[0] + cov[0]; 
  Double_t sdz = fC[1] + cov[1];
  Double_t szz = fC[2] + cov[2];
  Double_t det = sdd*szz - sdz*sdz;
  if (TMath::Abs(det) < kAlmost0) return kVeryBig;
  det = 1./det;
  fCovIYZ[0] =  szz*det;
  fCovIYZ[1] = -sdz*det;
  fCovIYZ[2] =  sdd*det;
  double &dy = fResid[0] = p[0] - fP[0];
  double &dz = fResid[1] = p[1] - fP[1];
  //
  return dy*(dy*fCovIYZ[0]+dz*fCovIYZ[1]) + dz*(dy*fCovIYZ[1]+dz*(fCovIYZ[2]));
  //
}

//____________________________________________________________________
Bool_t AliITSUSeed::Update() 
{
  // Update the track parameters with the measurement stored during GetPredictedChi2
  //
  Double_t &fP0=fP[0], &fP1=fP[1], &fP2=fP[2], &fP3=fP[3], &fP4=fP[4],
    &fC00=fC[kS00],
    &fC10=fC[kS10],  &fC11=fC[kS11],  
    &fC20=fC[kS20],  &fC21=fC[kS21],  &fC22=fC[kS22],
    &fC30=fC[kS30],  &fC31=fC[kS31],  &fC32=fC[kS32],  &fC33=fC[kS33],  
    &fC40=fC[kS40],  &fC41=fC[kS41],  &fC42=fC[kS42],  &fC43=fC[kS43], &fC44=fC[kS44];
  //
  double &r00=fCovIYZ[0],&r01=fCovIYZ[1],&r11=fCovIYZ[2];
  double &dy=fResid[0], &dz=fResid[1];
  //
  // store info needed for smoothing in the fKMatrix
  double &k00 = fKMatrix[kK00] = fC00*r00+fC10*r01;
  double &k01 = fKMatrix[kK01] = fC00*r01+fC10*r11;
  double &k10 = fKMatrix[kK10] = fC10*r00+fC11*r01;
  double &k11 = fKMatrix[kK11] = fC10*r01+fC11*r11;  
  double &k20 = fKMatrix[kK20] = fC20*r00+fC21*r01;
  double &k21 = fKMatrix[kK21] = fC20*r01+fC21*r11;
  double &k30 = fKMatrix[kK30] = fC30*r00+fC31*r01;
  double &k31 = fKMatrix[kK31] = fC30*r01+fC31*r11;
  double &k40 = fKMatrix[kK40] = fC40*r00+fC41*r01;
  double &k41 = fKMatrix[kK41] = fC40*r01+fC41*r11;
  //
  Double_t sf=fP2 + k20*dy + k21*dz;
  if (TMath::Abs(sf) > kAlmost1) return kFALSE;  
  
  fP0 += k00*dy + k01*dz;
  fP1 += k10*dy + k11*dz;
  fP2  = sf;
  fP3 += k30*dy + k31*dz;
  fP4 += k40*dy + k41*dz;
  //
  Double_t c01=fC10, c02=fC20, c03=fC30, c04=fC40;
  Double_t c12=fC21, c13=fC31, c14=fC41;

  fC00-=k00*fC00+k01*fC10; fC10-=k00*c01+k01*fC11;
  fC20-=k00*c02+k01*c12;   fC30-=k00*c03+k01*c13;
  fC40-=k00*c04+k01*c14; 

  fC11-=k10*c01+k11*fC11;
  fC21-=k10*c02+k11*c12;   fC31-=k10*c03+k11*c13;
  fC41-=k10*c04+k11*c14; 

  fC22-=k20*c02+k21*c12;   fC32-=k20*c03+k21*c13;
  fC42-=k20*c04+k21*c14; 

  fC33-=k30*c03+k31*c13;
  fC43-=k30*c04+k31*c14; 
  
  fC44-=k40*c04+k41*c14; 
  //
  CheckCovariance();
  //
  return kTRUE;
}


//____________________________________________________________________
Bool_t AliITSUSeed::Smooth(Double_t vecL[5],Double_t matL[15]) 
{
  // Prepare MBF smoothing auxiliary params for smoothing at prev. point:
  // \hat{l_N} = 0
  // \hat{L_N} = 0
  // \tilde{l_j} = -H_j^T N_{j}^{-1} z_j + B_{j}^T \hat{l_j}
  // \tilde{L_j} =  H_j^T N_{j}^{-1} H_j + B_j^T \hat{L_j} B_j
  // \hat{l_j} = F_j^T \tilde{l_{j+1}}
  // \hat{L_j} = F_j^T \tilde{L_{j+1}} F_j
  //
  // P_{j/N} = P_{j/j} - P_{j/j} \hat{L_j} P_{j/j}
  // \hat{x_{j/N}} = \hat{x_{j/j}} - P_{j/j} \hat{l_j}
  //
  // N^-1 = fCovIYZ
  // z = fResid
  // B = I - K H
  // H = {{1,0,0,0,0},{0,1,0,0,0}}
  // 
  // calc. \tilde{l_j} 
  //
  if (GetClusterID()<0) return kTRUE;
  //

  double 
    &k00=fKMatrix[kK00],&k01=fKMatrix[kK01],
    &k10=fKMatrix[kK10],&k11=fKMatrix[kK11],
    &k20=fKMatrix[kK20],&k21=fKMatrix[kK21],
    &k30=fKMatrix[kK30],&k31=fKMatrix[kK31],
    &k40=fKMatrix[kK40],&k41=fKMatrix[kK41];
  double 
    &l00=matL[kS00],
    &l10=matL[kS10], &l11=matL[kS11],  
    &l20=matL[kS20], &l21=matL[kS21], &l22=matL[kS22],
    &l30=matL[kS30], &l31=matL[kS31], &l32=matL[kS32], &l33=matL[kS33],  
    &l40=matL[kS40], &l41=matL[kS41], &l42=matL[kS42], &l43=matL[kS43], &l44=matL[kS44];
  //
  // calculate correction
  double corrVec[5]={0},corrMat[15]={0};
  corrVec[0] = fC[kS00]*vecL[0] + fC[kS10]*vecL[1] + fC[kS20]*vecL[2] + fC[kS30]*vecL[3] + fC[kS40]*vecL[4]; 
  corrVec[1] = fC[kS10]*vecL[0] + fC[kS11]*vecL[1] + fC[kS21]*vecL[2] + fC[kS31]*vecL[3] + fC[kS41]*vecL[4]; 
  corrVec[2] = fC[kS20]*vecL[0] + fC[kS21]*vecL[1] + fC[kS22]*vecL[2] + fC[kS32]*vecL[3] + fC[kS42]*vecL[4]; 
  corrVec[3] = fC[kS30]*vecL[0] + fC[kS31]*vecL[1] + fC[kS32]*vecL[2] + fC[kS33]*vecL[3] + fC[kS43]*vecL[4]; 
  corrVec[4] = fC[kS40]*vecL[0] + fC[kS41]*vecL[1] + fC[kS42]*vecL[2] + fC[kS43]*vecL[3] + fC[kS44]*vecL[4]; 
  //
  double *crm = ProdABA(fC,matL);
  for (int i=0;i<15;i++) corrMat[i] = crm[i];

  double vcL0 = vecL[0], vcL1 = vecL[1];
  vecL[0] -= k00*vcL0+k10*vcL1+k20*vecL[2]+k30*vecL[3]+k40*vecL[4] + fCovIYZ[0]*fResid[0] + fCovIYZ[1]*fResid[1];
  vecL[1] -= k01*vcL0+k11*vcL1+k21*vecL[2]+k31*vecL[3]+k41*vecL[4] + fCovIYZ[1]*fResid[0] + fCovIYZ[2]*fResid[1];

  /*
  double vcL0 = vecL[0], vcL1 = vecL[1];
  vecL[0] -= k00*vcL0+k10*vcL1+fKMatrix[kK20]*vecL[2]+k30*vecL[3]+k40*vecL[4] + fCovIYZ[0]*fResid[0] + fCovIYZ[1]*fResid[1];
  vecL[1] -= k01*vcL0+fKMatrix[kK11]*vcL1+k21*vecL[2]+k31*vecL[3]+k41*vecL[4] + fCovIYZ[1]*fResid[0] + fCovIYZ[2]*fResid[1];
  vecL[3] += fFMatrix[kF13]*vecL[1]; 
  vecL[4]  = fFMatrix[kF04]*vecL[0] + fFMatrix[kF14]*vecL[1] + fFMatrix[kF24]*vecL[2] + fFMatrix[kF44]*vecL[4];
  vecL[2] += fFMatrix[kF02]*vecL[0] + fFMatrix[kF12]*vecL[1];
  //
  */
  // and \hat{l_j} in one go

  // L = H^T * sg * H + (I-KH)^T * L * (I - KH)
  double v00 =  k00*l00+k10*l10+k20*l20+k30*l30+k40*l40;
  double v10 =  k00*l10+k10*l11+k20*l21+k30*l31+k40*l41;
  double v20 =  k00*l20+k10*l21+k20*l22+k30*l32+k40*l42;
  double v30 =  k00*l30+k10*l31+k20*l32+k30*l33+k40*l43;
  double v40 =  k00*l40+k10*l41+k20*l42+k30*l43+k40*l44;
  //
  double v01 =  k01*l00+k11*l10+k21*l20+k31*l30+k41*l40;
  double v11 =  k01*l10+k11*l11+k21*l21+k31*l31+k41*l41;
  double v21 =  k01*l20+k11*l21+k21*l22+k31*l32+k41*l42;
  double v31 =  k01*l30+k11*l31+k21*l32+k31*l33+k41*l43;
  double v41 =  k01*l40+k11*l41+k21*l42+k31*l43+k41*l44;
  //
  // (H^T * K^T * L * K * H) - (L * K * H) - (H^T * K^T * L) + (H^T*N^-1*H)
  l00 += k00*v00 + k10*v10 + k20*v20 + k30*v30 + k40*v40 - v00 - v00 + fCovIYZ[0];
  l10 += k01*v00 + k11*v10 + k21*v20 + k31*v30 + k41*v40 - v01 - v10 + fCovIYZ[1];
  l11 += k01*v01 + k11*v11 + k21*v21 + k31*v31 + k41*v41 - v11 - v11 + fCovIYZ[2];
  //
  l20 -= v20;
  l21 -= v21;
  l30 -= v30;
  l31 -= v31;
  l40 -= v40;
  l41 -= v41;
  //
  printf("CorrMt:\n");
  printf("%+e\n%+e %+e\n%+e %+e %+e\n%+e %+e %+e %+e\n%+e %+e %+e %+e %+e\n",
	 corrMat[kS00],corrMat[kS10],corrMat[kS11],corrMat[kS20],corrMat[kS21],corrMat[kS22],
	 corrMat[kS30],corrMat[kS31],corrMat[kS32],corrMat[kS33],
	 corrMat[kS40],corrMat[kS41],corrMat[kS42],corrMat[kS43],corrMat[kS44]);
  
  printf("SMcorr: %+e %+e %+e %+e %+e\n",corrVec[0],corrVec[1],corrVec[2],corrVec[3],corrVec[4]);

  printf("State : "); this->AliExternalTrackParam::Print("");
  //
  printf("\nBefore transport back (RotElems: %+e %+e)\n",fRMatrix[kR00],fRMatrix[kR22]);
  printf("Res: %+e %+e | Err: %+e %+e %+e\n",fResid[0],fResid[1],fCovIYZ[0],fCovIYZ[1],fCovIYZ[2]);
  printf("Lr%d VecL: ",GetLayerID()); for (int i=0;i<5;i++) printf("%+e ",vecL[i]); printf("\n");
  //
  printf("%+e\n%+e %+e\n%+e %+e %+e\n%+e %+e %+e %+e\n%+e %+e %+e %+e %+e\n",
	 matL[kS00],matL[kS10],matL[kS11],matL[kS20],matL[kS21],matL[kS22],
	 matL[kS30],matL[kS31],matL[kS32],matL[kS33],matL[kS40],matL[kS41],matL[kS42],matL[kS43],matL[kS44]);
  //
  printf("F: "); for (int i=0;i<kNFElem;i++) printf("%+e ",fFMatrix[i]); printf("\n");  
  printf("K: "); for (int i=0;i<kNKElem;i++) printf("%+e ",fKMatrix[i]); printf("\n");  
  //
  // apply rotation matrix (diagonal)
  vecL[0] *= fRMatrix[kR00];
  vecL[2] *= fRMatrix[kR22];
  //
  l00 *= fRMatrix[kR00]*fRMatrix[kR00];
  l10 *= fRMatrix[kR00];
  l20 *= fRMatrix[kR22]*fRMatrix[kR00];
  l21 *= fRMatrix[kR22];
  l22 *= fRMatrix[kR22]*fRMatrix[kR22];
  l30 *= fRMatrix[kR00];
  l32 *= fRMatrix[kR22];
  l40 *= fRMatrix[kR00];
  l42 *= fRMatrix[kR22];
  //
  // Apply translation matrix F^T. Note, that fFMatrix keeps non-trivial elems of F-1 = f, except the e-loss coeff f44
  // We need F^T*L* F = L + (L*f) + (L*f)^T + f^T * (L*f)
  //
  double 
    &f02=fFMatrix[kF02],&f04=fFMatrix[kF04],
    &f12=fFMatrix[kF12],&f13=fFMatrix[kF13],&f14=fFMatrix[kF14],
    &f24=fFMatrix[kF24],
    f44 =fFMatrix[kF44];
  //
  vecL[4]  = f04*vecL[0]+f14*vecL[1]+f24*vecL[2]+f44*vecL[4];
  vecL[3] += f13*vecL[1];
  vecL[2] += f02*vecL[0]+f12*vecL[1];
  //
  f44 -= 1.0; // !!!!!
  //
  //b = L*f
  Double_t b02=l00*f02+l10*f12, b03=l10*f13, b04=l00*f04+l10*f14+l20*f24+l40*f44;
  Double_t b12=l10*f02+l11*f12, b13=l11*f13, b14=l10*f04+l11*f14+l21*f24+l41*f44;
  Double_t b22=l20*f02+l21*f12, b23=l21*f13, b24=l20*f04+l21*f14+l22*f24+l42*f44;
  Double_t b32=l30*f02+l31*f12, b33=l31*f13, b34=l30*f04+l31*f14+l32*f24+l43*f44;
  Double_t b42=l40*f02+l41*f12, b43=l41*f13, b44=l40*f04+l41*f14+l42*f24+l44*f44;
  //
  //a = f^T * b = f^T * L * f, profit from symmetry
  Double_t a22=f02*b02+f12*b12, a33=f13*b13, a44=f04*b04+f14*b14+f24*b24+f44*b44,
    a32=f13*b12, //= a23=f02*b03+f12*b13, 
    a42=f02*b04+f12*b14, //f04*b02+f14*b12+f24*b22+f44*b42 = a24
    a43=f13*b14;         //f04*b03+f14*b13+f24*b23+f44*b43 = a34
  //
  // F^T*L* F = L + (b + b^T + a)
  l44 += b44 + b44 + a44;
  l43 += b43 + b34 + a43;
  l42 += b42 + b24 + a42;
  l41 += b14;
  l40 += b04;
  l33 += b33 + b33 + a33;
  l32 += b32 + b23 + a32;
  l31 += b13;
  l30 += b03;
  l22 += b22 + b23 + a22;
  l21 += b12;
  l20 += b02;
  //
  printf("After transport back\n");
  printf("Lr%d VecL: ",GetLayerID()); for (int i=0;i<5;i++) printf("%+e ",vecL[i]); printf("\n");
  //
  printf("%+e\n%+e %+e\n%+e %+e %+e\n%+e %+e %+e %+e\n%+e %+e %+e %+e %+e\n",
	 matL[kS00],matL[kS10],matL[kS11],matL[kS20],matL[kS21],matL[kS22],
	 matL[kS30],matL[kS31],matL[kS32],matL[kS33],matL[kS40],matL[kS41],matL[kS42],matL[kS43],matL[kS44]);

  return kTRUE;
}

//____________________________________________________________________
Double_t* AliITSUSeed::ProdABA(const double a[15],const double b[15]) const
{
  // product of symmetric matrices A*B*A
  //
  const Short_t knd[5][5] = {
    {kS00,kS10,kS20,kS30,kS40},
    {kS10,kS11,kS21,kS31,kS41},
    {kS20,kS21,kS22,kS32,kS42},
    {kS30,kS31,kS32,kS33,kS43},
    {kS40,kS41,kS42,kS43,kS44}
  };
  //
  static double aba[15];
  // 1) ba = B*A
  double ba[5][5];
  for (int i=5;i--;) for (int j=5;j--;) {
      ba[i][j] = 0;
      for (int k=5;k--;) ba[i][j] += b[knd[i][k]]*a[knd[k][j]];
    }
  //
  // 2) A * ba, lower triangle only
  for (int i=5;i--;) for (int j=i+1;j--;) {
      aba[knd[i][j]] = 0;
      for (int k=5;k--;) aba[knd[i][j]] += a[knd[i][k]]*ba[k][j];
    }
  //
  return &aba[0];
}

//____________________________________________________________________
Bool_t AliITSUSeed::ContainsFake() const
{
  // check if the full branch containes a fake cluster
  const AliITSUSeed* seed = this;
  while(seed) {
    if ( seed->IsFake() ) return kTRUE;
    seed = (AliITSUSeed*)seed->GetParent();
  }  
  return kFALSE;
}

//__________________________________________________________________
Int_t AliITSUSeed::FetchClusterInfo(Int_t *clIDarr) const
{
  // fill cl.id's in the array. The clusters of layer L will be set at slots
  // clID[2L] (and clID[2L+1] if there is an extra cluster).
  Int_t lr,ncl=0;
  const AliITSUSeed* seed = this;
  do {
    int clID = seed->GetLrCluster(lr);
    if (clID>=0) {
      lr<<=1;
      clIDarr[ clIDarr[lr]<0 ? lr : lr+1 ] = clID;
      ncl++;
    }
  } while ((seed=(AliITSUSeed*)seed->GetParent()));
  return ncl;
}

/*
//____________________________________________________________________
Bool_t AliITSUSeed::Smooth(Double_t vecL[5],Double_t matL[15]) 
{
  // Prepare MBF smoothing auxiliary params for smoothing at prev. point:
  // \hat{l_N} = 0
  // \hat{L_N} = 0
  // \tilde{l_j} = -H_j^T N_{j}^{-1} z_j + B_{j}^T \hat{l_j}
  // \tilde{L_j} =  H_j^T N_{j}^{-1} H_j + B_j^T \hat{L_j} B_j
  // \hat{l_j} = F_j^T \tilde{l_{j+1}}
  // \hat{L_j} = F_j^T \tilde{L_{j+1}} F_j
  //
  // P_{j/N} = P_{j/j} - P_{j/j} \hat{L_j} P_{j/j}
  // \hat{x_{j/N}} = \hat{x_{j/j}} - P_{j/j} \hat{l_j}
  //
  // N^-1 = fCovIYZ
  // z = fResid
  // B = I - K H
  // H = {{1,0,0,0,0},{0,1,0,0,0}}
  // 
  // calc. \tilde{l_j} and \hat{l_j} in one go
  //
  if (GetClusterID()<0) return kTRUE;
  //
  double 
    &k00=fKMatrix[kK00],&k01=fKMatrix[kK01],
    &k10=fKMatrix[kK10],&k11=fKMatrix[kK11],
    &k20=fKMatrix[kK20],&k21=fKMatrix[kK21],
    &k30=fKMatrix[kK30],&k31=fKMatrix[kK31],
    &k40=fKMatrix[kK40],&k41=fKMatrix[kK41];
  double 
    &matL00=matL[kS00],
    &matL10=matL[kS01],  &matL11=matL[kS11],  
    &matL20=matL[kS20],  &matL21=matL[kS21],  &matL22=matL[kS22],
    &matL30=matL[kS30],  &matL31=matL[kS31],  &matL32=matL[kS32],  &matL33=matL[kS33],  
    &matL40=matL[kS40],  &matL41=matL[kS41],  &matL42=matL[kS42],  &matL43=matL[kS43], &matL44=matL[kS44];
  //
  double vcL0 = vecL[0], vcL1 = vecL[1];
  vecL[0] -= k00*vcL0+k10*vcL1+fKMatrix[kK20]*vecL[2]+k30*vecL[3]+k40*vecL[4] + fCovIYZ[0]*fResid[0] + fCovIYZ[1]*fResid[1];
  vecL[1] -= k01*vcL0+fKMatrix[kK11]*vcL1+k21*vecL[2]+k31*vecL[3]+k41*vecL[4] + fCovIYZ[1]*fResid[0] + fCovIYZ[2]*fResid[1];
  vecL[3] += fFMatrix[kF13]*vecL[1]; 
  vecL[4] =  fFMatrix[kF04]*vecL[0] + fFMatrix[kF14]*vecL[1] + fFMatrix[kF24]*vecL[2] + fFMatrix[kF44]*vecL[4];
  vecL[2] += fFMatrix[kF02]*vecL[0] + fFMatrix[kF12]*vecL[1];
  //

  // L = H^T * sg * H + (I-KH)^T * L * (I - KH)
  double v00 =  k00*matL00+k10*matL10+k20*matL20+k30*matL30+k40*matL40;
  double v10 =  k00*matL10+k10*matL11+k20*matL21+k30*matL31+k40*matL41;
  double v20 =  k00*matL20+k10*matL12+k20*matL22+k30*matL32+k40*matL42;
  double v30 =  k00*matL30+k10*matL13+k20*matL23+k30*matL33+k40*matL43;
  double v40 =  k00*matL40+k10*matL14+k20*matL24+k30*matL34+k40*matL44;
  //
  double v01 =  k01*matL00+k11*matL10+k21*matL20+k31*matL30+k41*matL40;
  double v11 =  k01*matL01+k11*matL11+k21*matL21+k31*matL31+k41*matL41;
  double v21 =  k01*matL02+k11*matL12+k21*matL22+k31*matL32+k41*matL42;
  double v31 =  k01*matL03+k11*matL13+k21*matL23+k31*matL33+k41*matL43;
  double v41 =  k01*matL04+k11*matL14+k21*matL24+k31*matL34+k41*matL44;
  //
  double t00 =  k00*matL00+k10*matL01+k20*matL02+k30*matL03+k40*matL04;
  double t10 =  k00*matL10+k10*matL11+k20*matL12+k30*matL13+k40*matL14;
  double t20 =  k00*matL20+k10*matL21+k20*matL22+k30*matL23+k40*matL24;
  double t30 =  k00*matL30+k10*matL31+k20*matL32+k30*matL33+k40*matL34;
  double t40 =  k00*matL40+k10*matL41+k20*matL42+k30*matL43+k40*matL44;
  //
  double t01 =  k01*matL00+k11*matL01+k21*matL02+k31*matL03+k41*matL04;
  double t11 =  k01*matL10+k11*matL11+k21*matL12+k31*matL13+k41*matL14;
  double t21 =  k01*matL20+k11*matL21+k21*matL22+k31*matL23+k41*matL24;
  double t31 =  k01*matL30+k11*matL31+k21*matL32+k31*matL33+k41*matL34;
  double t41 =  k01*matL40+k11*matL41+k21*matL42+k31*matL43+k41*matL44;
  //
  // (H^T * K^T * L * K * H) - (L * K * H) - (H^T * K^T * L) + (H^T*N^-1*H)
  matL00 += k00*v00+k10*v10+k20*v20*k30*v30+k40*v40 - t00 - v00 + fCovIYZ[0];
  matL01 += k01*v00+k11*v10+k21*v20*k31*v30+k41*v40 - t01 - v10 + fCovIYZ[1];
  matL10 += k00*v01+k10*v11+k20*v21*k30*v31+k40*v41 - t10 - v01 + fCovIYZ[1];
  matL11 += k01*v01+k11*v11+k21*v21*k31*v31+k41*v41 - t11 - v11 + fCovIYZ[2];
  //
  matL20 -= t20;
  matL21 -= t21;
  matL30 -= t30;
  matL31 -= t31;
  matL40 -= t40;
  matL41 -= t41;
  //
  matL02 -= v20;
  matL03 -= v30;
  matL04 -= v40;
  matL12 -= v21;
  matL13 -= v31;
  matL14 -= v41;
  //
  printf("Lr%d VecL: ",GetLayerID()); for (int i=0;i<5;i++) printf("%+e ",vecL[i]); printf("\n");
  printf("F: "); for (int i=0;i<kNFElem;i++) printf("%+e ",fFMatrix[i]); printf("\n");  
  printf("K: "); for (int i=0;i<kNKElem;i++) printf("%+e ",fKMatrix[i]); printf("\n");  
  //
  for (int j=0;j<5;j++) {
    for (int i=0;i<5;i++) printf("%+e ",matL[j][i]); printf("\n");  
  }
  //
  return kTRUE;
}

 */

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