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.                  *
 **************************************************************************/

//====================================================================================================================================================
//
//      Class for finding and building the clusters of the ALICE Muon Forward Tracker
//
//      Contact author: antonio.uras@cern.ch
//
//====================================================================================================================================================

#include "AliLog.h"
#include "TObjArray.h"
#include "TClonesArray.h"
#include "AliMFTDigit.h"
#include "AliMFTCluster.h"
#include "AliMFTSegmentation.h"
#include "TTree.h"
#include "TMath.h"
#include "AliMFTConstants.h"
#include "AliMFTClusterFinder.h"
#include "TRandom.h"

const Double_t AliMFTClusterFinder::fCutForAvailableDigits = AliMFTConstants::fCutForAvailableDigits;
const Double_t AliMFTClusterFinder::fCutForAttachingDigits = AliMFTConstants::fCutForAttachingDigits;
const Double_t AliMFTClusterFinder::fMisalignmentMagnitude = AliMFTConstants::fMisalignmentMagnitude;

ClassImp(AliMFTClusterFinder)

//====================================================================================================================================================

AliMFTClusterFinder::AliMFTClusterFinder() : 
  TObject(),
  fDigitsInCluster(0),
  fCurrentDigit(0),
  fCurrentCluster(0),
  fSegmentation(0),
  fNPlanes(0),
  fApplyMisalignment(kFALSE),
  fStopWatch(0)
{

  // Default constructor
  
  for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) fClustersPerPlane[iPlane] = NULL;
  fDigitsInCluster = new TClonesArray("AliMFTDigit", fNMaxDigitsPerCluster);
  fDigitsInCluster -> SetOwner(kTRUE);
  fStopWatch = new TStopwatch();
  fStopWatch -> Reset();

}

//====================================================================================================================================================

AliMFTClusterFinder::~AliMFTClusterFinder() {
  
  AliDebug(1, "Deleting AliMFTClusterFinder...");
  
  for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) {
    if (fClustersPerPlane[iPlane]) fClustersPerPlane[iPlane]->Delete(); delete fClustersPerPlane[iPlane]; fClustersPerPlane[iPlane] = 0x0;
  }
  if (fDigitsInCluster) fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster = NULL;
  delete fSegmentation; fSegmentation=NULL;

  delete fStopWatch;
  
  AliDebug(1, "... done!");
  
}

//====================================================================================================================================================

void AliMFTClusterFinder::Clear(const Option_t* /*opt*/) {
  
  AliDebug(1, "Clearing AliMFTClusterFinder...");
  
  for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) {
    if(fClustersPerPlane[iPlane]) fClustersPerPlane[iPlane]->Clear("C"); 
  }
  if(fDigitsInCluster) fDigitsInCluster->Clear("C");	
  fSegmentation->Clear("C"); 
  
  AliDebug(1, "... done!");
  
}

//====================================================================================================================================================

void AliMFTClusterFinder::Init(const Char_t *nameGeomFile) {

  fSegmentation = new AliMFTSegmentation(nameGeomFile);
  fNPlanes = fSegmentation -> GetNPlanes();
  
}

//====================================================================================================================================================

void AliMFTClusterFinder::StartEvent() {

  // Cleaning up and preparation for the clustering procedure

  AliDebug(1, "Starting Event...");
  
  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
    fClustersPerPlane[iPlane]->Delete();
  }

  AliDebug(1, "... done!");

}

//====================================================================================================================================================

void AliMFTClusterFinder::DigitsToClusters(const TObjArray *pDigitList) {

  // where the clusterization is performed

  AliInfo("Starting Clusterization for MFT");
  AliDebug(1, Form("nPlanes = %d", fNPlanes));

  if (!fStopWatch) fStopWatch = new TStopwatch();
  fStopWatch -> Reset();

  StartEvent(); 
  Bool_t isDigAvailableForNewCluster = kTRUE;
  
  TClonesArray *myDigitList = 0;

  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {

    AliDebug(1, Form("Plane %02d", iPlane));

    Int_t nDetElem = fSegmentation->GetPlane(iPlane)->GetNActiveElements();
    TClonesArray *clustersPerDetElem[fNMaxDetElemPerPlane] = {0};
    for (Int_t iDetElem=0; iDetElem<nDetElem; iDetElem++) clustersPerDetElem[iDetElem] = new TClonesArray("AliMFTCluster");

    myDigitList = (TClonesArray*) pDigitList->At(iPlane);

    AliDebug(1, Form("myDigitList->GetEntries() = %d", myDigitList->GetEntries()));

    Int_t cycleOverDigits = 0;
    Double_t myCutForAvailableDigits = 0;
    
    Int_t currentDetElem = -1;
    Int_t currentDetElemLocal = -1;
    Bool_t areThereSkippedDigits = kFALSE;

    fStopWatch -> Start();

    while (myDigitList->GetEntries()) {

      for (Int_t iDig=0; iDig<myDigitList->GetEntries(); iDig++) {

	fCurrentDigit = (AliMFTDigit*) myDigitList->At(iDig);

	if (!iDig) {
	  if (fCurrentDigit->GetDetElemID() != currentDetElem) {      
	    // first iteration over the digits of a specific detection element
	    currentDetElem = fCurrentDigit->GetDetElemID();
	    currentDetElemLocal = fSegmentation->GetDetElemLocalID(currentDetElem);
	    cycleOverDigits = 0;
	    myCutForAvailableDigits = fCutForAvailableDigits;
	  }
	  else if (fCurrentDigit->GetDetElemID()==currentDetElem && areThereSkippedDigits) {
	    // second (or further) iteration over the digits of a specific detection element
	    cycleOverDigits++;
	    myCutForAvailableDigits -= 0.5;
	  }
	  areThereSkippedDigits = kFALSE;
	}
	else {
	  areThereSkippedDigits = kTRUE;
	  if (fCurrentDigit->GetDetElemID() != currentDetElem) break;
	}

	isDigAvailableForNewCluster = kTRUE;

	for (Int_t iCluster=0; iCluster<clustersPerDetElem[currentDetElemLocal]->GetEntries(); iCluster++) {
	  fCurrentCluster = (AliMFTCluster*) clustersPerDetElem[currentDetElemLocal]->At(iCluster);
	  if (fCurrentCluster->GetDistanceFromPixel(fCurrentDigit) < fCutForAttachingDigits) { 
	    fCurrentCluster->AddPixel(fCurrentDigit); 
	    myDigitList->Remove(fCurrentDigit);
	    myDigitList->Compress();
	    iDig--;
	    isDigAvailableForNewCluster = kFALSE;
	    break; 
	  }
	  if (fCurrentCluster->GetDistanceFromPixel(fCurrentDigit) < myCutForAvailableDigits) isDigAvailableForNewCluster=kFALSE;
	}

	if (isDigAvailableForNewCluster) {
	  AliMFTCluster *newCluster = new AliMFTCluster();
	  newCluster->AddPixel(fCurrentDigit);
	  myDigitList->Remove(fCurrentDigit);
	  myDigitList->Compress();
	  iDig--;
	  new ((*clustersPerDetElem[currentDetElemLocal])[clustersPerDetElem[currentDetElemLocal]->GetEntries()]) AliMFTCluster(*newCluster);
	  delete newCluster;
	}
	
      }   // end of cycle over the digits

    }   // no more digits to check in current plane!

    fStopWatch -> Print("m");

    printf("Plane %d: clusters found in %f seconds\n",iPlane,fStopWatch->CpuTime());
    fStopWatch->Start();

    // Now we merge the cluster lists coming from each detection element, to build the cluster list of the plane

    Double_t misalignmentPhi = 2.*TMath::Pi()*gRandom->Rndm();
    Double_t misalignmentX   = fMisalignmentMagnitude*TMath::Cos(misalignmentPhi);
    Double_t misalignmentY   = fMisalignmentMagnitude*TMath::Sin(misalignmentPhi);

    AliMFTCluster *newCluster = NULL;
    for (Int_t iDetElem=0; iDetElem<nDetElem; iDetElem++) {
      for (Int_t iCluster=0; iCluster<clustersPerDetElem[iDetElem]->GetEntries(); iCluster++) {
	newCluster = (AliMFTCluster*) (clustersPerDetElem[iDetElem]->At(iCluster));
	newCluster -> TerminateCluster();
	newCluster -> SetClusterEditable(kTRUE);
	if (TMath::Abs(newCluster->GetZ())<TMath::Abs(fSegmentation->GetPlane(iPlane)->GetZCenter())) newCluster->SetClusterFront(kTRUE);
	else                                                                                          newCluster->SetClusterFront(kFALSE);
	if (fApplyMisalignment) {
	  newCluster -> SetX(newCluster->GetX()+misalignmentX);
	  newCluster -> SetY(newCluster->GetY()+misalignmentY);
	}
	newCluster -> SetClusterEditable(kFALSE);

	new ((*fClustersPerPlane[iPlane])[fClustersPerPlane[iPlane]->GetEntries()]) AliMFTCluster(*newCluster);
      }
    }

    printf("%d Clusters in plane %02d merged in %f seconds\n", fClustersPerPlane[iPlane]->GetEntries(), iPlane, fStopWatch->CpuTime());

    for (Int_t iDetElem=0; iDetElem<nDetElem; iDetElem++) {
      clustersPerDetElem[iDetElem] -> Delete();
      delete clustersPerDetElem[iDetElem];
    }

    myDigitList -> Delete();

  }  // end of cycle over the planes

}

//====================================================================================================================================================

void AliMFTClusterFinder::MakeClusterBranch(TTree *treeCluster) {

  // Creating the cluster branches, one for each plane (see AliMFTReconstructor::Reconstruct)

  AliDebug(1, "Making Cluster Branch");

  CreateClusters();

  if (treeCluster) {
    for(Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
      AliDebug(1, Form("Setting Branch Plane_%02d for treeCluster",iPlane));
      if (treeCluster->GetBranch(Form("Plane_%02d",iPlane))) continue;
      AliDebug(1, Form("Branch Plane_%02d does not exist, creating!",iPlane));
      treeCluster->Branch(Form("Plane_%02d",iPlane), &(fClustersPerPlane[iPlane])); 
    }
  }

}

//====================================================================================================================================================

void AliMFTClusterFinder::SetClusterTreeAddress(TTree *treeCluster) {

  // Addressing the cluster branches, one for each plane (see AliMFTReconstructor::Reconstruct)

  if (treeCluster && treeCluster->GetBranch("Plane_00")) {
    CreateClusters();
    for(Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
      if (treeCluster->GetBranch(Form("Plane_%02d",iPlane))) {
	treeCluster->SetBranchAddress(Form("Plane_%02d",iPlane), &(fClustersPerPlane[iPlane]));
      }
      else AliError(Form("No branch available with name Plane_%02d", iPlane));
    }
  }

}

//====================================================================================================================================================

void AliMFTClusterFinder::CreateClusters() {

  // create cluster list

  AliDebug(1, Form("Creating clusters list: nPlanes = %d",fNPlanes));

  if (fClustersPerPlane[0]) return;
  
  for(Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
    AliDebug(1, Form("plane %02d", iPlane));
    fClustersPerPlane[iPlane] = new TClonesArray("AliMFTCluster");
    fClustersPerPlane[iPlane] -> SetOwner(kTRUE);

  }

}

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