Memory leaks fixed (R. Tieulent)
authorauras <auras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Nov 2012 09:01:00 +0000 (09:01 +0000)
committerauras <auras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Nov 2012 09:01:00 +0000 (09:01 +0000)
MFT/AliMFT.cxx
MFT/AliMFTCluster.h
MFT/AliMFTClusterFinder.cxx
MFT/AliMFTClusterFinder.h
MFT/AliMFTPlane.cxx
MFT/AliMFTPlane.h
MFT/AliMFTReconstructor.cxx
MFT/AliMFTReconstructor.h
MFT/AliMFTSegmentation.cxx
MFT/AliMFTSegmentation.h

index cc95c33..f20a504 100644 (file)
@@ -605,8 +605,6 @@ void AliMFT::Hits2SDigitsLocal(TClonesArray *hits, const TObjArray *pSDig, Int_t
 
 void AliMFT::MakeBranch(Option_t *option) {
 
-  printf("AliMFT::MakeBranch(...)\n");
-
   // Create Tree branches 
   AliDebug(1, Form("Start with option= %s.",option));
   
@@ -688,7 +686,7 @@ void AliMFT::SetTreeAddress() {
 
 void AliMFT::SetGeometry() {
 
-  printf("AliMFT::SetGeometry\n");
+  AliInfo("AliMFT::SetGeometry\n");
 
   fSegmentation = new AliMFTSegmentation(fNameGeomFile.Data());
 
index 7b47ad8..7015349 100644 (file)
@@ -28,12 +28,12 @@ public:
   AliMFTCluster();
   AliMFTCluster(const AliMFTCluster&);
   AliMFTCluster& operator=(const AliMFTCluster&);
-  virtual ~AliMFTCluster() { fDigitsInCluster->Delete(); delete fDigitsInCluster; }
-
-  virtual void Clear(const Option_t* /*opt*/) { fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster = 0x0; }
+  virtual ~AliMFTCluster() { if(fDigitsInCluster){fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster=NULL;}}
+  
+  virtual void Clear(const Option_t* /*opt*/) { if(fDigitsInCluster) {fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster = 0x0;} }
   
   void SetXYZ(Double_t x, Double_t y, Double_t z) { fX=x; fY=y; fZ=z; }
-
+  
   void SetX(Double_t x) { if(fIsClusterEditable) fX = x; }
   void SetY(Double_t y) { if(fIsClusterEditable) fY = y; }
   void SetZ(Double_t z) { if(fIsClusterEditable) fZ = z; }
index 0a8165a..11ecb66 100644 (file)
@@ -53,19 +53,40 @@ AliMFTClusterFinder::AliMFTClusterFinder() :
   
   for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) fClustersPerPlane[iPlane] = NULL;
   fDigitsInCluster = new TClonesArray("AliMFTDigit", fNMaxDigitsPerCluster);
+  fDigitsInCluster -> SetOwner(kTRUE);
 
 }
 
 //====================================================================================================================================================
 
 AliMFTClusterFinder::~AliMFTClusterFinder() {
-
+  
   AliDebug(1, "Deleting AliMFTClusterFinder...");
+  
+  for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) {
+    if (fClustersPerPlane[iPlane]) fClustersPerPlane[iPlane]->Delete(); delete fClustersPerPlane[iPlane]; fClustersPerPlane[iPlane] = 0x0;
+  }
+  if (fDigitsInCluster) fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster = NULL;
+  delete fSegmentation; fSegmentation=NULL;
+  
+  AliDebug(1, "... done!");
+  
+}
 
-  for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) delete fClustersPerPlane[iPlane];
+//====================================================================================================================================================
 
+void AliMFTClusterFinder::Clear(const Option_t* /*opt*/) {
+  
+  AliDebug(1, "Clearing AliMFTClusterFinder...");
+  
+  for (Int_t iPlane=0; iPlane<fNMaxPlanes; iPlane++) {
+    if(fClustersPerPlane[iPlane]) fClustersPerPlane[iPlane]->Clear("C"); 
+  }
+  if(fDigitsInCluster) fDigitsInCluster->Clear("C");   
+  fSegmentation->Clear("C"); 
+  
   AliDebug(1, "... done!");
-
+  
 }
 
 //====================================================================================================================================================
@@ -148,6 +169,7 @@ void AliMFTClusterFinder::DigitsToClusters(const TObjArray *pDigitList) {
          myDigitList->Compress();
          iDig--;
          new ((*fClustersPerPlane[iPlane])[fClustersPerPlane[iPlane]->GetEntries()]) AliMFTCluster(*newCluster);
+               delete newCluster;
        }
 
       }   // end of cycle over the digits
@@ -222,6 +244,8 @@ void AliMFTClusterFinder::CreateClusters() {
   for(Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
     AliDebug(1, Form("plane %02d", iPlane));
     fClustersPerPlane[iPlane] = new TClonesArray("AliMFTCluster");
+    fClustersPerPlane[iPlane] -> SetOwner(kTRUE);
+
   }
 
 }
index 56acf03..21958a3 100644 (file)
@@ -30,7 +30,7 @@ public:
 
   AliMFTClusterFinder();
   ~AliMFTClusterFinder();
-
+  virtual void Clear(const Option_t* /*opt*/);
   void Init(const Char_t *nameGeomFile);
   
   void MakeClusterBranch(TTree *treeCluster);
index be9ac7a..09d7d1e 100644 (file)
@@ -90,14 +90,20 @@ AliMFTPlane::AliMFTPlane(const Char_t *name, const Char_t *title):
   fEquivalentSilicon(0),
   fEquivalentSiliconBeforeFront(0),
   fEquivalentSiliconBeforeBack(0),
-  fActiveElements(new TClonesArray("THnSparseC")),
-  fReadoutElements(new TClonesArray("THnSparseC")),
-  fSupportElements(new TClonesArray("THnSparseC")),
+  fActiveElements(0),
+  fReadoutElements(0),
+  fSupportElements(0),
   fHasPixelRectangularPatternAlongY(kFALSE)
 {
 
   // constructor
-
+  fActiveElements  = new TClonesArray("THnSparseC");
+  fReadoutElements = new TClonesArray("THnSparseC");
+  fSupportElements = new TClonesArray("THnSparseC");
+  fActiveElements->SetOwner(kTRUE);
+  fReadoutElements->SetOwner(kTRUE);
+  fSupportElements->SetOwner(kTRUE);
+  
 }
 
 //====================================================================================================================================================
@@ -119,18 +125,49 @@ AliMFTPlane::AliMFTPlane(const AliMFTPlane& plane):
   fEquivalentSilicon(plane.fEquivalentSilicon),
   fEquivalentSiliconBeforeFront(plane.fEquivalentSiliconBeforeFront),
   fEquivalentSiliconBeforeBack(plane.fEquivalentSiliconBeforeBack),
-  fActiveElements(new TClonesArray("THnSparseC")),
-  fReadoutElements(new TClonesArray("THnSparseC")),
-  fSupportElements(new TClonesArray("THnSparseC")),
-  fHasPixelRectangularPatternAlongY(plane.fHasPixelRectangularPatternAlongY)
+fActiveElements(0),
+fReadoutElements(0),
+fSupportElements(0),
+fHasPixelRectangularPatternAlongY(plane.fHasPixelRectangularPatternAlongY)
 {
 
   // copy constructor
+  fActiveElements  = new TClonesArray(*(plane.fActiveElements));
+  fActiveElements  -> SetOwner(kTRUE);
+  fReadoutElements = new TClonesArray(*(plane.fReadoutElements));
+  fReadoutElements -> SetOwner(kTRUE);
+  fSupportElements = new TClonesArray(*(plane.fSupportElements));
+  fSupportElements -> SetOwner(kTRUE);
+
+       
+}
+
+//====================================================================================================================================================
+
+AliMFTPlane::~AliMFTPlane() {
+
+  AliInfo("Delete AliMFTPlane");
+  if(fActiveElements) fActiveElements->Delete();
+  delete fActiveElements; 
+  if(fReadoutElements) fReadoutElements->Delete();
+  delete fReadoutElements; 
+  if(fSupportElements) fSupportElements->Delete();
+  delete fSupportElements; 
+
+}
+
+//====================================================================================================================================================
+
+void AliMFTPlane::Clear(const Option_t* /*opt*/) {
+
+  AliInfo("Clear AliMFTPlane");
+  if(fActiveElements) fActiveElements->Delete();
+  delete fActiveElements; fActiveElements=NULL;
+  if(fReadoutElements) fReadoutElements->Delete();
+  delete fReadoutElements;  fReadoutElements=NULL; 
+  if(fSupportElements) fSupportElements->Delete();
+  delete fSupportElements;   fSupportElements=NULL;
 
-  *fActiveElements  = *plane.fActiveElements;
-  *fReadoutElements = *plane.fReadoutElements;
-  *fSupportElements = *plane.fSupportElements;
-  
 }
 
 //====================================================================================================================================================
@@ -138,13 +175,16 @@ AliMFTPlane::AliMFTPlane(const AliMFTPlane& plane):
 AliMFTPlane& AliMFTPlane::operator=(const AliMFTPlane& plane) {
 
   // Assignment operator
-
+  
   // check assignement to self
   if (this != &plane) {
-
+    
     // base class assignement
     TNamed::operator=(plane);
     
+    // clear memory
+    Clear("");
+    
     fPlaneNumber                      = plane.fPlaneNumber;
     fZCenter                          = plane.fZCenter; 
     fRMinSupport                      = plane.fRMinSupport; 
@@ -160,12 +200,16 @@ AliMFTPlane& AliMFTPlane::operator=(const AliMFTPlane& plane) {
     fEquivalentSilicon                = plane.fEquivalentSilicon;
     fEquivalentSiliconBeforeFront     = plane.fEquivalentSiliconBeforeFront;
     fEquivalentSiliconBeforeBack      = plane.fEquivalentSiliconBeforeBack;
-    *fActiveElements                  = *plane.fActiveElements;
-    *fReadoutElements                 = *plane.fReadoutElements;
-    *fSupportElements                 = *plane.fSupportElements;
+    fActiveElements = new TClonesArray(*(plane.fActiveElements));
+    fActiveElements -> SetOwner(kTRUE);
+    fReadoutElements = new TClonesArray(*(plane.fReadoutElements));
+    fReadoutElements -> SetOwner(kTRUE);
+    fSupportElements = new TClonesArray(*(plane.fSupportElements));
+    fSupportElements -> SetOwner(kTRUE);
     fHasPixelRectangularPatternAlongY = plane.fHasPixelRectangularPatternAlongY;
-  }
 
+  }
+  
   return *this;
   
 }
index fc2384d..c0c96d8 100644 (file)
@@ -33,9 +33,10 @@ public:
   AliMFTPlane(const Char_t *name, const Char_t *title);
   AliMFTPlane(const AliMFTPlane& pt);
   AliMFTPlane& operator=(const AliMFTPlane &source);
-
-  virtual ~AliMFTPlane() {};  // destructor
-
+  
+  virtual ~AliMFTPlane();  // destructor
+  virtual void Clear(const Option_t* /*opt*/);
+  
   Bool_t Init(Int_t    planeNumber,
              Double_t zCenter, 
              Double_t rMin, 
index 8d955df..5d0716a 100644 (file)
@@ -44,16 +44,36 @@ AliMFTReconstructor::AliMFTReconstructor():
 
 //====================================================================================================================================================
 
-AliMFTReconstructor::~AliMFTReconstructor(){
-
+AliMFTReconstructor::~AliMFTReconstructor() {
+  
   // destructor
-
+  
   if (fDigits) {
+    for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
+      if (fDigits->At(iPlane)) fDigits->At(iPlane)->Delete();
+    }
     fDigits->Delete();
     delete fDigits;
     fDigits=0;
   }
+  
+}
 
+//====================================================================================================================================================
+
+void AliMFTReconstructor::Clear(const Option_t* /*opt*/) {
+       
+  // Clear arrays
+  
+  if (fDigits) {
+    for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
+      if (fDigits->At(iPlane)) ((TClonesArray*)fDigits->At(iPlane))->Delete();
+    }
+    fDigits->Delete();
+    delete fDigits;
+    fDigits = NULL;
+  }
+  
 }
 
 //====================================================================================================================================================
@@ -66,10 +86,13 @@ void AliMFTReconstructor::Init() {
 
   fDigits = new TObjArray(fNPlanes);
   fDigits->SetOwner(kTRUE);
-  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) fDigits->AddAt(new TClonesArray("AliMFTDigit"),iPlane);
-
+  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
+    fDigits->AddAt(new TClonesArray("AliMFTDigit"),iPlane);
+    ((TClonesArray*)fDigits->At(iPlane))->SetOwner(kTRUE);
+  }
+  
   AliInfo("    ************* Using the MFT reconstructor! ****** ");
-
+  
   return;
 
 }
@@ -130,7 +153,7 @@ void AliMFTReconstructor::Reconstruct(TTree *digitsTree, TTree *clustersTree) co
 
   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
     AliDebug(1, Form("fDigits->At(%d)->Clear()",iPlane));
-    fDigits->At(iPlane)->Clear();
+    ((TClonesArray*)fDigits->At(iPlane))->Delete();
   }
 
 }
index d0ec953..268ed3c 100644 (file)
@@ -28,11 +28,12 @@ public:
 
   AliMFTReconstructor();
   virtual ~AliMFTReconstructor();
+  virtual void Clear(const Option_t* /*opt*/);
   virtual void Init();
-
+  
   virtual void ResetDigits(); 
   virtual void ResetDigits(Int_t plane);
-
+  
   virtual void  Reconstruct(TTree *digitsTree, TTree *clustersTree) const; 
   virtual void  Reconstruct(AliRawReader* /*rawdata*/, TTree* /*clustersTree*/) const { AliInfo("Not implemented"); } 
 
index 675fbc5..5eeecc5 100644 (file)
@@ -45,11 +45,13 @@ AliMFTSegmentation::AliMFTSegmentation():
 
 AliMFTSegmentation::AliMFTSegmentation(const Char_t *nameGeomFile): 
   TObject(),
-  fMFTPlanes(new TClonesArray("AliMFTPlane", fNMaxPlanes))
+  fMFTPlanes(0x0)
 { 
-
+  
   // constructor
-
+  
+  fMFTPlanes = new TClonesArray("AliMFTPlane", fNMaxPlanes);
+  fMFTPlanes -> SetOwner(kTRUE);
   Float_t zCenter, rMin, rMax, pixelSizeX, pixelSizeY, thicknessActive, thicknessSupport, thicknessReadout;
   Float_t equivalentSilicon, equivalentSiliconBeforeFront, equivalentSiliconBeforeBack, hasPixelRectangularPatternAlongY;
 
@@ -78,7 +80,7 @@ AliMFTSegmentation::AliMFTSegmentation(const Char_t *nameGeomFile):
 
     // Create new plane
 
-    printf("Setting segmentation for MFT plane #%02d\n", iPlane);
+    AliInfo(Form("Setting segmentation for MFT plane #%02d\n", iPlane));
 
     geomNtuple -> GetEntry(iPlane);
     zCenter = TMath::Abs(zCenter);
@@ -102,13 +104,33 @@ AliMFTSegmentation::AliMFTSegmentation(const Char_t *nameGeomFile):
     plane -> CreateStructure();
     
     new ((*fMFTPlanes)[fMFTPlanes->GetEntries()]) AliMFTPlane(*plane);
-
+    delete plane;
+    
   }
   
   delete geomFile;
 
-  printf("MFT segmentation set!\n");
+  AliInfo("MFT segmentation set!\n");
+
+}
+
+//====================================================================================================================================================
+
+AliMFTSegmentation::~AliMFTSegmentation() {
+
+  if (fMFTPlanes) fMFTPlanes->Delete();
+  delete fMFTPlanes; 
+  
+}
 
+//====================================================================================================================================================
+
+void AliMFTSegmentation::Clear(const Option_t* /*opt*/) {
+
+  if (fMFTPlanes) fMFTPlanes->Delete();
+  delete fMFTPlanes; 
+  fMFTPlanes = NULL;
+  
 }
 
 //====================================================================================================================================================
index 5072bae..df8f270 100644 (file)
@@ -28,8 +28,9 @@ public:
   
   AliMFTSegmentation();
   AliMFTSegmentation(const Char_t *nameGeomFile);
-
-  virtual ~AliMFTSegmentation() {}
+  
+  virtual ~AliMFTSegmentation();
+  virtual void Clear(const Option_t* /*opt*/);
 
   THnSparseC* GetDetElem(Int_t detElemID) const;