In reconstruction:
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 Nov 2009 10:54:49 +0000 (10:54 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 3 Nov 2009 10:54:49 +0000 (10:54 +0000)
Add the possibility to adjust chamber by chamber the x/x0 value used
in the computation of Multiple Coulomb Scattering effets (driven by the fact
that it is ~2 times higher for St1&2 than for others).
The choice of these values has a little effect on the resolution of the
tracking, but it can change significantly the size of the area where
we search for new clusters to be attached to the track.
(Philippe P.)

MUON/AliMUONConstants.cxx
MUON/AliMUONConstants.h
MUON/AliMUONTrack.cxx
MUON/AliMUONTrackReconstructor.cxx
MUON/AliMUONTrackReconstructorK.cxx
MUON/AliMUONVTrackReconstructor.cxx
MUON/AliMUONVTrackReconstructor.h

index bece423..5f39ed1 100644 (file)
@@ -108,7 +108,7 @@ const Double_t AliMUONConstants::fgkMuonFilterZEnd = -1471.-120.;
 const Double_t AliMUONConstants::fgkMuonFilterX0 = 1.76;
 
 // Defaults parameters for track reconstruction
-Double_t  AliMUONConstants::fgChamberThicknessInX0 = 0.045;
+Double_t AliMUONConstants::fgChamberThicknessInX0[10] = {0.065, 0.065, 0.075, 0.075, 0.035, 0.035, 0.035, 0.035, 0.035, 0.035};
 
 const Double_t AliMUONConstants::fgkMostProbBendingMomentum = 2.0;
 
index 4726e0c..921b59c 100644 (file)
@@ -81,7 +81,7 @@ class AliMUONConstants : public TObject {
     /// Return z-position of absorber end
     static Double_t AbsZEnd() {return fgkAbsZEnd;}
     /// Return chamber thickness in X0
-    static Double_t ChamberThicknessInX0() {return fgChamberThicknessInX0;}
+    static Double_t ChamberThicknessInX0(Int_t chId) {return (chId >= 0 && chId < 10) ? fgChamberThicknessInX0[chId] : 0.;}
     /// Return Trigger ToF Limit (75 ns)
     static Float_t TriggerTofLimit() {return fgkTriggerTofLimit;}
     /// Return default trigger chamber resolution in non bending direction
@@ -131,7 +131,7 @@ class AliMUONConstants : public TObject {
     static Float_t  fgPitch;             ///< Wire pitch for St2 & Slats
     static Float_t  fgPitchSt1;          ///< Wire pitch for Station 1
 
-    static Double_t  fgChamberThicknessInX0; ///< default chamber thickness in X0 for reconstruction
+    static Double_t  fgChamberThicknessInX0[10]; ///< default chamber thickness in X0 for reconstruction
     
     static Double_t fgCoilZ; ///< Coil z-position
     static Double_t fgCoilL; ///< Coil lenght
index d402a98..202c0b6 100644 (file)
@@ -444,7 +444,7 @@ Bool_t AliMUONTrack::UpdateCovTrackParamAtCluster()
     trackParamAtCluster->SetCovariances(startingTrackParam->GetCovariances());
     
     // add MCS effect
-    AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(expectedChamber-1),-1.);
     
     // add MCS in missing chambers if any
     currentChamber = trackParamAtCluster->GetClusterPtr()->GetChamberId();
@@ -452,7 +452,7 @@ Bool_t AliMUONTrack::UpdateCovTrackParamAtCluster()
       // extrapolation to the missing chamber
       if (!AliMUONTrackExtrap::ExtrapToZCov(trackParamAtCluster, AliMUONConstants::DefaultChamberZ(expectedChamber))) extrapStatus = kFALSE;
       // add MCS effect
-      AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),-1.);
+      AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(expectedChamber),-1.);
       expectedChamber++;
     }
     
@@ -958,7 +958,7 @@ void AliMUONTrack::ComputeMCSCovariances(TMatrixD& mcsCovariances) const
         AliMUONTrackExtrap::ExtrapToZ(&extrapTrackParam, zMCS[size]);
         
         // Save multiple scattering dispersion angle in missing chamber
-        mcsAngle2[size] = AliMUONTrackExtrap::GetMCSAngle2(extrapTrackParam,AliMUONConstants::ChamberThicknessInX0(),1.);
+        mcsAngle2[size] = AliMUONTrackExtrap::GetMCSAngle2(extrapTrackParam,AliMUONConstants::ChamberThicknessInX0(expectedChamber),1.);
         
       } else mcsAngle2[size] = 0.;
       
@@ -970,7 +970,7 @@ void AliMUONTrack::ComputeMCSCovariances(TMatrixD& mcsCovariances) const
     zMCS[size] = trackParamAtCluster->GetZ();
     
     // Save multiple scattering dispersion angle in current chamber
-    mcsAngle2[size] = AliMUONTrackExtrap::GetMCSAngle2(*trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),1.);
+    mcsAngle2[size] = AliMUONTrackExtrap::GetMCSAngle2(*trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(currentChamber),1.);
     
     // Save indice in zMCS array corresponding to the current cluster
     indices[iCluster] = size;
index d0319d2..303af91 100644 (file)
@@ -488,16 +488,16 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInChamber(AliMUONTrack &trackCandid
   }
   
   // Add MCS effect
-  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
+  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   
   // Add MCS in the missing chamber(s) if any
-  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
   while (currentChamber > nextChamber + 1) {
     // extrapolation to the missing chamber
     currentChamber--;
     if (!AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(currentChamber))) return kFALSE;
     // add MCS effect
-    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   }
   
   //Extrapolate trackCandidate to chamber
@@ -645,16 +645,16 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
   }
   
   // Add MCS effect
-  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
+  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   
   // Add MCS in the missing chamber(s) if any
-  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
   while (ch1 < ch2 && currentChamber > ch2 + 1) {
     // extrapolation to the missing chamber
     currentChamber--;
     if (!AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(currentChamber))) return kFALSE;
     // add MCS effect
-    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   }
   
   //Extrapolate trackCandidate to chamber "ch2"
@@ -709,7 +709,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
       }
       
       // add MCS effect for next step
-      AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCluster2,AliMUONConstants::ChamberThicknessInX0(),-1.);
+      AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCluster2,AliMUONConstants::ChamberThicknessInX0(ch2),-1.);
       
       // copy new track parameters for next step
       extrapTrackParam = extrapTrackParamAtCluster2;
@@ -802,7 +802,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
   if (GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
     
     // add MCS effect for next step
-    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(ch2),-1.);
     
     //Extrapolate trackCandidate to chamber "ch1"
     Bool_t normalExtrap = AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(ch1));
@@ -949,9 +949,6 @@ Double_t AliMUONTrackReconstructor::TryTwoClusters(const AliMUONTrackParam &trac
     // copy track parameters at first cluster for jacobian calculation
     AliMUONTrackParam trackParam(trackParamAtCluster1);
     
-    // add MCS effect to the covariance matrix at first cluster
-    AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(),-1.);
-    
     // Get the pointer to the parameter covariance matrix at first cluster
     const TMatrixD& kParamCov = trackParam.GetCovariances();
     
index cf9a371..8c265ba 100644 (file)
@@ -370,7 +370,7 @@ Bool_t AliMUONTrackReconstructorK::RetracePartialTrack(AliMUONTrack &trackCandid
     trackParamAtCluster->SetCovariances(startingTrackParam->GetCovariances());
     
     // add MCS effect
-    AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(expectedChamber+1),-1.);
     
     // reset propagator for smoother
     if (GetRecoParam()->UseSmoother()) trackParamAtCluster->ResetPropagator();
@@ -382,7 +382,7 @@ Bool_t AliMUONTrackReconstructorK::RetracePartialTrack(AliMUONTrack &trackCandid
       if (!AliMUONTrackExtrap::ExtrapToZCov(trackParamAtCluster, AliMUONConstants::DefaultChamberZ(expectedChamber),
                                            GetRecoParam()->UseSmoother())) extrapStatus = kFALSE;
       // add MCS effect
-      AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),-1.);
+      AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(expectedChamber),-1.);
       expectedChamber--;
     }
     
@@ -533,20 +533,20 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
   }
   
   // Add MCS effect
-  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
+  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   
   // reset propagator for smoother
   if (GetRecoParam()->UseSmoother()) extrapTrackParamAtCh.ResetPropagator();
   
   // Add MCS in the missing chamber(s) if any
-  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
   while (currentChamber > nextChamber + 1) {
     // extrapolation to the missing chamber
     currentChamber--;
     if (!AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(currentChamber),
                                          GetRecoParam()->UseSmoother())) return kFALSE;
     // add MCS effect
-    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   }
   
   //Extrapolate trackCandidate to chamber
@@ -712,20 +712,20 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   }
   
   // Add MCS effect
-  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
+  AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   
   // reset propagator for smoother
   if (GetRecoParam()->UseSmoother()) extrapTrackParamAtCh.ResetPropagator();
   
   // Add MCS in the missing chamber(s) if any
-  Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
   while (ch1 < ch2 && currentChamber > ch2 + 1) {
     // extrapolation to the missing chamber
     currentChamber--;
     if (!AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(currentChamber),
                                          GetRecoParam()->UseSmoother())) return kFALSE;
     // add MCS effect
-    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(currentChamber),-1.);
   }
   
   //Extrapolate trackCandidate to chamber "ch2"
@@ -798,7 +798,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
       extrapTrackParam = extrapTrackParamAtCluster2;
       
       // add MCS effect
-      AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParam,AliMUONConstants::ChamberThicknessInX0(),-1.);
+      AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParam,AliMUONConstants::ChamberThicknessInX0(ch2),-1.);
       
       // reset propagator for smoother
       if (GetRecoParam()->UseSmoother()) extrapTrackParam.ResetPropagator();
@@ -913,7 +913,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   if (GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
     
     // add MCS effect for next step
-    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(ch2),-1.);
     
     //Extrapolate trackCandidate to chamber "ch1"
     Bool_t normalExtrap = AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(ch1),
index c18c295..dfeafab 100644 (file)
@@ -101,7 +101,7 @@ fRecTracksPtr(0x0),
 fNRecTracks(0),
 fClusterServer(clusterServer),
 fkRecoParam(recoParam),
-fMaxMCSAngle2(0.)
+fMaxMCSAngle2(0x0)
 {
   /// Constructor for class AliMUONVTrackReconstructor
   /// WARNING: if clusterServer=0x0, no clusterization will be possible at this level
@@ -116,7 +116,9 @@ fMaxMCSAngle2(0.)
   AliMUONTrackParam param;
   Double_t inverseBendingP = (GetRecoParam()->GetMinBendingMomentum() > 0.) ? 1./GetRecoParam()->GetMinBendingMomentum() : 1.;
   param.SetInverseBendingMomentum(inverseBendingP);
-  fMaxMCSAngle2 = AliMUONTrackExtrap::GetMCSAngle2(param, AliMUONConstants::ChamberThicknessInX0(), 1.);
+  fMaxMCSAngle2 = new Double_t [AliMUONConstants::NTrackingCh()];
+  for (Int_t iCh=0; iCh<AliMUONConstants::NTrackingCh(); iCh++)
+    fMaxMCSAngle2[iCh] = AliMUONTrackExtrap::GetMCSAngle2(param, AliMUONConstants::ChamberThicknessInX0(iCh), 1.);
   
 }
 
@@ -125,6 +127,7 @@ AliMUONVTrackReconstructor::~AliMUONVTrackReconstructor()
 {
   /// Destructor for class AliMUONVTrackReconstructor
   delete fRecTracksPtr;
+  delete[] fMaxMCSAngle2;
 }
 
   //__________________________________________________________________________
@@ -198,18 +201,31 @@ Bool_t AliMUONVTrackReconstructor::IsAcceptable(AliMUONTrackParam &trackParam)
   
   // MCS dipersion
   Double_t angleMCS2 = 0.;
-  if (AliMUONTrackExtrap::IsFieldON() && chamber < 6)
-    angleMCS2 = AliMUONTrackExtrap::GetMCSAngle2(trackParam, AliMUONConstants::ChamberThicknessInX0(), 1.);
-  else angleMCS2 = fMaxMCSAngle2;
   Double_t impactMCS2 = 0.;
-  if (!GetRecoParam()->SelectOnTrackSlope()) for (Int_t iCh=0; iCh<=chamber; iCh++)
-    impactMCS2 += AliMUONConstants::DefaultChamberZ(chamber) * AliMUONConstants::DefaultChamberZ(chamber) * angleMCS2;
+  if (AliMUONTrackExtrap::IsFieldON() && chamber < 6) {
+    
+    // track momentum is known
+    for (Int_t iCh=0; iCh<=chamber; iCh++) {
+      Double_t localMCS2 = AliMUONTrackExtrap::GetMCSAngle2(trackParam, AliMUONConstants::ChamberThicknessInX0(iCh), 1.);
+      angleMCS2 += localMCS2;
+      impactMCS2 += AliMUONConstants::DefaultChamberZ(chamber) * AliMUONConstants::DefaultChamberZ(chamber) * localMCS2;
+    }
+    
+  } else {
+    
+    // track momentum is unknown
+    for (Int_t iCh=0; iCh<=chamber; iCh++) {
+      angleMCS2 += fMaxMCSAngle2[iCh];
+      impactMCS2 += AliMUONConstants::DefaultChamberZ(chamber) * AliMUONConstants::DefaultChamberZ(chamber) * fMaxMCSAngle2[iCh];
+    }
+    
+  }
   
   // ------ track selection in non bending direction ------
   if (GetRecoParam()->SelectOnTrackSlope()) {
     
     // check if non bending slope is within tolerances
-    Double_t nonBendingSlopeErr = TMath::Sqrt(kParamCov(1,1) + (chamber + 1.) * angleMCS2);
+    Double_t nonBendingSlopeErr = TMath::Sqrt(kParamCov(1,1) + angleMCS2);
     if ((TMath::Abs(trackParam.GetNonBendingSlope()) - sigmaCut * nonBendingSlopeErr) > GetRecoParam()->GetMaxNonBendingSlope()) return kFALSE;
     
   } else {
@@ -235,7 +251,7 @@ Bool_t AliMUONVTrackReconstructor::IsAcceptable(AliMUONTrackParam &trackParam)
     if (GetRecoParam()->SelectOnTrackSlope()) {
       
       // check if bending slope is within tolerances
-      Double_t bendingSlopeErr = TMath::Sqrt(kParamCov(3,3) + (chamber + 1.) * angleMCS2);
+      Double_t bendingSlopeErr = TMath::Sqrt(kParamCov(3,3) + angleMCS2);
       if ((TMath::Abs(trackParam.GetBendingSlope()) - sigmaCut * bendingSlopeErr) > GetRecoParam()->GetMaxBendingSlope()) return kFALSE;
       
     } else {
@@ -269,9 +285,12 @@ TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliM
   Double_t bendingSlope = 0., bendingSlopeErr = 0., bendingImpactParam = 0., bendingImpactParamErr = 0., bendingImpactParamErr2 = 0.;
   Double_t bendingMomentum = 0., bendingMomentumErr = 0.;
   Double_t bendingVertexDispersion2 = GetRecoParam()->GetBendingVertexDispersion() * GetRecoParam()->GetBendingVertexDispersion();
-  Double_t impactMCS2 = 0; // maximum impact parameter dispersion**2 due to MCS in chamber
-  if (!GetRecoParam()->SelectOnTrackSlope() || AliMUONTrackExtrap::IsFieldON()) for (Int_t iCh=0; iCh<=ch1; iCh++)
-    impactMCS2 += AliMUONConstants::DefaultChamberZ(iCh) * AliMUONConstants::DefaultChamberZ(iCh) * fMaxMCSAngle2;
+  Double_t angleMCS2 = 0.; // maximum angular dispersion**2 due to MCS in chamber
+  Double_t impactMCS2 = 0.; // maximum impact parameter dispersion**2 due to MCS in chamber
+  for (Int_t iCh=0; iCh<=ch1; iCh++) {
+    angleMCS2 += fMaxMCSAngle2[iCh];
+    impactMCS2 += AliMUONConstants::DefaultChamberZ(iCh) * AliMUONConstants::DefaultChamberZ(iCh) * fMaxMCSAngle2[iCh];
+  }
   Double_t sigmaCut = GetRecoParam()->GetSigmaCutForTracking();
   
   // Create iterators to loop over clusters in both chambers
@@ -298,7 +317,7 @@ TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliM
       if (GetRecoParam()->SelectOnTrackSlope()) {
        
        // check if non bending slope is within tolerances
-       nonBendingSlopeErr = TMath::Sqrt((cluster1->GetErrX2() + cluster2->GetErrX2()) / dZ / dZ + (ch1 + 1.) * fMaxMCSAngle2);
+       nonBendingSlopeErr = TMath::Sqrt((cluster1->GetErrX2() + cluster2->GetErrX2()) / dZ / dZ + angleMCS2);
        if ((TMath::Abs(nonBendingSlope) - sigmaCut * nonBendingSlopeErr) > GetRecoParam()->GetMaxNonBendingSlope()) continue;
        
       } else {
@@ -327,7 +346,7 @@ TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliM
        if (GetRecoParam()->SelectOnTrackSlope()) {
          
          // check if bending slope is within tolerances
-         bendingSlopeErr = TMath::Sqrt((cluster1->GetErrY2() + cluster2->GetErrY2()) / dZ / dZ + (ch1 + 1.) * fMaxMCSAngle2);
+         bendingSlopeErr = TMath::Sqrt((cluster1->GetErrY2() + cluster2->GetErrY2()) / dZ / dZ + angleMCS2);
          if ((TMath::Abs(bendingSlope) - sigmaCut * bendingSlopeErr) > GetRecoParam()->GetMaxBendingSlope()) continue;
          
        } else {
@@ -746,7 +765,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInChamber(AliMUONTrack &trac
   }
   
   // Add MCS effect
-  AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(),-1.);
+  AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(trackParam.GetClusterPtr()->GetChamberId()),-1.);
   
   // Printout for debuging
   if ((AliLog::GetDebugLevel("MUON","AliMUONVTrackReconstructor") >= 1) || (AliLog::GetGlobalDebugLevel() >= 1)) {
@@ -893,7 +912,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
   }
   
   // Add MCS effect
-  AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(),-1.);
+  AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(trackParam.GetClusterPtr()->GetChamberId()),-1.);
   
   // Printout for debuging
   if ((AliLog::GetDebugLevel("MUON","AliMUONVTrackReconstructor") >= 1) || (AliLog::GetGlobalDebugLevel() >= 1)) {
@@ -928,7 +947,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
       }
       
       // add MCS effect
-      AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCluster2,AliMUONConstants::ChamberThicknessInX0(),-1.);
+      AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCluster2,AliMUONConstants::ChamberThicknessInX0(ch2),-1.);
       
       // reset cluster iterator of chamber 1
       nextInCh1.Reset();
@@ -1031,7 +1050,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
     AliMUONTrackExtrap::LinearExtrapToZCov(&trackParam, AliMUONConstants::DefaultChamberZ(ch2));
     
     // add MCS effect for next step
-    AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(),-1.);
+    AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(ch2),-1.);
     
     // reset cluster iterator of chamber 1
     nextInCh1.Reset();
index 48b1a33..90721cd 100644 (file)
@@ -64,7 +64,7 @@ class AliMUONVTrackReconstructor : public TObject {
 
   const AliMUONRecoParam* fkRecoParam; ///< reference to reco parameters
   
-  Double_t fMaxMCSAngle2; ///< maximum angle dispersion due to MCS
+  Double_t* fMaxMCSAngle2; ///< maximum angle dispersion due to MCS
   
   // Functions
   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor