1 #ifndef AliFourPion_cxx
2 #define AliFourPion_cxx
8 // Dhevan Gangadharan (dhevan.raja.gangadharan@cern.ch)
26 class AliESDtrackCuts;
29 #include "AliAnalysisTask.h"
30 #include "AliAnalysisTaskSE.h"
31 #include "AliESDpid.h"
32 #include "AliAODPid.h"
33 #include "AliFourPionEventCollection.h"
34 #include "AliCentrality.h"
36 class AliFourPion : public AliAnalysisTaskSE {
40 AliFourPion(const Char_t *name);
41 virtual ~AliFourPion();
42 AliFourPion(const AliFourPion &obj);
43 AliFourPion &operator=(const AliFourPion &obj);
46 virtual void UserCreateOutputObjects();
47 virtual void UserExec(Option_t *option);
48 virtual void Terminate(Option_t *);
51 kPairLimit = 10000,//10000
52 kNormPairLimit = 45000,
53 kMultLimitPbPb = 1800,//1800
56 kMCarrayLimit = 150000,// 110000
59 kRmin = 5,// EW min radii 5 fm
60 kDENtypes = 104,// was 44
63 static const Int_t fKbinsT = 4;// Set fKstep as well !!!!
64 static const Int_t fKbinsY = 1;// Set fKstep as well !!!!
65 static const Int_t fEDbins = 2;
66 static const Int_t fCentBins = 10;// 0-50%
67 static const Int_t fMbinsMixing = 10;// 5% widths
68 static const Int_t fRVALUES = 7;// 7 EW radii (5-11) , was 8 Gaussian radii (3-10fm)
71 Int_t GetNumKtBins() const {return AliFourPion::fKbinsT;}
72 Int_t GetNumRValues() const {return AliFourPion::fRVALUES;}
73 Int_t GetNumCentBins() const {return AliFourPion::fCentBins;}
74 Int_t GetNumEDBins() const {return AliFourPion::fEDbins;}
75 void SetWeightArrays(Bool_t legoCase=kTRUE, TH3F *histos[AliFourPion::fKbinsT][AliFourPion::fCentBins]=0x0);
76 void SetMomResCorrections(Bool_t legoCase=kTRUE, TH2D *temp2DSC=0x0, TH2D *temp2DMC=0x0);
77 void SetFSICorrelations(Bool_t legoCase=kTRUE, TH1D *tempss[12]=0x0, TH1D *tempos[12]=0x0);
78 void SetMuonCorrections(Bool_t legoCase=kTRUE, TH2D *tempMuon=0x0);
80 void SetMCdecision(Bool_t mc) {fMCcase = mc;}
81 void SetTabulatePairs(Bool_t tabulate) {fTabulatePairs = tabulate;}
82 void SetInterpolationType(Bool_t linearInterp) {fLinearInterpolation = linearInterp;}
83 void SetCollisionType(Bool_t ct) {fCollisionType = ct;}
84 void SetGenerateSignal(Bool_t gen) {fGenerateSignal = gen;}
85 void SetGeneratorOnly(Bool_t genOnly) {fGeneratorOnly = genOnly;}
86 void SetCentBinRange(Int_t low, Int_t high) {fCentBinLowLimit = low; fCentBinHighLimit = high;}
87 void SetLEGOCase(Bool_t lego) {fLEGO = lego;}
88 void SetFilterBit(UInt_t filterbit) {fFilterBit = filterbit;}
89 void SetMaxChi2NDF(Float_t MaxChi2NDF) {fMaxChi2NDF = MaxChi2NDF;}
90 void SetMinTPCncls(Int_t MinTPCncls) {fMinTPCncls = MinTPCncls;}
91 void SetPairSeparationCutEta(Float_t pairsep) {fMinSepPairEta = pairsep;}
92 void SetPairSeparationCutPhi(Float_t pairsep) {fMinSepPairPhi = pairsep;}
93 void SetNsigmaTPC(Float_t nsig) {fSigmaCutTPC = nsig;}
94 void SetNsigmaTOF(Float_t nsig) {fSigmaCutTOF = nsig;}
95 void SetRMax(Int_t rbin) {fRMax = rbin;}
96 void SetfcSq(Float_t fcSq) {ffcSq = fcSq;}
97 void SetMixedChargeCut(Bool_t mcCut) {fMixedChargeCut = mcCut;}
98 void SetMinPt(Float_t minPt) {fMinPt = minPt;}
99 void SetMaxPt(Float_t maxPt) {fMaxPt = maxPt;}
100 void SetKT3transition(Float_t KT3trans) {fKT3transition = KT3trans;}
101 void SetKT4transition(Float_t KT4trans) {fKT4transition = KT4trans;}
102 void SetTriggerType(Int_t tt) {fTriggerType = tt;}
109 Bool_t AcceptPair(AliFourPionTrackStruct, AliFourPionTrackStruct);
110 Bool_t AcceptPairPM(AliFourPionTrackStruct, AliFourPionTrackStruct);
111 Float_t Gamov(Int_t, Int_t, Float_t);
112 void Shuffle(Int_t*, Int_t, Int_t);
113 Float_t GetQinv(Float_t[], Float_t[]);
114 void GetQosl(Float_t[], Float_t[], Float_t&, Float_t&, Float_t&);
115 void GetWeight(Float_t[], Float_t[], Float_t&, Float_t&);
116 Float_t FSICorrelation(Int_t, Int_t, Float_t);
117 Float_t MCWeight(Int_t[2], Float_t, Float_t, Float_t, Float_t);
118 Float_t MCWeightOSL(Int_t, Int_t, Int_t, Int_t, Float_t, Float_t, Float_t, Float_t);
119 Float_t MCWeight3(Int_t, Float_t, Float_t, Int_t[3], Float_t[3], Float_t[3]);
120 Float_t MCWeightFSI3(Int_t, Float_t, Float_t, Int_t[3], Float_t[3]);
121 Float_t MCWeight4(Int_t, Float_t, Float_t, Int_t[4], Float_t[6], Float_t[6]);
122 Float_t MCWeightFSI4(Int_t, Float_t, Float_t, Int_t[4], Float_t[6]);
124 void SetFillBins2(Int_t, Int_t, Int_t&, Int_t&);
125 void SetFillBins3(Int_t, Int_t, Int_t, Short_t, Int_t&, Int_t&, Int_t&, Bool_t&, Bool_t&, Bool_t&);
126 void SetFillBins4(Int_t, Int_t, Int_t, Int_t, Int_t&, Int_t&, Int_t&, Int_t&, Int_t, Bool_t[13]);
127 void SetFSIindex(Float_t);
129 Float_t cubicInterpolate(Float_t[4], Float_t);
130 Float_t nCubicInterpolate(Int_t, Float_t*, Float_t[]);
131 //Double_t functionEW(Double_t *x, Double_t *par);
132 //Double_t functionLG(Double_t *x, Double_t *par);
134 const char* fname;// name of class
135 AliAODEvent *fAOD; //! // AOD object
136 TList *fOutputList; //! Compact Output list
137 AliPIDResponse *fPIDResponse; //! PID response object; equivalent to AliAODpidUtil
140 AliFourPionEventCollection ***fEC; //!
141 AliFourPionEventStruct *fEvt; //!
142 AliFourPionTrackStruct *fTempStruct; //!
143 TRandom3* fRandomNumber; //!
147 //////////////////////////////
148 // histogram structures
155 TProfile *fKfactor; //!
156 TProfile3D *fKfactor3D; //!
157 TProfile *fKfactorWeighted; //!
158 TProfile *fMeanQinv; //!
162 TH3D *fMuonSmeared; //!
163 TH3D *fMuonIdeal; //!
164 TH3D *fMuonPionK3; //!
165 TH3D *fPionPionK3; //!
167 TH2D *fTwoPartNorm; //!
168 TH2D *fTwoPartNegNorm; //!
169 TH2D *fTwoPartNormErr; //!
172 TH3D *fTerms2OSL; //!
173 TH3D *fTerms2OSLQW; //!
178 TH3D *fTerms2ThreeD; //!
179 TProfile2D *fAvgP; //!
182 TH2D *fUnitMultBin; //!
184 TH2D *fMuonSmeared; //!
185 TH2D *fMuonIdeal; //!
186 TH2D *fMuonPionK2; //!
187 TH2D *fPionPionK2; //!
190 TH2D *fPIDpurityDen; //!
191 TH3D *fPIDpurityNum; //!
192 struct St7 OSL_ktbin[2];
197 TProfile *fKfactor; //!
198 TProfile *fKfactorWeighted; //!
202 TH3D *fMuonSmeared; //!
203 TH3D *fMuonIdeal; //!
204 TH3D *fMuonPionK4; //!
205 TH3D *fPionPionK4; //!
207 TH2D *fTwoPartNorm; //!
208 TH2D *fTwoPartNegNorm; //!
209 TH2D *fTwoPartNormErr; //!
210 TH3D *fFullBuildFromFits; //!
211 TH3D *fPartialBuildFromFits; //!
215 struct St6 ThreePT[5];
216 struct StFourPT FourPT[13];
219 struct St_EDB EDB[fEDbins];
222 struct St_M MB[fCentBins];
225 struct St4 Charge4[2];
226 struct St_M MB[fCentBins];
229 struct St3 Charge3[2];
230 struct St_M MB[fCentBins];
233 struct St2 Charge2[2];
235 struct St1 Charge1[2];//!
238 /////////////////////
241 struct St_M MB[fCentBins];
244 struct St_Ky KY[fKbinsY];
246 struct St_Kt KT[fKbinsT];//!
252 Short_t fCollisionType;
253 Bool_t fGenerateSignal;
254 Bool_t fGeneratorOnly;
255 Bool_t fTabulatePairs;
256 Bool_t fLinearInterpolation;
257 Bool_t fMixedChargeCut;
271 Int_t fCentBinLowLimit;
272 Int_t fCentBinHighLimit;
277 Int_t fMultLimits[kMultBinspp+1];
282 Float_t fNormQcutLow;
283 Float_t fNormQcutHigh;
284 Float_t fKupperBound;
285 Float_t fQupperBoundQ2;
286 Float_t fQupperBoundQ3;
287 Float_t fQupperBoundQ4;
291 Float_t fQupperBoundWeights;
292 Float_t fQbinsQinv3D;
293 Float_t fQupperBoundQinv3D;
294 Float_t fKstepT[fKbinsT];
295 Float_t fKstepY[fKbinsY];
296 Float_t fKmeanT[fKbinsT];
297 Float_t fKmeanY[fKbinsY];
298 Float_t fKmiddleT[fKbinsT];
299 Float_t fKmiddleY[fKbinsY];
301 Float_t fQstepWeights;
302 Float_t fQmean[kQbinsWeights];
306 Float_t fTPCTOFboundry;
308 Float_t fSigmaCutTPC;
309 Float_t fSigmaCutTOF;
311 Float_t fMinSepPairEta;
312 Float_t fMinSepPairPhi;
313 Float_t fShareQuality;
314 Float_t fShareFraction;
316 Float_t fTrueMassP, fTrueMassPi, fTrueMassK, fTrueMassKs, fTrueMassLam;
318 Int_t fKtIndexL,fKtIndexH;
320 Int_t fQoIndexL,fQoIndexH;
321 Int_t fQsIndexL,fQsIndexH;
322 Int_t fQlIndexL,fQlIndexH;
326 Float_t fKT3transition;
327 Float_t fKT4transition;
329 Float_t farrP1[4][4][4];
330 Float_t farrP2[4][4][4];
332 /* bool LowQPairSwitch_E0E0[kMultLimitPbPb][kMultLimitPbPb];//!
333 bool LowQPairSwitch_E0E1[kMultLimitPbPb][kMultLimitPbPb];//!
334 bool LowQPairSwitch_E0E2[kMultLimitPbPb][kMultLimitPbPb];//!
335 bool LowQPairSwitch_E0E3[kMultLimitPbPb][kMultLimitPbPb];//!
336 bool LowQPairSwitch_E1E2[kMultLimitPbPb][kMultLimitPbPb];//!
337 bool LowQPairSwitch_E1E3[kMultLimitPbPb][kMultLimitPbPb];//!
338 bool LowQPairSwitch_E2E3[kMultLimitPbPb][kMultLimitPbPb];//!
340 bool NormQPairSwitch_E0E0[kMultLimitPbPb][kMultLimitPbPb];//!
341 bool NormQPairSwitch_E0E1[kMultLimitPbPb][kMultLimitPbPb];//!
342 bool NormQPairSwitch_E0E2[kMultLimitPbPb][kMultLimitPbPb];//!
343 bool NormQPairSwitch_E0E3[kMultLimitPbPb][kMultLimitPbPb];//!
344 bool NormQPairSwitch_E1E2[kMultLimitPbPb][kMultLimitPbPb];//!
345 bool NormQPairSwitch_E1E3[kMultLimitPbPb][kMultLimitPbPb];//!
346 bool NormQPairSwitch_E2E3[kMultLimitPbPb][kMultLimitPbPb];//!
349 Char_t fDefaultsCharSwitch[kMultLimitPbPb];//!
350 TArrayC *fLowQPairSwitch_E0E0[kMultLimitPbPb];//!
351 TArrayC *fLowQPairSwitch_E0E1[kMultLimitPbPb];//!
352 TArrayC *fLowQPairSwitch_E0E2[kMultLimitPbPb];//!
353 TArrayC *fLowQPairSwitch_E0E3[kMultLimitPbPb];//!
354 TArrayC *fLowQPairSwitch_E1E1[kMultLimitPbPb];//!
355 TArrayC *fLowQPairSwitch_E1E2[kMultLimitPbPb];//!
356 TArrayC *fLowQPairSwitch_E1E3[kMultLimitPbPb];//!
357 TArrayC *fLowQPairSwitch_E2E3[kMultLimitPbPb];//!
359 TArrayC *fNormQPairSwitch_E0E0[kMultLimitPbPb];//!
360 TArrayC *fNormQPairSwitch_E0E1[kMultLimitPbPb];//!
361 TArrayC *fNormQPairSwitch_E0E2[kMultLimitPbPb];//!
362 TArrayC *fNormQPairSwitch_E0E3[kMultLimitPbPb];//!
363 TArrayC *fNormQPairSwitch_E1E1[kMultLimitPbPb];//!
364 TArrayC *fNormQPairSwitch_E1E2[kMultLimitPbPb];//!
365 TArrayC *fNormQPairSwitch_E1E3[kMultLimitPbPb];//!
366 TArrayC *fNormQPairSwitch_E2E3[kMultLimitPbPb];//!
373 TH2D *fWeightmuonCorrection;
376 TH3F *fNormWeight[fKbinsT][fCentBins];
377 TF1 *ExchangeAmpFullSource[2];
378 TF1 *ExchangeAmpPointSource[2][50];
380 ClassDef(AliFourPion, 1);