]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
- Replace the TClonesArray of AliMUONTrackParam by a TObjArray in
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Feb 2011 09:29:41 +0000 (09:29 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Feb 2011 09:29:41 +0000 (09:29 +0000)
AliMUONTrack
- Optimize the loops over trackParams in AliMUONTrack
(P. Pillot)

14 files changed:
EVE/EveDet/AliEveMUONTrack.cxx
MUON/AliMUONAlignment.cxx
MUON/AliMUONAlignment.h
MUON/AliMUONChamberCalibrationTask.cxx
MUON/AliMUONTrack.cxx
MUON/AliMUONTrack.h
MUON/AliMUONTrackHitPattern.cxx
MUON/AliMUONTrackReconstructor.cxx
MUON/AliMUONTrackReconstructorK.cxx
MUON/MUONClusterInfo.C
MUON/MUONFakes.C
MUON/MUONRecoCheck.C
PWG3/muondep/AliCheckMuonDetEltResponse.cxx
PWG3/muondep/AliCheckMuonDetEltResponse.h

index 28996f7e4e78389a1d3d2b7d648deec7d7cdda2b..d2c1ad22bcc681992b4bd347e38eb3cfbe6c5107 100644 (file)
@@ -26,7 +26,7 @@
 #include <AliMUONESDInterface.h>
 #include <AliMUONVCluster.h>
 
 #include <AliMUONESDInterface.h>
 #include <AliMUONVCluster.h>
 
-#include <TClonesArray.h>
+#include <TObjArray.h>
 #include <TGeoGlobalMagField.h>
 #include <TParticle.h>
 #include <TParticlePDG.h>
 #include <TGeoGlobalMagField.h>
 #include <TParticle.h>
 #include <TParticlePDG.h>
@@ -138,7 +138,7 @@ void AliEveMUONTrack::PrintMUONTrackInfo()
   Int_t nparam;
   Float_t pt, bc, nbc, zc;
   AliMUONTrackParam *mtp;
   Int_t nparam;
   Float_t pt, bc, nbc, zc;
   AliMUONTrackParam *mtp;
-  TClonesArray *trackParamAtCluster;
+  TObjArray *trackParamAtCluster;
 
   if (!fTrack) {
     cout << "   ! no reconstructed track ..." << endl;
 
   if (!fTrack) {
     cout << "   ! no reconstructed track ..." << endl;
@@ -517,7 +517,7 @@ void AliEveMUONTrack::MakeMUONTrack(AliMUONTrack *mtrack)
   }
   
   Int_t nTrackHits = mtrack->GetNClusters();
   }
   
   Int_t nTrackHits = mtrack->GetNClusters();
-  TClonesArray* trackParamAtCluster = mtrack->GetTrackParamAtCluster();
+  TObjArray* trackParamAtCluster = mtrack->GetTrackParamAtCluster();
   for (Int_t iHit = 0; iHit < nTrackHits; iHit++){
 
     trackParam = (AliMUONTrackParam*) trackParamAtCluster->At(iHit);
   for (Int_t iHit = 0; iHit < nTrackHits; iHit++){
 
     trackParam = (AliMUONTrackParam*) trackParamAtCluster->At(iHit);
@@ -768,7 +768,7 @@ void AliEveMUONTrack::Propagate(Float_t *xr, Float_t *yr, Float_t *zr, Int_t i1,
   Double_t zMax = 0.0;
   Int_t  charge =   0;
   AliMUONTrackParam *trackParam = 0;
   Double_t zMax = 0.0;
   Int_t  charge =   0;
   AliMUONTrackParam *trackParam = 0;
-  TClonesArray *trackParamAtCluster = 0;
+  TObjArray *trackParamAtCluster = 0;
 
   if (i2 == 9999) {
     zMax = zr[i1]+1.5*step;
 
   if (i2 == 9999) {
     zMax = zr[i1]+1.5*step;
index 4ddb0e21e510aa5df8d2a6cc911c2c58904b9c1e..56db9e03591d0a6663a3a288a18f810c599baaee 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "TMath.h"
 #include "TMatrixDSym.h"
 
 #include "TMath.h"
 #include "TMatrixDSym.h"
+#include "TClonesArray.h"
 
 /// \cond CLASSIMP
 ClassImp(AliMUONAlignment)
 
 /// \cond CLASSIMP
 ClassImp(AliMUONAlignment)
index 38a6a4f9c55cd3aa10cee1037211ee45e9be5822..bbd5336dd73ba8a2410aebae2f93536f5807a1f9 100644 (file)
@@ -16,6 +16,7 @@
 
 class TGeoCombiTrans;
 class TClonesArray;
 
 class TGeoCombiTrans;
 class TClonesArray;
+class TObjArray;
 class AliMillepede;
 class AliMUONGeometryTransformer;
 class AliMUONTrack;
 class AliMillepede;
 class AliMUONGeometryTransformer;
 class AliMUONTrack;
@@ -114,10 +115,10 @@ public:
 
   AliMillepede *fMillepede; ///< Detector independent alignment class
   
 
   AliMillepede *fMillepede; ///< Detector independent alignment class
   
-  TClonesArray *fTrackParamAtCluster; ///< Array of track parameters 
-  AliMUONTrack *fTrack;               ///< AliMUONTrack 
-  AliMUONVCluster *fCluster;          ///< AliMUONVCluster
-  AliMUONTrackParam *fTrackParam;     ///< Track parameters 
+  TObjArray *fTrackParamAtCluster; ///< Array of track parameters 
+  AliMUONTrack *fTrack;            ///< AliMUONTrack 
+  AliMUONVCluster *fCluster;       ///< AliMUONVCluster
+  AliMUONTrackParam *fTrackParam;  ///< Track parameters 
 
   Int_t fNGlobal;  ///< Number of global parameters
   Int_t fNLocal;   ///< Number of local parameters
 
   Int_t fNGlobal;  ///< Number of global parameters
   Int_t fNLocal;   ///< Number of local parameters
@@ -199,7 +200,7 @@ public:
   static Int_t fgNDetElemCh[10]; ///< Number of detection elements per chamber
   static Int_t fgSNDetElemCh[10];///< Sum of detection elements up to this chamber (inc)
 
   static Int_t fgNDetElemCh[10]; ///< Number of detection elements per chamber
   static Int_t fgSNDetElemCh[10];///< Sum of detection elements up to this chamber (inc)
 
-ClassDef(AliMUONAlignment, 1) //Class for alignment of muon spectrometer
+ClassDef(AliMUONAlignment, 2) //Class for alignment of muon spectrometer
 };
 
 #endif
 };
 
 #endif
index 5b458ee02ed2f96105b5ef45c6bb6471b3c5fd3f..db4ca9f28b14744bdf15485e34a9529e9d864b84 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <TBranch.h>
 #include <TChain.h>
 
 #include <TBranch.h>
 #include <TChain.h>
-#include <TClonesArray.h>
+#include <TObjArray.h>
 #include <TFile.h>
 #include <TMath.h>
 #include <TRandom.h>
 #include <TFile.h>
 #include <TMath.h>
 #include <TRandom.h>
index a354bafdff4cb5a4821da47fa2dbc9370da88483..a810aa81e1948fa065b4f9ed7152e0193ab3a086 100644 (file)
@@ -72,7 +72,7 @@ AliMUONTrack::AliMUONTrack()
   //__________________________________________________________________________
 AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDispersion)
   : TObject(),
   //__________________________________________________________________________
 AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDispersion)
   : TObject(),
-    fTrackParamAtCluster(new TClonesArray("AliMUONTrackParam",10)),
+    fTrackParamAtCluster(new TObjArray(20)),
     fFitWithVertex(kFALSE),
     fVertexErrXY2(),
     fFitWithMCS(kFALSE),
     fFitWithVertex(kFALSE),
     fVertexErrXY2(),
     fFitWithMCS(kFALSE),
@@ -90,6 +90,8 @@ AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDis
 {
   /// Constructor from two clusters
   
 {
   /// Constructor from two clusters
   
+  fTrackParamAtCluster->SetOwner(kTRUE);
+  
   fVertexErrXY2[0] = 0.;
   fVertexErrXY2[1] = 0.;
   
   fVertexErrXY2[0] = 0.;
   fVertexErrXY2[1] = 0.;
   
@@ -199,14 +201,12 @@ AliMUONTrack::AliMUONTrack(const AliMUONTrack& track)
 {
   ///copy constructor
   
 {
   ///copy constructor
   
-  // necessary to make a copy of the objects and not only the pointers in TClonesArray.
+  // necessary to make a copy of the objects and not only the pointers in TObjArray.
   if (track.fTrackParamAtCluster) {
   if (track.fTrackParamAtCluster) {
-    fTrackParamAtCluster = new TClonesArray("AliMUONTrackParam",10);
-    AliMUONTrackParam *trackParamAtCluster = (AliMUONTrackParam*) track.fTrackParamAtCluster->First();
-    while (trackParamAtCluster) {
-      new ((*fTrackParamAtCluster)[GetNClusters()]) AliMUONTrackParam(*trackParamAtCluster);
-      trackParamAtCluster = (AliMUONTrackParam*) track.fTrackParamAtCluster->After(trackParamAtCluster);
-    }
+    fTrackParamAtCluster = new TObjArray(track.fTrackParamAtCluster->GetSize());
+    fTrackParamAtCluster->SetOwner(kTRUE);
+    for (Int_t i = 0; i < track.GetNClusters(); i++)
+      fTrackParamAtCluster->AddLast(new AliMUONTrackParam(*static_cast<AliMUONTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(i))));
   }
   
   // copy vertex resolution square used during the tracking procedure
   }
   
   // copy vertex resolution square used during the tracking procedure
@@ -236,14 +236,12 @@ AliMUONTrack & AliMUONTrack::operator=(const AliMUONTrack& track)
   // clear memory
   Clear();
   
   // clear memory
   Clear();
   
-  // necessary to make a copy of the objects and not only the pointers in TClonesArray
+  // necessary to make a copy of the objects and not only the pointers in TObjArray
   if (track.fTrackParamAtCluster) {
   if (track.fTrackParamAtCluster) {
-    fTrackParamAtCluster = new TClonesArray("AliMUONTrackParam",10);
-    AliMUONTrackParam *trackParamAtCluster = (AliMUONTrackParam*) track.fTrackParamAtCluster->First();
-    while (trackParamAtCluster) {
-      new ((*fTrackParamAtCluster)[GetNClusters()]) AliMUONTrackParam(*trackParamAtCluster);
-      trackParamAtCluster = (AliMUONTrackParam*) track.fTrackParamAtCluster->After(trackParamAtCluster);
-    }
+    fTrackParamAtCluster = new TObjArray(track.fTrackParamAtCluster->GetSize());
+    fTrackParamAtCluster->SetOwner(kTRUE);
+    for (Int_t i = 0; i < track.GetNClusters(); i++)
+      fTrackParamAtCluster->AddLast(new AliMUONTrackParam(*static_cast<AliMUONTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(i))));
   }
   
   // copy cluster weights matrix if any
   }
   
   // copy cluster weights matrix if any
@@ -295,14 +293,10 @@ AliMUONTrack::~AliMUONTrack()
 }
 
   //__________________________________________________________________________
 }
 
   //__________________________________________________________________________
-void AliMUONTrack::Clear(Option_t* opt)
+void AliMUONTrack::Clear(Option_t* /*opt*/)
 {
   /// Clear arrays
 {
   /// Clear arrays
-  if (opt && opt[0] == 'C' && fTrackParamAtCluster) fTrackParamAtCluster->Clear("C");
-  else {
-    delete fTrackParamAtCluster;
-    fTrackParamAtCluster = 0x0;
-  }
+  delete fTrackParamAtCluster; fTrackParamAtCluster = 0x0;
   delete fClusterWeightsNonBending; fClusterWeightsNonBending = 0x0;
   delete fClusterWeightsBending; fClusterWeightsBending = 0x0;
   delete fTrackParamAtVertex; fTrackParamAtVertex = 0x0;
   delete fClusterWeightsNonBending; fClusterWeightsNonBending = 0x0;
   delete fClusterWeightsBending; fClusterWeightsBending = 0x0;
   delete fTrackParamAtVertex; fTrackParamAtVertex = 0x0;
@@ -332,10 +326,13 @@ void AliMUONTrack::Reset()
 }
 
   //__________________________________________________________________________
 }
 
   //__________________________________________________________________________
-TClonesArray* AliMUONTrack::GetTrackParamAtCluster() const
+TObjArray* AliMUONTrack::GetTrackParamAtCluster() const
 {
   /// return array of track parameters at cluster (create it if needed)
 {
   /// return array of track parameters at cluster (create it if needed)
-  if (!fTrackParamAtCluster) fTrackParamAtCluster = new TClonesArray("AliMUONTrackParam",10);
+  if (!fTrackParamAtCluster) {
+    fTrackParamAtCluster = new TObjArray(20);
+    fTrackParamAtCluster->SetOwner(kTRUE);
+  }
   return fTrackParamAtCluster;
 }
 
   return fTrackParamAtCluster;
 }
 
@@ -360,8 +357,12 @@ void AliMUONTrack::AddTrackParamAtCluster(const AliMUONTrackParam &trackParam, A
   }
   
   // add parameters to the array of track parameters
   }
   
   // add parameters to the array of track parameters
-  if (!fTrackParamAtCluster) fTrackParamAtCluster = new TClonesArray("AliMUONTrackParam",10);
-  AliMUONTrackParam* trackParamAtCluster = new ((*fTrackParamAtCluster)[GetNClusters()]) AliMUONTrackParam(trackParam);
+  if (!fTrackParamAtCluster) {
+    fTrackParamAtCluster = new TObjArray(20);
+    fTrackParamAtCluster->SetOwner(kTRUE);
+  }
+  AliMUONTrackParam* trackParamAtCluster = new AliMUONTrackParam(trackParam);
+  fTrackParamAtCluster->AddLast(trackParamAtCluster);
   
   // link parameters with the associated cluster or its copy
   if (copy) {
   
   // link parameters with the associated cluster or its copy
   if (copy) {
@@ -376,13 +377,24 @@ void AliMUONTrack::AddTrackParamAtCluster(const AliMUONTrackParam &trackParam, A
   //__________________________________________________________________________
 void AliMUONTrack::RemoveTrackParamAtCluster(AliMUONTrackParam *trackParam)
 {
   //__________________________________________________________________________
 void AliMUONTrack::RemoveTrackParamAtCluster(AliMUONTrackParam *trackParam)
 {
-  /// Remove trackParam from the array of TrackParamAtCluster
-  if (!fTrackParamAtCluster || !fTrackParamAtCluster->Remove(trackParam)) {
-    AliWarning("object to remove does not exist in array fTrackParamAtCluster");
-    return;
-  }
+  /// Remove trackParam from the array of TrackParamAtCluster and delete it since the array is owner
+  
+  if (fTrackParamAtCluster) {
+    
+    AliMUONTrackParam* trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->Remove(trackParam));
+    
+    if (trackParamAtCluster) {
+      
+      // clean memory
+      delete trackParamAtCluster;
+      
+      // remove hole
+      fTrackParamAtCluster->Compress();
+      
+    } else AliWarning("object to remove does not exist in array fTrackParamAtCluster");
+    
+  } else AliWarning("array fTrackParamAtCluster does not exist");
   
   
-  fTrackParamAtCluster->Compress();
 }
 
   //__________________________________________________________________________
 }
 
   //__________________________________________________________________________
@@ -391,15 +403,17 @@ Bool_t AliMUONTrack::UpdateTrackParamAtCluster()
   /// Update track parameters at each attached cluster
   /// Return kFALSE in case of failure (i.e. extrapolation problem)
   
   /// Update track parameters at each attached cluster
   /// Return kFALSE in case of failure (i.e. extrapolation problem)
   
-  if (GetNClusters() == 0) {
+  Int_t nClusters = GetNClusters();
+  if (nClusters == 0) {
     AliWarning("no cluster attached to the track");
     return kFALSE;
   }
   
   Bool_t extrapStatus = kTRUE;
     AliWarning("no cluster attached to the track");
     return kFALSE;
   }
   
   Bool_t extrapStatus = kTRUE;
-  AliMUONTrackParam* startingTrackParam = (AliMUONTrackParam*) fTrackParamAtCluster->First();
-  AliMUONTrackParam* trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->After(startingTrackParam);
-  while (trackParamAtCluster) {
+  AliMUONTrackParam* startingTrackParam = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(0));
+  
+  for (Int_t i = 1; i < nClusters; i++) {
+    AliMUONTrackParam* trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(i));
     
     // reset track parameters and their covariances
     trackParamAtCluster->SetParameters(startingTrackParam->GetParameters());
     
     // reset track parameters and their covariances
     trackParamAtCluster->SetParameters(startingTrackParam->GetParameters());
@@ -410,7 +424,6 @@ Bool_t AliMUONTrack::UpdateTrackParamAtCluster()
     
     // prepare next step
     startingTrackParam = trackParamAtCluster;
     
     // prepare next step
     startingTrackParam = trackParamAtCluster;
-    trackParamAtCluster = (AliMUONTrackParam*) (fTrackParamAtCluster->After(trackParamAtCluster));
   }
 
   // set global chi2 to max value in case of problem during track extrapolation
   }
 
   // set global chi2 to max value in case of problem during track extrapolation
@@ -426,17 +439,19 @@ Bool_t AliMUONTrack::UpdateCovTrackParamAtCluster()
   /// Include effects of multiple scattering in chambers
   /// Return kFALSE in case of failure (i.e. extrapolation problem)
   
   /// Include effects of multiple scattering in chambers
   /// Return kFALSE in case of failure (i.e. extrapolation problem)
   
-  if (GetNClusters() == 0) {
+  Int_t nClusters = GetNClusters();
+  if (nClusters == 0) {
     AliWarning("no cluster attached to the track");
     return kFALSE;
   }
   
   Bool_t extrapStatus = kTRUE;
     AliWarning("no cluster attached to the track");
     return kFALSE;
   }
   
   Bool_t extrapStatus = kTRUE;
-  AliMUONTrackParam* startingTrackParam = (AliMUONTrackParam*) fTrackParamAtCluster->First();
-  AliMUONTrackParam* trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->After(startingTrackParam);
+  AliMUONTrackParam* startingTrackParam = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(0));
   Int_t expectedChamber = startingTrackParam->GetClusterPtr()->GetChamberId() + 1;
   Int_t currentChamber;
   Int_t expectedChamber = startingTrackParam->GetClusterPtr()->GetChamberId() + 1;
   Int_t currentChamber;
-  while (trackParamAtCluster) {
+  
+  for (Int_t i = 1; i < nClusters; i++) {
+    AliMUONTrackParam* trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(i));
     
     // reset track parameters and their covariances
     trackParamAtCluster->SetParameters(startingTrackParam->GetParameters());
     
     // reset track parameters and their covariances
     trackParamAtCluster->SetParameters(startingTrackParam->GetParameters());
@@ -462,7 +477,6 @@ Bool_t AliMUONTrack::UpdateCovTrackParamAtCluster()
     // prepare next step
     expectedChamber = currentChamber + 1;
     startingTrackParam = trackParamAtCluster;
     // prepare next step
     expectedChamber = currentChamber + 1;
     startingTrackParam = trackParamAtCluster;
-    trackParamAtCluster = (AliMUONTrackParam*) (fTrackParamAtCluster->After(trackParamAtCluster));
   }
   
   // set global chi2 to max value in case of problem during track extrapolation
   }
   
   // set global chi2 to max value in case of problem during track extrapolation
@@ -638,6 +652,7 @@ Bool_t AliMUONTrack::ComputeLocalChi2(Bool_t accountForMCS)
     if (globalChi2 < 0.) return kFALSE;
     
     // Loop over removable clusters and compute their local chi2
     if (globalChi2 < 0.) return kFALSE;
     
     // Loop over removable clusters and compute their local chi2
+    AliMUONTrackParam* trackParamAtCluster;
     AliMUONTrackParam* trackParamAtCluster1;
     AliMUONVCluster *cluster, *discardedCluster;
     Int_t iCluster1, iCluster2, iCurrentCluster1, iCurrentCluster2;
     AliMUONTrackParam* trackParamAtCluster1;
     AliMUONVCluster *cluster, *discardedCluster;
     Int_t iCluster1, iCluster2, iCurrentCluster1, iCurrentCluster2;
@@ -646,8 +661,8 @@ Bool_t AliMUONTrack::ComputeLocalChi2(Bool_t accountForMCS)
     Double_t *dX = new Double_t[nClusters-1];
     Double_t *dY = new Double_t[nClusters-1];
     Double_t globalChi2b;
     Double_t *dX = new Double_t[nClusters-1];
     Double_t *dY = new Double_t[nClusters-1];
     Double_t globalChi2b;
-    AliMUONTrackParam* trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->First();
-    while (trackParamAtCluster) {
+    for (Int_t iCluster = 0; iCluster < nClusters ; iCluster++) { 
+      trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(iCluster));
       
       discardedCluster = trackParamAtCluster->GetClusterPtr();
       
       
       discardedCluster = trackParamAtCluster->GetClusterPtr();
       
@@ -696,8 +711,6 @@ Bool_t AliMUONTrack::ComputeLocalChi2(Bool_t accountForMCS)
 
       // Set local chi2
       trackParamAtCluster->SetLocalChi2(globalChi2 - globalChi2b);
 
       // Set local chi2
       trackParamAtCluster->SetLocalChi2(globalChi2 - globalChi2b);
-      
-      trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->After(trackParamAtCluster);
     }
     
     delete [] dX;
     }
     
     delete [] dX;
@@ -705,10 +718,12 @@ Bool_t AliMUONTrack::ComputeLocalChi2(Bool_t accountForMCS)
     
   } else { // without multiple scattering effects
     
     
   } else { // without multiple scattering effects
     
+    Int_t nClusters = GetNClusters();
+    AliMUONTrackParam* trackParamAtCluster;
     AliMUONVCluster *discardedCluster;
     Double_t dX, dY;
     AliMUONVCluster *discardedCluster;
     Double_t dX, dY;
-    AliMUONTrackParam* trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->First();
-    while (trackParamAtCluster) {
+    for (Int_t iCluster = 0; iCluster < nClusters ; iCluster++) { 
+      trackParamAtCluster = static_cast<AliMUONTrackParam*>(fTrackParamAtCluster->UncheckedAt(iCluster));
       
       discardedCluster = trackParamAtCluster->GetClusterPtr();
       
       
       discardedCluster = trackParamAtCluster->GetClusterPtr();
       
@@ -718,8 +733,6 @@ Bool_t AliMUONTrack::ComputeLocalChi2(Bool_t accountForMCS)
       
       // Set local chi2
       trackParamAtCluster->SetLocalChi2(dX * dX / discardedCluster->GetErrX2() + dY * dY / discardedCluster->GetErrY2());
       
       // Set local chi2
       trackParamAtCluster->SetLocalChi2(dX * dX / discardedCluster->GetErrX2() + dY * dY / discardedCluster->GetErrY2());
-    
-      trackParamAtCluster = (AliMUONTrackParam*) fTrackParamAtCluster->After(trackParamAtCluster);
     }
   
   }
     }
   
   }
@@ -1013,7 +1026,7 @@ Int_t AliMUONTrack::ClustersInCommon(AliMUONTrack* track, Int_t stMin, Int_t stM
   /// Returns the number of clusters in common in stations [stMin, stMax]
   /// between the current track ("this") and the track pointed to by "track".
   
   /// Returns the number of clusters in common in stations [stMin, stMax]
   /// between the current track ("this") and the track pointed to by "track".
   
-  if (!fTrackParamAtCluster || !this->fTrackParamAtCluster) return 0;
+  if (!track || !track->fTrackParamAtCluster || !this->fTrackParamAtCluster) return 0;
   
   Int_t chMin = 2 * stMin;
   Int_t chMax = 2 * stMax + 1;
   
   Int_t chMin = 2 * stMin;
   Int_t chMax = 2 * stMax + 1;
@@ -1072,7 +1085,6 @@ Int_t AliMUONTrack::FindCompatibleClusters(const AliMUONTrack &track, Double_t s
   /// Try to match clusters from this track with clusters from the given track within the provided sigma cut:
   /// - Fill the array compatibleCluster[iCh] with kTRUE if a compatible cluster has been found in chamber iCh.
   /// - Return the number of clusters of "this" track matched with one cluster of the given track.
   /// Try to match clusters from this track with clusters from the given track within the provided sigma cut:
   /// - Fill the array compatibleCluster[iCh] with kTRUE if a compatible cluster has been found in chamber iCh.
   /// - Return the number of clusters of "this" track matched with one cluster of the given track.
-  AliMUONTrackParam *trackParamAtCluster1, *trackParamAtCluster2;
   AliMUONVCluster *cluster1, *cluster2;
   Double_t chi2, dX, dY;
   Double_t chi2Max = sigmaCut * sigmaCut;
   AliMUONVCluster *cluster1, *cluster2;
   Double_t chi2, dX, dY;
   Double_t chi2Max = sigmaCut * sigmaCut;
@@ -1084,19 +1096,14 @@ Int_t AliMUONTrack::FindCompatibleClusters(const AliMUONTrack &track, Double_t s
   if (!track.fTrackParamAtCluster || !this->fTrackParamAtCluster) return nMatchClusters;
   
   // Loop over clusters of first track
   if (!track.fTrackParamAtCluster || !this->fTrackParamAtCluster) return nMatchClusters;
   
   // Loop over clusters of first track
-  trackParamAtCluster1 = (AliMUONTrackParam*) this->fTrackParamAtCluster->First();
-  while (trackParamAtCluster1) {
-    
-    cluster1 = trackParamAtCluster1->GetClusterPtr();
+  Int_t nCl1 = this->GetNClusters();
+  for(Int_t iCl1 = 0; iCl1 < nCl1; iCl1++) {
+    cluster1 = static_cast<AliMUONTrackParam*>(this->fTrackParamAtCluster->UncheckedAt(iCl1))->GetClusterPtr();
     
     // Loop over clusters of second track
     
     // Loop over clusters of second track
-    trackParamAtCluster2 = (AliMUONTrackParam*) track.fTrackParamAtCluster->First();
-    while (trackParamAtCluster2) {
-      
-      cluster2 = trackParamAtCluster2->GetClusterPtr();
-      
-      //prepare next step
-      trackParamAtCluster2 = (AliMUONTrackParam*) track.fTrackParamAtCluster->After(trackParamAtCluster2);
+    Int_t nCl2 = track.GetNClusters();
+    for(Int_t iCl2 = 0; iCl2 < nCl2; iCl2++) {
+      cluster2 = static_cast<AliMUONTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(iCl2))->GetClusterPtr();
       
       // check DE Id
       if (cluster1->GetDetElemId() != cluster2->GetDetElemId()) continue;
       
       // check DE Id
       if (cluster1->GetDetElemId() != cluster2->GetDetElemId()) continue;
@@ -1112,7 +1119,6 @@ Int_t AliMUONTrack::FindCompatibleClusters(const AliMUONTrack &track, Double_t s
       break;
     }
     
       break;
     }
     
-    trackParamAtCluster1 = (AliMUONTrackParam*) this->fTrackParamAtCluster->After(trackParamAtCluster1);
   }
   
   return nMatchClusters;
   }
   
   return nMatchClusters;
index 10620410c185d7d63c06f2904081521347343c0a..720f2150e5bcf0e1f4ef64985811f04dd4cfb332 100644 (file)
@@ -14,7 +14,7 @@
 /// Reconstructed track in ALICE dimuon spectrometer
 ////////////////////////////////////////////////////
 
 /// Reconstructed track in ALICE dimuon spectrometer
 ////////////////////////////////////////////////////
 
-#include <TClonesArray.h>
+#include <TObjArray.h>
 #include <TMatrixD.h>
 
 class AliMUONVCluster;
 #include <TMatrixD.h>
 
 class AliMUONVCluster;
@@ -32,7 +32,7 @@ class AliMUONTrack : public TObject
 
   void Reset();
   
 
   void Reset();
   
-  TClonesArray* GetTrackParamAtCluster() const;
+  TObjArray*    GetTrackParamAtCluster() const;
   void          AddTrackParamAtCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster &cluster, Bool_t copy = kFALSE); 
   void          RemoveTrackParamAtCluster(AliMUONTrackParam *trackParam);
   Bool_t        UpdateTrackParamAtCluster();
   void          AddTrackParamAtCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster &cluster, Bool_t copy = kFALSE); 
   void          RemoveTrackParamAtCluster(AliMUONTrackParam *trackParam);
   Bool_t        UpdateTrackParamAtCluster();
@@ -149,7 +149,7 @@ class AliMUONTrack : public TObject
   
   static const Double_t fgkMaxChi2; ///< maximum chi2 above which the track can be considered as abnormal
   
   
   static const Double_t fgkMaxChi2; ///< maximum chi2 above which the track can be considered as abnormal
   
-  mutable TClonesArray* fTrackParamAtCluster; ///< Track parameters at cluster
+  mutable TObjArray* fTrackParamAtCluster; ///< Track parameters at cluster
   
   Bool_t   fFitWithVertex;   //!< kTRUE if using the vertex to constrain the fit, kFALSE if not
   Double_t fVertexErrXY2[2]; //!< Vertex resolution square used during the tracking procedure if required
   
   Bool_t   fFitWithVertex;   //!< kTRUE if using the vertex to constrain the fit, kFALSE if not
   Double_t fVertexErrXY2[2]; //!< Vertex resolution square used during the tracking procedure if required
@@ -187,7 +187,7 @@ class AliMUONTrack : public TObject
   void   ComputeMCSCovariances(TMatrixD& mcsCovariances) const;
   
   
   void   ComputeMCSCovariances(TMatrixD& mcsCovariances) const;
   
   
-  ClassDef(AliMUONTrack, 9) // Reconstructed track in ALICE dimuon spectrometer
+  ClassDef(AliMUONTrack, 10) // Reconstructed track in ALICE dimuon spectrometer
 };
        
 #endif
 };
        
 #endif
index 582b7bff0393eabdcfefeee5f249e09463d01179..e609c96b630ef9bc97bdd93b1dbf355da1ba7292 100644 (file)
@@ -61,7 +61,7 @@
 
 #include <Riostream.h>
 #include <TArrayS.h>
 
 #include <Riostream.h>
 #include <TArrayS.h>
-#include <TClonesArray.h>
+#include <TObjArray.h>
 #include <TMath.h>
 #include <TMatrixD.h>
 #include <TROOT.h>
 #include <TMath.h>
 #include <TMatrixD.h>
 #include <TROOT.h>
index 54eefe71a242303b4764520ae487f864632b9f8c..b906d2d6589d0c723eda2f75a4c5402299870848 100644 (file)
@@ -45,6 +45,7 @@
 #include <Riostream.h>
 #include <TMath.h>
 #include <TMatrixD.h>
 #include <Riostream.h>
 #include <TMath.h>
 #include <TMatrixD.h>
+#include <TClonesArray.h>
 
 // Functions to be minimized with Minuit
 void TrackChi2(Int_t &nParam, Double_t *gradient, Double_t &chi2, Double_t *param, Int_t flag);
 
 // Functions to be minimized with Minuit
 void TrackChi2(Int_t &nParam, Double_t *gradient, Double_t &chi2, Double_t *param, Int_t flag);
index 8c265ba3b3bd0b1905b98497cf0a369dd5924559..db0b4bff1fa51365de00e0614fca914d908d921d 100644 (file)
@@ -46,6 +46,7 @@
 #include <Riostream.h>
 #include <TMath.h>
 #include <TMatrixD.h>
 #include <Riostream.h>
 #include <TMath.h>
 #include <TMatrixD.h>
+#include <TClonesArray.h>
 
 /// \cond CLASSIMP
 ClassImp(AliMUONTrackReconstructorK) // Class implementation in ROOT context
 
 /// \cond CLASSIMP
 ClassImp(AliMUONTrackReconstructorK) // Class implementation in ROOT context
index b668486b33fa4a0bcd5eb8eb2476bc8a44a72a0c..b62e2eeb62c973480ac12811bbb133323cfbe3b8 100644 (file)
@@ -24,7 +24,7 @@
 #if !defined(__CINT__) || defined(__MAKECINT__)
 #include <TStopwatch.h>
 #include <TFile.h>
 #if !defined(__CINT__) || defined(__MAKECINT__)
 #include <TStopwatch.h>
 #include <TFile.h>
-#include <TClonesArray.h>
+#include <TObjArray.h>
 #include <TTree.h>
 #include <TString.h>
 #include <Riostream.h>
 #include <TTree.h>
 #include <TString.h>
 #include <Riostream.h>
index 271938d0fab3c1d9ca8922013d6af33ad893367f..582761747c8c8beb11813e0222a177c2ccd4d166 100644 (file)
@@ -5,7 +5,7 @@
 #include <TCanvas.h>
 #include <Riostream.h>
 #include <TROOT.h>
 #include <TCanvas.h>
 #include <Riostream.h>
 #include <TROOT.h>
-#include <TClonesArray.h>
+#include <TObjArray.h>
 #include <TArrayI.h>
 
 // STEER includes
 #include <TArrayI.h>
 
 // STEER includes
index ccf0a7a4beb81f24f70d92728d68b627a3f3e129..7828198b1d2596a774f958b862ade0ae5563b0d1 100644 (file)
@@ -28,7 +28,7 @@
 // ROOT includes
 #include <Riostream.h>
 #include "TMath.h"
 // ROOT includes
 #include <Riostream.h>
 #include "TMath.h"
-#include "TClonesArray.h"
+#include "TObjArray.h"
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
 #include "TH1.h"
 #include "TH2.h"
 #include "TH3.h"
index d6c271dd15e3b84fd33cf7312fc11e29af887957..8991459355b2c9b6add8c47505d5a4c669839c2a 100644 (file)
@@ -44,7 +44,7 @@
 //include ROOT:
 #include <TH2F.h>
 #include <TList.h>
 //include ROOT:
 #include <TH2F.h>
 #include <TList.h>
-#include <TClonesArray.h>
+#include <TObjArray.h>
 
 /// \cond CLASSIMP
 ClassImp(AliCheckMuonDetEltResponse)
 
 /// \cond CLASSIMP
 ClassImp(AliCheckMuonDetEltResponse)
@@ -148,7 +148,6 @@ AliCheckMuonDetEltResponse::~AliCheckMuonDetEltResponse()
 
 {
 /// Destructor
 
 {
 /// Destructor
-    delete fTrackParams;
 }
 
 
 }
 
 
@@ -178,7 +177,6 @@ void AliCheckMuonDetEltResponse::TrackLoop()
   Int_t nTracks, iTrack;
 
   nTracks = (Int_t)fESD -> GetNumberOfMuonTracks();
   Int_t nTracks, iTrack;
 
   nTracks = (Int_t)fESD -> GetNumberOfMuonTracks();
-  fTrackParams = new TClonesArray();
   ///Begininig of the loop:
   //if (fESD->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL"))
   {
   ///Begininig of the loop:
   //if (fESD->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL"))
   {
index eb200007ea5e2847e25a78ed9674ba48d0d4a796..b2dbc4d90e56090e83a78c981c5dba435ed16cff 100644 (file)
@@ -16,7 +16,7 @@ class AliMUONTrack;
 class AliMUONVCluster;
 class AliMUONGeometryTransformer;
 class TList;
 class AliMUONVCluster;
 class AliMUONGeometryTransformer;
 class TList;
-class TClonesArray;
+class TObjArray;
 
 class AliCheckMuonDetEltResponse : public TObject
 {
 
 class AliCheckMuonDetEltResponse : public TObject
 {
@@ -74,7 +74,7 @@ private:
   Int_t fTrackFilter[10];        //!<To select track for the efficiency calculation.
   Int_t fNbrUsableTracks;        //!<Number of usable tracks (matches trigger and contains traker data, plus a trigger condition for cosmic)
 
   Int_t fTrackFilter[10];        //!<To select track for the efficiency calculation.
   Int_t fNbrUsableTracks;        //!<Number of usable tracks (matches trigger and contains traker data, plus a trigger condition for cosmic)
 
-  TClonesArray     * fTrackParams;  //!<Array of track param
+  TObjArray        * fTrackParams;  //!<Array of track param
   AliMUONTrackParam* fTrackParam;   //!<Current track param
   AliMUONVCluster  * fCluster;      //!<Current cluster
 
   AliMUONTrackParam* fTrackParam;   //!<Current track param
   AliMUONVCluster  * fCluster;      //!<Current cluster