]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FEMTOSCOPY/AliFemto/AliFemtoParticle.cxx
Fix double free
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoParticle.cxx
index 8fba7d470a5b7903b90891e9e5d37de12f78b13a..a162848b7c560ca6de452eca9dd16e1fb6ad83a0 100644 (file)
@@ -54,6 +54,7 @@ AliFemtoParticle::AliFemtoParticle() :
 {
   // Default constructor
   /* no-op for default */
+  for (int ip=0; ip<6; ip++) fPurity[ip] = 0.0;
   //  cout << "Created particle " << this << endl;
 }
 //_____________________
@@ -88,6 +89,7 @@ AliFemtoParticle::AliFemtoParticle(const AliFemtoParticle& aParticle):
     fXi    = new AliFemtoXi(*aParticle.fXi);
   fFourMomentum = aParticle.fFourMomentum;
   fHelix = aParticle.fHelix;
+  for (int ip=0; ip<6; ip++) fPurity[ip] = 0.0;
 
 //   for (int iter=0; iter<11; iter++)
 //     fNominalPosSample[iter] = aParticle.fNominalPosSample[iter];
@@ -147,6 +149,7 @@ AliFemtoParticle::~AliFemtoParticle(){
     delete fV0;
   }
   if (fKink) delete fKink;
+  if (fXi) delete fXi;
   //  cout << "Trying to delete HiddenInfo: " << fHiddenInfo << endl;
   if (fHiddenInfo) 
     {
@@ -279,6 +282,7 @@ AliFemtoParticle::AliFemtoParticle(const AliFemtoV0* const hbtV0,const double& m
   if(hbtV0->ValidHiddenInfo()){
     fHiddenInfo= hbtV0->GetHiddenInfo()->Clone();
   }
+  for (int ip=0; ip<6; ip++) fPurity[ip] = 0.0;
   // ***
 }
 //_____________________
@@ -311,6 +315,7 @@ AliFemtoParticle::AliFemtoParticle(const AliFemtoKink* const hbtKink,const doubl
   fFourMomentum.SetVect(temp);
   double ener = ::sqrt(temp.Mag2()+mass*mass);
   fFourMomentum.SetE(ener);
+  for (int ip=0; ip<6; ip++) fPurity[ip] = 0.0;
 }
 
 //_____________________
@@ -343,77 +348,86 @@ AliFemtoParticle::AliFemtoParticle(const AliFemtoXi* const hbtXi, const double&
   double ener = ::sqrt(temp.Mag2()+mass*mass);
   fFourMomentum.SetE(ener);
   fHiddenInfo = 0;
+  for (int ip=0; ip<6; ip++) fPurity[ip] = 0.0;
+
 }
 //_____________________
 AliFemtoParticle& AliFemtoParticle::operator=(const AliFemtoParticle& aParticle)
 {
   // assignment operator
-  if (this == &aParticle)
-    return *this;
+  if (this != &aParticle) {
 
-  if (aParticle.fTrack)
-    fTrack = new AliFemtoTrack(*aParticle.fTrack);
-  if (aParticle.fV0)
-    fV0    = new AliFemtoV0(*aParticle.fV0);
-  if (aParticle.fKink)
-    fKink  = new AliFemtoKink(*aParticle.fKink);
-  if (aParticle.fXi)
-    fXi    = new AliFemtoXi(*aParticle.fXi);
-  fFourMomentum = aParticle.fFourMomentum;
-  fHelix = aParticle.fHelix;
-
-//   for (int iter=0; iter<11; iter++)
-//     fNominalPosSample[iter] = aParticle.fNominalPosSample[iter];
-
-//   if (fTpcV0NegPosSample) delete fTpcV0NegPosSample;
-//   if (aParticle.fTpcV0NegPosSample) {
-//     fTpcV0NegPosSample = (AliFemtoThreeVector *) malloc(sizeof(AliFemtoThreeVector) * 11);
-//     for (int iter=0; iter<11; iter++)
-//       fTpcV0NegPosSample[iter] = aParticle.fTpcV0NegPosSample[iter];
-//   }
-
-//   if (fV0NegZ) delete fV0NegZ;
-//   if (aParticle.fV0NegZ) {
-//     fV0NegZ = (float *) malloc(sizeof(float) * 45);
-//     for (int iter=0; iter<11; iter++)
-//       fV0NegZ[iter] = aParticle.fV0NegZ[iter];
-//   }
-//   if (fV0NegU) delete fV0NegU;
-//   if (aParticle.fV0NegU) {
-//     fV0NegU = (float *) malloc(sizeof(float) * 45);
-//     for (int iter=0; iter<11; iter++)
-//       fV0NegU[iter] = aParticle.fV0NegU[iter];
-//   }
-//   if (fV0NegSect) delete fV0NegSect;
-//   if (aParticle.fV0NegSect) {
-//     fV0NegSect = (int *) malloc(sizeof(int) * 45);
-//     for (int iter=0; iter<11; iter++)
-//       fV0NegSect[iter] = aParticle.fV0NegSect[iter];
-//   }
-
-  fPrimaryVertex = aParticle.fPrimaryVertex;
-  fSecondaryVertex = aParticle.fSecondaryVertex;
-  CalculatePurity();
-  if(aParticle.fHiddenInfo){
-    fHiddenInfo= aParticle.fHiddenInfo->Clone();
+    if (fTrack) delete fTrack;
+    if (aParticle.fTrack) {
+      fTrack = new AliFemtoTrack(*aParticle.fTrack);
+      CalculatePurity();
+    }
+    if (fV0) delete fV0;
+    if (aParticle.fV0)
+      fV0    = new AliFemtoV0(*aParticle.fV0);
+    if (fKink) delete fKink;
+    if (aParticle.fKink)
+      fKink  = new AliFemtoKink(*aParticle.fKink);
+    if (fXi) delete fXi;
+    if (aParticle.fXi)
+      fXi    = new AliFemtoXi(*aParticle.fXi);
+    fFourMomentum = aParticle.fFourMomentum;
+    fHelix = aParticle.fHelix;
+    
+    //   for (int iter=0; iter<11; iter++)
+    //     fNominalPosSample[iter] = aParticle.fNominalPosSample[iter];
+
+    //   if (fTpcV0NegPosSample) delete fTpcV0NegPosSample;
+    //   if (aParticle.fTpcV0NegPosSample) {
+    //     fTpcV0NegPosSample = (AliFemtoThreeVector *) malloc(sizeof(AliFemtoThreeVector) * 11);
+    //     for (int iter=0; iter<11; iter++)
+    //       fTpcV0NegPosSample[iter] = aParticle.fTpcV0NegPosSample[iter];
+    //   }
+    
+    //   if (fV0NegZ) delete fV0NegZ;
+    //   if (aParticle.fV0NegZ) {
+    //     fV0NegZ = (float *) malloc(sizeof(float) * 45);
+    //     for (int iter=0; iter<11; iter++)
+    //       fV0NegZ[iter] = aParticle.fV0NegZ[iter];
+    //   }
+    //   if (fV0NegU) delete fV0NegU;
+    //   if (aParticle.fV0NegU) {
+    //     fV0NegU = (float *) malloc(sizeof(float) * 45);
+    //     for (int iter=0; iter<11; iter++)
+    //       fV0NegU[iter] = aParticle.fV0NegU[iter];
+    //   }
+    //   if (fV0NegSect) delete fV0NegSect;
+    //   if (aParticle.fV0NegSect) {
+    //     fV0NegSect = (int *) malloc(sizeof(int) * 45);
+    //     for (int iter=0; iter<11; iter++)
+    //       fV0NegSect[iter] = aParticle.fV0NegSect[iter];
+    //   }
+    
+    fPrimaryVertex = aParticle.fPrimaryVertex;
+    fSecondaryVertex = aParticle.fSecondaryVertex;
+//     if (fHiddenInfo) delete fHiddenInfo;
+//     if(aParticle.fHiddenInfo){
+//       fHiddenInfo= aParticle.fHiddenInfo->Clone();
+//     }
+    
+    //   fNominalTpcEntrancePoint = aParticle.fNominalTpcEntrancePoint;
+    //   fNominalTpcExitPoint     = aParticle.fNominalTpcExitPoint;
+    
+    if (fHiddenInfo) delete fHiddenInfo;
+    if (aParticle.fHiddenInfo) 
+      fHiddenInfo = aParticle.HiddenInfo()->Clone();
+    
+    for (int iter=0; iter<6; iter++)
+      fPurity[iter] = aParticle.fPurity[iter];
+    
+    fHelixV0Pos = aParticle.fHelixV0Pos;
+    fTpcV0PosEntrancePoint = aParticle.fTpcV0PosEntrancePoint;
+    fTpcV0PosExitPoint     = aParticle.fTpcV0PosExitPoint;
+    fHelixV0Neg = aParticle.fHelixV0Neg;
+    fTpcV0NegEntrancePoint = aParticle.fTpcV0NegEntrancePoint;
+    fTpcV0NegExitPoint     = aParticle.fTpcV0NegExitPoint;
+    
   }
-  
-//   fNominalTpcEntrancePoint = aParticle.fNominalTpcEntrancePoint;
-//   fNominalTpcExitPoint     = aParticle.fNominalTpcExitPoint;
-  if (fHiddenInfo) delete fHiddenInfo;
-  if (aParticle.fHiddenInfo) 
-    fHiddenInfo = aParticle.HiddenInfo()->Clone();
-  
-  for (int iter=0; iter<6; iter++)
-    fPurity[iter] = aParticle.fPurity[iter];
-  
-  fHelixV0Pos = aParticle.fHelixV0Pos;
-  fTpcV0PosEntrancePoint = aParticle.fTpcV0PosEntrancePoint;
-  fTpcV0PosExitPoint     = aParticle.fTpcV0PosExitPoint;
-  fHelixV0Neg = aParticle.fHelixV0Neg;
-  fTpcV0NegEntrancePoint = aParticle.fTpcV0NegEntrancePoint;
-  fTpcV0NegExitPoint     = aParticle.fTpcV0NegExitPoint;
 
   return *this;
 }