X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGDQ%2Fdielectron%2FAliDielectronEvent.cxx;h=91950a6d58e6f33ce783be57689f90d72f0aa553;hb=e72663d5ea704f30a9a1df4852c98d2cb07d29d7;hp=d5b7bf7e138a117f85547b79c0d999f34d38c0c9;hpb=67fd1119b87614660234bcf78e24ec1f214fa802;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGDQ/dielectron/AliDielectronEvent.cxx b/PWGDQ/dielectron/AliDielectronEvent.cxx index d5b7bf7e138..91950a6d58e 100644 --- a/PWGDQ/dielectron/AliDielectronEvent.cxx +++ b/PWGDQ/dielectron/AliDielectronEvent.cxx @@ -26,6 +26,8 @@ Detailed description /////////////////////////////////////////////////////////////////////////// #include +#include +#include #include #include @@ -37,15 +39,16 @@ ClassImp(AliDielectronEvent) AliDielectronEvent::AliDielectronEvent() : TNamed(), - fArrTrackP("AliESDtrack",1000), - fArrTrackN("AliESDtrack",1000), - fArrVertexP("AliAODVertex",1000), - fArrVertexN("AliAODVertex",1000), + fArrTrackP(), + fArrTrackN(), + fArrVertex("AliAODVertex",10), fArrPairs("AliKFParticle",0), fNTracksP(0), fNTracksN(0), fIsAOD(kFALSE), - fEventData() + fEventData(), + fPID(0x0), + fPIDIndex(0) { // // Default Constructor @@ -56,15 +59,16 @@ AliDielectronEvent::AliDielectronEvent() : //______________________________________________ AliDielectronEvent::AliDielectronEvent(const char* name, const char* title) : TNamed(name, title), - fArrTrackP("AliESDtrack",1000), - fArrTrackN("AliESDtrack",1000), - fArrVertexP("AliAODVertex",1000), - fArrVertexN("AliAODVertex",1000), + fArrTrackP(), + fArrTrackN(), + fArrVertex("AliAODVertex",10), fArrPairs("AliKFParticle",0), fNTracksP(0), fNTracksN(0), fIsAOD(kFALSE), - fEventData() + fEventData(), + fPID(0x0), + fPIDIndex(0) { // // Named Constructor @@ -79,8 +83,7 @@ AliDielectronEvent::~AliDielectronEvent() // fArrTrackP.Delete(); fArrTrackN.Delete(); - fArrVertexP.Delete(); - fArrVertexN.Delete(); + fArrVertex.Delete(); fArrPairs.Delete(); } @@ -101,13 +104,13 @@ void AliDielectronEvent::SetTracks(const TObjArray &arrP, const TObjArray &arrN, //check size of the arrays if (fArrTrackP.GetSize()IndexOf(fPID); // fill particles Int_t tracks=0; for (Int_t itrack=0; itrack(arrP.At(itrack)); if (!track) continue; - 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(mapStoredVertices.GetValue(reinterpret_cast(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(vtx),reinterpret_cast(cvertex)); + } + } + ctrack->SetProdVertex(cvertex); ++tracks; } } @@ -137,9 +156,25 @@ void AliDielectronEvent::SetTracks(const TObjArray &arrP, const TObjArray &arrN, } else { AliAODTrack *track=dynamic_cast(arrN.At(itrack)); if (!track) continue; + + //buffer track + AliAODTrack *ctrack = new (fArrTrackN[tracks]) AliAODTrack(*track); - new (fArrTrackN[tracks]) AliAODTrack(*track); - new (fArrVertexN[tracks]) AliAODVertex(*(track->GetProdVertex())); + // 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(mapStoredVertices.GetValue(reinterpret_cast(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(vtx),reinterpret_cast(cvertex)); + } + } + ctrack->SetProdVertex(cvertex); ++tracks; } } @@ -159,29 +194,45 @@ void AliDielectronEvent::Clear(Option_t *opt) for (Int_t i=fArrTrackP.GetEntriesFast()-1; i>=0; --i){ delete fArrTrackP.RemoveAt(i); - delete fArrVertexP.RemoveAt(i); } for (Int_t i=fArrTrackN.GetEntriesFast()-1; i>=0; --i){ delete fArrTrackN.RemoveAt(i); - delete fArrVertexN.RemoveAt(i); + } + + for (Int_t i=0; iGetObjects()) uid=fPID->GetObjects()->GetEntriesFast(); + uid+=(fPIDIndex<<24); + obj->SetBit(kIsReferenced); + obj->SetUniqueID(uid); + fPID->PutObjectWithID(obj); +}