]>
Commit | Line | Data |
---|---|---|
24373b38 | 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 SetAvoidExec(Bool_t val) {fAvoidExec=val;} | |
61 | void SetSkipSelection(Bool_t val) {fSkipSelection=val;} | |
62 | void SetSkipFlow(Bool_t val) {fSkipFlow=val;} | |
63 | void SetUseFlowPackage(Bool_t val) {fUseFP=val;} | |
64 | void SetExtraEventRejection(Bool_t val) {fExtraEventRejection=val;} | |
65 | ||
66 | void SetWhichPsi(Int_t val) {fWhichPsi=val;} | |
67 | void SetStoreVZEResponse(Bool_t val) {fVZEsave=val;} | |
68 | void LoadVZEResponse(TList *val, Bool_t val2=kFALSE, Bool_t val3=kTRUE) {fVZEload=val;fVZEmb=val2;fVZEByDisk=val3;} | |
69 | ||
70 | void SetRFPFilterBit(Int_t val) {fRFPFilterBit=val;} | |
71 | void SetRFPMinPt(Double_t val) {fRFPminPt=val;} | |
72 | void SetRFPMaxPt(Double_t val) {fRFPmaxPt=val;} | |
73 | void SetRFPMinEta(Double_t val) {fRFPminEta=val;} | |
74 | void SetRFPMaxEta(Double_t val) {fRFPmaxEta=val;} | |
75 | void SetRFPTPCSignal(Double_t val) {fRFPTPCsignal=val;} | |
76 | void SetRFPMaxIPxy(Double_t val) {fRFPmaxIPxy=val;} | |
77 | void SetRFPMaxIPz(Double_t val) {fRFPmaxIPz=val;} | |
78 | void SetRFPMinTPCCls(Int_t val) {fRFPTPCncls=val;} | |
79 | void SetRFPVZERingRange(Int_t val1, Int_t val2, Int_t val3, Int_t val4) | |
80 | {fVZECa=val1;fVZECb=val2;fVZEAa=val3;fVZEAb=val4;} | |
81 | void SetDauMinNClsTPC(Int_t val) {fDaughterMinNClsTPC=val;} | |
82 | void SetDauMinXRows(Int_t val) {fDaughterMinXRows=val;} | |
83 | void SetDauMaxChi2PerNClsTPC(Double_t val) {fDaughterMaxChi2PerNClsTPC=val;} | |
84 | void SetDauMinXRowsOverNClsFTPC(Double_t val) {fDaughterMinXRowsOverNClsFTPC=val;} | |
85 | void SetDauMinEta(Double_t val) {fDaughterMinEta=val;} | |
86 | void SetDauMaxEta(Double_t val) {fDaughterMaxEta=val;} | |
87 | void SetDauMinPt(Double_t val) {fDaughterMinPt=val;} | |
88 | void SetDauMinImpactParameterXY(Double_t val) {fDaughterMinImpactParameterXY=val;} | |
89 | void SetDauMaxNSigmaPID(Double_t val) {fDaughterMaxNSigmaPID=val;} | |
90 | void SetDauUnTagProcedure(Bool_t val) {fDaughterUnTag=val;} | |
91 | ||
92 | void SetMaxRapidity(Double_t val) {fDecayMaxRapidity=val;} | |
93 | void SetMinEta(Double_t val) {fDecayMinEta=val;} | |
94 | void SetMaxEta(Double_t val) {fDecayMaxEta=val;} | |
95 | void SetMinPt(Double_t val) {fDecayMinPt=val;} | |
96 | void SetMaxDCAdaughters(Double_t val) {fDecayMaxDCAdaughters=val;} | |
97 | void SetMinCosinePointingAngleXY(Double_t val) {fDecayMinCosinePointingAngleXY=val;} | |
98 | void SetMinQt(Double_t val, Bool_t val2=kTRUE) {fDecayMinQt=val; fDecayAPCutPie=val2;} | |
99 | void SetMinRadXY(Double_t val) {fDecayMinRadXY=val;} | |
100 | void SetMaxDecayLength(Double_t val) {fDecayMaxDecayLength=val;} | |
101 | void SetMaxProductIPXY(Double_t val) {fDecayMaxProductIPXY=val;} | |
102 | ||
103 | private: | |
104 | AliAnalysisTaskFlowStrange(const AliAnalysisTaskFlowStrange& analysisTask); | |
105 | AliAnalysisTaskFlowStrange& operator=(const AliAnalysisTaskFlowStrange& analysisTask); | |
106 | void AddQAEvents(); | |
107 | void AddQACandidates(); | |
108 | ||
109 | void MyNotifyRun(); | |
110 | Bool_t CalibrateEvent(); | |
111 | void Publish(); | |
112 | ||
113 | void AddEventSpy(); | |
114 | Bool_t AcceptAAEvent(AliESDEvent *tESD); | |
115 | Bool_t AcceptAAEvent(AliAODEvent *tAOD); | |
116 | Bool_t AcceptPPEvent(AliAODEvent *tAOD); | |
117 | Bool_t AcceptPAEvent(AliAODEvent *tAOD); | |
118 | Int_t GetReferenceMultiplicity(); | |
119 | ||
120 | void ReadStack(TClonesArray* mcArray); | |
121 | void ReadFromESD(AliESDEvent *tESD); | |
122 | void ReadFromAODv0(AliAODEvent *tAOD); | |
123 | ||
124 | void ChargeParticles(AliAODEvent *tAOD); | |
125 | ||
126 | void ComputePsi2(AliVEvent *event); | |
127 | void AddMakeQSpy(); | |
128 | void MakeQVZE(AliVEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb); | |
129 | void MakeQTPC(AliVEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb); | |
130 | void MakeQTPC(AliESDEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb); | |
131 | void MakeQTPC(AliAODEvent *event,Double_t &qxa,Double_t &qya,Double_t &qwa,Double_t &qxb,Double_t &qyb,Double_t &qwb); | |
132 | void AddTPCRFPSpy(TList *val); | |
133 | Bool_t PassesRFPTPCCuts(AliESDtrack *myTrack, Double_t aodChi2NDF=0, Float_t aodipxy=0, Float_t aodipz=0); | |
134 | void MakeQVectors(); | |
135 | void ResetContainers(); | |
136 | ||
137 | void MakeDHcorr(); | |
138 | void AddCandidates(); | |
139 | void ReadEventPlanesFromAOD(AliAODEvent *tAOD); | |
140 | ||
141 | Double_t GetMCDPHI(Double_t phi); | |
142 | ||
143 | Double_t CosThetaPointXY(AliESDv0 *me, const AliVVertex *vtx); | |
144 | Double_t CosThetaPointXY(AliAODv0 *me, const AliVVertex *vtx); | |
145 | Double_t DecayLengthXY(AliESDv0 *me, const AliVVertex *vtx); | |
146 | Double_t DecayLengthXY(AliAODv0 *me, const AliVVertex *vtx); | |
147 | Double_t DecayLength(AliESDv0 *me, const AliVVertex *vtx); | |
148 | Double_t DecayLength(AliAODv0 *me, const AliVVertex *vtx); | |
149 | ||
150 | void AddMCParticleSpy(TList *val); | |
151 | void FillMCParticleSpy(TString listName, AliAODMCParticle *par); | |
152 | void FillMCParticleSpy(TString listName, TParticle *par); | |
153 | ||
154 | void AddCandidatesSpy(TList *val); | |
155 | void FillCandidateSpy(TString listName); | |
156 | ||
157 | void AddTracksSpy(TList *val); | |
158 | void FillTrackSpy(TString listName); | |
159 | ||
160 | void MakeFilterBits(); | |
161 | Bool_t PassesFilterBit(AliESDtrack *me); | |
162 | ||
163 | void LoadTrack(AliESDtrack *myTrack, Double_t aodChi2NDF=0); | |
164 | Bool_t AcceptDaughter(); | |
165 | Bool_t AcceptCandidate(); | |
166 | Bool_t PassesPIDCuts(AliESDtrack *myTrack, AliPID::EParticleType pid=AliPID::kProton); | |
167 | ||
168 | Bool_t IsAtTPCEdge(Double_t phi,Double_t pt,Int_t charge,Double_t b); | |
169 | ||
170 | void MakeTrack(); | |
171 | void PushBackFlowTrack(AliFlowEvent *event, Double_t pt, Double_t phi, Double_t eta, Double_t we, Int_t id); | |
172 | ||
173 | Double_t GetWDist(const AliVVertex* v0, const AliVVertex* v1); | |
174 | Bool_t plpMV(const AliVEvent *event); | |
175 | ||
176 | void LoadVZEROResponse(); | |
177 | void AddVZEROResponse(); | |
178 | void SaveVZEROResponse(); | |
179 | void AddVZEQA(); | |
180 | void SaveVZEROQA(); | |
181 | ||
182 | Int_t RefMultTPC(); | |
183 | Int_t RefMultGlobal(); | |
184 | ||
185 | AliPIDResponse *fPIDResponse; //! PID response object | |
186 | AliESDtrackCuts *fFB1; // filterbit cut equivalent | |
187 | AliESDtrackCuts *fFB1024; // filterbit cut equivalent | |
188 | AliFlowEvent *fTPCevent; // flow event (needed here due to ev selection) | |
189 | AliFlowEvent *fVZEevent; // flow event (needed here due to ev selection) | |
190 | TObjArray *fCandidates; // array of selected candidates | |
191 | TList *fList; // stores the final list of output histograms | |
192 | ||
193 | Int_t fRunNumber; // current run number | |
194 | ||
195 | Int_t fDebug; // debug level | |
196 | Int_t fQAlevel; // QA plots | |
197 | ||
198 | Bool_t fReadESD; // move back to ESD | |
199 | Bool_t fReadMC; // read MC files | |
200 | Bool_t fAvoidExec; // avoids Exec | |
201 | Bool_t fSkipSelection; // skip decay finder | |
202 | Bool_t fSkipFlow; // skip flow-wise code | |
203 | Bool_t fSkipDHcorr; // skip dhcorr code | |
204 | Bool_t fUseFP; // flow package? | |
205 | Bool_t fRunOnpA; // make task compatible with pA event selection | |
206 | Bool_t fRunOnpp; // make task compatible with pp event selection | |
207 | Bool_t fExtraEventRejection; // to reject pile up | |
208 | TString fCentMethod; // CC | |
209 | Int_t fCentPerMin; // CC | |
210 | Int_t fCentPerMax; // CC | |
211 | Double_t fThisCent; // CC | |
212 | ||
213 | Bool_t fExcludeTPCEdges; // exclude TPC edges from single track selection | |
214 | ||
215 | Int_t fSpecie; // K0=>0 L0=>1 | |
216 | Bool_t fOnline; // change into online v0 finder | |
217 | Bool_t fHomemade; // homemade v0 finder | |
218 | ||
219 | Int_t fWhichPsi; // detector for Psi2 | |
220 | ||
221 | Bool_t fVZEsave; // make vze response | |
222 | TList *fVZEload; // adress to calibration file | |
223 | TH2D *fVZEResponse; // vze response vs centrality class | |
224 | Bool_t fVZEmb; // integrate response (linearity) | |
225 | Bool_t fVZEByDisk; // normalized by disk | |
226 | Int_t fVZECa; // start of V0C (ring number 0-3) | |
227 | Int_t fVZECb; // end of V0C (ring number 0-3) | |
228 | Int_t fVZEAa; // start of V0A (ring number 0-3) | |
229 | Int_t fVZEAb; // end of V0A (ring number 0-3) | |
230 | TList *fVZEQA; // adress to qalist | |
231 | ||
232 | Double_t fPsi2; // best estimation of Psi2 | |
233 | Double_t fMCEP; // stores MC EP (when available) | |
234 | ||
235 | Int_t fMassBins; // opens | |
236 | Double_t fMinMass; // mass | |
237 | Double_t fMaxMass; // window | |
238 | ||
239 | Int_t fRFPFilterBit; // RFP TPC | |
240 | Double_t fRFPminPt; // RFP TPC | |
241 | Double_t fRFPmaxPt; // RFP TPC | |
242 | Double_t fRFPminEta; // RFP TPC | |
243 | Double_t fRFPmaxEta; // RFP TPC | |
244 | Double_t fRFPTPCsignal; // RFP TPC | |
245 | Double_t fRFPmaxIPxy; // RFP TPC | |
246 | Double_t fRFPmaxIPz; // RFP TPC | |
247 | Int_t fRFPTPCncls; // RFP TPC | |
248 | ||
249 | Double_t fDecayMass; // DECAY | |
250 | Double_t fDecayPhi; // DECAY | |
251 | Double_t fDecayEta; // DECAY | |
252 | Double_t fDecayPt; // DECAY | |
253 | Double_t fDecayDCAdaughters; // DECAY | |
254 | Double_t fDecayCosinePointingAngleXY; // DECAY | |
255 | Double_t fDecayRadXY; // DECAY | |
256 | Double_t fDecayDecayLength; // DECAY | |
257 | Double_t fDecayQt; // DECAY | |
258 | Double_t fDecayAlpha; // DECAY | |
259 | Double_t fDecayRapidity; // DECAY | |
260 | Double_t fDecayProductIPXY; // DECAY | |
261 | Int_t fDecayIDneg; // DECAY | |
262 | Int_t fDecayIDpos; // DECAY | |
263 | Int_t fDecayID; // DECAY | |
264 | ||
265 | Double_t fDecayMinEta; // DECAY CUTS | |
266 | Double_t fDecayMaxEta; // DECAY CUTS | |
267 | Double_t fDecayMinPt; // DECAY CUTS | |
268 | Double_t fDecayMaxDCAdaughters; // DECAY CUTS | |
269 | Double_t fDecayMinCosinePointingAngleXY; // DECAY CUTS | |
270 | Double_t fDecayMinQt; // DECAY CUTS | |
271 | Bool_t fDecayAPCutPie; // DECAY CUTS | |
272 | Double_t fDecayMinRadXY; // DECAY CUTS | |
273 | Double_t fDecayMaxDecayLength; // DECAY CUTS | |
274 | Double_t fDecayMaxProductIPXY; // DECAY CUTS | |
275 | Double_t fDecayMaxRapidity; // DECAY CUTS | |
276 | ||
277 | Double_t fDaughterPhi; // DAUGHTER | |
278 | Double_t fDaughterEta; // DAUGHTER | |
279 | Double_t fDaughterPt; // DAUGHTER | |
280 | Int_t fDaughterNClsTPC; // DAUGHTER | |
281 | Int_t fDaughterCharge; // DAUGHTER | |
282 | Int_t fDaughterNFClsTPC; // DAUGHTER | |
283 | Int_t fDaughterNSClsTPC; // DAUGHTER | |
284 | Double_t fDaughterChi2PerNClsTPC; // DAUGHTER | |
285 | Double_t fDaughterXRows; // DAUGHTER | |
286 | Float_t fDaughterImpactParameterXY; // DAUGHTER | |
287 | Float_t fDaughterImpactParameterZ; // DAUGHTER | |
288 | UInt_t fDaughterStatus; // DAUGHTER | |
289 | Double_t fDaughterNSigmaPID; // DAUGHTER | |
290 | Int_t fDaughterKinkIndex; // DAUGHTER | |
291 | ||
292 | Bool_t fDaughterUnTag; // UNTAG PROCEDURE | |
293 | ||
294 | Double_t fDaughterMinEta; // DAUGHTER CUTS | |
295 | Double_t fDaughterMaxEta; // DAUGHTER CUTS | |
296 | Double_t fDaughterMinPt; // DAUGHTER CUTS | |
297 | Int_t fDaughterMinNClsTPC; // DAUGHTER CUTS | |
298 | Int_t fDaughterMinXRows; // DAUGHTER CUTS | |
299 | Double_t fDaughterMaxChi2PerNClsTPC; // DAUGHTER CUTS | |
300 | Double_t fDaughterMinXRowsOverNClsFTPC; // DAUGHTER CUTS | |
301 | Double_t fDaughterMinImpactParameterXY; // DAUGHTER CUTS | |
302 | Double_t fDaughterMaxNSigmaPID; // DAUGHTER CUTS | |
303 | ||
304 | ClassDef(AliAnalysisTaskFlowStrange, 5); | |
305 | }; | |
306 | #endif |