]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/CreateAODfromESD.C
Adding AliMUONLog class (Laurent)
[u/mrichter/AliRoot.git] / STEER / CreateAODfromESD.C
CommitLineData
e985a35a 1#if !defined(__CINT__) || defined(__MAKECINT__)
2
cf22b3fc 3#include <Riostream.h>
4#include <TFile.h>
5#include <TTree.h>
6#include <TMath.h>
df9db588 7
8#include "AliAODEvent.h"
31fd97b2 9#include "AliAODHeader.h"
cf22b3fc 10#include "AliAODVertex.h"
11#include "AliAODTrack.h"
a9255000 12#include "AliAODCluster.h"
cf22b3fc 13
df9db588 14#include "AliESD.h"
15#include "AliESDtrack.h"
16#include "AliESDVertex.h"
17#include "AliESDv0.h"
31fd97b2 18#include "AliESDcascade.h"
cf22b3fc 19#include "AliESDCaloCluster.h"
df9db588 20
e985a35a 21#endif
22
cf22b3fc 23void CreateAODfromESD(const char *inFileName = "AliESDs.root",
24 const char *outFileName = "AliAOD.root") {
df9db588 25
26 // create an AliAOD object
27 AliAODEvent *aod = new AliAODEvent();
28 aod->CreateStdContent();
29
30 // open the file
31 TFile *outFile = TFile::Open(outFileName, "RECREATE");
32
33 // create the tree
34 TTree *aodTree = new TTree("AOD", "AliAOD tree");
35 aodTree->Branch(aod->GetList());
36
37 // connect to ESD
38 TFile *inFile = TFile::Open(inFileName, "READ");
39 TTree *t = (TTree*) inFile->Get("esdTree");
40 TBranch *b = t->GetBranch("ESD");
41 AliESD *esd = 0;
42 b->SetAddress(&esd);
43
44 Int_t nEvents = b->GetEntries();
45
46 // loop over events and fill them
47 for (Int_t iEvent = 0; iEvent < nEvents; ++iEvent) {
48 b->GetEntry(iEvent);
49
50 // Multiplicity information needed by the header (to be revised!)
51 Int_t nTracks = esd->GetNumberOfTracks();
52 Int_t nPosTracks = 0;
53 for (Int_t iTrack=0; iTrack<nTracks; ++iTrack)
54 if (esd->GetTrack(iTrack)->GetSign()> 0) nPosTracks++;
55
56 // create the header
31fd97b2 57 aod->AddHeader(new AliAODHeader(esd->GetRunNumber(),
58 esd->GetBunchCrossNumber(),
59 esd->GetOrbitNumber(),
df9db588 60 nTracks,
61 nPosTracks,
62 nTracks-nPosTracks,
63 esd->GetMagneticField(),
4773afc9 64 -999., // fill muon magnetic field
df9db588 65 -999., // centrality; to be filled, still
4773afc9 66 esd->GetZDCN1Energy(),
67 esd->GetZDCP1Energy(),
68 esd->GetZDCN2Energy(),
69 esd->GetZDCP2Energy(),
70 esd->GetZDCEMEnergy(),
df9db588 71 esd->GetTriggerMask(),
72 esd->GetTriggerCluster(),
73 esd->GetEventType()));
74
75 Int_t nV0s = esd->GetNumberOfV0s();
76 Int_t nCascades = esd->GetNumberOfCascades();
77 Int_t nKinks = esd->GetNumberOfKinks();
78 Int_t nVertices = nV0s + nCascades + nKinks;
79
80 aod->ResetStd(nTracks, nVertices);
81
82
83 // Array to take into account the tracks already added to the AOD
84 Bool_t * usedTrack = NULL;
85 if (nTracks>0) {
86 usedTrack = new Bool_t[nTracks];
87 for (Int_t iTrack=0; iTrack<nTracks; ++iTrack) usedTrack[iTrack]=kFALSE;
88 }
89 // Array to take into account the V0s already added to the AOD
90 Bool_t * usedV0 = NULL;
91 if (nV0s>0) {
92 usedV0 = new Bool_t[nV0s];
93 for (Int_t iV0=0; iV0<nV0s; ++iV0) usedV0[iV0]=kFALSE;
94 }
cf22b3fc 95 // Array to take into account the kinks already added to the AOD
96 Bool_t * usedKink = NULL;
97 if (nKinks>0) {
98 usedKink = new Bool_t[nKinks];
99 for (Int_t iKink=0; iKink<nKinks; ++iKink) usedKink[iKink]=kFALSE;
100 }
df9db588 101
102 // Access to the AOD container of vertices
103 TClonesArray &vertices = *(aod->GetVertices());
104 Int_t jVertices=0;
105
106 // Access to the AOD container of tracks
107 TClonesArray &tracks = *(aod->GetTracks());
108 Int_t jTracks=0;
109
110 // Add primary vertex. The primary tracks will be defined
111 // after the loops on the composite objects (V0, cascades, kinks)
112 const AliESDVertex *vtx = esd->GetPrimaryVertex();
113
114 Double_t pos[3];
115 vtx->GetXYZ(pos); // position
31fd97b2 116 Double_t covVtx[6]; // We have to give changing names to the variables (like cov?, x?, and p?) because CINT doesn't recognize blocks correctly.
117 vtx->GetCovMatrix(covVtx); //covariance matrix
df9db588 118
119 AliAODVertex * primary = new(vertices[jVertices++])
31fd97b2 120 AliAODVertex(pos, covVtx, vtx->GetChi2(), NULL, AliAODVertex::kPrimary);
df9db588 121
122 // Create vertices starting from the most complex objects
123
124 // Cascades
125 for (Int_t nCascade = 0; nCascade < nCascades; ++nCascade) {
126 AliESDcascade *cascade = esd->GetCascade(nCascade);
127
128 Double_t posXi[3];
129 cascade->GetXYZ(posXi[0], posXi[1], posXi[2]);
130 Double_t covXi[6];
131 cascade->GetPosCovXi(covXi);
132
133 // Add the cascade vertex
134 AliAODVertex * vcascade = new(vertices[jVertices++]) AliAODVertex(posXi,
135 covXi,
136 cascade->GetChi2Xi(),
137 primary,
138 AliAODVertex::kCascade);
139
140 primary->AddDaughter(vcascade);
141
142 // Add the V0 from the cascade. The ESD class have to be optimized...
143 // Now we have to search for the corresponding Vo in the list of V0s
144 // using the indeces of the positive and negative tracks
145
146 Int_t posFromV0 = cascade->GetPindex();
147 Int_t negFromV0 = cascade->GetNindex();
148
149
150 AliESDv0 * v0 = 0x0;
151 Int_t indV0 = -1;
152
153 for (Int_t iV0=0; iV0<nV0s; ++iV0) {
154
155 v0 = esd->GetV0(iV0);
31fd97b2 156 Int_t posV0 = v0->GetPindex();
157 Int_t negV0 = v0->GetNindex();
df9db588 158
31fd97b2 159 if (posV0==posFromV0 && negV0==negFromV0) {
df9db588 160 indV0 = iV0;
161 break;
162 }
163 }
164
165 AliAODVertex * vV0FromCascade = 0x0;
166
cf22b3fc 167 if (indV0>-1 && !usedV0[indV0] ) {
df9db588 168
cf22b3fc 169 // the V0 exists in the array of V0s and is not used
170
df9db588 171 usedV0[indV0] = kTRUE;
172
173 Double_t posV0[3];
174 v0->GetXYZ(posV0[0], posV0[1], posV0[2]);
31fd97b2 175 Double_t covV0_1[6];
176 v0->GetPosCov(covV0_1);
cf22b3fc 177
df9db588 178 vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(posV0,
31fd97b2 179 covV0_1,
df9db588 180 v0->GetChi2V0(),
181 vcascade,
182 AliAODVertex::kV0);
183 } else {
184
cf22b3fc 185 // the V0 doesn't exist in the array of V0s or was used
186 cerr << "Error: event " << iEvent << " cascade " << nCascade
187 << " The V0 " << indV0
188 << " doesn't exist in the array of V0s or was used!" << endl;
189
31fd97b2 190 Double_t posV0_2[3];
191 cascade->GetXYZ(posV0_2[0], posV0_2[1], posV0_2[2]);
192 Double_t covV0_2[6];
193 cascade->GetPosCov(covV0_2);
df9db588 194
31fd97b2 195 vV0FromCascade = new(vertices[jVertices++]) AliAODVertex(posV0_2,
196 covV0_2,
df9db588 197 v0->GetChi2V0(),
198 vcascade,
199 AliAODVertex::kV0);
200 vcascade->AddDaughter(vV0FromCascade);
201 }
202
203 // Add the positive tracks from the V0
204
cf22b3fc 205 if (! usedTrack[posFromV0]) {
206
207 usedTrack[posFromV0] = kTRUE;
df9db588 208
209 AliESDtrack *esdTrack = esd->GetTrack(posFromV0);
cf22b3fc 210
31fd97b2 211 Double_t p1[3];
212 esdTrack->GetPxPyPz(p1);
df9db588 213
31fd97b2 214 Double_t x1[3];
215 esdTrack->GetXYZ(x1);
df9db588 216
31fd97b2 217 Double_t covV0PosTr[21];
218 esdTrack->GetCovarianceXYZPxPyPz(covV0PosTr);
cf22b3fc 219
31fd97b2 220 Double_t pid1[10];
221 esdTrack->GetESDpid(pid1);
df9db588 222
223 vV0FromCascade->AddDaughter(
cf22b3fc 224 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
df9db588 225 esdTrack->GetLabel(),
31fd97b2 226 p1,
227 kTRUE,
228 x1,
df9db588 229 kFALSE,
31fd97b2 230 covV0PosTr,
df9db588 231 (Short_t)esdTrack->GetSign(),
232 esdTrack->GetITSClusterMap(),
31fd97b2 233 pid1,
df9db588 234 vV0FromCascade,
4773afc9 235 kFALSE, // check if this is right
df9db588 236 AliAODTrack::kSecondary)
237 );
238 }
cf22b3fc 239 else {
240 cerr << "Error: event " << iEvent << " cascade " << nCascade
241 << " track " << posFromV0 << " has already been used!" << endl;
242 }
df9db588 243
244 // Add the negative tracks from the V0
245
cf22b3fc 246 if (!usedTrack[negFromV0]) {
247
248 usedTrack[negFromV0] = kTRUE;
249
df9db588 250 AliESDtrack *esdTrack = esd->GetTrack(negFromV0);
cf22b3fc 251
31fd97b2 252 Double_t p2[3];
253 esdTrack->GetPxPyPz(p2);
df9db588 254
31fd97b2 255 Double_t x2[3];
256 esdTrack->GetXYZ(x2);
df9db588 257
31fd97b2 258 Double_t covV0NegTr[21];
259 esdTrack->GetCovarianceXYZPxPyPz(covV0NegTr);
df9db588 260
31fd97b2 261 Double_t pid2[10];
262 esdTrack->GetESDpid(pid2);
cf22b3fc 263
df9db588 264 vV0FromCascade->AddDaughter(
265 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
266 esdTrack->GetLabel(),
31fd97b2 267 p2,
df9db588 268 kTRUE,
31fd97b2 269 x2,
df9db588 270 kFALSE,
31fd97b2 271 covV0NegTr,
df9db588 272 (Short_t)esdTrack->GetSign(),
273 esdTrack->GetITSClusterMap(),
31fd97b2 274 pid2,
df9db588 275 vV0FromCascade,
4773afc9 276 kFALSE, // check if this is right
df9db588 277 AliAODTrack::kSecondary)
278 );
279 }
cf22b3fc 280 else {
281 cerr << "Error: event " << iEvent << " cascade " << nCascade
282 << " track " << negFromV0 << " has already been used!" << endl;
283 }
df9db588 284
285 // Add the bachelor track from the cascade
286
287 Int_t bachelor = cascade->GetBindex();
df9db588 288
cf22b3fc 289 if(!usedTrack[bachelor]) {
290
291 usedTrack[bachelor] = kTRUE;
292
293 AliESDtrack *esdTrack = esd->GetTrack(bachelor);
294
31fd97b2 295 Double_t p3[3];
296 esdTrack->GetPxPyPz(p3);
df9db588 297
31fd97b2 298 Double_t x3[3];
299 esdTrack->GetXYZ(x3);
df9db588 300
31fd97b2 301 Double_t covXiTr[21];
302 esdTrack->GetCovarianceXYZPxPyPz(covXiTr);
df9db588 303
31fd97b2 304 Double_t pid3[10];
305 esdTrack->GetESDpid(pid3);
df9db588 306
307 vcascade->AddDaughter(
308 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
309 esdTrack->GetLabel(),
31fd97b2 310 p3,
df9db588 311 kTRUE,
31fd97b2 312 x3,
df9db588 313 kFALSE,
31fd97b2 314 covXiTr,
df9db588 315 (Short_t)esdTrack->GetSign(),
316 esdTrack->GetITSClusterMap(),
31fd97b2 317 pid3,
df9db588 318 vcascade,
4773afc9 319 kFALSE, // check if this is right
df9db588 320 AliAODTrack::kSecondary)
321 );
322 }
cf22b3fc 323 else {
324 cerr << "Error: event " << iEvent << " cascade " << nCascade
325 << " track " << bachelor << " has already been used!" << endl;
326 }
df9db588 327
328 // Add the primary track of the cascade (if any)
329
cf22b3fc 330 } // end of the loop on cascades
df9db588 331
332 // V0s
333
334 for (Int_t nV0 = 0; nV0 < nV0s; ++nV0) {
335
336 if (usedV0[nV0]) continue; // skip if aready added to the AOD
337
338 AliESDv0 *v0 = esd->GetV0(nV0);
339
31fd97b2 340 Double_t posV0_3[3];
341 v0->GetXYZ(posV0_3[0], posV0_3[1], posV0_3[2]);
342 Double_t covV0_3[6];
343 v0->GetPosCov(covV0_3);
df9db588 344
345 AliAODVertex * vV0 =
31fd97b2 346 new(vertices[jVertices++]) AliAODVertex(posV0_3,
347 covV0_3,
df9db588 348 v0->GetChi2V0(),
349 primary,
350 AliAODVertex::kV0);
351 primary->AddDaughter(vV0);
352
353 Int_t posFromV0 = v0->GetPindex();
354 Int_t negFromV0 = v0->GetNindex();
31fd97b2 355
df9db588 356 // Add the positive tracks from the V0
357
cf22b3fc 358 if (!usedTrack[posFromV0]) {
359
360 usedTrack[posFromV0] = kTRUE;
df9db588 361
362 AliESDtrack *esdTrack = esd->GetTrack(posFromV0);
363
31fd97b2 364 Double_t p4[3];
365 esdTrack->GetPxPyPz(p4);
df9db588 366
31fd97b2 367 Double_t x4[3];
368 esdTrack->GetXYZ(x4);
df9db588 369
31fd97b2 370 Double_t covV0PosTr_2[21];
371 esdTrack->GetCovarianceXYZPxPyPz(covV0PosTr_2);
cf22b3fc 372
31fd97b2 373 Double_t pid4[10];
374 esdTrack->GetESDpid(pid4);
df9db588 375
376 vV0->AddDaughter(
377 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
378 esdTrack->GetLabel(),
31fd97b2 379 p4,
380 kTRUE,
381 x4,
df9db588 382 kFALSE,
31fd97b2 383 covV0PosTr_2,
df9db588 384 (Short_t)esdTrack->GetSign(),
385 esdTrack->GetITSClusterMap(),
31fd97b2 386 pid4,
df9db588 387 vV0,
4773afc9 388 kFALSE, // check if this is right
df9db588 389 AliAODTrack::kSecondary)
390 );
391 }
cf22b3fc 392 else {
393 cerr << "Error: event " << iEvent << " V0 " << nV0
394 << " track " << posFromV0 << " has already been used!" << endl;
395 }
df9db588 396
397 // Add the negative tracks from the V0
398
cf22b3fc 399 if (!usedTrack[negFromV0]) {
400
401 usedTrack[negFromV0] = kTRUE;
df9db588 402
403 AliESDtrack *esdTrack = esd->GetTrack(negFromV0);
404
31fd97b2 405 Double_t p5[3];
406 esdTrack->GetPxPyPz(p5);
df9db588 407
31fd97b2 408 Double_t x5[3];
409 esdTrack->GetXYZ(x5);
df9db588 410
31fd97b2 411 Double_t covV0NegTr_2[21];
412 esdTrack->GetCovarianceXYZPxPyPz(covV0NegTr_2);
df9db588 413
31fd97b2 414 Double_t pid5[10];
415 esdTrack->GetESDpid(pid5);
df9db588 416
417 vV0->AddDaughter(
418 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
419 esdTrack->GetLabel(),
31fd97b2 420 p5,
df9db588 421 kTRUE,
31fd97b2 422 x5,
df9db588 423 kFALSE,
31fd97b2 424 covV0NegTr_2,
df9db588 425 (Short_t)esdTrack->GetSign(),
426 esdTrack->GetITSClusterMap(),
31fd97b2 427 pid5,
df9db588 428 vV0,
4773afc9 429 kFALSE, // check if this is right
df9db588 430 AliAODTrack::kSecondary)
431 );
432 }
cf22b3fc 433 else {
434 cerr << "Error: event " << iEvent << " V0 " << nV0
435 << " track " << negFromV0 << " has already been used!" << endl;
436 }
df9db588 437
cf22b3fc 438 } // end of the loop on V0s
df9db588 439
cf22b3fc 440 // Kinks: it is a big mess the access to the information in the kinks
441 // The loop is on the tracks in order to find the mother and daugther of each kink
442
443
444 for (Int_t iTrack=0; iTrack<nTracks; ++iTrack) {
445
446
447 AliESDtrack * track = esd->GetTrack(iTrack);
448
449
450 Int_t ikink = track->GetKinkIndex(0);
451
452 if (ikink) {
453 // Negative kink index: mother, positive: daughter
454
455 // Search for the second track of the kink
456
457 for (Int_t jTrack = iTrack+1; jTrack<nTracks; ++jTrack) {
458
459 AliESDtrack * track1 = esd->GetTrack(jTrack);
460
461 Int_t jkink = track1->GetKinkIndex(0);
462
463 if ( TMath::Abs(ikink)==TMath::Abs(jkink) ) {
464
465 // The two tracks are from the same kink
466
467 if (usedKink[TMath::Abs(ikink)-1]) continue; // skip used kinks
468
469 Int_t imother = -1;
470 Int_t idaughter = -1;
471
472 if (ikink<0 && jkink>0) {
473
474 imother = iTrack;
475 idaughter = jTrack;
476 }
477 else if (ikink>0 && jkink<0) {
478
479 imother = jTrack;
480 idaughter = iTrack;
481 }
482 else {
483 cerr << "Error: Wrong combination of kink indexes: "
484 << ikink << " " << jkink << endl;
485 continue;
486 }
487
488 // Add the mother track
489
490 AliAODTrack * mother = NULL;
491
492 if (!usedTrack[imother]) {
493
494 usedTrack[imother] = kTRUE;
495
496 AliESDtrack *esdTrack = esd->GetTrack(imother);
497
31fd97b2 498 Double_t p6[3];
499 esdTrack->GetPxPyPz(p6);
cf22b3fc 500
31fd97b2 501 Double_t x6[3];
502 esdTrack->GetXYZ(x6);
cf22b3fc 503
31fd97b2 504 Double_t covKinkMother[21];
505 esdTrack->GetCovarianceXYZPxPyPz(covKinkMother);
cf22b3fc 506
31fd97b2 507 Double_t pid6[10];
508 esdTrack->GetESDpid(pid6);
509
cf22b3fc 510 mother =
511 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
512 esdTrack->GetLabel(),
31fd97b2 513 p6,
cf22b3fc 514 kTRUE,
31fd97b2 515 x6,
cf22b3fc 516 kFALSE,
31fd97b2 517 covKinkMother,
cf22b3fc 518 (Short_t)esdTrack->GetSign(),
519 esdTrack->GetITSClusterMap(),
31fd97b2 520 pid6,
cf22b3fc 521 primary,
4773afc9 522 kTRUE, // check if this is right
cf22b3fc 523 AliAODTrack::kPrimary);
524 primary->AddDaughter(mother);
525 }
526 else {
527 cerr << "Error: event " << iEvent << " kink " << TMath::Abs(ikink)-1
528 << " track " << imother << " has already been used!" << endl;
529 }
530
531 // Add the kink vertex
532 AliESDkink * kink = esd->GetKink(TMath::Abs(ikink)-1);
533
534 AliAODVertex * vkink =
535 new(vertices[jVertices++]) AliAODVertex(kink->GetPosition(),
536 NULL,
537 0.,
538 mother,
539 AliAODVertex::kKink);
540 // Add the daughter track
541
542 AliAODTrack * daughter = NULL;
543
544 if (!usedTrack[idaughter]) {
545
546 usedTrack[idaughter] = kTRUE;
547
548 AliESDtrack *esdTrack = esd->GetTrack(idaughter);
549
31fd97b2 550 Double_t p7[3];
551 esdTrack->GetPxPyPz(p7);
cf22b3fc 552
31fd97b2 553 Double_t x7[3];
554 esdTrack->GetXYZ(x7);
cf22b3fc 555
31fd97b2 556 Double_t covKinkDaughter[21];
557 esdTrack->GetCovarianceXYZPxPyPz(covKinkDaughter);
cf22b3fc 558
31fd97b2 559 Double_t pid7[10];
560 esdTrack->GetESDpid(pid7);
561
cf22b3fc 562 daughter =
563 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
564 esdTrack->GetLabel(),
31fd97b2 565 p7,
cf22b3fc 566 kTRUE,
31fd97b2 567 x7,
cf22b3fc 568 kFALSE,
31fd97b2 569 covKinkDaughter,
cf22b3fc 570 (Short_t)esdTrack->GetSign(),
571 esdTrack->GetITSClusterMap(),
31fd97b2 572 pid7,
cf22b3fc 573 vkink,
4773afc9 574 kTRUE, // check if this is right
cf22b3fc 575 AliAODTrack::kPrimary);
576 vkink->AddDaughter(daughter);
577 }
578 else {
579 cerr << "Error: event " << iEvent << " kink " << TMath::Abs(ikink)-1
580 << " track " << idaughter << " has already been used!" << endl;
581 }
582
583
584 }
585 }
586
587 }
df9db588 588
df9db588 589 }
cf22b3fc 590
df9db588 591
cf22b3fc 592 // Tracks (primary and orphan)
df9db588 593
594 for (Int_t nTrack = 0; nTrack < nTracks; ++nTrack) {
595
596
597 if (usedTrack[nTrack]) continue;
598
599 AliESDtrack *esdTrack = esd->GetTrack(nTrack);
600
31fd97b2 601 Double_t p8[3];
602 esdTrack->GetPxPyPz(p8);
df9db588 603
31fd97b2 604 Double_t x8[3];
605 esdTrack->GetXYZ(x8);
df9db588 606
31fd97b2 607 Double_t covTr[21];
608 esdTrack->GetCovarianceXYZPxPyPz(covTr);
609
610 Double_t pid8[10];
611 esdTrack->GetESDpid(pid8);
cf22b3fc 612
613 Float_t impactXY, impactZ;
614
615 esdTrack->GetImpactParameters(impactXY,impactZ);
616
617 if (impactXY<3) {
618 // track inside the beam pipe
df9db588 619
cf22b3fc 620 primary->AddDaughter(
621 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
df9db588 622 esdTrack->GetLabel(),
31fd97b2 623 p8,
df9db588 624 kTRUE,
31fd97b2 625 x8,
df9db588 626 kFALSE,
31fd97b2 627 covTr,
df9db588 628 (Short_t)esdTrack->GetSign(),
629 esdTrack->GetITSClusterMap(),
31fd97b2 630 pid8,
df9db588 631 primary,
4773afc9 632 kTRUE, // check if this is right
df9db588 633 AliAODTrack::kPrimary)
cf22b3fc 634 );
635 }
636 else {
637 // outside the beam pipe: orphan track
638 new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
639 esdTrack->GetLabel(),
31fd97b2 640 p8,
cf22b3fc 641 kTRUE,
31fd97b2 642 x8,
cf22b3fc 643 kFALSE,
31fd97b2 644 covTr,
cf22b3fc 645 (Short_t)esdTrack->GetSign(),
646 esdTrack->GetITSClusterMap(),
31fd97b2 647 pid8,
cf22b3fc 648 NULL,
4773afc9 649 kFALSE, // check if this is right
cf22b3fc 650 AliAODTrack::kOrphan);
651 }
652 } // end of loop on tracks
653
654
4773afc9 655 // Access to the AOD container of clusters
a9255000 656 TClonesArray &clusters = *(aod->GetClusters());
cf22b3fc 657 Int_t jClusters=0;
658
4773afc9 659 // Calo Clusters
cf22b3fc 660 Int_t nClusters = esd->GetNumberOfCaloClusters();
661
662 for (Int_t iClust=0; iClust<nClusters; ++iClust) {
663
664 AliESDCaloCluster * cluster = esd->GetCaloCluster(iClust);
665
666 Int_t id = cluster->GetID();
667 Int_t label = -1;
668 Float_t energy = cluster->GetClusterEnergy();
31fd97b2 669 Float_t x9[3];
670 cluster->GetGlobalPosition(x9);
cf22b3fc 671 Float_t * covMatrix = NULL;
31fd97b2 672 Float_t * pid9 = NULL;
cf22b3fc 673 AliAODVertex *prodVertex = primary;
674 AliAODTrack *primTrack = NULL;
a9255000 675 Char_t ttype=AliAODCluster::kUndef;
cf22b3fc 676
a9255000 677 if (cluster->IsPHOS()) ttype=AliAODCluster::kPHOSNeutral;
cf22b3fc 678 else if (cluster->IsEMCAL()) {
679
680 if (cluster->GetClusterType() == AliESDCaloCluster::kPseudoCluster)
a9255000 681 ttype = AliAODCluster::kEMCALPseudoCluster;
cf22b3fc 682 else
a9255000 683 ttype = AliAODCluster::kEMCALClusterv1;
cf22b3fc 684
685 }
df9db588 686
a9255000 687 new(clusters[jClusters++]) AliAODCluster(id,
cf22b3fc 688 label,
689 energy,
31fd97b2 690 x9,
cf22b3fc 691 covMatrix,
31fd97b2 692 pid9,
cf22b3fc 693 prodVertex,
694 primTrack,
695 ttype);
696
4773afc9 697 } // end of loop on calo clusters
cf22b3fc 698
699
700 delete [] usedTrack;
701 delete [] usedV0;
702 delete [] usedKink;
703
df9db588 704 // fill the tree for this event
705 aodTree->Fill();
cf22b3fc 706 } // end of event loop
df9db588 707
708 aodTree->GetUserInfo()->Add(aod);
709
710 // close ESD file
711 inFile->Close();
712
713 // write the tree to the specified file
714 outFile = aodTree->GetCurrentFile();
715 outFile->cd();
716 aodTree->Write();
717 outFile->Close();
718
719}