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.                  *
 **************************************************************************/
//
// Static function member which can be used in standalone cases
// especially as utils for AliTPCCosmicTrackfit
//
// detailed description can be found inside individual function
//
// grep "error" in output log to check abnormal termination
//
//
//  Xianguo Lu 
//  lu@physi.uni-heidelberg.de
//  Xianguo.Lu@cern.ch

//

#include <TAxis.h>
#include <TCanvas.h>
#include <TGraph.h>
#include <TTreeStream.h>
#include <TVector3.h>

#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliESDfriend.h"
#include "AliESDtrack.h"
#include "AliESDfriendTrack.h"
#include "AliESDInputHandler.h"
#include "AliTPCseed.h"
#include "AliTrackerBase.h"
#include "AliTrackPointArray.h"

#include "AliTPCCosmicUtils.h"

Int_t AliTPCCosmicUtils::GetBField(const AliESDEvent *esd)
{
  //
  //get b-field in unit of kg, expect 1, 2, 5kg only
  //
  const Double_t dm = esd->GetMagneticField();
  
  Int_t mag = -999;
  if(dm>0)
    mag = (Int_t) (dm+0.5);
  else
    mag = (Int_t) (dm-0.5);

  if(TMath::Abs(mag)!=1 && TMath::Abs(mag)!=2 && TMath::Abs(mag)!=5){
    printf("error AliTPCCosmicUtils::GetB strange Bfield! %f %d\n", dm, mag); exit(1);
  }

  return mag;
}

Int_t AliTPCCosmicUtils::GetTrigger(const AliESDEvent *esd)
{
  //
  //get cosmic trigger
  //
  const TString strig = esd->GetFiredTriggerClasses();
  Int_t btrig = 0;

  if( strig.Contains("C0OB0"))
    btrig += k0OB0;
  if( strig.Contains("C0OB1"))
    btrig += k0OB1;
  if( strig.Contains("C0HWU"))
    btrig += k0HWU;
  if( strig.Contains("CTRDCO2"))
    btrig += kTRDCO2;
  if( strig.Contains("AMU"))
    btrig += kAMU;
  if( strig.Contains("SCO"))
    btrig += kSCO;

  return btrig;
}

Bool_t AliTPCCosmicUtils::GetESD(AliESDEvent *& esdevent, AliESDfriend *& esdfriend)
{
  //
  //get esdevent and esdfriend
  //

  esdevent = 0x0;
  esdfriend = 0x0;

  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler *>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
  if(esdH){  
    esdevent = esdH->GetEvent();
  }

  if(!esdevent){
    printf("AliAnalysisTaskdEdxCosmic::GetESD error No ESD Event\n");
    return kFALSE;
  }
  
  esdH->SetActiveBranches("ESDfriend*");
  esdfriend = (AliESDfriend *)esdevent->FindListObject("AliESDfriend");

  if(!esdfriend){
    printf("AliAnalysisTaskdEdxCosmic::GetESD error No ESD friend\n");
    return kFALSE;
  }

  esdevent->SetESDfriend(esdfriend);

  return kTRUE;
}


Double_t AliTPCCosmicUtils::GetMinPhi(const AliExternalTrackParam *params[])
{
  //
  //minimum phi angle of the two tracks, 0: horizontal
  //
  const Double_t fsp[] = {TMath::Abs(TMath::Sin(params[0]->Phi())), 
                          TMath::Abs(TMath::Sin(params[1]->Phi()))};
  const Double_t minphi = TMath::ASin(TMath::Min(fsp[0], fsp[1])) * TMath::RadToDeg();

  return minphi;
}

Double_t AliTPCCosmicUtils::Point2LineDist(const TVector3 p0, const TVector3 l1, const TVector3 l2, TVector3 *vtx)
{
  //
  //return distance of p0 to line (l2-l1)
  //

  const TVector3 va = p0 - l1;
  const TVector3 vb = l2 - l1;

  //calculate vtx position
  const Double_t ca = va.Dot(vb)/vb.Mag();
  const TVector3 imp = l1 + vb.Unit()*ca;

  if(vtx){
    (*vtx) = imp;
  }

  /* equivalent to imp.Mag()
  //calculate distance
  const TVector3 dd = va.Cross(vb);
  return dd.Mag()/vb.Mag();
  */

  return imp.Mag();
}

Double_t AliTPCCosmicUtils::AngleInRange(Double_t phi)
{
  //
  //get the phi value (in rad) in -pi ~ pi, so that fabs() works naiively
  //
  const Double_t pmin = -TMath::Pi();
  const Double_t pmax = pmin+TMath::TwoPi();

  while(phi<pmin)
    phi+= TMath::TwoPi();

  while(phi>=pmax)
    phi-=  TMath::TwoPi();

  return phi;
}

Bool_t AliTPCCosmicUtils::RotateSafe(AliExternalTrackParam *trackPar, const Double_t rawalpha)
{
  //1. in AliExternalTrackParam::GetXYZ
  //r[0]=fX; r[1]=fP[0]; r[2]=fP[1];
  //return Local2GlobalPosition(r,fAlpha);
  //in AliVParticle::Local2GlobalMomentum 
  //Double_t cs=TMath::Cos(alpha), sn=TMath::Sin(alpha);
  //Double_t r=TMath::Sqrt((1. - p[1])*(1. + p[1]));
  //p[0]=pt*(r*cs - p[1]*sn); p[1]=pt*(p[1]*cs + r*sn); p[2]=pt*p[2];
  //which is cos(phi_local=Snp+fAlpha) > 0 always.  
  //2. also in Bool_t AliExternalTrackParam::Rotate(Double_t alpha) 
  // Double_t sf=fP2, cf=TMath::Sqrt((1.- fP2)*(1.+fP2));
  //in AliExternalTrackParam::Set
  //mom.RotateZ(-fAlpha);
  //fP[2] = TMath::Sin(mom.Phi());
  //since only sin is used for mom.Phi(), that is assuming cos(mom.Phi())>0

  //the range-changing in AliExternalTrackParam::Rotate not precise enough
  const Double_t aa = AngleInRange(rawalpha);

  const Double_t a0 = trackPar->GetAlpha();
  const Double_t p2 = trackPar->GetParameter()[2];

  //copied from AliExternalTrackParam::Rotate
  const Double_t ca=TMath::Cos(aa-a0), sa=TMath::Sin(aa-a0);
  const Double_t sf=p2, cf=TMath::Sqrt((1.- p2)*(1.+p2)); 

  if((cf*ca+sf*sa)<0) {
    return kFALSE;
  }

  return trackPar->Rotate(aa);

  /*
  Double_t xyz[3], pxpypz[3];
  trackPar->GetXYZ(xyz);
  trackPar->GetPxPyPz(pxpypz);
  const TVector3 pos0(xyz);
  const TVector3 mom0(pxpypz);
  TVector3 pos1, mom1, dpos, dmom;
  const Double_t eps = 1e-6;
  AliExternalTrackParam tmppar = (*trackPar);

  if(!tmppar.Rotate(aa)){
    return 0;
  }

  tmppar.GetXYZ(xyz);
  tmppar.GetPxPyPz(pxpypz);
  pos1.SetXYZ(xyz[0], xyz[1], xyz[2]);
  mom1.SetXYZ(pxpypz[0], pxpypz[1], pxpypz[2]);
  dpos = pos1-pos0;
  dmom = mom1-mom0;
  if(dpos.Mag()<eps && dmom.Mag()<eps){
    (*trackPar)=tmppar;
    return 1;
  }
  else 
    return 0;
  */

  /*
  //flip
  tmppar = (*trackPar);
  if(!tmppar.Rotate(aa+TMath::Pi())){
    return 0;
  }

  tmppar.GetXYZ(xyz);
  tmppar.GetPxPyPz(pxpypz);
  pos1.SetXYZ(xyz[0], xyz[1], xyz[2]);
  mom1.SetXYZ(pxpypz[0], pxpypz[1], pxpypz[2]);
  dpos = pos1-pos0;
  dmom = mom1-mom0;
  if(dpos.Mag()<eps && dmom.Mag()<eps){
    (*trackPar)=tmppar;
    return -1;
  }

  return 0;
  */
}

void AliTPCCosmicUtils::PrintTrackParam(const Int_t id, const AliExternalTrackParam * trackpar, const char *tag)
{
  //
  //print out TrackParam
  //
  Double_t xyz[3]={-999,-999,-999};
  trackpar->GetXYZ(xyz);
  Double_t pxpypz[3]={-999,-999,-999};
  trackpar->GetPxPyPz(pxpypz);

  printf("PrintTrackPar %2s %3d : %6.1f %5.1f : %6.6f %6.6f %6.6f :  %6.6f  : %8.3f %8.3f %8.3f : (%2d) %8.3f %11.6f %.2f\n", tag, id, trackpar->GetX(), sqrt(pow(xyz[0],2)+pow(xyz[1],2)), xyz[0], xyz[1], xyz[2], trackpar->Phi(), pxpypz[0], pxpypz[1], pxpypz[2], trackpar->Charge(), trackpar->Pt(), trackpar->P(), trackpar->GetAlpha()*TMath::RadToDeg());
}

void AliTPCCosmicUtils::DrawTracks(AliESDtrack *esdtrks[], const TString tag, const TString outputformat)
{
  //
  //draw esdtracks
  //
  const AliTPCseed *seeds[]={GetTPCseed(esdtrks[0]), GetTPCseed(esdtrks[1])};
  DrawSeeds(seeds, tag, outputformat);
}


void AliTPCCosmicUtils::DrawSeeds(const AliTPCseed * seeds[], const TString tag, const TString outputformat)
{
  //
  //draw seed and output to file
  //

  if(!seeds[0] || !seeds[1])
    return;

  TGraph *grsyx[]={new TGraph, new TGraph};
  TGraph *grsyz[]={new TGraph, new TGraph};

  for(Int_t itrk=0; itrk<2; itrk++){
    if(!seeds[itrk])
      continue;

    Int_t ncl = 0;
    for(Int_t irow=0; irow<NRow(); irow++){
      const AliTPCclusterMI * cls = seeds[itrk]->GetClusterPointer(irow);
      if(!cls)
        continue;

      Float_t xyz[3]={-999,-999,-999};
      cls->GetGlobalXYZ(xyz);
      //printf("Test %f %f %f \n", xyz[0], xyz[1], xyz[2]);
      grsyx[itrk]->SetPoint(ncl, xyz[0], xyz[1]);
      grsyz[itrk]->SetPoint(ncl, xyz[2], xyz[1]);
      ncl++;
    }
  }

  grsyx[0]->SetTitle(tag);
  grsyx[0]->SetMaximum(250);
  grsyx[0]->SetMinimum(-250);
  grsyx[0]->GetXaxis()->SetLimits(-250,250);
  grsyx[0]->GetXaxis()->SetTitle("X (cm)");
  grsyx[0]->GetYaxis()->SetTitle("Y (cm)");

  grsyx[0]->SetMarkerStyle(20);
  grsyx[0]->SetMarkerColor(kRed);
  grsyx[1]->SetMarkerStyle(22);
  grsyx[1]->SetMarkerColor(kBlue);

  grsyz[0]->SetTitle(tag);
  grsyz[0]->SetMaximum(250);
  grsyz[0]->SetMinimum(-250);
  grsyz[0]->GetXaxis()->SetLimits(-250,250);
  grsyz[0]->GetXaxis()->SetTitle("Z (cm)");
  grsyz[0]->GetYaxis()->SetTitle("Y (cm)");

  grsyz[0]->SetMarkerStyle(20);
  grsyz[0]->SetMarkerColor(kRed);
  grsyz[1]->SetMarkerStyle(22);
  grsyz[1]->SetMarkerColor(kBlue);

  TCanvas *cc=new TCanvas("cc","",1200,600);
  cc->Divide(2);
  cc->cd(1);
  for(int itrk=0; itrk<2; itrk++){
    grsyx[itrk]->SetMarkerSize(1);
    grsyx[itrk]->Draw(itrk?"lp same":"alp");
  }
  cc->cd(2);
  for(int itrk=0; itrk<2; itrk++){
    grsyz[itrk]->SetMarkerSize(1);
    grsyz[itrk]->Draw(itrk?"lp same":"alp");
  }

  gErrorIgnoreLevel = 1001;
  cc->Print(Form("drawTrack%s.%s", tag.Data(), outputformat.Data()));

  for(Int_t ii=0; ii<2; ii++){
    delete grsyx[ii];
    delete grsyz[ii];
  }
  delete cc;
}

//================================================================================================
AliTPCseed * AliTPCCosmicUtils::GetTPCseed(const AliESDtrack *esdtrack)
{
  //
  //Get TPC seeds from ESDfriendTrack
  //

  AliESDfriendTrack * friendtrk = (AliESDfriendTrack *) esdtrack->GetFriendTrack();
  if(!friendtrk){
    //printf("AliTPCCosmicUtils::GetTPCseed no friend track!\n"); exit(1);
    return 0x0;
  }

  TObject *calibObject=0x0;
  AliTPCseed *tseed = 0x0;
  for(Int_t l=0; (calibObject=friendtrk->GetCalibObject(l)); l++) {
    if( (tseed=dynamic_cast<AliTPCseed*>(calibObject)) )
      break;
  }
  return tseed;
}

//================================================================================================
AliExternalTrackParam *AliTPCCosmicUtils::MakeSeed(const AliTPCseed *tseed)
{
  //
  //make seed for propagation of TrackParam, using np = 3 outer clusters (separated by deltancls clusters) in TPCseed
  //

  const Int_t rowstart = NRow()-1;
  const Int_t rowstop = 0;  
  const Int_t drow = -1;

  //---
  const Int_t np = 3;
  AliTrackPoint *tpos[np];
  for(Int_t ii=0; ii<np; ii++)
    tpos[ii] = 0x0;

  const Float_t cov[6]={0,0,0, 0.01*0.01 ,0, 0.01*0.01};

  //---
  Int_t npos = 0;
  Int_t icl = 0;
  const Int_t deltancls = NclsMin()/2-1;
  Int_t oldcl = -deltancls;

  for(Int_t irow=rowstart; drow*irow<=drow*rowstop; irow+=drow){
    AliTPCclusterMI *cls = tseed->GetClusterPointer(irow);
    if(!cls) {
      continue;
    }

    if( icl == (oldcl+deltancls) ){
      Float_t txyz[3];
      cls->GetGlobalXYZ(txyz);
      tpos[npos++] = new AliTrackPoint(txyz, cov, 0);
      //printf("------ %d %f %f %f\n", npos, txyz[0], txyz[1], txyz[2]);

      oldcl = icl;
      if(npos==np) break;
    }
    icl++;
  }
  if(npos!=np){
    for(Int_t ii=0; ii<npos; ii++)
      delete tpos[ii];

    return 0x0;
  }

  AliExternalTrackParam * trackparam = AliTrackerBase::MakeSeed(*(tpos[0]), *(tpos[1]), *(tpos[2]));
  if(!trackparam || trackparam->Pt()==0){
    for(Int_t ii=0; ii<npos; ii++)
      delete tpos[ii];
    delete trackparam;

    return 0x0;
  }

  //------

  Double_t sxyz[3]={-999,-999,-999}, spxpypz[3]={-999,-999,-999};
  trackparam->GetXYZ(sxyz);
  trackparam->GetPxPyPz(spxpypz);
  Double_t scov[21];
  Int_t sign = trackparam->Charge();
  
  //reset covariance matrix -- necessary, otherwise bad fitting result: trackparam->GetCovariance()[ii] has problem: some are strange values
  for(Int_t ii=0; ii<21; ii++) {
    scov[ii]=0;
  }
  trackparam->Set(sxyz, spxpypz, scov, sign);

  for(Int_t ii=0; ii<np; ii++)
    delete tpos[ii];

  return trackparam;
}

//================================================================================================
void AliTPCCosmicUtils::IniCov(AliExternalTrackParam *trackPar, const Double_t ncl)
{
  //
  //initialize covariance matrix
  //

  const Double_t ksigma=5.;
  Double_t acov[16];
  for (Int_t i=0;i<15;i++)
    acov[i]=0;

  acov[0]=ksigma*ksigma;
  acov[2]=ksigma*ksigma;
  acov[5]=ksigma*ksigma;
  acov[9]=ksigma*ksigma;
  acov[14]=0.2*0.2;

  acov[5] = ksigma*ksigma/(ncl*ncl);
  acov[9] = ksigma*ksigma/(ncl*ncl);

  const Double_t resetcov = 4; 

  trackPar->ResetCovariance(resetcov);
  //the following helps a lot!!
  trackPar->AddCovariance(acov);
}

void AliTPCCosmicUtils::SingleFit(AliExternalTrackParam * trackInOld, AliExternalTrackParam * trackOutOld, const AliTPCseed *tseed, const Bool_t kinward,  const Int_t rowstartshift, const Int_t rowstep, const Double_t xmin, const Double_t xmax, Int_t &nfit, Int_t &nmiss, Double_t &pchi2, Double_t &lfit, TTreeSRedirector *debugstreamer)
{
  //
  //fit single track
  //
  //kinward is the true geometry of the track. Incomming track: 1; outgoing track: 0
  const Double_t inde  = kinward? -1 :  1;
  const Double_t outde = kinward?  1 : -1;
  
  //PrintTrackParam(9000, trackOutOld);

  AliExternalTrackParam trackOut = *trackOutOld;
  AliExternalTrackParam trackIn;
  Int_t ksite = -999;

  //nmiss is from the 2 FitKernel of the last iteration
  //nfit, pchi2 is from the last FitKernel of the last iteration

  Int_t rowouter = NRow()-1-rowstartshift;

  //so that when reversed, the same rows are read! important!!!
  Int_t rowinner = rowouter - rowouter/rowstep * rowstep;

  TVector3 gposStart;
  TVector3 gposStop;
  TVector3 dpos;
  lfit = 0;

  for(Int_t ii=0; ii<Niter(); ii++){
    nmiss = 0;

    gposStart.SetXYZ(-999,-999,-999);
    ksite = -999;
    trackIn  = trackOut;
    FitKernel(&trackIn,  tseed, rowouter, rowinner, -rowstep, xmin, xmax, inde , ksite, nfit, nmiss, pchi2, gposStart, gposStop, 0x0, kTRUE); 
    //PrintTrackParam(9010+ii, &trackIn);                

    dpos = gposStart-gposStop;
    lfit += dpos.Pt();

    //---------------------------

    nfit = 0;
    pchi2 = 0;                                        

    gposStart.SetXYZ(-999,-999,-999);
    ksite = -999;
    trackOut = trackIn;
    FitKernel(&trackOut, tseed, rowinner, rowouter,  rowstep, xmin, xmax, outde, ksite, nfit, nmiss, pchi2, gposStart, gposStop, (ii==Niter()-1 ? debugstreamer : 0x0), kTRUE);
    //PrintTrackParam(90020+ii, &trackOut);

    dpos = gposStart-gposStop;
    lfit += dpos.Pt();
  }

  lfit /= 2.*Niter();

  if(trackInOld)
    (*trackInOld)  = trackIn;

  (*trackOutOld) = trackOut;
}

void AliTPCCosmicUtils::CombinedFit(AliExternalTrackParam *trackPars[],  const AliTPCseed *seeds[],  const Int_t rowstartshift, const Int_t rowstep, const Double_t xmin, const Double_t xmax, Int_t &nfit, Int_t &nmiss, Double_t &pchi2, Double_t &lfit, Double_t &vtxD, Double_t &vtxZ, TTreeSRedirector *debugstreamer)
{
  //
  //combined propagation
  //

  //seen from 1/pt_fit - 1/pt_gen, for differnt de:
  //u+d+: combUp good, combLow bad
  //u+d-: combUp good, combLow good
  //u-d-: combUp bad,  combLow good
  //u-d+: combUp bad,  combLow bad
  const Double_t upde  = 1;
  const Double_t lowde = -1;

  AliExternalTrackParam trackLow = *(trackPars[1]);
  AliExternalTrackParam trackUp;

  for(Int_t ii=0; ii<Niter(); ii++){
    lfit = 0;
    vtxD = 0;
    vtxZ = 0;
    Double_t tmpl = -999, tmpd = -999, tmpz = -999;

    //lower->upper
    trackUp = trackLow;
    SubCombined(&trackUp,  seeds, 1, 0, rowstartshift, rowstep, xmin, xmax, upde,  nfit, nmiss, pchi2, tmpl, tmpd, tmpz);
    lfit += tmpl;
    vtxD += tmpd;
    vtxZ += tmpz;
    
    //upper->lower
    trackLow = trackUp;    
    SubCombined(&trackLow, seeds, 0, 1, rowstartshift, rowstep, xmin, xmax, lowde, nfit, nmiss, pchi2, tmpl, tmpd, tmpz, (ii==Niter()-1? debugstreamer : 0x0));
    lfit += tmpl;
    vtxD += tmpd;
    vtxZ += tmpz;
  }

  *(trackPars[0]) = trackUp;
  *(trackPars[1]) = trackLow;

  //only last iteration used
  lfit /= 2;
  vtxD /= 2;
  vtxZ /= 2;
}

void AliTPCCosmicUtils::SubCombined(AliExternalTrackParam *trackPar, const AliTPCseed *seeds[], const Int_t tk0, const Int_t tk1, const Int_t rowstartshift, const Int_t rowstep, const Double_t xmin, const Double_t xmax, const Double_t eloss, Int_t &nfit, Int_t &nmiss, Double_t &pchi2, Double_t &lfit, Double_t &vtxD, Double_t &vtxZ, TTreeSRedirector *debugstreamer)
{
  //
  //sub-routine for combined propagation
  //

  IniCov(trackPar, seeds[0]->GetNumberOfClusters()+seeds[1]->GetNumberOfClusters());

  Int_t dtk=1;
  if(tk0>tk1)
    dtk=-1;

  //reset counters
  Int_t ksite = -999;
  nfit = 0;
  nmiss = 0;
  pchi2 = 0;
  vtxD = -1e10;
  vtxZ = -1e10;

  //always nrow -> 1 -> nrow
  Int_t rowstart= NRow()-1-rowstartshift;

  //so that when reversed, the same rows are read! important!!!
  Int_t rowstop = rowstart - rowstart/rowstep * rowstep;
  Int_t drow = -rowstep;
    
  TVector3 gposStart(-999,-999,-999);
  TVector3 gposStop(-999,-999,-999);

  for(Int_t itrk=tk0; dtk*itrk<=dtk*tk1; itrk+=dtk){
    if(itrk==tk1){
      Int_t tmprow = rowstart;
      rowstart = rowstop;
      rowstop = tmprow;
      drow *= -1;
    }
   
    FitKernel(trackPar, seeds[itrk], rowstart, rowstop, drow, xmin, xmax, eloss, ksite, nfit, nmiss, pchi2, gposStart, gposStop, debugstreamer, kFALSE);

    //get the impact parameters at the end of the first propagation (X=0)
    if(itrk==tk0){
      AliExternalTrackParam vertex(*trackPar);
      const Double_t maxStep = 1;
      const Bool_t rotateTo = kFALSE;
      const Double_t maxSnp = 0.8;
      if(AliTrackerBase::PropagateTrackToBxByBz(&vertex, 0, Mass(), maxStep, rotateTo, maxSnp, (Int_t)eloss)){
        vtxD = TMath::Abs(vertex.GetParameter()[0]);
        vtxZ = vertex.GetParameter()[1];
      }
    }
  }

  TVector3 dpos = gposStart-gposStop;
  lfit = dpos.Pt();
}

void AliTPCCosmicUtils::FitKernel(AliExternalTrackParam *trackPar, const AliTPCseed *tseed, const Int_t rowstart, const Int_t rowstop, const Int_t drow, const Double_t xmin, const Double_t xmax, const Double_t eloss, Int_t &ksite, Int_t &nfit, Int_t &nmiss, Double_t &pchi2, TVector3 &gposStart, TVector3 &gposStop, TTreeSRedirector *debugstreamer, const Bool_t kinicov)
{
  //
  //routine for propagation
  //

  //only for SingleFit-->
  if(kinicov)
    IniCov(trackPar, tseed->GetNumberOfClusters());
  //<--

  Int_t checkstop = -999;

  for(Int_t irow=rowstart; drow*irow<=drow*rowstop; irow+=drow){
    checkstop = irow;
    //printf("test irow %d\n", irow);

    AliTPCclusterMI *cl=tseed->GetClusterPointer(irow);
    if (!cl) continue;
    if (cl->GetX()< XMin()) continue;

    //cut on cluster X (i.e. r) to specify leverarm
    if(cl->GetX()< xmin){
      continue;
    }
    if(cl->GetX()> xmax){
      continue;
    }
    //if propagation not successful, trackPar is not changed
    AliExternalTrackParam tmppar(*trackPar);

    //--------------------------- to cure large chi2 in z, 2011-05-11. Thandks to M. Ivanov!  ---------------------------
    const Int_t tmpsite = ((cl->GetDetector()%36)<18);
    if(tmpsite!=ksite && ksite!=-999){
      Double_t *clscov=(Double_t*)tmppar.GetCovariance();
      clscov[2]+=3*3;
    }
    ksite = tmpsite;

    //--------------------------- rotate cluster position to trackPar position ---------------------------
    //DO NOT rotate trackPar, there is "bug" in trackparam::rotate!! stay in the initial one defined as alpha = ATan2(posy0,posx0)
    Float_t gxyz[3];
    cl->GetGlobalXYZ(gxyz);

    const TVector3 gptmp(gxyz[0], gxyz[1], gxyz[2]);

    TVector3 ptogo(gxyz);

    //printf("test %d : %f %f %f\n", irow, gxyz[0], gxyz[1], gxyz[2]);

    const Double_t trkalpha = tmppar.GetAlpha();
    ptogo.RotateZ(-trkalpha);
    const Double_t xTogo = ptogo.X();
    const Double_t yTogo = ptogo.Y();
    const Double_t zTogo = ptogo.Z();
      
    //--------------------------- propagate ---------------------------
    //AliTrackerBase::PropagateTrackToBxByBz Double_t step = dir*TMath::Min(TMath::Abs(xToGo-xpos), maxStep); 
    const Double_t maxStep = 1;
    const Bool_t rotateTo = kFALSE;
    const Double_t maxSnp = 0.8;

    //eloss critical only for combine fit!!!
    const Bool_t kpro = AliTrackerBase::PropagateTrackToBxByBz(&tmppar, xTogo, Mass(), maxStep, rotateTo, maxSnp, (Int_t)eloss);
    if(!kpro){
      nmiss++;
      continue;
    }

    //--------------------------- set error ---------------------------
    //necessary, help at mostly low p, and also high p
    Double_t cov[3]={0.01, 0., 0.01}; 
    AliTPCseed::GetError(cl, &tmppar, cov[0],cov[2]);
    cov[0]*=cov[0];
    cov[2]*=cov[2];

    if(debugstreamer){
      TVector3 tmpgxyz(gxyz);
      (*debugstreamer)<<"ErrParam"<<
        "Cl.="<<cl<<
        "T.="<<&tmppar<<
        "covy="<<cov[0]<<
        "covz="<<cov[2]<<
        "clpos.="<<&ptogo<<
        "gpos.="<<&tmpgxyz<<
        "\n";
    }

    //--------------------------- get chi2 and THEN update ---------------------------
    Double_t yz[2]={yTogo, zTogo};

    pchi2 += tmppar.GetPredictedChi2(yz, cov);
      
    tmppar.Update(yz,cov);  
      
    //--------------------------- save change ---------------------------
    (*trackPar) = tmppar;

    nfit++;

    gposStop = gptmp;
    if(gposStart.X()<-998)
      gposStart = gptmp;
  }

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