]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/UserTasks/AliAnalysisTaskPIDV0base.h
- Added geometrical track cut (can be switched on/off
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskPIDV0base.h
1 #ifndef ALIANALYSISTASKPIDV0BASE_H\r
2 #define ALIANALYSISTASKPIDV0BASE_H\r
3 \r
4 /*\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
9 \r
10 Class written by Benjamin Hess.\r
11 Contact: bhess@cern.ch\r
12 */\r
13 \r
14 class TF1;\r
15 class TRandom3;\r
16 class TObjArray;\r
17 class AliVEvent;\r
18 class AliESDEvent;\r
19 class AliMCEvent;\r
20 class AliPIDResponse;\r
21 class AliESDv0KineCuts;\r
22 class AliPID;\r
23 class AliAnalysisFilter;\r
24 class AliVTrack;\r
25 \r
26 #include <TTreeStream.h>\r
27 #include "AliInputEventHandler.h"\r
28 #include "AliTOFPIDResponse.h"\r
29 #include "AliAnalysisTaskSE.h"\r
30 \r
31 class AliAnalysisTaskPIDV0base : public AliAnalysisTaskSE {\r
32  public:\r
33   AliAnalysisTaskPIDV0base();\r
34   AliAnalysisTaskPIDV0base(const char *name);\r
35   virtual ~AliAnalysisTaskPIDV0base();\r
36   \r
37   virtual void   UserCreateOutputObjects();\r
38   virtual void   UserExec(Option_t *option);\r
39   virtual void   Terminate(const Option_t*);\r
40   \r
41   virtual Bool_t GetVertexIsOk(AliVEvent* event) const;\r
42   \r
43   virtual Bool_t GetIsPbpOrpPb() const { return fIsPbpOrpPb; };\r
44   virtual void SetIsPbpOrpPb(Bool_t newValue) { fIsPbpOrpPb = newValue; };\r
45   \r
46   virtual Double_t GetZvtxCutEvent() const { return fZvtxCutEvent; };\r
47   virtual void SetZvtxCutEvent(Double_t newValue) { fZvtxCutEvent = newValue; };\r
48   \r
49   virtual Bool_t GetUsePhiCut() const { return fUsePhiCut; };\r
50   virtual void SetUsePhiCut(Bool_t newValue) { fUsePhiCut = newValue; };\r
51   \r
52   virtual Bool_t GetUseTPCCutMIGeo() const { return fUseTPCCutMIGeo; };\r
53   virtual void SetUseTPCCutMIGeo(Bool_t newValue) { fUseTPCCutMIGeo = newValue; };\r
54   \r
55   virtual Double_t GetEtaCut() const { return fEtaCut; };     \r
56   virtual void  SetEtaCut(Double_t etaCut){ fEtaCut = etaCut; };\r
57   \r
58   virtual const AliAnalysisFilter* GetTrackFilter() const { return fTrackFilter; };\r
59   virtual void  SetTrackFilter(AliAnalysisFilter* trackF) {fTrackFilter = trackF;}\r
60   \r
61   virtual Char_t GetV0tag(Int_t trackIndex) const;\r
62   \r
63   virtual Bool_t GetStoreMotherIndex() const { return fStoreMotherIndex; };\r
64   virtual void SetStoreMotherIndex(Bool_t newValue) { fStoreMotherIndex = newValue; };\r
65   \r
66   virtual Int_t GetV0motherIndex(Int_t trackIndex) const;\r
67   \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
73   \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
77   \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
81   \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
85   \r
86  protected:\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
90   \r
91   AliVEvent   *fEvent;    //! VEvent object\r
92   AliESDEvent *fESD;      //! ESDEvent object, if ESD\r
93   AliMCEvent  *fMC;       //! MC object\r
94 \r
95   AliPIDResponse *fPIDResponse;    //! PID response Handler\r
96   AliESDv0KineCuts *fV0KineCuts;       //! ESD V0 kine cuts\r
97   \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
103   \r
104   TF1* fPhiCutLow;          // phi prime cut, low\r
105   TF1* fPhiCutHigh;         // phi prime cut, high\r
106   \r
107   TRandom3* fRandom;        //! Can be used to statistically determine the shape in the pt bins e.g.\r
108   \r
109   AliAnalysisFilter* fTrackFilter; //! Track Filter\r
110   \r
111 \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
114   \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
117   \r
118  private:\r
119   void FillV0PIDlist(AliESDEvent* esdEvent = 0x0);\r
120   void ClearV0PIDlist();\r
121   \r
122   AliAnalysisTaskPIDV0base(const AliAnalysisTaskPIDV0base&); // not implemented\r
123   AliAnalysisTaskPIDV0base& operator=(const AliAnalysisTaskPIDV0base&); // not implemented\r
124   \r
125   ClassDef(AliAnalysisTaskPIDV0base, 1);\r
126 };\r
127 \r
128 \r
129 \r
130 inline Float_t AliAnalysisTaskPIDV0base::GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse,\r
131                                                      const Double_t* times, AliPID::EParticleType type) const\r
132 {\r
133   return (track->GetTOFsignal() - tofPIDresponse->GetStartTime(track->P()) - times[type]);\r
134 }\r
135 \r
136 #endif\r