From: ivana Date: Fri, 19 May 2006 08:30:22 +0000 (+0000) Subject: Added tests for existence of the arrays which were set to 0 X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=a886529951f85992e65d23db6606c7bef4e76ab7 Added tests for existence of the arrays which were set to 0 in the default constructor in the last commit (fixing memory leaks) --- diff --git a/MUON/AliMUONTrack.cxx b/MUON/AliMUONTrack.cxx index 54204db4337..2bedb3a7046 100644 --- a/MUON/AliMUONTrack.cxx +++ b/MUON/AliMUONTrack.cxx @@ -158,26 +158,35 @@ AliMUONTrack::AliMUONTrack (const AliMUONTrack& theMUONTrack) fTrackParamAtVertex = theMUONTrack.fTrackParamAtVertex; // necessary to make a copy of the objects and not only the pointers in TObjArray. - fTrackHitsPtr = new TObjArray(10); - for (Int_t index = 0; index < (theMUONTrack.fTrackHitsPtr)->GetEntriesFast(); index++) { - AliMUONTrackHit *trackHit = new AliMUONTrackHit(*(AliMUONTrackHit*)(theMUONTrack.fTrackHitsPtr)->At(index)); - fTrackHitsPtr->Add(trackHit); + fTrackHitsPtr = 0; + if (theMUONTrack.fTrackHitsPtr) { + fTrackHitsPtr = new TObjArray(10); + for (Int_t index = 0; index < (theMUONTrack.fTrackHitsPtr)->GetEntriesFast(); index++) { + AliMUONTrackHit *trackHit = new AliMUONTrackHit(*(AliMUONTrackHit*)(theMUONTrack.fTrackHitsPtr)->At(index)); + fTrackHitsPtr->Add(trackHit); + } + fTrackHitsPtr->SetOwner(); // nedeed for deleting TClonesArray } - fTrackHitsPtr->SetOwner(); // nedeed for deleting TClonesArray // necessary to make a copy of the objects and not only the pointers in TClonesArray. - fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10); - for (Int_t index = 0; index < (theMUONTrack.fTrackParamAtHit)->GetEntriesFast(); index++) { - {new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) - AliMUONTrackParam(*(AliMUONTrackParam*)(theMUONTrack.fTrackParamAtHit)->At(index));} - } + fTrackParamAtHit = 0; + if (theMUONTrack.fTrackParamAtHit) { + fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10); + for (Int_t index = 0; index < (theMUONTrack.fTrackParamAtHit)->GetEntriesFast(); index++) { + {new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) + AliMUONTrackParam(*(AliMUONTrackParam*)(theMUONTrack.fTrackParamAtHit)->At(index));} + } + } // necessary to make a copy of the objects and not only the pointers in TClonesArray. - fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10); - for (Int_t index = 0; index < (theMUONTrack.fHitForRecAtHit)->GetEntriesFast(); index++) { - {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) - AliMUONHitForRec(*(AliMUONHitForRec*)(theMUONTrack.fHitForRecAtHit)->At(index));} - } + fHitForRecAtHit = 0; + if (theMUONTrack.fHitForRecAtHit) { + fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10); + for (Int_t index = 0; index < (theMUONTrack.fHitForRecAtHit)->GetEntriesFast(); index++) { + {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) + AliMUONHitForRec(*(AliMUONHitForRec*)(theMUONTrack.fHitForRecAtHit)->At(index));} + } + } fNTrackHits = theMUONTrack.fNTrackHits; fFitMCS = theMUONTrack.fFitMCS; @@ -207,26 +216,35 @@ AliMUONTrack & AliMUONTrack::operator=(const AliMUONTrack& theMUONTrack) fTrackParamAtVertex = theMUONTrack.fTrackParamAtVertex; // necessary to make a copy of the objects and not only the pointers in TObjArray. - fTrackHitsPtr = new TObjArray(10); - for (Int_t index = 0; index < (theMUONTrack.fTrackHitsPtr)->GetEntriesFast(); index++) { - AliMUONTrackHit *trackHit = new AliMUONTrackHit(*(AliMUONTrackHit*)(theMUONTrack.fTrackHitsPtr)->At(index)); - fTrackHitsPtr->Add(trackHit); - } - fTrackHitsPtr->SetOwner(); // nedeed for deleting TClonesArray + fTrackHitsPtr = 0; + if (theMUONTrack.fTrackHitsPtr) { + fTrackHitsPtr = new TObjArray(10); + for (Int_t index = 0; index < (theMUONTrack.fTrackHitsPtr)->GetEntriesFast(); index++) { + AliMUONTrackHit *trackHit = new AliMUONTrackHit(*(AliMUONTrackHit*)(theMUONTrack.fTrackHitsPtr)->At(index)); + fTrackHitsPtr->Add(trackHit); + } + fTrackHitsPtr->SetOwner(); // nedeed for deleting TClonesArray + } // necessary to make a copy of the objects and not only the pointers in TClonesArray. - fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10); - for (Int_t index = 0; index < (theMUONTrack.fTrackParamAtHit)->GetEntriesFast(); index++) { - {new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) - AliMUONTrackParam(*(AliMUONTrackParam*)(theMUONTrack.fTrackParamAtHit)->At(index));} - } + fTrackParamAtHit = 0; + if (theMUONTrack.fTrackParamAtHit) { + fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10); + for (Int_t index = 0; index < (theMUONTrack.fTrackParamAtHit)->GetEntriesFast(); index++) { + {new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) + AliMUONTrackParam(*(AliMUONTrackParam*)(theMUONTrack.fTrackParamAtHit)->At(index));} + } + } // necessary to make a copy of the objects and not only the pointers in TClonesArray. - fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10); - for (Int_t index = 0; index < (theMUONTrack.fHitForRecAtHit)->GetEntriesFast(); index++) { - {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) - AliMUONHitForRec(*(AliMUONHitForRec*)(theMUONTrack.fHitForRecAtHit)->At(index));} - } + fHitForRecAtHit = 0; + if (theMUONTrack.fHitForRecAtHit) { + fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10); + for (Int_t index = 0; index < (theMUONTrack.fHitForRecAtHit)->GetEntriesFast(); index++) { + {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) + AliMUONHitForRec(*(AliMUONHitForRec*)(theMUONTrack.fHitForRecAtHit)->At(index));} + } + } fNTrackHits = theMUONTrack.fNTrackHits; fFitMCS = theMUONTrack.fFitMCS; @@ -609,6 +627,26 @@ void AliMUONTrack::SetTrackParamAtVertex() trackParam->SetNonBendingCoor(0.0); } + //__________________________________________________________________________ +void AliMUONTrack::AddTrackParamAtHit(const AliMUONTrackParam *trackParam) +{ + // Add track paremeters + + if (!fTrackParamAtHit) + fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10); + + new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) AliMUONTrackParam(*trackParam); +} + + //__________________________________________________________________________ +void AliMUONTrack::AddHitForRecAtHit(const AliMUONHitForRec *hitForRec) +{ + if (!fHitForRecAtHit) + fHitForRecAtHit = new TClonesArray("AliMUONHitForRec",10); + + new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) AliMUONHitForRec(*hitForRec); +} + //__________________________________________________________________________ void TrackChi2(Int_t &NParam, Double_t * /*Gradient*/, Double_t &Chi2, Double_t *Param, Int_t /*Flag*/) { diff --git a/MUON/AliMUONTrack.h b/MUON/AliMUONTrack.h index eea589a5765..dc6878a3b33 100644 --- a/MUON/AliMUONTrack.h +++ b/MUON/AliMUONTrack.h @@ -48,10 +48,8 @@ class AliMUONTrack : public TObject TClonesArray *GetHitForRecAtHit(void) const {return fHitForRecAtHit;} void ResetTrackParamAtHit(void) { fTrackParamAtHit->Delete(); } void ResetHitForRecAtHit(void) { fHitForRecAtHit->Delete(); } - void AddTrackParamAtHit(const AliMUONTrackParam *trackParam) - {new ((*fTrackParamAtHit)[fTrackParamAtHit->GetEntriesFast()]) AliMUONTrackParam(*trackParam);} - void AddHitForRecAtHit(const AliMUONHitForRec *hitForRec) - {new ((*fHitForRecAtHit)[fHitForRecAtHit->GetEntriesFast()]) AliMUONHitForRec(*hitForRec);} + void AddTrackParamAtHit(const AliMUONTrackParam *trackParam); + void AddHitForRecAtHit(const AliMUONHitForRec *hitForRec); TObjArray* GetTrackHitsPtr(void) const {return fTrackHitsPtr;} Int_t GetNTrackHits(void) const {return fNTrackHits;}