]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/Chaoticity/AliFourPion.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / Chaoticity / AliFourPion.h
1 #ifndef AliFourPion_cxx
2 #define AliFourPion_cxx
3 //
4 // Class AliFourPion
5 //
6 // AliFourPion
7 // author:
8 //        Dhevan Gangadharan (dhevan.raja.gangadharan@cern.ch)
9 //
10
11
12
13 class TH1F;
14 class TH3F;
15 class TH1D;
16 class TH2D;
17 class TH3D;
18
19 class TProfile;
20 class TProfile2D;
21 class TRandom3;
22
23 class AliESDEvent;
24 class AliAODEvent;
25 class AliESDtrackCuts;
26 class AliESDpid;
27
28 #include "AliAnalysisTask.h"
29 #include "AliAnalysisTaskSE.h"
30 #include "AliESDpid.h"
31 #include "AliAODPid.h"
32 #include "AliFourPionEventCollection.h"
33 #include "AliCentrality.h"
34
35 class AliFourPion : public AliAnalysisTaskSE {
36  public:
37
38   AliFourPion();
39   AliFourPion(const Char_t *name);
40   virtual ~AliFourPion();
41   AliFourPion(const AliFourPion &obj); 
42   AliFourPion &operator=(const AliFourPion &obj);
43   
44
45   virtual void   UserCreateOutputObjects();
46   virtual void   UserExec(Option_t *option);
47   virtual void   Terminate(Option_t *);
48
49   enum {
50     kPairLimit = 10000,//10000
51     kNormPairLimit = 45000,
52     kMultLimitPbPb = 1800,//1800
53     kMultLimitpp = 300,
54     kMultBinspp = 11,
55     kMCarrayLimit = 150000,// 110000
56     kQbinsWeights = 40,
57     kNDampValues = 16,
58     kRmin = 5,// EW min radii 5 fm
59     kDENtypes = 44,
60   };
61
62   static const Int_t fKbinsT   = 4;// Set fKstep as well !!!!
63   static const Int_t fKbinsY   = 1;// Set fKstep as well !!!!
64   static const Int_t fEDbins   = 2;
65   static const Int_t fCentBins = 10;// 0-50%
66   static const Int_t fRVALUES  = 7;// 7 EW radii (5-11) , was 8 Gaussian radii (3-10fm)
67
68
69   Int_t GetNumKtBins() const {return AliFourPion::fKbinsT;}
70   Int_t GetNumRValues() const {return AliFourPion::fRVALUES;}
71   Int_t GetNumCentBins() const {return AliFourPion::fCentBins;}
72   Int_t GetNumEDBins() const {return AliFourPion::fEDbins;}
73   void SetWeightArrays(Bool_t legoCase=kTRUE, TH3F *histos[AliFourPion::fKbinsT][AliFourPion::fCentBins]=0x0);
74   void SetMomResCorrections(Bool_t legoCase=kTRUE, TH2D *temp2D=0x0);
75   void SetFSICorrelations(Bool_t legoCase=kTRUE, TH1D *tempss[12]=0x0, TH1D *tempos[12]=0x0);
76   void SetMuonCorrections(Bool_t legoCase=kTRUE, TH2D *tempMuon=0x0);
77   //
78   void SetMCdecision(Bool_t mc) {fMCcase = mc;}
79   void SetTabulatePairs(Bool_t tabulate) {fTabulatePairs = tabulate;}
80   void SetPbPbCase(Bool_t pbpb) {fPbPbcase = pbpb;}
81   void SetGenerateSignal(Bool_t gen) {fGenerateSignal = gen;}
82   void SetGeneratorOnly(Bool_t genOnly) {fGeneratorOnly = genOnly;}
83   void SetCentBinRange(Int_t low, Int_t high) {fCentBinLowLimit = low; fCentBinHighLimit = high;}
84   void SetLEGOCase(Bool_t lego) {fLEGO = lego;}
85   void SetFilterBit(UInt_t filterbit) {fFilterBit = filterbit;}
86   void SetMaxChi2NDF(Float_t MaxChi2NDF) {fMaxChi2NDF = MaxChi2NDF;}
87   void SetMinTPCncls(Int_t MinTPCncls) {fMinTPCncls = MinTPCncls;}
88   void SetPairSeparationCutEta(Float_t pairsep) {fMinSepPairEta = pairsep;}
89   void SetPairSeparationCutPhi(Float_t pairsep) {fMinSepPairPhi = pairsep;}
90   void SetNsigmaTPC(Float_t nsig) {fSigmaCutTPC = nsig;}
91   void SetNsigmaTOF(Float_t nsig) {fSigmaCutTOF = nsig;}
92   void SetRMax(Int_t rbin) {fRMax = rbin;}
93   void SetfcSq(Float_t fcSq) {ffcSq = fcSq;}
94   //
95
96
97  private:
98
99   void ParInit();
100   Bool_t AcceptPair(AliFourPionTrackStruct, AliFourPionTrackStruct);
101   Float_t Gamov(Int_t, Int_t, Float_t);
102   void Shuffle(Int_t*, Int_t, Int_t);
103   Float_t GetQinv(Float_t[], Float_t[]);
104   void GetQosl(Float_t[], Float_t[], Float_t&, Float_t&, Float_t&);
105   void GetWeight(Float_t[], Float_t[], Float_t&, Float_t&);
106   Float_t FSICorrelation(Int_t, Int_t, Float_t);
107   Float_t MCWeight(Int_t[2], Float_t, Float_t, Float_t, Float_t);
108   Float_t MCWeightOSL(Int_t, Int_t, Int_t, Int_t, Float_t, Float_t, Float_t, Float_t);
109   Float_t MCWeight3(Int_t, Float_t, Float_t, Int_t[3], Float_t[3], Float_t[3]);
110   Float_t MCWeightFSI3(Int_t, Float_t, Float_t, Int_t[3], Float_t[3]);
111   Float_t MCWeight4(Int_t, Float_t, Float_t, Int_t[4], Float_t[6], Float_t[6]);
112   Float_t MCWeightFSI4(Int_t, Float_t, Float_t, Int_t[4], Float_t[6]);
113   //
114   void SetFillBins2(Int_t, Int_t, Int_t&, Int_t&);
115   void SetFillBins3(Int_t, Int_t, Int_t, Short_t, Int_t&, Int_t&, Int_t&, Bool_t&, Bool_t&, Bool_t&);
116   void SetFillBins4(Int_t, Int_t, Int_t, Int_t, Int_t&, Int_t&, Int_t&, Int_t&, Int_t, Bool_t[13]);
117   void SetFSIindex(Float_t);
118   //
119   
120   
121   const char* fname;// name of class
122   AliAODEvent            *fAOD; //!    // AOD object
123   TList                  *fOutputList; //! Compact Output list
124   AliPIDResponse         *fPIDResponse; //! PID response object; equivalent to AliAODpidUtil
125   
126   
127   AliFourPionEventCollection ***fEC; //!
128   AliFourPionEventStruct *fEvt; //!
129   AliFourPionTrackStruct *fTempStruct; //!
130   TRandom3* fRandomNumber; //!
131
132   
133  
134   //////////////////////////////
135   // histogram structures
136
137   
138   struct St6 {
139     TH1D *fNorm3; //!
140     TH1D *fTerms3; //!
141     TProfile *fKfactor; //!
142     TProfile *fMeanQinv; //!
143     TH2D *fIdeal; //!
144     TH2D *fSmeared; //!
145     //
146     TH3D *fMuonSmeared; //!
147     TH3D *fMuonIdeal; //!
148     TH3D *fMuonPionK3; //!
149     TH3D *fPionPionK3; //!
150     //
151     TH2D *fTwoPartNorm; //!
152     TH2D *fTwoPartNegNorm; //!
153     TH2D *fTwoPartNormErr; //!
154   };
155   struct St7 {
156     TH3D *fTerms2OSL; //!
157     TH3D *fTerms2OSLQW; //!
158   };
159   struct St5 {
160     TH2D *fTerms2; //!
161     TH2D *fTerms2QW; //!
162     TH3D *fTerms2ThreeD; //!
163     TProfile2D *fAvgP; //!
164     TH2D *fIdeal; //!
165     TH2D *fSmeared; //!
166     TH2D *fUnitMultBin; //!
167     //
168     TH2D *fMuonSmeared; //!
169     TH2D *fMuonIdeal; //!
170     TH2D *fMuonPionK2; //!
171     TH2D *fPionPionK2; //!
172     TH1D *fMCqinv; //!
173     TH1D *fMCqinvQW; //!
174     TH2D *fPIDpurityDen; //!
175     TH3D *fPIDpurityNum; //!
176     struct St7 OSL_ktbin[2];
177   };
178   struct StFourPT {
179     TH1D *fNorm4; //!
180     TH1D *fTerms4; //!
181     TProfile *fKfactor; //!
182     TH2D *fIdeal; //!
183     TH2D *fSmeared; //!
184     //
185     TH3D *fMuonSmeared; //!
186     TH3D *fMuonIdeal; //!
187     TH3D *fMuonPionK4; //!
188     TH3D *fPionPionK4; //!
189     //
190     TH2D *fTwoPartNorm; //!
191     TH2D *fTwoPartNegNorm; //!
192     TH2D *fTwoPartNormErr; //!
193   };
194   struct St_EDB {
195     struct St5 TwoPT[2];
196     struct St6 ThreePT[5];
197     struct StFourPT FourPT[13];
198   };
199   struct St_M {
200     struct St_EDB EDB[fEDbins];
201   };
202   struct St4 {
203     struct St_M MB[fCentBins];
204   };
205   struct St3 {
206     struct St4 Charge4[2];
207     struct St_M MB[fCentBins];
208   };
209   struct St2 {
210     struct St3 Charge3[2];
211     struct St_M MB[fCentBins];
212   };
213   struct St1 {
214     struct St2 Charge2[2];
215   };
216   struct St1 Charge1[2];//!
217
218
219   /////////////////////
220   // 4D r3 denominator
221   struct St_Ky {
222     struct St_M MB[fCentBins];
223   };
224   struct St_Kt {
225     struct St_Ky KY[fKbinsY];
226   };
227   struct St_Kt KT[fKbinsT];//!
228   
229  
230   Bool_t fLEGO;
231   Bool_t fMCcase;
232   Bool_t fAODcase;
233   Bool_t fPbPbcase;
234   Bool_t fGenerateSignal;
235   Bool_t fGeneratorOnly;
236   Bool_t fTabulatePairs;
237   Int_t fRMax;
238   Float_t ffcSq;
239   UInt_t fFilterBit;
240   Float_t fMaxChi2NDF;
241   Int_t fMinTPCncls;
242   Double_t fBfield;
243   Int_t fMbin;
244   Int_t fFSIindex;
245   Int_t fEDbin;
246   Int_t fMbins;
247   Int_t fMultLimit;      
248   Int_t fCentBinLowLimit;
249   Int_t fCentBinHighLimit;
250   Int_t fEventCounter;
251   Int_t fEventsToMix;
252   Int_t fZvertexBins;
253   Int_t fMultLimits[kMultBinspp+1];
254   Float_t fQcut;
255   Float_t fQLowerCut;
256   Float_t fNormQcutLow;
257   Float_t fNormQcutHigh;
258   Float_t fKupperBound;
259   Float_t fQupperBoundQ2;
260   Float_t fQupperBoundQ3;
261   Float_t fQupperBoundQ4;
262   Float_t fQbinsQ2;
263   Float_t fQbinsQ3;
264   Float_t fQbinsQ4;
265   Float_t fQupperBoundWeights;
266   Float_t fKstepT[fKbinsT];
267   Float_t fKstepY[fKbinsY];
268   Float_t fKmeanT[fKbinsT];
269   Float_t fKmeanY[fKbinsY];
270   Float_t fKmiddleT[fKbinsT];
271   Float_t fKmiddleY[fKbinsY];
272   Float_t fQstep;
273   Float_t fQstepWeights;
274   Float_t fQmean[kQbinsWeights];
275   Float_t fDampStart;
276   Float_t fDampStep;
277   
278   Float_t fTPCTOFboundry;
279   Float_t fTOFboundry;
280   Float_t fSigmaCutTPC;
281   Float_t fSigmaCutTOF;
282   
283   Float_t fMinSepPairEta;
284   Float_t fMinSepPairPhi;
285   Float_t fShareQuality;
286   Float_t fShareFraction;
287   
288   Float_t fTrueMassP, fTrueMassPi, fTrueMassK, fTrueMassKs, fTrueMassLam;
289  
290   Int_t fKtIndexL,fKtIndexH;
291   //
292   Int_t fQoIndexL,fQoIndexH;
293   Int_t fQsIndexL,fQsIndexH;
294   Int_t fQlIndexL,fQlIndexH;
295
296   Bool_t fDummyB;
297
298   Float_t fKT3transition;
299   Float_t fKT4transition;
300   
301   
302   /* bool LowQPairSwitch_E0E0[kMultLimitPbPb][kMultLimitPbPb];//!
303   bool LowQPairSwitch_E0E1[kMultLimitPbPb][kMultLimitPbPb];//!
304   bool LowQPairSwitch_E0E2[kMultLimitPbPb][kMultLimitPbPb];//!
305   bool LowQPairSwitch_E0E3[kMultLimitPbPb][kMultLimitPbPb];//!
306   bool LowQPairSwitch_E1E2[kMultLimitPbPb][kMultLimitPbPb];//!
307   bool LowQPairSwitch_E1E3[kMultLimitPbPb][kMultLimitPbPb];//!
308   bool LowQPairSwitch_E2E3[kMultLimitPbPb][kMultLimitPbPb];//!
309   //
310   bool NormQPairSwitch_E0E0[kMultLimitPbPb][kMultLimitPbPb];//!
311   bool NormQPairSwitch_E0E1[kMultLimitPbPb][kMultLimitPbPb];//!
312   bool NormQPairSwitch_E0E2[kMultLimitPbPb][kMultLimitPbPb];//!
313   bool NormQPairSwitch_E0E3[kMultLimitPbPb][kMultLimitPbPb];//!
314   bool NormQPairSwitch_E1E2[kMultLimitPbPb][kMultLimitPbPb];//!
315   bool NormQPairSwitch_E1E3[kMultLimitPbPb][kMultLimitPbPb];//!
316   bool NormQPairSwitch_E2E3[kMultLimitPbPb][kMultLimitPbPb];//!
317   */
318   //
319   Char_t fDefaultsCharSwitch[kMultLimitPbPb];//!
320   TArrayC *fLowQPairSwitch_E0E0[kMultLimitPbPb];//!
321   TArrayC *fLowQPairSwitch_E0E1[kMultLimitPbPb];//!
322   TArrayC *fLowQPairSwitch_E0E2[kMultLimitPbPb];//!
323   TArrayC *fLowQPairSwitch_E0E3[kMultLimitPbPb];//!
324   TArrayC *fLowQPairSwitch_E1E1[kMultLimitPbPb];//!
325   TArrayC *fLowQPairSwitch_E1E2[kMultLimitPbPb];//!
326   TArrayC *fLowQPairSwitch_E1E3[kMultLimitPbPb];//!
327   TArrayC *fLowQPairSwitch_E2E3[kMultLimitPbPb];//!
328   //
329   TArrayC *fNormQPairSwitch_E0E0[kMultLimitPbPb];//!
330   TArrayC *fNormQPairSwitch_E0E1[kMultLimitPbPb];//!
331   TArrayC *fNormQPairSwitch_E0E2[kMultLimitPbPb];//!
332   TArrayC *fNormQPairSwitch_E0E3[kMultLimitPbPb];//!
333   TArrayC *fNormQPairSwitch_E1E1[kMultLimitPbPb];//!
334   TArrayC *fNormQPairSwitch_E1E2[kMultLimitPbPb];//!
335   TArrayC *fNormQPairSwitch_E1E3[kMultLimitPbPb];//!
336   TArrayC *fNormQPairSwitch_E2E3[kMultLimitPbPb];//!
337
338
339  public:
340   TH2D *fMomResC2;
341   TH2D *fWeightmuonCorrection;
342   TH1D *fFSIss[12];
343   TH1D *fFSIos[12];
344   TH3F *fNormWeight[fKbinsT][fCentBins];
345  
346
347   ClassDef(AliFourPion, 1); 
348 };
349
350 #endif