1 //-------------------------------------------------------------------------
2 // Task for the Analysis Framework
3 // Updates the an already created AOD with the PWG2 information taken from
5 // - Puts the per-track information into the AliPWG2AODTrack container,
6 // together with the link to the original AliAODTrack
8 // Author: Adam Kisiel, OSU, Adam.Kisiel@cern.ch
9 //-------------------------------------------------------------------------
14 #include "AliAnalysisTaskPWG2AODUpdate.h"
15 #include "AliAnalysisManager.h"
16 #include "AliESDEvent.h"
17 #include "AliAODEvent.h"
18 #include "AliESDtrack.h"
19 #include "AliESDVertex.h"
21 #include "AliPWG2AODTrack.h"
23 ClassImp(AliAnalysisTaskPWG2AODUpdate)
25 ////////////////////////////////////////////////////////////////////////
27 AliAnalysisTaskPWG2AODUpdate::AliAnalysisTaskPWG2AODUpdate():
32 // Default constructor
35 AliAnalysisTaskPWG2AODUpdate::AliAnalysisTaskPWG2AODUpdate(const char* name):
36 AliAnalysisTaskSE(name),
41 // Default constructor
42 DefineInput (0, TChain::Class());
43 DefineOutput(0, TTree::Class());
46 AliAnalysisTaskPWG2AODUpdate::AliAnalysisTaskPWG2AODUpdate(const AliAnalysisTaskPWG2AODUpdate &task):
55 fPWG2AODTracks = task.fPWG2AODTracks;
58 AliAnalysisTaskPWG2AODUpdate& AliAnalysisTaskPWG2AODUpdate::operator=(const AliAnalysisTaskPWG2AODUpdate &task)
61 if (&task == this) return *this;
62 TTask::operator=(task);
66 fPWG2AODTracks = task.fPWG2AODTracks;
71 void AliAnalysisTaskPWG2AODUpdate::UserCreateOutputObjects()
73 // Get links to input and output containters
76 fPWG2AODTracks = new TClonesArray("AliPWG2AODTrack", 0);
77 const char *name = "pwg2aodtracks";
78 fPWG2AODTracks->SetName(name);
80 AddAODBranch("TClonesArray", &fPWG2AODTracks);
83 void AliAnalysisTaskPWG2AODUpdate::UserExec(Option_t */*option*/)
85 // Execute analysis for current event
87 fESD = dynamic_cast<AliESDEvent *> (InputEvent());
88 if (!fESD) { printf ("No input ESD !!! Not adding PWG2 information\n"); }
90 if (!fAOD) { printf ("No output AOD !!! Not adding PWG2 information\n"); }
94 Double_t tpcentrancepoint[3];
95 Double_t tpcexitpoint[3];
100 for (Int_t i = 0; i < 3; i++) { tpcentrancepoint[i] = 0.; tpcexitpoint[i] = 0; }
102 // Get primary vertex
103 const AliESDVertex *vtx = fESD->GetPrimaryVertex();
105 vtx->GetXYZ(pos); // position
107 // Tracks (primary and orphan)
108 Int_t nTracks = fAOD->GetNTracks();
110 printf("NUMBER OF AOD TRACKS %5d\n", nTracks);
112 // Must start from scratch for each event
113 fPWG2AODTracks->Delete();
114 fPWG2AODTracks->Expand(nTracks);
115 TClonesArray &tPWG2AODTracks = *fPWG2AODTracks;
117 // Loop over AOD tracks
118 for (Int_t nTrack = 0; nTrack < nTracks; ++nTrack) {
119 AliAODTrack *aodTrack = fAOD->GetTrack(nTrack);
120 Short_t trackId = aodTrack->GetID();
122 // Get the corresponding ESD track
123 AliESDtrack *esdTrack = fESD->GetTrack(trackId);
125 esdTrack->GetPxPyPz(p);
127 if (TMath::Abs(p[0] - aodTrack->Px())>0.000000001) {
128 printf("Got different momenta !!! %f %f\n", p[0], aodTrack->Px());
131 sharemap = esdTrack->GetTPCSharedMap();
132 clustermap = esdTrack->GetTPCClusterMap();
134 esdTrack->GetInnerXYZ(tpcentrancepoint);
135 tpcentrancepoint[2] -= pos[2];
137 esdTrack->GetOuterXYZ(tpcexitpoint);
138 tpcexitpoint[2] -= pos[2];
140 // Add the PWG2 info into the AOD
141 new (tPWG2AODTracks[pTracks++]) AliPWG2AODTrack(tpcentrancepoint,
148 printf("PWG2=%d\n", fPWG2AODTracks->GetEntries());