1 #ifndef ALIANALYSISTASKPIDV0BASE_H
\r
2 #define ALIANALYSISTASKPIDV0BASE_H
\r
5 This class is a base class for all other
\r
6 analysis tasks that use V0's.
\r
7 It provides basics for V0 identification.
\r
8 In addition, some further basic functions are provided.
\r
10 Class written by Benjamin Hess.
\r
11 Contact: bhess@cern.ch
\r
20 class AliPIDResponse;
\r
21 class AliESDv0KineCuts;
\r
23 class AliAnalysisFilter;
\r
26 #include <TTreeStream.h>
\r
27 #include "AliInputEventHandler.h"
\r
28 #include "AliTOFPIDResponse.h"
\r
29 #include "AliAnalysisTaskSE.h"
\r
31 class AliAnalysisTaskPIDV0base : public AliAnalysisTaskSE {
\r
33 AliAnalysisTaskPIDV0base();
\r
34 AliAnalysisTaskPIDV0base(const char *name);
\r
35 virtual ~AliAnalysisTaskPIDV0base();
\r
37 virtual void UserCreateOutputObjects();
\r
38 virtual void UserExec(Option_t *option);
\r
39 virtual void Terminate(const Option_t*);
\r
41 virtual Bool_t GetVertexIsOk(AliVEvent* event) const;
\r
43 virtual Bool_t GetIsPbpOrpPb() const { return fIsPbpOrpPb; };
\r
44 virtual void SetIsPbpOrpPb(Bool_t newValue) { fIsPbpOrpPb = newValue; };
\r
46 virtual Double_t GetZvtxCutEvent() const { return fZvtxCutEvent; };
\r
47 virtual void SetZvtxCutEvent(Double_t newValue) { fZvtxCutEvent = newValue; };
\r
49 virtual Bool_t GetUsePhiCut() const { return fUsePhiCut; };
\r
50 virtual void SetUsePhiCut(Bool_t newValue) { fUsePhiCut = newValue; };
\r
52 virtual Bool_t GetUseTPCCutMIGeo() const { return fUseTPCCutMIGeo; };
\r
53 virtual void SetUseTPCCutMIGeo(Bool_t newValue) { fUseTPCCutMIGeo = newValue; };
\r
55 virtual Double_t GetEtaCut() const { return fEtaCut; };
\r
56 virtual void SetEtaCut(Double_t etaCut){ fEtaCut = etaCut; };
\r
58 virtual const AliAnalysisFilter* GetTrackFilter() const { return fTrackFilter; };
\r
59 virtual void SetTrackFilter(AliAnalysisFilter* trackF) {fTrackFilter = trackF;}
\r
61 virtual Char_t GetV0tag(Int_t trackIndex) const;
\r
63 virtual Bool_t GetStoreMotherIndex() const { return fStoreMotherIndex; };
\r
64 virtual void SetStoreMotherIndex(Bool_t newValue) { fStoreMotherIndex = newValue; };
\r
66 virtual Int_t GetV0motherIndex(Int_t trackIndex) const;
\r
68 virtual Double_t GetPhiPrime(Double_t phi, Double_t magField, Int_t charge) const;
\r
69 virtual Bool_t PhiPrimeCut(const AliVTrack* track, Double_t magField) const;
\r
70 virtual Bool_t PhiPrimeCut(Double_t trackPt, Double_t trackPhi, Short_t trackCharge, Double_t magField) const;
\r
71 virtual Float_t GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse, const Double_t* times,
\r
72 AliPID::EParticleType type) const;
\r
74 static Double_t GetCutGeo() { return fgCutGeo; };
\r
75 static Double_t GetCutNcr() { return fgCutNcr; };
\r
76 static Double_t GetCutNcl() { return fgCutNcl; };
\r
78 static void SetCutGeo(Double_t value) { fgCutGeo = value; };
\r
79 static void SetCutNcr(Double_t value) { fgCutNcr = value; };
\r
80 static void SetCutNcl(Double_t value) { fgCutNcl = value; };
\r
82 static Bool_t TPCCutMIGeo(const AliVTrack* track, const AliVEvent* evt, TTreeStream* streamer = 0x0);
\r
83 static Bool_t TPCCutMIGeo(const AliVTrack* track, const AliInputEventHandler* evtHandler, TTreeStream* streamer = 0x0)
\r
84 { if (!evtHandler) return kFALSE; return TPCCutMIGeo(track, evtHandler->GetEvent(), streamer); };
\r
87 static Double_t fgCutGeo; // Cut variable for TPCCutMIGeo concerning geometry
\r
88 static Double_t fgCutNcr; // Cut variable for TPCCutMIGeo concerning num crossed rows
\r
89 static Double_t fgCutNcl; // Cut variable for TPCCutMIGeo concerning num clusters
\r
91 AliVEvent *fEvent; //! VEvent object
\r
92 AliESDEvent *fESD; //! ESDEvent object, if ESD
\r
93 AliMCEvent *fMC; //! MC object
\r
95 AliPIDResponse *fPIDResponse; //! PID response Handler
\r
96 AliESDv0KineCuts *fV0KineCuts; //! ESD V0 kine cuts
\r
98 Bool_t fIsPbpOrpPb; // Pbp/pPb collision or something else?
\r
99 Bool_t fUsePhiCut; // Use cut on phi (useful for TPC)
\r
100 Bool_t fUseTPCCutMIGeo; // Use geometrical cut for TPC
\r
101 Double_t fZvtxCutEvent; // Vertex z cut for the event (cm)
\r
102 Double_t fEtaCut; // Eta cut
\r
104 TF1* fPhiCutLow; // phi prime cut, low
\r
105 TF1* fPhiCutHigh; // phi prime cut, high
\r
107 TRandom3* fRandom; //! Can be used to statistically determine the shape in the pt bins e.g.
\r
109 AliAnalysisFilter* fTrackFilter; //! Track Filter
\r
112 Int_t fNumTagsStored; // Number of entries of fV0tags
\r
113 Char_t* fV0tags; //! Pointer to array with tags for identified particles from V0 decays
\r
115 Bool_t fStoreMotherIndex; // Switch on/off storing the mother indices of V0 daughters
\r
116 Int_t* fV0motherIndex; //! Pointer to array with index of the mother V0
\r
119 void FillV0PIDlist(AliESDEvent* esdEvent = 0x0);
\r
120 void ClearV0PIDlist();
\r
122 AliAnalysisTaskPIDV0base(const AliAnalysisTaskPIDV0base&); // not implemented
\r
123 AliAnalysisTaskPIDV0base& operator=(const AliAnalysisTaskPIDV0base&); // not implemented
\r
125 ClassDef(AliAnalysisTaskPIDV0base, 1);
\r
130 inline Float_t AliAnalysisTaskPIDV0base::GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse,
\r
131 const Double_t* times, AliPID::EParticleType type) const
\r
133 return (track->GetTOFsignal() - tofPIDresponse->GetStartTime(track->P()) - times[type]);
\r