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 //////////////////////////////////////////////////////
9 /* Copyright(c) 1998-1999, ALICExperiment at CERN, All rights reserved. *
10 * See cxx source for full Copyright notice */
13 #ifndef AliAnalysisTaskFlowStrange_H
14 #define AliAnalysisTaskFlowStrange_H
16 #include "AliAnalysisTaskSE.h"
22 class AliAODMCParticle;
23 class AliESDtrackCuts;
24 class AliFlowEventCuts;
31 class AliFlowBayesianPID;
34 class AliAnalysisTaskFlowStrange : public AliAnalysisTaskSE {
36 enum Especie {kKZE=0,kLDA=1,kLDABAR=2,kLDAALL=3,kCHARGED=90,kPION=91,kKAON=92,kPROTON=93};
37 enum Econfig {kSpecie=1,kHarmonic,kReadMC,kSkipSelection};
38 AliAnalysisTaskFlowStrange();
39 AliAnalysisTaskFlowStrange(const Char_t *name);
40 virtual ~AliAnalysisTaskFlowStrange();
41 virtual void UserCreateOutputObjects();
42 virtual void Exec(Option_t*);
43 virtual void UserExec(Option_t *);
44 virtual void Terminate(Option_t *);
45 virtual void MyUserExec(Option_t *);
46 virtual void MyUserCreateOutputObjects();
47 virtual void MyPrintConfig();
48 virtual void PrintConfig();
50 void SetHarmonic(Int_t val) {fHarmonic= val;}
52 void SetOutputList(TList *lst) {fList=lst;}
53 TList* GetOutputList() {return fList;}
54 TList* RunTerminateAgain(TList *lst);
56 void SetDebug(Int_t val=1) {fDebug = val;}
57 void SetQAlevel(Int_t qa) {fQAlevel = qa;}
59 void SetpA() {fRunOnpA = kTRUE; fRunOnpp = kFALSE;}
60 void Setpp() {fRunOnpA = kFALSE; fRunOnpp = kTRUE; }
61 void SetReadESD(Bool_t val) {fReadESD=val;}
62 void SetReadMC(Bool_t val) {fReadMC=val;}
64 void SetAvoidExec(Bool_t val) {fAvoidExec=val;}
65 void SetVertexZcut(Double_t val) {fVertexZcut=val;}
66 void SetSkipCentralitySelection(Bool_t val) {fSkipCentralitySelection=val;}
67 void SetCentralityRange(TString val, Int_t m, Int_t M) {fCentMethod=val; fCentPerMin=m; fCentPerMax=M;}
68 void SetExtraEventRejection(Bool_t val) {fExtraEventRejection=val;}
69 void SetSkipTerminate(Bool_t val) {fSkipTerminate=val;}
71 void SetAddPiToMCReactionPlane(Bool_t val) {fAddPiToMCReactionPlane=val;}
72 void SetUseFlowPackage(Bool_t val) {fUseFP=val;}
73 void SetWhichPsi(Int_t val) {fWhichPsi=val;}
74 void SetStoreVZEResponse(Bool_t val) {fVZEsave=val;}
75 void LoadVZEResponse(TList *val, Bool_t val2=kFALSE, Bool_t val3=kTRUE) {fVZEload=val;fVZEmb=val2;fVZEByDisk=val3;}
76 void SetRFPFilterBit(Int_t val) {fRFPFilterBit=val;}
77 void SetRFPMinPt(Double_t val) {fRFPminPt=val;}
78 void SetRFPMaxPt(Double_t val) {fRFPmaxPt=val;}
79 void SetRFPAMinEta(Double_t val) {fRFPAminEta=val;}
80 void SetRFPAMaxEta(Double_t val) {fRFPAmaxEta=val;}
81 void SetRFPCMinEta(Double_t val) {fRFPCminEta=val;}
82 void SetRFPCMaxEta(Double_t val) {fRFPCmaxEta=val;}
83 void SetRFPTPCSignal(Double_t val) {fRFPTPCsignal=val;}
84 void SetRFPMaxIPxy(Double_t val) {fRFPmaxIPxy=val;}
85 void SetRFPMaxIPz(Double_t val) {fRFPmaxIPz=val;}
86 void SetRFPMinTPCCls(Int_t val) {fRFPTPCncls=val;}
87 void SetRFPVZERingRange(Int_t val1, Int_t val2, Int_t val3, Int_t val4)
88 {fVZECa=val1;fVZECb=val2;fVZEAa=val3;fVZEAb=val4;}
90 void SetSkipSelection(Bool_t val) {fSkipSelection=val;}
91 void SetSkipVn(Bool_t val) {fSkipVn=val;}
92 void SetPostMatched(Int_t val) {fPostMatched=val;}
93 void SetK0L0(Int_t specie) {fSpecie=specie;}
94 void SetMass(Int_t n, Double_t m, Double_t M) {fMassBins=n;fMinMass=m;fMaxMass=M;}
95 void SetPtEdges(Int_t n, Double_t *p);
96 void SetOnline(Bool_t val) {fOnline=val;}
97 void SetHomemade(Bool_t val) {fHomemade=val;}
98 void SetExcludeTPCEdges(Bool_t value) {fExcludeTPCEdges=value;}
99 void SetMaxRapidity(Double_t val) {fDecayMaxRapidity=val;}
100 void SetMinEta(Double_t val) {fDecayMinEta=val;}
101 void SetMaxEta(Double_t val) {fDecayMaxEta=val;}
102 void SetMinPt(Double_t val) {fDecayMinPt=val;}
103 void SetMaxDCAdaughters(Double_t val) {fDecayMaxDCAdaughters=val;}
104 void SetMinCosinePointingAngleXY(Double_t val) {fDecayMinCosinePointingAngleXY=val;}
105 void SetMinQt(Double_t val, Bool_t val2=kTRUE) {fDecayMinQt=val; fDecayAPCutPie=val2;}
106 void SetStopPIDAtPt(Double_t val) {fDecayStopPIDAtPt=val;}
107 void SetMinRadXY(Double_t val) {fDecayMinRadXY=val;}
108 void SetMaxDecayLength(Double_t val) {fDecayMaxDecayLength=val;}
109 void SetMaxProductIPXY(Double_t val) {fDecayMaxProductIPXY=val;}
111 void SetDauMinNClsTPC(Int_t val) {fDaughterMinNClsTPC=val;}
112 void SetDauMinNClsITS(Int_t val) {fDaughterMinNClsITS=val;}
113 void SetDauMinXRows(Int_t val) {fDaughterMinXRows=val;}
114 void SetDauMaxChi2PerNClsTPC(Double_t val) {fDaughterMaxChi2PerNClsTPC=val;}
115 void SetDauMinXRowsOverNClsFTPC(Double_t val) {fDaughterMinXRowsOverNClsFTPC=val;}
116 void SetDauITSLayer(Int_t layer, Int_t config) {fDaughterITSConfig[layer]=config;}
117 void SetDauMinEta(Double_t val) {fDaughterMinEta=val;}
118 void SetDauMaxEta(Double_t val) {fDaughterMaxEta=val;}
119 void SetDauMinPt(Double_t val) {fDaughterMinPt=val;}
120 void SetDauMinImpactParameterXY(Double_t val) {fDaughterMinImpactParameterXY=val;}
121 void SetDauMaxNSigmaPID(Double_t val) {fDaughterMaxNSigmaPID=val;}
122 void SetDauUnTagProcedure(Bool_t val) {fDaughterUnTag=val;}
123 void SetDauSPDRequireAny(Bool_t val) {fDaughterSPDRequireAny=val;}
124 void SetDauITSrefit(Bool_t val) {fDaughterITSrefit=val;}
127 void MakeToyEvent(Int_t seed=0, Int_t m_decay = 30, Double_t v_decay = 0.05,
128 Double_t mass_decay_mu = 0.497648, Double_t mass_decay_sg = 0.01,
129 Int_t m_bgr = 30, Double_t v_bgr = 0.08,
130 Int_t mtpc_a = 300, Double_t v_tpca = 0.10, Int_t mtpc_c = 300, Double_t v_tpcc = 0.10,
131 Int_t mvze_a = 300, Double_t v_vzea = 0.10, Int_t mvze_c = 300, Double_t v_vzec = 0.10 );
132 void CloseToyModel();
133 TList* RebinDecayVn(Int_t nbins, Int_t *bins);
136 AliAnalysisTaskFlowStrange(const AliAnalysisTaskFlowStrange& analysisTask);
137 AliAnalysisTaskFlowStrange& operator=(const AliAnalysisTaskFlowStrange& analysisTask);
139 void AddQACandidates();
142 Bool_t CalibrateEvent();
145 void AddEventSpy(TString name);
146 void FillEventSpy(TString name);
148 Bool_t MinimumRequirementsAA(AliAODEvent *tAOD);
149 Bool_t AcceptAAEvent(AliESDEvent *tESD);
150 Bool_t AcceptAAEvent(AliAODEvent *tAOD);
151 Bool_t AcceptPPEvent(AliAODEvent *tAOD);
152 Bool_t AcceptPAEvent(AliAODEvent *tAOD);
153 Int_t GetReferenceMultiplicity();
155 void ReadStack(TClonesArray* mcArray);
156 void ReadFromESD(AliESDEvent *tESD);
157 void ReadFromAODv0(AliAODEvent *tAOD);
159 void ChargeParticles(AliAODEvent *tAOD);
161 void ComputePsi2(AliVEvent *event);
164 void ComputeChi2VZERO();
165 void MakeQVZE(AliVEvent *event);
166 void MakeQTPC(AliVEvent *event);
167 void MakeQTPC(AliESDEvent *event);
168 void MakeQTPC(AliAODEvent *event);
169 void AddTPCRFPSpy(TList *val);
170 Bool_t PassesRFPTPCCuts(AliESDtrack *myTrack, Double_t aodChi2NDF=0, Float_t aodipxy=0, Float_t aodipz=0);
172 void ResetContainers();
174 void AddCandidates();
175 TList* RebinDecayVn(TList *tList,Int_t nbins, Int_t *bins);
177 Double_t GetMCDPHI(Double_t phi);
179 Double_t CosThetaPointXY(AliESDv0 *me, const AliVVertex *vtx);
180 Double_t CosThetaPointXY(AliAODv0 *me, const AliVVertex *vtx);
181 Double_t DecayLengthXY(AliESDv0 *me, const AliVVertex *vtx);
182 Double_t DecayLengthXY(AliAODv0 *me, const AliVVertex *vtx);
183 Double_t DecayLength(AliESDv0 *me, const AliVVertex *vtx);
184 Double_t DecayLength(AliAODv0 *me, const AliVVertex *vtx);
186 void AddMCParticleSpy(TList *val);
187 void FillMCParticleSpy(TString listName, AliAODMCParticle *par);
188 void FillMCParticleSpy(TString listName, TParticle *par);
190 void AddCandidatesSpy(TList *val, Bool_t fillRes=kFALSE);
191 void FillCandidateSpy(TString listName, Bool_t fillRes=kFALSE);
193 void AddTrackSpy(TList *val, Bool_t fillRes=kFALSE);
194 void FillTrackSpy(TString listName, Bool_t fillRes=kFALSE);
196 void AddDecayVn(TList *val);
197 void FillDecayVn(TString listName,Double_t ms,Double_t pt,Double_t phi,Double_t eta,Int_t fid1,Int_t fid2);
198 void QCStoreDecayVn(TString name);
199 void ComputeDecayVn(TString listName);
201 void AddTrackVn(TList *val);
202 void FillTrackVn(TString listName,Double_t pt,Double_t phi,Double_t eta,Int_t fid);
203 void QCStoreTrackVn(TString name);
204 void ComputeTrackVn(TString listName);
205 Bool_t InQTPC(Int_t id);
207 void MakeFilterBits();
208 Bool_t PassesFilterBit(AliESDtrack *me);
210 void LoadTrack(AliESDtrack *myTrack, Double_t aodChi2NDF=0);
211 Bool_t AcceptDaughter(Bool_t strongITS=kTRUE);
212 Bool_t AcceptCandidate();
213 Bool_t PassesPIDCuts(AliESDtrack *myTrack, AliPID::EParticleType pid=AliPID::kProton);
215 Bool_t IsAtTPCEdge(Double_t phi,Double_t pt,Int_t charge,Double_t b);
218 void PushBackFlowTrack(AliFlowEvent *event, Double_t pt, Double_t phi, Double_t eta, Double_t we, Int_t id);
220 Double_t GetWDist(const AliVVertex* v0, const AliVVertex* v1);
221 Bool_t plpMV(const AliVEvent *event);
223 void LoadVZEROResponse();
224 void AddVZEROResponse();
225 void SaveVZEROResponse();
228 void FillVZEQA(AliAODEvent *tAOD);
230 Int_t RefMult(AliAODEvent *tAOD, Int_t fb);
232 Int_t RefMultGlobal();
234 AliPIDResponse *fPIDResponse; //! PID response object
235 AliESDtrackCuts *fFB1; // filterbit cut equivalent
236 AliESDtrackCuts *fFB1024; // filterbit cut equivalent
237 AliFlowEvent *fTPCevent; // flow event (needed here due to ev selection)
238 AliFlowEvent *fVZEevent; // flow event (needed here due to ev selection)
239 TObjArray *fCandidates; // array of selected candidates
240 TList *fList; // stores the final list of output histograms
242 Int_t fRunNumber; // current run number
244 Int_t fDebug; // debug level
245 Int_t fQAlevel; // QA plots
247 Bool_t fReadESD; // move back to ESD
248 Bool_t fReadMC; // read MC files
249 Bool_t fAddPiToMCReactionPlane; // add pi randomly (MCTUNED)
250 Int_t fPostMatched; // post only (un)matched particles
251 Bool_t fAvoidExec; // avoids Exec
252 Bool_t fSkipSelection; // skip decay finder
253 Bool_t fSkipVn; // skip flow computation
254 Bool_t fUseFP; // flow package?
255 Bool_t fRunOnpA; // make task compatible with pA event selection
256 Bool_t fRunOnpp; // make task compatible with pp event selection
257 Bool_t fExtraEventRejection; // to reject pile up
258 Bool_t fSkipCentralitySelection; // to skip centrality
259 TString fCentMethod; // CC
260 Int_t fCentPerMin; // CC
261 Int_t fCentPerMax; // CC
262 Double_t fThisCent; // CC
263 Double_t fV0M; // V0M CC
264 Double_t fTRK; // TRK CC
265 Double_t fPriVtxZ; // vtxZ
266 Double_t fSPDVtxZ; // vtxZ
267 Int_t fSPDtracklets; // spd tracklets
268 Float_t fVZETotM; // vzero total multiplicity
269 Int_t fRefMultTPC; // tpc only multiplicity
270 Int_t fRefMultHyb; // hybrid multiplicity
272 Double_t fVertexZcut; // cut on main vertex Z
274 Bool_t fExcludeTPCEdges; // exclude TPC edges from single track selection
276 Int_t fSpecie; // K0=>0 L0=>1
277 Bool_t fOnline; // change into online v0 finder
278 Bool_t fHomemade; // homemade v0 finder
280 Int_t fWhichPsi; // detector for Psi2
282 Bool_t fVZEsave; // make vze response
283 TList *fVZEload; // adress to calibration file
284 TH2D *fVZEResponse; // vze response vs centrality class
285 Double_t fVZEextW[64]; // vze weights
286 Bool_t fVZEmb; // integrate response (linearity)
287 Bool_t fVZEByDisk; // normalized by disk
288 Int_t fVZECa; // start of V0C (ring number 0-3)
289 Int_t fVZECb; // end of V0C (ring number 0-3)
290 Int_t fVZEAa; // start of V0A (ring number 0-3)
291 Int_t fVZEAb; // end of V0A (ring number 0-3)
292 TList *fVZEQA; // address to qalist
294 Int_t fHarmonic; // flow angle order
295 Double_t fPsi2; // best estimation of Psi2
296 Double_t fMCEP; // stores MC EP (when available)
314 Int_t fQTPCA_nTracks;
315 Int_t fQTPCC_nTracks;
316 Int_t fQTPCA_fID[2000];
317 Int_t fQTPCC_fID[2000];
318 Bool_t fSkipTerminate;
320 Int_t fMassBins; // opens
321 Double_t fMinMass; // mass
322 Double_t fMaxMass; // window
323 Int_t fPtBins; // to shrink
324 Double_t fPtBinEdge[100]; // output
326 Int_t fRFPFilterBit; // RFP TPC
327 Double_t fRFPminPt; // RFP TPC
328 Double_t fRFPmaxPt; // RFP TPC
329 Double_t fRFPAminEta; // RFP TPC
330 Double_t fRFPAmaxEta; // RFP TPC
331 Double_t fRFPCminEta; // RFP TPC
332 Double_t fRFPCmaxEta; // RFP TPC
333 Double_t fRFPTPCsignal; // RFP TPC
334 Double_t fRFPmaxIPxy; // RFP TPC
335 Double_t fRFPmaxIPz; // RFP TPC
336 Int_t fRFPTPCncls; // RFP TPC
338 Double_t fDecayMass; // DECAY
339 Double_t fDecayPhi; // DECAY
340 Double_t fDecayEta; // DECAY
341 Double_t fDecayPt; // DECAY
342 Double_t fDecayDCAdaughters; // DECAY
343 Double_t fDecayCosinePointingAngleXY; // DECAY
344 Double_t fDecayRadXY; // DECAY
345 Double_t fDecayDecayLength; // DECAY
346 Double_t fDecayDecayLengthLab; // DECAY
347 Double_t fDecayQt; // DECAY
348 Double_t fDecayAlpha; // DECAY
349 Double_t fDecayRapidity; // DECAY
350 Double_t fDecayProductIPXY; // DECAY
351 Double_t fDecayIPneg; // DECAY
352 Double_t fDecayIPpos; // DECAY
353 Double_t fDecayXneg; // DECAY
354 Double_t fDecayXpos; // DECAY
355 Int_t fDecayIDneg; // DECAY
356 Int_t fDecayIDpos; // DECAY
357 Int_t fDecayID; // DECAY
359 Double_t fDecayMatchOrigin; // MC DECAY
360 Double_t fDecayMatchPhi; // MC DECAY
361 Double_t fDecayMatchEta; // MC DECAY
362 Double_t fDecayMatchPt; // MC DECAY
363 Double_t fDecayMatchRadXY; // MC DECAY
365 Double_t fDecayMinEta; // DECAY CUTS
366 Double_t fDecayMaxEta; // DECAY CUTS
367 Double_t fDecayMinPt; // DECAY CUTS
368 Double_t fDecayMaxDCAdaughters; // DECAY CUTS
369 Double_t fDecayMinCosinePointingAngleXY; // DECAY CUTS
370 Double_t fDecayMinQt; // DECAY CUTS
371 Bool_t fDecayAPCutPie; // DECAY CUTS
372 Double_t fDecayStopPIDAtPt; // DECAY CUTS
373 Double_t fDecayMinRadXY; // DECAY CUTS
374 Double_t fDecayMaxDecayLength; // DECAY CUTS
375 Double_t fDecayMaxProductIPXY; // DECAY CUTS
376 Double_t fDecayMaxRapidity; // DECAY CUTS
378 Double_t fDaughterPhi; // DAUGHTER
379 Double_t fDaughterEta; // DAUGHTER
380 Double_t fDaughterPt; // DAUGHTER
381 Int_t fDaughterNClsTPC; // DAUGHTER
382 Int_t fDaughterNClsITS; // DAUGHTER
383 Int_t fDaughterITSConfig[6]; // DAUGHTER
384 Int_t fDaughterCharge; // DAUGHTER
385 Int_t fDaughterNFClsTPC; // DAUGHTER
386 Int_t fDaughterNSClsTPC; // DAUGHTER
387 Double_t fDaughterChi2PerNClsTPC; // DAUGHTER
388 Double_t fDaughterXRows; // DAUGHTER
389 Float_t fDaughterImpactParameterXY; // DAUGHTER
390 Float_t fDaughterImpactParameterZ; // DAUGHTER
391 UInt_t fDaughterStatus; // DAUGHTER
392 UChar_t fDaughterITScm; // DAUGHTER
393 Double_t fDaughterNSigmaPID; // DAUGHTER
394 Int_t fDaughterKinkIndex; // DAUGHTER
395 Double_t fDaughterAtSecPhi; // DAUGHTER
396 Double_t fDaughterAtSecEta; // DAUGHTER
397 Double_t fDaughterAtSecPt; // DAUGHTER
399 Double_t fDaughterMatchPhi; // MC DAUGHTER
400 Double_t fDaughterMatchEta; // MC DAUGHTER
401 Double_t fDaughterMatchPt; // MC DAUGHTER
402 Float_t fDaughterMatchImpactParameterXY; // MC DAUGHTER
403 Float_t fDaughterMatchImpactParameterZ; // MC DAUGHTER
405 Bool_t fDaughterUnTag; // UNTAG PROCEDURE
407 Double_t fDaughterMinEta; // DAUGHTER CUTS
408 Double_t fDaughterMaxEta; // DAUGHTER CUTS
409 Double_t fDaughterMinPt; // DAUGHTER CUTS
410 Int_t fDaughterMinNClsTPC; // DAUGHTER CUTS
411 Int_t fDaughterMinNClsITS; // DAUGHTER CUTS
412 Int_t fDaughterMinXRows; // DAUGHTER CUTS
413 Double_t fDaughterMaxChi2PerNClsTPC; // DAUGHTER CUTS
414 Double_t fDaughterMinXRowsOverNClsFTPC; // DAUGHTER CUTS
415 Double_t fDaughterMinImpactParameterXY; // DAUGHTER CUTS
416 Double_t fDaughterMaxNSigmaPID; // DAUGHTER CUTS
417 Bool_t fDaughterSPDRequireAny; // DAUGHTER CUTS
418 Bool_t fDaughterITSrefit; // DAUGHTER CUTS
420 ClassDef(AliAnalysisTaskFlowStrange, 6);