Fix memory leak
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 11 Aug 2008 13:53:48 +0000 (13:53 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 11 Aug 2008 13:53:48 +0000 (13:53 +0000)
TRD/AliTRDseedV1.cxx
TRD/AliTRDseedV1.h
TRD/AliTRDtrackV1.cxx
TRD/AliTRDtrackV1.h

index fea29b7..ebb5f77 100644 (file)
@@ -60,6 +60,8 @@ AliTRDseedV1::AliTRDseedV1(Int_t plane)
   //
   // Constructor
   //
+       printf("AliTRDseedV1::AliTRDseedV1()\n");
+
        for(int islice=0; islice < knSlices; islice++) fdEdx[islice] = 0.;
        for(int ispec=0; ispec<AliPID::kSPECIES; ispec++) fProb[ispec]  = -1.;
 }
@@ -78,7 +80,7 @@ AliTRDseedV1::AliTRDseedV1(const AliTRDseedV1 &ref)
   // Copy Constructor performing a deep copy
   //
 
-       //AliInfo("");
+       printf("AliTRDseedV1::AliTRDseedV1(const AliTRDseedV1 &)\n");
        for(int islice=0; islice < knSlices; islice++) fdEdx[islice] = ref.fdEdx[islice];
        for(int ispec=0; ispec<AliPID::kSPECIES; ispec++) fProb[ispec] = ref.fProb[ispec];
 }
@@ -91,7 +93,7 @@ AliTRDseedV1& AliTRDseedV1::operator=(const AliTRDseedV1 &ref)
   // Assignment Operator using the copy function
   //
 
-       //AliInfo("");
+  printf("AliTRDseedV1::operator=()\n");
        if(this != &ref){
                ref.Copy(*this);
        }
@@ -106,7 +108,7 @@ AliTRDseedV1::~AliTRDseedV1()
   // Destructor. The RecoParam object belongs to the underlying tracker.
   //
 
-       //AliInfo(Form("fOwner[%s]", fOwner?"YES":"NO"));
+       printf("I-AliTRDseedV1::~AliTRDseedV1() : Owner[%s]\n", IsOwner()?"YES":"NO");
 
        if(IsOwner()) 
                for(int itb=0; itb<knTimebins; itb++){
@@ -339,7 +341,7 @@ void AliTRDseedV1::SetOwner(Bool_t own)
                        if(!fClusters[ic]) continue;
                        fClusters[ic] = new AliTRDcluster(*fClusters[ic]);
                }
-               SetBit(1);
+               SetBit(kOwner);
        } else {
                if(IsOwner()){
                        for(int ic=0; ic<knTimebins; ic++){
@@ -348,7 +350,7 @@ void AliTRDseedV1::SetOwner(Bool_t own)
                                //fClusters[ic] = tracker->GetClusters(index) TODO
                        }
                }
-               SetBit(1, kFALSE);
+               SetBit(kOwner, kFALSE);
        }
 }
 
@@ -734,7 +736,7 @@ Bool_t AliTRDseedV1::Fit()
                if(dzdx * fZref[1] < 0.){
                        AliInfo("tracklet direction does not correspond to the track direction. TODO.");
                }
-               SetBit(2, kTRUE); // mark pad row crossing
+               SetBit(kRowCross, kTRUE); // mark pad row crossing
                fCross[0] = xc[nc]; fCross[2] = zc[nc]; fCross[3] = sz[nc]; 
                fitterZ.AddPoint(&xc[nc], zc[nc], sz[nc]);
                fitterZ.Eval();
index f2f3396..bec200b 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef ALITRDSEEDV1_H
 #define ALITRDSEEDV1_H
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
+* See cxx source for full Copyright notice                               */
 
 /* $Id$ */
 
@@ -36,94 +36,98 @@ class AliTRDseedV1 : public AliTRDseed
 
   public:
 
-       enum {
-         knSlices = 10
-       };
-
-       AliTRDseedV1(Int_t plane = -1);
-       ~AliTRDseedV1();
-       AliTRDseedV1(const AliTRDseedV1 &ref);
-       AliTRDseedV1& operator=(const AliTRDseedV1 &ref);
-
-       Bool_t  AttachClustersIter(AliTRDtrackingChamber *chamber, Float_t quality, Bool_t kZcorr = kFALSE
-                                 , AliTRDcluster *c=0x0);
-       Bool_t  AttachClusters(AliTRDtrackingChamber *chamber, Bool_t kZcorr = kFALSE);
-       void    CookdEdx(Int_t nslices);
-       void    Draw(Option_t* o = "");
-       Bool_t  Fit();
-
-       Bool_t  Init(AliTRDtrackV1 *track);
-       inline void      Init(const AliRieman *fit);
-       Bool_t    IsOwner() const          { return TestBit(1);}
-       Bool_t    IsRowCross() const       { return TestBit(2);}
-
-       inline Float_t   GetChi2Z(const Float_t z = 999.) const;
-       inline Float_t   GetChi2Y(const Float_t y = 999.) const;
-       void      GetCovAt(Double_t x, Double_t *cov) const;
-       Double_t* GetCrossXYZ() { return &fCross[0];}
-       Double_t  GetCrossSz2() const { return fCross[3];}
-       Float_t*  GetdEdx() {return &fdEdx[0];}
-       Float_t   GetdQdl(Int_t ic) const;
-       Double_t  GetMomentum() const {return fMom;}
-       Int_t     GetN() const {return fN2;}
-       Float_t   GetQuality(Bool_t kZcorr) const;
-       Int_t     GetPlane() const         { return fPlane;    }
-       Double_t* GetProbability();
-       Double_t  GetSnp() const           { return fSnp;}
-       Double_t  GetTgl() const           { return fTgl;}
-       Double_t  GetYat(Double_t x) const { return fYfitR[0] + fYfitR[1] * (x - fX0);}
-       Double_t  GetZat(Double_t x) const { return fZfitR[0] + fZfitR[1] * (x - fX0);}
-       
-       void      Print(Option_t *o = "") const;
-       
-       void      SetMomentum(Double_t mom) {fMom = mom;}
-       void      SetOwner(Bool_t own = kTRUE);
-       void      SetPlane(Int_t p)                      { fPlane     = p;   }
-       void      SetSnp(Double_t snp) {fSnp = snp;}
-       void      SetTgl(Double_t tgl) {fTgl = tgl;}
+  enum {
+    knSlices = 10
+  };
+  enum AliTRDtrackletStatus {
+    kOwner    = BIT(1)
+  , kRowCross = BIT(2) 
+  };
+
+  AliTRDseedV1(Int_t plane = -1);
+  ~AliTRDseedV1();
+  AliTRDseedV1(const AliTRDseedV1 &ref);
+  AliTRDseedV1& operator=(const AliTRDseedV1 &ref);
+
+  Bool_t       AttachClustersIter(AliTRDtrackingChamber *chamber, Float_t quality, Bool_t kZcorr = kFALSE
+                                , AliTRDcluster *c=0x0);
+  Bool_t       AttachClusters(AliTRDtrackingChamber *chamber, Bool_t kZcorr = kFALSE);
+  void    CookdEdx(Int_t nslices);
+  void    Draw(Option_t* o = "");
+  Bool_t  Fit();
+
+  Bool_t  Init(AliTRDtrackV1 *track);
+  inline void      Init(const AliRieman *fit);
+  Bool_t    IsOwner() const          { return TestBit(kOwner);}
+  Bool_t    IsRowCross() const       { return TestBit(kRowCross);}
+
+  inline Float_t   GetChi2Z(const Float_t z = 999.) const;
+  inline Float_t   GetChi2Y(const Float_t y = 999.) const;
+  void      GetCovAt(Double_t x, Double_t *cov) const;
+  Double_t* GetCrossXYZ() { return &fCross[0];}
+  Double_t  GetCrossSz2() const { return fCross[3];}
+  Float_t*  GetdEdx() {return &fdEdx[0];}
+  Float_t   GetdQdl(Int_t ic) const;
+  Double_t  GetMomentum() const {return fMom;}
+  Int_t     GetN() const {return fN2;}
+  Float_t   GetQuality(Bool_t kZcorr) const;
+  Int_t     GetPlane() const         { return fPlane;    }
+  Double_t* GetProbability();
+  Double_t  GetSnp() const           { return fSnp;}
+  Double_t  GetTgl() const           { return fTgl;}
+  Double_t  GetYat(Double_t x) const { return fYfitR[0] + fYfitR[1] * (x - fX0);}
+  Double_t  GetZat(Double_t x) const { return fZfitR[0] + fZfitR[1] * (x - fX0);}
+  
+  void      Print(Option_t *o = "") const;
+  
+  void      SetMomentum(Double_t mom) {fMom = mom;}
+  void      SetOwner(Bool_t own = kTRUE);
+  void      SetPlane(Int_t p)                      { fPlane     = p;   }
+  void      SetSnp(Double_t snp) {fSnp = snp;}
+  void      SetTgl(Double_t tgl) {fTgl = tgl;}
   void      SetReconstructor(const AliTRDReconstructor *rec) {fReconstructor = rec;}
- protected:
+protected:
 
-       void Copy(TObject &ref) const;
+  void Copy(TObject &ref) const;
 
- private:
+private:
   const AliTRDReconstructor *fReconstructor;
-       Int_t            fPlane;                  //  TRD plane
-       Float_t          fMom;                    //  Momentum estimate for tracklet [GeV/c]
-       Float_t          fSnp;                    // sin of track with respect to x direction in XY plane       
-       Float_t          fTgl;                    // tg of track with respect to x direction in XZ plane        
-       Float_t          fdX;                     // length of time bin
-       Float_t          fdEdx[knSlices];         //  dE/dx measurements for tracklet
-       Double_t         fCross[4];            // spatial parameters of the pad row crossing
-       Double_t         fProb[AliPID::kSPECIES]; //  PID probabilities
+  Int_t            fPlane;                  //  TRD plane
+  Float_t          fMom;                    //  Momentum estimate for tracklet [GeV/c]
+  Float_t          fSnp;                    // sin of track with respect to x direction in XY plane    
+  Float_t          fTgl;                    // tg of track with respect to x direction in XZ plane     
+  Float_t          fdX;                     // length of time bin
+  Float_t          fdEdx[knSlices];         //  dE/dx measurements for tracklet
+  Double_t         fCross[4];            // spatial parameters of the pad row crossing
+  Double_t         fProb[AliPID::kSPECIES]; //  PID probabilities
 
-       ClassDef(AliTRDseedV1, 1)                 //  New TRD seed 
+  ClassDef(AliTRDseedV1, 1)                 //  New TRD seed 
 
 };
 
 //____________________________________________________________
 inline Float_t AliTRDseedV1::GetChi2Z(const Float_t z) const
 {
-       Float_t z1  = (z == 999.) ? fMeanz : z;
-       Float_t chi = fZref[0] - z1;
-       return chi*chi;
+  Float_t z1  = (z == 999.) ? fMeanz : z;
+  Float_t chi = fZref[0] - z1;
+  return chi*chi;
 }
 
 //____________________________________________________________
 inline Float_t AliTRDseedV1::GetChi2Y(const Float_t y) const
 {
-       Float_t y1  = (y == 999.) ? fYfitR[0] : y;
-       Float_t chi = fYref[0] - y1;
-       return chi*chi;
+  Float_t y1  = (y == 999.) ? fYfitR[0] : y;
+  Float_t chi = fYref[0] - y1;
+  return chi*chi;
 }
 
 //____________________________________________________________
 inline void AliTRDseedV1::Init(const AliRieman *rieman)
 {
-       fZref[0] = rieman->GetZat(fX0);
-       fZref[1] = rieman->GetDZat(fX0);
-       fYref[0] = rieman->GetYat(fX0);
-       fYref[1] = rieman->GetDYat(fX0);
+  fZref[0] = rieman->GetZat(fX0);
+  fZref[1] = rieman->GetDZat(fX0);
+  fYref[0] = rieman->GetYat(fX0);
+  fYref[1] = rieman->GetDYat(fX0);
 }
 
 #endif
index 3ca9927..30831f6 100644 (file)
@@ -46,6 +46,8 @@ AliTRDtrackV1::AliTRDtrackV1() : AliKalmanTrack()
   //
   // Default constructor
   //
+  printf("AliTRDtrackV1::AliTRDtrackV1()\n");
+
   for(int i =0; i<3; i++) fBudget[i] = 0.;
   
   Float_t pid = 1./AliPID::kSPECIES;
@@ -67,6 +69,8 @@ AliTRDtrackV1::AliTRDtrackV1(const AliTRDtrackV1 &ref) : AliKalmanTrack(ref)
   // Copy constructor
   //
 
+  printf("AliTRDtrackV1::AliTRDtrackV1(const AliTRDtrackV1 &)\n");
+
   for(int ip=0; ip<kNplane; ip++){ 
     fTrackletIndex[ip] = ref.fTrackletIndex[ip];
     fTracklet[ip]      = ref.fTracklet[ip];
@@ -145,7 +149,7 @@ AliTRDtrackV1::AliTRDtrackV1(AliTRDseedV1 *trklts, const Double_t p[5], const Do
 
   Double_t pp[5] = { p[0]    
                    , p[1]
-                   , p[2]
+                   , x*p[4] - p[2]
                    , p[3]
                    , p[4]*cnv      };
 
@@ -188,12 +192,14 @@ AliTRDtrackV1::AliTRDtrackV1(AliTRDseedV1 *trklts, const Double_t p[5], const Do
 //_______________________________________________________________
 AliTRDtrackV1::~AliTRDtrackV1()
 {
+  //AliInfo("");
+  printf("I-AliTRDtrackV1::~AliTRDtrackV1() : Owner[%s]\n", TestBit(kOwner)?"YES":"NO");
   if(fBackupTrack) {
     delete fBackupTrack;
   }
   fBackupTrack = 0x0;
 
-  if(TestBit(1)){
+  if(TestBit(kOwner)){
     for(Int_t ip=0; ip<kNplane; ip++){
       if(fTracklet[ip]) delete fTracklet[ip];
       fTracklet[ip] = 0x0;
@@ -567,13 +573,13 @@ void AliTRDtrackV1::SetOwner()
   // Toggle ownership of tracklets
   //
 
-  if(TestBit(1)) return;
+  if(TestBit(kOwner)) return;
   for (Int_t ip = 0; ip < kNplane; ip++) {
     if(fTrackletIndex[ip] == 0xffff) continue;
     fTracklet[ip] = new AliTRDseedV1(*fTracklet[ip]);
     fTracklet[ip]->SetOwner();
   }
-  SetBit(1);
+  SetBit(kOwner);
 }
 
 //_______________________________________________________________
index 96ccd15..6e3c402 100644 (file)
@@ -39,9 +39,10 @@ public:
         , kNslice    =   3
         , kNMLPslice =   8 };
   
-  enum AliTRDPIDMethod {
-          kNN = 0
-        , kLQ = 1 };
+  enum AliTRDtrackStatus {
+          kOwner   = BIT(1)
+        , kStopped = BIT(2) 
+  };
 
   AliTRDtrackV1();
   AliTRDtrackV1(AliTRDseedV1 *trklts, const Double_t p[5], const Double_t cov[15], Double_t x, Double_t alpha);
@@ -69,8 +70,8 @@ public:
   Int_t          GetTrackletIndex(Int_t plane) const          { return (plane>=0 && plane<kNplane) ? fTrackletIndex[plane] : -1;} 
   UShort_t*      GetTrackletIndexes() {return &fTrackletIndex[0];}
   
-  Bool_t         IsOwner() const {return TestBit(1);};
-  Bool_t         IsStopped() const {return TestBit(2);};
+  Bool_t         IsOwner() const {return TestBit(kOwner);};
+  Bool_t         IsStopped() const {return TestBit(kStopped);};
   
   void           MakeBackupTrack();
   Bool_t         PropagateTo(Double_t xr, Double_t x0 = 8.72, Double_t rho = 5.86e-3);
@@ -79,7 +80,7 @@ public:
   void           SetBudget(Int_t i, Double_t b) {if(i>=0 && i<3) fBudget[i] = b;}
   void           SetNumberOfClusters();
   void           SetOwner();
-  void           SetStopped(Bool_t stop) {SetBit(2, stop);}
+  void           SetStopped(Bool_t stop) {SetBit(kStopped, stop);}
   void           SetTracklet(AliTRDseedV1 *trklt,  Int_t index);
   inline void    SetReconstructor(const AliTRDReconstructor *rec);
   inline Float_t StatusForTOF();