]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/RESONANCES/extra/AliRsnAnalysisPhi7TeV.h
PWG2/SPECTRA -> PWGLF/SPECTRA migration
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / extra / AliRsnAnalysisPhi7TeV.h
1 //
2 // Header file for implementation of data analysis aft 900 GeV
3 //
4 // Author: A. Pulvirenti
5 //
6
7 #ifndef ALIRSNANALYSISPHI7TEV_H
8 #define ALIRSNANALYSISPHI7TEV_H
9
10 #include "AliAnalysisTaskSE.h"
11 #include "AliESDtrackCuts.h"
12 #include "AliPID.h"
13
14 class TH1I;
15 class TH1F;
16 class TH3F;
17
18 class AliStack;
19 class AliESDEvent;
20 class AliESDVertex;
21 class AliESDpid;
22 class AliESDtrack;
23 class AliCFContainer;
24
25 class AliRsnAnalysisPhi7TeV : public AliAnalysisTaskSE {
26 public:
27
28    enum EVertexType {
29       kGoodTracksPrimaryVertex = 0,
30       kGoodSPDPrimaryVertex    = 1,
31       kFarTracksPrimaryVertex  = 2,
32       kFarSPDPrimaryVertex     = 3,
33       kNoGoodPrimaryVertex     = 4,
34       kEmptyEvent              = 5,
35       kVertexTypes
36    };
37    
38    enum ETrackType {
39       kITSStandAlone,
40       kTPConly,
41       kTPCwithTOF,
42       kTrackTypes
43    };
44
45    AliRsnAnalysisPhi7TeV(const char *name = "Phi7TeV", Bool_t isMC = kFALSE);
46    AliRsnAnalysisPhi7TeV(const AliRsnAnalysisPhi7TeV& copy);
47    AliRsnAnalysisPhi7TeV& operator=(const AliRsnAnalysisPhi7TeV& copy);
48    virtual ~AliRsnAnalysisPhi7TeV();
49
50    void             SetMC       (Bool_t yn = kTRUE)     {fIsMC     = yn;}
51    void             SetAddITSTPC(Bool_t yn = kTRUE)     {fAddTPC   = yn;}
52    void             SetAddITSSA (Bool_t yn = kTRUE)     {fAddITS   = yn;}
53    void             SetCheckITS (Bool_t yn = kTRUE)     {fCheckITS = yn;}
54    void             SetCheckTPC (Bool_t yn = kTRUE)     {fCheckTPC = yn;}
55    void             SetCheckTOF (Bool_t yn = kTRUE)     {fCheckTOF = yn;}
56    void             SetStep     (Int_t step)            {fStep     = step;}
57
58    void             SetPhiMass (Double_t value)         {fPhiMass  = value;}
59    void             SetKaonMass(Double_t value)         {fKaonMass = value;}
60
61    void             SetMaxVz(Double_t v)                {fMaxVz = v;}
62
63    void             SetITSNSigma           (Double_t v) {fITSNSigma            = v;}
64    void             SetTPCNSigmaLow        (Double_t v) {fTPCNSigma[0]         = v;}
65    void             SetTPCNSigmaHigh       (Double_t v) {fTPCNSigma[1]         = v;}
66    void             SetTPCMomentumThreshold(Double_t v) {fTPCMomentumThreshold = v;}
67    void             SetTOFNSigma           (Double_t v) {fTOFNSigma            = v;}
68    
69    void             SetCutsTPC(AliESDtrackCuts *cuts)   {fESDtrackCutsTPC = cuts;}
70    void             SetCutsITS(AliESDtrackCuts *cuts)   {fESDtrackCutsITS = cuts;}
71    void             SetESDpid (AliESDpid       *pid )   {fESDpid          = pid ;}
72    AliESDtrackCuts* GetCutsTPC()                        {return fESDtrackCutsTPC;}
73    AliESDtrackCuts* GetCutsITS()                        {return fESDtrackCutsITS;}
74    AliESDpid*       GetESDpid()                         {return fESDpid;         }
75    
76    virtual void     UserCreateOutputObjects();
77    virtual void     UserExec(Option_t *option = "");
78    virtual void     Terminate(Option_t *option = "");
79
80    EVertexType      EventEval(AliESDEvent *esd);
81    
82    Bool_t           IsTPC    (AliESDtrack *track);
83    Bool_t           IsITS    (AliESDtrack *track);
84    Bool_t           MatchTOF (AliESDtrack *track);
85    ETrackType       TrackType(AliESDtrack *track);
86    
87    Bool_t           OkQualityITS(AliESDtrack *track) {return fESDtrackCutsITS->IsSelected(track);}
88    Bool_t           OkQualityTPC(AliESDtrack *track) {return fESDtrackCutsTPC->IsSelected(track);}
89    Bool_t           OkQuality   (AliESDtrack *track);
90    Bool_t           OkPIDITS    (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon);
91    Bool_t           OkPIDTPC    (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon);
92    Bool_t           OkPIDTOF    (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon);
93    Bool_t           OkPID       (AliESDtrack *track, AliPID::EParticleType pid = AliPID::kKaon);
94
95 private:
96
97    void  ProcessESD      (AliESDEvent *esd, AliMCEvent *mc);
98    void  ProcessMC       (AliESDEvent *esd, AliMCEvent *mc);
99    Int_t MatchedTrack    (AliESDEvent *esd, Int_t label, Int_t &npassed, Int_t start = 0);
100    Int_t BestMatchedTrack(AliESDEvent *esd, Int_t label);
101
102    Bool_t           fIsMC;                      // use MC or data?
103    Bool_t           fAddTPC;                    // include TPC+ITS tracks?
104    Bool_t           fAddITS;                    // add ITS standalone tracks?
105    Bool_t           fCheckITS;                  // check ITS PID (only for ITS-SA)?
106    Bool_t           fCheckTPC;                  // check TPC PID (only for TPC+ITS)?
107    Bool_t           fCheckTOF;                  // check TOF PID (only for TPC+ITS)?
108    Int_t            fStep;                      // step for progress message
109    
110    Double_t         fPhiMass;                   // mass hypothesis for phi
111    Double_t         fKaonMass;                  // mass hypothesis for kaon
112                    
113    Double_t         fMaxVz;                     // range in Z of primary vertex w.r. to origin
114                    
115    Double_t         fITSNSigma;                 // range for ITS dE/dx band (in sigmas)
116    Double_t         fTPCNSigma[2];              // ranges for TPC dE/dx band (in sigmas)
117    Double_t         fTPCMomentumThreshold;      // below this, [0] band is used, above, [1] bandd is used
118    Double_t         fTOFNSigma;                 // range for TOF time band (in sigmas)
119    
120    AliESDtrackCuts *fESDtrackCutsTPC;           // ESD standard defined track cuts for TPC tracks
121    AliESDtrackCuts *fESDtrackCutsITS;           // ESD standard defined track cuts for ITS-SA tracks
122    AliESDpid       *fESDpid;                    // PID manager
123                    
124    TList           *fOutList;                   // list containing all task outputs
125                    
126    AliCFContainer  *fCFunlike;                  // CF container for unlike-sign pairs
127    AliCFContainer  *fCFlikePP;                  // CF container for like-sign pairs ++
128    AliCFContainer  *fCFlikeMM;                  // CF container for like-sign pairs --
129    AliCFContainer  *fCFtrues;                   // CF container for true phis
130    AliCFContainer  *fCFkaons;                   // CF container for kaons (monitoring)
131                    
132    TH1I            *fHEvents;                   // histogram of event types
133    TH1F            *fVertexX[2];                // histogram of X coordinate of primary vertex ([0] = tracks, [1] = SPD)
134    TH1F            *fVertexY[2];                // histogram of Y coordinate of primary vertex ([0] = tracks, [1] = SPD)
135    TH1F            *fVertexZ[2];                // histogram of Z coordinate of primary vertex ([0] = tracks, [1] = SPD)
136
137    // ROOT dictionary
138    ClassDef(AliRsnAnalysisPhi7TeV, 1)
139 };
140
141 inline Bool_t AliRsnAnalysisPhi7TeV::IsTPC(AliESDtrack *vtrack)
142 {
143 //
144 // Checks if the track has the status flags required for a TPC+ITS track
145 //
146
147    if (!vtrack) {
148       AliWarning("NULL argument: impossible to check status");
149       return kFALSE;
150    }
151
152    return vtrack->IsOn(AliESDtrack::kTPCin);
153 }
154
155 inline Bool_t AliRsnAnalysisPhi7TeV::IsITS(AliESDtrack *vtrack)
156 {
157 //
158 // Checks if the track has the status flags required for an ITS standalone track
159 //
160
161    if (!vtrack) {
162       AliWarning("NULL argument: impossible to check status");
163       return kFALSE;
164    }
165
166    Bool_t isTPCin     = vtrack->IsOn(AliESDtrack::kTPCin);
167    Bool_t isITSrefit  = vtrack->IsOn(AliESDtrack::kITSrefit);
168    Bool_t isITSpureSA = vtrack->IsOn(AliESDtrack::kITSpureSA);
169    Bool_t isITSpid    = vtrack->IsOn(AliESDtrack::kITSpid);
170
171    return ((!isTPCin) && isITSrefit && (!isITSpureSA) && isITSpid);
172 }
173
174
175 inline Bool_t AliRsnAnalysisPhi7TeV::MatchTOF(AliESDtrack *vtrack)
176 {
177 //
178 // Checks if the track has matched the TOF detector
179 //
180
181    if (!vtrack) {
182       AliWarning("NULL argument: impossible to check status");
183       return kFALSE;
184    }
185
186    // require a minimum length to have meaningful match
187    if (vtrack->GetIntegratedLength() < 350.) return kFALSE;
188
189    Bool_t isTOFout = vtrack->IsOn(AliESDtrack::kTOFout);
190    Bool_t isTIME   = vtrack->IsOn(AliESDtrack::kTIME);
191
192    return (isTOFout && isTIME);
193 }
194
195 inline AliRsnAnalysisPhi7TeV::ETrackType AliRsnAnalysisPhi7TeV::TrackType(AliESDtrack *track)
196 {
197 //
198 // Assigns the track type according to enum
199 //
200
201    if (IsITS(track)) 
202       return kITSStandAlone;
203    else if (IsTPC(track)) {
204       if (MatchTOF(track))
205          return kTPCwithTOF;
206       else
207          return kTPConly;
208    }
209    else
210       return kTrackTypes;
211 }
212
213 inline Bool_t AliRsnAnalysisPhi7TeV::OkQuality(AliESDtrack *track)
214 {
215 //
216 // Check track quality cut, which depends on track type
217 //
218
219    ETrackType type = TrackType(track);
220       
221    switch (type) {
222       case kITSStandAlone:
223          return OkQualityITS(track);
224       case kTPConly:
225       case kTPCwithTOF:
226          return OkQualityTPC(track);
227       default:
228          return kFALSE;
229    }
230 }
231
232 inline Bool_t AliRsnAnalysisPhi7TeV::OkPID(AliESDtrack *track, AliPID::EParticleType pid)
233 {
234 //
235 // Check PID cut, which depends on track type
236 //
237
238    ETrackType type = TrackType(track);
239       
240    switch (type) {
241       case kITSStandAlone:
242          if (fCheckITS) return OkPIDITS(track);
243          else return kTRUE;
244       case kTPConly:
245          if (fCheckTPC) return OkPIDTPC(track);
246          else return kTRUE;
247       case kTPCwithTOF:
248          if (fCheckTPC && fCheckTOF) return (OkPIDTPC(track, pid) && OkPIDTOF(track, pid));
249          else if (fCheckTOF) return OkPIDTOF(track, pid);
250          else if (fCheckTPC) return OkPIDTPC(track, pid);
251          else return kTRUE;
252       default:
253          return kFALSE;
254    }
255 }
256
257 #endif