]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Tasks/AliAnalysisTaskFlowStrange.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliAnalysisTaskFlowStrange.h
1 /////////////////////////////////////////////////////
2 // AliAnalysisTaskFlowStrange:
3 // Analysis task to select K0/Lambda candidates for flow analysis.
4 // Authors: Cristian Ivan (civan@cern.ch)
5 //          Carlos Perez (cperez@cern.ch)
6 //          Pawel Debski (pdebski@cern.ch)
7 //////////////////////////////////////////////////////
8
9 /* Copyright(c) 1998-1999, ALICExperiment at CERN, All rights reserved. *
10 * See cxx source for full Copyright notice */
11 /* $Id: $ */
12
13 #ifndef AliAnalysisTaskFlowStrange_H
14 #define AliAnalysisTaskFlowStrange_H
15
16 #include "AliAnalysisTaskSE.h"
17
18 class TList;
19 class TH2D;
20 class TObjArray;
21 class TClonesArray;
22 class AliAODMCParticle;
23 class AliESDtrackCuts;
24 class AliFlowEventCuts;
25 class AliPIDResponse;
26 class AliESDEvent;
27 class AliAODEvent;
28 class AliAODv0;
29 class AliESDv0;
30 class AliVVertex;
31 class AliFlowBayesianPID;
32 class AliAODVertex;
33
34 class AliAnalysisTaskFlowStrange : public AliAnalysisTaskSE {
35  public:
36   enum Especie {kKZE=0,kLDA=1,kLDABAR=2,kLDAALL=3,kCHARGED=90,kPION=91,kKAON=92,kPROTON=93};
37   AliAnalysisTaskFlowStrange();
38   AliAnalysisTaskFlowStrange(const Char_t *name);
39   virtual ~AliAnalysisTaskFlowStrange();
40   virtual void UserCreateOutputObjects();
41   virtual void Exec(Option_t*);
42   virtual void UserExec(Option_t *);
43   virtual void Terminate(Option_t *);
44
45   void MyUserExec(Option_t *);
46   void SetDebug(Int_t val=1) {fDebug = val;}
47   void SetQAlevel(Int_t qa) {fQAlevel = qa;}
48
49   void SetMass(Int_t n, Double_t m, Double_t M) {fMassBins=n;fMinMass=m;fMaxMass=M;}
50
51   void SetpA() {fRunOnpA = kTRUE;  fRunOnpp = kFALSE;}
52   void Setpp() {fRunOnpA = kFALSE; fRunOnpp = kTRUE; }
53   void SetK0L0(Int_t specie) {fSpecie=specie;}
54   void SetOnline(Bool_t val) {fOnline=val;}
55   void SetHomemade(Bool_t val) {fHomemade=val;}
56   void SetExcludeTPCEdges(Bool_t value) {fExcludeTPCEdges=value;}
57   void SetCentralityRange(TString val, Int_t m, Int_t M) {fCentMethod=val; fCentPerMin=m; fCentPerMax=M;}
58   void SetReadESD(Bool_t val) {fReadESD=val;}
59   void SetReadMC(Bool_t val) {fReadMC=val;}
60   void SetPostMatched(Int_t val) {fPostMatched=val;}
61   void SetAvoidExec(Bool_t val) {fAvoidExec=val;}
62   void SetSkipSelection(Bool_t val) {fSkipSelection=val;}
63   void SetSkipFlow(Bool_t val) {fSkipFlow=val;}
64   void SetUseFlowPackage(Bool_t val) {fUseFP=val;}
65   void SetExtraEventRejection(Bool_t val) {fExtraEventRejection=val;}
66   void SetVertexZcut(Double_t val) {fVertexZcut=val;}
67
68   void SetWhichPsi(Int_t val) {fWhichPsi=val;}
69   void SetStoreVZEResponse(Bool_t val) {fVZEsave=val;}
70   void LoadVZEResponse(TList *val, Bool_t val2=kFALSE, Bool_t val3=kTRUE) {fVZEload=val;fVZEmb=val2;fVZEByDisk=val3;}
71   
72   void SetRFPFilterBit(Int_t val) {fRFPFilterBit=val;}
73   void SetRFPMinPt(Double_t val) {fRFPminPt=val;}
74   void SetRFPMaxPt(Double_t val) {fRFPmaxPt=val;}
75   void SetRFPMinEta(Double_t val) {fRFPminEta=val;}
76   void SetRFPMaxEta(Double_t val) {fRFPmaxEta=val;}
77   void SetRFPTPCSignal(Double_t val) {fRFPTPCsignal=val;}
78   void SetRFPMaxIPxy(Double_t val) {fRFPmaxIPxy=val;}
79   void SetRFPMaxIPz(Double_t val) {fRFPmaxIPz=val;}
80   void SetRFPMinTPCCls(Int_t val) {fRFPTPCncls=val;}
81   void SetRFPVZERingRange(Int_t val1, Int_t val2, Int_t val3, Int_t val4)
82     {fVZECa=val1;fVZECb=val2;fVZEAa=val3;fVZEAb=val4;}
83   void SetDauMinNClsTPC(Int_t val) {fDaughterMinNClsTPC=val;}
84   void SetDauMinXRows(Int_t val) {fDaughterMinXRows=val;}
85   void SetDauMaxChi2PerNClsTPC(Double_t val) {fDaughterMaxChi2PerNClsTPC=val;}
86   void SetDauMinXRowsOverNClsFTPC(Double_t val) {fDaughterMinXRowsOverNClsFTPC=val;}
87   void SetDauITSLayer(Int_t layer, Int_t config) {fDaughterITSConfig[layer]=config;}
88   void SetDauMinEta(Double_t val) {fDaughterMinEta=val;}
89   void SetDauMaxEta(Double_t val) {fDaughterMaxEta=val;}
90   void SetDauMinPt(Double_t val) {fDaughterMinPt=val;}
91   void SetDauMinImpactParameterXY(Double_t val) {fDaughterMinImpactParameterXY=val;}
92   void SetDauMaxNSigmaPID(Double_t val) {fDaughterMaxNSigmaPID=val;}
93   void SetDauUnTagProcedure(Bool_t val) {fDaughterUnTag=val;}
94
95   void SetMaxRapidity(Double_t val) {fDecayMaxRapidity=val;}
96   void SetMinEta(Double_t val) {fDecayMinEta=val;}
97   void SetMaxEta(Double_t val) {fDecayMaxEta=val;}
98   void SetMinPt(Double_t val) {fDecayMinPt=val;}
99   void SetMaxDCAdaughters(Double_t val) {fDecayMaxDCAdaughters=val;}
100   void SetMinCosinePointingAngleXY(Double_t val) {fDecayMinCosinePointingAngleXY=val;}
101   void SetMinQt(Double_t val, Bool_t val2=kTRUE) {fDecayMinQt=val; fDecayAPCutPie=val2;}
102   void SetMinRadXY(Double_t val) {fDecayMinRadXY=val;}
103   void SetMaxDecayLength(Double_t val) {fDecayMaxDecayLength=val;}
104   void SetMaxProductIPXY(Double_t val) {fDecayMaxProductIPXY=val;}
105
106  private:
107   AliAnalysisTaskFlowStrange(const AliAnalysisTaskFlowStrange& analysisTask);
108   AliAnalysisTaskFlowStrange& operator=(const AliAnalysisTaskFlowStrange& analysisTask);
109   void AddQAEvents();
110   void AddQACandidates();
111
112   void MyNotifyRun();
113   Bool_t CalibrateEvent();
114   void Publish();
115   
116   void AddEventSpy();
117   Bool_t AcceptAAEvent(AliESDEvent *tESD);
118   Bool_t AcceptAAEvent(AliAODEvent *tAOD);
119   Bool_t AcceptPPEvent(AliAODEvent *tAOD);
120   Bool_t AcceptPAEvent(AliAODEvent *tAOD);
121   Int_t GetReferenceMultiplicity();
122
123   void ReadStack(TClonesArray* mcArray);
124   void ReadFromESD(AliESDEvent *tESD);
125   void ReadFromAODv0(AliAODEvent *tAOD);
126
127   void ChargeParticles(AliAODEvent *tAOD);
128
129   void ComputePsi2(AliVEvent *event);
130   void AddMakeQSpy();
131   void MakeQVZE(AliVEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb);
132   void MakeQTPC(AliVEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb);
133   void MakeQTPC(AliESDEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb);
134   void MakeQTPC(AliAODEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb);
135   void AddTPCRFPSpy(TList *val);
136   Bool_t PassesRFPTPCCuts(AliESDtrack *myTrack, Double_t aodChi2NDF=0, Float_t aodipxy=0, Float_t aodipz=0);
137   void MakeQVectors();
138   void ResetContainers();
139
140   void MakeDHcorr();
141   void AddCandidates();
142   void ReadEventPlanesFromAOD(AliAODEvent *tAOD);
143
144   Double_t GetMCDPHI(Double_t phi);
145
146   Double_t CosThetaPointXY(AliESDv0 *me, const AliVVertex *vtx);
147   Double_t CosThetaPointXY(AliAODv0 *me, const AliVVertex *vtx);
148   Double_t DecayLengthXY(AliESDv0 *me, const AliVVertex *vtx);
149   Double_t DecayLengthXY(AliAODv0 *me, const AliVVertex *vtx);
150   Double_t DecayLength(AliESDv0 *me, const AliVVertex *vtx);
151   Double_t DecayLength(AliAODv0 *me, const AliVVertex *vtx);
152
153   void AddMCParticleSpy(TList *val);
154   void FillMCParticleSpy(TString listName, AliAODMCParticle *par);
155   void FillMCParticleSpy(TString listName, TParticle *par);
156
157   void AddCandidatesSpy(TList *val, Bool_t fillRes=kFALSE);
158   void FillCandidateSpy(TString listName, Bool_t fillRes=kFALSE);
159
160   void AddTracksSpy(TList *val, Bool_t fillRes=kFALSE);
161   void FillTrackSpy(TString listName, Bool_t fillRes=kFALSE);
162
163   void MakeFilterBits();
164   Bool_t PassesFilterBit(AliESDtrack *me);
165
166   void LoadTrack(AliESDtrack *myTrack, Double_t aodChi2NDF=0);
167   Bool_t AcceptDaughter();
168   Bool_t AcceptCandidate();
169   Bool_t PassesPIDCuts(AliESDtrack *myTrack, AliPID::EParticleType pid=AliPID::kProton);
170
171   Bool_t IsAtTPCEdge(Double_t phi,Double_t pt,Int_t charge,Double_t b);
172
173   void MakeTrack();
174   void PushBackFlowTrack(AliFlowEvent *event, Double_t pt, Double_t phi, Double_t eta, Double_t we, Int_t id);
175
176   Double_t GetWDist(const AliVVertex* v0, const AliVVertex* v1);
177   Bool_t plpMV(const AliVEvent *event);
178
179   void LoadVZEROResponse();
180   void AddVZEROResponse();
181   void SaveVZEROResponse();
182   void AddVZEQA();
183   void SaveVZEROQA();
184
185   Int_t RefMultTPC();
186   Int_t RefMultGlobal();
187
188   AliPIDResponse *fPIDResponse; //! PID response object
189   AliESDtrackCuts *fFB1;        // filterbit cut equivalent
190   AliESDtrackCuts *fFB1024;     // filterbit cut equivalent
191   AliFlowEvent   *fTPCevent;    // flow event (needed here due to ev selection)
192   AliFlowEvent   *fVZEevent;    // flow event (needed here due to ev selection)
193   TObjArray      *fCandidates;  // array of selected candidates
194   TList          *fList;        // stores the final list of output histograms
195
196   Int_t fRunNumber; // current run number
197
198   Int_t fDebug;   // debug level
199   Int_t fQAlevel; // QA plots
200
201   Bool_t fReadESD;       // move back to ESD
202   Bool_t fReadMC;        // read MC files
203   Int_t fPostMatched;    // post only (un)matched particles
204   Bool_t fAvoidExec;     // avoids Exec
205   Bool_t fSkipSelection; // skip decay finder
206   Bool_t fSkipFlow;      // skip flow-wise code
207   Bool_t fSkipDHcorr;    // skip dhcorr code
208   Bool_t fUseFP;         // flow package?
209   Bool_t fRunOnpA;       // make task compatible with pA event selection
210   Bool_t fRunOnpp;       // make task compatible with pp event selection
211   Bool_t fExtraEventRejection; // to reject pile up
212   TString  fCentMethod; // CC
213   Int_t    fCentPerMin; // CC
214   Int_t    fCentPerMax; // CC
215   Double_t fThisCent;   // CC
216
217   Double_t fVertexZcut; // cut on main vertex Z
218
219   Bool_t fExcludeTPCEdges; // exclude TPC edges from single track selection
220
221   Int_t  fSpecie;   // K0=>0 L0=>1
222   Bool_t fOnline;   // change into online v0 finder
223   Bool_t fHomemade; // homemade v0 finder
224
225   Int_t fWhichPsi;  // detector for Psi2
226
227   Bool_t  fVZEsave; // make vze response
228   TList  *fVZEload; // adress to calibration file
229   TH2D   *fVZEResponse; // vze response vs centrality class
230   Bool_t  fVZEmb;   // integrate response (linearity)
231   Bool_t  fVZEByDisk; // normalized by disk
232   Int_t   fVZECa;   // start of V0C (ring number 0-3)
233   Int_t   fVZECb;   // end of V0C (ring number 0-3)
234   Int_t   fVZEAa;   // start of V0A (ring number 0-3)
235   Int_t   fVZEAb;   // end of V0A (ring number 0-3)
236   TList  *fVZEQA;   // adress to qalist
237
238   Double_t fPsi2;   // best estimation of Psi2
239   Double_t fMCEP;   // stores MC EP (when available)
240
241   Int_t    fMassBins; // opens
242   Double_t fMinMass;  // mass
243   Double_t fMaxMass;  // window
244   Double_t fMinMassX; // HP window
245   Double_t fMaxMassX; // HP window
246
247   Int_t fRFPFilterBit;    // RFP TPC
248   Double_t fRFPminPt;     // RFP TPC
249   Double_t fRFPmaxPt;     // RFP TPC
250   Double_t fRFPminEta;    // RFP TPC
251   Double_t fRFPmaxEta;    // RFP TPC
252   Double_t fRFPTPCsignal; // RFP TPC
253   Double_t fRFPmaxIPxy;   // RFP TPC
254   Double_t fRFPmaxIPz;    // RFP TPC
255   Int_t fRFPTPCncls;      // RFP TPC
256
257   Double_t fDecayMass;                  // DECAY
258   Double_t fDecayPhi;                   // DECAY
259   Double_t fDecayEta;                   // DECAY
260   Double_t fDecayPt;                    // DECAY
261   Double_t fDecayDCAdaughters;          // DECAY
262   Double_t fDecayCosinePointingAngleXY; // DECAY
263   Double_t fDecayRadXY;                 // DECAY
264   Double_t fDecayDecayLength;           // DECAY
265   Double_t fDecayQt;                    // DECAY
266   Double_t fDecayAlpha;                 // DECAY
267   Double_t fDecayRapidity;              // DECAY
268   Double_t fDecayProductIPXY;           // DECAY
269   Double_t fDecayIPneg;                 // DECAY
270   Double_t fDecayIPpos;                 // DECAY
271   Double_t fDecayXneg;                  // DECAY
272   Double_t fDecayXpos;                  // DECAY
273   Int_t    fDecayIDneg;                 // DECAY
274   Int_t    fDecayIDpos;                 // DECAY
275   Int_t    fDecayID;                    // DECAY
276
277   Double_t fDecayMatchOrigin;  // MC DECAY
278   Double_t fDecayMatchPhi;     // MC DECAY
279   Double_t fDecayMatchEta;     // MC DECAY
280   Double_t fDecayMatchPt;      // MC DECAY
281   Double_t fDecayMatchRadXY;   // MC DECAY
282
283   Double_t fDecayMinEta;                   // DECAY CUTS
284   Double_t fDecayMaxEta;                   // DECAY CUTS
285   Double_t fDecayMinPt;                    // DECAY CUTS
286   Double_t fDecayMaxDCAdaughters;          // DECAY CUTS
287   Double_t fDecayMinCosinePointingAngleXY; // DECAY CUTS
288   Double_t fDecayMinQt;                    // DECAY CUTS
289   Bool_t   fDecayAPCutPie;                 // DECAY CUTS
290   Double_t fDecayMinRadXY;                 // DECAY CUTS
291   Double_t fDecayMaxDecayLength;           // DECAY CUTS
292   Double_t fDecayMaxProductIPXY;           // DECAY CUTS
293   Double_t fDecayMaxRapidity;              // DECAY CUTS
294
295   Double_t fDaughterPhi;               // DAUGHTER
296   Double_t fDaughterEta;               // DAUGHTER
297   Double_t fDaughterPt;                // DAUGHTER
298   Int_t    fDaughterNClsTPC;           // DAUGHTER
299   Int_t    fDaughterITSConfig[6];      // DAUGHTER
300   Int_t    fDaughterCharge;            // DAUGHTER
301   Int_t    fDaughterNFClsTPC;          // DAUGHTER
302   Int_t    fDaughterNSClsTPC;          // DAUGHTER
303   Double_t fDaughterChi2PerNClsTPC;    // DAUGHTER
304   Double_t fDaughterXRows;             // DAUGHTER
305   Float_t  fDaughterImpactParameterXY; // DAUGHTER
306   Float_t  fDaughterImpactParameterZ;  // DAUGHTER
307   UInt_t   fDaughterStatus;            // DAUGHTER
308   UChar_t  fDaughterITScm;             // DAUGHTER
309   Double_t fDaughterNSigmaPID;         // DAUGHTER
310   Int_t    fDaughterKinkIndex;         // DAUGHTER
311
312   Double_t fDaughterMatchPhi;               // MC DAUGHTER
313   Double_t fDaughterMatchEta;               // MC DAUGHTER
314   Double_t fDaughterMatchPt;                // MC DAUGHTER
315   Float_t  fDaughterMatchImpactParameterXY; // MC DAUGHTER
316   Float_t  fDaughterMatchImpactParameterZ;  // MC DAUGHTER
317
318   Bool_t   fDaughterUnTag;             // UNTAG PROCEDURE
319
320   Double_t fDaughterMinEta;               // DAUGHTER CUTS
321   Double_t fDaughterMaxEta;               // DAUGHTER CUTS
322   Double_t fDaughterMinPt;                // DAUGHTER CUTS
323   Int_t    fDaughterMinNClsTPC;           // DAUGHTER CUTS
324   Int_t    fDaughterMinXRows;             // DAUGHTER CUTS
325   Double_t fDaughterMaxChi2PerNClsTPC;    // DAUGHTER CUTS
326   Double_t fDaughterMinXRowsOverNClsFTPC; // DAUGHTER CUTS
327   Double_t fDaughterMinImpactParameterXY; // DAUGHTER CUTS
328   Double_t fDaughterMaxNSigmaPID;         // DAUGHTER CUTS
329
330   ClassDef(AliAnalysisTaskFlowStrange, 5);
331 };
332 #endif