Updated version of the mutiplicity reconstruction with tracklets (Massimo)
[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 // AliITSMultReconstructor - find clusters in the pixels (theta and
11 // phi) and tracklets.
12 // 
13 // These can be used to extract charged particles multiplcicity from the ITS.
14 //
15 // A tracklet consist of two ITS clusters, one in the first pixel
16 // layer and one in the second. The clusters are associates if the 
17 // differencies in Phi (azimuth) and Zeta (longitudinal) are inside 
18 // a fiducial volume. In case of multiple candidates it is selected the
19 // candidate with minimum distance in Phi. 
20 // The boolean fOnlyOneTrackletPerC2 allows to control if two clusters 
21 // in layer 2 can be associated to the same cluster in layer 1 or not.
22 //
23 /////////////////////////////////////////////////////////////////////////
24
25 #include "TObject.h"
26
27 class TTree;
28 class TH1F;
29 class TH2F; 
30
31 class AliITSgeom;
32
33 class AliITSMultReconstructor : public TObject 
34 {
35 public:
36   AliITSMultReconstructor();
37   virtual ~AliITSMultReconstructor();
38
39   void SetGeometry(AliITSgeom* geo) {fGeometry = geo;}
40
41   void Reconstruct(TTree* tree, Float_t* vtx, Float_t* vtxRes);
42
43   void SetPhiWindow(Float_t w=0.08) {fPhiWindow=w;}
44   void SetZetaWindow(Float_t w=1.) {fZetaWindow=w;}
45   void SetOnlyOneTrackletPerC2(Bool_t b = kFALSE) {fOnlyOneTrackletPerC2 = b;}
46   
47   Int_t GetNClustersLayer1() const {return fNClustersLay1;}
48   Int_t GetNClustersLayer2() const {return fNClustersLay2;}
49   Int_t GetNTracklets() const {return fNTracklets;}
50   Int_t GetNSingleClusters() const {return fNSingleCluster;}
51
52   Float_t* GetClusterLayer1(Int_t n) {return fClustersLay1[n];}
53   Float_t* GetClusterLayer2(Int_t n) {return fClustersLay2[n];}
54   Float_t* GetTracklet(Int_t n) {return fTracklets[n];}
55   Float_t* GetCluster(Int_t n) {return fSClusters[n];}
56
57   void SetHistOn(Bool_t b=kFALSE) {fHistOn=b;}
58   void SaveHists();
59
60 protected:
61   AliITSMultReconstructor(const AliITSMultReconstructor& mr);
62   AliITSMultReconstructor& operator=(const AliITSMultReconstructor& mr);
63
64   AliITSgeom*   fGeometry;            // ITS geometry
65   
66   Float_t**     fClustersLay1;        // clusters in the 1st layer of ITS 
67   Float_t**     fClustersLay2;        // clusters in the 2nd layer of ITS 
68   Float_t**     fTracklets;           // tracklets 
69   Float_t**     fSClusters;           // single clusters (unassociated)
70   Bool_t*       fAssociationFlag;     // flag for the associations 
71   
72   Int_t         fNClustersLay1; // Number of clusters (Layer1)
73   Int_t         fNClustersLay2; // Number of clusters (Layer2)
74   Int_t         fNTracklets;    // Number of tracklets
75   Int_t         fNSingleCluster;    // Number of unassociated clusters
76
77   Float_t       fPhiWindow;     // Search window in phi
78   Float_t       fZetaWindow;    // SEarch window in eta
79
80   Bool_t        fOnlyOneTrackletPerC2; // only one tracklet per cluster in L. 2
81   
82   Bool_t        fHistOn; // Option to define and fill the histograms 
83
84
85   TH1F*         fhClustersDPhiAcc;   // Phi2 - Phi1 for tracklets 
86   TH1F*         fhClustersDThetaAcc; // Theta2 - Theta1 for tracklets 
87   TH1F*         fhClustersDZetaAcc;  // z2 - z1projected for tracklets 
88   TH1F*         fhClustersDPhiAll;   // Phi2 - Phi1 all the combinations 
89   TH1F*         fhClustersDThetaAll; // Theta2 - Theta1 all the combinations
90   TH1F*         fhClustersDZetaAll;  // z2 - z1projected all the combinations
91  
92   TH2F*         fhDPhiVsDThetaAll; // 2D plot for all the combinations  
93   TH2F*         fhDPhiVsDThetaAcc; // same plot for tracklets 
94   TH2F*         fhDPhiVsDZetaAll;  // 2d plot for all the combination 
95   TH2F*         fhDPhiVsDZetaAcc;  // same plot for tracklets 
96
97   TH1F*         fhetaTracklets;    // Pseudorapidity distr. for tracklets 
98   TH1F*         fhphiTracklets;    // Azimuthal (Phi) distr. for tracklets  
99   TH1F*         fhetaClustersLay1; // Pseudorapidity distr. for Clusters L. 1
100   TH1F*         fhphiClustersLay1; // Azimuthal (Phi) distr. for Clusters L. 1 
101  
102
103   void LoadClusterArrays(TTree* tree);
104
105   ClassDef(AliITSMultReconstructor,2)
106 };
107
108 #endif