]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/EBYE/BalanceFunctions/AliBalancePsi.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / EBYE / BalanceFunctions / AliBalancePsi.h
1 #ifndef ALIBALANCEPSI_H
2 #define ALIBALANCEPSI_H
3 /*  See cxx source for full Copyright notice */
4
5
6 /* $Id: AliBalancePsi.h 54125 2012-01-24 21:07:41Z miweber $ */
7
8 //-------------------------------------------------------------------------
9 //                          Class AliBalancePsi
10 //   This is the class for the Balance Function writ Psi analysis
11 //
12 //    Origin: Panos Christakoglou, Nikhef, Panos.Christakoglou@cern.ch
13 //-------------------------------------------------------------------------
14
15 #include <vector>
16 #include <TObject.h>
17 #include "TString.h"
18 #include "TH2D.h"
19
20 #include "AliTHn.h"
21
22 using std::vector;
23
24 #define ANALYSIS_TYPES  7
25 #define MAXIMUM_NUMBER_OF_STEPS 1024
26 #define MAXIMUM_STEPS_IN_PSI 360
27
28 class TH1D;
29 class TH2D;
30 class TH3D;
31
32 const Int_t kTrackVariablesSingle = 3;       // track variables in histogram (event class, pTtrig, vertexZ)
33 const Int_t kTrackVariablesPair   = 6;       // track variables in histogram (event class, dEta, dPhi, pTtrig, ptAssociated, vertexZ)
34 const TString gBFPsiAnalysisType[ANALYSIS_TYPES] = {"y","eta","qlong","qout","qside","qinv","phi"};
35
36 class AliBalancePsi : public TObject {
37  public:
38   enum EAnalysisType {
39     kRapidity = 0, 
40     kEta      = 1, 
41     kQlong    = 2, 
42     kQout     = 3, 
43     kQside    = 4, 
44     kQinv     = 5, 
45     kPhi      = 6 
46   };
47
48   AliBalancePsi();
49   AliBalancePsi(const AliBalancePsi& balance);
50   ~AliBalancePsi();
51
52   void SetCentralityIdentifier(const char* centralityId) {
53     fCentralityId = centralityId;}
54   
55   void SetAnalysisLevel(const char* analysisLevel) {
56     fAnalysisLevel = analysisLevel;}
57   void SetShuffle(Bool_t shuffle) {fShuffle = shuffle;}
58   void SetCentralityInterval(Double_t cStart, Double_t cStop)  { fCentStart = cStart; fCentStop = cStop;};
59   void SetEventClass(TString receivedEventClass){ fEventClass = receivedEventClass; } 
60   void SetDeltaEtaMax(Double_t receivedDeltaEtaMax){ fDeltaEtaMax = receivedDeltaEtaMax; }
61   void SetVertexZBinning(Bool_t receivedVertexBinning=kTRUE){ fVertexBinning = receivedVertexBinning; }
62   void SetCustomBinning(TString receivedCustomBinning) { fCustomBinning = receivedCustomBinning; }
63
64   void InitHistograms(void);
65
66   const char* GetAnalysisLevel() {return fAnalysisLevel.Data();}
67   Int_t GetNumberOfAnalyzedEvent() {return fAnalyzedEvents;}
68
69   void CalculateBalance(Double_t gReactionPlane, 
70                         TObjArray* particles,
71                         TObjArray* particlesMixed,
72                         Float_t bSign,
73                         Double_t kMultorCent = -100,
74                         Double_t vertexZ = 0);
75
76   TH1D   *GetTriggers(TString type,
77                       Double_t psiMin, 
78                       Double_t psiMax,
79                       Double_t vertexZMin,
80                       Double_t vertexZMax,
81                       Double_t ptTriggerMin,
82                       Double_t ptTriggerMax);
83   
84   TH2D   *GetCorrelationFunction(TString type,
85                                  Double_t psiMin, Double_t psiMax,
86                                  Double_t vertexZMin=-1,
87                                  Double_t vertexZMax=-1,
88                                  Double_t ptTriggerMin=-1.,
89                                  Double_t ptTriggerMax=-1.,
90                                  Double_t ptAssociatedMin=-1.,
91                                  Double_t ptAssociatedMax=-1,
92                                  AliBalancePsi *bMixed=NULL,
93                                  Bool_t normToTrig = kFALSE,
94                                  Double_t normalizationRangePhi = TMath::Pi()/6.);
95
96   TH2D   *GetCorrelationFunctionPN(Double_t psiMin, Double_t psiMax,
97                                    Double_t vertexZMin=-1,
98                                    Double_t vertexZMax=-1,
99                                    Double_t ptTriggerMin=-1.,
100                                    Double_t ptTriggerMax=-1.,
101                                    Double_t ptAssociatedMin=-1.,
102                                    Double_t ptAssociatedMax=-1);
103   TH2D   *GetCorrelationFunctionNP(Double_t psiMin, Double_t psiMax,
104                                    Double_t vertexZMin=-1,
105                                    Double_t vertexZMax=-1,
106                                    Double_t ptTriggerMin=-1.,
107                                    Double_t ptTriggerMax=-1.,
108                                    Double_t ptAssociatedMin=-1.,
109                                    Double_t ptAssociatedMax=-1);
110   TH2D   *GetCorrelationFunctionPP(Double_t psiMin, Double_t psiMax,
111                                    Double_t vertexZMin=-1,
112                                    Double_t vertexZMax=-1,
113                                    Double_t ptTriggerMin=-1.,
114                                    Double_t ptTriggerMax=-1.,
115                                    Double_t ptAssociatedMin=-1.,
116                                    Double_t ptAssociatedMax=-1);
117   TH2D   *GetCorrelationFunctionNN(Double_t psiMin, Double_t psiMax,
118                                    Double_t vertexZMin=-1,
119                                    Double_t vertexZMax=-1,
120                                    Double_t ptTriggerMin=-1.,
121                                    Double_t ptTriggerMax=-1.,
122                                    Double_t ptAssociatedMin=-1.,
123                                    Double_t ptAssociatedMax=-1);  
124   TH2D   *GetCorrelationFunctionChargeIndependent(Double_t psiMin, Double_t psiMax,
125                                                   Double_t vertexZMin=-1,
126                                                   Double_t vertexZMax=-1,
127                                                   Double_t ptTriggerMin=-1.,
128                                                   Double_t ptTriggerMax=-1.,
129                                                   Double_t ptAssociatedMin=-1.,
130                                                   Double_t ptAssociatedMax=-1);
131
132   AliTHn *GetHistNp() {return fHistP;}
133   AliTHn *GetHistNn() {return fHistN;}
134   AliTHn *GetHistNpn() {return fHistPN;}
135   AliTHn *GetHistNnp() {return fHistNP;}
136   AliTHn *GetHistNpp() {return fHistPP;}
137   AliTHn *GetHistNnn() {return fHistNN;}
138
139   void SetHistNp(AliTHn *gHist) {
140     fHistP = gHist; }//fHistP->FillParent(); fHistP->DeleteContainers();}
141   void SetHistNn(AliTHn *gHist) {
142     fHistN = gHist; }//fHistN->FillParent(); fHistN->DeleteContainers();}
143   void SetHistNpn(AliTHn *gHist) {
144     fHistPN = gHist; }//fHistPN->FillParent(); fHistPN->DeleteContainers();}
145   void SetHistNnp(AliTHn *gHist) {
146     fHistNP = gHist; }//fHistNP->FillParent(); fHistNP->DeleteContainers();}
147   void SetHistNpp(AliTHn *gHist) {
148     fHistPP = gHist; }//fHistPP->FillParent(); fHistPP->DeleteContainers();}
149   void SetHistNnn(AliTHn *gHist) {
150     fHistNN = gHist; }//fHistNN->FillParent(); fHistNN->DeleteContainers();}
151
152   TH1D *GetBalanceFunctionHistogram(Int_t iVariableSingle,
153                                     Int_t iVariablePair,
154                                     Double_t psiMin, Double_t psiMax,
155                                     Double_t vertexZMin=-1,
156                                     Double_t vertexZMax=-1,
157                                     Double_t ptTriggerMin=-1.,
158                                     Double_t ptTriggerMax=-1.,
159                                     Double_t ptAssociatedMin=-1.,
160                                     Double_t ptAssociatedMax=-1);   //
161
162   TH1D *GetBalanceFunctionHistogram2pMethod(Int_t iVariableSingle,
163                                             Int_t iVariablePair,
164                                             Double_t psiMin, Double_t psiMax,
165                                             Double_t vertexZMin=-1,
166                                             Double_t vertexZMax=-1,
167                                             Double_t ptTriggerMin=-1.,
168                                             Double_t ptTriggerMax=-1.,
169                                             Double_t ptAssociatedMin=-1.,
170                                             Double_t ptAssociatedMax=-1,
171                                             AliBalancePsi *bfMix=NULL);
172
173   TH2D *GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin, Double_t psiMax,
174                                            Double_t vertexZMin=-1,
175                                            Double_t vertexZMax=-1,
176                                            Double_t ptTriggerMin=-1.,
177                                            Double_t ptTriggerMax=-1.,
178                                            Double_t ptAssociatedMin=-1.,
179                                            Double_t ptAssociatedMax=-1);   
180   
181   TH2D *GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(Double_t psiMin, Double_t psiMax,
182                                                    Double_t vertexZMin=-1,
183                                                    Double_t vertexZMax=-1,
184                                                    Double_t ptTriggerMin=-1.,
185                                                    Double_t ptTriggerMax=-1.,
186                                                    Double_t ptAssociatedMin=-1.,
187                                                    Double_t ptAssociatedMax=-1.,
188                                                    AliBalancePsi *bfMix=NULL);
189
190   TH1D *GetBalanceFunction1DFrom2D2pMethod(Bool_t bPhi,
191                                            Double_t psiMin, Double_t psiMax,
192                                            Double_t vertexZMin=-1,
193                                            Double_t vertexZMax=-1,
194                                            Double_t ptTriggerMin=-1.,
195                                            Double_t ptTriggerMax=-1.,
196                                            Double_t ptAssociatedMin=-1.,
197                                            Double_t ptAssociatedMax=-1.,
198                                            AliBalancePsi *bfMix=NULL);
199
200   Bool_t GetMomentsAnalytical(Int_t fVariable, TH1D* gHist, Bool_t kUseZYAM,
201                               Double_t &mean, Double_t &meanError,
202                               Double_t &sigma, Double_t &sigmaError,
203                               Double_t &skewness, Double_t &skewnessError,
204                               Double_t &kurtosis, Double_t &kurtosisError);
205
206   //++++++++++++++++++//
207   Double_t GetFWHM(Int_t gDeltaEtaPhi, TH1D* gHist,
208                    Double_t &fwhm_spline, Double_t &fwhmError);
209   //++++++++++++++++++//
210   
211   TH2D *GetQAHistHBTbefore() {return fHistHBTbefore;}
212   TH2D *GetQAHistHBTafter() {return fHistHBTafter;}
213   TH3D *GetQAHistConversionbefore() {return fHistConversionbefore;}
214   TH3D *GetQAHistConversionafter() {return fHistConversionafter;}
215   TH2D *GetQAHistPsiMinusPhi() {return fHistPsiMinusPhi;}
216   TH3D *GetQAHistResonancesBefore() {return fHistResonancesBefore;}
217   TH3D *GetQAHistResonancesRho() {return fHistResonancesRho;}
218   TH3D *GetQAHistResonancesK0() {return fHistResonancesK0;}
219   TH3D *GetQAHistResonancesLambda() {return fHistResonancesLambda;}
220   TH3D *GetQAHistQbefore() {return fHistQbefore;}
221   TH3D *GetQAHistQafter() {return fHistQafter;}
222
223   void UseResonancesCut() {fResonancesCut = kTRUE;}
224   void UseHBTCut(Double_t setHBTCutValue = 0.02) {
225     fHBTCut = kTRUE; fHBTCutValue = setHBTCutValue;}
226   void UseConversionCut(Double_t setInvMassCutConversion = 0.04) {
227     fConversionCut = kTRUE; fInvMassCutConversion = setInvMassCutConversion; }
228   void UseMomentumDifferenceCut(Double_t gDeltaPtCutMin) {
229     fQCut = kTRUE; fDeltaPtMin = gDeltaPtCutMin;}
230
231   // related to customized binning of output AliTHn
232   Bool_t    IsUseVertexBinning() { return fVertexBinning; }
233   TString   GetBinningString()   { return fBinningString; }
234   Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins);
235
236  private:
237   Float_t   GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign); 
238
239   Bool_t fShuffle; //shuffled balance function object
240   TString fAnalysisLevel; //ESD, AOD or MC
241   Int_t fAnalyzedEvents; //number of events that have been analyzed
242
243   TString fCentralityId;//Centrality identifier to be used for the histo naming
244
245   Double_t fCentStart;
246   Double_t fCentStop;
247
248   AliTHn *fHistP; //N+
249   AliTHn *fHistN; //N-
250   AliTHn *fHistPN; //N+-
251   AliTHn *fHistNP; //N-+
252   AliTHn *fHistPP; //N++
253   AliTHn *fHistNN; //N--
254
255   //QA histograms
256   TH2D *fHistHBTbefore; // Delta Eta vs. Delta Phi before HBT inspired cuts
257   TH2D *fHistHBTafter; // Delta Eta vs. Delta Phi after HBT inspired cuts
258   TH3D *fHistConversionbefore; // 3D histogram (Deta,Dphi,Invmass) before Conversion cuts
259   TH3D *fHistConversionafter; // 3D histogram (Deta,Dphi,Invmass) before Conversion cuts
260   TH2D *fHistPsiMinusPhi;// psi - phi QA histogram
261   TH3D *fHistResonancesBefore; // 3D histogram (Deta,Dphi,Invmass) before resonance cuts
262   TH3D *fHistResonancesRho;    // 3D histogram (Deta,Dphi,Invmass) after removing rho 
263   TH3D *fHistResonancesK0;     // 3D histogram (Deta,Dphi,Invmass) after removing rho, K0 
264   TH3D *fHistResonancesLambda; // 3D histogram (Deta,Dphi,Invmass) after removing rho, K0, and Lambda
265   TH3D *fHistQbefore; // Delta Eta vs. Delta Phi before cut on momentum difference
266   TH3D *fHistQafter; // Delta Eta vs. Delta Phi after cut on momentum difference
267
268   Double_t fPsiInterval;// interval in Psi-phi1
269   Double_t fDeltaEtaMax;// maximum delta eta for output THnSparse
270
271   Bool_t fResonancesCut;//resonances cut
272   Bool_t fHBTCut;//cut for two-track efficiency (like HBT group)
273   Double_t fHBTCutValue;// value for two-track efficiency cut (default = 0.02 from dphicorrelations)
274   Bool_t fConversionCut;//conversion cut
275   Double_t fInvMassCutConversion;//invariant mass for conversion cut
276   Bool_t fQCut;//cut on momentum difference to suppress femtoscopic effect correlations
277   Double_t fDeltaPtMin;//delta pt cut: minimum value
278   Bool_t fVertexBinning;//use vertex z binning in AliTHn
279   TString fCustomBinning;//for setting customized binning
280   TString fBinningString;//final binning string
281
282   TString fEventClass;
283
284   AliBalancePsi & operator=(const AliBalancePsi & ) {return *this;}
285
286   ClassDef(AliBalancePsi, 2)
287 };
288
289 #endif