]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.h
correcting cone exess
[u/mrichter/AliRoot.git] / PWGGA / CaloTrackCorrelations / AliAnaPi0EbE.h
1 #ifndef ALIANAPI0EBE_H
2 #define ALIANAPI0EBE_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5
6 //_________________________________________________________________________
7 //
8 // Class for the analysis of high pT pi0 event by event
9 // Pi0/Eta identified by one of the following:
10 //  -Invariant mass of 2 cluster in calorimeter
11 //  -Shower shape analysis in calorimeter
12 //  -Invariant mass of one cluster in calorimeter and one photon reconstructed in TPC (in near future)
13 //
14 //-- Author: Gustavo Conesa (INFN-LNF)  &  Raphaelle Ichou (SUBATECH)
15 //_________________________________________________________________________
16
17
18 // --- ROOT system ---
19 class TList ;
20 class TObjString;
21
22 // --- ANALYSIS system ---
23 #include "AliAnaCaloTrackCorrBaseClass.h"
24
25 class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
26
27  public: 
28   AliAnaPi0EbE() ; // default ctor
29   virtual ~AliAnaPi0EbE() { ; } //virtual dtor
30           
31   TObjString *   GetAnalysisCuts();
32   
33   TList      *   GetCreateOutputObjects();
34   
35   Int_t          GetMCIndex(const Int_t aodTag);
36   
37   void           Init();
38   
39   void           InitParameters();
40
41   void           MakeAnalysisFillAOD()  ;
42    
43   void           MakeAnalysisFillHistograms() ; 
44   
45   void           Print(const Option_t * opt) const;
46   
47   // Main
48   
49   void           FillPileUpHistograms(const Float_t energy, const Float_t time) ;
50   
51   void           FillRejectedClusterHistograms(const TLorentzVector mom, const Int_t mctag);
52   
53   void           FillSelectedClusterHistograms(AliVCluster* cluster, 
54                                                const Int_t nLocMax,
55                                                const Int_t tag,
56                                                const Float_t asy = 0);
57     
58   void           FillWeightHistograms(AliVCluster *clus);
59     
60   void           HasPairSameMCMother(AliAODPWG4Particle * photon1, 
61                                      AliAODPWG4Particle * photon2, 
62                                      Int_t & label, Int_t & tag);
63   
64   void           MakeInvMassInCalorimeter() ;
65   
66   void           MakeInvMassInCalorimeterAndCTS() ;
67   
68   void           MakeShowerShapeIdentification() ;
69           
70   //Setters Getters
71   
72   //Analysis types
73   enum anaTypes  {kIMCalo, kSSCalo, kIMCaloTracks};  
74   anaTypes       GetAnalysisType()                     const { return fAnaType                 ; }
75   void           SetAnalysisType(anaTypes ana)               { fAnaType = ana                  ; }
76   
77   TString        GetInputAODGammaConvName()            const { return fInputAODGammaConvName   ; }
78   void           SetInputAODGammaConvName(TString name)      { fInputAODGammaConvName = name   ; }      
79   
80   //Only for pi0 SS identification case
81   void           SetCalorimeter(TString & det)               { fCalorimeter = det              ; }
82   
83   void           SetMinDistanceToBadChannel(Float_t m1, Float_t m2, Float_t m3) {
84                   fMinDist = m1; fMinDist2 = m2; fMinDist3 = m3                                ; }
85   
86   void           SetNLMCut(Int_t min, Int_t max)             { fNLMCutMin = min; 
87                                                                fNLMCutMax = max                ; }
88   Int_t          GetNLMCutMin()                        const { return fNLMCutMin               ; }
89   Int_t          GetNLMCutMax()                        const { return fNLMCutMax               ; }      
90   
91   void           SetNLMMinEnergy(Int_t i, Float_t min)       { if (i < 3 && i >=0 ) fNLMECutMin[i]  = min   ; }
92   Float_t        GetNLMMinEnergy(Int_t i) const              { if( i < 3 && i >=0 ) return fNLMECutMin[i]   ;  else return 0 ; }
93
94   void           SetTimeCut(Double_t min, Double_t max)      { fTimeCutMin = min;
95                                                                fTimeCutMax = max               ; }
96   Double_t       GetTimeCutMin()                       const { return fTimeCutMin              ; }
97   Double_t       GetTimeCutMax()                       const { return fTimeCutMax              ; }
98  
99   void           SwitchOnFillPileUpHistograms()              { fFillPileUpHistograms  = kTRUE  ; }
100   void           SwitchOffFillPileUpHistograms()             { fFillPileUpHistograms  = kFALSE ; }    
101     
102   void           SwitchOnFillWeightHistograms()              { fFillWeightHistograms  = kTRUE  ; }
103   void           SwitchOffFillWeightHistograms()             { fFillWeightHistograms  = kFALSE ; }  
104   
105   void           SwitchOnTMHistoFill()                       { fFillTMHisto           = kTRUE  ; }
106   void           SwitchOffTMHistoFill()                      { fFillTMHisto           = kFALSE ; }
107
108   void           SwitchOnSelectedClusterHistoFill()          { fFillSelectClHisto     = kTRUE  ; }
109   void           SwitchOffSelectedClusterHistoFill()         { fFillSelectClHisto     = kFALSE ; }
110   
111   void           SwitchOnOnlySimpleSSHistoFill()             { fFillOnlySimpleSSHisto = kTRUE  ; }
112   void           SwitchOffOnlySimpleHistoFill()              { fFillOnlySimpleSSHisto = kFALSE ; }
113
114   
115   
116   //For histograms
117   enum mcTypes   { kmcPhoton = 0, kmcConversion = 1, kmcPi0    = 2,  
118                    kmcEta    = 3, kmcElectron   = 4, kmcHadron = 5 };
119
120  private:
121   
122   anaTypes       fAnaType;                 // Select analysis type
123   
124   //Only for pi0 SS identification case, kSSCalo
125   TString        fCalorimeter ;            // Calorimeter where the gamma is searched;
126   Float_t        fMinDist ;                // Minimal distance to bad channel to accept cluster
127   Float_t        fMinDist2;                // Cuts on Minimal distance to study acceptance evaluation
128   Float_t        fMinDist3;                // One more cut on distance used for acceptance-efficiency study
129   Int_t          fNLMCutMin  ;             // Remove clusters/cells with number of local maxima smaller than this value
130   Int_t          fNLMCutMax  ;             // Remove clusters/cells with number of local maxima larger than this value
131   Float_t        fNLMECutMin[3] ;          // Minimum energy of the cluster, depending on nlm.
132
133   Double_t       fTimeCutMin  ;            // Remove clusters/cells with time smaller than this value, in ns
134   Double_t       fTimeCutMax  ;            // Remove clusters/cells with time larger than this value, in ns
135   
136   Bool_t         fFillPileUpHistograms;    // Fill pile-up related histograms
137   Bool_t         fFillWeightHistograms ;   // Fill weigth histograms
138   Bool_t         fFillTMHisto;             // Fill track matching plots
139   Bool_t         fFillSelectClHisto;       // Fill selected cluster histograms
140   Bool_t         fFillOnlySimpleSSHisto;   // Fill selected cluster histograms, selected SS histograms
141
142   
143   //Only for combination of calorimeter and conversion photons, kIMCaloTracks
144   TString        fInputAODGammaConvName;   //  Name of AOD branch with conversion photons
145   
146   //Histograms
147   
148   TH1F         * fhPt  ;                   //! Number of identified  pi0/eta vs pT
149   TH1F         * fhE   ;                   //! Number of identified  pi0/eta vs E
150   TH2F         * fhEEta  ;                 //! E vs eta of identified  pi0/eta 
151   TH2F         * fhEPhi  ;                 //! E vs phi of identified  pi0/eta 
152   TH2F         * fhEtaPhi  ;               //! eta vs phi of identified  pi0/eta 
153
154   TH2F         * fhPtCentrality ;          //! centrality  vs pi0/eta pT
155   TH2F         * fhPtEventPlane ;          //! event plane vs pi0/eta pT
156   
157   TH1F         * fhPtReject  ;             //! Number of rejected as  pi0/eta vs pT
158   TH1F         * fhEReject   ;             //! Number of rejected as  pi0/eta vs E
159   TH2F         * fhEEtaReject  ;           //! E vs eta of rejected as  pi0/eta 
160   TH2F         * fhEPhiReject  ;           //! E vs phi of rejected as  pi0/eta 
161   TH2F         * fhEtaPhiReject  ;         //! eta vs phi of rejected as  pi0/eta 
162   
163   TH2F         * fhMass  ;                 //! pair mass vs E, for all pairs
164   TH2F         * fhAsymmetry ;             //! cluster E vs asymmetry of 2 splitted clusters 
165   TH2F         * fhSelectedMass  ;         //! pair mass vs E, for selected pairs
166   TH2F         * fhSelectedAsymmetry  ;    //! cluster E vs asymmetry of 2 splitted clusters, for selected pairs
167
168   TH1F         * fhPtDecay  ;              //! Number of identified  pi0/eta decay photons vs pT
169   TH1F         * fhEDecay   ;              //! Number of identified  pi0/eta decay photons vs E
170   
171   TH2F         * fhEDispersion ;           //! E vs disp of selected cluster
172   TH2F         * fhELambda0 ;              //! E vs lambda0 of selected cluster 
173   TH2F         * fhELambda1 ;              //! E vs lambda1 of selected cluster 
174   TH2F         * fhELambda0NoTRD ;         //! E vs lambda0 of selected cluster, not behind TRD 
175   TH2F         * fhELambda0FracMaxCellCut ;//! E vs lambda0 of selected cluster, fraction of cluster energy in max cell cut 
176   TH2F         * fhEFracMaxCell ;          //! E vs frac max cell of selected cluster 
177   TH2F         * fhEFracMaxCellNoTRD ;     //! E vs frac max cell of selected cluster, not behind TRD  
178   TH2F         * fhENCells;                //! E vs N cells in selected cluster
179   TH2F         * fhETime;                  //! E vs Time of selected cluster 
180   TH2F         * fhEPairDiffTime;          //! E vs Pair of clusters time difference vs E
181   
182   TH2F         * fhDispEtaE ;              //! shower dispersion in eta direction
183   TH2F         * fhDispPhiE ;              //! shower dispersion in phi direction
184   TH2F         * fhLambda0DispEta[7] ;     //! shower shape correlation l0 vs disp eta
185   TH2F         * fhLambda0DispPhi[7] ;     //! shower shape correlation l0 vs disp phi
186   TH2F         * fhSumEtaE ;               //! shower dispersion in eta direction
187   TH2F         * fhSumPhiE ;               //! shower dispersion in phi direction
188   TH2F         * fhSumEtaPhiE ;            //! shower dispersion in eta and phi direction
189   TH2F         * fhDispEtaPhiDiffE ;       //! shower dispersion eta - phi
190   TH2F         * fhSphericityE ;           //! shower sphericity in eta vs phi
191   TH2F         * fhDispEtaDispPhi[7] ;     //! shower dispersion in eta direction vs phi direction for 5 E bins [0-2],[2-4],[4-6],[6-10],[> 10]
192   TH2F         * fhAsymmetryLambda0[7] ;   //! E asymmetry of 2 splitted clusters vs lam0 for 5 E bins
193   TH2F         * fhAsymmetryDispEta[7] ;   //! E asymmetry of 2 splitted clusters vs lam0 for 5 E bins
194   TH2F         * fhAsymmetryDispPhi[7] ;   //! E asymmetry of 2 splitted clusters vs lam0 for 5 E bins
195
196   //MC histograms
197   
198   TH2F         * fhEMCLambda0[6] ;            //! E vs lambda0 of pi0 pairs but really from MC particle
199   TH2F         * fhEMCLambda1[6] ;            //! E vs lambda1 of pi0 pairs but really from MC particle
200   TH2F         * fhEMCDispersion[6] ;         //! E vs dispersion of pi0 pairs but really from MC particle
201   TH2F         * fhEMCLambda0NoTRD[6] ;         //! E vs lambda0 of pi0 pairs but really from MC particle, not behind TRD
202   TH2F         * fhEMCLambda0FracMaxCellCut[6] ;//! E vs lambda0 of pi0 pairs but really from MC particle, fraction of cluster energy in max cell cut
203   TH2F         * fhEMCFracMaxCell[6] ;        //! E vs fraction of max cell 
204   
205   TH2F         * fhMCEDispEta[6] ;            //! shower dispersion in eta direction
206   TH2F         * fhMCEDispPhi[6] ;            //! shower dispersion in phi direction
207   TH2F         * fhMCLambda0DispEta[7][6] ;   //! shower shape correlation l0 vs disp eta
208   TH2F         * fhMCLambda0DispPhi[7][6] ;   //! shower shape correlation l0 vs disp phi
209   TH2F         * fhMCESumEtaPhi[6] ;          //! shower dispersion in eta vs phi direction
210   TH2F         * fhMCEDispEtaPhiDiff[6] ;     //! shower dispersion in eta -phi direction
211   TH2F         * fhMCESphericity[6] ;         //! shower sphericity, eta vs phi
212   TH2F         * fhMCDispEtaDispPhi[7][6] ;   //! shower dispersion in eta direction vs phi direction for 5 E bins [0-2],[2-4],[4-6],[6-10],[> 10]
213   TH2F         * fhMCEAsymmetry[6] ;          //! E asymmetry of 2 splitted clusters vs cluster E
214   TH2F         * fhMCAsymmetryLambda0[7][6] ; //! E asymmetry of 2 splitted clusters vs lam0 for 5 E bins
215   TH2F         * fhMCAsymmetryDispEta[7][6] ; //! E asymmetry of 2 splitted clusters vs lam0 for 5 E bins
216   TH2F         * fhMCAsymmetryDispPhi[7][6] ; //! E asymmetry of 2 splitted clusters vs lam0 for 5 E bins
217   
218   TH1F         * fhMCE[6];                    //! Number of identified as pi0 vs E coming from X
219   TH1F         * fhMCPt[6];                   //! Number of identified as pi0 vs Pt coming from X
220   TH2F         * fhMCPhi[6];                  //! Phi of identified as pi0, coming from X
221   TH2F         * fhMCEta[6];                  //! eta of identified as pi0, coming from X
222   TH1F         * fhMCEReject[6];              //! Number of rejected as pi0 vs E coming from X
223   TH1F         * fhMCPtReject[6];             //! Number of rejected as pi0 vs Pt coming from X
224
225   TH2F         * fhMCPtCentrality[6] ;        //! centrality  vs pi0/eta pT  coming from X
226
227   
228   TH2F         * fhMCPi0PtGenRecoFraction;    //! SS id, clusters id as pi0 (eta), coming from 2 photon, pi0 primary, pt vs E prim pi0 / E reco
229   TH2F         * fhMCEtaPtGenRecoFraction;    //! SS id, clusters id as pi0 (eta), coming from 2 photon, eta primary, pt vs E prim eta / E reco  
230   TH1F         * fhMCPi0DecayPt;              //! SS id, clusters id as pi0 (eta), coming from 1 photon, pi0 decay primary, pt
231   TH2F         * fhMCPi0DecayPtFraction;      //! SS id, clusters id as pi0 (eta), coming from 1 photon, pi0 decay primary, pt vs pt decay / pt mother
232   TH1F         * fhMCEtaDecayPt;              //! SS id, clusters id as pi0 (eta), coming from 1 photon, eta decay primary, pt
233   TH2F         * fhMCEtaDecayPtFraction;      //! SS id, clusters id as pi0 (eta), coming from 1 photon, eta decay primary, pt vs pt decay / pt mother  
234   TH1F         * fhMCOtherDecayPt;            //! SS id, clusters id as pi0 (eta), coming from 1 photon, other decay primary, pt
235
236   TH2F         * fhMassPairMCPi0;             //! pair mass, origin is same pi0
237   TH2F         * fhMassPairMCEta;             //! pair mass, origin is same eta
238   TH2F         * fhAnglePairMCPi0;            //! pair opening angle, origin is same pi0
239   TH2F         * fhAnglePairMCEta;            //! pair opening angle, origin is same eta
240   
241   // Weight studies
242   
243   TH2F         * fhECellClusterRatio;      //! e cell / e cluster vs e cluster for selected photons
244   TH2F         * fhECellClusterLogRatio;   //! log (e cell / e cluster)  vs e cluster for selected photons
245   TH2F         * fhEMaxCellClusterRatio;   //! e max cell / e cluster vs e cluster for selected photons
246   TH2F         * fhEMaxCellClusterLogRatio;//! log (e max cell / e cluster) vs e cluster for selected photons
247   TH2F         * fhLambda0ForW0[14];       //! L0 for 7 defined w0= 3, 3.5 ... 6 for selected photons
248   //TH2F         * fhLambda1ForW0[7];        //! L1 for 7 defined w0= 3, 3.5 ... 6 for selected photons  
249   
250   // Track Matching
251   TH2F         * fhTrackMatchedDEta     ;  //! Eta distance between track and cluster vs cluster E
252   TH2F         * fhTrackMatchedDPhi     ;  //! Phi distance between track and cluster vs cluster E
253   TH2F         * fhTrackMatchedDEtaDPhi ;  //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
254   TH2F         * fhTrackMatchedMCParticle; //! Trace origin of matched particle
255   TH2F         * fhdEdx  ;                 //! matched track dEdx vs cluster E 
256   TH2F         * fhEOverP;                 //! matched track E cluster over P track vs cluster E
257   TH2F         * fhEOverPNoTRD;                 //! matched track E cluster over P track vs cluster E, not behind TRD 
258
259   // Local maxima
260   TH2F         * fhNLocMax;                //! number of maxima in selected clusters
261   TH2F         * fhELambda0LocMax[3] ;     //! E vs lambda0 of selected cluster, 1,2,>2 local maxima in cluster 
262   TH2F         * fhELambda1LocMax[3] ;     //! E vs lambda1 of selected cluster, 1,2,>2 local maxima in cluster 
263   TH2F         * fhEDispersionLocMax[3] ;  //! E vs lambda1 of selected cluster, 1,2,>2 local maxima in cluster 
264   TH2F         * fhEDispEtaLocMax[3] ;     //! E vs eta dispersion of selected cluster, 1,2,>2 local maxima in cluster 
265   TH2F         * fhEDispPhiLocMax[3] ;     //! E vs phi dispersion of selected cluster, 1,2,>2 local maxima in cluster 
266   TH2F         * fhESumEtaPhiLocMax[3] ;   //! E vs dispersion in eta and phi direction
267   TH2F         * fhEDispEtaPhiDiffLocMax[3] ; //! E vs dispersion eta - phi
268   TH2F         * fhESphericityLocMax[3] ;  //! E vs sphericity in eta vs phi  
269   TH2F         * fhEAsymmetryLocMax[3] ;   //! E asymmetry of 2 splitted clusters vs cluster E for different NLM
270
271   TH2F         * fhMassPairLocMax[8];      //! pair mass, origin is same pi0, combine clusters depending on number of maxima
272
273   // Pile-up
274   TH1F         * fhPtPi0PileUp[7];                //! pT distribution of selected pi0/eta
275   TH2F         * fhTimeENoCut;                    //! time of cluster vs E, no cut
276   TH2F         * fhTimeESPD;                      //! time of cluster vs E, IsSPDPileUp
277   TH2F         * fhTimeESPDMulti;                 //! time of cluster vs E, IsSPDPileUpMulti
278   TH2F         * fhTimeNPileUpVertSPD;            //! time of cluster vs n pile-up vertices from SPD
279   TH2F         * fhTimeNPileUpVertTrack;          //! time of cluster vs n pile-up vertices from Tracks
280   TH2F         * fhTimeNPileUpVertContributors;   //! time of cluster vs n pile-up vertex from SPD contributors
281   TH2F         * fhTimePileUpMainVertexZDistance; //! time of cluster vs difference of z main vertex and pile-up vertex 
282   TH2F         * fhTimePileUpMainVertexZDiamond;  //! time of cluster vs difference of z diamond and pile-up vertex 
283   
284   AliAnaPi0EbE(              const AliAnaPi0EbE & pi0ebe) ; // cpy ctor
285   AliAnaPi0EbE & operator = (const AliAnaPi0EbE & pi0ebe) ; // cpy assignment
286   
287   ClassDef(AliAnaPi0EbE,24)
288 } ;
289
290
291 #endif //ALIANAPI0EBE_H
292
293
294