]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronEvent.cxx
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronEvent.cxx
index 3700f43eea2c753f9a8602a8d03b9cce386bfe37..91950a6d58e6f33ce783be57689f90d72f0aa553 100644 (file)
@@ -26,7 +26,8 @@ Detailed description
 ///////////////////////////////////////////////////////////////////////////
 
 #include <TObjArray.h>
-#include <TMap.h>
+#include <TExMap.h>
+#include <TProcessID.h>
 
 #include <AliVTrack.h>
 #include <AliESDtrack.h>
@@ -40,13 +41,14 @@ AliDielectronEvent::AliDielectronEvent() :
   TNamed(),
   fArrTrackP(),
   fArrTrackN(),
-  fArrVertex("AliAODVertex",1000),
+  fArrVertex("AliAODVertex",10),
   fArrPairs("AliKFParticle",0),
-  fMapStoredVertices(0x0),
   fNTracksP(0),
   fNTracksN(0),
   fIsAOD(kFALSE),
-  fEventData()
+  fEventData(),
+  fPID(0x0),
+  fPIDIndex(0)
 {
   //
   // Default Constructor
@@ -59,13 +61,14 @@ AliDielectronEvent::AliDielectronEvent(const char* name, const char* title) :
   TNamed(name, title),
   fArrTrackP(),
   fArrTrackN(),
-  fArrVertex("AliAODVertex",1000),
+  fArrVertex("AliAODVertex",10),
   fArrPairs("AliKFParticle",0),
-  fMapStoredVertices(0x0),
   fNTracksP(0),
   fNTracksN(0),
   fIsAOD(kFALSE),
-  fEventData()
+  fEventData(),
+  fPID(0x0),
+  fPIDIndex(0)
 {
   //
   // Named Constructor
@@ -82,8 +85,6 @@ AliDielectronEvent::~AliDielectronEvent()
   fArrTrackN.Delete();
   fArrVertex.Delete();
   fArrPairs.Delete();
-
-  delete fMapStoredVertices;
 }
 
 //______________________________________________
@@ -108,6 +109,8 @@ void AliDielectronEvent::SetTracks(const TObjArray &arrP, const TObjArray &arrN,
     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){
@@ -127,13 +130,14 @@ void AliDielectronEvent::SetTracks(const TObjArray &arrP, const TObjArray &arrN,
       // 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);
@@ -160,13 +164,14 @@ void AliDielectronEvent::SetTracks(const TObjArray &arrP, const TObjArray &arrN,
       // 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);
@@ -199,22 +204,22 @@ void AliDielectronEvent::Clear(Option_t *opt)
     delete fArrVertex.RemoveAt(i);
   }
   
+  fArrTrackP.ExpandCreateFast(1);
+  fArrTrackN.ExpandCreateFast(1);
+  fArrVertex.ExpandCreateFast(1);
+
   fArrPairs.Clear(opt);
-  
-  if (fMapStoredVertices) fMapStoredVertices->Clear();
-  
 }
 
 //______________________________________________
-void AliDielectronEvent::SetAOD()
+void AliDielectronEvent::SetAOD(Int_t size)
 {
   //
   // use AOD as input
   //
-  fArrTrackP.SetClass("AliAODTrack",1000);
-  fArrTrackN.SetClass("AliAODTrack",1000);
+  fArrTrackP.SetClass("AliAODTrack",size);
+  fArrTrackN.SetClass("AliAODTrack",size);
   fIsAOD=kTRUE;
-  if (!fMapStoredVertices) fMapStoredVertices=new TMap;
 }
 
 //______________________________________________
@@ -236,3 +241,18 @@ void AliDielectronEvent::SetEventData(const Double_t data[AliDielectronVarManage
   //
   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);
+}