Revert "Revert git "Femto ESE code updates (Alice Ohlson)""
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / Chaoticity / AliThreePionRadii.h
1 #ifndef AliThreePionRadii_cxx
2 #define AliThreePionRadii_cxx
3 //
4 // Class AliThreePionRadii
5 //
6 // AliThreePionRadii
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 "AliChaoticityEventCollection.h"
33
34 class AliThreePionRadii : public AliAnalysisTaskSE {
35  public:
36
37   AliThreePionRadii();
38   AliThreePionRadii(const Char_t *name);
39   virtual ~AliThreePionRadii();
40   AliThreePionRadii(const AliThreePionRadii &obj); 
41   AliThreePionRadii &operator=(const AliThreePionRadii &obj);
42   
43
44   virtual void   UserCreateOutputObjects();
45   virtual void   UserExec(Option_t *option);
46   virtual void   Terminate(Option_t *);
47
48   enum {
49     kPairLimit = 15000,//15000
50     kNormPairLimit = 45000,//45000
51     kMultLimitPbPb = 2000,//2000
52     kMultLimitPP = 300,//300
53     kMCarrayLimit = 110000,//110000
54     kQbins = 20,
55     kQbinsWeights = 40,
56     kQbinsPP = 50,// 40
57     kQbinsWeightsPP = 40,
58     kNDampValues = 16,
59     kRmin = 2,// min radii for Momentum resolution calculations
60     kDENtypes = 1,// was (kRVALUES)*kNDampValues
61     kSCLimit2 = 1,// 1, 6
62     kSCLimit3 = 1// 1, 10
63   };
64
65   static const Int_t fEDbins   = 3;
66   static const Int_t fCentBins = 20;// 0-100% PbPb, pPb, pp
67   static const Int_t fRVALUES  = 10;// 
68
69
70   Int_t GetNumRValues() const {return AliThreePionRadii::fRVALUES;}
71   Int_t GetNumCentBins() const {return AliThreePionRadii::fCentBins;}
72   Int_t GetNumEDBins() const {return AliThreePionRadii::fEDbins;}
73   void SetFSICorrelations(Bool_t legoCase=kTRUE, TH1D *temp1DSS[10]=0x0, TH1D *temp1DOS[10]=0x0);
74   //
75   void SetMCdecision(Bool_t mc) {fMCcase = mc;}
76   void SetPbPbCase(Bool_t pbpb) {fPbPbcase = pbpb;}
77   void SetGenerateSignal(Bool_t gen) {fGenerateSignal = gen;}
78   void SetNumKt3Bins(Int_t kt3bins) {fKt3bins = kt3bins;}
79   void SetV0Mbinning(Bool_t V0Mbinning) {fV0Mbinning = V0Mbinning;}
80   void SetCentBinRange(Int_t low, Int_t high) {fCentBinLowLimit = low; fCentBinHighLimit = high;}
81   void SetLEGOCase(Bool_t lego) {fLEGO = lego;}
82   void SetFilterBit(UInt_t filterbit) {fFilterBit = filterbit;}
83   void SetMaxChi2NDF(Float_t MaxChi2NDF) {fMaxChi2NDF = MaxChi2NDF;}
84   void SetMinTPCncls(Int_t MinTPCncls) {fMinTPCncls = MinTPCncls;}
85   void SetPairSeparationCutEta(Float_t pairsep) {fMinSepPairEta = pairsep;}
86   void SetPairSeparationCutPhi(Float_t pairsep) {fMinSepPairPhi = pairsep;}
87   void SetNsigmaTPC(Float_t nsig) {fSigmaCutTPC = nsig;}
88   void SetNsigmaTOF(Float_t nsig) {fSigmaCutTOF = nsig;}
89   void SetRMax(Int_t rbin) {fRMax = rbin;}
90   void SetTriggerType(Int_t tt) {fTriggerType = tt;}
91   //
92
93
94  private:
95
96   void ParInit();
97   Bool_t AcceptPair(AliChaoticityTrackStruct*, AliChaoticityTrackStruct*);
98   Float_t GamovFactor(Int_t, Int_t, Float_t);
99   void Shuffle(Int_t*, Int_t, Int_t);
100   Short_t FillIndex2part(Short_t);
101   Short_t FillIndex3part(Short_t);
102   Short_t SetQcutBin(Short_t);
103   Short_t SetNormBin(Short_t);
104   void SetFillBins2(Short_t, Short_t, Short_t, Int_t, Int_t, Int_t&, Int_t&);
105   void SetFillBins3(Short_t, Short_t, Short_t, Short_t, Int_t, Int_t, Int_t, Short_t, Int_t&, Int_t&, Int_t&, Bool_t&, Bool_t&, Bool_t&);
106   void ArrangeQs(Short_t, Short_t, Short_t, Short_t, Int_t, Int_t, Int_t, Float_t, Float_t, Float_t, Short_t, Short_t, Float_t&, Float_t&, Float_t&);
107   Float_t GetQinv(Short_t, Float_t[], Float_t[]);
108   void GetQosl(Float_t[], Float_t[], Float_t&, Float_t&, Float_t&);
109   Float_t FSICorrelation2(Int_t, Int_t, Float_t);
110   Float_t MCWeight(Int_t, Int_t, Float_t, Int_t, Float_t);
111   Float_t MCWeight3D(Bool_t, Int_t, Int_t, Float_t, Float_t, Float_t);
112   //
113   
114   
115   const char* fname;// name of class
116   AliAODEvent            *fAOD; //!    // AOD object
117   TList                  *fOutputList; //! Compact Output list
118   AliPIDResponse         *fPIDResponse; //! PID response object; equivalent to AliAODpidUtil
119   
120   
121   AliChaoticityEventCollection ***fEC; //!
122   AliChaoticityEventStruct *fEvt; //!
123   AliChaoticityTrackStruct *fTempStruct; //!
124   TRandom3* fRandomNumber; //!
125
126   
127  
128   //////////////////////////////
129   // histogram structures
130
131   struct St6 {
132     TH1D *fNorm3; //!
133     TH3D *fTerms3; //!
134     TH1D *fTermsQ3; //!
135     TH1D *fIdeal; //!
136     TH1D *fSmeared; //!
137     TH1D *fMeanKt; //!
138   };
139   struct St5 {
140     TH2D *fExplicit2; //!
141     TH2D *fExplicit2QW; //!
142     TProfile2D *fAvgP; //!
143     TH2D *fIdeal; //!
144     TH2D *fSmeared; //!
145     TH1D *fMeanKt; //!
146     //
147     TH1D *fMCqinv; //!
148     TH1D *fMCqinvQW; //!
149     TH2D *fPIDpurityDen; //!
150     TH3D *fPIDpurityNum; //!
151   };
152   struct St_EDB {// SC structure
153     struct St5 TwoPT[2];
154     struct St6 ThreePT[5];
155   };
156   struct St_M {
157     struct St_EDB EDB[fEDbins];
158   };
159   struct St4 {
160     struct St_M MB[fCentBins];
161   };
162   struct St3 {
163     struct St4 SC[kSCLimit3];
164   };
165   struct St2 {
166     struct St3 Charge3[2];
167     struct St4 SC[kSCLimit2];
168   };
169   struct St1 {
170     struct St2 Charge2[2];
171   };
172   struct St1 Charge1[2];//!
173
174
175  
176   Bool_t fLEGO;
177   Bool_t fMCcase;
178   Bool_t fAODcase;
179   Bool_t fPbPbcase;
180   Bool_t fGenerateSignal;
181   Bool_t fGeneratorOnly;
182   Bool_t fPdensityPairCut;
183   Int_t fRMax;
184   UInt_t fFilterBit;
185   Float_t fMaxChi2NDF;
186   Int_t fMinTPCncls;
187   Double_t fBfield;
188   Int_t fMbin;
189   Int_t fFSIindex;
190   Int_t fEDbin;
191   Int_t fMbins;
192   Int_t fMultLimit;  
193   Int_t fKt3bins;
194   Bool_t fV0Mbinning;
195   Int_t fCentBinLowLimit;
196   Int_t fCentBinHighLimit;
197   Int_t fTriggerType;
198   Int_t fEventCounter;
199   Int_t fEventsToMix;
200   Int_t fZvertexBins;
201   Int_t fMultLimits[fCentBins+1];
202   Float_t fQcut[3];
203   Float_t fQLowerCut;
204   Float_t fQlimitC2;
205   Int_t fQbinsC2;
206   Float_t fNormQcutLow[3];
207   Float_t fNormQcutHigh[3];
208   Float_t fKupperBound;
209   Float_t fQupperBound;
210   Int_t   fQbins;
211   Float_t fDampStart;
212   Float_t fDampStep;
213   
214   Float_t fTPCTOFboundry;
215   Float_t fTOFboundry;
216   Float_t fSigmaCutTPC;
217   Float_t fSigmaCutTOF;
218   
219   Float_t fMinSepPairEta;
220   Float_t fMinSepPairPhi;
221   Float_t fShareQuality;
222   Float_t fShareFraction;
223   
224   Float_t fTrueMassP, fTrueMassPi, fTrueMassK, fTrueMassKs, fTrueMassLam;
225
226   Bool_t fDummyB;
227
228   
229   Char_t fDefaultsCharMult[kMultLimitPbPb];//!
230   Char_t fDefaultsCharSE[kPairLimit];//!
231   Char_t fDefaultsCharME[2*kPairLimit];//!
232   Int_t fDefaultsInt[kMultLimitPbPb];//!
233   TArrayI *fPairLocationSE[kMultLimitPbPb];//!
234   TArrayI *fPairLocationME[kMultLimitPbPb];//!
235   TArrayC *fTripletSkip1[kPairLimit];//!
236   TArrayC *fTripletSkip2[2*kPairLimit];//!
237   TArrayI *fOtherPairLocation1[2][kMultLimitPbPb];//!
238   TArrayI *fOtherPairLocation2[2][kMultLimitPbPb];//!
239   TArrayC *fNormPairSwitch[3][kMultLimitPbPb];//!
240   TArrayC *fPairSplitCut[4][kMultLimitPbPb];//!
241   
242   AliChaoticityNormPairStruct *fNormPairs[3];//!
243   
244  public:
245   TH1D *fFSI2SS[10];
246   TH1D *fFSI2OS[10];
247
248   ClassDef(AliThreePionRadii, 1); 
249 };
250
251 #endif