Updated tracklet algorithm (using phi, theta, phishift)
[u/mrichter/AliRoot.git] / ITS / AliITSMultReconstructor.h
1 #ifndef ALIITSMULTRECONSTRUCTOR_H
2 #define ALIITSMULTRECONSTRUCTOR_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //_________________________________________________________________________
9 // 
10 //        Implementation of the ITS-SPD trackleter class
11 //
12 // It retrieves clusters in the pixels (theta and phi) and finds tracklets.
13 // These can be used to extract charged particle multiplicity from the ITS.
14 //
15 // A tracklet consists of two ITS clusters, one in the first pixel layer and 
16 // one in the second. The clusters are associated if the differences in 
17 // Phi (azimuth) and Theta (polar angle) are within fiducial windows.
18 // In case of multiple candidates the candidate with minimum
19 // distance is selected. 
20 //_________________________________________________________________________
21
22 #include "TObject.h"
23
24 class TTree;
25 class TH1F;
26 class TH2F; 
27
28 class AliITSgeom;
29
30 class AliITSMultReconstructor : public TObject 
31 {
32 public:
33   AliITSMultReconstructor();
34   virtual ~AliITSMultReconstructor();
35
36   void Reconstruct(TTree* tree, Float_t* vtx, Float_t* vtxRes);
37   void LoadClusterFiredChips(TTree* tree);
38   void FlagClustersInOverlapRegions(Int_t ic1,Int_t ic2);
39
40   // Following members are set via AliITSRecoParam
41   void SetPhiWindow(Float_t w=0.08) {fPhiWindow=w;}
42   void SetThetaWindow(Float_t w=0.025) {fThetaWindow=w;}
43   void SetPhiShift(Float_t w=0.0045) {fPhiShift=w;}
44   void SetRemoveClustersFromOverlaps(Bool_t b = kFALSE) {fRemoveClustersFromOverlaps = b;}
45   void SetPhiOverlapCut(Float_t w=0.005) {fPhiOverlapCut=w;}
46   void SetZetaOverlapCut(Float_t w=0.05) {fZetaOverlapCut=w;}
47
48   Int_t GetNClustersLayer1() const {return fNClustersLay1;}
49   Int_t GetNClustersLayer2() const {return fNClustersLay2;}
50   Int_t GetNTracklets() const {return fNTracklets;}
51   Int_t GetNSingleClusters() const {return fNSingleCluster;}
52   Short_t GetNFiredChips(Int_t layer) const {return fNFiredChips[layer];}
53
54   Float_t* GetClusterLayer1(Int_t n) {return fClustersLay1[n];}
55   Float_t* GetClusterLayer2(Int_t n) {return fClustersLay2[n];}
56   Float_t* GetTracklet(Int_t n) {return fTracklets[n];}
57   Float_t* GetCluster(Int_t n) {return fSClusters[n];}
58
59   void SetHistOn(Bool_t b=kFALSE) {fHistOn=b;}
60   void SaveHists();
61
62 protected:
63   AliITSMultReconstructor(const AliITSMultReconstructor& mr);
64   AliITSMultReconstructor& operator=(const AliITSMultReconstructor& mr);
65
66   
67   Float_t**     fClustersLay1;               // clusters in the 1st layer of ITS 
68   Float_t**     fClustersLay2;               // clusters in the 2nd layer of ITS 
69   Int_t*        fDetectorIndexClustersLay1;  // module index for clusters 1st ITS layer
70   Int_t*        fDetectorIndexClustersLay2;  // module index for clusters 2nd ITS layer
71   Bool_t*       fOverlapFlagClustersLay1;    // flag for clusters in the overlap regions 1st ITS layer
72   Bool_t*       fOverlapFlagClustersLay2;    // flag for clusters in the overlap regions 2nd ITS layer 
73
74
75   Float_t**     fTracklets;            // tracklets 
76   Float_t**     fSClusters;            // single clusters (unassociated)
77   
78   Int_t         fNClustersLay1;        // Number of clusters (Layer1)
79   Int_t         fNClustersLay2;        // Number of clusters (Layer2)
80   Int_t         fNTracklets;           // Number of tracklets
81   Int_t         fNSingleCluster;       // Number of unassociated clusters
82   Short_t       fNFiredChips[2];       // Number of fired chips in the two SPD layers
83  
84   // Following members are set via AliITSRecoParam
85   Float_t       fPhiWindow;                    // Search window in phi
86   Float_t       fThetaWindow;                  // Search window in theta
87   Float_t       fPhiShift;                     // Phi shift reference value (at 0.5 T) 
88   Bool_t        fRemoveClustersFromOverlaps;   // Option to skip clusters in the overlaps
89   Float_t       fPhiOverlapCut;                // Fiducial window in phi for overlap cut
90   Float_t       fZetaOverlapCut;               // Fiducial window in eta for overlap cut
91
92   Bool_t        fHistOn;               // Option to define and fill the histograms 
93
94   TH1F*         fhClustersDPhiAcc;     // Phi2 - Phi1 for tracklets 
95   TH1F*         fhClustersDThetaAcc;   // Theta2 - Theta1 for tracklets 
96   TH1F*         fhClustersDPhiAll;     // Phi2 - Phi1 all the combinations 
97   TH1F*         fhClustersDThetaAll;   // Theta2 - Theta1 all the combinations
98  
99   TH2F*         fhDPhiVsDThetaAll;     // 2D plot for all the combinations  
100   TH2F*         fhDPhiVsDThetaAcc;     // same plot for tracklets 
101
102   TH1F*         fhetaTracklets;        // Pseudorapidity distr. for tracklets 
103   TH1F*         fhphiTracklets;        // Azimuthal (Phi) distr. for tracklets  
104   TH1F*         fhetaClustersLay1;     // Pseudorapidity distr. for Clusters L. 1
105   TH1F*         fhphiClustersLay1;     // Azimuthal (Phi) distr. for Clusters L. 1 
106
107
108   void LoadClusterArrays(TTree* tree);
109
110   ClassDef(AliITSMultReconstructor,6)
111 };
112
113 #endif