From: ivana Date: Wed, 3 Jun 2009 12:06:50 +0000 (+0000) Subject: In AliMUONTrackExtrap: X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=3fe6651e174a9415758fafc2f9544e6aabaf4f32;p=u%2Fmrichter%2FAliRoot.git In AliMUONTrackExtrap: - Modify LinearExtrapToZ(...): propagate only the track parameters - Add LinearExtrapToZCov(...): propagate the track parameters and the full covariance matrix (Philippe P.) --- diff --git a/MUON/AliMUONTrackExtrap.cxx b/MUON/AliMUONTrackExtrap.cxx index 7b8d46274ba..944d5561da9 100644 --- a/MUON/AliMUONTrackExtrap.cxx +++ b/MUON/AliMUONTrackExtrap.cxx @@ -102,9 +102,9 @@ AliMUONTrackExtrap::GetBendingMomentumFromImpactParam(Double_t impactParam) } //__________________________________________________________________________ -void AliMUONTrackExtrap::LinearExtrapToZ(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator) +void AliMUONTrackExtrap::LinearExtrapToZ(AliMUONTrackParam* trackParam, Double_t zEnd) { - /// Track parameters (and their covariances if any) linearly extrapolated to the plane at "zEnd". + /// Track parameters linearly extrapolated to the plane at "zEnd". /// On return, results from the extrapolation are updated in trackParam. if (trackParam->GetZ() == zEnd) return; // nothing to be done if same z @@ -114,29 +114,43 @@ void AliMUONTrackExtrap::LinearExtrapToZ(AliMUONTrackParam* trackParam, Double_t trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + trackParam->GetNonBendingSlope() * dZ); trackParam->SetBendingCoor(trackParam->GetBendingCoor() + trackParam->GetBendingSlope() * dZ); trackParam->SetZ(zEnd); +} + +//__________________________________________________________________________ +void AliMUONTrackExtrap::LinearExtrapToZCov(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator) +{ + /// Track parameters and their covariances linearly extrapolated to the plane at "zEnd". + /// On return, results from the extrapolation are updated in trackParam. - // Update track parameters covariances if any - if (trackParam->CovariancesExist()) { - TMatrixD paramCov(trackParam->GetCovariances()); - paramCov(0,0) += dZ * dZ * paramCov(1,1) + 2. * dZ * paramCov(0,1); - paramCov(0,1) += dZ * paramCov(1,1); - paramCov(1,0) = paramCov(0,1); - paramCov(2,2) += dZ * dZ * paramCov(3,3) + 2. * dZ * paramCov(2,3); - paramCov(2,3) += dZ * paramCov(3,3); - paramCov(3,2) = paramCov(2,3); - trackParam->SetCovariances(paramCov); - - // Update the propagator if required - if (updatePropagator) { - TMatrixD jacob(5,5); - jacob.UnitMatrix(); - jacob(0,1) = dZ; - jacob(2,3) = dZ; - trackParam->UpdatePropagator(jacob); - } - + if (trackParam->GetZ() == zEnd) return; // nothing to be done if same z + + // No need to propagate the covariance matrix if it does not exist + if (!trackParam->CovariancesExist()) { + cout<<"W-AliMUONTrackExtrap::LinearExtrapToZCov: Covariance matrix does not exist"<GetZ(); + trackParam->SetNonBendingCoor(trackParam->GetNonBendingCoor() + trackParam->GetNonBendingSlope() * dZ); + trackParam->SetBendingCoor(trackParam->GetBendingCoor() + trackParam->GetBendingSlope() * dZ); + trackParam->SetZ(zEnd); + + // Calculate the jacobian related to the track parameters linear extrapolation to "zEnd" + TMatrixD jacob(5,5); + jacob.UnitMatrix(); + jacob(0,1) = dZ; + jacob(2,3) = dZ; + + // Extrapolate track parameter covariances to "zEnd" + TMatrixD tmp(trackParam->GetCovariances(),TMatrixD::kMultTranspose,jacob); + TMatrixD tmp2(jacob,TMatrixD::kMult,tmp); + trackParam->SetCovariances(tmp2); + + // Update the propagator if required + if (updatePropagator) trackParam->UpdatePropagator(jacob); } //__________________________________________________________________________ @@ -287,7 +301,7 @@ void AliMUONTrackExtrap::ExtrapToZCov(AliMUONTrackParam* trackParam, Double_t zE if (trackParam->GetZ() == zEnd) return; // nothing to be done if same z if (!fgFieldON) { // linear extrapolation if no magnetic field - AliMUONTrackExtrap::LinearExtrapToZ(trackParam,zEnd,updatePropagator); + AliMUONTrackExtrap::LinearExtrapToZCov(trackParam,zEnd,updatePropagator); return; } @@ -412,7 +426,7 @@ void AliMUONTrackExtrap::CorrectMCSEffectInAbsorber(AliMUONTrackParam* param, // Get track parameters and covariances in the Branson plane corrected for magnetic field effect ExtrapToZCov(param,zVtx); - LinearExtrapToZ(param,zB); + LinearExtrapToZCov(param,zB); // compute track parameters at vertex TMatrixD newParam(5,1); diff --git a/MUON/AliMUONTrackExtrap.h b/MUON/AliMUONTrackExtrap.h index 5276dca29ed..85a7042a223 100644 --- a/MUON/AliMUONTrackExtrap.h +++ b/MUON/AliMUONTrackExtrap.h @@ -36,8 +36,11 @@ class AliMUONTrackExtrap : public TObject static Double_t GetImpactParamFromBendingMomentum(Double_t bendingMomentum); static Double_t GetBendingMomentumFromImpactParam(Double_t impactParam); + // Linearly extrapolate track parameters + static void LinearExtrapToZ(AliMUONTrackParam* trackParam, Double_t zEnd); + // Linearly extrapolate track parameters and covariances - static void LinearExtrapToZ(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator = kFALSE); + static void LinearExtrapToZCov(AliMUONTrackParam* trackParam, Double_t zEnd, Bool_t updatePropagator = kFALSE); // Extrapolate track parameters in magnetic field static void ExtrapToZ(AliMUONTrackParam *trackParam, Double_t zEnd); diff --git a/MUON/AliMUONVTrackReconstructor.cxx b/MUON/AliMUONVTrackReconstructor.cxx index 797c704eae0..4367aa9ff13 100644 --- a/MUON/AliMUONVTrackReconstructor.cxx +++ b/MUON/AliMUONVTrackReconstructor.cxx @@ -676,7 +676,7 @@ Double_t AliMUONVTrackReconstructor::TryTwoClustersFast(const AliMUONTrackParam // extrapolate linearly track parameters and covariances at the z position of the second cluster trackParamAtCluster2 = trackParamAtCluster1; - AliMUONTrackExtrap::LinearExtrapToZ(&trackParamAtCluster2, cluster2->GetZ()); + AliMUONTrackExtrap::LinearExtrapToZCov(&trackParamAtCluster2, cluster2->GetZ()); // set pointer to cluster2 into trackParamAtCluster2 trackParamAtCluster2.SetClusterPtr(cluster2); @@ -762,7 +762,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInChamber(AliMUONTrack &trac // try to add the current cluster accuratly extrapTrackParamAtCluster = trackParam; - AliMUONTrackExtrap::LinearExtrapToZ(&extrapTrackParamAtCluster, cluster->GetZ()); + AliMUONTrackExtrap::LinearExtrapToZCov(&extrapTrackParamAtCluster, cluster->GetZ()); chi2WithOneCluster = TryOneCluster(extrapTrackParamAtCluster, cluster, extrapTrackParamAtCluster); // if good chi2 then consider to add cluster @@ -910,7 +910,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac // try to add the current cluster accuratly extrapTrackParamAtCluster2 = trackParam; - AliMUONTrackExtrap::LinearExtrapToZ(&extrapTrackParamAtCluster2, clusterCh2->GetZ()); + AliMUONTrackExtrap::LinearExtrapToZCov(&extrapTrackParamAtCluster2, clusterCh2->GetZ()); chi2WithOneCluster = TryOneCluster(extrapTrackParamAtCluster2, clusterCh2, extrapTrackParamAtCluster2); // if good chi2 then try to attach a cluster in the other chamber too @@ -1026,7 +1026,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac } //Extrapolate trackCandidate to chamber "ch2" - AliMUONTrackExtrap::LinearExtrapToZ(&trackParam, AliMUONConstants::DefaultChamberZ(ch2)); + AliMUONTrackExtrap::LinearExtrapToZCov(&trackParam, AliMUONConstants::DefaultChamberZ(ch2)); // add MCS effect for next step AliMUONTrackExtrap::AddMCSEffect(&trackParam,AliMUONConstants::ChamberThicknessInX0(),1.); @@ -1046,7 +1046,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac // try to add the current cluster accuratly extrapTrackParamAtCluster1 = trackParam; - AliMUONTrackExtrap::LinearExtrapToZ(&extrapTrackParamAtCluster1, clusterCh1->GetZ()); + AliMUONTrackExtrap::LinearExtrapToZCov(&extrapTrackParamAtCluster1, clusterCh1->GetZ()); chi2WithOneCluster = TryOneCluster(extrapTrackParamAtCluster1, clusterCh1, extrapTrackParamAtCluster1); // if good chi2 then consider to add clusterCh1