]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/NetParticle/AliAnalysisNetParticleQA.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / EBYE / NetParticle / AliAnalysisNetParticleQA.cxx
CommitLineData
5de3d4d1 1//-*- Mode: C++ -*-
2
3#include "TMath.h"
4#include "TAxis.h"
5#include "TSystem.h"
6#include "TProfile.h"
7#include "TH2F.h"
8#include "TH3F.h"
9#include "TFile.h"
10#include "TPRegexp.h"
11
12#include "AliStack.h"
13#include "AliMCEvent.h"
14#include "AliMCParticle.h"
15#include "AliESDtrackCuts.h"
16#include "AliESDInputHandler.h"
17#include "AliESDpid.h"
18#include "AliCentrality.h"
19#include "AliTracker.h"
20#include "AliAODInputHandler.h"
21#include "AliAODEvent.h"
22#include "AliAODTrack.h"
23#include "AliAODMCParticle.h"
24
25#include "AliAnalysisNetParticleQA.h"
26
27using namespace std;
28
29/**
30 * Class for for NetParticle QA
31 * -- Create input for QA
32 * Authors: Jochen Thaeder <jochen@thaeder.de>
33 * Michael Weber <m.weber@cern.ch>
34 */
35
36ClassImp(AliAnalysisNetParticleQA)
37
38/*
39 * ---------------------------------------------------------------------------------
40 * Constructor / Destructor
41 * ---------------------------------------------------------------------------------
42 */
43
44//________________________________________________________________________
45AliAnalysisNetParticleQA::AliAnalysisNetParticleQA() :
a2ddc3d0 46 AliAnalysisNetParticleBase("QA", "QA"),
5de3d4d1 47
48 fHnQA(NULL) {
49 // Constructor
50
51 AliLog::SetClassDebugLevel("AliAnalysisNetParticleQA",10);
52}
53
54//________________________________________________________________________
55AliAnalysisNetParticleQA::~AliAnalysisNetParticleQA() {
56 // Destructor
57
58 return;
59}
60
61/*
62 * ---------------------------------------------------------------------------------
63 * Public Methods
64 * ---------------------------------------------------------------------------------
65 */
66
5de3d4d1 67
68//________________________________________________________________________
69void AliAnalysisNetParticleQA::CreateHistograms() {
70 // -- Add histograms to outlist
71
72 // ------------------------------------------------------------------
73 // -- Create THnSparseF - QA
74 // ------------------------------------------------------------------
75
a2ddc3d0 76 Int_t binHnQA[16] = {AliAnalysisNetParticleHelper::fgkfHistNBinsCent, AliAnalysisNetParticleHelper::fgkfHistNBinsEta, // cent | eta
77 AliAnalysisNetParticleHelper::fgkfHistNBinsRap, AliAnalysisNetParticleHelper::fgkfHistNBinsPhi, // y | phi
78 AliAnalysisNetParticleHelper::fgkfHistNBinsPt, AliAnalysisNetParticleHelper::fgkfHistNBinsPt, // pt | pInner
79 AliAnalysisNetParticleHelper::fgkfHistNBinsSign, 500, // sign | TPCsignal |
80 50, 50, 50, // nSigmaITS | nSigmaTPC | nSigmaTOF
81 50, 50, 50, 50, // DCAr | DCAz | nSigmaDCAr | nSigmaDCAz
5de3d4d1 82 3}; // MCisProbe
83
a2ddc3d0 84 Double_t minHnQA[16] = {AliAnalysisNetParticleHelper::fgkfHistRangeCent[0], AliAnalysisNetParticleHelper::fgkfHistRangeEta[0],
5de3d4d1 85 AliAnalysisNetParticleHelper::fgkfHistRangeRap[0], AliAnalysisNetParticleHelper::fgkfHistRangePhi[0],
86 AliAnalysisNetParticleHelper::fgkfHistRangePt[0], AliAnalysisNetParticleHelper::fgkfHistRangePt[0],
a2ddc3d0 87 AliAnalysisNetParticleHelper::fgkfHistRangeSign[0], 30,
88 -10., -10., -10.,
89 -10., -10., -10., -10.,
90 -0.5};
5de3d4d1 91
a2ddc3d0 92 Double_t maxHnQA[16] = {AliAnalysisNetParticleHelper::fgkfHistRangeCent[1], AliAnalysisNetParticleHelper::fgkfHistRangeEta[1],
5de3d4d1 93 AliAnalysisNetParticleHelper::fgkfHistRangeRap[1], AliAnalysisNetParticleHelper::fgkfHistRangePhi[1],
94 AliAnalysisNetParticleHelper::fgkfHistRangePt[1], AliAnalysisNetParticleHelper::fgkfHistRangePt[1],
a2ddc3d0 95 AliAnalysisNetParticleHelper::fgkfHistRangeSign[1], 500,
96 10., 10., 10.,
97 10., 10., 10., 10.,
98 2.5};
5de3d4d1 99
100
a2ddc3d0 101 fHnQA = new THnSparseF("hnQA", "cent:eta:y:phi:pt:pInner:sign:TPCsignal:nSigmaITS:nSigmaTPC:nSigmaTOF:DCAr:DCAz:nSigmaDCAr:nSigmaDCAz:MCisProbe",
102 16, binHnQA, minHnQA, maxHnQA);
5de3d4d1 103
104 fHnQA->Sumw2();
105
106 fHnQA->GetAxis(0)->SetTitle("centrality"); // 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90 --> 10 bins
107 fHnQA->GetAxis(1)->SetTitle("#eta"); // eta [-0.9, 0.9]
108 fHnQA->GetAxis(2)->SetTitle("#it{y}"); // rapidity [-0.5, 0.5]
109 fHnQA->GetAxis(3)->SetTitle("#varphi"); // phi [ 0. , 2Pi]
a2ddc3d0 110 fHnQA->GetAxis(4)->SetTitle("#it{p}_{T} (GeV/#it{c})"); // pt [ 0.46, 2.22]
5de3d4d1 111 fHnQA->GetAxis(5)->SetTitle("#it{p}_{Inner} (GeV/#it{c})"); // pInner [ 0.1, 3.0]
112 fHnQA->GetAxis(6)->SetTitle("sign"); // -1 | 0 | +1
113
114 fHnQA->GetAxis(7)->SetTitle("TPC signal"); // TPCsignal [30, 500]
a2ddc3d0 115 fHnQA->GetAxis(8)->SetTitle("n #sigma ITS"); // nSigma ITS [-10, 10]
116 fHnQA->GetAxis(9)->SetTitle("n #sigma TPC"); // nSigma TPC [-10, 10]
117 fHnQA->GetAxis(10)->SetTitle("n #sigma TOF"); // nSigma TOF [-10, 10]
5de3d4d1 118
a2ddc3d0 119 fHnQA->GetAxis(11)->SetTitle("DCAr"); // DCAr [-10, 10]
120 fHnQA->GetAxis(12)->SetTitle("DCAz"); // DCAz [-10, 10]
121 fHnQA->GetAxis(13)->SetTitle("n #sigma #sqrt(Cdd)/DCAr"); // nSigma DCAr [-10, 10]
122 fHnQA->GetAxis(14)->SetTitle("n #sigma #sqrt(Czz)/DCAz"); // nSigma DCAz [-10, 10]
123 fHnQA->GetAxis(15)->SetTitle("MCisProbe"); // 0 | 1 (isProbeParticle) | 2 (isProbeParticle wrong sign)
5de3d4d1 124
125 fHelper->BinLogAxis(fHnQA, 4);
126 fHelper->BinLogAxis(fHnQA, 5);
127
128 return;
129}
130
131//________________________________________________________________________
a2ddc3d0 132void AliAnalysisNetParticleQA::Process() {
5de3d4d1 133 // -- Process ESD/AOD tracks and fill QA histogram
134
135 // -- Get ranges for AOD particles
136 Float_t etaRange[2];
137 fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]);
138
139 Float_t ptRange[2];
140 fESDTrackCuts->GetPtRange(ptRange[0],ptRange[1]);
141
142 // -- Track Loop
143 for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
144
145 AliVTrack *track = (fESD) ? static_cast<AliVTrack*>(fESD->GetTrack(idxTrack)) : static_cast<AliVTrack*>(fAOD->GetTrack(idxTrack));
146
147 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
148 // -- Check track cuts
149 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
150
151 // -- Check if track is accepted for basic parameters
152 if (!fHelper->IsTrackAcceptedBasicCharged(track))
153 continue;
154
155 // -- Check if accepted - ESD
156 if (fESD && !fESDTrackCuts->AcceptTrack(dynamic_cast<AliESDtrack*>(track)))
157 continue;
158
159 // -- Check if accepted - AOD
160 if (fAOD){
161 AliAODTrack * trackAOD = dynamic_cast<AliAODTrack*>(track);
162
163 if (!trackAOD) {
164 AliError("Pointer to dynamic_cast<AliAODTrack*>(track) = ZERO");
165 continue;
166 }
167 if (!trackAOD->TestFilterBit(fAODtrackCutBit))
168 continue;
169
170 // -- Check if in pT and eta range (is done in ESDTrackCuts for ESDs)
171 if(!(track->Pt() > ptRange[0] && track->Pt() <= ptRange[1] && TMath::Abs(track->Eta()) <= etaRange[1]))
172 continue;
173 }
174
175 // -- Check if accepted in rapidity window -- for identified particles
176 // for charged particles -- eta check is done in the trackcuts
177 Double_t yP;
178 if (fHelper->GetUsePID() && !fHelper->IsTrackAcceptedRapidity(track, yP))
179 continue;
180
181 // -- Check if accepted with thighter DCA cuts
182 // -- returns kTRUE for AODs for now : MW
183 if (!fHelper->IsTrackAcceptedDCA(track))
184 continue;
185
186 // -- Check if accepted by PID from TPC or TPC+TOF
a2ddc3d0 187 Double_t pid[3];
5de3d4d1 188 if (!fHelper->IsTrackAcceptedPID(track, pid))
189 continue;
190
191 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
192 // -- Fill Track
193 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
194
195 // -- Check if probe particle
196 Int_t isProbeParticle = 0;
197 if (fIsMC) {
198 Int_t label = TMath::Abs(track->GetLabel());
199
200 AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(label) : static_cast<AliVParticle*>(fArrayMC->At(label));
201 if (particle) {
202 if (TMath::Abs(particle->PdgCode()) == fPdgCode) {
203 ++isProbeParticle;
204 if (particle->PdgCode() != (track->Charge()*fPdgCode))
205 ++isProbeParticle;
206 }
207 }
208 }
209
210 // -- Get dca r/z
211 Float_t dca[] = {0.,0.}; // dca_xy, dca_z,
212 Float_t cov[] = {0.,0.,0.}; // sigma_xy, sigma_xy_z, sigma_z
213 if (fESD)
214 (static_cast<AliESDtrack*>(track))->GetImpactParameters(dca,cov);
215
216 Float_t dcaRoverCdd = ( TMath::Sqrt(cov[0]) != 0. ) ? dca[0]/TMath::Sqrt(cov[0]) : -9.99;
217 Float_t dcaZoverCzz = ( TMath::Sqrt(cov[2]) != 0. ) ? dca[1]/TMath::Sqrt(cov[2]) : -9.99;
218
219 if (!fHelper->GetUsePID())
220 yP = track->Eta();
221
a2ddc3d0 222 Double_t aTrack[16] = {
5de3d4d1 223 Double_t(fCentralityBin), // 0 centrality
224 track->Eta(), // 1 eta
225 yP, // 2 rapidity
226 track->Phi(), // 3 phi
227 track->Pt(), // 4 pt
228 track->GetTPCmomentum(), // 5 pInner
71aa6041 229 static_cast<Double_t>(track->Charge()), // 6 sign
5de3d4d1 230 track->GetTPCsignal(), // 7 TPC dE/dx
a2ddc3d0 231 pid[0], // 8 n Sigma ITS
232 pid[1], // 9 n Sigma TPC
233 pid[2], // 10 n Sigma TOF
234 dca[0], // 11 dca r
235 dca[1], // 12 dca z
236 dcaRoverCdd, // 13 sqrt(cov[dd])
237 dcaZoverCzz, // 14 sqrt(cov[zz])
71aa6041 238 static_cast<Double_t>(isProbeParticle) // 15 isProbe
5de3d4d1 239 };
240
241 fHnQA->Fill(aTrack);
242
243 } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
244
a2ddc3d0 245 return;
5de3d4d1 246}