]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/PIDFluctuation/task/AliEbyEPidRatioQA.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / EBYE / PIDFluctuation / task / AliEbyEPidRatioQA.cxx
CommitLineData
0a28d543 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: ALICE Offline. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16
17//=========================================================================//
18// AliEbyE Analysis for Particle Ratio Fluctuation //
19// Deepika Rathee | Satyajit Jena //
20// drathee@cern.ch | sjena@cern.ch //
21// Date: Wed Jul 9 18:38:30 CEST 2014 //
22// New approch to find particle ratio to reduce memory //
23// (Test Only) //
df4f740f 24// Copied from NetParticle Classes
25// Origin: Authors: Jochen Thaeder <jochen@thaeder.de>
26// Michael Weber <m.weber@cern.ch>
0a28d543 27//=========================================================================//
28
29#include "TMath.h"
30#include "TAxis.h"
31#include "TSystem.h"
32#include "TProfile.h"
33#include "TH2F.h"
34#include "TH3F.h"
35#include "TFile.h"
36#include "TPRegexp.h"
37#include "AliStack.h"
38#include "AliMCEvent.h"
39#include "AliMCParticle.h"
40#include "AliESDtrackCuts.h"
41#include "AliESDInputHandler.h"
42#include "AliESDpid.h"
43#include "AliCentrality.h"
44#include "AliTracker.h"
45#include "AliAODInputHandler.h"
46#include "AliAODEvent.h"
47#include "AliAODTrack.h"
48#include "AliAODMCParticle.h"
49#include "AliEbyEPidRatioQA.h"
50
51using namespace std;
52
53ClassImp(AliEbyEPidRatioQA)
54//________________________________________________________________________
55AliEbyEPidRatioQA::AliEbyEPidRatioQA() :
56 AliEbyEPidRatioBase("QA", "QA"),
57
f7ea34d2 58 fHnQAa(NULL), fHnQAb(NULL) {
0a28d543 59 // Constructor
60
61 AliLog::SetClassDebugLevel("AliEbyEPidRatioQA",10);
62}
63
64//________________________________________________________________________
65AliEbyEPidRatioQA::~AliEbyEPidRatioQA() {
66 // Destructor
67
68 return;
69}
70
71//________________________________________________________________________
72void AliEbyEPidRatioQA::CreateHistograms() {
73
f7ea34d2 74 Int_t binHnQAa[10] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent, 4,
75 AliEbyEPidRatioHelper::fgkfHistNBinsSign,
76 AliEbyEPidRatioHelper::fgkfHistNBinsPt,
a0b89af4 77 AliEbyEPidRatioHelper::fgkfHistNBinsPt,
f7ea34d2 78 500, 50, 50, 50, 3};
79
80 Double_t minHnQAa[10] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],-0.5,
81 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
82 AliEbyEPidRatioHelper::fgkfHistRangePt[0],
a0b89af4 83 AliEbyEPidRatioHelper::fgkfHistRangePt[0],
f7ea34d2 84 30, -10,-10, -10, -0.5};
85
86 Double_t maxHnQAa[10] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1], 3.5,
87 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
88 AliEbyEPidRatioHelper::fgkfHistRangePt[1],
a0b89af4 89 AliEbyEPidRatioHelper::fgkfHistRangePt[1],
f7ea34d2 90 500, 10., 10., 10., 2.5};
91
92 Int_t binHnQAb[9] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent, 4,
0cb52888 93 AliEbyEPidRatioHelper::fgkfHistNBinsSign,
94 AliEbyEPidRatioHelper::fgkfHistNBinsPt,
f7ea34d2 95 AliEbyEPidRatioHelper::fgkfHistNBinsEta,
96 AliEbyEPidRatioHelper::fgkfHistNBinsRap,
97 AliEbyEPidRatioHelper::fgkfHistNBinsPhi,
f7ea34d2 98 50, 50};
0a28d543 99
f7ea34d2 100 Double_t minHnQAb[9] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],-0.5,
101 AliEbyEPidRatioHelper::fgkfHistRangeSign[0],
0cb52888 102 AliEbyEPidRatioHelper::fgkfHistRangePt[0],
103 AliEbyEPidRatioHelper::fgkfHistRangeEta[0],
104 AliEbyEPidRatioHelper::fgkfHistRangeRap[0],
105 AliEbyEPidRatioHelper::fgkfHistRangePhi[0],
a0b89af4 106 -5,-5};
0a28d543 107
f7ea34d2 108 Double_t maxHnQAb[9] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1], 3.5,
0cb52888 109 AliEbyEPidRatioHelper::fgkfHistRangeSign[1],
110 AliEbyEPidRatioHelper::fgkfHistRangePt[1],
111 AliEbyEPidRatioHelper::fgkfHistRangeEta[1],
112 AliEbyEPidRatioHelper::fgkfHistRangeRap[1],
113 AliEbyEPidRatioHelper::fgkfHistRangePhi[1],
a0b89af4 114 5., 5.};
0a28d543 115
f7ea34d2 116 fHnQAa = new THnSparseF("hnQAPid", "cent:pid:sign:pt:pInner:TPCsignal:nSigmaITS:nSigmaTPC:nSigmaTOF:MCisProbe", 10, binHnQAa, minHnQAa, maxHnQAa);
a0b89af4 117 fHnQAb = new THnSparseF("hnQADca", "cent:pid:sign:pt:eta:y:phi:DCAr:DCAz", 9, binHnQAb, minHnQAb, maxHnQAb);
f7ea34d2 118 fHnQAa->Sumw2();
119 fHnQAb->Sumw2();
0a28d543 120
a0b89af4 121 fHnQAa->GetAxis(0)->SetTitle("centrality"); // 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90|90-100 --> 11 bins
f7ea34d2 122 fHnQAa->GetAxis(1)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3
123 fHnQAa->GetAxis(2)->SetTitle("sign"); // -1 | 0 | +1
124 fHnQAa->GetAxis(3)->SetTitle("#it{p}_{T} (GeV/#it{c})"); // pt [ 0.46, 2.22]
125 fHnQAa->GetAxis(4)->SetTitle("#it{p}_{Inner} (GeV/#it{c})"); // pInner [ 0.1, 3.0]
126 fHnQAa->GetAxis(5)->SetTitle("TPC signal"); // TPCsignal [30, 500]
127 fHnQAa->GetAxis(6)->SetTitle("n #sigma ITS"); // nSigma ITS [-10, 10]
128 fHnQAa->GetAxis(7)->SetTitle("n #sigma TPC"); // nSigma TPC [-10, 10]
129 fHnQAa->GetAxis(8)->SetTitle("n #sigma TOF"); // nSigma TOF [-10, 10]
130 fHnQAa->GetAxis(9)->SetTitle("MCisProbe"); // 0 | 1 (isProbeParticle) | 2 (isProbeParticle wrong sign)
131
a0b89af4 132 fHnQAb->GetAxis(0)->SetTitle("centrality"); // 0-5|5-10|10-20|20-30|30-40|40-50|50-60|60-70|70-80|80-90!90-100 --> 11 bins
f7ea34d2 133 fHnQAb->GetAxis(1)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3
134 fHnQAb->GetAxis(2)->SetTitle("sign"); // -1 | 0 | +1
0cb52888 135 fHnQAb->GetAxis(3)->SetTitle("#it{p}_{T} (GeV/#it{c})"); // pt [ 0.46, 2.22]
136 fHnQAb->GetAxis(4)->SetTitle("#eta"); // eta [-0.9, 0.9]
137 fHnQAb->GetAxis(5)->SetTitle("#it{y}"); // rapidity [-0.5, 0.5]
138 fHnQAb->GetAxis(6)->SetTitle("#varphi"); // phi [ 0. , 2Pi]
f7ea34d2 139 fHnQAb->GetAxis(7)->SetTitle("DCAr"); // DCAr [-10, 10]
140 fHnQAb->GetAxis(8)->SetTitle("DCAz"); // DCAz [-10, 10]
e146cc53 141// needed to be add later
f7ea34d2 142 // fHnQA->GetAxis(9)->SetTitle("n #sigma #sqrt(Cdd)/DCAr"); // nSigma DCAr [-10, 10]
143 // fHnQA->GetAxis(10)->SetTitle("n #sigma #sqrt(Czz)/DCAz"); // nSigma DCAz [-10, 10]
0a28d543 144
f7ea34d2 145 fHelper->BinLogAxis(fHnQAa, 3);
0cb52888 146 fHelper->BinLogAxis(fHnQAb, 3);
f7ea34d2 147
0a28d543 148 return;
149}
150
151//________________________________________________________________________
152void AliEbyEPidRatioQA::Process() {
153 Float_t etaRange[2];
154 fESDTrackCuts->GetEtaRange(etaRange[0],etaRange[1]);
155
156 Float_t ptRange[2];
157 fESDTrackCuts->GetPtRange(ptRange[0],ptRange[1]);
158
159 // -- Track Loop
160 for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
15bb9247 161
0a28d543 162 AliVTrack *track = (fESD) ? static_cast<AliVTrack*>(fESD->GetTrack(idxTrack)) : static_cast<AliVTrack*>(fAOD->GetTrack(idxTrack));
163
164 // -- Check if track is accepted for basic parameters
165 if (!fHelper->IsTrackAcceptedBasicCharged(track))
166 continue;
167
168 // -- Check if accepted - ESD
15bb9247 169 if (fESD){
170 if (!fESDTrackCuts->AcceptTrack(dynamic_cast<AliESDtrack*>(track)))
171 continue;
172 }
173
174
0a28d543 175 // -- Check if accepted - AOD
176 if (fAOD){
177 AliAODTrack * trackAOD = dynamic_cast<AliAODTrack*>(track);
178
179 if (!trackAOD) {
180 AliError("Pointer to dynamic_cast<AliAODTrack*>(track) = ZERO");
181 continue;
182 }
183 if (!trackAOD->TestFilterBit(fAODtrackCutBit))
184 continue;
185
186 // -- Check if in pT and eta range (is done in ESDTrackCuts for ESDs)
187 if(!(track->Pt() > ptRange[0] && track->Pt() <= ptRange[1] && TMath::Abs(track->Eta()) <= etaRange[1]))
188 continue;
189 }
190
191 Int_t gPdgCode = 0;
192
193 Int_t iPid = 0;
194 Double_t pid[3];
195 if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kPion))) { iPid = 1; gPdgCode = 211;}
196 else if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kKaon))) { iPid = 2; gPdgCode = 321;}
197 else if (fHelper->IsTrackAcceptedPID(track, pid, (AliPID::kProton))){ iPid = 3; gPdgCode = 2212;}
198 else iPid = 0;
199
15bb9247 200
201 //cout << idxTrack << " --- QA ---- " << iPid << " " << gPdgCode << endl;
202
0a28d543 203 Double_t yP;
204 if ((iPid != 0) && !fHelper->IsTrackAcceptedRapidity(track, yP, iPid))
205 continue;
206
207 if (!fHelper->IsTrackAcceptedDCA(track))
208 continue;
209
210 // -- Check if probe particle
211 Int_t isProbeParticle = 0;
212 if (fIsMC) {
213 Int_t label = TMath::Abs(track->GetLabel());
214
215 AliVParticle* particle = (fESD) ? fMCEvent->GetTrack(label) : static_cast<AliVParticle*>(fArrayMC->At(label));
216 if (particle) {
217 if (TMath::Abs(particle->PdgCode()) == gPdgCode) {
218 ++isProbeParticle;
219 if (particle->PdgCode() != (track->Charge()*gPdgCode))
220 ++isProbeParticle;
221 }
222 }
223 }
224
225 // -- Get dca r/z
226 Float_t dca[] = {0.,0.}; // dca_xy, dca_z,
227 Float_t cov[] = {0.,0.,0.}; // sigma_xy, sigma_xy_z, sigma_z
228 if (fESD)
229 (static_cast<AliESDtrack*>(track))->GetImpactParameters(dca,cov);
230
f7ea34d2 231 // Float_t dcaRoverCdd = ( TMath::Sqrt(cov[0]) != 0. ) ? dca[0]/TMath::Sqrt(cov[0]) : -9.99;
232 // Float_t dcaZoverCzz = ( TMath::Sqrt(cov[2]) != 0. ) ? dca[1]/TMath::Sqrt(cov[2]) : -9.99;
0a28d543 233
234 if (iPid == 0)
235 yP = track->Eta();
236
237
238 // cout << pid[0] << " " << pid[1] << " " << pid[2] << yP << " " << iPid << endl;
239
240 if (iPid != 0) {
0a28d543 241
f62957be 242 Double_t aTracka[10] = {fCentralityBin,0,
243 static_cast<Double_t>(track->Charge()),
244 track->Pt(),
245 track->GetTPCmomentum(),track->GetTPCsignal(),pid[0],pid[1],pid[2],
246 static_cast<Double_t>(isProbeParticle)};
247 Double_t aTrackb[9] = {fCentralityBin,0,
c21eda25 248 static_cast<Double_t>(track->Charge()),
f62957be 249 track->Pt(),track->Eta(),yP,
250 track->Phi(),dca[0],dca[1]};
f7ea34d2 251 fHnQAa->Fill(aTracka);
252 fHnQAb->Fill(aTrackb);
253 }
254
f62957be 255 Double_t aTracka[10] = {fCentralityBin,
256 static_cast<Double_t>(iPid),
257 static_cast<Double_t>(track->Charge()),
258 track->Pt(),
259 track->GetTPCmomentum(),
260 track->GetTPCsignal(),pid[0],pid[1],pid[2],
261 static_cast<Double_t>(isProbeParticle)};
262 Double_t aTrackb[9] = {fCentralityBin,
263 static_cast<Double_t>(iPid),
264 static_cast<Double_t>(track->Charge()),
265 track->Pt(),track->Eta(),yP, track->Phi(),dca[0],dca[1]};
f7ea34d2 266 fHnQAa->Fill(aTracka);
267 fHnQAb->Fill(aTrackb);
0a28d543 268
269 } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) {
270
271 return;
272}