]>
Commit | Line | Data |
---|---|---|
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) // | |
24 | //=========================================================================// | |
25 | ||
26 | #include "TMath.h" | |
27 | #include "TAxis.h" | |
28 | #include "TSystem.h" | |
29 | #include "TProfile.h" | |
30 | #include "TH2F.h" | |
31 | #include "TH3F.h" | |
32 | #include "TFile.h" | |
33 | #include "TPRegexp.h" | |
34 | #include "AliStack.h" | |
35 | #include "AliMCEvent.h" | |
36 | #include "AliMCParticle.h" | |
37 | #include "AliESDtrackCuts.h" | |
38 | #include "AliESDInputHandler.h" | |
39 | #include "AliESDpid.h" | |
40 | #include "AliCentrality.h" | |
41 | #include "AliTracker.h" | |
42 | #include "AliAODInputHandler.h" | |
43 | #include "AliAODEvent.h" | |
44 | #include "AliAODTrack.h" | |
45 | #include "AliAODMCParticle.h" | |
46 | #include "AliEbyEPidRatioQA.h" | |
47 | ||
48 | using namespace std; | |
49 | ||
50 | ClassImp(AliEbyEPidRatioQA) | |
51 | //________________________________________________________________________ | |
52 | AliEbyEPidRatioQA::AliEbyEPidRatioQA() : | |
53 | AliEbyEPidRatioBase("QA", "QA"), | |
54 | ||
f7ea34d2 | 55 | fHnQAa(NULL), fHnQAb(NULL) { |
0a28d543 | 56 | // Constructor |
57 | ||
58 | AliLog::SetClassDebugLevel("AliEbyEPidRatioQA",10); | |
59 | } | |
60 | ||
61 | //________________________________________________________________________ | |
62 | AliEbyEPidRatioQA::~AliEbyEPidRatioQA() { | |
63 | // Destructor | |
64 | ||
65 | return; | |
66 | } | |
67 | ||
68 | //________________________________________________________________________ | |
69 | void AliEbyEPidRatioQA::CreateHistograms() { | |
70 | ||
f7ea34d2 | 71 | Int_t binHnQAa[10] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent, 4, |
72 | AliEbyEPidRatioHelper::fgkfHistNBinsSign, | |
73 | AliEbyEPidRatioHelper::fgkfHistNBinsPt, | |
a0b89af4 | 74 | AliEbyEPidRatioHelper::fgkfHistNBinsPt, |
f7ea34d2 | 75 | 500, 50, 50, 50, 3}; |
76 | ||
77 | Double_t minHnQAa[10] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],-0.5, | |
78 | AliEbyEPidRatioHelper::fgkfHistRangeSign[0], | |
79 | AliEbyEPidRatioHelper::fgkfHistRangePt[0], | |
a0b89af4 | 80 | AliEbyEPidRatioHelper::fgkfHistRangePt[0], |
f7ea34d2 | 81 | 30, -10,-10, -10, -0.5}; |
82 | ||
83 | Double_t maxHnQAa[10] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1], 3.5, | |
84 | AliEbyEPidRatioHelper::fgkfHistRangeSign[1], | |
85 | AliEbyEPidRatioHelper::fgkfHistRangePt[1], | |
a0b89af4 | 86 | AliEbyEPidRatioHelper::fgkfHistRangePt[1], |
f7ea34d2 | 87 | 500, 10., 10., 10., 2.5}; |
88 | ||
89 | Int_t binHnQAb[9] = {AliEbyEPidRatioHelper::fgkfHistNBinsCent, 4, | |
0cb52888 | 90 | AliEbyEPidRatioHelper::fgkfHistNBinsSign, |
91 | AliEbyEPidRatioHelper::fgkfHistNBinsPt, | |
f7ea34d2 | 92 | AliEbyEPidRatioHelper::fgkfHistNBinsEta, |
93 | AliEbyEPidRatioHelper::fgkfHistNBinsRap, | |
94 | AliEbyEPidRatioHelper::fgkfHistNBinsPhi, | |
f7ea34d2 | 95 | 50, 50}; |
0a28d543 | 96 | |
f7ea34d2 | 97 | Double_t minHnQAb[9] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[0],-0.5, |
98 | AliEbyEPidRatioHelper::fgkfHistRangeSign[0], | |
0cb52888 | 99 | AliEbyEPidRatioHelper::fgkfHistRangePt[0], |
100 | AliEbyEPidRatioHelper::fgkfHistRangeEta[0], | |
101 | AliEbyEPidRatioHelper::fgkfHistRangeRap[0], | |
102 | AliEbyEPidRatioHelper::fgkfHistRangePhi[0], | |
a0b89af4 | 103 | -5,-5}; |
0a28d543 | 104 | |
f7ea34d2 | 105 | Double_t maxHnQAb[9] = {AliEbyEPidRatioHelper::fgkfHistRangeCent[1], 3.5, |
0cb52888 | 106 | AliEbyEPidRatioHelper::fgkfHistRangeSign[1], |
107 | AliEbyEPidRatioHelper::fgkfHistRangePt[1], | |
108 | AliEbyEPidRatioHelper::fgkfHistRangeEta[1], | |
109 | AliEbyEPidRatioHelper::fgkfHistRangeRap[1], | |
110 | AliEbyEPidRatioHelper::fgkfHistRangePhi[1], | |
a0b89af4 | 111 | 5., 5.}; |
0a28d543 | 112 | |
f7ea34d2 | 113 | fHnQAa = new THnSparseF("hnQAPid", "cent:pid:sign:pt:pInner:TPCsignal:nSigmaITS:nSigmaTPC:nSigmaTOF:MCisProbe", 10, binHnQAa, minHnQAa, maxHnQAa); |
a0b89af4 | 114 | fHnQAb = new THnSparseF("hnQADca", "cent:pid:sign:pt:eta:y:phi:DCAr:DCAz", 9, binHnQAb, minHnQAb, maxHnQAb); |
f7ea34d2 | 115 | fHnQAa->Sumw2(); |
116 | fHnQAb->Sumw2(); | |
0a28d543 | 117 | |
a0b89af4 | 118 | 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 | 119 | fHnQAa->GetAxis(1)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3 |
120 | fHnQAa->GetAxis(2)->SetTitle("sign"); // -1 | 0 | +1 | |
121 | fHnQAa->GetAxis(3)->SetTitle("#it{p}_{T} (GeV/#it{c})"); // pt [ 0.46, 2.22] | |
122 | fHnQAa->GetAxis(4)->SetTitle("#it{p}_{Inner} (GeV/#it{c})"); // pInner [ 0.1, 3.0] | |
123 | fHnQAa->GetAxis(5)->SetTitle("TPC signal"); // TPCsignal [30, 500] | |
124 | fHnQAa->GetAxis(6)->SetTitle("n #sigma ITS"); // nSigma ITS [-10, 10] | |
125 | fHnQAa->GetAxis(7)->SetTitle("n #sigma TPC"); // nSigma TPC [-10, 10] | |
126 | fHnQAa->GetAxis(8)->SetTitle("n #sigma TOF"); // nSigma TOF [-10, 10] | |
127 | fHnQAa->GetAxis(9)->SetTitle("MCisProbe"); // 0 | 1 (isProbeParticle) | 2 (isProbeParticle wrong sign) | |
128 | ||
a0b89af4 | 129 | 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 | 130 | fHnQAb->GetAxis(1)->SetTitle("N_{ch}|N_{#pi}|N_{K}|N_{p}"); // 0 | 1 | 2 | 3 |
131 | fHnQAb->GetAxis(2)->SetTitle("sign"); // -1 | 0 | +1 | |
0cb52888 | 132 | fHnQAb->GetAxis(3)->SetTitle("#it{p}_{T} (GeV/#it{c})"); // pt [ 0.46, 2.22] |
133 | fHnQAb->GetAxis(4)->SetTitle("#eta"); // eta [-0.9, 0.9] | |
134 | fHnQAb->GetAxis(5)->SetTitle("#it{y}"); // rapidity [-0.5, 0.5] | |
135 | fHnQAb->GetAxis(6)->SetTitle("#varphi"); // phi [ 0. , 2Pi] | |
f7ea34d2 | 136 | fHnQAb->GetAxis(7)->SetTitle("DCAr"); // DCAr [-10, 10] |
137 | fHnQAb->GetAxis(8)->SetTitle("DCAz"); // DCAz [-10, 10] | |
138 | // fHnQA->GetAxis(9)->SetTitle("n #sigma #sqrt(Cdd)/DCAr"); // nSigma DCAr [-10, 10] | |
139 | // fHnQA->GetAxis(10)->SetTitle("n #sigma #sqrt(Czz)/DCAz"); // nSigma DCAz [-10, 10] | |
0a28d543 | 140 | |
f7ea34d2 | 141 | fHelper->BinLogAxis(fHnQAa, 3); |
0cb52888 | 142 | fHelper->BinLogAxis(fHnQAb, 3); |
f7ea34d2 | 143 | |
144 | ||
0a28d543 | 145 | |
f7ea34d2 | 146 | |
0a28d543 | 147 | |
148 | return; | |
149 | } | |
150 | ||
151 | //________________________________________________________________________ | |
152 | void 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 | |
f7ea34d2 | 242 | Double_t aTracka[10] = {fCentralityBin,0,track->Charge(),track->Pt(),track->GetTPCmomentum(),track->GetTPCsignal(),pid[0],pid[1],pid[2],isProbeParticle}; |
0cb52888 | 243 | Double_t aTrackb[9] = {fCentralityBin,0,track->Charge(),track->Pt(),track->Eta(),yP, track->Phi(),dca[0],dca[1]}; |
f7ea34d2 | 244 | fHnQAa->Fill(aTracka); |
245 | fHnQAb->Fill(aTrackb); | |
246 | } | |
247 | ||
248 | Double_t aTracka[10] = {fCentralityBin,iPid,track->Charge(),track->Pt(),track->GetTPCmomentum(),track->GetTPCsignal(),pid[0],pid[1],pid[2],isProbeParticle}; | |
0cb52888 | 249 | Double_t aTrackb[9] = {fCentralityBin,iPid,track->Charge(),track->Pt(),track->Eta(),yP, track->Phi(),dca[0],dca[1]}; |
f7ea34d2 | 250 | fHnQAa->Fill(aTracka); |
251 | fHnQAb->Fill(aTrackb); | |
0a28d543 | 252 | |
253 | } // for (Int_t idxTrack = 0; idxTrack < fNTracks; ++idxTrack) { | |
254 | ||
255 | return; | |
256 | } |