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: AliTRDtrackerDebug.cxx 23810 2008-02-08 09:00:27Z hristov $ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Tracker debug streamer                                                   //
//                                                                           //
//  Authors:                                                                 //
//    Alex Bercuci <A.Bercuci@gsi.de>                                        //
//    Markus Fasel <M.Fasel@gsi.de>                                          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "TFile.h"
#include "TTree.h"
#include "TTreeStream.h"
#include "TLinearFitter.h"
#include "TGraph.h"
#include "TCanvas.h"
#include "TMath.h"

#include "AliLog.h"
#include "AliRieman.h"

#include "AliTRDgeometry.h"
#include "AliTRDtrackV1.h"
#include "AliTRDseedV1.h"
#include "AliTRDcluster.h"
#include "AliTRDgeometry.h"

#include "AliTRDtrackerDebug.h"

ClassImp(AliTRDtrackerDebug)

Int_t AliTRDtrackerDebug::fgEventNumber = 0;
Int_t AliTRDtrackerDebug::fgTrackNumber = 0;
Int_t AliTRDtrackerDebug::fgCandidateNumber = 0;

//____________________________________________________
AliTRDtrackerDebug::AliTRDtrackerDebug() : AliTRDtrackerV1()
  ,fOutputStreamer(NULL)
  ,fTree(NULL)
  ,fTracklet(NULL)
  ,fTrack(NULL)
  ,fNClusters(0)
  ,fAlpha(0.)
{
        //
  // Default constructor
  //
  fOutputStreamer = new TTreeSRedirector("TRD.Debug.root");
}

//____________________________________________________
AliTRDtrackerDebug::~AliTRDtrackerDebug()
{
  // destructor
  
  delete fOutputStreamer;
}


//____________________________________________________
Bool_t AliTRDtrackerDebug::Init()
{
// steer linking data for various debug streams	
  fTrack = new AliTRDtrackV1();
  fTree->SetBranchAddress("ncl", &fNClusters);
  fTree->SetBranchAddress("track.", &fTrack);
  return kTRUE;
}

//____________________________________________________
Bool_t AliTRDtrackerDebug::Open(const char *method)
{
  // Connect to the tracker debug file
  
  TDirectory *savedir = gDirectory; 
  TFile::Open("TRD.TrackerDebugger.root");
  fTree = (TTree*)gFile->Get(method);
  if(!fTree){
    AliInfo(Form("Can not find debug stream for the %s method.\n", method));
    savedir->cd();
    return kFALSE;
  }
  savedir->cd();
  return kTRUE;
}

//____________________________________________________
Int_t AliTRDtrackerDebug::Process()
{
// steer debug process threads
  
  for(int it = 0; it<fTree->GetEntries(); it++){
    if(!fTree->GetEntry(it)) continue;
    if(!fNClusters) continue;
    fAlpha = fTrack->GetAlpha();
    //printf("Processing track %d [%d] ...\n", it, fNClusters);
    ResidualsTrackletsTrack();

    const AliTRDseedV1 *tracklet = NULL;
    for(int ip = 5; ip>=0; ip--){
      if(!(tracklet = fTrack->GetTracklet(ip))) continue;
      if(!tracklet->GetN()) continue;
      
      ResidualsClustersTrack(tracklet);
      ResidualsClustersTracklet(tracklet);
      ResidualsClustersParametrisation(tracklet);
    }
  }
  return kTRUE;
}


//____________________________________________________
void AliTRDtrackerDebug::ResidualsClustersTrack(const AliTRDseedV1 *tracklet)
{
// Calculate averange distances from clusters to the TRD track	
  
  Double_t x[3]; 
  AliTRDcluster *c = NULL;
  for(int ic=0; ic<35/*AliTRDseed:knTimebins*/; ic++){
    if(!(c = tracklet->GetClusters(ic))) continue;
    Double_t xc = c->GetX(), yc = c->GetY(), zc = c->GetZ();

    // propagate track to cluster 
    if(!PropagateToX(*fTrack, xc, 2.)) continue; 
    fTrack->GetXYZ(x);
    
    // transform to local tracking coordinates
    //Double_t xg =  x[0] * TMath::Cos(fAlpha) + x[1] * TMath::Sin(fAlpha); 
    Double_t yg = -x[0] * TMath::Sin(fAlpha) + x[1] * TMath::Cos(fAlpha);

    // apply tilt pad correction
    yc+= (zc - x[2]) * tracklet->GetTilt();
    
    Double_t dy = yc-yg;

    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "ResidualsClustersTrack"
      << "c.="   << c
      << "dy="   << dy
      << "\n";
  }
}

//____________________________________________________
void AliTRDtrackerDebug::ResidualsClustersTracklet(const AliTRDseedV1 *tracklet) const
{
// Calculates distances from clusters to tracklets
  
  Double_t x0 = tracklet->GetX0(), 
          y0 = tracklet->GetYfit(0), 
          ys = tracklet->GetYfit(1);
          //z0 = tracklet->GetZfit(0), 
          //zs = tracklet->GetZfit(1);
  
  AliTRDcluster *c = NULL;
  for(int ic=0; ic<35/*AliTRDseed:knTimebins*/; ic++){
    if(!(c = tracklet->GetClusters(ic))) continue;
    Double_t xc = c->GetX(), yc = c->GetY()/*, zc = c->GetZ()*/;
    Double_t dy = yc- (y0-(x0-xc)*ys);

    //To draw  use : 
    //ResidualsClustersTracklet->Draw("TMath::Abs(10.*dy):TMath::ATan(ys)*TMath::RadToDeg()>>h(20, -40, 40)", "", "prof");
    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "ResidualsClustersTracklet"
      << "c.="   << c
      << "ys="   << ys
      << "dy="   << dy
      << "\n";
  }
}

//____________________________________________________
void AliTRDtrackerDebug::ResidualsClustersParametrisation(const AliTRDseedV1 *tracklet) const
{
// Calculates distances from clusters to Rieman fit.
  
  // store cluster positions
  Double_t x0 = tracklet->GetX0();
  AliTRDcluster *c = NULL;
  
  Double_t x[2]; Int_t ncl, mcl, jc;
  TLinearFitter fitter(3, "hyp2");
  for(int ic=0; ic<35/*AliTRDseed:knTimebins*/; ic++){
    if(!(c = tracklet->GetClusters(ic))) continue;
    Double_t xc = c->GetX(), yc = c->GetY()/*, zc = c->GetZ()*/;
    
    jc = ic; ncl = 0; mcl=0; fitter.ClearPoints();
    while(ncl<6){
      // update index
      mcl++;
      jc = ic + ((mcl&1)?-1:1)*(mcl>>1);

      if(jc<0 || jc>=35) continue;
      if(!(c = tracklet->GetClusters(jc))) continue;

      x[0] = c->GetX()-x0;
      x[1] = x[0]*x[0];
      fitter.AddPoint(x, c->GetY(), c->GetSigmaY2());
      ncl++;
    }
    fitter.Eval();
    Double_t dy = yc - fitter.GetParameter(0) -fitter.GetParameter(1) * (xc-x0) - fitter.GetParameter(2)* (xc-x0)*(xc-x0); 
  
    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "ResidualsClustersParametrisation"
      << "dy="   << dy
      << "\n";
  }
}


//____________________________________________________
void AliTRDtrackerDebug::ResidualsTrackletsTrack() const
{
// Calculates distances from tracklets to the TRD track.
  
  if(fTrack->GetNumberOfTracklets() < 6) return;

  // build a working copy of the tracklets attached to the track 
  // and initialize working variables fX, fY and fZ
  //AliTRDseedV1 tracklet[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
  AliTRDseedV1 tracklet[6];
  const AliTRDseedV1 *ctracklet = NULL;
  for(int ip = 0; ip<6; ip++){
    if(!(ctracklet = fTrack->GetTracklet(ip))) continue;
    tracklet[ip] = (*ctracklet); 
// 		Double_t x0 = tracklet[ip].GetX0();
// 		for(int ic=0; ic<AliTRDseedV1:knTimebins; ic++){
// 			if(!(c = tracklet[ip].GetClusters(ic))) continue;
// 			Double_t xc = c->GetX(), yc = c->GetY(), zc = c->GetZ();
// 			tracklet[ip].SetX(ic, xc-x0);
// 			tracklet[ip].SetY(ic, yc);
// 			tracklet[ip].SetZ(ic, zc);
// 		}
  }
  
  // Do a Rieman fit (with tilt correction) for all tracklets 
  // except the one which is tested. 
  // (Based on AliTRDseed::IsOK() return false)
  for(int ip=0; ip<6; ip++){
    // reset tracklet to be tested
    Double_t x0 = tracklet[ip].GetX0();
    new(&tracklet[ip]) AliTRDseedV1();
    tracklet[ip].SetX0(x0);

    // fit Rieman with tilt correction
    AliTRDtrackerV1::FitRiemanTilt(NULL, &tracklet[0], kTRUE);

    // make a copy of the fit result
    Double_t 
      y0   = tracklet[ip].GetYref(0),
      dydx = tracklet[ip].GetYref(1),
      z0   = tracklet[ip].GetZref(0),
      dzdx = tracklet[ip].GetZref(1);

    // restore tracklet
    AliTRDseedV1 *ptr(NULL);
    if(!(ptr = fTrack->GetTracklet(ip))) continue;
    tracklet[ip] = (*ptr);
// 		for(int ic=0; ic<AliTRDseedV1:knTimebins; ic++){
// 			if(!(c = tracklet[ip].GetClusters(ic))) continue;
// 			Double_t xc = c->GetX(), yc = c->GetY(), zc = c->GetZ();
// 			tracklet[ip].SetX(ic, xc-x0);
// 			tracklet[ip].SetY(ic, yc);
// 			tracklet[ip].SetZ(ic, zc);
// 		}		
    
    // fit clusters
    AliTRDseedV1 ts(tracklet[ip]);
    ts.SetYref(0, y0); ts.SetYref(1, dydx);
    ts.SetZref(0, z0); ts.SetZref(1, dzdx);
    ts.Fit(kTRUE);

    // save results for plotting
    Int_t plane   = tracklet[ip].GetPlane();
    Double_t dy   = tracklet[ip].GetYfit(0) - ts.GetYfit(0);
    Double_t tgy  = tracklet[ip].GetYfit(1);
    Double_t dtgy = (tracklet[ip].GetYfit(1) - ts.GetYfit(1))/(1. + tracklet[ip].GetYfit(1) * ts.GetYfit(1));
    Double_t dz   = tracklet[ip].GetZfit(0) - ts.GetZfit(0);
    Double_t tgz  = tracklet[ip].GetZfit(1);
    Double_t dtgz = (tracklet[ip].GetZfit(1) - ts.GetZfit(1))/(1. + tracklet[ip].GetZfit(1) * ts.GetZfit(1));
    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "ResidualsTrackletsTrack"
      << "ref.="   << &tracklet[ip]
      << "fit.="   << &ts
      << "plane="  << plane
      << "dy="     << dy
      << "tgy="    << tgy
      << "dtgy="   << dtgy
      << "dz="     << dz
      << "tgz="    << tgz
      << "dtgz="   << dtgz
      << "\n";
  }
}

//____________________________________________________
void AliTRDtrackerDebug::AnalyseFindable(Char_t *treename){
//
// Calculates the number of findable tracklets defined as the number of tracklets
// per track candidate where the tan phi_tracklet is below 0.15 (maximum inclination
// in y-direction.
// 
// Parameters:	-the treename (this method can be used for all trees which store the
//				 tracklets
// Output:		-void
//
// A new TTree containing the number of findable tracklets and the number of clusters
// attached to the full track is stored to disk
//
  // Link the File
  TFile *debfile = TFile::Open("TRD.TrackerDebug.root");
  fTree = (TTree *)(debfile->Get(treename));
  if(!fTree){
    AliError(Form("Tree %s not found in file TRDdebug.root. Abborting!", treename));
    debfile->Close();
    return;
  }
  
  AliTRDseedV1 *tracklets[kNPlanes];
  for(Int_t iPlane = 0; iPlane < AliTRDtrackerV1::kNPlanes; iPlane++)
    tracklets[iPlane] = NULL;
  for(Int_t iPlane = 0; iPlane < kNPlanes; iPlane++)
    fTree->SetBranchAddress(Form("S%d.", iPlane), &tracklets[iPlane]);
  fTree->SetBranchAddress("EventNumber", &fgEventNumber);
  fTree->SetBranchAddress("CandidateNumber", &fgCandidateNumber);
  
  Int_t findable = 0, nClusters = 0;
  Int_t nEntries = fTree->GetEntriesFast();
  for(Int_t iEntry = 0; iEntry < nEntries; iEntry++){
    printf("Entry %d\n", iEntry);
    fTree->GetEntry(iEntry);
    findable = 0;
    nClusters = 0;
    // Calculate Findable
    for(Int_t iPlane = 0; iPlane < kNPlanes; iPlane++){
      if (TMath::Abs(tracklets[iPlane]->GetYref(0) / tracklets[iPlane]->GetX0()) < 0.15) findable++;
      if (!tracklets[iPlane]->IsOK()) continue;
      nClusters += tracklets[iPlane]->GetN2();
    }
    
    // Fill Histogramms
    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "AnalyseFindable"
      << "EventNumber="		<< fgEventNumber
      << "CandidateNumber="	<< fgCandidateNumber
      << "Findable="			<< findable
      << "NClusters="			<< nClusters
      << "\n";
  }
}
//____________________________________________________
void AliTRDtrackerDebug::AnalyseTiltedRiemanFit(){
//
// Creating a Data Set for the method FitTiltedRieman containing usefull variables
// Each variable can be addressed to tracks later. Data can be processed later.
//
// Parameters: -
// Output:     -
//
// TODO: Match everything with Init and Process
//
  TFile *debfile = TFile::Open("TRD.TrackerDebug.root");
  fTree = (TTree *)(debfile->Get("MakeSeeds2"));
  if(!fTree) return;
  Int_t nEntries = fTree->GetEntries();
  TLinearFitter *tiltedRiemanFitter = NULL;
  fTree->SetBranchAddress("FitterT.", &tiltedRiemanFitter);
  fTree->SetBranchAddress("EventNumber", &fgEventNumber);
  fTree->SetBranchAddress("CandidateNumber", &fgCandidateNumber);
  for(Int_t entry = 0; entry < nEntries; entry++){
    fTree->GetEntry(entry);
    Double_t a = tiltedRiemanFitter->GetParameter(0);
    Double_t b = tiltedRiemanFitter->GetParameter(1);
    Double_t c = tiltedRiemanFitter->GetParameter(2);
    Double_t offset = tiltedRiemanFitter->GetParameter(3);
    Double_t slope  = tiltedRiemanFitter->GetParameter(4);
    Float_t radius = GetTrackRadius(a, b, c);
    Float_t curvature = GetTrackCurvature(a, b, c);
    Float_t dca = GetDCA(a, b, c);
    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "AnalyseTiltedRiemanFit"
    << "EventNumber=" 		<< fgEventNumber
    << "CandidateNumber=" << fgCandidateNumber
    << "Radius="					<< radius
    << "Curvature="				<< curvature
    << "DCA="							<< dca
    << "Offset="					<< offset
    << "Slope="						<< slope
    << "\n";
  }
}

//____________________________________________________
Float_t AliTRDtrackerDebug::GetTrackRadius(Float_t a, Float_t b, Float_t c) const {
//
// Calculates the track radius using the parameters given by the tilted Rieman fit 
//
// Parameters: The three parameters from the Rieman fit
// Output:     The track radius
//
  Float_t radius = 0;
  if(1.0 + b*b - c*a > 0.0)
    radius = TMath::Sqrt(1.0 + b*b - c*a )/a;
  return radius;
}

//____________________________________________________
Float_t AliTRDtrackerDebug::GetTrackCurvature(Float_t a, Float_t b, Float_t c) const {
//
// Calculates the track curvature using the parameters given by the linear fitter 
//
// Parameters:	the three parameters from the tilted Rieman fitter
// Output:		the full track curvature
//
  Float_t curvature =  1.0 + b*b - c*a;
  if (curvature > 0.0) 
    curvature  =  a / TMath::Sqrt(curvature);
  return curvature;
}

//____________________________________________________
Float_t AliTRDtrackerDebug::GetDCA(Float_t a, Float_t b, Float_t c) const {
//
// Calculates the Distance to Clostest Approach for the Vertex using the paramters
// given by the tilted Rieman fit 
//
// Parameters: the three parameters from the tilted Rieman fitter
// Output:     the Distance to Closest Approach
//
  Float_t dca  =  0.0;
  if (1.0 + b*b - c*a > 0.0) {
    dca = -c / (TMath::Sqrt(1.0 + b*b - c*a) + TMath::Sqrt(1.0 + b*b));
  }
  return dca;
}

//____________________________________________________
void AliTRDtrackerDebug::AnalyseMinMax()
{
  // Development function related to the old tracking code
  TFile *debfile = TFile::Open("TRD.TrackerDebug.root");
  if(!debfile){
    AliError("File TRD.TrackerDebug.root not found!");
    return; 
  }
  fTree = (TTree *)(debfile->Get("MakeSeeds0"));
  if(!fTree){
    AliError("Tree MakeSeeds0 not found in File TRD.TrackerDebug.root.");
    return;
  }
  AliTRDseedV1 *cseed[4] = {NULL, NULL, NULL, NULL};
  AliTRDcluster *c[4] = {NULL, NULL, NULL, NULL};
  for(Int_t il = 0; il < 4; il++){
    fTree->SetBranchAddress(Form("Seed%d.", il),	&cseed[il]);
    fTree->SetBranchAddress(Form("c%d.",il), &c[il]);
  }
  fTree->SetBranchAddress("CandidateNumber",	&fgCandidateNumber);
  fTree->SetBranchAddress("EventNumber",	&fgEventNumber);
  Int_t entries = fTree->GetEntries();
  for(Int_t ientry = 0; ientry < entries; ientry++){
    fTree->GetEntry(ientry);
    Float_t minmax[2] = { -100.0,  100.0 };
    for (Int_t iLayer = 0; iLayer < 4; iLayer++) {
      Float_t max = c[iLayer]->GetZ() + cseed[iLayer]->GetPadLength() * 0.5 + 1.0 - cseed[iLayer]->GetZref(0);
      if (max < minmax[1]) minmax[1] = max;
      Float_t min = c[iLayer]->GetZ()-cseed[iLayer]->GetPadLength() * 0.5 - 1.0 - cseed[iLayer]->GetZref(0);
      if (min > minmax[0]) minmax[0] = min;
    }
    TTreeSRedirector &cstreamer = *fOutputStreamer;
    cstreamer << "AnalyseMinMaxLayer"
    << "EventNumber="				<< fgEventNumber
    << "CandidateNumber="		<< fgCandidateNumber
    << "Min="								<< minmax[0]
    << "Max="								<< minmax[1]
    << "\n";
  }
}

//____________________________________________________
TCanvas* AliTRDtrackerDebug::PlotSeedingConfiguration(const Char_t *direction, Int_t event, Int_t candidate){
//
// Plots the four seeding clusters, the helix fit and the reference Points for
// a given combination consisting of eventnr. and candidatenr.
//
// Parameters: 	-direction (y or z)
//				-Event Nr
//            	-Candidate that has to be plotted
//
  const Float_t kxmin = 280;
  const Float_t kxmax = 380;
  const Float_t kxdelta = (kxmax - kxmin)/1000;
  
  if((strcmp(direction, "y") != 0) && (strcmp(direction, "z") != 0)){
    AliError(Form("Direction %s does not exist. Abborting!", direction));
    return NULL;
  }

  TFile *debfile = TFile::Open("TRD.TrackerDebug.root");
  if(!debfile){
    AliError("File TRD.TrackerDebug.root not found!");
    return NULL; 
  }
  fTree = (TTree *)(debfile->Get("MakeSeeds0"));
  if(!fTree){
    AliError("Tree MakeSeeds0 not found in File TRD.TrackerDebug.root.");
    return NULL;
  }
  
  TGraph *seedcl = new TGraph(4);
  TGraph *seedRef = new TGraph(4);
  TGraph *riemanFit = new TGraph(1000);
  seedcl->SetMarkerStyle(20);
  seedcl->SetMarkerColor(kRed);
  seedRef->SetMarkerStyle(2);

  AliTRDcluster *c[4] = {NULL, NULL, NULL, NULL};
  AliRieman *rim = NULL;
  Bool_t found = kFALSE;
  for(Int_t il = 0; il < 4; il++) fTree->SetBranchAddress(Form("c%d.",il), &c[il]);
  fTree->SetBranchAddress("EventNumber", &fgEventNumber);
  fTree->SetBranchAddress("CandidateNumber", &fgCandidateNumber);
  fTree->SetBranchAddress("RiemanFitter.", &rim);
  Int_t entries = fTree->GetEntries();
  for(Int_t entry = 0; entry < entries; entry++){
    fTree->GetEntry(entry);
    if(fgEventNumber < event) continue;
    if(fgEventNumber > event) break;
    // EventNumber matching: Do the same for the candidate number
    if(fgCandidateNumber < candidate) continue;
    if(fgCandidateNumber > candidate) break;
    found = kTRUE;
    Int_t nPoints = 0;
    for(Int_t il = 0; il < 4; il++){
      Float_t cluster = 0.0, reference = 0.0;
      if(!strcmp(direction, "y")){
        cluster = c[il]->GetY();
        reference = rim->GetYat(c[il]->GetX());
      }
      else{
        cluster = c[il]->GetZ();
        reference = rim->GetZat(c[il]->GetX());
      }
      seedcl->SetPoint(nPoints, cluster, c[il]->GetX());
      seedRef->SetPoint(nPoints, reference , c[il]->GetX());
      nPoints++;
    }
    // evaluate the fitter Function numerically
    nPoints = 0;
    for(Int_t ipt = 0; ipt < 1000; ipt++){
      Float_t x = kxmin + ipt * kxdelta;
      Float_t point = 0.0;
      if(!strcmp(direction, "y"))
        point = rim->GetYat(x);
      else
        point = rim->GetZat(x);
      riemanFit->SetPoint(nPoints++, point, x);
    }
    // We reached the End: break
    break;
  }
  if(found){
    seedcl->SetTitle(Form("Event %d, Candidate %d\n", fgEventNumber, fgCandidateNumber));
    seedRef->SetTitle(Form("Event %d, Candidate %d\n", fgEventNumber, fgCandidateNumber));
    riemanFit->SetTitle(Form("Event %d, Candidate %d\n", fgEventNumber, fgCandidateNumber));
    TCanvas *c1 = new TCanvas();
    seedcl->Draw("ap");
    seedRef->Draw("psame");
    riemanFit->Draw("lpsame");
    return c1;
  }
  else{
    AliError(Form("Combination consisting of event %d and candidate %d not found", event, candidate));
    delete seedcl;
    delete seedRef;
    delete riemanFit;
    return NULL;
  }
}

//____________________________________________________
TCanvas* AliTRDtrackerDebug::PlotFullTrackFit(Int_t event, Int_t candidate, Int_t iteration, const Char_t *direction){
//
// Plots the tracklets (clusters and reference in y direction) and the fitted function for several iterations
// in the function ImproveSeedQuality (default is before ImproveSeedQuality)
// 
// Parameters: -Event Number
//             -Candidate Number
//             -Iteration Number in ImproveSeedQuality (default: -1 = before ImproveSeedQuality)
//			   -direction (default: y)
// Output:     -TCanvas (containing the Picture);
//
  const Float_t kxmin = 280;
  const Float_t kxmax = 380;
  const Float_t kxdelta = (kxmax - kxmin)/1000;
  
  if(strcmp(direction, "y") && strcmp(direction, "z")){
    AliError(Form("Direction %s does not exist. Abborting!", direction));
    return NULL;
  }

  TFile *debfile = TFile::Open("TRD.TrackerDebug.root");
  if(!debfile){
    AliError("File TRD.TrackerDebug.root not found.");
    return NULL;
  }
  TString *treename = NULL;
  if(iteration > -1)
    treename = new TString("ImproveSeedQuality");
  else
    treename = new TString("MakeSeeds1");
  fTree = (TTree *)(debfile->Get(treename->Data()));
  if(!fTree){
    AliError(Form("Tree %s not found in File TRD.TrackerDebug.root.", treename->Data()));
    delete treename;
    return NULL;
  }
  delete treename;

  TGraph *fitfun = new TGraph(1000);
  // Prepare containers
  Float_t x0[AliTRDtrackerV1::kNPlanes],
      refP[AliTRDtrackerV1::kNPlanes],
      clx[AliTRDtrackerV1::kNPlanes * AliTRDtrackerV1::kNTimeBins],
      clp[AliTRDtrackerV1::kNPlanes * AliTRDtrackerV1::kNTimeBins];
  Int_t nLayers = 0, ncls = 0;
  
  TLinearFitter *fitter = NULL;
  AliTRDseedV1 *tracklet[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
  for(Int_t iLayer = 0; iLayer < 6; iLayer++)
    fTree->SetBranchAddress(Form("S%d.", iLayer), &tracklet[iLayer]);
  fTree->SetBranchAddress("FitterT.", &fitter);
  fTree->SetBranchAddress("EventNumber", &fgEventNumber);
  fTree->SetBranchAddress("CandidateNumber", &fgCandidateNumber);
  
  Int_t nEntries = fTree->GetEntriesFast();
  Bool_t found = kFALSE;
  for(Int_t entry = 0; entry < nEntries; entry++){
    fTree->GetEntry(entry);
    if(fgEventNumber < event) continue;
    if(fgEventNumber > event) break;
    // EventNumber matching: Do the same for the candidate number
    if(fgCandidateNumber < candidate) continue;
    if(fgCandidateNumber > candidate) break;
    found = kTRUE;
    
    for(Int_t iLayer = 0; iLayer < 6; iLayer++){
      if(!tracklet[iLayer]->IsOK()) continue;
      x0[nLayers] = tracklet[iLayer]->GetX0();
      if(!strcmp(direction, "y"))
        refP[nLayers] = tracklet[iLayer]->GetYref(0);
      else
        refP[nLayers] = tracklet[iLayer]->GetZref(0);
      nLayers++;
      AliTRDcluster *cl(NULL);
      for(Int_t itb = 0; itb < 30; itb++){
        if(!tracklet[iLayer]->IsUsable(itb)) continue;
        if(!(cl = tracklet[iLayer]->GetClusters(itb))) continue;
        
        if(!strcmp(direction, "y"))
          clp[ncls] = cl->GetY();
        else
          clp[ncls] = cl->GetZ();
        clx[ncls] = cl->GetX();
        ncls++;
      }
    }
    // Add function derived by the tilted Rieman fit (Defined by the curvature)
    Int_t nPoints = 0;
    if(!strcmp(direction, "y")){
      Double_t a = fitter->GetParameter(0);
      Double_t b = fitter->GetParameter(1);
      Double_t c = fitter->GetParameter(2);
      Double_t curvature =  1.0 + b*b - c*a;
      if (curvature > 0.0) {
        curvature  =  a / TMath::Sqrt(curvature);
      }
      // Numerical evaluation of the function:
      for(Int_t ipt = 0; ipt < 1000; ipt++){
        Float_t x = kxmin + ipt * kxdelta;
        Double_t res = (x * a + b);								// = (x - x0)/y0
        res *= res;
        res  = 1.0 - c * a + b * b - res;					// = (R^2 - (x - x0)^2)/y0^2
        Double_t y = 0.;
        if (res >= 0) {
          res = TMath::Sqrt(res);
          y    = (1.0 - res) / a;
        }
        fitfun->SetPoint(nPoints++, y, x);
      }
    }
    else{
      Double_t offset	= fitter->GetParameter(3);
      Double_t slope	= fitter->GetParameter(4);	 
      // calculate the reference x (defined as medium between layer 2 and layer 3)
      // same procedure as in the tracker code
      Float_t medx = 0, xref = 0;
      Int_t startIndex = 5, nDistances = 0;
      for(Int_t iLayer = 5; iLayer > 0; iLayer--){
        if(tracklet[iLayer]->IsOK() && tracklet[iLayer - 1]->IsOK()){
          medx += tracklet[iLayer]->GetX0() - tracklet[iLayer - 1]->GetX0();
          startIndex = iLayer - 1;
          nDistances++;
        }
      }
      if(nDistances){
        medx /= nDistances;
      }
      else{
        Float_t xpos[2];	memset(xpos, 0, sizeof(Float_t) * 2);
        Int_t ien = 0, idiff = 0;
        for(Int_t iLayer = 5; iLayer > 0; iLayer--){
          if(tracklet[iLayer]->IsOK()){
            xpos[ien++] = tracklet[iLayer]->GetX0();
            startIndex = iLayer;
          }
          if(ien)
            idiff++;
          if(ien >=2)
            break;
        }
        medx = (xpos[0] - xpos[1])/idiff;
      }
      xref = tracklet[startIndex]->GetX0() + medx * (2.5 - startIndex) - 0.5 * (AliTRDgeometry::AmThick() + AliTRDgeometry::DrThick());

      for(Int_t ipt = 0; ipt < 1000; ipt++){
        Float_t x = kxmin + ipt * kxdelta;
        Float_t z = offset + slope * (x - xref);
        fitfun->SetPoint(nPoints++, z, x);
      }
    }
    break;
  }
  if(found){
    TGraph *trGraph		= new TGraph(ncls);
    TGraph *refPoints	= new TGraph(nLayers);
    trGraph->SetMarkerStyle(20);
    trGraph->SetMarkerColor(kRed);
    refPoints->SetMarkerStyle(21);
    refPoints->SetMarkerColor(kBlue);
    // fill the graphs
    for(Int_t iLayer = 0; iLayer < nLayers; iLayer++)
      refPoints->SetPoint(iLayer, refP[iLayer], x0[iLayer]);
    for(Int_t icls = 0; icls < ncls; icls++)
      trGraph->SetPoint(icls, clp[icls], clx[icls]);
    TCanvas *c1 = new TCanvas();
    trGraph->SetTitle(Form("Event %d, Candidate %d\n", fgEventNumber, fgCandidateNumber));
    refPoints->SetTitle(Form("Event %d, Candidate %d\n", fgEventNumber, fgCandidateNumber));
    fitfun->SetTitle(Form("Event %d, Candidate %d\n", fgEventNumber, fgCandidateNumber));
    trGraph->Draw("ap");
    refPoints->Draw("psame");
    fitfun->Draw("lpsame");
    return c1;
  }
  else{
    AliError(Form("Combination consisting of event %d and candidate %d not found", event, candidate));
    delete fitfun;
    return NULL;
  }
}

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