]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliMCEvent.cxx
fixing SEGV in case of switched of TR
[u/mrichter/AliRoot.git] / STEER / AliMCEvent.cxx
index ef0db494c35e7687e12f3253a0b74fbaa1961c98..fe1775601d4024d6a9a45aedc71f1c1408e74270 100644 (file)
@@ -65,7 +65,7 @@ AliMCEvent::AliMCEvent(const AliMCEvent& mcEvnt) :
     fTmpTreeTR(0),
     fTmpFileTR(0),
     fNprimaries(-1),
-    fNparticles(-1) 
+    fNparticles(-1)
 { 
 // Copy constructor
 }
@@ -106,10 +106,11 @@ void AliMCEvent::ConnectTreeK (TTree* tree)
     // This is a cache for the TParticles converted to MCParticles on user request
     if (fMCParticleMap) {
        fMCParticleMap->Clear();
-       if (fNparticles>0) fMCParticleMap->Expand(fNparticles);}
+       fMCParticles->Delete();
+       if (fNparticles>0) fMCParticleMap->Expand(fNparticles);
+    }
     else
        fMCParticleMap = new TRefArray(fNparticles);
-
 }
 
 void AliMCEvent::ConnectTreeTR (TTree* tree)
@@ -154,17 +155,16 @@ Int_t AliMCEvent::GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*&
 void AliMCEvent::Clean()
 {
     // Clean-up before new trees are connected
-    
     if (fHeader) {
        delete fHeader;
        fHeader = 0;
     }
-    
-    delete fStack;
+
+    delete fStack; fStack = 0;
 
     // Clear TR
     if (fTRBuffer) {
-       fTRBuffer->Clear();
+       fTRBuffer->Delete();
        delete fTRBuffer;
        fTRBuffer = 0;
     }
@@ -173,10 +173,13 @@ void AliMCEvent::Clean()
 void AliMCEvent::FinishEvent()
 {
   // Clean-up after event
-  fStack->Reset(0);
-  fMCParticles->Delete();
-  fMCParticleMap->Delete();
-  fTrackReferences->Clear();
+  //    
+    fStack->Reset(0);
+    fMCParticles->Delete();
+    fMCParticleMap->Clear();
+    if (fTRBuffer)
+      fTRBuffer->Delete();
+    fTrackReferences->Delete();
 }
 
 
@@ -374,7 +377,7 @@ void AliMCEvent::ReorderAndExpandTreeTR()
                    } // hits
                } // branches
                fTmpTreeTR->Fill();
-               fTRBuffer->Clear();
+               fTRBuffer->Delete();
                ifills++;
            } // daughters
        } // has hits
@@ -411,7 +414,7 @@ void AliMCEvent::ReorderAndExpandTreeTR()
        } // entries
        it++;
        fTmpTreeTR->Fill();
-       fTRBuffer->Clear();
+       fTRBuffer->Delete();
        ifills++;
     } // tracks
     // Check
@@ -474,7 +477,7 @@ AliMCParticle* AliMCEvent::GetTrack(Int_t i) const
            } // loop over track references for entry i
        } // if TreeTR available
        Int_t nentries = fMCParticles->GetEntriesFast();
-       new ((*fMCParticles)[nentries]) AliMCParticle(particle, rarray);
+       new ((*fMCParticles)[nentries]) AliMCParticle(particle, rarray, i);
        mcParticle = dynamic_cast<AliMCParticle*>((*fMCParticles)[nentries]);
        fMCParticleMap->AddAt(mcParticle, i);
     } else {