]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/ITS/AliAnalysisTaskSEImpParRes.cxx
Added histogram for ITS-PID cluster selection
[u/mrichter/AliRoot.git] / PWG1 / ITS / AliAnalysisTaskSEImpParRes.cxx
CommitLineData
77e570bf 1/**************************************************************************
2 * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
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// AliAnalysisTaskSE for the study of the impact parameter resolution
19//
20// Authors:A.Dainese, andrea.dainese@pd.infn.it
21// and Xianbao Yuan, yuanxb@iopp.ccnu.edu.cn; xianbao.yuan@pd.infn.it
22/////////////////////////////////////////////////////////
23
77e570bf 24#include <TList.h>
25#include <TH1F.h>
26
27#include "AliAnalysisManager.h"
cbddc2a0 28#include "AliGeomManager.h"
29#include "AliTrackPointArray.h"
77e570bf 30#include "AliMCEventHandler.h"
cbddc2a0 31#include "AliGenEventHeader.h"
77e570bf 32#include "AliMCEvent.h"
33#include "AliStack.h"
34#include "AliESDEvent.h"
35#include "AliESDVertex.h"
36#include "AliESDtrack.h"
37#include "AliVertexerTracks.h"
38#include "AliAnalysisTaskSEImpParRes.h"
39
40ClassImp(AliAnalysisTaskSEImpParRes)
41
42//________________________________________________________________________
43AliAnalysisTaskSEImpParRes::AliAnalysisTaskSEImpParRes():
44AliAnalysisTaskSE(),
45fReadMC(kFALSE),
46fSelectedPdg(-1),
cbddc2a0 47fUseDiamond(kFALSE),
77e570bf 48fOutputitspureSARec(0),
49fOutputitspureSASkip(0),
50fOutputallPointRec(0),
51fOutputallPointSkip(0),
52fOutputpartPointRec(0),
53fOutputpartPointSkip(0),
54fOutputonepointSPDRec(0),
55fOutputonepointSPDSkip(0),
56fOutputpostvTracRec(0),
57fOutputpostvTracSkip(0),
58fOutputnegtvTracRec(0),
59fOutputnegtvTracSkip(0),
60fOutputpullAllpointRec(0),
61fOutputpullAllpointSkip(0),
62fOutputOnlyRefitRec(0),
63fOutputOnlyRefitSkip(0),
b2d79ac3 64fOutputSinThetaRec(0),
65fOutputSinThetaSkip(0),
cbddc2a0 66fOutputallPointTrue(0),
67fOutputpostvTracTrue(0),
68fOutputnegtvTracTrue(0),
69fOutputpullAllpointTrue(0),
70fOutputphiAllpointSkip(0),
71fOutputphiPostvtracSkip(0),
72fOutputphiNegtvtracSkip(0),
73fOutputclusterTypeSPD01Skip(0),
74fOutputclusterTypeSPD02Skip(0),
75fOutputclusterTypeSPD03Skip(0),
76fOutputclusterTypeSPD11Skip(0),
77fOutputclusterTypeSPD12Skip(0),
78fOutputclusterTypeSPD13Skip(0),
77e570bf 79fOutputPt(0),
80fNentries(0),
81fEstimVtx(0)
82{
83 //
84 // Default constructor
85 //
86}
87
88//________________________________________________________________________
89AliAnalysisTaskSEImpParRes::AliAnalysisTaskSEImpParRes(const char *name):
90AliAnalysisTaskSE(name),
91fReadMC(kFALSE),
92fSelectedPdg(-1),
cbddc2a0 93fUseDiamond(kFALSE),
77e570bf 94fOutputitspureSARec(0),
95fOutputitspureSASkip(0),
96fOutputallPointRec(0),
97fOutputallPointSkip(0),
98fOutputpartPointRec(0),
99fOutputpartPointSkip(0),
100fOutputonepointSPDRec(0),
101fOutputonepointSPDSkip(0),
102fOutputpostvTracRec(0),
103fOutputpostvTracSkip(0),
104fOutputnegtvTracRec(0),
105fOutputnegtvTracSkip(0),
106fOutputpullAllpointRec(0),
107fOutputpullAllpointSkip(0),
108fOutputOnlyRefitRec(0),
109fOutputOnlyRefitSkip(0),
b2d79ac3 110fOutputSinThetaRec(0),
111fOutputSinThetaSkip(0),
cbddc2a0 112fOutputallPointTrue(0),
113fOutputpostvTracTrue(0),
114fOutputnegtvTracTrue(0),
115fOutputpullAllpointTrue(0),
116fOutputphiAllpointSkip(0),
117fOutputphiPostvtracSkip(0),
118fOutputphiNegtvtracSkip(0),
119fOutputclusterTypeSPD01Skip(0),
120fOutputclusterTypeSPD02Skip(0),
121fOutputclusterTypeSPD03Skip(0),
122fOutputclusterTypeSPD11Skip(0),
123fOutputclusterTypeSPD12Skip(0),
124fOutputclusterTypeSPD13Skip(0),
77e570bf 125fOutputPt(0),
126fNentries(0),
127fEstimVtx(0)
128{
129 //
130 // Default constructor
131 //
132
133 DefineOutput(1, TList::Class()); //My private output
134 DefineOutput(2, TList::Class()); //My private output
135 DefineOutput(3, TList::Class()); //My private output
136 DefineOutput(4, TList::Class()); //My private output
137 DefineOutput(5, TList::Class());
138 DefineOutput(6, TList::Class()); //My private output
139 DefineOutput(7, TList::Class());
140 DefineOutput(8, TList::Class()); //My private output
141 DefineOutput(9, TList::Class()); //My private output
142 DefineOutput(10, TList::Class()); //My private output
143 DefineOutput(11, TList::Class()); //My private output
144 DefineOutput(12, TList::Class());
145 DefineOutput(13, TList::Class()); //My private output
146 DefineOutput(14, TList::Class());
147 DefineOutput(15, TList::Class()); //My private output
148 DefineOutput(16, TList::Class());
149 DefineOutput(17, TList::Class()); //My private output
b2d79ac3 150 DefineOutput(18, TList::Class());
151 DefineOutput(19, TList::Class()); //My private output
cbddc2a0 152 DefineOutput(20, TList::Class()); //My private output
153 DefineOutput(21, TList::Class());
154 DefineOutput(22, TList::Class()); //My private output
155 DefineOutput(23, TList::Class());
156 DefineOutput(24, TList::Class()); //My private output
157 DefineOutput(25, TList::Class());
158 DefineOutput(26, TList::Class()); //My private output
159 DefineOutput(27, TList::Class());
160 DefineOutput(28, TList::Class()); //My private output
161 DefineOutput(29, TList::Class());
162 DefineOutput(30, TList::Class()); //My private output
163 DefineOutput(31, TList::Class());
164 DefineOutput(32, TList::Class()); //My private output
165 DefineOutput(33, TH1F::Class());
166 DefineOutput(34, TH1F::Class());
77e570bf 167}
168
169//________________________________________________________________________
170AliAnalysisTaskSEImpParRes::~AliAnalysisTaskSEImpParRes()
171{
172 //
173 // default distructor
174 //
cbddc2a0 175 if (fOutputitspureSARec) { delete fOutputitspureSARec; fOutputitspureSARec=0x0;}
176 if (fOutputitspureSASkip) { delete fOutputitspureSASkip; fOutputitspureSASkip=0x0;}
177 if (fOutputallPointRec) { delete fOutputallPointRec; fOutputallPointRec=0x0; }
178 if (fOutputallPointSkip) { delete fOutputallPointSkip; fOutputallPointSkip=0x0; }
179 if (fOutputpartPointRec) { delete fOutputpartPointRec; fOutputpartPointRec=0x0; }
180 if (fOutputpartPointSkip) { delete fOutputpartPointSkip; fOutputpartPointSkip=0x0; }
181 if (fOutputonepointSPDRec) { delete fOutputonepointSPDRec;fOutputonepointSPDRec=0x0;}
182 if (fOutputonepointSPDSkip) { delete fOutputonepointSPDSkip;fOutputonepointSPDSkip=0x0;}
183 if (fOutputpostvTracRec) { delete fOutputpostvTracRec; fOutputpostvTracRec=0x0;}
184 if (fOutputpostvTracSkip) { delete fOutputpostvTracSkip; fOutputpostvTracSkip=0x0;}
185 if (fOutputnegtvTracRec) { delete fOutputnegtvTracRec; fOutputnegtvTracRec=0x0;}
186 if (fOutputnegtvTracSkip) { delete fOutputnegtvTracSkip; fOutputnegtvTracSkip=0x0;}
187 if (fOutputpullAllpointRec) {delete fOutputpullAllpointRec; fOutputpullAllpointRec=0x0;}
188 if (fOutputpullAllpointSkip) {delete fOutputpullAllpointSkip; fOutputpullAllpointSkip=0x0;}
189 if (fOutputOnlyRefitRec) {delete fOutputOnlyRefitRec; fOutputOnlyRefitRec=0x0;}
190 if (fOutputOnlyRefitSkip) {delete fOutputOnlyRefitSkip; fOutputOnlyRefitSkip=0x0;}
191 if (fOutputSinThetaRec) {delete fOutputSinThetaRec; fOutputSinThetaRec=0x0;}
192 if (fOutputSinThetaSkip) {delete fOutputSinThetaSkip; fOutputSinThetaSkip=0x0;}
193 if (fOutputallPointTrue) {delete fOutputallPointTrue; fOutputallPointTrue=0x0;}
194 if (fOutputpostvTracTrue) {delete fOutputpostvTracTrue;fOutputpostvTracTrue=0x0;}
195 if (fOutputnegtvTracTrue) {delete fOutputnegtvTracTrue;fOutputnegtvTracTrue=0x0;}
196 if (fOutputpullAllpointTrue) {delete fOutputpullAllpointTrue;fOutputpullAllpointTrue=0x0;}
197 if (fOutputphiAllpointSkip) {delete fOutputphiAllpointSkip;fOutputphiAllpointSkip=0x0;}
198 if (fOutputphiPostvtracSkip) {delete fOutputphiPostvtracSkip;fOutputphiPostvtracSkip=0x0;}
199 if (fOutputphiNegtvtracSkip) {delete fOutputphiNegtvtracSkip;fOutputphiNegtvtracSkip=0x0;}
200 if (fOutputclusterTypeSPD01Skip){delete fOutputclusterTypeSPD01Skip;fOutputclusterTypeSPD01Skip=0x0;}
201 if (fOutputclusterTypeSPD02Skip){delete fOutputclusterTypeSPD02Skip;fOutputclusterTypeSPD02Skip=0x0;}
202 if (fOutputclusterTypeSPD03Skip){delete fOutputclusterTypeSPD03Skip;fOutputclusterTypeSPD03Skip=0x0;}
203 if (fOutputclusterTypeSPD11Skip){delete fOutputclusterTypeSPD11Skip;fOutputclusterTypeSPD11Skip=0x0;}
204 if (fOutputclusterTypeSPD12Skip){delete fOutputclusterTypeSPD12Skip;fOutputclusterTypeSPD12Skip=0x0;}
205 if (fOutputclusterTypeSPD13Skip){delete fOutputclusterTypeSPD13Skip;fOutputclusterTypeSPD13Skip=0x0;}
206 if (fOutputPt) {delete fOutputPt;fOutputPt=0x0;}
207 if (fNentries) { delete fNentries; fNentries =0x0; }
208 if (fEstimVtx) { delete fEstimVtx; fEstimVtx =0x0; }
77e570bf 209
210}
211
212//________________________________________________________________________
213void AliAnalysisTaskSEImpParRes::UserCreateOutputObjects()
214{
215 //
216 // Create the output container
217 //
218
219 if(fDebug>1) printf("AnalysisTaskSEImpParRes::UserCreateOutputObjects() \n");
220
221 // Several histograms are more conveniently managed in a TList
222 if (!fOutputitspureSARec) {
223 fOutputitspureSARec = new TList();
224 fOutputitspureSARec->SetOwner();
225 fOutputitspureSARec->SetName("ITSpureSARec");
226 }
227
228 if (!fOutputitspureSASkip) {
229 fOutputitspureSASkip = new TList();
230 fOutputitspureSASkip->SetOwner();
231 fOutputitspureSASkip->SetName("ITSpureSASkip");
232 }
233
234 if (!fOutputallPointRec) {
235 fOutputallPointRec = new TList();
236 fOutputallPointRec->SetOwner();
237 fOutputallPointRec->SetName("allpointRec");
238 }
239
240 if (!fOutputallPointSkip) {
241 fOutputallPointSkip = new TList();
242 fOutputallPointSkip->SetOwner();
243 fOutputallPointSkip->SetName("allpointSkip");
244 }
245
246 if (!fOutputpartPointRec) {
247 fOutputpartPointRec = new TList();
248 fOutputpartPointRec->SetOwner();
249 fOutputpartPointRec->SetName("partpointRec");
250 }
251
252 if (!fOutputpartPointSkip) {
253 fOutputpartPointSkip = new TList();
254 fOutputpartPointSkip->SetOwner();
255 fOutputpartPointSkip->SetName("partpointSkip");
256 }
257
258 if (!fOutputonepointSPDRec) {
259 fOutputonepointSPDRec = new TList();
260 fOutputonepointSPDRec->SetOwner();
261 fOutputonepointSPDRec->SetName("onepointSPDRec");
262 }
263
264 if (!fOutputonepointSPDSkip) {
265 fOutputonepointSPDSkip = new TList();
266 fOutputonepointSPDSkip->SetOwner();
267 fOutputonepointSPDSkip->SetName("onepointSPDSkip");
268 }
269
270 if (!fOutputpostvTracRec) {
271 fOutputpostvTracRec = new TList();
272 fOutputpostvTracRec->SetOwner();
273 fOutputpostvTracRec->SetName("postvtracRec");
274 }
275
276 if (!fOutputpostvTracSkip) {
277 fOutputpostvTracSkip = new TList();
278 fOutputpostvTracSkip->SetOwner();
279 fOutputpostvTracSkip->SetName("postvtracSkip");
280 }
281
282 if (!fOutputnegtvTracRec) {
283 fOutputnegtvTracRec = new TList();
284 fOutputnegtvTracRec->SetOwner();
285 fOutputnegtvTracRec->SetName("negtvtracRe");
286 }
287
288 if (!fOutputnegtvTracSkip) {
289 fOutputnegtvTracSkip = new TList();
290 fOutputnegtvTracSkip->SetOwner();
291 fOutputnegtvTracSkip->SetName("negtvtracSkip");
292 }
cbddc2a0 293
77e570bf 294 if (!fOutputpullAllpointSkip) {
295 fOutputpullAllpointSkip = new TList();
296 fOutputpullAllpointSkip->SetOwner();
297 fOutputpullAllpointSkip->SetName("pullAllpointSkip");
298 }
cbddc2a0 299
77e570bf 300 if (!fOutputpullAllpointRec) {
301 fOutputpullAllpointRec = new TList();
302 fOutputpullAllpointRec->SetOwner();
303 fOutputpullAllpointRec->SetName("pullAllpointRec");
304 }
cbddc2a0 305
77e570bf 306 if (!fOutputOnlyRefitRec) {
307 fOutputOnlyRefitRec = new TList();
308 fOutputOnlyRefitRec->SetOwner();
309 fOutputOnlyRefitRec->SetName("onlyRefitRec");
310 }
cbddc2a0 311
77e570bf 312 if (!fOutputOnlyRefitSkip) {
313 fOutputOnlyRefitSkip = new TList();
314 fOutputOnlyRefitSkip->SetOwner();
315 fOutputOnlyRefitSkip->SetName("onlyRefitRec");
316 }
cbddc2a0 317
318 if (!fOutputallPointTrue) {
319 fOutputallPointTrue = new TList();
320 fOutputallPointTrue->SetOwner();
321 fOutputallPointTrue->SetName("allpointTrue");
322 }
323
324 if (!fOutputpostvTracTrue) {
325 fOutputpostvTracTrue = new TList();
326 fOutputpostvTracTrue->SetOwner();
327 fOutputpostvTracTrue->SetName("postvtracTrue");
328 }
329
330 if (!fOutputnegtvTracTrue) {
331 fOutputnegtvTracTrue = new TList();
332 fOutputnegtvTracTrue->SetOwner();
333 fOutputnegtvTracTrue->SetName("negtvtracTrue");
334 }
335
336 if (!fOutputpullAllpointTrue) {
337 fOutputpullAllpointTrue = new TList();
338 fOutputpullAllpointTrue->SetOwner();
339 fOutputpullAllpointTrue->SetName("pullAllpointTrue");
340 }
341
342 if (!fOutputclusterTypeSPD01Skip) {
343 fOutputclusterTypeSPD01Skip = new TList();
344 fOutputclusterTypeSPD01Skip->SetOwner();
345 fOutputclusterTypeSPD01Skip->SetName("clustertypeSPD01Skip");
346 }
347
348
349 if (!fOutputclusterTypeSPD02Skip) {
350 fOutputclusterTypeSPD02Skip = new TList();
351 fOutputclusterTypeSPD02Skip->SetOwner();
352 fOutputclusterTypeSPD02Skip->SetName("clustertypeSPD02Skip");
353 }
354
355 if (!fOutputclusterTypeSPD03Skip) {
356 fOutputclusterTypeSPD03Skip = new TList();
357 fOutputclusterTypeSPD03Skip->SetOwner();
358 fOutputclusterTypeSPD03Skip->SetName("clustertypeSPD03Skip");
359 }
360
361 if (!fOutputclusterTypeSPD11Skip) {
362 fOutputclusterTypeSPD11Skip = new TList();
363 fOutputclusterTypeSPD11Skip->SetOwner();
364 fOutputclusterTypeSPD11Skip->SetName("clustertypeSPD11Skip");
365 }
366
367 if (!fOutputclusterTypeSPD12Skip) {
368 fOutputclusterTypeSPD12Skip = new TList();
369 fOutputclusterTypeSPD12Skip->SetOwner();
370 fOutputclusterTypeSPD12Skip->SetName("clustertypeSPD12Skip");
371 }
372
373 if (!fOutputclusterTypeSPD13Skip) {
374 fOutputclusterTypeSPD13Skip = new TList();
375 fOutputclusterTypeSPD13Skip->SetOwner();
376 fOutputclusterTypeSPD13Skip->SetName("clustertypeSPD13Skip");
377 }
77e570bf 378
379 if (!fOutputPt) {
380 fOutputPt = new TList();
381 fOutputPt->SetOwner();
382 fOutputPt->SetName("Pt");
383 }
384
385 const Int_t nhist=26;
b2d79ac3 386 const TString d0ITSpureSArphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
387 const TString d0ITSpureSAzTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
388 const TString d0allpointrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
389 const TString d0allpointzTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
390 const TString d0partpointrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
391 const TString d0partpointzTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
392 const TString d0onepointSPDrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
393 const TString d0onepointSPDzTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
394 const TString d0postvtracrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
395 const TString d0postvtraczTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
396 const TString d0negtvtracrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
397 const TString d0negtvtraczTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
398 const TString d0pullAllpointrphiTitle = "d_{0} Pull Distribution_rphi; d_{0} pull; Entries";
399 const TString d0pullAllpointzTitle = "d_{0} Pull Distribution_z; d_{0} pull; Entries";
400 const TString d0onlyRefitrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
401 const TString d0onlyRefitzTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
402 const TString d0ptTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
cbddc2a0 403 const TString d0clusterTypeSPD01rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
404 const TString d0clusterTypeSPD01zTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
405 const TString d0clusterTypeSPD02rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
406 const TString d0clusterTypeSPD02zTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
407 const TString d0clusterTypeSPD03rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
408 const TString d0clusterTypeSPD03zTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
409 const TString d0clusterTypeSPD11rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
410 const TString d0clusterTypeSPD11zTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
411 const TString d0clusterTypeSPD12rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
412 const TString d0clusterTypeSPD12zTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
413 const TString d0clusterTypeSPD13rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
414 const TString d0clusterTypeSPD13zTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
415 const TString d0rphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
416 const TString d0zTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
417
77e570bf 418 TString named0itspureSArphiRec,named0itspureSAzRec,named0allpointrphiRec, named0allpointzRec,named0partpointrphiRec, named0partpointzRec,named0onepointSPDrphiRec, named0onepointSPDzRec,named0postvtracrphiRec, named0postvtraczRec,named0negtvtracrphiRec, named0negtvtraczRec,named0pt,named0pullAllpointrphiRec,named0pullAllpointzRec,named0onlyRefitrphiRec,named0onlyRefitzRec;
cbddc2a0 419
77e570bf 420 TH1F *d0ITSpureSArphiRec=0,*d0ITSpureSAzRec=0,*d0AllpointrphiRec=0, *d0AllpointzRec=0,*d0PartpointrphiRec=0, *d0PartpointzRec=0,
cbddc2a0 421 *d0OnepointSPDrphiRec=0,*d0OnepointSPDzRec=0,*d0PostvtracrphiRec=0, *d0PostvtraczRec=0,*d0NegtvtracrphiRec=0, *d0NegtvtraczRec=0,*d0Pt=0,*d0PullAllpointrphiRec=0,*d0PullAllpointzRec=0,*d0OnlyRefitrphiRec=0,*d0OnlyRefitzRec=0;
77e570bf 422
cbddc2a0 423 TString named0itspureSArphiSkip,named0itspureSAzSkip,named0allpointrphiSkip, named0allpointzSkip,named0partpointrphiSkip, named0partpointzSkip,named0onepointSPDrphiSkip, named0onepointSPDzSkip,named0postvtracrphiSkip, named0postvtraczSkip,named0negtvtracrphiSkip, named0negtvtraczSkip,named0ptSkip,named0pullAllpointrphiSkip,named0pullAllpointzSkip,named0onlyRefitrphiSkip,named0onlyRefitzSkip,named0allpointrphiTrue, named0allpointzTrue,named0postvtracrphiTrue, named0postvtraczTrue,named0negtvtracrphiTrue, named0negtvtraczTrue,named0pullAllpointrphiTrue,named0pullAllpointzTrue,named0clusterTypeSPD01rphiSkip,named0clusterTypeSPD01zSkip,named0clusterTypeSPD02rphiSkip,named0clusterTypeSPD02zSkip,named0clusterTypeSPD03rphiSkip,named0clusterTypeSPD03zSkip,named0clusterTypeSPD11rphiSkip,named0clusterTypeSPD11zSkip,named0clusterTypeSPD12rphiSkip,named0clusterTypeSPD12zSkip,named0clusterTypeSPD13rphiSkip,named0clusterTypeSPD13zSkip;
77e570bf 424
cbddc2a0 425 TH1F *d0ITSpureSArphiSkip=0,*d0ITSpureSAzSkip=0,*d0AllpointrphiSkip=0, *d0AllpointzSkip=0,*d0PartpointrphiSkip=0, *d0PartpointzSkip=0,*d0OnepointSPDrphiSkip=0,*d0OnepointSPDzSkip=0,*d0PostvtracrphiSkip=0, *d0PostvtraczSkip=0,*d0NegtvtracrphiSkip=0,*d0NegtvtraczSkip=0,*d0PullAllpointrphiSkip=0,*d0PullAllpointzSkip=0,*d0OnlyRefitrphiSkip=0,*d0OnlyRefitzSkip=0,*d0AllpointrphiTrue=0, *d0AllpointzTrue=0,*d0PostvtracrphiTrue=0, *d0PostvtraczTrue=0,*d0NegtvtracrphiTrue=0,*d0NegtvtraczTrue=0,*d0PullAllpointrphiTrue,*d0PullAllpointzTrue,*d0ClustertypeSPD01rphiSkip=0,*d0ClustertypeSPD01zSkip=0,*d0ClustertypeSPD02rphiSkip=0,*d0ClustertypeSPD02zSkip=0,*d0ClustertypeSPD03rphiSkip=0,*d0ClustertypeSPD03zSkip=0,*d0ClustertypeSPD11rphiSkip=0,*d0ClustertypeSPD11zSkip=0,*d0ClustertypeSPD12rphiSkip=0,*d0ClustertypeSPD12zSkip=0,*d0ClustertypeSPD13rphiSkip=0,*d0ClustertypeSPD13zSkip=0;
77e570bf 426
b2d79ac3 427 for(Int_t i=1; i<=nhist; i++) {
77e570bf 428
429 named0itspureSArphiRec = "d0itspureSArphiRec_";
b2d79ac3 430 named0itspureSArphiRec += i;
77e570bf 431 named0itspureSAzRec = "d0itspureSAzRec_";
b2d79ac3 432 named0itspureSAzRec += i;
433 d0ITSpureSArphiRec = new TH1F(named0itspureSArphiRec.Data(), d0ITSpureSArphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 434 d0ITSpureSArphiRec->Sumw2();
435 d0ITSpureSArphiRec->SetMinimum(0);
436 fOutputitspureSARec->Add(d0ITSpureSArphiRec);
b2d79ac3 437 d0ITSpureSAzRec = new TH1F(named0itspureSAzRec.Data(), d0ITSpureSAzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 438 d0ITSpureSAzRec->Sumw2();
439 d0ITSpureSAzRec->SetMinimum(0);
440 fOutputitspureSARec->Add(d0ITSpureSAzRec);
441
442 named0itspureSArphiSkip = "d0itspureSArphiSkip_";
b2d79ac3 443 named0itspureSArphiSkip += i;
77e570bf 444 named0itspureSAzSkip = "d0itspureSAzSkip_";
b2d79ac3 445 named0itspureSAzSkip += i;
446 d0ITSpureSArphiSkip = new TH1F(named0itspureSArphiSkip.Data(), d0ITSpureSArphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 447 d0ITSpureSArphiSkip->Sumw2();
448 d0ITSpureSArphiSkip->SetMinimum(0);
449 fOutputitspureSASkip->Add(d0ITSpureSArphiSkip);
b2d79ac3 450 d0ITSpureSAzSkip = new TH1F(named0itspureSAzSkip.Data(), d0ITSpureSAzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 451 d0ITSpureSAzSkip->Sumw2();
452 d0ITSpureSAzSkip->SetMinimum(0);
453 fOutputitspureSASkip->Add(d0ITSpureSAzSkip);
454
455 named0allpointrphiRec = "d0allpointrphiRec_";
b2d79ac3 456 named0allpointrphiRec += i;
77e570bf 457 named0allpointzRec = "d0allpointzRec_";
b2d79ac3 458 named0allpointzRec += i;
459 d0AllpointrphiRec = new TH1F(named0allpointrphiRec.Data(), d0allpointrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 460 d0AllpointrphiRec->Sumw2();
461 d0AllpointrphiRec->SetMinimum(0);
462 fOutputallPointRec->Add(d0AllpointrphiRec);
b2d79ac3 463 d0AllpointzRec= new TH1F(named0allpointzRec.Data(), d0allpointzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 464 d0AllpointzRec->Sumw2();
465 d0AllpointzRec->SetMinimum(0);
466 fOutputallPointRec->Add(d0AllpointzRec);
467
468 named0allpointrphiSkip = "d0allpointrphiSkip_";
b2d79ac3 469 named0allpointrphiSkip += i;
77e570bf 470 named0allpointzSkip = "d0allpointzSkip_";
b2d79ac3 471 named0allpointzSkip += i;
472 d0AllpointrphiSkip = new TH1F(named0allpointrphiSkip.Data(), d0allpointrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 473 d0AllpointrphiSkip->Sumw2();
474 d0AllpointrphiSkip->SetMinimum(0);
475 fOutputallPointSkip->Add(d0AllpointrphiSkip);
b2d79ac3 476 d0AllpointzSkip = new TH1F(named0allpointzSkip.Data(), d0allpointzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 477 d0AllpointzSkip->Sumw2();
478 d0AllpointzSkip->SetMinimum(0);
479 fOutputallPointSkip->Add(d0AllpointzSkip);
480
481 named0partpointrphiRec = "d0partpointrphiRec_";
b2d79ac3 482 named0partpointrphiRec += i;
77e570bf 483 named0partpointzRec = "d0partpointzRec_";
b2d79ac3 484 named0partpointzRec += i;
485 d0PartpointrphiRec = new TH1F(named0partpointrphiRec.Data(), d0partpointrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 486 d0PartpointrphiRec->Sumw2();
487 d0PartpointrphiRec->SetMinimum(0);
488 fOutputpartPointRec->Add(d0PartpointrphiRec);
b2d79ac3 489 d0PartpointzRec = new TH1F(named0partpointzRec.Data(), d0partpointzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 490 d0PartpointzRec->Sumw2();
491 d0PartpointzRec->SetMinimum(0);
492 fOutputpartPointRec->Add(d0PartpointzRec);
493
494 named0partpointrphiSkip = "d0partpointrphiSkip_";
b2d79ac3 495 named0partpointrphiSkip += i;
77e570bf 496 named0partpointzSkip = "d0partpointzSkip_";
b2d79ac3 497 named0partpointzSkip += i;
498 d0PartpointrphiSkip = new TH1F(named0partpointrphiSkip.Data(), d0partpointrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 499 d0PartpointrphiSkip->Sumw2();
500 d0PartpointrphiSkip->SetMinimum(0);
501 fOutputpartPointSkip->Add(d0PartpointrphiSkip);
b2d79ac3 502 d0PartpointzSkip = new TH1F(named0partpointzSkip.Data(), d0partpointzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 503 d0PartpointzSkip->Sumw2();
504 d0PartpointzSkip->SetMinimum(0);
505 fOutputpartPointSkip->Add(d0PartpointzSkip);
506
507 named0onepointSPDrphiRec = "d0onepointSPDrphiRec_";
b2d79ac3 508 named0onepointSPDrphiRec += i;
77e570bf 509 named0onepointSPDzRec = "d0onepointSPDzRec_";
b2d79ac3 510 named0onepointSPDzRec += i;
511 d0OnepointSPDrphiRec = new TH1F(named0onepointSPDrphiRec.Data(), d0onepointSPDrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 512 d0OnepointSPDrphiRec->Sumw2();
513 d0OnepointSPDrphiRec->SetMinimum(0);
514 fOutputonepointSPDRec->Add(d0OnepointSPDrphiRec);
b2d79ac3 515 d0OnepointSPDzRec = new TH1F(named0onepointSPDzRec.Data(), d0onepointSPDzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 516 d0OnepointSPDzRec->Sumw2();
517 d0OnepointSPDzRec->SetMinimum(0);
518 fOutputonepointSPDRec->Add(d0OnepointSPDzRec);
519
520 named0onepointSPDrphiSkip = "d0onepointSPDrphiSkip_";
b2d79ac3 521 named0onepointSPDrphiSkip += i;
77e570bf 522 named0onepointSPDzSkip = "d0onepointSPDzSkip_";
b2d79ac3 523 named0onepointSPDzSkip += i;
524 d0OnepointSPDrphiSkip = new TH1F(named0onepointSPDrphiSkip.Data(), d0onepointSPDrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 525 d0OnepointSPDrphiSkip->Sumw2();
526 d0OnepointSPDrphiSkip->SetMinimum(0);
527 fOutputonepointSPDSkip->Add(d0OnepointSPDrphiSkip);
b2d79ac3 528 d0OnepointSPDzSkip = new TH1F(named0onepointSPDzSkip.Data(), d0onepointSPDzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 529 d0OnepointSPDzSkip->Sumw2();
530 d0OnepointSPDzSkip->SetMinimum(0);
531 fOutputonepointSPDSkip->Add(d0OnepointSPDzSkip);
532
533 named0postvtracrphiRec = "d0postvtracrphiRec_";
b2d79ac3 534 named0postvtracrphiRec += i;
77e570bf 535 named0postvtraczRec = "d0postvtraczRec_";
b2d79ac3 536 named0postvtraczRec += i;
537 d0PostvtracrphiRec = new TH1F(named0postvtracrphiRec.Data(), d0postvtracrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 538 d0PostvtracrphiRec->Sumw2();
539 d0PostvtracrphiRec->SetMinimum(0);
540 fOutputpostvTracRec->Add(d0PostvtracrphiRec);
b2d79ac3 541 d0PostvtraczRec = new TH1F(named0postvtraczRec.Data(), d0postvtraczTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 542 d0PostvtraczRec->Sumw2();
543 d0PostvtraczRec->SetMinimum(0);
544 fOutputpostvTracRec->Add(d0PostvtraczRec);
545
546 named0postvtracrphiSkip = "d0postvtracrphiSkip_";
b2d79ac3 547 named0postvtracrphiSkip += i;
77e570bf 548 named0postvtraczSkip = "d0postvtraczSkip_";
b2d79ac3 549 named0postvtraczSkip += i;
550 d0PostvtracrphiSkip = new TH1F(named0postvtracrphiSkip.Data(), d0postvtracrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 551 d0PostvtracrphiSkip->Sumw2();
552 d0PostvtracrphiSkip->SetMinimum(0);
553 fOutputpostvTracSkip->Add(d0PostvtracrphiSkip);
b2d79ac3 554 d0PostvtraczSkip = new TH1F(named0postvtraczSkip.Data(), d0postvtraczTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 555 d0PostvtraczSkip->Sumw2();
556 d0PostvtraczSkip->SetMinimum(0);
557 fOutputpostvTracSkip->Add(d0PostvtraczSkip);
558
559 named0negtvtracrphiRec = "d0negtvtracrphiRec_";
b2d79ac3 560 named0negtvtracrphiRec += i;
77e570bf 561 named0negtvtraczRec = "d0negtvtraczRec_";
b2d79ac3 562 named0negtvtraczRec += i;
563 d0NegtvtracrphiRec = new TH1F(named0negtvtracrphiRec.Data(), d0negtvtracrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 564 d0NegtvtracrphiRec->Sumw2();
565 d0NegtvtracrphiRec->SetMinimum(0);
566 fOutputnegtvTracRec->Add(d0NegtvtracrphiRec);
b2d79ac3 567 d0NegtvtraczRec = new TH1F(named0negtvtraczRec.Data(), d0negtvtraczTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 568 d0NegtvtraczRec->Sumw2();
569 d0NegtvtraczRec->SetMinimum(0);
570 fOutputnegtvTracRec->Add(d0NegtvtraczRec);
571
572 named0negtvtracrphiSkip = "d0negtvtracrphiSkip_";
b2d79ac3 573 named0negtvtracrphiSkip += i;
77e570bf 574 named0negtvtraczSkip = "d0negtvtraczSkip_";
b2d79ac3 575 named0negtvtraczSkip += i;
576 d0NegtvtracrphiSkip = new TH1F(named0negtvtracrphiSkip.Data(), d0negtvtracrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 577 d0NegtvtracrphiSkip->Sumw2();
578 d0NegtvtracrphiSkip->SetMinimum(0);
579 fOutputnegtvTracSkip->Add(d0NegtvtracrphiSkip);
b2d79ac3 580 d0NegtvtraczSkip = new TH1F(named0negtvtraczSkip.Data(), d0negtvtraczTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
77e570bf 581 d0NegtvtraczSkip->Sumw2();
582 d0NegtvtraczSkip->SetMinimum(0);
583 fOutputnegtvTracSkip->Add(d0NegtvtraczSkip);
584
585 named0pullAllpointrphiSkip = "d0pullAllpointrphiSkip_";
b2d79ac3 586 named0pullAllpointrphiSkip +=i;
77e570bf 587 named0pullAllpointzSkip = "d0pullAllpointzSkip_";
b2d79ac3 588 named0pullAllpointzSkip +=i;
77e570bf 589 d0PullAllpointrphiSkip = new TH1F(named0pullAllpointrphiSkip.Data(),d0pullAllpointrphiTitle.Data(),400,-10.,10.);
590 d0PullAllpointrphiSkip->Sumw2();
591 d0PullAllpointrphiSkip->SetMinimum(0);
592 fOutputpullAllpointSkip->Add(d0PullAllpointrphiSkip);
593 d0PullAllpointzSkip = new TH1F(named0pullAllpointzSkip.Data(),d0pullAllpointzTitle.Data(),400,-10.,10.);
594 d0PullAllpointzSkip->Sumw2();
595 d0PullAllpointzSkip->SetMinimum(0);
596 fOutputpullAllpointSkip->Add(d0PullAllpointzSkip);
597
598 named0pullAllpointrphiRec = "d0pullAllpointrphiRec_";
b2d79ac3 599 named0pullAllpointrphiRec +=i;
77e570bf 600 named0pullAllpointzRec = "d0pullAllpointzRec_";
b2d79ac3 601 named0pullAllpointzRec +=i;
77e570bf 602 d0PullAllpointrphiRec = new TH1F(named0pullAllpointrphiRec.Data(),d0pullAllpointrphiTitle.Data(),400,-10.,10.);
603 d0PullAllpointrphiRec->Sumw2();
604 d0PullAllpointrphiRec->SetMinimum(0);
605 fOutputpullAllpointRec->Add(d0PullAllpointrphiRec);
606 d0PullAllpointzRec = new TH1F(named0pullAllpointzRec.Data(),d0pullAllpointzTitle.Data(),400,-10.,10.);
607 d0PullAllpointzRec->Sumw2();
608 d0PullAllpointzRec->SetMinimum(0);
609 fOutputpullAllpointRec->Add(d0PullAllpointzRec);
610
611
612 named0onlyRefitrphiRec = "d0onlyrefitrphiRec_";
b2d79ac3 613 named0onlyRefitrphiRec +=i;
77e570bf 614 named0onlyRefitzRec = "d0onlyrefitzRec_";
b2d79ac3 615 named0onlyRefitzRec +=i;
616 d0OnlyRefitrphiRec = new TH1F(named0onlyRefitrphiRec.Data(),d0onlyRefitrphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
77e570bf 617 d0OnlyRefitrphiRec->Sumw2();
618 d0OnlyRefitrphiRec->SetMinimum(0);
619 fOutputOnlyRefitRec->Add(d0OnlyRefitrphiRec);
b2d79ac3 620 d0OnlyRefitzRec = new TH1F(named0onlyRefitzRec.Data(),d0onlyRefitzTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
77e570bf 621 d0OnlyRefitzRec->Sumw2();
622 d0OnlyRefitzRec->SetMinimum(0);
623 fOutputOnlyRefitRec->Add(d0OnlyRefitzRec);
624
625
626 named0onlyRefitrphiSkip = "d0onlyrefitrphiSkip_";
b2d79ac3 627 named0onlyRefitrphiSkip +=i;
77e570bf 628 named0onlyRefitzSkip = "d0onlyrefitzSkip_";
b2d79ac3 629 named0onlyRefitzSkip +=i;
630 d0OnlyRefitrphiSkip = new TH1F(named0onlyRefitrphiSkip.Data(),d0onlyRefitrphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
77e570bf 631 d0OnlyRefitrphiSkip->Sumw2();
632 d0OnlyRefitrphiSkip->SetMinimum(0);
633 fOutputOnlyRefitSkip->Add(d0OnlyRefitrphiSkip);
b2d79ac3 634 d0OnlyRefitzSkip = new TH1F(named0onlyRefitzSkip.Data(),d0onlyRefitzTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
77e570bf 635 d0OnlyRefitzSkip->Sumw2();
636 d0OnlyRefitzSkip->SetMinimum(0);
637 fOutputOnlyRefitSkip->Add(d0OnlyRefitzSkip);
638
cbddc2a0 639 named0allpointrphiTrue = "d0allpointrphiTrue_";
640 named0allpointrphiTrue += i;
641 named0allpointzTrue = "d0allpointzTrue_";
642 named0allpointzTrue += i;
643 d0AllpointrphiTrue = new TH1F(named0allpointrphiTrue.Data(), d0allpointrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
644 d0AllpointrphiTrue->Sumw2();
645 d0AllpointrphiTrue->SetMinimum(0);
646 fOutputallPointTrue->Add(d0AllpointrphiTrue);
647 d0AllpointzTrue = new TH1F(named0allpointzTrue.Data(), d0allpointzTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
648 d0AllpointzTrue->Sumw2();
649 d0AllpointzTrue->SetMinimum(0);
650 fOutputallPointTrue->Add(d0AllpointzTrue);
651
652 named0postvtracrphiTrue = "d0postvtracrphiTrue_";
653 named0postvtracrphiTrue += i;
654 named0postvtraczTrue = "d0postvtraczTrue_";
655 named0postvtraczTrue += i;
656 d0PostvtracrphiTrue = new TH1F(named0postvtracrphiTrue.Data(), d0postvtracrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
657 d0PostvtracrphiTrue->Sumw2();
658 d0PostvtracrphiTrue->SetMinimum(0);
659 fOutputpostvTracTrue->Add(d0PostvtracrphiTrue);
660 d0PostvtraczTrue = new TH1F(named0postvtraczTrue.Data(), d0postvtraczTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
661 d0PostvtraczTrue->Sumw2();
662 d0PostvtraczTrue->SetMinimum(0);
663 fOutputpostvTracTrue->Add(d0PostvtraczTrue);
664
665 named0negtvtracrphiTrue = "d0negtvtracrphiTrue_";
666 named0negtvtracrphiTrue += i;
667 named0negtvtraczTrue = "d0negtvtraczTrue_";
668 named0negtvtraczTrue += i;
669 d0NegtvtracrphiTrue = new TH1F(named0negtvtracrphiTrue.Data(), d0negtvtracrphiTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
670 d0NegtvtracrphiTrue->Sumw2();
671 d0NegtvtracrphiTrue->SetMinimum(0);
672 fOutputnegtvTracTrue->Add(d0NegtvtracrphiTrue);
673 d0NegtvtraczTrue = new TH1F(named0negtvtraczTrue.Data(), d0negtvtraczTitle.Data(), 400, -Getd0HistRange(i), Getd0HistRange(i));
674 d0NegtvtraczTrue->Sumw2();
675 d0NegtvtraczTrue->SetMinimum(0);
676 fOutputnegtvTracTrue->Add(d0NegtvtraczTrue);
677
678 named0pullAllpointrphiTrue = "d0pullAllpointrphiTrue_";
679 named0pullAllpointrphiTrue +=i;
680 named0pullAllpointzTrue = "d0pullAllpointzTrue_";
681 named0pullAllpointzTrue +=i;
682 d0PullAllpointrphiTrue = new TH1F(named0pullAllpointrphiTrue.Data(),d0pullAllpointrphiTitle.Data(),400,-10.,10.);
683 d0PullAllpointrphiTrue->Sumw2();
684 d0PullAllpointrphiTrue->SetMinimum(0);
685 fOutputpullAllpointTrue->Add(d0PullAllpointrphiTrue);
686 d0PullAllpointzTrue = new TH1F(named0pullAllpointzTrue.Data(),d0pullAllpointzTitle.Data(),400,-10.,10.);
687 d0PullAllpointzTrue->Sumw2();
688 d0PullAllpointzTrue->SetMinimum(0);
689 fOutputpullAllpointTrue->Add(d0PullAllpointzTrue);
690
691 named0clusterTypeSPD01rphiSkip = "d0clustertypeSPD01rphiSkip_";
692 named0clusterTypeSPD01rphiSkip +=i;
693 named0clusterTypeSPD01zSkip = "d0clustertypeSPD01zSkip_";
694 named0clusterTypeSPD01zSkip +=i;
238eda67 695 d0ClustertypeSPD01rphiSkip = new TH1F(named0clusterTypeSPD01rphiSkip.Data(),d0clusterTypeSPD01rphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 696 d0ClustertypeSPD01rphiSkip->Sumw2();
697 d0ClustertypeSPD01rphiSkip->SetMinimum(0);
698 fOutputclusterTypeSPD01Skip->Add(d0ClustertypeSPD01rphiSkip);
238eda67 699 d0ClustertypeSPD01zSkip = new TH1F(named0clusterTypeSPD01zSkip.Data(),d0clusterTypeSPD01zTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 700 d0ClustertypeSPD01zSkip->Sumw2();
701 d0ClustertypeSPD01zSkip->SetMinimum(0);
702 fOutputclusterTypeSPD01Skip->Add(d0ClustertypeSPD01zSkip);
703
704 named0clusterTypeSPD02rphiSkip = "d0clustertypeSPD02rphiSkip_";
705 named0clusterTypeSPD02rphiSkip +=i;
706 named0clusterTypeSPD02zSkip = "d0clustertypeSPD02zSkip_";
707 named0clusterTypeSPD02zSkip +=i;
238eda67 708 d0ClustertypeSPD02rphiSkip = new TH1F(named0clusterTypeSPD02rphiSkip.Data(),d0clusterTypeSPD02rphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 709 d0ClustertypeSPD02rphiSkip->Sumw2();
710 d0ClustertypeSPD02rphiSkip->SetMinimum(0);
711 fOutputclusterTypeSPD02Skip->Add(d0ClustertypeSPD02rphiSkip);
238eda67 712 d0ClustertypeSPD02zSkip = new TH1F(named0clusterTypeSPD02zSkip.Data(),d0clusterTypeSPD02zTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 713 d0ClustertypeSPD02zSkip->Sumw2();
714 d0ClustertypeSPD02zSkip->SetMinimum(0);
715 fOutputclusterTypeSPD02Skip->Add(d0ClustertypeSPD02zSkip);
716
717 named0clusterTypeSPD03rphiSkip = "d0clustertypeSPD03rphiSkip_";
718 named0clusterTypeSPD03rphiSkip +=i;
719 named0clusterTypeSPD03zSkip = "d0clustertypeSPD03zSkip_";
720 named0clusterTypeSPD03zSkip +=i;
238eda67 721 d0ClustertypeSPD03rphiSkip = new TH1F(named0clusterTypeSPD03rphiSkip.Data(),d0clusterTypeSPD03rphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 722 d0ClustertypeSPD03rphiSkip->Sumw2();
723 d0ClustertypeSPD03rphiSkip->SetMinimum(0);
724 fOutputclusterTypeSPD03Skip->Add(d0ClustertypeSPD03rphiSkip);
238eda67 725 d0ClustertypeSPD03zSkip = new TH1F(named0clusterTypeSPD03zSkip.Data(),d0clusterTypeSPD03zTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 726 d0ClustertypeSPD03zSkip->Sumw2();
727 d0ClustertypeSPD03zSkip->SetMinimum(0);
728 fOutputclusterTypeSPD03Skip->Add(d0ClustertypeSPD03zSkip);
729
730 named0clusterTypeSPD11rphiSkip = "d0clustertypeSPD11rphiSkip_";
731 named0clusterTypeSPD11rphiSkip +=i;
732 named0clusterTypeSPD11zSkip = "d0clustertypeSPD11zSkip_";
733 named0clusterTypeSPD11zSkip +=i;
238eda67 734 d0ClustertypeSPD11rphiSkip = new TH1F(named0clusterTypeSPD11rphiSkip.Data(),d0clusterTypeSPD11rphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 735 d0ClustertypeSPD11rphiSkip->Sumw2();
736 d0ClustertypeSPD11rphiSkip->SetMinimum(0);
737 fOutputclusterTypeSPD11Skip->Add(d0ClustertypeSPD11rphiSkip);
238eda67 738 d0ClustertypeSPD11zSkip = new TH1F(named0clusterTypeSPD11zSkip.Data(),d0clusterTypeSPD11zTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 739 d0ClustertypeSPD11zSkip->Sumw2();
740 d0ClustertypeSPD11zSkip->SetMinimum(0);
741 fOutputclusterTypeSPD11Skip->Add(d0ClustertypeSPD11zSkip);
742
743 named0clusterTypeSPD12rphiSkip = "d0clustertypeSPD12rphiSkip_";
744 named0clusterTypeSPD12rphiSkip +=i;
745 named0clusterTypeSPD12zSkip = "d0clustertypeSPD12zSkip_";
746 named0clusterTypeSPD12zSkip +=i;
238eda67 747 d0ClustertypeSPD12rphiSkip = new TH1F(named0clusterTypeSPD12rphiSkip.Data(),d0clusterTypeSPD12rphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 748 d0ClustertypeSPD12rphiSkip->Sumw2();
749 d0ClustertypeSPD12rphiSkip->SetMinimum(0);
750 fOutputclusterTypeSPD12Skip->Add(d0ClustertypeSPD12rphiSkip);
238eda67 751 d0ClustertypeSPD12zSkip = new TH1F(named0clusterTypeSPD12zSkip.Data(),d0clusterTypeSPD12zTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 752 d0ClustertypeSPD12zSkip->Sumw2();
753 d0ClustertypeSPD12zSkip->SetMinimum(0);
754 fOutputclusterTypeSPD12Skip->Add(d0ClustertypeSPD12zSkip);
755
756 named0clusterTypeSPD13rphiSkip = "d0clustertypeSPD13rphiSkip_";
757 named0clusterTypeSPD13rphiSkip +=i;
758 named0clusterTypeSPD13zSkip = "d0clustertypeSPD13zSkip_";
759 named0clusterTypeSPD13zSkip +=i;
238eda67 760 d0ClustertypeSPD13rphiSkip = new TH1F(named0clusterTypeSPD13rphiSkip.Data(),d0clusterTypeSPD13rphiTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 761 d0ClustertypeSPD13rphiSkip->Sumw2();
762 d0ClustertypeSPD13rphiSkip->SetMinimum(0);
763 fOutputclusterTypeSPD13Skip->Add(d0ClustertypeSPD13rphiSkip);
238eda67 764 d0ClustertypeSPD13zSkip = new TH1F(named0clusterTypeSPD13zSkip.Data(),d0clusterTypeSPD13zTitle.Data(),400,-Getd0HistRange(i),Getd0HistRange(i));
cbddc2a0 765 d0ClustertypeSPD13zSkip->Sumw2();
766 d0ClustertypeSPD13zSkip->SetMinimum(0);
767 fOutputclusterTypeSPD13Skip->Add(d0ClustertypeSPD13zSkip);
768
77e570bf 769 named0pt = "d0pt_";
b2d79ac3 770 named0pt += i;
77e570bf 771 d0Pt = new TH1F(named0pt.Data(), d0ptTitle.Data(), 100, 0, 35.);
772 d0Pt->Sumw2();
773 d0Pt->SetMinimum(0);
774 fOutputPt->Add(d0Pt);
77e570bf 775 }
776
5a4911b5 777 if (!fOutputSinThetaRec){
778 fOutputSinThetaRec = new TList();
779 fOutputSinThetaRec->SetOwner();
780 fOutputSinThetaRec->SetName("thetaRec");
781 }
782
783 if (!fOutputSinThetaSkip){
784 fOutputSinThetaSkip = new TList();
785 fOutputSinThetaSkip->SetOwner();
786 fOutputSinThetaSkip->SetName("thetaSkip");
787 }
788
789 if (!fOutputphiAllpointSkip) {
790 fOutputphiAllpointSkip = new TList();
791 fOutputphiAllpointSkip->SetOwner();
792 fOutputphiAllpointSkip->SetName("phiallpointSkip");
793 }
794
795 if (!fOutputphiPostvtracSkip) {
796 fOutputphiPostvtracSkip = new TList();
797 fOutputphiPostvtracSkip->SetOwner();
798 fOutputphiPostvtracSkip->SetName("postvtracSkip");
799 }
800
801 if (!fOutputphiNegtvtracSkip) {
802 fOutputphiNegtvtracSkip = new TList();
803 fOutputphiNegtvtracSkip->SetOwner();
804 fOutputphiNegtvtracSkip->SetName("negtvtracSkip");
805 }
806
807
808 const TString d0sinThetarphiTitle ="d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
809 const TString d0sinThetazTitle ="d_{0} Distribution_z; d_{0} [#mum]; Entries";
810 const TString d0phiAllpointrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
811 const TString d0phiAllpointzTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
812 const TString d0phiPostvtracrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
813 const TString d0phiPostvtraczTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
814 const TString d0phiNegtvtracrphiTitle = "d_{0} Distribution_rphi; d_{0} [#mum]; Entries";
815 const TString d0phiNegtvtraczTitle = "d_{0} Distribution_z; d_{0} [#mum]; Entries";
816 TString named0sinThetaonerphiRec,named0sinThetaonezRec,named0sinThetatworphiRec,named0sinThetatwozRec,named0sinThetathreerphiRec,named0sinThetathreezRec,named0sinThetafourrphiRec,named0sinThetafourzRec;
817
818 TH1F *d0SinThetaonerphiRec,*d0SinThetaonezRec,*d0SinThetatworphiRec,*d0SinThetatwozRec,*d0SinThetathreerphiRec,*d0SinThetathreezRec,*d0SinThetafourrphiRec,*d0SinThetafourzRec;
819
820 TString named0sinThetaonerphiSkip,named0sinThetaonezSkip,named0sinThetatworphiSkip,named0sinThetatwozSkip,named0sinThetathreerphiSkip,named0sinThetathreezSkip,named0sinThetafourrphiSkip,named0sinThetafourzSkip,named0phiAllpointrphiSkip, named0phiAllpointzSkip,named0phiPostvtracrphiSkip, named0phiPostvtraczSkip,named0phiNegtvtracrphiSkip,named0phiNegtvtraczSkip;
821
822 TH1F*d0SinThetaonerphiSkip,*d0SinThetaonezSkip,*d0SinThetatworphiSkip,*d0SinThetatwozSkip,*d0SinThetathreerphiSkip,*d0SinThetathreezSkip,*d0SinThetafourrphiSkip,*d0SinThetafourzSkip, *d0PhiAllpointrphiSkip,*d0PhiAllpointzSkip,*d0PhiPostvtracrphiSkip,*d0PhiPostvtraczSkip,*d0PhiNegtvtracrphiSkip,*d0PhiNegtvtraczSkip;
823
b2d79ac3 824 const Int_t nhistm=10;
cbddc2a0 825 for(Int_t i=0; i<=nhistm; i++) {
cbddc2a0 826
cbddc2a0 827
b2d79ac3 828 named0sinThetaonerphiRec = "d0sinthetaonerphiRec_";
829 named0sinThetaonerphiRec += i;
830 named0sinThetaonezRec ="d0sinthetaonezRec_";
831 named0sinThetaonezRec += i;
832 d0SinThetaonerphiRec = new TH1F(named0sinThetaonerphiRec.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
833 d0SinThetaonerphiRec->Sumw2();
834 d0SinThetaonerphiRec->SetMinimum(0);
835 fOutputSinThetaRec->Add(d0SinThetaonerphiRec);
836 d0SinThetaonezRec = new TH1F(named0sinThetaonezRec.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
837 d0SinThetaonezRec->Sumw2();
838 d0SinThetaonezRec->SetMinimum(0);
839 fOutputSinThetaRec->Add(d0SinThetaonezRec);
840
841 named0sinThetatworphiRec = "d0sinthetatworphiRec_";
842 named0sinThetatworphiRec += i;
843 named0sinThetatwozRec ="d0sinthetatwozRec_";
844 named0sinThetatwozRec += i;
845 d0SinThetatworphiRec = new TH1F(named0sinThetatworphiRec.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
846 d0SinThetatworphiRec->Sumw2();
847 d0SinThetatworphiRec->SetMinimum(0);
848 fOutputSinThetaRec->Add(d0SinThetatworphiRec);
849 d0SinThetatwozRec = new TH1F(named0sinThetatwozRec.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
850 d0SinThetatwozRec->Sumw2();
851 d0SinThetatwozRec->SetMinimum(0);
852 fOutputSinThetaRec->Add(d0SinThetatwozRec);
853
854 named0sinThetathreerphiRec = "d0sinthetathreerphiRec_";
855 named0sinThetathreerphiRec += i;
856 named0sinThetathreezRec ="d0sinthetathreezRec_";
857 named0sinThetathreezRec += i;
858
859 d0SinThetathreerphiRec = new TH1F(named0sinThetathreerphiRec.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
860 d0SinThetathreerphiRec->Sumw2();
861 d0SinThetathreerphiRec->SetMinimum(0);
862 fOutputSinThetaRec->Add(d0SinThetathreerphiRec);
863 d0SinThetathreezRec = new TH1F(named0sinThetathreezRec.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
864 d0SinThetathreezRec->Sumw2();
865 d0SinThetathreezRec->SetMinimum(0);
866 fOutputSinThetaRec->Add(d0SinThetathreezRec);
867
868 named0sinThetafourrphiRec = "d0sinthetafourrphiRec_";
869 named0sinThetafourrphiRec += i;
870 named0sinThetafourzRec ="d0sinthetafourzRec_";
871 named0sinThetafourzRec += i;
872 d0SinThetafourrphiRec = new TH1F(named0sinThetafourrphiRec.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
873 d0SinThetafourrphiRec->Sumw2();
874 d0SinThetafourrphiRec->SetMinimum(0);
875 fOutputSinThetaRec->Add(d0SinThetafourrphiRec);
876 d0SinThetafourzRec = new TH1F(named0sinThetafourzRec.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
877 d0SinThetafourzRec->Sumw2();
878 d0SinThetafourzRec->SetMinimum(0);
879 fOutputSinThetaRec->Add(d0SinThetafourzRec);
880
881 named0sinThetaonerphiSkip = "d0sinthetaonerphiSkip_";
882 named0sinThetaonerphiSkip += i;
883 named0sinThetaonezSkip ="d0sinthetaonezSkip_";
884 named0sinThetaonezSkip += i;
885 d0SinThetaonerphiSkip = new TH1F(named0sinThetaonerphiSkip.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
886 d0SinThetaonerphiSkip->Sumw2();
887 d0SinThetaonerphiSkip->SetMinimum(0);
888 fOutputSinThetaSkip->Add(d0SinThetaonerphiSkip);
889 d0SinThetaonezSkip = new TH1F(named0sinThetaonezSkip.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
890 d0SinThetaonezSkip->Sumw2();
891 d0SinThetaonezSkip->SetMinimum(0);
892 fOutputSinThetaSkip->Add(d0SinThetaonezSkip);
893
894 named0sinThetatworphiSkip = "d0sinthetatworphiSkip_";
895 named0sinThetatworphiSkip += i;
896 named0sinThetatwozSkip ="d0sinthetatwozSkip_";
897 named0sinThetatwozSkip += i;
898 d0SinThetatworphiSkip = new TH1F(named0sinThetatworphiSkip.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
899 d0SinThetatworphiSkip->Sumw2();
900 d0SinThetatworphiSkip->SetMinimum(0);
901 fOutputSinThetaSkip->Add(d0SinThetatworphiSkip);
902 d0SinThetatwozSkip = new TH1F(named0sinThetatwozSkip.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
903 d0SinThetatwozSkip->Sumw2();
904 d0SinThetatwozSkip->SetMinimum(0);
905 fOutputSinThetaSkip->Add(d0SinThetatwozSkip);
906
907 named0sinThetathreerphiSkip = "d0sinthetathreerphiSkip_";
908 named0sinThetathreerphiSkip += i;
909 named0sinThetathreezSkip ="d0sinthetathreezSkip_";
910 named0sinThetathreezSkip += i;
911
912 d0SinThetathreerphiSkip = new TH1F(named0sinThetathreerphiSkip.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
913 d0SinThetathreerphiSkip->Sumw2();
914 d0SinThetathreerphiSkip->SetMinimum(0);
915 fOutputSinThetaSkip->Add(d0SinThetathreerphiSkip);
916 d0SinThetathreezSkip = new TH1F(named0sinThetathreezSkip.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
917 d0SinThetathreezSkip->Sumw2();
918 d0SinThetathreezSkip->SetMinimum(0);
919 fOutputSinThetaSkip->Add(d0SinThetathreezSkip);
920
921 named0sinThetafourrphiSkip = "d0sinthetafourrphiSkip_";
922 named0sinThetafourrphiSkip += i;
923 named0sinThetafourzSkip ="d0sinthetafourzSkip_";
924 named0sinThetafourzSkip += i;
925 d0SinThetafourrphiSkip = new TH1F(named0sinThetafourrphiSkip.Data(),d0sinThetarphiTitle.Data(),400,-2000,2000);
926 d0SinThetafourrphiSkip->Sumw2();
927 d0SinThetafourrphiSkip->SetMinimum(0);
928 fOutputSinThetaSkip->Add(d0SinThetafourrphiSkip);
929 d0SinThetafourzSkip = new TH1F(named0sinThetafourzSkip.Data(),d0sinThetazTitle.Data(),400,-2000,2000);
930 d0SinThetafourzSkip->Sumw2();
931 d0SinThetafourzSkip->SetMinimum(0);
932 fOutputSinThetaSkip->Add(d0SinThetafourzSkip);
5a4911b5 933 }
934
935 const Int_t nhistphi=20;
936 for(Int_t i=0; i<=nhistphi; i++) {
cbddc2a0 937
938 named0phiAllpointrphiSkip = "d0phiallpointrphiSkip_";
939 named0phiAllpointrphiSkip += i;
940 named0phiAllpointzSkip ="d0phiallpointzSkip_";
941 named0phiAllpointzSkip += i;
942 d0PhiAllpointrphiSkip = new TH1F(named0phiAllpointrphiSkip.Data(),d0phiAllpointrphiTitle.Data(),400,-2000,2000);
943 d0PhiAllpointrphiSkip->Sumw2();
944 d0PhiAllpointrphiSkip->SetMinimum(0);
945 fOutputphiAllpointSkip->Add(d0PhiAllpointrphiSkip);
946 d0PhiAllpointzSkip = new TH1F(named0phiAllpointzSkip.Data(),d0phiAllpointzTitle.Data(),400,-2000,2000);
947 d0PhiAllpointzSkip->Sumw2();
948 d0PhiAllpointzSkip->SetMinimum(0);
949 fOutputphiAllpointSkip->Add(d0PhiAllpointzSkip);
950
951
952 named0phiPostvtracrphiSkip = "d0phipostvtracrphiSkip_";
953 named0phiPostvtracrphiSkip += i;
954 named0phiPostvtraczSkip ="d0phipostvtraczSkip_";
955 named0phiPostvtraczSkip += i;
956 d0PhiPostvtracrphiSkip = new TH1F(named0phiPostvtracrphiSkip.Data(),d0phiPostvtracrphiTitle.Data(),400,-2000,2000);
957 d0PhiPostvtracrphiSkip->Sumw2();
958 d0PhiPostvtracrphiSkip->SetMinimum(0);
959 fOutputphiPostvtracSkip->Add(d0PhiPostvtracrphiSkip);
960 d0PhiPostvtraczSkip = new TH1F(named0phiPostvtraczSkip.Data(),d0phiPostvtraczTitle.Data(),400,-2000,2000);
961 d0PhiPostvtraczSkip->Sumw2();
962 d0PhiPostvtraczSkip->SetMinimum(0);
963 fOutputphiPostvtracSkip->Add(d0PhiPostvtraczSkip);
964
965
966 named0phiNegtvtracrphiSkip = "d0phinegtvtracrphiSkip_";
967 named0phiNegtvtracrphiSkip += i;
968 named0phiNegtvtraczSkip ="d0phinegtvtraczSkip_";
969 named0phiNegtvtraczSkip += i;
970 d0PhiNegtvtracrphiSkip = new TH1F(named0phiNegtvtracrphiSkip.Data(),d0phiNegtvtracrphiTitle.Data(),400,-2000,2000);
971 d0PhiNegtvtracrphiSkip->Sumw2();
972 d0PhiNegtvtracrphiSkip->SetMinimum(0);
973 fOutputphiNegtvtracSkip->Add(d0PhiNegtvtracrphiSkip);
974 d0PhiNegtvtraczSkip = new TH1F(named0phiNegtvtraczSkip.Data(),d0phiNegtvtraczTitle.Data(),400,-2000,2000);
975 d0PhiNegtvtraczSkip->Sumw2();
976 d0PhiNegtvtraczSkip->SetMinimum(0);
977 fOutputphiNegtvtracSkip->Add(d0PhiNegtvtraczSkip);
b2d79ac3 978 }
979
77e570bf 980 if(!fNentries) fNentries = new TH1F("hNentries", "number of entries", 26, 0., 40.);
981 if(!fEstimVtx) fEstimVtx = new TH1F("vtxRes","Resolution of vertex",400,-1000.,1000);
77e570bf 982 return;
983}
984
985//________________________________________________________________________
986void AliAnalysisTaskSEImpParRes::UserExec(Option_t */*option*/)
987{
988 //
989 // Track selection and filling of d0 histograms
990 //
991 AliESDEvent *esd = dynamic_cast<AliESDEvent*>(InputEvent());
992 if (!esd) {
993 AliError("ESD event not found. Nothing done!");
994 return;
995 }
996
997 Float_t diamondcovxy[3];
998 esd->GetDiamondCovXY(diamondcovxy);
999 Double_t pos[3]={esd->GetDiamondX(),esd->GetDiamondY(),0.};
a979993d 1000 //diamondcovxy[0]=0.05*0.05;
1001 //diamondcovxy[2]=0.05*0.05;
77e570bf 1002 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.};
1003 AliESDVertex *diamond = new AliESDVertex(pos,cov,1.,1);
1004
1005 AliVertexerTracks *vertexer0 = new AliVertexerTracks(esd->GetMagneticField());
1006 vertexer0->SetITSMode();
1007 vertexer0->SetMinClusters(4);
a979993d 1008 if(fUseDiamond) vertexer0->SetVtxStart(diamond);
77e570bf 1009 AliESDVertex *vtxESDRec = (AliESDVertex*)vertexer0->FindPrimaryVertex(esd);
1010 delete vertexer0; vertexer0=0;
1011 if(vtxESDRec->GetNContributors()<1) return;
1012
cbddc2a0 1013 AliStack *stack=0;
1014 AliESDVertex *vtxESDTrue=0;
1015 if (fReadMC) {
77e570bf 1016 AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1017 if (!eventHandler) {
1018 Printf("ERROR: Could not retrieve MC event handler");
1019 return;
1020 }
1021
1022 AliMCEvent* mcEvent = eventHandler->MCEvent();
1023 if (!mcEvent) {
1024 Printf("ERROR: Could not retrieve MC event");
1025 return;
1026 }
1027
1028 stack = mcEvent->Stack();
1029 if (!stack) {
1030 AliDebug(AliLog::kError, "Stack not available");
1031 return;
1032 }
77e570bf 1033
cbddc2a0 1034 //load MC header for ESD;//see $ALICE_ROOT/PWG1/global/AliAnalysisTaskSEVertexESD.cxx
1035 AliHeader *mcHeader = eventHandler->MCEvent()->Header();
1036 if (!mcHeader) {
1037 AliDebug(AliLog::kError, "Header not available");
1038 return;
1039 }
1040
1041 AliGenEventHeader* genHeader = mcHeader->GenEventHeader();
1042 Double_t vtxTrue[3];
1043 TArrayF mcVertex(3);
1044 mcVertex[0]=9999.; mcVertex[1]=9999.; mcVertex[2]=9999.;
1045 genHeader->PrimaryVertex(mcVertex);
1046 vtxTrue[0]=mcVertex[0];vtxTrue[1]=mcVertex[1];vtxTrue[2]=mcVertex[2];
1047 Double_t sigmaTrue[3]={0., 0., 0.,};
1048 //mcHeader->GetVertex(vtxTrue);//note the vtxTrue is void here,so must need the next line.
1049 //AliESDVertex *vtxESDTrue = new AliESDVertex(vtxTrue,sigmaTrue);
1050 vtxESDTrue = new AliESDVertex(vtxTrue,sigmaTrue);
1051 }
1052
77e570bf 1053 Int_t nTrks = esd->GetNumberOfTracks();
1054 for (Int_t it=0; it<nTrks; it++) { // loop over tracks
1055 // read track
1056 AliESDtrack *esdtrack = esd->GetTrack(it);
1057
1058 // ask for ITS refit
1059 if (!(esdtrack->GetStatus()&AliESDtrack::kITSrefit)) {
1060 continue;
1061 }
1062
1063 Int_t pdgCode=0;
1064 if(fReadMC && stack) {
1065 Int_t trkLabel = esdtrack->GetLabel();
1066 //Int_t trkLabel = TMath::Abs(esdtrack->GetLabel());
1067 if(trkLabel<0) continue;
1068 TParticle *part = (TParticle*)stack->Particle(trkLabel);
1069 pdgCode = TMath::Abs(part->GetPdgCode());
1070 //printf("pdgCode===%d\n", pdgCode);
1071 if(fSelectedPdg>0 && pdgCode!=fSelectedPdg) continue;
1072 }
1073
1074
1075 Int_t npointsITS=0,npointsSPD=0;
1076 for (Int_t i=0;i<6;i++){
1077 if (i<2 && esdtrack->HasPointOnITSLayer(i)) npointsSPD +=1;
1078 if (esdtrack->HasPointOnITSLayer(i)) npointsITS +=1;
1079 }
1080
1081 //Get specific primary vertex--Reconstructed primary vertex do not include the track considering.
1082 AliVertexerTracks *vertexer = new AliVertexerTracks(esd->GetMagneticField());
1083 vertexer->SetITSMode();
1084 vertexer->SetMinClusters(4);
a979993d 1085 if(fUseDiamond) vertexer->SetVtxStart(diamond);
77e570bf 1086 Int_t skipped[2];
1087 skipped[0] = (Int_t)esdtrack->GetID();
1088 vertexer->SetSkipTracks(1,skipped);
1089 AliESDVertex *vtxESDSkip = (AliESDVertex*)vertexer->FindPrimaryVertex(esd);
1090 delete vertexer; vertexer=NULL;
1091 if(vtxESDSkip->GetNContributors()<1) continue;
1092
1093
cbddc2a0 1094 Double_t dzRec[2], covdzRec[3], dzRecSkip[2], covdzRecSkip[3],dzTrue[2], covdzTrue[3];
77e570bf 1095 Double_t beampiperadius=3.;
1096 Double_t pt= esdtrack->Pt();
1097 Int_t bin = PtBin(pt);
1098
1099 if(bin==-1) {
1100 delete vtxESDSkip; vtxESDSkip = 0x0;
1101 continue;
1102 }
1103
77e570bf 1104 esdtrack->PropagateToDCA(vtxESDRec, esd->GetMagneticField(), beampiperadius, dzRec, covdzRec);
1105 esdtrack->PropagateToDCA(vtxESDSkip, esd->GetMagneticField(), beampiperadius, dzRecSkip, covdzRecSkip);
cbddc2a0 1106 if(fReadMC) esdtrack->PropagateToDCA(vtxESDTrue, esd->GetMagneticField(), beampiperadius, dzTrue, covdzTrue);
238eda67 1107 if(covdzRec[0]<1.e-13 || covdzRec[2]<1.e-13 || covdzRecSkip[0]<1.e-13 || covdzRecSkip[2]<1.e-13) {
1108 delete vtxESDSkip; vtxESDSkip = 0x0;
1109 continue;
1110 }
1111 if(fReadMC && (covdzTrue[0]<1.e-13 || covdzTrue[2]<1.e-13)) {
77e570bf 1112 delete vtxESDSkip; vtxESDSkip = 0x0;
1113 continue;
1114 }
1115
1116 //printf("Pt: %f GeV/c; Impact parameter: rphi %f cm z %f cm\n", pt, dzRec[0], dzRec[1]);
1117
1118 /*
1119 // RUBEN'S METHOD, NOT FULLY IMPLEMENTED YET
1120 Double_t fIPCenIni[3], xyzDCA[3];
1121 for (int i=3;i--;) fIPCenIni[i] = 0.;
1122 //Int_t nTracks = nTrks - 1;
1123 esdtrack->GetXYZ(xyzDCA);
1124 //double pTrack = esdtrack->GetP();
1125 double phiTrack = esdtrack->Phi();
1126 double cs = TMath::Cos(phiTrack);
1127 double sn = TMath::Sin(phiTrack);
1128 double trDCA = (xyzDCA[0]-fIPCenIni[0]) *sn - (xyzDCA[1]-fIPCenIni[1]) *cs; // track signed DCA to origin
1129 double vtDCA = (vtxESDSkip->GetXv()-fIPCenIni[0])*sn - (vtxESDSkip->GetYv()-fIPCenIni[1])*cs; // vertex signed DCA to origin
1130
1131 // update the estimator values
1132 //double estIP = rvD*rtD;
1133 double estVtx = vtDCA*( vtDCA- trDCA);
1134 //double estTrc = rtD*(rtD - rvD);
1135 //
1136 //if (nTracks >= fMinTracksForIP) fEstimIP->Fill(phiTrack, estIP);
1137 fEstimVtx->Fill(10000*estVtx);
1138 //if (pTrack<1e-6) pTrack = GetTrackMinP()+1e6;
1139 //fEstimTrc->Fill(1./pTrack,estTrc);
1140 */
1141
1142
1143 //fill the histgram with all particle
1144 //-------------------------------------------1----------------------------------------------
1145
1146 /*
1147 TString named0AllrphiRec=" ",named0AllzRec =" ";//named0AllrphiTrue=" ",named0AllzTrue =" ";
1148 //named0AllrphiSkip=" ",named0AllzSkip =" ";
1149
1150 named0AllrphiRec ="d0allrphiRec_";
1151 named0AllrphiRec += bin;
1152 named0AllzRec = "d0allzRec_";
1153 named0AllzRec += bin;
1154 ((TH1F*)(fOutputallRec->FindObject(named0AllrphiRec)))->Fill(10000*dzRec[0]);
1155 ((TH1F*)(fOutputallRec->FindObject(named0AllzRec)))->Fill(10000*dzRec[1]);
1156 */
1157
1158 //-------------------------------------------2----------------------------------------------
1159 //TSting named0AllrphiRec = "d0allrphiRec_" + bin;
1160 //TSting named0AllzRec = "d0allzRec_" + bin;
1161 //((TH1F*)(fOutputallRec->FindObject(named0AllrphiRec.Data())))->Fill(10000.*dzRec[0]);
1162 //((TH1F*)(fOutputallRec->FindObject(named0AllzRec.Data())))->Fill(10000.*dzRec[1]);
1163
1164 //-------------------------------------------3------------------------------------------------
1165
1166
1167 // ITS standalone
1168 if (!(esdtrack->GetStatus()&AliESDtrack::kTPCrefit) && (esdtrack->GetStatus()&AliESDtrack::kITSpureSA)
1169 && npointsSPD>0 && npointsITS>=4) {
1170 char *named0ITSpureSArphiRec = Form("d0itspureSArphiRec_%d", bin);
1171 char *named0ITSpureSArphiSkip = Form("d0itspureSArphiSkip_%d", bin);
1172 char *named0ITSpureSAzRec = Form("d0itspureSAzRec_%d", bin);
1173 char *named0ITSpureSAzSkip = Form("d0itspureSAzSkip_%d", bin);
1174 ((TH1F*)(fOutputitspureSARec->FindObject(named0ITSpureSArphiRec)))->Fill(10000.*dzRec[0]);
1175 ((TH1F*)(fOutputitspureSARec->FindObject(named0ITSpureSAzRec)))->Fill(10000.*dzRec[1]);
1176 ((TH1F*)(fOutputitspureSASkip->FindObject(named0ITSpureSArphiSkip)))->Fill(10000.*dzRecSkip[0]);
1177 ((TH1F*)(fOutputitspureSASkip->FindObject(named0ITSpureSAzSkip)))->Fill(10000.*dzRecSkip[1]);
1178 }
1179
1180
1181 // ask for TPC refit
1182 if (!(esdtrack->GetStatus()&AliESDtrack::kTPCrefit) || esdtrack->GetNcls(1)<70) {
1183 delete vtxESDSkip; vtxESDSkip = 0x0;
1184 continue;
1185 }
1186
1187 // only ITS and TPC refit
1188 char *named0OnlyrefitrphiRec = Form("d0onlyrefitrphiRec_%d", bin);
1189 char *named0OnlyrefitrphiSkip = Form("d0onlyrefitrphiSkip_%d", bin);
1190 char *named0OnlyrefitzRec = Form("d0onlyrefitzRec_%d", bin);
1191 char *named0OnlyrefitzSkip = Form("d0onlyrefitzSkip_%d", bin);
1192 ((TH1F*)(fOutputOnlyRefitRec->FindObject(named0OnlyrefitrphiRec)))->Fill(10000.*dzRec[0]);
1193 ((TH1F*)(fOutputOnlyRefitRec->FindObject(named0OnlyrefitzRec)))->Fill(10000.*dzRec[1]);
1194 ((TH1F*)(fOutputOnlyRefitSkip->FindObject(named0OnlyrefitrphiSkip)))->Fill(10000.*dzRecSkip[0]);
1195 ((TH1F*)(fOutputOnlyRefitSkip->FindObject(named0OnlyrefitzSkip)))->Fill(10000.*dzRecSkip[1]);
77e570bf 1196
cbddc2a0 1197
77e570bf 1198 if(npointsITS>=4 && npointsSPD>0) {
1199 char *named0PartpointrphiRec = Form("d0partpointrphiRec_%d", bin);
1200 char *named0PartpointrphiSkip = Form("d0partpointrphiSkip_%d", bin);
1201 char *named0PartpointzRec = Form("d0partpointzRec_%d", bin);
1202 char *named0PartpointzSkip = Form("d0partpointzSkip_%d", bin);
1203 ((TH1F*)(fOutputpartPointRec->FindObject(named0PartpointrphiRec)))->Fill(10000.*dzRec[0]);
1204 ((TH1F*)(fOutputpartPointRec->FindObject(named0PartpointzRec)))->Fill(10000.*dzRec[1]);
1205 ((TH1F*)(fOutputpartPointSkip->FindObject(named0PartpointrphiSkip)))->Fill(10000.*dzRecSkip[0]);
1206 ((TH1F*)(fOutputpartPointSkip->FindObject(named0PartpointzSkip)))->Fill(10000.*dzRecSkip[1]);
1207 }
1208
1209 if(npointsSPD>0) {
1210 char *named0OnepointSPDrphiRec = Form("d0onepointSPDrphiRec_%d", bin);
1211 char *named0OnepointSPDrphiSkip = Form("d0onepointSPDrphiSkip_%d", bin);
1212 char *named0OnepointSPDzRec = Form("d0onepointSPDzRec_%d", bin);
1213 char *named0OnepointSPDzSkip = Form("d0onepointSPDzSkip_%d", bin);
1214 ((TH1F*)(fOutputonepointSPDRec->FindObject(named0OnepointSPDrphiRec)))->Fill(10000.*dzRec[0]);
1215 ((TH1F*)(fOutputonepointSPDRec->FindObject(named0OnepointSPDzRec)))->Fill(10000.*dzRec[1]);
1216 ((TH1F*)(fOutputonepointSPDSkip->FindObject(named0OnepointSPDrphiSkip)))->Fill(10000.*dzRecSkip[0]);
1217 ((TH1F*)(fOutputonepointSPDSkip->FindObject(named0OnepointSPDzSkip)))->Fill(10000.*dzRecSkip[1]);
1218 }
1219
cbddc2a0 1220 // with 6 ITS points (including different selection)
238eda67 1221 printf("npointsITS %d\n",npointsITS);
cbddc2a0 1222 if(npointsITS==6) {
b2d79ac3 1223
238eda67 1224 printf("HERE\n");
cbddc2a0 1225 //pt
1226 char *named0Pt = Form("d0pt_%d",bin);
1227 ((TH1F*)(fOutputPt->FindObject(named0Pt)))->Fill(pt);
b2d79ac3 1228
cbddc2a0 1229 // allpoint
1230 char *named0AllpointrphiRec = Form("d0allpointrphiRec_%d", bin);
1231 char *named0AllpointrphiSkip = Form("d0allpointrphiSkip_%d", bin);
1232 char *named0AllpointrphiTrue = Form("d0allpointrphiTrue_%d", bin);
1233 char *named0AllpointzRec = Form("d0allpointzRec_%d", bin);
1234 char *named0AllpointzSkip = Form("d0allpointzSkip_%d", bin);
1235 char *named0AllpointzTrue = Form("d0allpointzTrue_%d", bin);
1236 ((TH1F*)(fOutputallPointRec->FindObject(named0AllpointrphiRec)))->Fill(10000.*dzRec[0]);
1237 ((TH1F*)(fOutputallPointRec->FindObject(named0AllpointzRec)))->Fill(10000.*dzRec[1]);
1238 ((TH1F*)(fOutputallPointSkip->FindObject(named0AllpointrphiSkip)))->Fill(10000.*dzRecSkip[0]);
1239 ((TH1F*)(fOutputallPointSkip->FindObject(named0AllpointzSkip)))->Fill(10000.*dzRecSkip[1]);
cde71236 1240 if(fReadMC) {
1241 ((TH1F*)(fOutputallPointTrue->FindObject(named0AllpointrphiTrue)))->Fill(10000.*dzTrue[0]);
1242 ((TH1F*)(fOutputallPointTrue->FindObject(named0AllpointzTrue)))->Fill(10000.*dzTrue[1]);
1243 }
1244
cbddc2a0 1245 // pulls
1246 char *named0PullAllpointrphiRec = Form("d0pullAllpointrphiRec_%d", bin);
1247 char *named0PullAllpointrphiSkip = Form("d0pullAllpointrphiSkip_%d", bin);
1248 char *named0PullAllpointrphiTrue = Form("d0pullAllpointrphiTrue_%d", bin);
1249 char *named0PullAllpointzRec = Form("d0pullAllpointzRec_%d", bin);
1250 char *named0PullAllpointzSkip = Form("d0pullAllpointzSkip_%d", bin);
1251 char *named0PullAllpointzTrue = Form("d0pullAllpointzTrue_%d", bin);
1252 ((TH1F*)(fOutputpullAllpointRec->FindObject(named0PullAllpointrphiRec)))->Fill(dzRec[0]/TMath::Sqrt(covdzRec[0]));
1253 ((TH1F*)(fOutputpullAllpointRec->FindObject(named0PullAllpointzRec)))->Fill(dzRec[1]/TMath::Sqrt(covdzRec[2]));
1254 ((TH1F*)(fOutputpullAllpointSkip->FindObject(named0PullAllpointrphiSkip)))->Fill(dzRecSkip[0]/TMath::Sqrt(covdzRecSkip[0]));
1255 ((TH1F*)(fOutputpullAllpointSkip->FindObject(named0PullAllpointzSkip)))->Fill(dzRecSkip[1]/TMath::Sqrt(covdzRecSkip[2]));
cde71236 1256 if(fReadMC) {
1257 ((TH1F*)(fOutputpullAllpointTrue->FindObject(named0PullAllpointrphiTrue)))->Fill(dzTrue[0]/TMath::Sqrt(covdzTrue[0]));
1258 ((TH1F*)(fOutputpullAllpointTrue->FindObject(named0PullAllpointzTrue)))->Fill(dzTrue[1]/TMath::Sqrt(covdzTrue[2]));
1259 }
cbddc2a0 1260 //postive and negative track
1261 Short_t charge=esdtrack->Charge();
1262 if(charge==1 ) {
1263 char *named0PostvtracrphiRec = Form("d0postvtracrphiRec_%d", bin);
1264 char *named0PostvtracrphiSkip = Form("d0postvtracrphiSkip_%d", bin);
1265 char *named0PostvtracrphiTrue = Form("d0postvtracrphiTrue_%d", bin);
1266 char *named0PostvtraczRec = Form("d0postvtraczRec_%d", bin);
1267 char *named0PostvtraczSkip = Form("d0postvtraczSkip_%d", bin);
1268 char *named0PostvtraczTrue = Form("d0postvtraczTrue_%d", bin);
1269 ((TH1F*)(fOutputpostvTracRec->FindObject(named0PostvtracrphiRec)))->Fill(10000.*dzRec[0]);
1270 ((TH1F*)(fOutputpostvTracRec->FindObject(named0PostvtraczRec)))->Fill(10000.*dzRec[1]);
1271 ((TH1F*)(fOutputpostvTracSkip->FindObject(named0PostvtracrphiSkip)))->Fill(10000.*dzRecSkip[0]);
1272 ((TH1F*)(fOutputpostvTracSkip->FindObject(named0PostvtraczSkip)))->Fill(10000.*dzRecSkip[1]);
cde71236 1273 if(fReadMC) {
1274 ((TH1F*)(fOutputpostvTracTrue->FindObject(named0PostvtracrphiTrue)))->Fill(10000.*dzTrue[0]);
1275 ((TH1F*)(fOutputpostvTracTrue->FindObject(named0PostvtraczTrue)))->Fill(10000.*dzTrue[1]);
1276 }
cbddc2a0 1277 }
1278
1279 if(charge==-1 ) {
1280 char *named0NegtvtracrphiRec = Form("d0negtvtracrphiRec_%d", bin);
1281 char *named0NegtvtracrphiSkip = Form("d0negtvtracrphiSkip_%d", bin);
1282 char *named0NegtvtracrphiTrue = Form("d0negtvtracrphiTrue_%d", bin);
1283 char *named0NegtvtraczRec = Form("d0negtvtraczRec_%d", bin);
1284 char *named0NegtvtraczSkip = Form("d0negtvtraczSkip_%d", bin);
1285 char *named0NegtvtraczTrue = Form("d0negtvtraczTrue_%d", bin);
1286 ((TH1F*)(fOutputnegtvTracRec->FindObject(named0NegtvtracrphiRec)))->Fill(10000.*dzRec[0]);
1287 ((TH1F*)(fOutputnegtvTracRec->FindObject(named0NegtvtraczRec)))->Fill(10000.*dzRec[1]);
1288 ((TH1F*)(fOutputnegtvTracSkip->FindObject(named0NegtvtracrphiSkip)))->Fill(10000.*dzRecSkip[0]);
1289 ((TH1F*)(fOutputnegtvTracSkip->FindObject(named0NegtvtraczSkip)))->Fill(10000.*dzRecSkip[1]);
cde71236 1290 if(fReadMC) {
1291 ((TH1F*)(fOutputnegtvTracTrue->FindObject(named0NegtvtracrphiTrue)))->Fill(10000.*dzTrue[0]);
1292 ((TH1F*)(fOutputnegtvTracTrue->FindObject(named0NegtvtraczTrue)))->Fill(10000.*dzTrue[1]);
1293 }
1294 }
cbddc2a0 1295
1296 // SinTheta
1297 Double_t theta=esdtrack->Theta();
1298 Double_t Sintheta=TMath::Sin(theta);
1299 Int_t thetabin = SinThetaBin(Sintheta);
1300 if(thetabin<0) {delete vtxESDSkip;continue;}
1301
1302 if(bin==1) {
1303 char *named0SinthetaonerphiRec = Form("d0sinthetaonerphiRec_%d", thetabin);
1304 char *named0SinthetaonezRec = Form("d0sinthetaonezRec_%d", thetabin);
1305 char *named0SinthetaonerphiSkip = Form("d0sinthetaonerphiSkip_%d", thetabin);
1306 char *named0SinthetaonezSkip = Form("d0sinthetaonezSkip_%d", thetabin);
1307 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetaonerphiRec)))->Fill(10000*dzRec[0]);
1308 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetaonezRec)))->Fill(10000*dzRec[1]);
1309 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetaonerphiSkip)))->Fill(10000*dzRecSkip[0]);
1310 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetaonezSkip)))->Fill(10000*dzRecSkip[1]);
1311 }
1312
1313 if(bin==5) {
1314 char *named0SinthetatworphiRec = Form("d0sinthetatworphiRec_%d", thetabin);
1315 char *named0SinthetatwozRec = Form("d0sinthetatwozRec_%d", thetabin);
1316 char *named0SinthetatworphiSkip = Form("d0sinthetatworphiSkip_%d", thetabin);
1317 char *named0SinthetatwozSkip = Form("d0sinthetatwozSkip_%d", thetabin);
1318 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetatworphiRec)))->Fill(10000*dzRec[0]);
1319 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetatwozRec)))->Fill(10000*dzRec[1]);
1320 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetatworphiSkip)))->Fill(10000*dzRecSkip[0]);
1321 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetatwozSkip)))->Fill(10000*dzRecSkip[1]);
1322 }
1323
1324 if(bin==10) {
1325 char *named0SinthetathreerphiRec = Form("d0sinthetathreerphiRec_%d", thetabin);
1326 char *named0SinthetathreezRec = Form("d0sinthetathreezRec_%d", thetabin);
1327 char *named0SinthetathreerphiSkip = Form("d0sinthetathreerphiSkip_%d", thetabin);
1328 char *named0SinthetathreezSkip = Form("d0sinthetathreezSkip_%d", thetabin);
1329 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetathreerphiRec)))->Fill(10000*dzRec[0]);
1330 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetathreezRec)))->Fill(10000*dzRec[1]);
1331 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetathreerphiSkip)))->Fill(10000*dzRecSkip[0]);
1332 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetathreezSkip)))->Fill(10000*dzRecSkip[1]);
1333 }
1334
1335 if(bin==15) {
1336 char *named0SinthetafourrphiRec = Form("d0sinthetafourrphiRec_%d", thetabin);
1337 char *named0SinthetafourzRec = Form("d0sinthetafourzRec_%d", thetabin);
1338 char *named0SinthetafourrphiSkip = Form("d0sinthetafourrphiSkip_%d", thetabin);
1339 char *named0SinthetafourzSkip = Form("d0sinthetafourzSkip_%d", thetabin);
1340 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetafourrphiRec)))->Fill(10000*dzRec[0]);
1341 ((TH1F*)(fOutputSinThetaRec->FindObject(named0SinthetafourzRec)))->Fill(10000*dzRec[1]);
1342 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetafourrphiSkip)))->Fill(10000*dzRecSkip[0]);
1343 ((TH1F*)(fOutputSinThetaSkip->FindObject(named0SinthetafourzSkip)))->Fill(10000*dzRecSkip[1]);
1344 }
1345
1346 //Phi
1347 Double_t phi=esdtrack->Phi();
1348 //Double_t pi=TMath::Pi();
1349 Int_t phibin=PhiBin(phi);
1350 if(phibin<0) {delete vtxESDSkip;continue;}
0f607695 1351 if(pt>0.34 && pt<0.5){
cbddc2a0 1352 char *named0PhiallpointrphiSkip =Form("d0phiallpointrphiSkip_%d",phibin);
1353 char *named0PhiallpointzSkip = Form("d0phiallpointzSkip_%d",phibin);
1354 char *named0PhipostvtracrphiSkip =Form("d0phipostvtracrphiSkip_%d",phibin);
1355 char *named0PhipostvtraczSkip = Form("d0phipostvtraczSkip_%d",phibin);
1356 char *named0PhinegtvtracrphiSkip =Form("d0phinegtvtracrphiSkip_%d",phibin);
1357 char *named0PhinegtvtraczSkip = Form("d0phinegtvtraczSkip_%d",phibin);
1358 ((TH1F*)(fOutputphiAllpointSkip->FindObject(named0PhiallpointrphiSkip)))->Fill(10000*dzRecSkip[0]);
1359 ((TH1F*)(fOutputphiAllpointSkip->FindObject(named0PhiallpointzSkip)))->Fill(10000*dzRecSkip[1]);
238eda67 1360 if(charge==+1) {
1361 ((TH1F*)(fOutputphiPostvtracSkip->FindObject(named0PhipostvtracrphiSkip)))->Fill(10000*dzRecSkip[0]);
1362 ((TH1F*)(fOutputphiPostvtracSkip->FindObject(named0PhipostvtraczSkip)))->Fill(10000*dzRecSkip[1]);
1363 }
1364 if(charge==-1) {
1365 ((TH1F*)(fOutputphiNegtvtracSkip->FindObject(named0PhinegtvtracrphiSkip)))->Fill(10000*dzRecSkip[0]);
1366 ((TH1F*)(fOutputphiNegtvtracSkip->FindObject(named0PhinegtvtraczSkip)))->Fill(10000*dzRecSkip[1]);
1367 }
cbddc2a0 1368 }
1369
1370 //cluster type
1371 Int_t ctypeSPD0 = ClusterTypeOnITSLayer(esdtrack,0);
1372 if(ctypeSPD0==-1) {delete vtxESDSkip;continue;}
1373 Int_t ctypeSPD1 = ClusterTypeOnITSLayer(esdtrack,1);
1374 if(ctypeSPD1==-1) {delete vtxESDSkip;continue;}
1375
1376 if(ctypeSPD0==1) {
1377 char *named0ClustertypeSPD01rphiSkip = Form("d0clustertypeSPD01rphiSkip_%d",phibin);
1378 char *named0ClustertypeSPD01zSkip = Form("d0clustertypeSPD01rphiSkip_%d",phibin);
1379 ((TH1F*)(fOutputclusterTypeSPD01Skip->FindObject(named0ClustertypeSPD01rphiSkip)))->Fill(10000*dzRecSkip[0]);
1380 ((TH1F*)(fOutputclusterTypeSPD01Skip->FindObject(named0ClustertypeSPD01zSkip)))->Fill(10000*dzRecSkip[1]);
1381 }
1382
1383 if(ctypeSPD0==2) {
1384 char *named0ClustertypeSPD02rphiSkip = Form("d0clustertypeSPD02rphiSkip_%d",phibin);
1385 char *named0ClustertypeSPD02zSkip = Form("d0clustertypeSPD02rphiSkip_%d",phibin);
1386 ((TH1F*)(fOutputclusterTypeSPD02Skip->FindObject(named0ClustertypeSPD02rphiSkip)))->Fill(10000*dzRecSkip[0]);
1387 ((TH1F*)(fOutputclusterTypeSPD02Skip->FindObject(named0ClustertypeSPD02zSkip)))->Fill(10000*dzRecSkip[1]);
1388 }
1389
1390 if(ctypeSPD0==3) {
1391 char *named0ClustertypeSPD03rphiSkip = Form("d0clustertypeSPD03rphiSkip_%d",phibin);
1392 char *named0ClustertypeSPD03zSkip = Form("d0clustertypeSPD03zSkip_%d",phibin);
1393 ((TH1F*)(fOutputclusterTypeSPD03Skip->FindObject(named0ClustertypeSPD03rphiSkip)))->Fill(10000*dzRecSkip[0]);
1394 ((TH1F*)(fOutputclusterTypeSPD03Skip->FindObject(named0ClustertypeSPD03zSkip)))->Fill(10000*dzRecSkip[1]);
1395 }
1396
1397 if(ctypeSPD1==1){
1398 char *named0ClustertypeSPD11rphiSkip = Form("d0clustertypeSPD11rphiSkip_%d",phibin);
1399 char *named0ClustertypeSPD11zSkip = Form("d0clustertypeSPD11rphiSkip_%d",phibin);
1400 ((TH1F*)(fOutputclusterTypeSPD11Skip->FindObject(named0ClustertypeSPD11rphiSkip)))->Fill(10000*dzRecSkip[0]);
1401 ((TH1F*)(fOutputclusterTypeSPD11Skip->FindObject(named0ClustertypeSPD11zSkip)))->Fill(10000*dzRecSkip[1]);
1402 }
1403 if(ctypeSPD1==2){
1404 char *named0ClustertypeSPD12rphiSkip = Form("d0clustertypeSPD12rphiSkip_%d",phibin);
1405 char *named0ClustertypeSPD12zSkip = Form("d0clustertypeSPD12rphiSkip_%d",phibin);
1406 ((TH1F*)(fOutputclusterTypeSPD12Skip->FindObject(named0ClustertypeSPD12rphiSkip)))->Fill(10000*dzRecSkip[0]);
1407 ((TH1F*)(fOutputclusterTypeSPD12Skip->FindObject(named0ClustertypeSPD12zSkip)))->Fill(10000*dzRecSkip[1]);
1408 }
1409
1410 if(ctypeSPD1==3){
1411 char *named0ClustertypeSPD13rphiSkip = Form("d0clustertypeSPD13rphiSkip_%d",phibin);
1412 char *named0ClustertypeSPD13zSkip = Form("d0clustertypeSPD13rphiSkip_%d",phibin);
1413 ((TH1F*)(fOutputclusterTypeSPD13Skip->FindObject(named0ClustertypeSPD13rphiSkip)))->Fill(10000*dzRecSkip[0]);
1414 ((TH1F*)(fOutputclusterTypeSPD13Skip->FindObject(named0ClustertypeSPD13zSkip)))->Fill(10000*dzRecSkip[1]);
1415 }
b2d79ac3 1416 }
1417
cde71236 1418 if(vtxESDSkip) {delete vtxESDSkip; vtxESDSkip = 0x0;}
77e570bf 1419 } // end loop of tracks
1420
cde71236 1421 if(diamond) {delete diamond; diamond=NULL;}
1422 if(vtxESDRec) {delete vtxESDRec; vtxESDRec = 0x0;}
1423 if(vtxESDTrue) {delete vtxESDTrue;vtxESDTrue = 0x0;}
77e570bf 1424 fNentries->Fill(1);
1425 PostData(1, fOutputitspureSARec);
1426 PostData(2, fOutputitspureSASkip);
1427 PostData(3, fOutputallPointRec);
1428 PostData(4, fOutputallPointSkip);
1429 PostData(5, fOutputpartPointRec);
1430 PostData(6, fOutputpartPointSkip);
1431 PostData(7, fOutputonepointSPDRec);
1432 PostData(8, fOutputonepointSPDSkip);
1433 PostData(9, fOutputpostvTracRec);
1434 PostData(10, fOutputpostvTracSkip);
1435 PostData(11, fOutputnegtvTracRec);
1436 PostData(12, fOutputnegtvTracSkip);
1437 PostData(13, fOutputpullAllpointRec);
1438 PostData(14, fOutputpullAllpointSkip);
1439 PostData(15, fOutputOnlyRefitRec);
1440 PostData(16, fOutputOnlyRefitSkip);
cbddc2a0 1441 PostData(17, fOutputSinThetaRec);
1442 PostData(18, fOutputSinThetaSkip);
1443 PostData(19, fOutputallPointTrue);
1444 PostData(20, fOutputpostvTracTrue);
1445 PostData(21, fOutputnegtvTracTrue);
1446 PostData(22, fOutputpullAllpointTrue);
1447 PostData(23, fOutputphiAllpointSkip);
1448 PostData(24, fOutputphiPostvtracSkip);
1449 PostData(25, fOutputphiNegtvtracSkip);
1450 PostData(26, fOutputclusterTypeSPD01Skip);
1451 PostData(27, fOutputclusterTypeSPD02Skip);
1452 PostData(28, fOutputclusterTypeSPD03Skip);
1453 PostData(29, fOutputclusterTypeSPD11Skip);
1454 PostData(30, fOutputclusterTypeSPD12Skip);
1455 PostData(31, fOutputclusterTypeSPD13Skip);
1456 PostData(32, fOutputPt);
1457 PostData(33, fNentries);
1458 PostData(34, fEstimVtx);
77e570bf 1459
1460 return;
1461}
1462
1463//________________________________________________________________________
1464Int_t AliAnalysisTaskSEImpParRes::PtBin(Double_t pt) const {
1465 //
1466 // return the number of the pt bin
1467 //
1468
cbddc2a0 1469 if (pt>0.22 && pt<0.23) return 1;
1470 if (pt>0.26 && pt<0.27) return 2;
0f607695 1471 if (pt>0.345 && pt<0.355) return 3;
cbddc2a0 1472 if (pt>0.45 && pt<0.46) return 4;
1473 if (pt>0.55 && pt<0.56) return 5;
1474 if (pt>0.65 && pt<0.66) return 6;
1475 if (pt>0.75 && pt<0.76) return 7;
1476 if (pt>0.85 && pt<0.865) return 8;
1477 if (pt>1.05 && pt<1.07) return 9;
77e570bf 1478 if (pt>1.25 && pt<1.30) return 10;
1479 if (pt>1.4 && pt<1.55) return 11;
1480 if (pt>1.6 && pt<1.8) return 12;
1481 if (pt>1.8 && pt<2.0) return 13;
1482 if (pt>2.1 && pt<2.3) return 14;
1483 if (pt>2.34 && pt<2.64) return 15;
1484 if (pt>2.65 && pt<3.0) return 16;
1485 if (pt>3.1 && pt<4.) return 17;
1486 if (pt>4.1 && pt<5.2) return 18;
1487 if (pt>5.3 && pt<6.8) return 19;
1488 if (pt>7.0 && pt<8.8) return 20;
b2d79ac3 1489 if (pt>9. && pt<11.) return 21;
1490 if (pt>11.1 && pt<14.) return 22;
1491 if (pt>14.1 && pt<17.) return 23;
1492 if (pt>17.2 && pt<21.8) return 24;
1493 if (pt>22.1 && pt<29.) return 25;
1494 if (pt>29.05 && pt<35.) return 26;
77e570bf 1495 /*
1496 if (pt>0.22 && pt<0.23) return 1 ;
1497 if (pt>0.26 && pt<0.27) return 2 ;
1498 if (pt>0.35 && pt<0.36) return 3 ;
1499 if (pt>0.45 && pt<0.46) return 4 ;
1500 if (pt>0.55 && pt<0.56) return 5 ;
1501 if (pt>0.65 && pt<0.66) return 6 ;
1502 if (pt>0.75 && pt<0.76) return 7 ;
1503 if (pt>0.85 && pt<0.86) return 8 ;
1504 if (pt>1.05 && pt<1.06) return 9 ;
1505 if (pt>1.25 && pt<1.27) return 10;
1506 if (pt>1.45 && pt<1.47) return 11;
1507 if (pt>1.65 && pt<1.67) return 12;
1508 if (pt>1.85 && pt<1.87) return 13;
1509 if (pt>2.15 && pt<2.17) return 14;
1510 if (pt>2.45 && pt<2.48) return 15;
1511 if (pt>2.65 && pt<2.67) return 16;
1512 if (pt>2.85 && pt<2.87) return 17;
1513 if (pt>3.25 && pt<3.27) return 18;
1514 if (pt>3.75 && pt<3.8) return 19;
1515 if (pt>4.15 && pt<4.20) return 20;
1516 if (pt>4.95 && pt<5.15) return 21;
1517 if (pt>5.35 && pt<5.55) return 22;
1518 if (pt>6.0 && pt<6.8) return 23;
1519 if (pt>8.5 && pt<10.5) return 24;
1520 if (pt>12. && pt<19.) return 25;
1521 if (pt>21. && pt<32.) return 26;
1522 */
1523 return -1;
1524}
1525
b2d79ac3 1526//________________________________________________________________________
1527Double_t AliAnalysisTaskSEImpParRes::Getd0HistRange(Int_t i) const {
1528 //
1529 // Return the range of the d0 histograms for each pt bin
1530 //
1531 if (i==1) return 2500.;
1532 if (i==2) return 1800.;
1533 if (i==3) return 1750.;
1534 if (i==4) return 1200.;
1535 if (i==5) return 1000.;
1536 if (i==6) return 900.;
1537 if (i==7) return 850.;
1538 if (i==8) return 700.;
1539 if (i==9) return 650.;
1540 if (i==10) return 600.;
1541 if (i==11) return 550.;
1542 if (i==12) return 500.;
1543 if (i==13) return 450.;
1544 if (i==14) return 400.;
1545 if (i==15) return 390.;
1546 if (i==16) return 380.;
1547 if (i==17) return 380.;
1548 if (i==18) return 350.;
1549 if (i==19) return 320.;
1550 if (i==20) return 300.;
1551 if (i==21) return 290.;
1552 if (i==22) return 270.;
1553 if (i==23) return 250.;
1554 if (i==24) return 270.;
1555 if (i==25) return 279.;
1556 if (i==26) return 270.;
1557
1558 return 2000.;
1559}
1560
1561//________________________________________________________________________
1562Int_t AliAnalysisTaskSEImpParRes::SinThetaBin(Double_t sintheta) const {
1563 //
1564 // Return the number of the sinTheta bin
1565 //
1566 if(sintheta>0.7 && sintheta<0.73) return 1;
1567 if(sintheta>0.73 && sintheta<0.76) return 2;
1568 if(sintheta>0.76 && sintheta<0.79) return 3;
1569 if(sintheta>0.79 && sintheta<0.82) return 4;
1570 if(sintheta>0.82 && sintheta<0.85) return 5;
1571 if(sintheta>0.85 && sintheta<0.88) return 6;
1572 if(sintheta>0.88 && sintheta<0.91) return 7;
1573 if(sintheta>0.91 && sintheta<0.94) return 8;
1574 if(sintheta>0.94 && sintheta<0.97) return 9;
1575 if(sintheta>0.97 && sintheta<1.0) return 10;
1576 return -1;
1577}
1578
cbddc2a0 1579//___________________________________________________________________________
1580Int_t AliAnalysisTaskSEImpParRes::PhiBin(Double_t phi) const {
1581 Double_t pi=TMath::Pi();
1582 if(phi>2.*pi || phi<0.) return -1;
5a4911b5 1583 if(phi<0.1*pi) return 1;
1584 if(phi<0.2*pi) return 2;
1585 if(phi<0.3*pi) return 3;
1586 if(phi<0.4*pi) return 4;
1587 if(phi<0.5*pi) return 5;
1588 if(phi<0.6*pi) return 6;
1589 if(phi<0.7*pi) return 7;
1590 if(phi<0.8*pi) return 8;
1591 if(phi<0.9*pi) return 9;
1592 if(phi<1.0*pi) return 10;
1593 if(phi<1.1*pi) return 11;
1594 if(phi<1.2*pi) return 12;
1595 if(phi<1.3*pi) return 13;
1596 if(phi<1.4*pi) return 14;
1597 if(phi<1.5*pi) return 15;
1598 if(phi<1.6*pi) return 16;
1599 if(phi<1.7*pi) return 17;
1600 if(phi<1.8*pi) return 18;
1601 if(phi<1.9*pi) return 19;
1602 if(phi<2.0*pi) return 20;
cbddc2a0 1603 return -1;
1604}
1605
1606//___________________________________________________________________________
77e570bf 1607void AliAnalysisTaskSEImpParRes::Terminate(Option_t */*option*/) {
1608 //
1609 // Terminate analysis
1610 //
1611
1612 if (fDebug>1) printf("AnalysisTaskSEImpParRes: Terminate() \n");
1613
1614 fOutputitspureSARec = dynamic_cast<TList*>(GetOutputData(1));
1615 if (!fOutputitspureSARec) printf("ERROR: fOutputitspureSARec not available\n");
1616
1617 fOutputitspureSASkip = dynamic_cast<TList*>(GetOutputData(2));
1618 if (!fOutputitspureSASkip) printf("ERROR: fOutputitspureSASkip not available\n");
1619
1620 fOutputallPointRec = dynamic_cast<TList*>(GetOutputData(3));
1621 if (!fOutputallPointRec) printf("ERROR: fOutputallPointRec not available\n");
1622
1623 fOutputallPointSkip = dynamic_cast<TList*>(GetOutputData(4));
1624 if (!fOutputallPointSkip) printf("ERROR: fOutputallPointSkip not available\n");
1625
1626 fOutputpartPointRec = dynamic_cast<TList*>(GetOutputData(5));
1627 if (!fOutputpartPointRec) printf("ERROR: fOutputpartPointRec not available\n");
1628
1629 fOutputpartPointSkip = dynamic_cast<TList*>(GetOutputData(6));
1630 if (!fOutputpartPointSkip) printf("ERROR: fOutputpartPointSkip not available\n");
1631
1632 fOutputonepointSPDRec = dynamic_cast<TList*>(GetOutputData(7));
1633 if (!fOutputonepointSPDRec) printf("ERROR: fOutputonepointSPDSRec not available\n");
1634
1635 fOutputonepointSPDSkip = dynamic_cast<TList*>(GetOutputData(8));
1636 if (!fOutputonepointSPDSkip) printf("ERROR: fOutputonepointSPDSkip not available\n");
1637
1638 fOutputpostvTracRec = dynamic_cast<TList*>(GetOutputData(9));
1639 if (!fOutputpostvTracRec) printf("ERROR: fOutputpostvTracRec not available\n");
1640
1641 fOutputpostvTracSkip = dynamic_cast<TList*>(GetOutputData(10));
1642 if (!fOutputpostvTracSkip) printf("ERROR: fOutputpostvTracSkip not available\n");
1643
1644 fOutputnegtvTracRec = dynamic_cast<TList*>(GetOutputData(11));
1645 if (!fOutputnegtvTracRec) printf("ERROR: fOutputnegtvTracRec not available\n");
1646
1647 fOutputnegtvTracSkip = dynamic_cast<TList*>(GetOutputData(12));
1648 if (!fOutputnegtvTracSkip) printf("ERROR: fOutputnegtvTracSkip not available\n");
1649
1650
1651 fOutputpullAllpointRec = dynamic_cast<TList*>(GetOutputData(13));
1652 if (!fOutputpullAllpointRec) printf("ERROR: fOutputpullAllpointRec not available\n");
1653
1654 fOutputpullAllpointSkip = dynamic_cast<TList*>(GetOutputData(14));
1655 if (!fOutputpullAllpointSkip) printf("ERROR: fOutputpullAllpointSkip not available\n");
1656
1657 fOutputOnlyRefitRec = dynamic_cast<TList*>(GetOutputData(15));
1658 if (!fOutputOnlyRefitRec) printf("ERROR: fOutputOnlyRefitRec not available\n");
1659
1660 fOutputOnlyRefitSkip = dynamic_cast<TList*>(GetOutputData(16));
1661 if (!fOutputOnlyRefitSkip) printf("ERROR: fOutputOnlyRefitSkip not available\n");
b2d79ac3 1662
1663 fOutputSinThetaRec = dynamic_cast<TList*>(GetOutputData(17));
1664 if (!fOutputSinThetaRec) printf("ERROR:fOutputSinThetaRec not available\n");
1665
1666 fOutputSinThetaSkip = dynamic_cast<TList*>(GetOutputData(18));
1667 if (!fOutputSinThetaSkip) printf("ERROR:fOutputSinThetaSkip not available\n");
cbddc2a0 1668
1669 fOutputallPointTrue = dynamic_cast<TList*>(GetOutputData(19));
1670 if (!fOutputallPointTrue) printf("ERROR:fOutputallPointTrue not available\n");
1671
1672 fOutputpostvTracTrue = dynamic_cast<TList*>(GetOutputData(20));
1673 if (!fOutputpostvTracTrue) printf("ERROR:fOutputpostvTracTrue not available\n");
1674
1675 fOutputnegtvTracTrue = dynamic_cast<TList*>(GetOutputData(21));
1676 if (!fOutputnegtvTracTrue) printf("ERROR:fOutputnegtvTracTrue not available\n");
1677
1678 fOutputpullAllpointTrue = dynamic_cast<TList*>(GetOutputData(22));
1679 if (!fOutputpullAllpointTrue) printf("ERROR:fOutputpullAllpointTrue not available\n");
1680
1681 fOutputphiAllpointSkip = dynamic_cast<TList*>(GetOutputData(23));
1682 if (!fOutputphiAllpointSkip) printf("ERROR:fOutputphiAllpointSkip not available\n");
1683
1684 fOutputphiPostvtracSkip = dynamic_cast<TList*>(GetOutputData(24));
1685 if (!fOutputphiPostvtracSkip) printf("ERROR:fOutputphiPostvtracSkip not available\n");
1686
1687 fOutputphiNegtvtracSkip = dynamic_cast<TList*>(GetOutputData(25));
1688 if (!fOutputphiNegtvtracSkip) printf("ERROR:fOutputphiNegtvtracSkip not available\n");
1689
1690 fOutputclusterTypeSPD01Skip = dynamic_cast<TList*>(GetOutputData(26));
1691 if (!fOutputclusterTypeSPD01Skip) printf("ERROR:fOutputclusterTypeSPD01Skip not available\n");
1692
1693 fOutputclusterTypeSPD02Skip = dynamic_cast<TList*>(GetOutputData(27));
1694 if (!fOutputclusterTypeSPD02Skip) printf("ERROR:fOutputclusterTypeSPD02Skip not available\n");
1695
1696 fOutputclusterTypeSPD03Skip = dynamic_cast<TList*>(GetOutputData(28));
1697 if (!fOutputclusterTypeSPD03Skip) printf("ERROR:fOutputclusterTypeSPD03Skip not available\n");
1698
1699 fOutputclusterTypeSPD11Skip = dynamic_cast<TList*>(GetOutputData(29));
1700 if (!fOutputclusterTypeSPD11Skip) printf("ERROR:fOutputclusterTypeSPD11Skip not available\n");
1701
1702 fOutputclusterTypeSPD12Skip = dynamic_cast<TList*>(GetOutputData(30));
1703 if (!fOutputclusterTypeSPD12Skip) printf("ERROR:fOutputclusterTypeSPD12Skip not available\n");
1704
1705 fOutputclusterTypeSPD13Skip = dynamic_cast<TList*>(GetOutputData(31));
1706 if (!fOutputclusterTypeSPD13Skip) printf("ERROR:fOutputclusterTypeSPD13Skip not available\n");
1707
1708 fOutputPt = dynamic_cast<TList*>(GetOutputData(32));
77e570bf 1709 if (!fOutputPt) printf("ERROR: fOutputPt not available\n");
cbddc2a0 1710
1711 fNentries = dynamic_cast<TH1F*>(GetOutputData(33));
77e570bf 1712 if (!fNentries) printf("ERROR: fNentries not available\n");
1713
cbddc2a0 1714 fEstimVtx = dynamic_cast<TH1F*>(GetOutputData(34));
77e570bf 1715 if (!fEstimVtx) printf("ERROR: fEstimVtx not available\n");
77e570bf 1716 return;
1717}
cbddc2a0 1718
1719
1720Int_t AliAnalysisTaskSEImpParRes::ClusterTypeOnITSLayer(AliESDtrack *track,Int_t layer) const {
1721//
1722// Returns cluster type on ITS layer. Returns -1 if no cluster on this layer
1723//
1724 Int_t ctype=-1;
1725
1726 if(layer<0 || layer>5) return ctype;
1727 if(!track->HasPointOnITSLayer(layer)) return ctype;
1728
1729 const AliTrackPointArray *array = track->GetTrackPointArray();
1730 if(!array) {
1731 printf("No tracks points avaialble: check ESDfriends\n");
1732 return ctype;
1733 }
1734 AliTrackPoint point;
1735 Int_t ipt,volId,modId,layerId;
1736 for(ipt=0; ipt<array->GetNPoints(); ipt++) {
1737 array->GetPoint(point,ipt);
1738 volId = point.GetVolumeID();
1739 if(volId<=0) continue;
1740 layerId = AliGeomManager::VolUIDToLayer(volId,modId);
1741 if(layerId==layer+1 && !point.IsExtra()) {
1742 ctype = point.GetClusterType();
1743 break;
1744 }
1745 }
1746 return ctype;
1747}
1748