From 07d2587bd6331e41f62b38303ea3c3acba78b496 Mon Sep 17 00:00:00 2001 From: auras Date: Fri, 25 Apr 2014 02:34:55 +0200 Subject: [PATCH] Memory leak fixed in AliMFTAnalysisTools --- MFT/AliMFTAnalysisTools.cxx | 64 +++++++++++++++++++++---------------- MFT/AliMFTTrackerMU.cxx | 2 +- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/MFT/AliMFTAnalysisTools.cxx b/MFT/AliMFTAnalysisTools.cxx index 7782fde3d30..abce117eba0 100644 --- a/MFT/AliMFTAnalysisTools.cxx +++ b/MFT/AliMFTAnalysisTools.cxx @@ -208,8 +208,10 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(AliAODDimuon *dimuon, Double_t *pca, Do TObjArray *muons = new TObjArray(); muons -> Add(dimuon->GetMu(0)); muons -> Add(dimuon->GetMu(1)); - - return CalculatePCA(muons, pca, pcaQuality, kinem); + + Bool_t result = CalculatePCA(muons, pca, pcaQuality, kinem); + delete muons; + return result; } @@ -224,7 +226,7 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double } Double_t fXPointOfClosestApproach=0, fYPointOfClosestApproach=0, fZPointOfClosestApproach=0; - + AliAODTrack *muon[AliMFTConstants::fNMaxMuonsForPCA] = {0}; AliMUONTrackParam *param[AliMFTConstants::fNMaxMuonsForPCA] = {0}; @@ -232,7 +234,10 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double for (Int_t iMu=0; iMuAt(iMu); - if (TMath::Abs(muon[iMu]->Pz())<1.e-6) return kFALSE; + if (TMath::Abs(muon[iMu]->Pz())<1.e-6) { + for(Int_t i=0;i SetNonBendingCoor(muon[iMu]->XAtDCA()); param[iMu] -> SetBendingCoor(muon[iMu]->YAtDCA()); @@ -241,12 +246,12 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double param[iMu] -> SetBendingSlope(muon[iMu]->Py()/muon[iMu]->Pz()); param[iMu] -> SetInverseBendingMomentum( muon[iMu]->Charge() * (1./muon[iMu]->Pz()) / (TMath::Sqrt(1+TMath::Power(muon[iMu]->Py()/muon[iMu]->Pz(),2))) ); } - + // here we want to understand in which direction we have to search the minimum... Double_t step = 1.; // initial step, in cm Double_t startPoint = 0.; - + Double_t r[3]={0}, z[3]={startPoint, startPoint+step, startPoint+2*step}; TVector3 **points = new TVector3*[AliMFTConstants::fNMaxMuonsForPCA]; @@ -255,21 +260,24 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double for (Int_t iMu=0; iMuGetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]); - } + } r[i] = GetDistanceBetweenPoints(points,nMuons); + for (Int_t iMu=0; iMur[1] && r[1]>r[2]) researchDirection = +1; // towards z positive else if (r[0]r[2]) { printf("E-AliMFTAnalysisTools::CalculatePCA: Point of closest approach cannot be found for dimuon (no minima)\n"); + for (Int_t iMu=0;iMu0.5) { - + if (researchDirection>0) { z[0] = z[1]; z[1] = z[2]; @@ -282,23 +290,26 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double } if (TMath::Abs(z[0])>900.) { printf("E-AliMFTAnalysisTools::CalculatePCA: Point of closest approach cannot be found for dimuon (no minima in the fiducial region)\n"); + for (Int_t iMu=0;iMuGetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]); + AliMUONTrackExtrap::ExtrapToZ(param[iMu], z[i]); + points[iMu] = new TVector3(param[iMu]->GetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]); } r[i] = GetDistanceBetweenPoints(points,nMuons); + for (Int_t iMu=0;iMur[1] && r[1]>r[2]) researchDirection = +1; // towards z positive else if (r[0]AliMFTConstants::fPrecisionPointOfClosestApproach) { @@ -306,19 +317,17 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double z[2] = z[1]+step; for (Int_t i=0; i<3; i++) { for (Int_t iMu=0; iMuGetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]); + AliMUONTrackExtrap::ExtrapToZ(param[iMu], z[i]); + points[iMu] = new TVector3(param[iMu]->GetNonBendingCoor(),param[iMu]->GetBendingCoor(),z[i]); } r[i] = GetDistanceBetweenPoints(points,nMuons); + for (Int_t iMu=0;iMuGetParticle("mu-")->Mass(); @@ -349,9 +358,9 @@ Bool_t AliMFTAnalysisTools::CalculatePCA(TObjArray *muons, Double_t *pca, Double } kinem.SetPxPyPzE(pTot[0], pTot[1], pTot[2], ene); - + // Evaluating the PCA quality of the N-muon - + Double_t sum=0.,squareSum=0.; for (Int_t iMu=0; iMu 0.) pcaQuality = (sum-squareSum/sum) / (nMuons-1); else pcaQuality = 0.; - - for (Int_t iMu=0; iMuGetNMFTClusters(); iCluster++) { AliMFTCluster *localCluster = newTrack->GetMFTCluster(iCluster); mftClusterPattern |= 1 << localCluster->GetPlane(); - mftClusterPattern |= IsCorrectMatch(localCluster, newTrack->GetMCLabel()) << fNMaxPlanes+localCluster->GetPlane(); + mftClusterPattern |= IsCorrectMatch(localCluster, newTrack->GetMCLabel()) << (fNMaxPlanes + localCluster->GetPlane()); } myESDTrack -> SetMFTClusterPattern(mftClusterPattern); -- 2.43.5