Added tests for existence of the arrays which were set to 0
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 May 2006 08:30:22 +0000 (08:30 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 May 2006 08:30:22 +0000 (08:30 +0000)
in the default constructor in the last commit (fixing memory
leaks)

MUON/AliMUONTrack.cxx
MUON/AliMUONTrack.h

index 54204db..2bedb3a 100644 (file)
@@ -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;
@@ -610,6 +628,26 @@ void AliMUONTrack::SetTrackParamAtVertex()
 }
 
   //__________________________________________________________________________
+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*/)
 {
   // Return the "Chi2" to be minimized with Minuit for track fitting,
index eea589a..dc6878a 100644 (file)
@@ -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;}