]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/PartCorrDep/AliAnaPi0.h
increasing ClassDef
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaPi0.h
1 #ifndef ALIANAPI0_H
2 #define ALIANAPI0_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice     */
5 /* $Id: $ */
6
7 //_________________________________________________________________________
8 // Class to fill two-photon invariant mass histograms 
9 // to be used to extract pi0 raw yield.
10 // Input is produced by AliAnaPhoton (or any other analysis producing output AliAODPWG4Particles), 
11 // it will do nothing if executed alone
12 //
13 //-- Author: Dmitri Peressounko (RRC "KI")
14 //-- Adapted to PartCorr frame by Lamia Benhabib (SUBATECH)
15 //-- and Gustavo Conesa (INFN-Frascati)
16
17 //Root
18 class TList;
19 class TH3F ;
20 class TH2F ;
21 class TObjString;
22
23 //Analysis
24 #include "AliAnaPartCorrBaseClass.h"
25 class AliAODEvent ;
26 class AliESDEvent ;
27 class AliAODPWG4Particle ;
28
29 class AliAnaPi0 : public AliAnaPartCorrBaseClass {
30   
31  public:   
32   AliAnaPi0() ; // default ctor
33   virtual ~AliAnaPi0() ;//virtual dtor
34   
35   //-------------------------------
36   // General analysis frame methods
37   //-------------------------------
38
39   TObjString * GetAnalysisCuts();
40   
41   TList      * GetCreateOutputObjects(); 
42   
43   void         Print(const Option_t * opt) const;
44   
45   void         MakeAnalysisFillHistograms();
46   
47   void         InitParameters();
48
49   //Calorimeter options
50   TString      GetCalorimeter()         const   { return fCalorimeter           ; }
51   void         SetCalorimeter(TString & det)    { fCalorimeter         = det    ; }
52   void         SetNumberOfModules(Int_t nmod)   { fNModules            = nmod   ; }
53   
54   //-------------------------------
55   // EVENT Bin Methods
56   //-------------------------------
57
58   Int_t        GetEventIndex(AliAODPWG4Particle * part, Double_t * vert)  ;
59
60   void         CountAndGetAverages(Int_t &nClus,Int_t &nCell, Float_t &eClusTot,Float_t &eCellTot, Float_t &eDenClus,Float_t &eDenCell) ;
61   
62   //Switchs for event multiplicity bin option, by default, centrality
63   
64   void         SwitchOnTrackMultBins()          { fUseTrackMultBins    = kTRUE  ; }
65   void         SwitchOffTrackMultBins()         { fUseTrackMultBins    = kFALSE ; }
66   
67   void         SwitchOnPhotonMultBins()         { fUsePhotonMultBins   = kTRUE  ; }
68   void         SwitchOffPhotonMultBins()        { fUsePhotonMultBins   = kFALSE ; }
69   
70   void         SwitchOnClusterEBins()           { fUseAverClusterEBins = kTRUE  ; }
71   void         SwitchOffClusterEBins()          { fUseAverClusterEBins = kFALSE ; }
72   
73   void         SwitchOnCellEBins()              { fUseAverCellEBins    = kTRUE  ; }
74   void         SwitchOffCellEBins()             { fUseAverCellEBins    = kFALSE ; }
75
76   void         SwitchOnClusterEDenBins()        { fUseAverClusterEDenBins = kTRUE  ; }
77   void         SwitchOffClusterEDenBins()       { fUseAverClusterEDenBins = kFALSE ; }
78
79   //-------------------------------
80         //Opening angle pair selection
81   //-------------------------------
82   void         SwitchOnAngleSelection()         { fUseAngleCut         = kTRUE  ; }
83   void         SwitchOffAngleSelection()        { fUseAngleCut         = kFALSE ; }
84   
85   void         SwitchOnAngleEDepSelection()     { fUseAngleEDepCut     = kTRUE  ; }
86   void         SwitchOffAngleEDepSelection()    { fUseAngleEDepCut     = kFALSE ; }
87     
88   void         SetAngleCut(Float_t a)           { fAngleCut            = a      ; }
89   void         SetAngleMaxCut(Float_t a)        { fAngleMaxCut         = a      ; }
90
91   //-------------------------------
92   // Use mixing code of this class
93   //-------------------------------
94   void         SwitchOnOwnMix()                 { fDoOwnMix            = kTRUE  ; }
95   void         SwitchOffOwnMix()                { fDoOwnMix            = kFALSE ; }
96
97   //------------------------------------------
98   //Do analysis only with clusters in same SM or different combinations of SM
99   //------------------------------------------
100   void         SwitchOnSameSM()                 { fSameSM              = kTRUE  ; }
101   void         SwitchOffSameSM()                { fSameSM              = kFALSE ; }
102   
103   void         SwitchOnSMCombinations()         { fFillSMCombinations  = kTRUE  ; }
104   void         SwitchOffSMCombinations()        { fFillSMCombinations  = kFALSE ; }
105   
106   //-------------------------------
107   //Histogram filling options off by default
108   //-------------------------------
109   void         SwitchOnInvPtWeight()            { fMakeInvPtPlots      = kTRUE  ; }
110   void         SwitchOffInvPtWeight()           { fMakeInvPtPlots      = kFALSE ; }
111   
112   void         SwitchOnFillBadDistHisto()       { fFillBadDistHisto    = kTRUE  ; }
113   void         SwitchOffFillBadDistHisto()      { fFillBadDistHisto    = kFALSE ; }
114   
115   //-------------------------------------------
116   //Cuts for multiple analysis, off by default
117   //-------------------------------------------
118   void         SwitchOnMultipleCutAnalysis()    { fMultiCutAna         = kTRUE  ; }
119   void         SwitchOffMultipleCutAnalysis()   { fMultiCutAna         = kFALSE ; }
120
121   void         SetNPtCuts   (Int_t s)           { if(s <= 10)fNPtCuts    = s    ; }
122   void         SetNAsymCuts (Int_t s)           { if(s <= 10)fNAsymCuts  = s    ; }
123   void         SetNNCellCuts(Int_t s)           { if(s <= 10)fNCellNCuts = s    ; }
124   void         SetNPIDBits  (Int_t s)           { if(s <= 10)fNPIDBits   = s    ; }
125   
126   void         SetPtCutsAt  (Int_t p,Float_t v) { if(p < 10)fPtCuts[p]   = v    ; }
127   void         SetAsymCutsAt(Int_t p,Float_t v) { if(p < 10)fAsymCuts[p] = v    ; }
128   void         SetNCellCutsAt(Int_t p,Int_t v)  { if(p < 10)fCellNCuts[p]= v    ; }
129   void         SetPIDBitsAt  (Int_t p,Int_t v)  { if(p < 10)fPIDBits[p]  = v    ; }
130   
131   //MC analysis related methods
132     
133   void         SwitchOnConversionChecker()      { fCheckConversion     = kTRUE  ; }
134   void         SwitchOffConversionChecker()     { fCheckConversion     = kFALSE ; }  
135   
136   void         SwitchOnMultipleCutAnalysisInSimulation()  { fMultiCutAnaSim = kTRUE  ; }
137   void         SwitchOffMultipleCutAnalysisInSimulation() { fMultiCutAnaSim = kFALSE ; }
138   
139   void         FillAcceptanceHistograms();
140   void         FillMCVersusRecDataHistograms(const Int_t    index1,  const Int_t    index2,
141                                              const Float_t  pt1,     const Float_t  pt2, 
142                                              const Int_t    ncells1, const Int_t    ncells2, 
143                                              const Double_t mass,    const Double_t pt,  const Double_t asym,    
144                                              const Double_t deta,    const Double_t dphi);
145   
146   private:
147
148   Bool_t   fDoOwnMix;                  // Do combinatorial background not the one provided by the frame
149   TList ** fEventsList ;               //![GetNCentrBin()*GetNZvertBin()*GetNRPBin()] Containers for photons in stored events
150
151   TString  fCalorimeter ;              // Select Calorimeter for IM
152   Int_t    fNModules ;                 // Number of EMCAL/PHOS modules, set as many histogras as modules 
153   
154   Bool_t   fUseAngleCut ;              // Select pairs depending on their opening angle
155   Bool_t   fUseAngleEDepCut ;          // Select pairs depending on their opening angle
156   Float_t  fAngleCut ;                 // Select pairs with opening angle larger than a threshold
157   Float_t  fAngleMaxCut ;              // Select pairs with opening angle smaller than a threshold
158   
159   //Multiple cuts analysis
160   Bool_t   fMultiCutAna;               // Do analysis with several or fixed cut
161   Bool_t   fMultiCutAnaSim;            // Do analysis with several or fixed cut, in the simulation related part
162   Int_t    fNPtCuts;                   // Number of pt cuts
163   Float_t  fPtCuts[10];                // Array with different pt cuts
164   Int_t    fNAsymCuts;                 // Number of assymmetry cuts
165   Float_t  fAsymCuts[10];              // Array with different assymetry cuts
166   Int_t    fNCellNCuts;                // Number of cuts with number of cells in cluster
167   Int_t    fCellNCuts[10];             // Array with different cell number cluster cuts
168   Int_t    fNPIDBits ;                       // Number of possible PID bit combinations
169   Int_t    fPIDBits[10];               // Array with different PID bits
170   
171   //Switchs of different analysis options
172   Bool_t   fMakeInvPtPlots;            // D plots with inverse pt weight
173   Bool_t   fSameSM;                    // Select only pairs in same SM;
174   Bool_t   fFillSMCombinations;        // Fill histograms with different cluster pairs in SM combinations
175   Bool_t   fCheckConversion;           // Fill histograms with tagged photons as conversion
176   Bool_t   fUseTrackMultBins;          // Use track multiplicity and not centrality bins
177   Bool_t   fUsePhotonMultBins;         // Use photon multiplicity and not centrality bins
178   Bool_t   fUseAverCellEBins;          // Use cell average energy and not centrality bins
179   Bool_t   fUseAverClusterEBins;       // Use cluster average energy and not centrality bins
180   Bool_t   fUseAverClusterEDenBins;    // Use cluster average energy density and not centrality bins
181   Bool_t   fFillBadDistHisto;          // Do plots for different distances to bad channels
182   
183   //Histograms
184   
185   //Event characterization
186   TH1F *   fhAverTotECluster;          //! Average number of clusters in SM
187   TH1F *   fhAverTotECell;             //! Average number of cells    in SM
188   TH2F *   fhAverTotECellvsCluster;    //! Average number of cells    in SM
189   TH1F *   fhEDensityCluster;          //! Deposited energy in event per cluster
190   TH1F *   fhEDensityCell;             //! Deposited energy in event per cell vs cluster
191   TH2F *   fhEDensityCellvsCluster;    //! Deposited energy in event per cell vs cluster
192
193   TH2F **  fhReMod ;                  //![fNModules]   REAL  two-photon invariant mass distribution for different calorimeter modules.
194   TH2F **  fhReSameSideEMCALMod ;     //![fNModules-2] REAL  two-photon invariant mass distribution for different clusters in different calorimeter modules.
195   TH2F **  fhReSameSectorEMCALMod ;   //![fNModules/2] REAL  two-photon invariant mass distribution for different clusters in different calorimeter modules.
196   TH2F **  fhReDiffPHOSMod ;          //![fNModules]   REAL  two-photon invariant mass distribution for different clusters in different calorimeter modules.
197   TH2F **  fhMiMod ;                  //![fNModules]   MIXED two-photon invariant mass distribution for different calorimeter modules.
198   TH2F **  fhMiSameSideEMCALMod ;     //![fNModules-2] REAL  two-photon invariant mass distribution for different clusters in different calorimeter modules.
199   TH2F **  fhMiSameSectorEMCALMod ;   //![fNModules/2] REAL  two-photon invariant mass distribution for different clusters in different calorimeter modules.
200   TH2F **  fhMiDiffPHOSMod ;          //![fNModules-1] REAL  two-photon invariant mass distribution for different clusters in different calorimeter modules.
201   
202   // Pairs with at least one cluster tagged as conversion
203   TH2F *   fhReConv ;                 //! REAL  two-photon invariant mass distribution one of the pair was 2 clusters with small mass 
204   TH2F *   fhMiConv ;                 //! MIXED two-photon invariant mass distribution one of the pair was 2 clusters with small mass
205   TH2F *   fhReConv2 ;                //! REAL  two-photon invariant mass distribution both pair photons recombined from 2 clusters with small mass 
206   TH2F *   fhMiConv2 ;                //! MIXED two-photon invariant mass distribution both pair photons recombined from 2 clusters with small mass
207
208   TH2F **  fhRe1 ;                    //![GetNCentrBin()*fNPIDBits*fNAsymCuts] REAL  two-photon invariant mass distribution for different centralities and Asymmetry 
209   TH2F **  fhMi1 ;                    //![GetNCentrBin()*fNPIDBits*fNAsymCuts] MIXED two-photon invariant mass distribution for different centralities and Asymmetry
210   TH2F **  fhRe2 ;                    //![GetNCentrBin()*fNPIDBits*fNAsymCuts] REAL  two-photon invariant mass distribution for different centralities and Asymmetry 
211   TH2F **  fhMi2 ;                    //![GetNCentrBin()*fNPIDBits*fNAsymCuts] MIXED two-photon invariant mass distribution for different centralities and Asymmetry
212   TH2F **  fhRe3 ;                    //![GetNCentrBin()*fNPIDBits*fNAsymCuts] REAL  two-photon invariant mass distribution for different centralities and Asymmetry 
213   TH2F **  fhMi3 ;                    //![GetNCentrBin()*fNPIDBits*fNAsymCuts] MIXED two-photon invariant mass distribution for different centralities and Asymmetry
214
215   //Histograms weighted by inverse pT
216   TH2F **  fhReInvPt1 ;                //![GetNCentrBin()*fNPIDBits*fNAsymCuts] REAL  two-photon invariant mass distribution for different centralities and Asymmetry, inverse pT
217   TH2F **  fhMiInvPt1 ;                //![GetNCentrBin()*fNPIDBits*fNAsymCuts] MIXED two-photon invariant mass distribution for different centralities and Asymmetry, inverse pT
218   TH2F **  fhReInvPt2 ;                //![GetNCentrBin()*fNPIDBits*fNAsymCuts] REAL  two-photon invariant mass distribution for different centralities and Asymmetry, inverse pT 
219   TH2F **  fhMiInvPt2 ;                //![GetNCentrBin()*fNPIDBits*fNAsymCuts] MIXED two-photon invariant mass distribution for different centralities and Asymmetry, inverse pT
220   TH2F **  fhReInvPt3 ;                //![GetNCentrBin()*fNPIDBits*fNAsymCuts] REAL  two-photon invariant mass distribution for different centralities and Asymmetry, inverse pT
221   TH2F **  fhMiInvPt3 ;                //![GetNCentrBin()*fNPIDBits*fNAsymCuts] MIXED two-photon invariant mass distribution for different centralities and Asymmetry, inverse pT
222   
223   //Multiple cuts: Assymmetry, pt, n cells, PID
224   TH2F **  fhRePtNCellAsymCuts ;       //![fNPtCuts*fNAsymCuts*fNCellNCuts*] REAL two-photon invariant mass distribution for different pt cut, n cell cuts and assymetry
225   TH2F **  fhMiPtNCellAsymCuts ;       //![fNPtCuts*fNAsymCuts*fNCellNCuts] Mixed two-photon invariant mass distribution for different pt cut, n cell cuts and assymetry
226   TH2F **  fhRePtNCellAsymCutsSM[12] ; //![fNPtCuts*fNAsymCuts*fNCellNCutsfNModules] REAL two-photon invariant mass distribution for different pt cut, n cell cuts and assymetry for each module
227  
228   TH2F **  fhRePIDBits ;               //![fNPIDBits]  REAL two-photon invariant mass distribution for different PID bits
229   TH3F **  fhRePtMult ;                //![fNAsymCuts] REAL two-photon invariant mass distribution for different track multiplicity and assymetry cuts
230   TH2F *   fhReSS[3] ;                 //! Combine clusters with 3 different cuts on shower shape
231   
232   // Asymmetry vs pt, in pi0/eta regions
233   TH2F *   fhRePtAsym    ;             //! REAL two-photon pt vs asymmetry
234   TH2F *   fhRePtAsymPi0 ;             //! REAL two-photon pt vs asymmetry, close to pi0 mass
235   TH2F *   fhRePtAsymEta ;             //! REAL two-photon pt vs asymmetry, close to eta mass
236   
237   //Centrality, Event plane bins
238   TH3F *   fhEvents;                   //! Number of events per centrality, RP, zbin
239   TH1F *   fhCentrality;               //! Histogram with centrality bins with at least one pare
240   TH1F *   fhCentralityNoPair;         //! Histogram with centrality bins with no pair
241
242   TH1F *   fhEventPlaneAngle;          //! Histogram with Event plane angle
243   TH2F *   fhEventPlaneResolution;     //! Histogram with Event plane resolution vs centrality
244   
245   // Pair opening angle
246   TH2F *   fhRealOpeningAngle ;        //! Opening angle of pair versus pair energy
247   TH2F *   fhRealCosOpeningAngle ;     //! Cosinus of opening angle of pair version pair energy
248   TH2F *   fhMixedOpeningAngle ;       //! Opening angle of pair versus pair energy
249   TH2F *   fhMixedCosOpeningAngle ;    //! Cosinus of opening angle of pair version pair energy
250   
251   //MC analysis histograms
252   //Pi0 Acceptance
253   TH1F *   fhPrimPi0Pt ;               //! Spectrum of Primary 
254   TH1F *   fhPrimPi0AccPt ;            //! Spectrum of primary with accepted daughters 
255   TH2F *   fhPrimPi0Y ;                //! Rapidity distribution of primary particles  vs pT
256   TH2F *   fhPrimPi0AccY ;             //! Rapidity distribution of primary with accepted daughters  vs pT
257   TH2F *   fhPrimPi0Phi ;              //! Azimutal distribution of primary particles  vs pT
258   TH2F *   fhPrimPi0AccPhi;            //! Azimutal distribution of primary with accepted daughters  vs pT
259   TH2F *   fhPrimPi0OpeningAngle ;     //! Opening angle of pair versus pair energy, primaries
260   TH2F *   fhPrimPi0CosOpeningAngle ;  //! Cosinus of opening angle of pair version pair energy, primaries
261   //Eta acceptance
262   TH1F *   fhPrimEtaPt ;               //! Spectrum of Primary 
263   TH1F *   fhPrimEtaAccPt ;            //! Spectrum of primary with accepted daughters 
264   TH2F *   fhPrimEtaY ;                //! Rapidity distribution of primary particles vs pT
265   TH2F *   fhPrimEtaAccY ;             //! Rapidity distribution of primary with accepted daughters  vs pT
266   TH2F *   fhPrimEtaPhi ;              //! Azimutal distribution of primary particles  vs pT
267   TH2F *   fhPrimEtaAccPhi;            //! Azimutal distribution of primary with accepted daughters      vs pT
268   
269   // Primaries origin
270   TH2F *   fhPrimPi0PtOrigin ;         //! Spectrum of generated pi0 vs mother
271   TH2F *   fhPrimEtaPtOrigin ;         //! Spectrum of generated eta vs mother
272   
273   //Pair origin
274   //Array of histograms ordered as follows: 0-Photon, 1-electron, 2-pi0, 3-eta, 4-a-proton, 5-a-neutron, 6-stable particles, 
275   // 7-other decays, 8-string, 9-final parton, 10-initial parton, intermediate, 11-colliding proton, 12-unrelated
276   TH2F *   fhMCOrgMass[13];            //! Mass vs pt of real pairs, check common origin of pair
277   TH2F *   fhMCOrgAsym[13];            //! Asymmetry vs pt of real pairs, check common origin of pair
278   TH2F *   fhMCOrgDeltaEta[13];        //! Delta Eta vs pt of real pairs, check common origin of pair
279   TH2F *   fhMCOrgDeltaPhi[13];        //! Delta Phi vs pt of real pairs, check common origin of pair
280   
281   //Multiple cuts in simulation, origin pi0 or eta
282   TH2F **  fhMCPi0MassPtRec;           //![fNPtCuts*fNAsymCuts*fNCellNCuts] Real pi0 pairs, reconstructed mass vs reconstructed pt of original pair  
283   TH2F **  fhMCPi0MassPtTrue;          //![fNPtCuts*fNAsymCuts*fNCellNCuts] Real pi0 pairs, reconstructed mass vs generated pt of original pair  
284   TH2F **  fhMCPi0PtTruePtRec;         //![fNPtCuts*fNAsymCuts*fNCellNCuts] Real pi0 pairs, reconstructed pt vs generated pt of pair
285   TH2F **  fhMCEtaMassPtRec;           //![fNPtCuts*fNAsymCuts*fNCellNCuts] Real eta pairs, reconstructed mass vs reconstructed pt of original pair  
286   TH2F **  fhMCEtaMassPtTrue;          //![fNPtCuts*fNAsymCuts*fNCellNCuts] Real eta pairs, reconstructed mass vs generated pt of original pair  
287   TH2F **  fhMCEtaPtTruePtRec;         //![fNPtCuts*fNAsymCuts*fNCellNCuts] Real eta pairs, reconstructed pt vs generated pt of pair
288
289   TH2F *   fhMCPi0PtOrigin ;           //! Mass of reoconstructed pi0 pairs  in calorimeter vs mother
290   TH2F *   fhMCEtaPtOrigin ;           //! Mass of reoconstructed pi0 pairs  in calorimeter vs mother
291
292   TH2F *   fhReMCFromConversion ;      //! Invariant mass of 2 clusters originated in conversions
293   TH2F *   fhReMCFromNotConversion ;   //! Invariant mass of 2 clusters not originated in conversions
294   TH2F *   fhReMCFromMixConversion ;   //! Invariant mass of 2 clusters one from conversion and the other not
295
296   AliAnaPi0(const AliAnaPi0 & g) ; // cpy ctor
297   AliAnaPi0 & operator = (const AliAnaPi0 & api0) ;//cpy assignment
298   
299   ClassDef(AliAnaPi0,21)
300 } ;
301
302
303 #endif //ALIANAPI0_H
304
305
306