]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveDet/AliEveMUONTrack.cxx
Coverit
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveMUONTrack.cxx
index 2694e3ea611846f1be8bdd5c92f218eb4a1960f6..b36b48e8e1f8b4571f358361e806f9bd20a5d7c0 100644 (file)
@@ -1,20 +1,19 @@
-// $Id$
-// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
+
+// Main authors: Matevz Tadel & Alja Mrak-Tadel & Bogdan Vulpescu: 2006, 2007
 
 /**************************************************************************
  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
  * full copyright notice.                                                 *
  **************************************************************************/
+
 #include "AliEveMUONTrack.h"
 
 #include <EveBase/AliEveEventManager.h>
 
 #include <AliMagF.h>
-#include <AliMagFMaps.h>
 #include <AliLog.h>
 #include <AliESDMuonTrack.h>
-#include <AliTrackReference.h>
 #include <AliESDEvent.h>
 #include <AliESDVertex.h>
 #include <AliRunLoader.h>
 #include <AliMUONTriggerTrack.h>
 #include <AliMUONTrackParam.h>
 #include <AliMUONConstants.h>
+#include <AliMUONESDInterface.h>
+#include <AliMUONVCluster.h>
 
 #include <TClonesArray.h>
-#include <TMath.h>
-#include <TMatrixD.h>
-#include <TStyle.h>
-#include <TROOT.h>
+#include <TGeoGlobalMagField.h>
 #include <TParticle.h>
 #include <TParticlePDG.h>
+#include <TROOT.h>
+#include <TStyle.h>
 
 #include <Riostream.h>
 
+//==============================================================================
+// AliEveMUONTrack
+//==============================================================================
+//==============================================================================
 
 //______________________________________________________________________________
-// AliEveMUONTrack
 // Produce TEveUtil:TEveTrack from AliMUONTrack with dipole field model
 
 ClassImp(AliEveMUONTrack)
 
-AliMagF* AliEveMUONTrack::fFieldMap = 0;
 
 //______________________________________________________________________________
 AliEveMUONTrack::AliEveMUONTrack(TEveRecTrack* t, TEveTrackPropagator* rs) :
@@ -59,9 +61,6 @@ AliEveMUONTrack::AliEveMUONTrack(TEveRecTrack* t, TEveTrackPropagator* rs) :
   //
   // constructor
   //
-
-  fFieldMap = AliEveEventManager::AssertMagField();
-
 }
 
 //______________________________________________________________________________
@@ -134,7 +133,7 @@ void AliEveMUONTrack::PrintMUONTrackInfo()
   // information about the reconstructed/reference track; at hits and at vertex
   //
 
-  Double_t RADDEG = 180.0/TMath::Pi();
+  Double_t radDeg = 180.0/TMath::Pi();
 
   Int_t nparam;
   Float_t pt, bc, nbc, zc;
@@ -187,10 +186,10 @@ void AliEveMUONTrack::PrintMUONTrackInfo()
       mtp->GetInverseBendingMomentum() << "    " <<
 
       setw(8) << setprecision(3) <<
-      mtp->GetBendingSlope()*RADDEG << "       " <<
+      mtp->GetBendingSlope()*radDeg << "       " <<
 
       setw(8) << setprecision(3) <<
-      mtp->GetNonBendingSlope()*RADDEG << "    " <<
+      mtp->GetNonBendingSlope()*radDeg << "    " <<
 
       setw(8) << setprecision(4) <<
       mtp->GetBendingCoor() << "       " <<
@@ -236,10 +235,10 @@ void AliEveMUONTrack::PrintMUONTrackInfo()
     mtp->GetInverseBendingMomentum() << "    " <<
 
     setw(8) << setprecision(3) <<
-    mtp->GetBendingSlope()*RADDEG << "       " <<
+    mtp->GetBendingSlope()*radDeg << "       " <<
 
     setw(8) << setprecision(3) <<
-    mtp->GetNonBendingSlope()*RADDEG << "    " <<
+    mtp->GetNonBendingSlope()*radDeg << "    " <<
 
     setw(8) << setprecision(4) <<
     bc << "       " <<
@@ -280,7 +279,7 @@ void AliEveMUONTrack::PrintMUONTriggerTrackInfo()
   // information about the trigger track
   //
 
-  // Double_t RADDEG = 180.0/TMath::Pi();
+  // Double_t radDeg = 180.0/TMath::Pi();
 
 }
 
@@ -291,7 +290,7 @@ void AliEveMUONTrack::PrintESDTrackInfo()
   // information about the reconstructed ESD track at vertex
   //
 
-  Double_t RADDEG = 180.0/TMath::Pi();
+  Double_t radDeg = 180.0/TMath::Pi();
   Float_t pt;
 
   AliMUONTrackParam *mtp = (AliMUONTrackParam*)fTrack->GetTrackParamAtVertex();
@@ -307,10 +306,10 @@ void AliEveMUONTrack::PrintESDTrackInfo()
     mtp->GetInverseBendingMomentum() << "    " <<
 
     setw(8) << setprecision(3) <<
-    mtp->GetBendingSlope()*RADDEG << "       " <<
+    mtp->GetBendingSlope()*radDeg << "       " <<
 
     setw(8) << setprecision(3) <<
-    mtp->GetNonBendingSlope()*RADDEG << "     " <<
+    mtp->GetNonBendingSlope()*radDeg << "     " <<
 
     setw(8) << setprecision(4) <<
     mtp->GetBendingCoor() << "       " <<
@@ -469,69 +468,62 @@ void AliEveMUONTrack::MakeMUONTrack(AliMUONTrack *mtrack)
   // builds the track with dipole field
   //
 
-  if (!fIsRefTrack) {
-    fIsMUONTrack = kTRUE;
-    fTrack    = mtrack;
-  }
-
-  if (fIsRefTrack) {
-    fTrack = new AliMUONTrack(*mtrack);
+  if (!fIsESDTrack) {
+    if (!fIsRefTrack) {
+      fIsMUONTrack = kTRUE;
+      fTrack = mtrack;
+    } else {
+      fTrack = new AliMUONTrack(*mtrack);
+    }
   }
 
   Double_t xv, yv;
   Float_t ax, bx, ay, by;
   Float_t xr[28], yr[28], zr[28];
   Float_t xrc[28], yrc[28], zrc[28];
+  Int_t chr[28];
   char form[1000];
 
   TMatrixD smatrix(2,2);
   TMatrixD sums(2,1);
   TMatrixD res(2,1);
 
-  Float_t xRec, xRec0;
-  Float_t yRec, yRec0;
-  Float_t zRec, zRec0;
-
   // middle z between the two detector planes of the trigger chambers
   Float_t zg[4] = { -1603.5, -1620.5, -1703.5, -1720.5 };
 
   Float_t pt    = 0.0;
-  Float_t pv[3] = { 0.0 };
+  Float_t pv[3] = {0., 0., 0.};
 
   if (fIsMUONTrack) {
     if (mtrack->GetMatchTrigger()) {
-      sprintf(form,"AliEveMUONTrack %2d (MT)", fLabel);
+      snprintf(form,1000,"MUONTrack %2d (MT)", fLabel);
     } else {
-      sprintf(form,"AliEveMUONTrack %2d     ", fLabel);
+      snprintf(form,1000,"MUONTrack %2d     ", fLabel);
     }
     SetName(form);
     SetLineStyle(1);
   }
 
-  AliMUONTrackParam *trackParam = mtrack->GetTrackParamAtVertex();
-  xRec0  = trackParam->GetNonBendingCoor();
-  yRec0  = trackParam->GetBendingCoor();
-  zRec0  = trackParam->GetZ();
-
-  if (fIsMUONTrack) {
-    SetPoint(fCount,xRec0,yRec0,zRec0);
+  AliMUONTrackParam *trackParam = 0x0;
+  if (fIsMUONTrack || fIsESDTrack) {
+    trackParam = mtrack->GetTrackParamAtVertex();
+    SetPoint(fCount,trackParam->GetNonBendingCoor(),trackParam->GetBendingCoor(),trackParam->GetZ());
     fCount++;
   }
 
-  for (Int_t i = 0; i < 28; i++) xr[i]=yr[i]=zr[i]=0.0;
-
+  for (Int_t i = 0; i < 28; i++) {
+    xr[i]=yr[i]=zr[i]=0.0;
+    chr[i]=-1;
+  }
+  
   Int_t nTrackHits = mtrack->GetNClusters();
-
-  Bool_t hitChamber[14] = {kFALSE};
-  Int_t iCha;
   TClonesArray* trackParamAtCluster = mtrack->GetTrackParamAtCluster();
-
   for (Int_t iHit = 0; iHit < nTrackHits; iHit++){
 
     trackParam = (AliMUONTrackParam*) trackParamAtCluster->At(iHit);
 
     if (iHit == 0) {
-      if (IsMUONTrack()) {
+      if (IsMUONTrack() || IsESDTrack()) {
        pt = TMath::Sqrt(trackParam->Px()*trackParam->Px()+trackParam->Py()*trackParam->Py());
        SetLineColor(ColorIndex(pt));
       }
@@ -541,141 +533,25 @@ void AliEveMUONTrack::MakeMUONTrack(AliMUONTrack *mtrack)
       fP.Set(pv);
     }
 
-    xRec  = trackParam->GetNonBendingCoor();
-    yRec  = trackParam->GetBendingCoor();
-    zRec  = trackParam->GetZ();
-
-    iCha = AliMUONConstants::ChamberNumber(zRec);
-
-    xr[iHit] = xRec;
-    yr[iHit] = yRec;
-    zr[iHit] = zRec;
-
-    hitChamber[iCha] = kTRUE;
+    xr[iHit] = trackParam->GetNonBendingCoor();
+    yr[iHit] = trackParam->GetBendingCoor();
+    zr[iHit] = trackParam->GetZ();
+    chr[iHit] = trackParam->GetClusterPtr()->GetChamberId();
 
   }
-
-  Int_t crntCha, lastHitSt12, firstHitSt3, lastHitSt3, firstHitSt45;
-
-  if (fIsMUONTrack) nTrackHits = 10;
-
-  lastHitSt12  = -1;
-  firstHitSt3  = -1;
-  lastHitSt3   = -1;
-  firstHitSt45 = -1;
-  for (Int_t iHit = 0; iHit < nTrackHits; iHit++) {
-    crntCha = AliMUONConstants::ChamberNumber(zr[iHit]);
-    if (hitChamber[crntCha] && crntCha >= 0 && crntCha <= 3) {
-      lastHitSt12 = iHit;
-    }
-    if (hitChamber[crntCha] && crntCha >= 4 && crntCha <= 5) {
-      if (firstHitSt3 == -1) firstHitSt3 = iHit;
-      lastHitSt3 = iHit;
-    }
-    if (hitChamber[crntCha] && crntCha >= 6 && crntCha <= 9) {
-      if (firstHitSt45 == -1) firstHitSt45 = iHit;
-    }
-  }
-
-  if (lastHitSt12 >= 0) {
-    for (Int_t iHit = 0; iHit <= lastHitSt12; iHit++) {
-      SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-      fCount++;
-    }
-    if (firstHitSt3 >= 0) {
-      Propagate(xr,yr,zr,lastHitSt12,firstHitSt3);
-      SetPoint(fCount,xr[firstHitSt3],yr[firstHitSt3],zr[firstHitSt3]);
-      fCount++;
-      if (lastHitSt3 >= 0) {
-       SetPoint(fCount,xr[lastHitSt3],yr[lastHitSt3],zr[lastHitSt3]);
-       fCount++;
-       if (firstHitSt45 >= 0) {
-         Propagate(xr,yr,zr,lastHitSt3,firstHitSt45);
-         for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-           SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-           fCount++;
-         }
-       } else {
-         Propagate(xr,yr,zr,lastHitSt3,9999);
-       }
-      } else if (firstHitSt45 >= 0) {
-       Propagate(xr,yr,zr,firstHitSt3,firstHitSt45);
-       for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-         SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-         fCount++;
-       }
-      } else {
-       Propagate(xr,yr,zr,firstHitSt3,9999);
-      }
-    } else if (lastHitSt3 >= 0) {
-      Propagate(xr,yr,zr,lastHitSt12,lastHitSt3);
-      SetPoint(fCount,xr[lastHitSt3],yr[lastHitSt3],zr[lastHitSt3]);
-      fCount++;
-      if (firstHitSt45 >= 0) {
-       Propagate(xr,yr,zr,lastHitSt3,firstHitSt45);
-       for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-         SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-         fCount++;
-       }
-      } else {
-       Propagate(xr,yr,zr,lastHitSt3,9999);
-      }
-    } else if (firstHitSt45 >= 0){
-      Propagate(xr,yr,zr,lastHitSt12,firstHitSt45);
-      for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-       SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-       fCount++;
-      }
-    } else {
-      Propagate(xr,yr,zr,lastHitSt12,9999);
-    }
-  } else if (firstHitSt3 >= 0) {
-    SetPoint(fCount,xr[firstHitSt3],yr[firstHitSt3],zr[firstHitSt3]);
+  
+  SetPoint(fCount,xr[0],yr[0],zr[0]);
+  fCount++;
+  for (Int_t iHit = 1; iHit < nTrackHits; iHit++) {
+    if (chr[iHit] > 3 && chr[iHit-1] < 6) Propagate(xr,yr,zr,iHit-1,iHit);
+    SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
     fCount++;
-    if (lastHitSt3 >= 0) {
-      SetPoint(fCount,xr[lastHitSt3],yr[lastHitSt3],zr[lastHitSt3]);
-      fCount++;
-      if (firstHitSt45) {
-       Propagate(xr,yr,zr,lastHitSt3,firstHitSt45);
-       for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-         SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-         fCount++;
-       }
-      } else {
-       Propagate(xr,yr,zr,lastHitSt3,9999);
-      }
-    } else if (firstHitSt45 >= 0) {
-      Propagate(xr,yr,zr,firstHitSt3,firstHitSt45);
-      for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-       SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-       fCount++;
-      }
-    } else {
-      Propagate(xr,yr,zr,firstHitSt3,9999);
-    }
-  } else if (lastHitSt3 >= 0) {
-    SetPoint(fCount,xr[lastHitSt3],yr[lastHitSt3],zr[lastHitSt3]);
-    fCount++;
-    if (firstHitSt45 >= 0) {
-      Propagate(xr,yr,zr,lastHitSt3,firstHitSt45);
-      for (Int_t iHit = firstHitSt45; iHit < nTrackHits; iHit++) {
-       SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-       fCount++;
-      }
-    } else {
-      Propagate(xr,yr,zr,lastHitSt3,9999);
-    }
-  } else {
-    for (Int_t iHit = 0; iHit < nTrackHits; iHit++) {
-      SetPoint(fCount,xr[iHit],yr[iHit],zr[iHit]);
-      fCount++;
-    }
   }
-
-  if (!fIsMUONTrack) return;
+  
+  if (!fIsMUONTrack && !fIsESDTrack) return;
 
   Int_t nrc = 0;
-  if (mtrack->GetMatchTrigger() && 1) {
+  if (mtrack->GetMatchTrigger()) {
 
     for (Int_t i = 0; i < nTrackHits; i++) {
       if (TMath::Abs(zr[i]) > 1000.0) {
@@ -767,7 +643,7 @@ void AliEveMUONTrack::MakeMUONTriggerTrack(AliMUONTriggerTrack *mtrack)
 
   char form[1000];
 
-  sprintf(form,"MUONTriggerTrack %2d",mtrack->GetLoTrgNum());
+  snprintf(form,1000,"MUONTriggerTrack %2d",mtrack->GetLoTrgNum());
   SetName(form);
   SetLineStyle(1);
 
@@ -782,53 +658,27 @@ void AliEveMUONTrack::MakeESDTrack(AliESDMuonTrack *mtrack)
 
   fIsESDTrack = kTRUE;
 
-  fTrack = new AliMUONTrack();
-  AliMUONTrackParam trackParam;
-  trackParam.GetParamFrom(*mtrack);
-  fTrack->SetTrackParamAtVertex(&trackParam);
-  fTrack->SetMatchTrigger(mtrack->GetMatchTrigger());
-
   char form[1000];
-  sprintf(form,"ESDTrack %2d ", fLabel);
+  if (mtrack->GetMatchTrigger()) {
+    snprintf(form,1000,"ESDTrack %2d (MT)", fLabel);
+  } else {
+    snprintf(form,1000,"ESDTrack %2d     ", fLabel);
+  }
   SetName(form);
   SetLineStyle(3);
   SetLineColor(0);
 
-  Double_t vect[7], vout[7];
-  Double_t step = 1.0;
-
-  Int_t charge = (Int_t)TMath::Sign(1.0,trackParam.GetInverseBendingMomentum());
-  Float_t pv[3];
-  pv[0] = trackParam.Px();
-  pv[1] = trackParam.Py();
-  pv[2] = trackParam.Pz();
-  fP.Set(pv);
-
-  vect[0] = trackParam.GetNonBendingCoor();
-  vect[1] = trackParam.GetBendingCoor();
-  vect[2] = trackParam.GetZ();
-  vect[3] = trackParam.Px()/trackParam.P();
-  vect[4] = trackParam.Py()/trackParam.P();
-  vect[5] = trackParam.Pz()/trackParam.P();
-  vect[6] = trackParam.P();
-
-  //cout << "vertex " << vect[0] << "   " << vect[1] << "   " << vect[2] << "   " << endl;
-
-  Double_t zMax = -1750.0;
-  Double_t rMax =   350.0;
-  Double_t r    =     0.0;
+  fTrack = new AliMUONTrack();
 
-  Int_t nSteps = 0;
-  while ((vect[2] > zMax) && (nSteps < 10000) && (r < rMax)) {
-    nSteps++;
-    OneStepRungekutta(charge, step, vect, vout);
-    SetPoint(fCount,vout[0],vout[1],vout[2]);
-    fCount++;
-    for (Int_t i = 0; i < 7; i++) {
-      vect[i] = vout[i];
-    }
-    r = TMath::Sqrt(vect[0]*vect[0]+vect[1]*vect[1]);
-  }
+  // create a simple track from the ESD track
+  AliMUONESDInterface::ESDToMUON(*mtrack,*fTrack);
+  
+  // reset track parameters at vertex to the ones at DCA
+  AliMUONTrackParam paramAtDCA;
+  AliMUONESDInterface::GetParamAtDCA(*mtrack, paramAtDCA);
+  fTrack->SetTrackParamAtVertex(&paramAtDCA);
+  
+  MakeMUONTrack(fTrack);
 
 }
 
@@ -844,7 +694,7 @@ void AliEveMUONTrack::MakeMCTrack(TParticle *part)
   fPart     = new TParticle(*part);
 
   char form[1000];
-  sprintf(form,"TEveMCTrack %2d ", fLabel);
+  snprintf(form,1000,"TEveMCTrack %2d ", fLabel);
   SetName(form);
   SetLineStyle(2);
   SetLineColor(8);
@@ -897,7 +747,7 @@ void AliEveMUONTrack::MakeRefTrack(AliMUONTrack *mtrack)
   fIsRefTrack = kTRUE;
 
   char form[1000];
-  sprintf(form,"RefTrack %2d ", fLabel);
+  snprintf(form,1000,"RefTrack %2d ", fLabel);
   SetName(form);
   SetLineStyle(2);
   SetLineColor(0);
@@ -928,23 +778,23 @@ void AliEveMUONTrack::Propagate(Float_t *xr, Float_t *yr, Float_t *zr, Int_t i1,
 
   trackParamAtCluster = fTrack->GetTrackParamAtCluster();
 
-  if (IsMUONTrack()) {
+  if (IsMUONTrack() || IsESDTrack()) {
     trackParam = (AliMUONTrackParam*)trackParamAtCluster->At(i1);
-    charge = (Int_t)TMath::Sign(1.0,trackParam->GetInverseBendingMomentum());
+    charge = (Int_t)trackParam->GetCharge();
   }
   if (IsRefTrack()) {
     trackParam = fTrack->GetTrackParamAtVertex();
-    charge = (Int_t)TMath::Sign(1.0,trackParam->GetInverseBendingMomentum());
+    charge = (Int_t)trackParam->GetCharge();
     trackParam = (AliMUONTrackParam*)trackParamAtCluster->At(i1);
   }
 
   vect[0] = xr[i1];
   vect[1] = yr[i1];
   vect[2] = zr[i1];
-  vect[3] = trackParam->Px()/trackParam->P();
-  vect[4] = trackParam->Py()/trackParam->P();
-  vect[5] = trackParam->Pz()/trackParam->P();
   vect[6] = trackParam->P();
+  vect[3] = trackParam->Px()/vect[6];
+  vect[4] = trackParam->Py()/vect[6];
+  vect[5] = trackParam->Pz()/vect[6];
 
   Int_t nSteps = 0;
   while ((vect[2] > zMax) && (nSteps < 10000)) {
@@ -959,37 +809,6 @@ void AliEveMUONTrack::Propagate(Float_t *xr, Float_t *yr, Float_t *zr, Int_t i1,
 
 }
 
-//______________________________________________________________________________
-void AliEveMUONTrack::GetField(Double_t *position, Double_t *field)
-{
-  //
-  // returns field components at position, for a give field map
-  //
-
-  /// interface for arguments in double precision (Why ? ChF)
-  Float_t x[3], b[3];
-
-  x[0] = position[0]; x[1] = position[1]; x[2] = position[2];
-
-  if (fFieldMap) {
-    fFieldMap->Field(x,b);
-  }
-  else {
-    AliWarning("No field map");
-    field[0] = field[1] = field[2] = 0.0;
-    return;
-  }
-
-  // force components
-  //b[1] = 0.0;
-  //b[2] = 0.0;
-
-  field[0] = b[0]; field[1] = b[1]; field[2] = b[2];
-
-  return;
-
-}
-
 //______________________________________________________________________________
 void AliEveMUONTrack::OneStepRungekutta(Double_t charge, Double_t step,
                                  Double_t* vect, Double_t* vout)
@@ -1068,8 +887,7 @@ void AliEveMUONTrack::OneStepRungekutta(Double_t charge, Double_t step,
       rest  = step - tl;
       if (TMath::Abs(h) > TMath::Abs(rest)) h = rest;
       //cmodif: call gufld(vout,f) changed into:
-
-      GetField(vout,f);
+      TGeoGlobalMagField::Instance()->Field(vout,f);
 
       // *
       // *             start of integration
@@ -1113,7 +931,7 @@ void AliEveMUONTrack::OneStepRungekutta(Double_t charge, Double_t step,
       xyzt[2] = zt;
 
       //cmodif: call gufld(xyzt,f) changed into:
-      GetField(xyzt,f);
+      TGeoGlobalMagField::Instance()->Field(xyzt,f);
 
       at     = a + secxs[0];
       bt     = b + secys[0];
@@ -1150,7 +968,7 @@ void AliEveMUONTrack::OneStepRungekutta(Double_t charge, Double_t step,
       xyzt[2] = zt;
 
       //cmodif: call gufld(xyzt,f) changed into:
-      GetField(xyzt,f);
+      TGeoGlobalMagField::Instance()->Field(xyzt,f);
 
       z      = z + (c + (seczs[0] + seczs[1] + seczs[2]) * kthird) * h;
       y      = y + (b + (secys[0] + secys[1] + secys[2]) * kthird) * h;
@@ -1243,7 +1061,7 @@ Int_t AliEveMUONTrack::ColorIndex(Float_t val)
   //
 
   Float_t threshold =  0.0;
-  Float_t maxVal    =  2.0;
+  Float_t maxVal    = 10.0;
 
   Float_t div  = TMath::Max(1, (Int_t)(maxVal - threshold));
   Int_t   nCol = gStyle->GetNumberOfColors();
@@ -1252,3 +1070,32 @@ Int_t AliEveMUONTrack::ColorIndex(Float_t val)
   return gStyle->GetColorPalette(TMath::Min(nCol - 1, cBin));
 
 }
+
+//==============================================================================
+// Temporary AliEveMUONTrackList
+//==============================================================================
+
+//______________________________________________________________________________
+void AliEveMUONTrackList::HackMomentumLimits(Bool_t recurse)
+{
+  // Find momentum limits from included tracks.
+
+  fLimPt = fLimP = 0;
+
+  for (List_i i=BeginChildren(); i!=EndChildren(); ++i)
+  {
+    TEveTrack* track = dynamic_cast<TEveTrack*>(*i);
+    if (track)
+    {
+      fLimPt = TMath::Max(fLimPt, track->GetMomentum().Perp());
+      fLimP  = TMath::Max(fLimP,  track->GetMomentum().Mag());
+    }
+    if (recurse)
+      FindMomentumLimits(*i, recurse);
+  }
+
+  fLimPt = RoundMomentumLimit(fLimPt);
+  fLimP  = RoundMomentumLimit(fLimP);
+  if (fMaxPt == 0) fMaxPt = fLimPt;
+  if (fMaxP  == 0) fMaxP  = fLimP;
+}