///////////////////////////////////////////////////////////////////////////
#include <TObjArray.h>
-#include <TMap.h>
+#include <TExMap.h>
+#include <TProcessID.h>
#include <AliVTrack.h>
#include <AliESDtrack.h>
fArrTrackN(),
fArrVertex("AliAODVertex",1000),
fArrPairs("AliKFParticle",0),
- fMapStoredVertices(0x0),
fNTracksP(0),
fNTracksN(0),
fIsAOD(kFALSE),
- fEventData()
+ fEventData(),
+ fPID(0x0),
+ fPIDIndex(0)
{
//
// Default Constructor
fArrTrackN(),
fArrVertex("AliAODVertex",1000),
fArrPairs("AliKFParticle",0),
- fMapStoredVertices(0x0),
fNTracksP(0),
fNTracksN(0),
fIsAOD(kFALSE),
- fEventData()
+ fEventData(),
+ fPID(0x0),
+ fPIDIndex(0)
{
//
// Named Constructor
fArrTrackN.Delete();
fArrVertex.Delete();
fArrPairs.Delete();
-
- delete fMapStoredVertices;
}
//______________________________________________
fArrTrackN.Expand(arrN.GetSize());
}
+ TExMap mapStoredVertices;
+ fPIDIndex=TProcessID::GetPIDs()->IndexOf(fPID);
// fill particles
Int_t tracks=0;
for (Int_t itrack=0; itrack<arrP.GetEntriesFast(); ++itrack){
// most particles will be assiciated to the primary vertex ...
AliAODVertex *vtx=track->GetProdVertex();
AliAODVertex *cvertex = 0x0;
- if (fMapStoredVertices->FindObject(vtx)) {
- cvertex = (AliAODVertex*)fMapStoredVertices->GetValue(vtx);
- } else {
- if (fArrVertex.GetSize()<=fArrVertex.GetEntriesFast()) fArrVertex.Expand(2*fArrVertex.GetSize());
- if (vtx){
+ 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);
- fMapStoredVertices->Add(vtx,cvertex);
+ AssignID(cvertex);
+ mapStoredVertices.Add(reinterpret_cast<ULong64_t>(vtx),reinterpret_cast<ULong64_t>(cvertex));
}
}
ctrack->SetProdVertex(cvertex);
// most particles will be assiciated to the primary vertex ...
AliAODVertex *vtx=track->GetProdVertex();
AliAODVertex *cvertex = 0x0;
- if (fMapStoredVertices->FindObject(vtx)) {
- cvertex = (AliAODVertex*)fMapStoredVertices->GetValue(vtx);
- } else {
- if (fArrVertex.GetSize()<=fArrVertex.GetEntriesFast()) fArrVertex.Expand(2*fArrVertex.GetSize());
- if (vtx) {
+ 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);
- fMapStoredVertices->Add(vtx,cvertex);
+ AssignID(cvertex);
+ mapStoredVertices.Add(reinterpret_cast<ULong64_t>(vtx),reinterpret_cast<ULong64_t>(cvertex));
}
}
ctrack->SetProdVertex(cvertex);
}
fArrPairs.Clear(opt);
-
- if (fMapStoredVertices) fMapStoredVertices->Clear();
-
}
//______________________________________________
fArrTrackP.SetClass("AliAODTrack",1000);
fArrTrackN.SetClass("AliAODTrack",1000);
fIsAOD=kTRUE;
- if (!fMapStoredVertices) fMapStoredVertices=new TMap;
}
//______________________________________________
//
for (Int_t i=AliDielectronVarManager::kPairMax; i<AliDielectronVarManager::kNMaxValues;++i) fEventData[i]=data[i];
}
+
+//______________________________________________
+void AliDielectronEvent::AssignID(TObject *obj)
+{
+ //
+ // Custom function to assign a uid to an object with an own process id
+ // to avoid problems buffering the vertices
+ //
+ UInt_t uid=1;
+ if (fPID->GetObjects()) uid=fPID->GetObjects()->GetEntriesFast();
+ uid+=(fPIDIndex<<24);
+ obj->SetBit(kIsReferenced);
+ obj->SetUniqueID(uid);
+ fPID->PutObjectWithID(obj);
+}