Move histogram setting ranges from analysis modules to base class (to be moved to...
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaPhoton.h
1 #ifndef ALIANAPHOTON_H
2 #define ALIANAPHOTON_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id: AliAnaPhoton.h 27413 2008-07-18 13:28:12Z gconesab $ */
6
7 //_________________________________________________________________________
8 //
9 // Class for the photon identification.
10 // Clusters from calorimeters are identified as photons
11 // and kept in the AOD. Few histograms produced.
12 // Produces input for other analysis classes like AliAnaPi0, 
13 // AliAnaParticleHadronCorrelation ... 
14 //
15
16 //-- Author: Gustavo Conesa (INFN-LNF)
17
18 // --- ROOT system ---
19 class TH2F ;
20 class TH1F;
21 class TH3D;
22 class TString ;
23 class TObjString;
24
25 // --- ANALYSIS system ---
26 #include "AliAnaPartCorrBaseClass.h"
27 class AliStack;
28 class TParticle;
29
30 class TList ;
31
32 class AliAnaPhoton : public AliAnaPartCorrBaseClass {
33
34  public: 
35   AliAnaPhoton() ; // default ctor
36   virtual ~AliAnaPhoton() ; //virtual dtor
37  private:
38   AliAnaPhoton(const AliAnaPhoton & g) ; // cpy ctor
39   AliAnaPhoton & operator = (const AliAnaPhoton & g) ;//cpy assignment
40
41  public:
42         
43   //---------------------------------------
44   // General analysis frame methods
45   //---------------------------------------
46   
47   TObjString * GetAnalysisCuts();
48   
49   TList      * GetCreateOutputObjects();
50   
51   void         Init();
52
53   void         InitParameters();
54
55   void         MakeAnalysisFillAOD()  ;
56
57   void         MakeAnalysisFillHistograms() ; 
58   
59   void         Print(const Option_t * opt)const;
60     
61   Bool_t       ClusterSelected(AliVCluster* cl, TLorentzVector mom) ;
62   
63   //---------------------------------------
64   // Analysis parameters setters getters
65   //---------------------------------------
66   
67   TString      GetCalorimeter()                 const { return fCalorimeter        ; }
68   void         SetCalorimeter(TString  & det)         { fCalorimeter = det         ; }
69     
70   // ** Cluster selection methods **
71   
72   void         SetMinDistanceToBadChannel(Float_t m1, Float_t m2, Float_t m3) {
73                 fMinDist = m1; fMinDist2 = m2; fMinDist3 = m3; }
74
75   void         SetTimeCut(Double_t min, Double_t max) { fTimeCutMin = min; 
76                                                         fTimeCutMax = max          ; }
77   Double_t     GetTimeCutMin()                  const { return fTimeCutMin         ; }
78   Double_t     GetTimeCutMax()                  const { return fTimeCutMax         ; }  
79         
80   void         SetNCellCut(Int_t n)                   { fNCellsCut = n             ; }
81   Double_t     GetNCellCut()                    const { return fNCellsCut          ; }
82   
83   Bool_t       IsTrackMatchRejectionOn()        const { return fRejectTrackMatch   ; }
84   void         SwitchOnTrackMatchRejection()          { fRejectTrackMatch = kTRUE  ; }
85   void         SwitchOffTrackMatchRejection()         { fRejectTrackMatch = kFALSE ; }  
86   
87   //           Fill Shower Shape histograms
88   
89   void         FillShowerShapeHistograms( AliVCluster* cluster, const Int_t mcTag) ;
90   
91   void         SwitchOnFillShowerShapeHistograms()    { fFillSSHistograms = kTRUE  ; }
92   void         SwitchOffFillShowerShapeHistograms()   { fFillSSHistograms = kFALSE ; }  
93   
94   // ** Conversion pair analysis **
95   
96   Float_t      GetMassCut()                     const { return fMassCut            ; }
97   void         SetMassCut(Float_t m)                  { fMassCut    = m            ; }
98   
99   Bool_t       IsCheckConversionOn()            const { return fCheckConversion    ; }
100   void         SwitchOnConversionChecker()            { fCheckConversion = kTRUE   ; }
101   void         SwitchOffConversionChecker()           { fCheckConversion = kFALSE  ; }  
102         
103   Bool_t       AreConvertedPairsInAOD()         const { return fAddConvertedPairsToAOD   ; }
104   void         SwitchOnAdditionConvertedPairsToAOD()  { fAddConvertedPairsToAOD = kTRUE  ; 
105                                                         fCheckConversion        = kTRUE  ; }
106   void         SwitchOffAdditionConvertedPairsToAOD() { fAddConvertedPairsToAOD = kFALSE ; }  
107         
108   Bool_t       AreConvertedPairsRemoved()       const { return fRemoveConvertedPair      ; }
109   void         SwitchOnConvertedPairsRemoval()        { fRemoveConvertedPair  = kTRUE    ; 
110                                                         fCheckConversion      = kTRUE    ; }
111   void         SwitchOffConvertedPairsRemoval()       { fRemoveConvertedPair  = kFALSE   ; }    
112   
113   void         SetConvAsymCut(Float_t c)              { fConvAsymCut = c           ; }
114   Float_t      GetConvAsymCut()                 const { return fConvAsymCut        ; }
115   
116   void         SetConvDEtaCut(Float_t c)              { fConvDEtaCut = c           ; }
117   Float_t      GetConvDEtaCut()                 const { return fConvDEtaCut        ; }
118   
119   void         SetConvDPhiCut(Float_t min, Float_t max)  { fConvDPhiMinCut = min   ;  
120                                                            fConvDPhiMaxCut = max   ; }
121   Float_t      GetConvDPhiMinCut()              const { return fConvDPhiMinCut     ; }
122   Float_t      GetConvDPhiMaxCut()              const { return fConvDPhiMaxCut     ; }
123   
124   // For histograms
125   enum mcTypes   {mcPhoton = 0,        mcConversion = 1,    mcPi0 = 2, 
126                   mcElectron = 3,      mcOther = 4,         mcPrompt = 5,       
127                   mcFragmentation = 6, mcISR = 7,           
128                   mcPi0Decay = 8,      mcOtherDecay = 9, 
129                   mcAntiNeutron = 10,  mcAntiProton = 11,   mcString = 12 };  
130
131   private:
132  
133   TString  fCalorimeter ;                // Calorimeter where the gamma is searched;
134   Float_t  fMinDist ;                    // Minimal distance to bad channel to accept cluster
135   Float_t  fMinDist2;                    // Cuts on Minimal distance to study acceptance evaluation
136   Float_t  fMinDist3;                    // One more cut on distance used for acceptance-efficiency study
137   Bool_t   fRejectTrackMatch ;           // If PID on, reject clusters which have an associated TPC track
138   Double_t fTimeCutMin  ;                // Remove clusters/cells with time smaller than this value, in ns
139   Double_t fTimeCutMax  ;                // Remove clusters/cells with time larger than this value, in ns
140   Int_t    fNCellsCut ;                  // Accept for the analysis clusters with more than fNCellsCut cells
141   Bool_t   fFillSSHistograms ;           // Fill shower shape histograms
142
143   //Conversion pairs selection cuts
144   Bool_t   fCheckConversion;             // Combine pairs of clusters with mass close to 0
145   Bool_t   fRemoveConvertedPair;         // Remove conversion pairs
146   Bool_t   fAddConvertedPairsToAOD;      // Put Converted pairs in AOD
147   Float_t  fMassCut;                     // Mass cut for the conversion pairs selection  
148   Float_t  fConvAsymCut;                 // Select conversion pairs when asymmetry is smaller than cut
149         Float_t  fConvDEtaCut;                 // Select conversion pairs when deta of pair smaller than cut
150   Float_t  fConvDPhiMinCut;              // Select conversion pairs when dphi of pair lager than cut
151   Float_t  fConvDPhiMaxCut;              // Select conversion pairs when dphi of pair smaller than cut
152
153   //Histograms 
154   TH2F * fhNCellsE;                      //! number of cells in cluster vs E 
155   
156   TH1F * fhEPhoton    ;                  //! Number of identified photon vs energy
157   TH1F * fhPtPhoton   ;                  //! Number of identified photon vs transerse momentum 
158   TH2F * fhPhiPhoton  ;                  //! Azimuthal angle of identified  photon vs transerse momentum 
159   TH2F * fhEtaPhoton  ;                  //! Pseudorapidity of identified  photon vs transerse momentum 
160   TH2F * fhEtaPhiPhoton  ;               //! Pseudorapidity vs Phi of identified  photon for transerse momentum > 0.5
161   TH2F * fhEtaPhi05Photon  ;             //! Pseudorapidity vs Phi of identified  photon for transerse momentum < 0.5
162   
163   //Conversion pairs
164   TH1F * fhPtPhotonConv   ;              //! Number of identified photon vs transerse momentum 
165   TH2F * fhEtaPhiPhotonConv  ;           //! Pseudorapidity vs Phi of identified  photon for transerse momentum > 0.5, for converted
166   TH2F * fhEtaPhi05PhotonConv  ;         //! Pseudorapidity vs Phi of identified  photon for transerse momentum < 0.5, for converted
167   TH2F * fhConvDeltaEta;                 //! Small mass photons, correlation in eta
168   TH2F * fhConvDeltaPhi;                 //! Small mass photons, correlation in phi
169   TH2F * fhConvDeltaEtaPhi;              //! Small mass photons, correlation in phi and eta
170   TH2F * fhConvAsym;                     //! Small mass photons, correlation in energy asymmetry
171   TH2F * fhConvPt;                       //! Small mass photons, pT of pair
172   
173   //Vertex distance
174   TH2F * fhConvDistEta;                   //! Approx distance to vertex vs cluster Eta 
175   TH2F * fhConvDistEn;                    //! Approx distance to vertex vs Energy
176   TH2F * fhConvDistMass;                  //! Approx distance to vertex vs Mass
177   TH2F * fhConvDistEtaCutEta;             //! Approx distance to vertex vs cluster Eta, dEta < 0.05 
178   TH2F * fhConvDistEnCutEta;              //! Approx distance to vertex vs Energy, dEta < 0.05
179   TH2F * fhConvDistMassCutEta;            //! Approx distance to vertex vs Mass, dEta < 0.05
180   TH2F * fhConvDistEtaCutMass;            //! Approx distance to vertex vs cluster Eta, dEta < 0.05, m < 10 MeV 
181   TH2F * fhConvDistEnCutMass;             //! Approx distance to vertex vs Energy, dEta < 0.05, m < 10 MeV
182   TH2F * fhConvDistEtaCutAsy;             //! Approx distance to vertex vs cluster Eta, dEta < 0.05, m < 10 MeV, A < 0.1
183   TH2F * fhConvDistEnCutAsy;              //! Approx distance to vertex vs energy, dEta < 0.05, m < 10 MeV, A < 0.1
184
185   //Shower shape
186   TH2F * fhDispE;                         //! cluster dispersion vs E
187   TH2F * fhLam0E;                         //! cluster lambda0 vs  E
188   TH2F * fhLam1E;                         //! cluster lambda1 vs  E  
189   TH2F * fhdDispE;                        //! cluster dispersion/Ncells vs E
190   TH2F * fhdLam0E;                        //! cluster lambda0/Ncells vs  E
191   TH2F * fhdLam1E;                        //! cluster lambda1/Ncells vs  E
192   
193   TH2F * fhDispETRD;                      //! cluster dispersion vs E, SM covered by TRD
194   TH2F * fhLam0ETRD;                      //! cluster lambda0 vs  E, SM covered by TRD
195   TH2F * fhLam1ETRD;                      //! cluster lambda1 vs  E, SM covered by TRD 
196   TH2F * fhdDispETRD;                     //! cluster dispersion/Ncells vs E, SM covered by TRD
197   TH2F * fhdLam0ETRD;                     //! cluster lambda0/Ncells vs  E, SM covered by TRD
198   TH2F * fhdLam1ETRD;                     //! cluster lambda1/Ncells vs  E, SM covered by TRD    
199   
200   TH2F * fhNCellsLam0LowE;                //! number of cells in cluster vs lambda0
201   TH2F * fhNCellsLam1LowE;                //! number of cells in cluster vs lambda1
202   TH2F * fhNCellsDispLowE;                //! number of cells in cluster vs dispersion
203   TH2F * fhNCellsLam0HighE;               //! number of cells in cluster vs lambda0, E>2
204   TH2F * fhNCellsLam1HighE;               //! number of cells in cluster vs lambda1, E>2
205   TH2F * fhNCellsDispHighE;               //! number of cells in cluster vs dispersion, E>2
206   
207   TH2F * fhNCellsdLam0LowE;               //! number of cells in cluster vs lambda0/ncells
208   TH2F * fhNCellsdLam1LowE;               //! number of cells in cluster vs lambda1/ncells
209   TH2F * fhNCellsdDispLowE;               //! number of cells in cluster vs dispersion/ncells
210   TH2F * fhNCellsdLam0HighE;              //! number of cells in cluster vs lambda0/ncells, E>2
211   TH2F * fhNCellsdLam1HighE;              //! number of cells in cluster vs lambda1/ncells, E>2
212   TH2F * fhNCellsdDispHighE;              //! number of cells in cluster vs dispersion/ncells, E>2  
213   
214   TH2F * fhEtaLam0LowE;                   //! cluster eta vs lambda0, E<2
215   TH2F * fhPhiLam0LowE;                   //! cluster phi vs lambda0, E<2
216   TH2F * fhEtaLam0HighE;                  //! cluster eta vs lambda0, E>2
217   TH2F * fhPhiLam0HighE;                  //! cluster phi vs lambda0, E>2
218   TH2F * fhLam0DispLowE;                  //! cluster lambda0 vs dispersion, E<2
219   TH2F * fhLam0DispHighE;                 //! cluster lambda0 vs dispersion, E>2
220   TH2F * fhLam1Lam0LowE;                  //! cluster lambda1 vs lambda0, E<2
221   TH2F * fhLam1Lam0HighE;                 //! cluster lambda1 vs lambda0, E>2
222   TH2F * fhDispLam1LowE;                  //! cluster disp vs lambda1, E<2
223   TH2F * fhDispLam1HighE;                 //! cluster disp vs lambda1, E>2
224   
225   TH2F * fhEtadLam0LowE;                  //! cluster eta vs lambda0/ncells, E<2
226   TH2F * fhPhidLam0LowE;                  //! cluster phi vs lambda0/ncells, E<2
227   TH2F * fhEtadLam0HighE;                 //! cluster eta vs lambda0/ncells, E>2
228   TH2F * fhPhidLam0HighE;                 //! cluster phi vs lambda0/ncells, E>2
229   TH2F * fhdLam0dDispLowE;                //! cluster lambda0/ncells vs dispersion/ncells, E<2
230   TH2F * fhdLam0dDispHighE;               //! cluster lambda0/ncells vs dispersion/ncells, E>2
231   TH2F * fhdLam1dLam0LowE;                //! cluster lambda1/ncells vs lambda0/ncells, E<2
232   TH2F * fhdLam1dLam0HighE;               //! cluster lambda1/ncells vs lambda0/ncells, E>2
233   TH2F * fhdDispdLam1LowE;                //! cluster disp/ncells vs lambda1/ncells, E<2
234   TH2F * fhdDispdLam1HighE;               //! cluster disp/ncells vs lambda1/ncells, E>2
235   
236   
237   //Fill MC dependent histograms
238   TH1F * fhDeltaE  ;                      //! MC-Reco E distribution      
239   TH1F * fhDeltaPt ;                      //! MC-Reco pT distribution
240   TH1F * fhRatioE  ;                      //! Reco/MC E distribution      
241   TH1F * fhRatioPt ;                      //! Reco/MC pT distribution
242   TH2F * fh2E  ;                          //! E distribution, Reco vs MC
243   TH2F * fh2Pt ;                          //! pT distribution, Reco vs MC
244   
245   //Origin of this cluster is ...
246   TH1F * fhEMC[13];                     //! Number of identified photon vs cluster energy coming from MC particle
247   TH1F * fhPtMC[13];                    //! Number of identified photon vs cluster pT     coming from MC particle
248   TH2F * fhPhiMC[13];                   //! Phi of identified photon coming from MC particle
249   TH2F * fhEtaMC[13];                   //! eta of identified photon coming from MC particle
250         
251   //Conversion pairs analysis histograms
252   TH1F * fhPtConversionTagged;            //! Number of identified gamma from Conversion , tagged as conversion 
253   TH1F * fhPtAntiNeutronTagged;           //! Number of identified gamma from AntiNeutrons gamma, tagged as conversion 
254   TH1F * fhPtAntiProtonTagged;            //! Number of identified gamma from AntiProtons gamma, tagged as conversion 
255   TH1F * fhPtUnknownTagged;               //! Number of identified gamma from unknown, tagged as conversion 
256   
257   TH2F * fhEtaPhiConversion  ;            //! Pseudorapidity vs Phi for transerse momentum > 0.5, for MC converted
258   TH2F * fhEtaPhi05Conversion  ;          //! Pseudorapidity vs Phi for transerse momentum < 0.5, for MC converted
259   
260   TH2F * fhConvDeltaEtaMCConversion;      //! Small mass cluster pairs, correlation in eta, origin of both clusters is conversion
261   TH2F * fhConvDeltaPhiMCConversion;      //! Small mass cluster pairs, correlation in phi, origin of both clusters is conversion
262   TH2F * fhConvDeltaEtaPhiMCConversion;   //! Small mass cluster pairs, correlation in eta-phi, origin of both clusters is conversion
263   TH2F * fhConvAsymMCConversion;          //! Small mass cluster pairs, correlation in energy asymmetry, origin of both clusters is conversion
264   TH2F * fhConvPtMCConversion;            //! Small mass cluster pairs, pt of pair, origin of both clusters is conversion
265   TH2F * fhConvDispersionMCConversion;    //! Small mass cluster pairs, dispersion of cluster 1 vs cluster 2
266   TH2F * fhConvM02MCConversion;           //! Small mass cluster pairs, m02 of cluster 1 vs cluster 2 
267
268   TH2F * fhConvDeltaEtaMCAntiNeutron;     //! Small mass cluster pairs, correlation in eta, origin of both clusters is anti neutron
269   TH2F * fhConvDeltaPhiMCAntiNeutron;     //! Small mass cluster pairs, correlation in phi, origin of both clusters is anti neutron
270   TH2F * fhConvDeltaEtaPhiMCAntiNeutron;  //! Small mass cluster pairs, correlation in eta-phi, origin of both clusters is anti neutron
271   TH2F * fhConvAsymMCAntiNeutron;         //! Small mass cluster pairs, correlation in energy asymmetry, origin of both clusters is anti neutron
272   TH2F * fhConvPtMCAntiNeutron;           //! Small mass cluster pairs, pt of pair, origin of both clusters is anti neutron
273   TH2F * fhConvDispersionMCAntiNeutron;   //! Small mass cluster pairs, dispersion of cluster 1 vs cluster 2, origin of both clusters is anti neutron
274   TH2F * fhConvM02MCAntiNeutron;          //! Small mass cluster pairs, m02 of cluster 1 vs cluster 2, origin of both clusters is anti neutron
275
276   TH2F * fhConvDeltaEtaMCAntiProton;      //! Small mass cluster pairs, correlation in eta, origin of both clusters is anti proton
277   TH2F * fhConvDeltaPhiMCAntiProton;      //! Small mass cluster pairs, correlation in phi, origin of both clusters is anti proton
278   TH2F * fhConvDeltaEtaPhiMCAntiProton;   //! Small mass cluster pairs, correlation in eta-phi, origin of both clusters is anti proton
279   TH2F * fhConvAsymMCAntiProton;          //! Small mass cluster pairs, correlation in energy asymmetry, origin of both clusters is anti proton
280   TH2F * fhConvPtMCAntiProton;            //! Small mass cluster pairs, pt of pairs, origin of both clusters is anti proton
281   TH2F * fhConvDispersionMCAntiProton;    //! Small mass cluster pairs, dispersion of cluster 1 vs cluster 2, origin of both clusters is anti proton
282   TH2F * fhConvM02MCAntiProton;           //! Small mass cluster pairs, m02 of cluster 1 vs cluster 2, origin of both clusters is anti proton
283
284   TH2F * fhConvDeltaEtaMCString;          //! Small mass cluster pairs, correlation in eta, origin of both clusters is string
285   TH2F * fhConvDeltaPhiMCString;          //! Small mass cluster pairs, correlation in phi, origin of both clusters is string
286   TH2F * fhConvDeltaEtaPhiMCString;       //! Small mass cluster pairs, correlation in eta-phi, origin of both clusters is string
287   TH2F * fhConvAsymMCString;              //! Small mass cluster pairs, correlation in energy asymmetry, origin of both clusters is string
288   TH2F * fhConvPtMCString;                //! Small mass cluster pairs, pt of pairs, origin of both clusters is string
289   TH2F * fhConvDispersionMCString;        //! Small mass cluster pairs, dispersion of cluster 1 vs cluster 2, origin of both clusters is string
290   TH2F * fhConvM02MCString;               //! Small mass cluster pairs, m02 of cluster 1 vs cluster 2, origin of both clusters is string
291   TH2F * fhConvDistMCConversion;          //! Calculated conversion distance vs real distance to vertex       
292   TH2F * fhConvDistMCConversionCuts;      //! Calculated conversion distance vs real distance to vertex        
293
294   // Shower Shape MC
295
296   TH2F * fhEMCLambda0[5] ;                //! E vs Lambda0     from MC particle
297   TH2F * fhEMCdLambda0[5];                //! E vs dLambda0    from MC particle
298   TH2F * fhEMCLambda1[5] ;                //! E vs Lambda1     from MC particle
299   TH2F * fhEMCdLambda1[5];                //! E vs dLambda1    from MC particle
300   TH2F * fhEMCDispersion[5] ;             //! E vs Dispersion  from MC particle
301   TH2F * fhEMCdDispersion[5];             //! E vs dDispersion from MC particle
302   
303   
304    ClassDef(AliAnaPhoton,14)
305
306 } ;
307  
308
309 #endif//ALIANAPHOTON_H
310
311
312