2fd1d41b6cf02747fe3adc8a7e5495b52135cf63
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUVertexer.h
1 #ifndef ALIITSUVERTEXER_H
2 #define ALIITSUVERTEXER_H
3 //#define MC_CHECK // comment out to enable MC checks for debugging
4
5 #include "AliVertexer.h"
6
7 /* Copyright(c) 2009-2014, ALICE Experiment at CERN, All rights reserved. *
8  * See cxx source for full Copyright notice                               */
9  
10 /////////////////////////////////////////////////////////////////////////////
11 //     Class for the reconstruction of the primary vertices using ITSU     //
12 /////////////////////////////////////////////////////////////////////////////
13
14 class TClonesArray;
15 class AliESDVertex;
16
17 class AliITSUVertexer : public AliVertexer {
18  public:
19   
20   // Constructors and destructors
21   AliITSUVertexer(Double_t phicut=0.005,Double_t zcut=0.002,Double_t paircut=0.04, Double_t clustercut=0.8, Int_t clcontrib=5);
22   virtual ~AliITSUVertexer();
23
24   // Public methods
25   virtual AliESDVertex* GetAllVertices(Int_t& nVert) const { nVert=fNoVertices; return fVertices; };
26   virtual AliESDVertex* FindVertexForCurrentEvent(TTree *); 
27   virtual void PrintStatus() const;
28
29   // Getters
30   UInt_t   GetNoLines()       const { return fNoLines;    }
31   UShort_t GetNumOfVertices() const { return fNoVertices; }
32
33   // Setters
34   void SetPhiCut(Double_t phicut) { fPhiCut=phicut; }
35   void SetZCut(Double_t zcut)     { fZCut=zcut; }
36
37   #ifdef MC_CHECK
38   // Debug + MC truth
39   UInt_t* GetParticleId(UInt_t &num) const { num=fGoodLines; return fParticleId; }
40   UInt_t GetGoodLines() const { return fGoodLines; }
41   UInt_t GetGoodLinesPhi() const { return fGoodLinesPhi; }
42   UInt_t GetLinesPhi() const { return fLinesPhi; }
43   #endif
44
45  protected:
46   // Methods
47   AliITSUVertexer(AliITSUVertexer&);
48   AliITSUVertexer& operator=(const AliITSUVertexer& other);
49   void AddToCluster(UInt_t line,Bool_t weight=kFALSE,Int_t cl=-1);
50   void CleanAndOrderClusters();
51   void Clusterize(UInt_t l1, UInt_t l2, Bool_t weight=kFALSE);
52   void ComputeClusterCentroid(UInt_t cl);
53   void FindTracklets();
54   void FindVerticesForCurrentEvent();
55   Int_t MatchPoints(UShort_t layer, Double_t anchor, Double_t *p0=0x0, Double_t *p1=0x0);
56   void MoveLabels(Short_t start, Short_t end);
57   void Reset();
58   void SortClusters();
59
60   // Data members
61   Int_t fClusterContribCut;
62   Double_t fClusterCut;
63   Int_t *fClusterIndex[3];           // AliITSUClusterPix index 
64   Double_t *fClusterPhi[3];          // Phi of clusters
65   TClonesArray *fClusters[3];        //! array of pointers to TClonesArray of AliITSUClusterPix not owned by this class
66   TClonesArray fLines;               //! array of tracklets
67   TClonesArray fLinesClusters;       // array of vertex candidates
68   UInt_t fLinesPhi;                  // number of tracklets built by using the first two layers
69   UInt_t fNoClusters;                // number of clusters
70   UInt_t fNoLines;                   // number of tracklets
71   UShort_t fNoVertices;              // number of vertices
72   Double_t fPairCut;                 // cut on pair
73   Double_t fPhiCut;                  // cut on deltaphi for cluster matching among first two layers
74   Double_t fZCut;                    // cut on deltatheta for cluster matching among first two layers and the third one
75   Bool_t *fUsedClusters[3];          // flag for used clusters in tracklet formation
76   Short_t *fUsedLines;               // flag for used lines
77   AliESDVertex *fVertices;           // array of vertices
78
79   #ifdef MC_CHECK
80   // MC truth methods
81   Bool_t CheckMC(UInt_t,UInt_t,UInt_t);
82
83   // MC truth data members
84   UInt_t fGoodLines;
85   UInt_t fGoodLinesPhi;
86   UInt_t *fParticleId;  
87   #endif
88
89   ClassDef(AliITSUVertexer,1)
90 };
91
92 #endif