- new (fArrTrackP[tracks]) AliAODTrack(*track);
- new (fArrVertexP[tracks]) AliAODVertex(*(track->GetProdVertex()));
+ // buffer track
+ AliAODTrack *ctrack = new (fArrTrackP[tracks]) AliAODTrack(*track);
+
+ // buffer vertex, don't duplicate
+ // most particles will be assiciated to the primary vertex ...
+ AliAODVertex *vtx=track->GetProdVertex();
+ AliAODVertex *cvertex = 0x0;
+ if (vtx){
+ cvertex = reinterpret_cast<AliAODVertex*>(mapStoredVertices.GetValue(reinterpret_cast<ULong64_t>(vtx)));
+ if (!cvertex) {
+ if (mapStoredVertices.Capacity()<=mapStoredVertices.GetSize()) mapStoredVertices.Expand(2*mapStoredVertices.GetSize());
+ if (fArrVertex.GetSize()<=fArrVertex.GetEntriesFast()) fArrVertex.Expand(2*fArrVertex.GetSize());
+ cvertex = new (fArrVertex[fArrVertex.GetEntriesFast()]) AliAODVertex(*vtx);
+ AssignID(cvertex);
+ mapStoredVertices.Add(reinterpret_cast<ULong64_t>(vtx),reinterpret_cast<ULong64_t>(cvertex));
+ }
+ }
+ ctrack->SetProdVertex(cvertex);