]>
Commit | Line | Data |
---|---|---|
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 | ||
27 | using 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 | ||
36 | ClassImp(AliAnalysisNetParticleQA) | |
37 | ||
38 | /* | |
39 | * --------------------------------------------------------------------------------- | |
40 | * Constructor / Destructor | |
41 | * --------------------------------------------------------------------------------- | |
42 | */ | |
43 | ||
44 | //________________________________________________________________________ | |
45 | AliAnalysisNetParticleQA::AliAnalysisNetParticleQA() : | |
a2ddc3d0 | 46 | AliAnalysisNetParticleBase("QA", "QA"), |
5de3d4d1 | 47 | |
48 | fHnQA(NULL) { | |
49 | // Constructor | |
50 | ||
51 | AliLog::SetClassDebugLevel("AliAnalysisNetParticleQA",10); | |
52 | } | |
53 | ||
54 | //________________________________________________________________________ | |
55 | AliAnalysisNetParticleQA::~AliAnalysisNetParticleQA() { | |
56 | // Destructor | |
57 | ||
58 | return; | |
59 | } | |
60 | ||
61 | /* | |
62 | * --------------------------------------------------------------------------------- | |
63 | * Public Methods | |
64 | * --------------------------------------------------------------------------------- | |
65 | */ | |
66 | ||
5de3d4d1 | 67 | |
68 | //________________________________________________________________________ | |
69 | void 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 | 132 | void 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 | } |