ROOT logo
#ifndef ALIITSSORTTRKL_H 
#define ALIITSSORTTRKL_H 

/* Copyright(c) 2009-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

////////////////////////////////////////////////////////////////////////
//           Helper class for finding multiple primary vertices       //
//           To be used by AliITSVertexer3D                           //
//           Origin M. Masera masera@to.infn.it                       //
////////////////////////////////////////////////////////////////////////


#include<TBits.h>
#include "AliLog.h"
#include "AliITSTracklPairs.h"

class TClonesArray;

class AliITSSortTrkl : public TObject {

 public:

  AliITSSortTrkl();
  AliITSSortTrkl(Int_t n, Double_t cut = 0.05);
  AliITSSortTrkl(TClonesArray &tclo, Int_t n, Double_t cut, Double_t rcut);
  virtual ~AliITSSortTrkl();
  Int_t AddPairs(Int_t t1, Int_t t2, Double_t dca, Double_t *coo);
  Int_t GetIndex() const {return fIndex;}
  Int_t FindClusters();
  void SetCut(Double_t cut){fCut = cut;}
  Double_t GetCut() const {return fCut; }
  Int_t* GetClusters(Int_t index) const {if(index>=0 && index<fNoClus){return fClusters[index];} else {return NULL;}}
  Int_t GetNumberOfClusters() const {return fNoClus;}
  Int_t GetSizeOfCluster(Int_t index) const {if(index>=0 && index<fNoClus){return fSize[index];} else {return -1;}}
  static void SortAndClean(Int_t numb, Int_t *arr, Int_t& numb2);
  Int_t* GetTrackletsLab(Int_t index, Int_t& dim) const;

  // FOR DEBUGGING PURPOSES
  Int_t* GetClustersTmp(Int_t index){return fClustersTmp[index];}
  AliITSTracklPairs* GetPairsAt(Int_t i) const {if(!(i>=0 && i<fIndex)){AliError(Form("Index %d out of bounds",i)); return NULL;} else{ return fPairs[i];} }


 protected:

  AliITSSortTrkl(const AliITSSortTrkl& pa);
  AliITSSortTrkl& operator=(const AliITSSortTrkl& /* pa */);
  void Cleanup();
  void DeleteClustersTmp();
  void PrepareClustersTmp();
  void Clustering(Int_t i, Int_t *v);
  Int_t* FindLabels(Int_t *v, Int_t dimmax, Int_t& dim) const;

  const Int_t fkSize;         // Maximum number of tracklet pairs
  Int_t fIndex;               // Total number of tracklet pairs (<=fkSize)
  AliITSTracklPairs **fPairs;  // array of tracklet pairs (pointers to)
  Int_t **fClustersTmp;      // Temporary list of clusters of tracklet pairs
  Int_t **fClusters;      // List of clusters of tracklet pairs after cleanup
  Int_t fNoClus;         // Number of clusters of tracklet pairs
  Int_t *fSize;          // Number of pairs for each cluster
  TBits fMark;           // Used to mask used pairs
  Double_t fCut;         // cut on distance of DCAs of pairs for association
  Double_t fCoarseMaxRCut;  // cut on distance from beam axis

 ClassDef(AliITSSortTrkl,0);
};

#endif
 AliITSSortTrkl.h:1
 AliITSSortTrkl.h:2
 AliITSSortTrkl.h:3
 AliITSSortTrkl.h:4
 AliITSSortTrkl.h:5
 AliITSSortTrkl.h:6
 AliITSSortTrkl.h:7
 AliITSSortTrkl.h:8
 AliITSSortTrkl.h:9
 AliITSSortTrkl.h:10
 AliITSSortTrkl.h:11
 AliITSSortTrkl.h:12
 AliITSSortTrkl.h:13
 AliITSSortTrkl.h:14
 AliITSSortTrkl.h:15
 AliITSSortTrkl.h:16
 AliITSSortTrkl.h:17
 AliITSSortTrkl.h:18
 AliITSSortTrkl.h:19
 AliITSSortTrkl.h:20
 AliITSSortTrkl.h:21
 AliITSSortTrkl.h:22
 AliITSSortTrkl.h:23
 AliITSSortTrkl.h:24
 AliITSSortTrkl.h:25
 AliITSSortTrkl.h:26
 AliITSSortTrkl.h:27
 AliITSSortTrkl.h:28
 AliITSSortTrkl.h:29
 AliITSSortTrkl.h:30
 AliITSSortTrkl.h:31
 AliITSSortTrkl.h:32
 AliITSSortTrkl.h:33
 AliITSSortTrkl.h:34
 AliITSSortTrkl.h:35
 AliITSSortTrkl.h:36
 AliITSSortTrkl.h:37
 AliITSSortTrkl.h:38
 AliITSSortTrkl.h:39
 AliITSSortTrkl.h:40
 AliITSSortTrkl.h:41
 AliITSSortTrkl.h:42
 AliITSSortTrkl.h:43
 AliITSSortTrkl.h:44
 AliITSSortTrkl.h:45
 AliITSSortTrkl.h:46
 AliITSSortTrkl.h:47
 AliITSSortTrkl.h:48
 AliITSSortTrkl.h:49
 AliITSSortTrkl.h:50
 AliITSSortTrkl.h:51
 AliITSSortTrkl.h:52
 AliITSSortTrkl.h:53
 AliITSSortTrkl.h:54
 AliITSSortTrkl.h:55
 AliITSSortTrkl.h:56
 AliITSSortTrkl.h:57
 AliITSSortTrkl.h:58
 AliITSSortTrkl.h:59
 AliITSSortTrkl.h:60
 AliITSSortTrkl.h:61
 AliITSSortTrkl.h:62
 AliITSSortTrkl.h:63
 AliITSSortTrkl.h:64
 AliITSSortTrkl.h:65
 AliITSSortTrkl.h:66
 AliITSSortTrkl.h:67
 AliITSSortTrkl.h:68
 AliITSSortTrkl.h:69
 AliITSSortTrkl.h:70