void AliMCEvent::FinishEvent()
{
- // Clean-up after event
- fStack->Reset(0);
- fMCParticles->Delete();
- fTrackReferences->Clear();
+ // Clean-up after event
+ fStack->Reset(0);
+ fMCParticles->Delete();
+ fMCParticleMap->Delete();
+ fTrackReferences->Clear();
}
TClonesArray *trefs = 0;
Int_t ntref = 0;
TRefArray *rarray = 0;
-
// Out of range check
if (i < 0 || i >= fNparticles) {
AliWarning(Form("AliMCEvent::GetEntry: Index out of range"));
}
-
//
// First check of the MC Particle has been already cached
if(!fMCParticleMap->At(i)) {
nen++;
} // loop over track references for entry i
} // if TreeTR available
-
Int_t nentries = fMCParticles->GetEntriesFast();
new ((*fMCParticles)[nentries]) AliMCParticle(particle, rarray);
mcParticle = dynamic_cast<AliMCParticle*>((*fMCParticles)[nentries]);
} else {
mcParticle = dynamic_cast<AliMCParticle*>(fMCParticleMap->At(i));
}
- delete rarray;
return mcParticle;
}
{
// Constructor
if (rarray != 0) {
- fNTrackRef = fTrackReferences->GetEntriesFast();
+ fNTrackRef = fTrackReferences->GetEntriesFast();
}
}
AliMCParticle::AliMCParticle(const AliMCParticle& mcPart) :
AliVParticle(mcPart),
- fParticle(0)
+ fParticle(0),
+ fTrackReferences(0),
+ fNTrackRef(0)
{
// Copy constructor
}
AliMCParticle& AliMCParticle::operator=(const AliMCParticle& mcPart)
-{ if (this!=&mcPart) {
- AliVParticle::operator=(mcPart);
+{
+
+ if (this!=&mcPart) {
+ AliVParticle::operator=(mcPart);
}
return *this;
}
+
+AliMCParticle::~AliMCParticle()
+{
+ // delete the track references passed externally
+ // fParticle should be handled by the user
+ // AliStack in case of AliMCEventHandler
+ if(fTrackReferences){
+ delete fTrackReferences;
+ fTrackReferences = 0;
+ }
+}
+
+
+
public:
AliMCParticle();
AliMCParticle(TParticle* part, TRefArray* rarray = 0);
- virtual ~AliMCParticle() {}
+ virtual ~AliMCParticle();
AliMCParticle(const AliMCParticle& mcPart);
AliMCParticle& operator=(const AliMCParticle& mcPart);
// Track References
Int_t GetNumberOfTrackReferences() {return fNTrackRef;}
AliTrackReference* GetTrackReference(Int_t i)
- {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
+ {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
private:
TParticle *fParticle; // The wrapped TParticle
TRefArray *fTrackReferences; // Reference array to track references