Line data Source code
1 : #ifndef ALIITSSORTTRKL_H
2 : #define ALIITSSORTTRKL_H
3 :
4 : /* Copyright(c) 2009-2010, ALICE Experiment at CERN, All rights reserved. *
5 : * See cxx source for full Copyright notice */
6 :
7 : /* $Id$ */
8 :
9 : ////////////////////////////////////////////////////////////////////////
10 : // Helper class for finding multiple primary vertices //
11 : // To be used by AliITSVertexer3D //
12 : // Origin M. Masera masera@to.infn.it //
13 : ////////////////////////////////////////////////////////////////////////
14 :
15 :
16 : #include<TBits.h>
17 : #include "AliLog.h"
18 : #include "AliITSTracklPairs.h"
19 :
20 : class TClonesArray;
21 :
22 : class AliITSSortTrkl : public TObject {
23 :
24 : public:
25 :
26 : AliITSSortTrkl();
27 : AliITSSortTrkl(Int_t n, Double_t cut = 0.05);
28 : AliITSSortTrkl(TClonesArray &tclo, Int_t n, Double_t cut, Double_t rcut);
29 : virtual ~AliITSSortTrkl();
30 : Int_t AddPairs(Int_t t1, Int_t t2, Double_t dca, Double_t *coo);
31 0 : Int_t GetIndex() const {return fIndex;}
32 : Int_t FindClusters();
33 0 : void SetCut(Double_t cut){fCut = cut;}
34 0 : Double_t GetCut() const {return fCut; }
35 0 : Int_t* GetClusters(Int_t index) const {if(index>=0 && index<fNoClus){return fClusters[index];} else {return NULL;}}
36 0 : Int_t GetNumberOfClusters() const {return fNoClus;}
37 0 : Int_t GetSizeOfCluster(Int_t index) const {if(index>=0 && index<fNoClus){return fSize[index];} else {return -1;}}
38 : static void SortAndClean(Int_t numb, Int_t *arr, Int_t& numb2);
39 : Int_t* GetTrackletsLab(Int_t index, Int_t& dim) const;
40 :
41 : // FOR DEBUGGING PURPOSES
42 0 : Int_t* GetClustersTmp(Int_t index){return fClustersTmp[index];}
43 0 : 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];} }
44 :
45 :
46 : protected:
47 :
48 : AliITSSortTrkl(const AliITSSortTrkl& pa);
49 : AliITSSortTrkl& operator=(const AliITSSortTrkl& /* pa */);
50 : void Cleanup();
51 : void DeleteClustersTmp();
52 : void PrepareClustersTmp();
53 : void Clustering(Int_t i, Int_t *v);
54 : Int_t* FindLabels(Int_t *v, Int_t dimmax, Int_t& dim) const;
55 :
56 : const Int_t fkSize; // Maximum number of tracklet pairs
57 : Int_t fIndex; // Total number of tracklet pairs (<=fkSize)
58 : AliITSTracklPairs **fPairs; // array of tracklet pairs (pointers to)
59 : Int_t **fClustersTmp; // Temporary list of clusters of tracklet pairs
60 : Int_t **fClusters; // List of clusters of tracklet pairs after cleanup
61 : Int_t fNoClus; // Number of clusters of tracklet pairs
62 : Int_t *fSize; // Number of pairs for each cluster
63 : TBits fMark; // Used to mask used pairs
64 : Double_t fCut; // cut on distance of DCAs of pairs for association
65 : Double_t fCoarseMaxRCut; // cut on distance from beam axis
66 :
67 118 : ClassDef(AliITSSortTrkl,0);
68 : };
69 :
70 : #endif
|