]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/Chaoticity/AliFourPion.h
Add 4-pion femto analysis code
[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 = 3,
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   //
77   void SetMCdecision(Bool_t mc) {fMCcase = mc;}
78   void SetTabulatePairs(Bool_t tabulate) {fTabulatePairs = tabulate;}
79   void SetPbPbCase(Bool_t pbpb) {fPbPbcase = pbpb;}
80   void SetGenerateSignal(Bool_t gen) {fGenerateSignal = gen;}
81   void SetGeneratorOnly(Bool_t genOnly) {fGeneratorOnly = genOnly;}
82   void SetCentBinRange(Int_t low, Int_t high) {fCentBinLowLimit = low; fCentBinHighLimit = high;}
83   void SetLEGOCase(Bool_t lego) {fLEGO = lego;}
84   void SetFilterBit(UInt_t filterbit) {fFilterBit = filterbit;}
85   void SetMaxChi2NDF(Float_t MaxChi2NDF) {fMaxChi2NDF = MaxChi2NDF;}
86   void SetMinTPCncls(Int_t MinTPCncls) {fMinTPCncls = MinTPCncls;}
87   void SetPairSeparationCutEta(Float_t pairsep) {fMinSepPairEta = pairsep;}
88   void SetPairSeparationCutPhi(Float_t pairsep) {fMinSepPairPhi = pairsep;}
89   void SetNsigmaTPC(Float_t nsig) {fSigmaCutTPC = nsig;}
90   void SetNsigmaTOF(Float_t nsig) {fSigmaCutTOF = nsig;}
91   void SetRMax(Int_t rbin) {fRMax = rbin;}
92   void SetfcSq(Float_t fcSq) {ffcSq = fcSq;}
93   //
94
95
96  private:
97
98   void ParInit();
99   Bool_t AcceptPair(AliFourPionTrackStruct, AliFourPionTrackStruct);
100   Float_t GamovFactor(Int_t, Int_t, Float_t);
101   void Shuffle(Int_t*, Int_t, Int_t);
102   Float_t GetQinv(Float_t[], Float_t[]);
103   void GetQosl(Float_t[], Float_t[], Float_t&, Float_t&, Float_t&);
104   void GetWeight(Float_t[], Float_t[], Float_t&, Float_t&);
105   Float_t FSICorrelation(Int_t, Int_t, Float_t);
106   Float_t MCWeight(Int_t[2], Float_t, Float_t, Float_t, Float_t);
107   Float_t MCWeightOSL(Int_t, Int_t, Int_t, Int_t, Float_t, Float_t, Float_t, Float_t);
108   Float_t MCWeight3(Int_t, Float_t, Float_t, Int_t[3], Float_t[3], Float_t[3]);
109   Float_t MCWeightFSI3(Int_t, Float_t, Float_t, Int_t[3], Float_t[3]);
110   Float_t MCWeight4(Int_t, Float_t, Float_t, Int_t[4], Float_t[6], Float_t[6]);
111   Float_t MCWeightFSI4(Int_t, Float_t, Float_t, Int_t[4], Float_t[6]);
112   //
113   void SetFillBins2(Int_t, Int_t, Int_t&, Int_t&);
114   void SetFillBins3(Int_t, Int_t, Int_t, Short_t, Int_t&, Int_t&, Int_t&, Bool_t&, Bool_t&, Bool_t&);
115   void SetFillBins4(Int_t, Int_t, Int_t, Int_t, Int_t&, Int_t&, Int_t&, Int_t&, Int_t, Bool_t[12]);
116   void SetFSIindex(Float_t);
117   //
118   
119   
120   const char* fname;// name of class
121   AliAODEvent            *fAOD; //!    // AOD object
122   TList                  *fOutputList; //! Compact Output list
123   AliPIDResponse         *fPIDResponse; //! PID response object; equivalent to AliAODpidUtil
124   
125   
126   AliFourPionEventCollection ***fEC; //!
127   AliFourPionEventStruct *fEvt; //!
128   AliFourPionTrackStruct *fTempStruct; //!
129   TRandom3* fRandomNumber; //!
130
131   
132  
133   //////////////////////////////
134   // histogram structures
135
136   
137   struct St6 {
138     TH1D *fNorm3; //!
139     TH1D *fTerms3; //!
140     TProfile *fKfactor; //!
141     TProfile *fMeanQinv; //!
142     TH2D *fIdeal; //!
143     TH2D *fSmeared; //!
144     //
145     TH2D *fMuonSmeared; //!
146     TH2D *fMuonIdeal; //!
147     TH2D *fMuonPionK3; //!
148     TH2D *fPionPionK3; //!
149     TH2D *fTwoPartNorm; //!
150   };
151   struct St7 {
152     TH3D *fTerms2OSL; //!
153     TH3D *fTerms2OSLQW; //!
154   };
155   struct St5 {
156     TH2D *fTerms2; //!
157     TH2D *fTerms2QW; //!
158     TH3D *fTerms2ThreeD; //!
159     TProfile2D *fAvgP; //!
160     TH2D *fIdeal; //!
161     TH2D *fSmeared; //!
162     TH2D *fUnitMultBin; //!
163     //
164     TH2D *fMuonSmeared; //!
165     TH2D *fMuonIdeal; //!
166     TH2D *fMuonPionK2; //!
167     TH2D *fPionPionK2; //!
168     TH1D *fMCqinv; //!
169     TH1D *fMCqinvQW; //!
170     TH2D *fPIDpurityDen; //!
171     TH3D *fPIDpurityNum; //!
172     struct St7 OSL_ktbin[2];
173   };
174   struct StFourPT {
175     TH1D *fNorm4; //!
176     TH1D *fTerms4; //!
177     TProfile *fKfactor; //!
178     TH2D *fIdeal; //!
179     TH2D *fSmeared; //!
180     //
181     TH2D *fMuonSmeared; //!
182     TH2D *fMuonIdeal; //!
183     TH2D *fMuonPionK4; //!
184     TH2D *fPionPionK4; //!
185     TH2D *fTwoPartNorm; //!
186   };
187   struct St_EDB {
188     struct St5 TwoPT[2];
189     struct St6 ThreePT[5];
190     struct StFourPT FourPT[5];
191   };
192   struct St_M {
193     struct St_EDB EDB[fEDbins];
194   };
195   struct St4 {
196     struct St_M MB[fCentBins];
197   };
198   struct St3 {
199     struct St4 Charge4[2];
200     struct St_M MB[fCentBins];
201   };
202   struct St2 {
203     struct St3 Charge3[2];
204     struct St_M MB[fCentBins];
205   };
206   struct St1 {
207     struct St2 Charge2[2];
208   };
209   struct St1 Charge1[2];//!
210
211
212   /////////////////////
213   // 4D r3 denominator
214   struct St_Ky {
215     struct St_M MB[fCentBins];
216   };
217   struct St_Kt {
218     struct St_Ky KY[fKbinsY];
219   };
220   struct St_Kt KT[fKbinsT];//!
221   
222  
223   Bool_t fLEGO;
224   Bool_t fMCcase;
225   Bool_t fAODcase;
226   Bool_t fPbPbcase;
227   Bool_t fGenerateSignal;
228   Bool_t fGeneratorOnly;
229   Bool_t fPdensityPairCut;
230   Bool_t fTabulatePairs;
231   Int_t fRMax;
232   Float_t ffcSq;
233   UInt_t fFilterBit;
234   Float_t fMaxChi2NDF;
235   Int_t fMinTPCncls;
236   Double_t fBfield;
237   Int_t fMbin;
238   Int_t fFSIindex;
239   Int_t fEDbin;
240   Int_t fMbins;
241   Int_t fMultLimit;      
242   Int_t fCentBinLowLimit;
243   Int_t fCentBinHighLimit;
244   Int_t fEventCounter;
245   Int_t fEventsToMix;
246   Int_t fZvertexBins;
247   Int_t fMultLimits[kMultBinspp+1];
248   Float_t fQcut;
249   Float_t fQLowerCut;
250   Float_t fNormQcutLow;
251   Float_t fNormQcutHigh;
252   Float_t fKupperBound;
253   Float_t fQupperBoundQ2;
254   Float_t fQupperBoundQ3;
255   Float_t fQupperBoundQ4;
256   Float_t fQbinsQ2;
257   Float_t fQbinsQ3;
258   Float_t fQbinsQ4;
259   Float_t fQupperBoundWeights;
260   Float_t fKstepT[fKbinsT];
261   Float_t fKstepY[fKbinsY];
262   Float_t fKmeanT[fKbinsT];
263   Float_t fKmeanY[fKbinsY];
264   Float_t fKmiddleT[fKbinsT];
265   Float_t fKmiddleY[fKbinsY];
266   Float_t fQstep;
267   Float_t fQstepWeights;
268   Float_t fQmean[kQbinsWeights];
269   Float_t fDampStart;
270   Float_t fDampStep;
271   
272   Float_t fTPCTOFboundry;
273   Float_t fTOFboundry;
274   Float_t fSigmaCutTPC;
275   Float_t fSigmaCutTOF;
276   
277   Float_t fMinSepPairEta;
278   Float_t fMinSepPairPhi;
279   Float_t fShareQuality;
280   Float_t fShareFraction;
281   
282   Float_t fTrueMassP, fTrueMassPi, fTrueMassK, fTrueMassKs, fTrueMassLam;
283  
284   Int_t fKtIndexL,fKtIndexH;
285   //
286   Int_t fQoIndexL,fQoIndexH;
287   Int_t fQsIndexL,fQsIndexH;
288   Int_t fQlIndexL,fQlIndexH;
289
290   Bool_t fDummyB;
291
292   Float_t fKT3transition;
293   Float_t fKT4transition;
294   
295
296   bool LowQPairSwitch_E0E0[kMultLimitPbPb][kMultLimitPbPb];//!
297   bool LowQPairSwitch_E0E1[kMultLimitPbPb][kMultLimitPbPb];//!
298   bool LowQPairSwitch_E0E2[kMultLimitPbPb][kMultLimitPbPb];//!
299   bool LowQPairSwitch_E0E3[kMultLimitPbPb][kMultLimitPbPb];//!
300   bool LowQPairSwitch_E1E2[kMultLimitPbPb][kMultLimitPbPb];//!
301   bool LowQPairSwitch_E1E3[kMultLimitPbPb][kMultLimitPbPb];//!
302   bool LowQPairSwitch_E2E3[kMultLimitPbPb][kMultLimitPbPb];//!
303   //
304   bool NormQPairSwitch_E0E0[kMultLimitPbPb][kMultLimitPbPb];//!
305   bool NormQPairSwitch_E0E1[kMultLimitPbPb][kMultLimitPbPb];//!
306   bool NormQPairSwitch_E0E2[kMultLimitPbPb][kMultLimitPbPb];//!
307   bool NormQPairSwitch_E0E3[kMultLimitPbPb][kMultLimitPbPb];//!
308   bool NormQPairSwitch_E1E2[kMultLimitPbPb][kMultLimitPbPb];//!
309   bool NormQPairSwitch_E1E3[kMultLimitPbPb][kMultLimitPbPb];//!
310   bool NormQPairSwitch_E2E3[kMultLimitPbPb][kMultLimitPbPb];//!
311
312  public:
313   TH2D *fMomResC2;
314   TH1D *fFSIss[12];
315   TH1D *fFSIos[12];
316   TH3F *fNormWeight[fKbinsT][fCentBins];
317   
318
319   ClassDef(AliFourPion, 1); 
320 };
321
322 #endif