ROOT logo
/**************************************************************************
 * Copyright(c) 2009-2010, 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.                  *
 **************************************************************************/
#include<Riostream.h>
#include<TClonesArray.h>
#include<TMath.h>
#include "AliStrLine.h"
#include "AliITSSortTrkl.h"

/* $Id$ */

////////////////////////////////////////////////////////////////////////
//           Helper class for finding multiple primary vertices       //
//           To be used by AliITSVertexer3D                           //
//           It is based on the association of pairs of tracklets     //
//           obtained by matching reconstructed points onthe first    //
//           2 layers of SPD                                          //
//           Origin M. Masera masera@to.infn.it                       //
////////////////////////////////////////////////////////////////////////


ClassImp(AliITSSortTrkl)

//______________________________________________________________________
AliITSSortTrkl::AliITSSortTrkl():TObject(),
fkSize(0),
fIndex(0),
fPairs(NULL),
fClustersTmp(NULL),
fClusters(NULL),
fNoClus(0),
fSize(NULL),
fMark(),
fCut(0.),
fCoarseMaxRCut(0.)
{
  // Default constructor
}

//______________________________________________________________________
AliITSSortTrkl::AliITSSortTrkl(Int_t n, Double_t cut):TObject(),
fkSize(n),
fIndex(0),
fPairs(),
fClustersTmp(NULL),
fClusters(NULL),
fNoClus(0),
fSize(NULL),
fMark(n),
fCut(cut),
fCoarseMaxRCut(0.) {
  // Standard constructor
  fPairs = new AliITSTracklPairs* [fkSize];
  fClustersTmp = new Int_t* [fkSize-1];
  for(Int_t i=0; i<fkSize-1; i++) fClustersTmp[i]=NULL;
}

//______________________________________________________________________
AliITSSortTrkl::AliITSSortTrkl(TClonesArray &tclo, Int_t n, Double_t cut, Double_t rcut):TObject(),
fkSize(n),
fIndex(0),
fPairs(),
fClustersTmp(NULL),
fClusters(NULL),
fNoClus(0),
fSize(NULL),
fMark(n),
fCut(cut),
fCoarseMaxRCut(rcut){
  // Constructor based on a TClonesArray of AliStrLine
  Int_t numtrack=tclo.GetEntriesFast();
  if(numtrack<2){
    AliFatal(Form("Insufficient number of tracks (%d )",numtrack));
    return;
  }
  TObject *member = tclo[0];
  TString str(member->ClassName());
  if(!(str.Contains("AliStrLine"))){
    AliFatal(Form("Wrong type of class in input TClonesArray (%s )",str.Data()));
    return;
  }
  Int_t siz = numtrack*(numtrack-1)/2;
  if(fkSize < siz){
    AliError(Form("fkSize is too small. It is %d and it should be %d",fkSize,siz)); 
  }
  fPairs = new AliITSTracklPairs* [fkSize];
  fClustersTmp = new Int_t* [fkSize-1];
  for(Int_t i=0; i<fkSize-1; i++) fClustersTmp[i]=NULL;
  for(Int_t i=0;i<numtrack-1;i++){
    AliStrLine *one = (AliStrLine*)tclo[i];
    for(Int_t j=i+1;j<numtrack;j++){
      AliStrLine *two = (AliStrLine*)tclo[j];
      Double_t point[3];
      one->Cross(two,point);
      Double_t dca = one->GetDCA(two);
      if(dca>fCut)continue;
      Double_t rad=TMath::Sqrt(point[0]*point[0]+point[1]*point[1]);
      if(rad>fCoarseMaxRCut)continue;
      AddPairs(i,j,dca,point);
    }
  } 
}

//______________________________________________________________________
AliITSSortTrkl::~AliITSSortTrkl(){
  // Destructor
  if(fPairs){
    for(Int_t i=0;i<fIndex;i++)delete fPairs[i];
    delete [] fPairs;
  }
  DeleteClustersTmp();
  if(fClusters){
    for(Int_t i=0;i<fNoClus;i++)delete [] fClusters[i];
    delete [] fClusters;
    delete [] fSize;
  } 
}

//______________________________________________________________________
void AliITSSortTrkl::DeleteClustersTmp(){
  // fClustersTmp is deleted
  if(fClustersTmp){
    for(Int_t i=0;i<fIndex-1;i++){
      if(fClustersTmp[i]){
	delete []fClustersTmp[i];
      }
    }
    delete [] fClustersTmp;
    fClustersTmp = NULL;
  }
}

//______________________________________________________________________
Int_t AliITSSortTrkl::AddPairs(Int_t t1, Int_t t2, Double_t dca, Double_t *coo){
  // Add a tracklet pair at current position
  fPairs[fIndex] = new AliITSTracklPairs(t1,t2,dca,coo);
  //  cout<<"Pair "<<fIndex<<" Tracklets "<<t1<<" and "<<t2<<". DCA= "<<dca<<" Crossing "<<coo[0]<<" "<<coo[1]<<" "<<coo[2]<<endl;
  fIndex++;
  return fIndex-1;
}

//______________________________________________________________________
Int_t AliITSSortTrkl::FindClusters(){
  // find clusters
  if(fIndex<2){
    AliWarning(Form("fIndex = %d",fIndex));
    fNoClus = 0;
    return fNoClus;
  }
  fMark.ResetAllBits();
  PrepareClustersTmp();
  //  cout<<"AliITSSortTrkl::FindClusters fkSize "<<fkSize<<"; fIndex "<<fIndex<<endl;
  for(Int_t i=0; i<fIndex-1;i++){
    Int_t *v=fClustersTmp[i];
    AliDebug(25,Form("Starting clustering for pair number %d",i));
    Clustering(i,v);  
    if(v[0]>0){
      AliDebug(25,Form("Clusters starting from pair %d : %d",i,v[0]));
      Int_t dim;
      v[v[0]+1]=i;
      // arr will contain the labels of the tracks associated to
      // the cluster of pairs starting from pair i.
      Int_t *arr=FindLabels(v+1,2*(v[0]+1),dim);

      /*
      cout<<"AliITSSortTrkl::FindClusters: Pairs involved \n";
      for(Int_t j=1;j<=v[0]+1;j++){
	cout<<v[j]<<" ";
	if(j%10==0)cout<<endl;
      }
      cout<<endl;
      cout<<"AliITSSortTrkl::FindClusters: Tracklets involved\n";
      for(Int_t j=0;j<dim;j++){
	cout<<arr[j]<<" ";
	if(j%10==0 && j>0)cout<<endl;
      }
      cout<<endl;
      */

      //In the following loop, all the pairs having 
      // one tracklet already associated to the cluster starting
      // at pair i are marked, in order to be excluded from further
      // searches    
      for(Int_t j=0;j<fIndex;j++){
	if(fMark.TestBitNumber(j))continue;
	for(Int_t k=0;k<dim;k++){
	  if(fPairs[j]->HasTrack(arr[k])){
	    fMark.SetBitNumber(j);
	    // cout<<"Marked pair "<<j<<" because has tracklet "<<arr[k]<<endl;
	    k=dim;
	  }
	}
      }
    
      delete []arr;
    }
  }
  // The following method builds the array fClusters
  Cleanup();
  return fNoClus;
}

//______________________________________________________________________
void AliITSSortTrkl::Cleanup(){
  // empty arrays are eliminated, the others are sorted according
  // to cluster multiplicity
  AliDebug(25,Form("fIndex = %d",fIndex));
  Int_t *siz = new Int_t[fIndex-1];
  Int_t *index = new Int_t[fIndex-1];
  fNoClus=0;
  for(Int_t i=0; i<fIndex-1;i++){
    Int_t *v=fClustersTmp[i];
    if(v[0]>0)fNoClus++;
    siz[i]=v[0];
  }
  if(fNoClus == 0){
    delete []siz;
    delete [] index;
    return;
  }
  AliDebug(25,Form("fNoClus = %d",fNoClus));
  TMath::Sort(fIndex-1,siz,index);
  fClusters = new Int_t* [fNoClus];
  fSize = new Int_t [fNoClus];
  for(Int_t i=0;i<fNoClus;i++){
    //    cout<<"AliITSSortTrkl::Cleanup: Cluster number "<<i<<"; Index= "<<index[i]<<endl;
    Int_t curind = index[i];
    Int_t *v=fClustersTmp[curind];
    fClusters[i] = new Int_t[v[0]+1];
    fSize[i]=v[0]+1;
    //    cout<<"AliITSSortTrkl::Cleanup: Size = "<<fSize[i]<<endl;
    Int_t *vext=fClusters[i];
    vext[0]=curind;
    for(Int_t j=1;j<fSize[i];j++)vext[j]=v[j];
    /*
    for(Int_t j=0;j<fSize[i];j++){
      cout<<vext[j]<<" ";
      if(j%10 == 0 && j!=0)cout<<endl;
    }
    cout<<endl;
    */
  }
  delete []siz;
  delete [] index;
}

//______________________________________________________________________
Int_t* AliITSSortTrkl::GetTrackletsLab(Int_t index, Int_t& dim) const {
  // Returns the tracklet labels corresponding to cluster index
  // Calling code must take care of memory deallocation
  AliDebug(25,Form("called with parameters %d %d",index,dim));
  if(fNoClus <=0){
    dim = 0;
    return NULL;
  }
  Int_t dimmax = 2*GetSizeOfCluster(index);
  AliDebug(25,Form("dimmax = %d",dimmax));
  if(dimmax<=0){
    dim = 0;
    return NULL;
  } 
  Int_t *v = GetClusters(index);
  return FindLabels(v,dimmax,dim);
}

//______________________________________________________________________
Int_t* AliITSSortTrkl::FindLabels(Int_t *v, Int_t dimmax, Int_t& dim) const {
  // Returns the tracklet labels corresponding to te list of pairs 
  // contained in v.
  // Calling code must take care of memory deallocation

  //  cout<<"AliITSSortTrkl::Findlabels parameters "<<v<<" dimmax = "<<dimmax<<" dim "<<dim<<endl;
  Int_t *arr = new Int_t [dimmax];
  Int_t j=0;
  for(Int_t i=0; i<dimmax/2; i++){
    AliITSTracklPairs *pai=GetPairsAt(v[i]);
    arr[j++]=pai->GetTrack1();
    //    cout<<"AliITSSortTrkl::FindLabels - i="<<i<<" arr["<<j-1<<"]= "<<arr[j-1]<<endl;
    arr[j++]=pai->GetTrack2();
    //    cout<<"AliITSSortTrkl::FindLabels arr["<<j-1<<"]= "<<arr[j-1]<<endl;
  }
  SortAndClean(dimmax,arr,dim);
  return arr;
}
//______________________________________________________________________
void AliITSSortTrkl::SortAndClean(Int_t numb, Int_t *arr, Int_t& numb2){
  // Array arr (with numb elements) is sorted in ascending order. 
  // Then possible reoccurrences
  // of elements are eliminated. numb2 is the number of remaining elements
  // after cleanup.
   
  //  cout<<"AliITSSortTrkl::SortAndClean - Parameters: numb= "<<numb<<" numb2= "<<numb2<<endl;
  if(numb<=0)return;
  Int_t* index = new Int_t[numb];
  TMath::Sort(numb,arr,index,kFALSE);
  Int_t* tmp = new Int_t[numb];
  numb2 = 0;
  tmp[0] = arr[index[0]];
  for(Int_t i=1;i<numb;i++){
    if(arr[index[i]] != tmp[numb2]){
      ++numb2;
      tmp[numb2]=arr[index[i]];
    }
  }
  ++numb2;
  /*
  cout<<"AliITSSortTrkl::SortAndClean - numb2 = "<<numb2<<endl;
  for(Int_t i=0;i<numb;i++){
    if(i<numb2){
      arr[i]=tmp[i];
      cout<<"arr["<<i<<"]= "<<arr[i]<<endl;
    }
    else {
      arr[i]=0;
    }
  }
  */
  delete [] index;
  delete [] tmp;
}

//______________________________________________________________________
void AliITSSortTrkl::PrepareClustersTmp(){
  // prepare arrays of clusters
  for(Int_t i=0; i<fIndex-1;i++){
    fClustersTmp[i] = new Int_t [fIndex+1];
    Int_t *v = fClustersTmp[i];
    v[0]=0;
    for(Int_t j=1;j<fIndex+1;j++)v[j]=-1;
  }
}


//______________________________________________________________________
void AliITSSortTrkl::Clustering(Int_t i,Int_t *v){
  // recursive method to build up clusters starting from point i
  AliDebug(25,Form("Clustering called for pair %d",i));
  if(fMark.TestBitNumber(i)){
    AliDebug(25,Form("Leaving Clustering for pair %d - nothing done",i));
  return;
  }
  AliITSTracklPairs *p1 = fPairs[i];
  for(Int_t j=0;j<fIndex;j++){
    if(j == i) continue;
    if(fMark.TestBitNumber(j))continue;
    AliITSTracklPairs *p2 = fPairs[j];
    Double_t dist = p1->GetDistance(*p2);
    //    AliInfo(Form("  ******* i %d , j %d . Distance %g ",i,j,dist));
    if(dist<=fCut){
      Int_t dimclu=v[0];
      Bool_t already = kFALSE;
      for(Int_t k=1;k<=dimclu;k++){
	if(v[k]==j)already=kTRUE;
      }
      if(!already){
	++dimclu;
	v[0]=dimclu;
	fMark.SetBitNumber(i);
	AliDebug(25,Form("Marked pair %d - and call Clustering for pair %d",i,j));
	v[dimclu]=j;
	Clustering(j,v);
	fMark.SetBitNumber(j);
	AliDebug(25,Form("Marked pair %d",j));
      }
    }
  }
  AliDebug(25,Form("Leaving Clustering for pair %d ",i));
}





 AliITSSortTrkl.cxx:1
 AliITSSortTrkl.cxx:2
 AliITSSortTrkl.cxx:3
 AliITSSortTrkl.cxx:4
 AliITSSortTrkl.cxx:5
 AliITSSortTrkl.cxx:6
 AliITSSortTrkl.cxx:7
 AliITSSortTrkl.cxx:8
 AliITSSortTrkl.cxx:9
 AliITSSortTrkl.cxx:10
 AliITSSortTrkl.cxx:11
 AliITSSortTrkl.cxx:12
 AliITSSortTrkl.cxx:13
 AliITSSortTrkl.cxx:14
 AliITSSortTrkl.cxx:15
 AliITSSortTrkl.cxx:16
 AliITSSortTrkl.cxx:17
 AliITSSortTrkl.cxx:18
 AliITSSortTrkl.cxx:19
 AliITSSortTrkl.cxx:20
 AliITSSortTrkl.cxx:21
 AliITSSortTrkl.cxx:22
 AliITSSortTrkl.cxx:23
 AliITSSortTrkl.cxx:24
 AliITSSortTrkl.cxx:25
 AliITSSortTrkl.cxx:26
 AliITSSortTrkl.cxx:27
 AliITSSortTrkl.cxx:28
 AliITSSortTrkl.cxx:29
 AliITSSortTrkl.cxx:30
 AliITSSortTrkl.cxx:31
 AliITSSortTrkl.cxx:32
 AliITSSortTrkl.cxx:33
 AliITSSortTrkl.cxx:34
 AliITSSortTrkl.cxx:35
 AliITSSortTrkl.cxx:36
 AliITSSortTrkl.cxx:37
 AliITSSortTrkl.cxx:38
 AliITSSortTrkl.cxx:39
 AliITSSortTrkl.cxx:40
 AliITSSortTrkl.cxx:41
 AliITSSortTrkl.cxx:42
 AliITSSortTrkl.cxx:43
 AliITSSortTrkl.cxx:44
 AliITSSortTrkl.cxx:45
 AliITSSortTrkl.cxx:46
 AliITSSortTrkl.cxx:47
 AliITSSortTrkl.cxx:48
 AliITSSortTrkl.cxx:49
 AliITSSortTrkl.cxx:50
 AliITSSortTrkl.cxx:51
 AliITSSortTrkl.cxx:52
 AliITSSortTrkl.cxx:53
 AliITSSortTrkl.cxx:54
 AliITSSortTrkl.cxx:55
 AliITSSortTrkl.cxx:56
 AliITSSortTrkl.cxx:57
 AliITSSortTrkl.cxx:58
 AliITSSortTrkl.cxx:59
 AliITSSortTrkl.cxx:60
 AliITSSortTrkl.cxx:61
 AliITSSortTrkl.cxx:62
 AliITSSortTrkl.cxx:63
 AliITSSortTrkl.cxx:64
 AliITSSortTrkl.cxx:65
 AliITSSortTrkl.cxx:66
 AliITSSortTrkl.cxx:67
 AliITSSortTrkl.cxx:68
 AliITSSortTrkl.cxx:69
 AliITSSortTrkl.cxx:70
 AliITSSortTrkl.cxx:71
 AliITSSortTrkl.cxx:72
 AliITSSortTrkl.cxx:73
 AliITSSortTrkl.cxx:74
 AliITSSortTrkl.cxx:75
 AliITSSortTrkl.cxx:76
 AliITSSortTrkl.cxx:77
 AliITSSortTrkl.cxx:78
 AliITSSortTrkl.cxx:79
 AliITSSortTrkl.cxx:80
 AliITSSortTrkl.cxx:81
 AliITSSortTrkl.cxx:82
 AliITSSortTrkl.cxx:83
 AliITSSortTrkl.cxx:84
 AliITSSortTrkl.cxx:85
 AliITSSortTrkl.cxx:86
 AliITSSortTrkl.cxx:87
 AliITSSortTrkl.cxx:88
 AliITSSortTrkl.cxx:89
 AliITSSortTrkl.cxx:90
 AliITSSortTrkl.cxx:91
 AliITSSortTrkl.cxx:92
 AliITSSortTrkl.cxx:93
 AliITSSortTrkl.cxx:94
 AliITSSortTrkl.cxx:95
 AliITSSortTrkl.cxx:96
 AliITSSortTrkl.cxx:97
 AliITSSortTrkl.cxx:98
 AliITSSortTrkl.cxx:99
 AliITSSortTrkl.cxx:100
 AliITSSortTrkl.cxx:101
 AliITSSortTrkl.cxx:102
 AliITSSortTrkl.cxx:103
 AliITSSortTrkl.cxx:104
 AliITSSortTrkl.cxx:105
 AliITSSortTrkl.cxx:106
 AliITSSortTrkl.cxx:107
 AliITSSortTrkl.cxx:108
 AliITSSortTrkl.cxx:109
 AliITSSortTrkl.cxx:110
 AliITSSortTrkl.cxx:111
 AliITSSortTrkl.cxx:112
 AliITSSortTrkl.cxx:113
 AliITSSortTrkl.cxx:114
 AliITSSortTrkl.cxx:115
 AliITSSortTrkl.cxx:116
 AliITSSortTrkl.cxx:117
 AliITSSortTrkl.cxx:118
 AliITSSortTrkl.cxx:119
 AliITSSortTrkl.cxx:120
 AliITSSortTrkl.cxx:121
 AliITSSortTrkl.cxx:122
 AliITSSortTrkl.cxx:123
 AliITSSortTrkl.cxx:124
 AliITSSortTrkl.cxx:125
 AliITSSortTrkl.cxx:126
 AliITSSortTrkl.cxx:127
 AliITSSortTrkl.cxx:128
 AliITSSortTrkl.cxx:129
 AliITSSortTrkl.cxx:130
 AliITSSortTrkl.cxx:131
 AliITSSortTrkl.cxx:132
 AliITSSortTrkl.cxx:133
 AliITSSortTrkl.cxx:134
 AliITSSortTrkl.cxx:135
 AliITSSortTrkl.cxx:136
 AliITSSortTrkl.cxx:137
 AliITSSortTrkl.cxx:138
 AliITSSortTrkl.cxx:139
 AliITSSortTrkl.cxx:140
 AliITSSortTrkl.cxx:141
 AliITSSortTrkl.cxx:142
 AliITSSortTrkl.cxx:143
 AliITSSortTrkl.cxx:144
 AliITSSortTrkl.cxx:145
 AliITSSortTrkl.cxx:146
 AliITSSortTrkl.cxx:147
 AliITSSortTrkl.cxx:148
 AliITSSortTrkl.cxx:149
 AliITSSortTrkl.cxx:150
 AliITSSortTrkl.cxx:151
 AliITSSortTrkl.cxx:152
 AliITSSortTrkl.cxx:153
 AliITSSortTrkl.cxx:154
 AliITSSortTrkl.cxx:155
 AliITSSortTrkl.cxx:156
 AliITSSortTrkl.cxx:157
 AliITSSortTrkl.cxx:158
 AliITSSortTrkl.cxx:159
 AliITSSortTrkl.cxx:160
 AliITSSortTrkl.cxx:161
 AliITSSortTrkl.cxx:162
 AliITSSortTrkl.cxx:163
 AliITSSortTrkl.cxx:164
 AliITSSortTrkl.cxx:165
 AliITSSortTrkl.cxx:166
 AliITSSortTrkl.cxx:167
 AliITSSortTrkl.cxx:168
 AliITSSortTrkl.cxx:169
 AliITSSortTrkl.cxx:170
 AliITSSortTrkl.cxx:171
 AliITSSortTrkl.cxx:172
 AliITSSortTrkl.cxx:173
 AliITSSortTrkl.cxx:174
 AliITSSortTrkl.cxx:175
 AliITSSortTrkl.cxx:176
 AliITSSortTrkl.cxx:177
 AliITSSortTrkl.cxx:178
 AliITSSortTrkl.cxx:179
 AliITSSortTrkl.cxx:180
 AliITSSortTrkl.cxx:181
 AliITSSortTrkl.cxx:182
 AliITSSortTrkl.cxx:183
 AliITSSortTrkl.cxx:184
 AliITSSortTrkl.cxx:185
 AliITSSortTrkl.cxx:186
 AliITSSortTrkl.cxx:187
 AliITSSortTrkl.cxx:188
 AliITSSortTrkl.cxx:189
 AliITSSortTrkl.cxx:190
 AliITSSortTrkl.cxx:191
 AliITSSortTrkl.cxx:192
 AliITSSortTrkl.cxx:193
 AliITSSortTrkl.cxx:194
 AliITSSortTrkl.cxx:195
 AliITSSortTrkl.cxx:196
 AliITSSortTrkl.cxx:197
 AliITSSortTrkl.cxx:198
 AliITSSortTrkl.cxx:199
 AliITSSortTrkl.cxx:200
 AliITSSortTrkl.cxx:201
 AliITSSortTrkl.cxx:202
 AliITSSortTrkl.cxx:203
 AliITSSortTrkl.cxx:204
 AliITSSortTrkl.cxx:205
 AliITSSortTrkl.cxx:206
 AliITSSortTrkl.cxx:207
 AliITSSortTrkl.cxx:208
 AliITSSortTrkl.cxx:209
 AliITSSortTrkl.cxx:210
 AliITSSortTrkl.cxx:211
 AliITSSortTrkl.cxx:212
 AliITSSortTrkl.cxx:213
 AliITSSortTrkl.cxx:214
 AliITSSortTrkl.cxx:215
 AliITSSortTrkl.cxx:216
 AliITSSortTrkl.cxx:217
 AliITSSortTrkl.cxx:218
 AliITSSortTrkl.cxx:219
 AliITSSortTrkl.cxx:220
 AliITSSortTrkl.cxx:221
 AliITSSortTrkl.cxx:222
 AliITSSortTrkl.cxx:223
 AliITSSortTrkl.cxx:224
 AliITSSortTrkl.cxx:225
 AliITSSortTrkl.cxx:226
 AliITSSortTrkl.cxx:227
 AliITSSortTrkl.cxx:228
 AliITSSortTrkl.cxx:229
 AliITSSortTrkl.cxx:230
 AliITSSortTrkl.cxx:231
 AliITSSortTrkl.cxx:232
 AliITSSortTrkl.cxx:233
 AliITSSortTrkl.cxx:234
 AliITSSortTrkl.cxx:235
 AliITSSortTrkl.cxx:236
 AliITSSortTrkl.cxx:237
 AliITSSortTrkl.cxx:238
 AliITSSortTrkl.cxx:239
 AliITSSortTrkl.cxx:240
 AliITSSortTrkl.cxx:241
 AliITSSortTrkl.cxx:242
 AliITSSortTrkl.cxx:243
 AliITSSortTrkl.cxx:244
 AliITSSortTrkl.cxx:245
 AliITSSortTrkl.cxx:246
 AliITSSortTrkl.cxx:247
 AliITSSortTrkl.cxx:248
 AliITSSortTrkl.cxx:249
 AliITSSortTrkl.cxx:250
 AliITSSortTrkl.cxx:251
 AliITSSortTrkl.cxx:252
 AliITSSortTrkl.cxx:253
 AliITSSortTrkl.cxx:254
 AliITSSortTrkl.cxx:255
 AliITSSortTrkl.cxx:256
 AliITSSortTrkl.cxx:257
 AliITSSortTrkl.cxx:258
 AliITSSortTrkl.cxx:259
 AliITSSortTrkl.cxx:260
 AliITSSortTrkl.cxx:261
 AliITSSortTrkl.cxx:262
 AliITSSortTrkl.cxx:263
 AliITSSortTrkl.cxx:264
 AliITSSortTrkl.cxx:265
 AliITSSortTrkl.cxx:266
 AliITSSortTrkl.cxx:267
 AliITSSortTrkl.cxx:268
 AliITSSortTrkl.cxx:269
 AliITSSortTrkl.cxx:270
 AliITSSortTrkl.cxx:271
 AliITSSortTrkl.cxx:272
 AliITSSortTrkl.cxx:273
 AliITSSortTrkl.cxx:274
 AliITSSortTrkl.cxx:275
 AliITSSortTrkl.cxx:276
 AliITSSortTrkl.cxx:277
 AliITSSortTrkl.cxx:278
 AliITSSortTrkl.cxx:279
 AliITSSortTrkl.cxx:280
 AliITSSortTrkl.cxx:281
 AliITSSortTrkl.cxx:282
 AliITSSortTrkl.cxx:283
 AliITSSortTrkl.cxx:284
 AliITSSortTrkl.cxx:285
 AliITSSortTrkl.cxx:286
 AliITSSortTrkl.cxx:287
 AliITSSortTrkl.cxx:288
 AliITSSortTrkl.cxx:289
 AliITSSortTrkl.cxx:290
 AliITSSortTrkl.cxx:291
 AliITSSortTrkl.cxx:292
 AliITSSortTrkl.cxx:293
 AliITSSortTrkl.cxx:294
 AliITSSortTrkl.cxx:295
 AliITSSortTrkl.cxx:296
 AliITSSortTrkl.cxx:297
 AliITSSortTrkl.cxx:298
 AliITSSortTrkl.cxx:299
 AliITSSortTrkl.cxx:300
 AliITSSortTrkl.cxx:301
 AliITSSortTrkl.cxx:302
 AliITSSortTrkl.cxx:303
 AliITSSortTrkl.cxx:304
 AliITSSortTrkl.cxx:305
 AliITSSortTrkl.cxx:306
 AliITSSortTrkl.cxx:307
 AliITSSortTrkl.cxx:308
 AliITSSortTrkl.cxx:309
 AliITSSortTrkl.cxx:310
 AliITSSortTrkl.cxx:311
 AliITSSortTrkl.cxx:312
 AliITSSortTrkl.cxx:313
 AliITSSortTrkl.cxx:314
 AliITSSortTrkl.cxx:315
 AliITSSortTrkl.cxx:316
 AliITSSortTrkl.cxx:317
 AliITSSortTrkl.cxx:318
 AliITSSortTrkl.cxx:319
 AliITSSortTrkl.cxx:320
 AliITSSortTrkl.cxx:321
 AliITSSortTrkl.cxx:322
 AliITSSortTrkl.cxx:323
 AliITSSortTrkl.cxx:324
 AliITSSortTrkl.cxx:325
 AliITSSortTrkl.cxx:326
 AliITSSortTrkl.cxx:327
 AliITSSortTrkl.cxx:328
 AliITSSortTrkl.cxx:329
 AliITSSortTrkl.cxx:330
 AliITSSortTrkl.cxx:331
 AliITSSortTrkl.cxx:332
 AliITSSortTrkl.cxx:333
 AliITSSortTrkl.cxx:334
 AliITSSortTrkl.cxx:335
 AliITSSortTrkl.cxx:336
 AliITSSortTrkl.cxx:337
 AliITSSortTrkl.cxx:338
 AliITSSortTrkl.cxx:339
 AliITSSortTrkl.cxx:340
 AliITSSortTrkl.cxx:341
 AliITSSortTrkl.cxx:342
 AliITSSortTrkl.cxx:343
 AliITSSortTrkl.cxx:344
 AliITSSortTrkl.cxx:345
 AliITSSortTrkl.cxx:346
 AliITSSortTrkl.cxx:347
 AliITSSortTrkl.cxx:348
 AliITSSortTrkl.cxx:349
 AliITSSortTrkl.cxx:350
 AliITSSortTrkl.cxx:351
 AliITSSortTrkl.cxx:352
 AliITSSortTrkl.cxx:353
 AliITSSortTrkl.cxx:354
 AliITSSortTrkl.cxx:355
 AliITSSortTrkl.cxx:356
 AliITSSortTrkl.cxx:357
 AliITSSortTrkl.cxx:358
 AliITSSortTrkl.cxx:359
 AliITSSortTrkl.cxx:360
 AliITSSortTrkl.cxx:361
 AliITSSortTrkl.cxx:362
 AliITSSortTrkl.cxx:363
 AliITSSortTrkl.cxx:364
 AliITSSortTrkl.cxx:365
 AliITSSortTrkl.cxx:366
 AliITSSortTrkl.cxx:367
 AliITSSortTrkl.cxx:368
 AliITSSortTrkl.cxx:369
 AliITSSortTrkl.cxx:370
 AliITSSortTrkl.cxx:371
 AliITSSortTrkl.cxx:372
 AliITSSortTrkl.cxx:373
 AliITSSortTrkl.cxx:374
 AliITSSortTrkl.cxx:375
 AliITSSortTrkl.cxx:376
 AliITSSortTrkl.cxx:377
 AliITSSortTrkl.cxx:378
 AliITSSortTrkl.cxx:379
 AliITSSortTrkl.cxx:380
 AliITSSortTrkl.cxx:381
 AliITSSortTrkl.cxx:382
 AliITSSortTrkl.cxx:383
 AliITSSortTrkl.cxx:384