From bdfb6eef8aa5c200665d4e73d39bd145d81d8084 Mon Sep 17 00:00:00 2001 From: ivana Date: Thu, 3 Dec 2009 14:24:03 +0000 Subject: [PATCH] Improve trigger track determination: use geometry instead of default z position of chambers. (Diego) --- MUON/AliMUONConstants.cxx | 6 +- MUON/AliMUONConstants.h | 8 +- MUON/AliMUONESDInterface.cxx | 2 +- MUON/AliMUONRecoParam.cxx | 12 +-- MUON/AliMUONTrack.cxx | 7 +- MUON/AliMUONTrack.h | 9 +- MUON/AliMUONTrackHitPattern.cxx | 134 ++++++++++------------------ MUON/AliMUONTrackHitPattern.h | 6 -- MUON/AliMUONTriggerCircuit.cxx | 94 ++++++++++++++++--- MUON/AliMUONTriggerCircuit.h | 16 +++- MUON/AliMUONTriggerTrack.cxx | 98 ++++++++++++++++---- MUON/AliMUONTriggerTrack.h | 44 ++++++--- MUON/AliMUONVTrackReconstructor.cxx | 71 ++++++++------- MUON/AliMUONVTrackReconstructor.h | 2 - 14 files changed, 310 insertions(+), 199 deletions(-) diff --git a/MUON/AliMUONConstants.cxx b/MUON/AliMUONConstants.cxx index 5f39ed13792..01fec147f3a 100644 --- a/MUON/AliMUONConstants.cxx +++ b/MUON/AliMUONConstants.cxx @@ -99,8 +99,10 @@ const Double_t AliMUONConstants::fgkAbsZBeg = -90.; const Double_t AliMUONConstants::fgkAbsZEnd = -505.; // Default trigger chamber resolution (cm) -const Double_t AliMUONConstants::fgkTriggerNonBendingReso = 1.; -const Double_t AliMUONConstants::fgkTriggerBendingReso = 1.; +// Warning: the resolution refers only to ALIGNMENT +// For the total resolution the strip width should be taken into account! +const Double_t AliMUONConstants::fgkTriggerNonBendingReso = 0.2; +const Double_t AliMUONConstants::fgkTriggerBendingReso = 0.2; // Defaults parameters for muon filter (19/11/07) const Double_t AliMUONConstants::fgkMuonFilterZBeg = -1471.; diff --git a/MUON/AliMUONConstants.h b/MUON/AliMUONConstants.h index 921b59c4058..aa563159e61 100644 --- a/MUON/AliMUONConstants.h +++ b/MUON/AliMUONConstants.h @@ -84,9 +84,9 @@ class AliMUONConstants : public TObject { 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 + /// Return default trigger chamber resolution DUE TO ALIGNMENT ONLY in non bending direction static Double_t TriggerNonBendingReso() {return fgkTriggerNonBendingReso;} - /// Return default trigger chamber resolution in bending direction + /// Return default trigger chamber resolution DUE TO ALIGNMENT ONLY in bending direction static Double_t TriggerBendingReso() {return fgkTriggerBendingReso;} /// Return z-position of muon filter begining static Double_t MuonFilterZBeg() {return fgkMuonFilterZBeg;} @@ -144,8 +144,8 @@ class AliMUONConstants : public TObject { static Int_t fgMaxZoom; ///< Maximum Zoom for event display static Float_t fgkTriggerTofLimit; ///< Particle above this threshold are discarded in trigger algorithm - static const Double_t fgkTriggerNonBendingReso; ///< default trigger chamber resolution in the non-bending direction - static const Double_t fgkTriggerBendingReso; ///< default trigger chamber resolution in the bending direction + static const Double_t fgkTriggerNonBendingReso; ///< default trigger chamber resolution in the non-bending direction, DUE TO ALIGNMENT ONLY + static const Double_t fgkTriggerBendingReso; ///< default trigger chamber resolution in the bending direction, DUE TO ALIGNMENT ONLY static const Double_t fgkMuonFilterZBeg; ///< z-position of the begining of the muon filter static const Double_t fgkMuonFilterZEnd; ///< z-position of the end of the muon filter diff --git a/MUON/AliMUONESDInterface.cxx b/MUON/AliMUONESDInterface.cxx index 3571b8f341d..2a4c5ce86be 100644 --- a/MUON/AliMUONESDInterface.cxx +++ b/MUON/AliMUONESDInterface.cxx @@ -679,7 +679,6 @@ void AliMUONESDInterface::ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrac track.SetVertexErrXY2(0.,0.); track.SetGlobalChi2(esdTrack.GetChi2()); track.SetMatchTrigger(esdTrack.GetMatchTrigger()); - track.SetLoTrgNum(-1); track.SetChi2MatchTrigger(esdTrack.GetChi2MatchTrigger()); track.SetHitsPatternInTrigCh(esdTrack.GetHitsPatternInTrigCh()); track.SetLocalTrigger(esdTrack.LoCircuit(), esdTrack.LoStripX(), esdTrack.LoStripY(), @@ -950,6 +949,7 @@ void AliMUONESDInterface::MUONToESD(const AliMUONLocalTrigger& locTrg, AliESDMuo esdTrack.SetThetaYUncorrected(triggerTrack->GetThetay()); esdTrack.SetNonBendingCoorUncorrected(triggerTrack->GetX11()); esdTrack.SetBendingCoorUncorrected(triggerTrack->GetY11()); + esdTrack.SetZUncorrected(triggerTrack->GetZ11()); } } diff --git a/MUON/AliMUONRecoParam.cxx b/MUON/AliMUONRecoParam.cxx index 5780d4fae0a..60205fe16cc 100644 --- a/MUON/AliMUONRecoParam.cxx +++ b/MUON/AliMUONRecoParam.cxx @@ -183,10 +183,10 @@ void AliMUONRecoParam::SetLowFluxParam() fMaxBendingDistanceToTrack = 1.; fSigmaCutForTracking = 6.; fSigmaCutForImprovement = 5.; - fSigmaCutForTrigger = 8.; + fSigmaCutForTrigger = 4.; fStripCutForTrigger = 1.; fMaxStripAreaForTrigger = 3.; - fMaxNormChi2MatchTrigger = 16.; + fMaxNormChi2MatchTrigger = fSigmaCutForTrigger * fSigmaCutForTrigger; fCombinedClusterTrackReco = kFALSE; fTrackAllTracks = kTRUE; fRecoverTracks = kTRUE; @@ -225,10 +225,10 @@ void AliMUONRecoParam::SetHighFluxParam() fMaxBendingDistanceToTrack = 1.; fSigmaCutForTracking = 6.; fSigmaCutForImprovement = 5.; - fSigmaCutForTrigger = 8.; + fSigmaCutForTrigger = 4.; fStripCutForTrigger = 1.; fMaxStripAreaForTrigger = 3.; - fMaxNormChi2MatchTrigger = 16.; + fMaxNormChi2MatchTrigger = fSigmaCutForTrigger * fSigmaCutForTrigger; fCombinedClusterTrackReco = kFALSE; fTrackAllTracks = kTRUE; fRecoverTracks = kTRUE; @@ -268,10 +268,10 @@ void AliMUONRecoParam::SetCosmicParam() fMaxBendingDistanceToTrack = 1.; fSigmaCutForTracking = 7.; fSigmaCutForImprovement = 6.; - fSigmaCutForTrigger = 8.; + fSigmaCutForTrigger = 4.; fStripCutForTrigger = 1.5; fMaxStripAreaForTrigger = 3.; - fMaxNormChi2MatchTrigger = 16.; + fMaxNormChi2MatchTrigger = fSigmaCutForTrigger * fSigmaCutForTrigger; fPercentOfFullClusterInESD = 100.; fCombinedClusterTrackReco = kFALSE; fTrackAllTracks = kTRUE; diff --git a/MUON/AliMUONTrack.cxx b/MUON/AliMUONTrack.cxx index 1b83b86cbca..f1e32e0dd73 100644 --- a/MUON/AliMUONTrack.cxx +++ b/MUON/AliMUONTrack.cxx @@ -57,7 +57,6 @@ AliMUONTrack::AliMUONTrack() fGlobalChi2(-1.), fImproved(kFALSE), fMatchTrigger(-1), - floTrgNum(-1), fChi2MatchTrigger(0.), fTrackID(-1), fTrackParamAtVertex(0x0), @@ -81,7 +80,6 @@ AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDis fGlobalChi2(0.), fImproved(kFALSE), fMatchTrigger(-1), - floTrgNum(-1), fChi2MatchTrigger(0.), fTrackID(-1), fTrackParamAtVertex(0x0), @@ -190,7 +188,6 @@ AliMUONTrack::AliMUONTrack(const AliMUONTrack& track) fGlobalChi2(track.fGlobalChi2), fImproved(track.fImproved), fMatchTrigger(track.fMatchTrigger), - floTrgNum(track.floTrgNum), fChi2MatchTrigger(track.fChi2MatchTrigger), fTrackID(track.fTrackID), fTrackParamAtVertex(0x0), @@ -275,7 +272,6 @@ AliMUONTrack & AliMUONTrack::operator=(const AliMUONTrack& track) fGlobalChi2 = track.fGlobalChi2; fImproved = track.fImproved; fMatchTrigger = track.fMatchTrigger; - floTrgNum = track.floTrgNum; fChi2MatchTrigger = track.fChi2MatchTrigger; fTrackID = track.fTrackID; fHitsPatternInTrigCh = track.fHitsPatternInTrigCh; @@ -320,7 +316,6 @@ void AliMUONTrack::Reset() fGlobalChi2 = -1.; fImproved = kFALSE; fMatchTrigger = -1; - floTrgNum = -1; fChi2MatchTrigger = 0.; fTrackID = -1; fHitsPatternInTrigCh = 0; @@ -1186,7 +1181,7 @@ void AliMUONTrack::Print(Option_t*) const cout << " No.Clusters=" << setw(2) << GetNClusters() << ", Match2Trig=" << setw(1) << GetMatchTrigger() << - ", LoTrgNum=" << setw(3) << GetLoTrgNum() << + ", LoTrgNum=" << setw(3) << LoCircuit() << ", Chi2-tracking-trigger=" << setw(8) << setprecision(5) << GetChi2MatchTrigger(); cout << Form(" HitTriggerPattern %x",fHitsPatternInTrigCh); cout << Form(" MClabel=%d",fTrackID) << endl; diff --git a/MUON/AliMUONTrack.h b/MUON/AliMUONTrack.h index 203adc92adf..3b176d00169 100644 --- a/MUON/AliMUONTrack.h +++ b/MUON/AliMUONTrack.h @@ -77,12 +77,10 @@ class AliMUONTrack : public TObject /// return 1,2,3 if track matches with trigger track, 0 if not Int_t GetMatchTrigger(void) const {return fMatchTrigger;} - /// returns the local trigger number corresponding to the trigger track - Int_t GetLoTrgNum(void) const {return floTrgNum;} + /// returns the local trigger number corresponding to the trigger track (obsolete) + Int_t GetLoTrgNum(void) const {return LoCircuit();} /// set the flag telling whether track matches with trigger track or not void SetMatchTrigger(Int_t matchTrigger) {fMatchTrigger = matchTrigger;} - /// set the local trigger number corresponding to the trigger track - void SetLoTrgNum(Int_t loTrgNum) {floTrgNum = loTrgNum;} /// return the chi2 of trigger/track matching Double_t GetChi2MatchTrigger(void) const {return fChi2MatchTrigger;} /// set the chi2 of trigger/track matching @@ -167,7 +165,6 @@ class AliMUONTrack : public TObject ///< 1 track match but does not pass pt cut ///< 2 track match Low pt cut ///< 3 track match High pt cut - Int_t floTrgNum; ///< the number of the corresponding loTrg, -1 if no matching Double_t fChi2MatchTrigger; ///< chi2 of trigger/track matching Int_t fTrackID; ///< Point to the corresponding MC track @@ -185,7 +182,7 @@ class AliMUONTrack : public TObject void ComputeMCSCovariances(TMatrixD& mcsCovariances) const; - ClassDef(AliMUONTrack, 8) // Reconstructed track in ALICE dimuon spectrometer + ClassDef(AliMUONTrack, 9) // Reconstructed track in ALICE dimuon spectrometer }; #endif diff --git a/MUON/AliMUONTrackHitPattern.cxx b/MUON/AliMUONTrackHitPattern.cxx index 0295ed81e55..248117982d0 100644 --- a/MUON/AliMUONTrackHitPattern.cxx +++ b/MUON/AliMUONTrackHitPattern.cxx @@ -86,12 +86,9 @@ AliMUONTrackHitPattern::AliMUONTrackHitPattern(const AliMUONRecoParam* recoParam fkRecoParam(recoParam), fkTransformer(transformer), fkDigitMaker(digitMaker), -fDeltaZ(0.0), -fTrigCovariance(0x0), fkMaxDistance(99999.) { /// Default constructor - InitMembers(); AliMUONTrackExtrap::SetField(); } @@ -100,31 +97,8 @@ fkMaxDistance(99999.) AliMUONTrackHitPattern::~AliMUONTrackHitPattern(void) { /// Destructor - delete fTrigCovariance; } - -//______________________________________________________________________________ -void AliMUONTrackHitPattern::InitMembers() -{ - // - /// Initialize data members - // - fDeltaZ = AliMUONConstants::DefaultChamberZ(10) - AliMUONConstants::DefaultChamberZ(12); - - const Double_t kTrigNonBendReso = AliMUONConstants::TriggerNonBendingReso(); - const Double_t kTrigBendReso = AliMUONConstants::TriggerBendingReso(); - - // Covariance matrix 3x3 (X,Y,slopeY) for trigger tracks - fTrigCovariance = new TMatrixD(3,3); - fTrigCovariance->Zero(); - (*fTrigCovariance)(0,0) = kTrigNonBendReso * kTrigNonBendReso; - (*fTrigCovariance)(1,1) = kTrigBendReso * kTrigBendReso; - (*fTrigCovariance)(2,2) = 2. * (*fTrigCovariance)(1,1) / fDeltaZ / fDeltaZ; - (*fTrigCovariance)(1,2) = (*fTrigCovariance)(2,1) = (*fTrigCovariance)(1,1) / fDeltaZ; -} - - //_____________________________________________________________________________ void AliMUONTrackHitPattern::CheckConstants() const { @@ -201,7 +175,7 @@ AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track, Int_t matchTrigger = 0; Int_t loTrgNum(-1); - Double_t distTriggerTrack[3], sigma2[3]; + TMatrixD paramDiff(3,1); Double_t chi2; Double_t chi2MatchTrigger = 0., minChi2MatchTrigger = 999.; Int_t doubleMatch = -1; // Check if track matches 2 trigger tracks @@ -209,60 +183,51 @@ AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track, AliMUONTriggerTrack* doubleTriggerTrack = 0x0; AliMUONTriggerTrack* matchedTriggerTrack = 0x0; - const TMatrixD& kParamCov = trackParam.GetCovariances(); - - Double_t xTrack = trackParam.GetNonBendingCoor(); - Double_t yTrack = trackParam.GetBendingCoor(); - Double_t ySlopeTrack = trackParam.GetBendingSlope(); - // Covariance matrix 3x3 (X,Y,slopeY) for tracker tracks + // Covariance matrix 3x3 (X,Y,slopeY) for trigger tracks TMatrixD trackCov(3,3); - trackCov.Zero(); - trackCov(0,0) = kParamCov(0,0); - trackCov(1,1) = kParamCov(2,2); - trackCov(2,2) = kParamCov(3,3); - trackCov(1,2) = kParamCov(2,3); - trackCov(2,1) = kParamCov(3,2); - - TMatrixD sumCov(trackCov,TMatrixD::kPlus,*fTrigCovariance); - - Bool_t isCovOK = kTRUE; - - if (sumCov.Determinant() != 0) { - sumCov.Invert(); - } else { - AliWarning(" Determinant = 0"); - isCovOK = kFALSE; - sigma2[0] = kParamCov(0,0); - sigma2[1] = kParamCov(2,2); - sigma2[2] = kParamCov(3,3); - // sigma of distributions (trigger-track) X,Y,slopeY - const Double_t kDistSigma[3]={AliMUONConstants::TriggerNonBendingReso(), - AliMUONConstants::TriggerBendingReso(), - 1.414 * AliMUONConstants::TriggerBendingReso()/fDeltaZ}; - for (Int_t iVar = 0; iVar < 3; iVar++) sigma2[iVar] += kDistSigma[iVar] * kDistSigma[iVar]; - } AliMUONTriggerTrack *triggerTrack; TIter itTriggerTrack(triggerTrackStore.CreateIterator()); while ( ( triggerTrack = static_cast(itTriggerTrack() ) ) ) { - distTriggerTrack[0] = triggerTrack->GetX11() - xTrack; - distTriggerTrack[1] = triggerTrack->GetY11() - yTrack; - distTriggerTrack[2] = TMath::Tan(triggerTrack->GetThetay()) - ySlopeTrack; - - if(isCovOK){ - TMatrixD paramDiff(3,1); - for(Int_t iVar = 0; iVar < 3; iVar++) - paramDiff(iVar,0) = distTriggerTrack[iVar]; - + AliMUONTrackExtrap::LinearExtrapToZCov(&trackParam, triggerTrack->GetZ11()); + const TMatrixD& kParamCov = trackParam.GetCovariances(); + + Double_t xTrack = trackParam.GetNonBendingCoor(); + Double_t yTrack = trackParam.GetBendingCoor(); + Double_t ySlopeTrack = trackParam.GetBendingSlope(); + + paramDiff(0,0) = triggerTrack->GetX11() - xTrack; + paramDiff(1,0) = triggerTrack->GetY11() - yTrack; + paramDiff(2,0) = triggerTrack->GetSlopeY() - ySlopeTrack; + + // Covariance matrix 3x3 (X,Y,slopeY) for tracker tracks + trackCov.Zero(); + trackCov(0,0) = kParamCov(0,0); + trackCov(1,1) = kParamCov(2,2); + trackCov(2,2) = kParamCov(3,3); + trackCov(1,2) = kParamCov(2,3); + trackCov(2,1) = kParamCov(3,2); + + // Covariance matrix 3x3 (X,Y,slopeY) for trigger tracks + TMatrixD trigCov(triggerTrack->GetCovariances()); + + TMatrixD sumCov(trackCov,TMatrixD::kPlus,trigCov); + if (sumCov.Determinant() != 0) { + sumCov.Invert(); + TMatrixD tmp(sumCov,TMatrixD::kMult,paramDiff); TMatrixD chi2M(paramDiff,TMatrixD::kTransposeMult,tmp); - chi2 = chi2M(0,0); - } - else { + chi2 = chi2M(0,0); + } else { + AliWarning(" Determinant = 0"); + Double_t sigma2 = 0.; chi2 = 0.; - for (Int_t iVar = 0; iVar < 3; iVar++) chi2 += distTriggerTrack[iVar]*distTriggerTrack[iVar]/sigma2[iVar]; + for (Int_t iVar = 0; iVar < 3; iVar++) { + sigma2 = trackCov(iVar,iVar) + trigCov(iVar,iVar); + chi2 += paramDiff(iVar,0) * paramDiff(iVar,0) / sigma2; + } } chi2 /= 3.; // Normalized Chi2: 3 degrees of freedom (X,Y,slopeY) @@ -308,7 +273,6 @@ AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track, } track->SetMatchTrigger(matchTrigger); - track->SetLoTrgNum(loTrgNum); track->SetChi2MatchTrigger(chi2MatchTrigger); AliMUONLocalTrigger* locTrg = static_cast(triggerStore.FindLocal(loTrgNum)); @@ -448,7 +412,7 @@ AliMUONTrackHitPattern::MinDistanceFromPad(Float_t xPad, Float_t yPad, Float_t z // AliMUONTrackParam trackParamAtPadZ(trackParam); - AliMUONTrackExtrap::ExtrapToZCov(&trackParamAtPadZ, zPad); + AliMUONTrackExtrap::LinearExtrapToZCov(&trackParamAtPadZ, zPad); Float_t xTrackAtPad = trackParamAtPadZ.GetNonBendingCoor(); Float_t yTrackAtPad = trackParamAtPadZ.GetBendingCoor(); @@ -700,7 +664,6 @@ Bool_t AliMUONTrackHitPattern::PerformTrigTrackMatch(UShort_t &pattern, Int_t chOrder[fgkNchambers] = {0,2,1,3}; TArrayF zRealMatch(fgkNchambers); - TArrayF correctFactor(fgkNcathodes); Bool_t isMatch[fgkNcathodes]; for(Int_t cath=0; cathGetZ11(); + zMeanChamber[1] = matchedTrigTrack->GetZ11() + AliMUONConstants::DefaultChamberZ(11) - AliMUONConstants::DefaultChamberZ(10); + zMeanChamber[2] = matchedTrigTrack->GetZ21(); + zMeanChamber[3] = matchedTrigTrack->GetZ21() + AliMUONConstants::DefaultChamberZ(13) - AliMUONConstants::DefaultChamberZ(12); TArrayI digitPerTrack(fgkNcathodes); @@ -754,26 +718,18 @@ Bool_t AliMUONTrackHitPattern::PerformTrigTrackMatch(UShort_t &pattern, Bool_t isClearEvent = kTRUE; - //Float_t x11 = matchedTrigTrack->GetX11();// x position (info from non-bending plane) Float_t y11 = matchedTrigTrack->GetY11();// y position (info from bending plane) - Float_t thetaX = matchedTrigTrack->GetThetax(); - Float_t thetaY = matchedTrigTrack->GetThetay(); + Float_t slopeX = matchedTrigTrack->GetSlopeX(); + Float_t slopeY = matchedTrigTrack->GetSlopeY(); for(Int_t ch=0; ch=1) correctFactor[kNonBending] = zMeanChamber[0]/zRealMatch[0];// corrects x position - if(ch>=2) correctFactor[kBending] = (zMeanChamber[2] - zMeanChamber[0]) / (zRealMatch[2] - zRealMatch[0]);// corrects y position - // searching track intersection with chambers (first approximation) Float_t deltaZ = zMeanChamber[currCh] - zMeanChamber[0]; - trackIntersectCh[currCh][0] = zMeanChamber[currCh] * TMath::Tan(thetaX) * correctFactor[kNonBending];// x position (info from non-bending plane) - trackIntersectCh[currCh][1] = y11 + deltaZ * TMath::Tan(thetaY) * correctFactor[kBending];// y position (info from bending plane) + trackIntersectCh[currCh][0] = zMeanChamber[currCh] * slopeX; + trackIntersectCh[currCh][1] = y11 + deltaZ * slopeY; Int_t detElemIdFromTrack = DetElemIdFromPos(trackIntersectCh[currCh][0], trackIntersectCh[currCh][1], 11+currCh, 0); if(detElemIdFromTrack<0) { AliDebug(1, "Warning: trigger track outside trigger chamber\n"); diff --git a/MUON/AliMUONTrackHitPattern.h b/MUON/AliMUONTrackHitPattern.h index f6b61028354..1cd936735fb 100644 --- a/MUON/AliMUONTrackHitPattern.h +++ b/MUON/AliMUONTrackHitPattern.h @@ -54,8 +54,6 @@ public: protected: void ApplyMCSCorrections(AliMUONTrackParam& trackParam) const; - void InitMembers(); - // Methods for hit pattern from tracker track void FindPadMatchingTrack(const AliMUONVDigitStore& digitStore, const AliMUONTrackParam& trackParam, @@ -97,10 +95,6 @@ private: const AliMUONGeometryTransformer& fkTransformer; //!< geometry transformer const AliMUONDigitMaker& fkDigitMaker; //!< pointer to digit maker - Double_t fDeltaZ; //!< distance between stations - - TMatrixD* fTrigCovariance; //!< Covariance matrix 3x3 (X,Y,slopeY) for trigger tracks - const Float_t fkMaxDistance; //!< Maximum distance for reference static const Int_t fgkNcathodes=2; //!PadByIndices(icol-1,istrip,kTRUE); @@ -283,7 +315,13 @@ void AliMUONTriggerCircuit::FillXstrips(const Int_t icol, XYGlobal(pad,xyGlobal); ypos[2*liStripCircuit] = xyGlobal[1]; - if (istrip != (iLastStrip - 1)) ypos[2*liStripCircuit+1] = xyGlobal[1] + yDim; + zpos[2*liStripCircuit] = xyGlobal[2]; + ywidth[2*liStripCircuit] = 2. * yDim; + if (istrip != (iLastStrip - 1)) { + ypos[2*liStripCircuit+1] = xyGlobal[1] + yDim; + zpos[2*liStripCircuit+1] = xyGlobal[2]; + ywidth[2*liStripCircuit+1] = 2. * yDim; + } liStripCircuit++; } } @@ -348,7 +386,7 @@ void AliMUONTriggerCircuit::FillYstrips(const Int_t iFirstStrip, const Int_t iLa const Bool_t doubling) { /// fill - Double_t xyGlobal[2] = {0.}; + Double_t xyGlobal[3] = {0.}; for (Int_t istrip = iFirstStrip; istrip < iLastStrip; ++istrip) { @@ -367,14 +405,17 @@ void AliMUONTriggerCircuit::FillYstrips(const Int_t iFirstStrip, const Int_t iLa if (!doubling) { fXpos11[fCurrentLocalBoard].AddAt(xyGlobal[0], liStripCircuit); + fXwidth11[fCurrentLocalBoard].AddAt(2. * xDim, liStripCircuit); } else if (doubling) { fXpos11[fCurrentLocalBoard].AddAt(TMath::Sign(1.,xyGlobal[0]) * (TMath::Abs(xyGlobal[0]) - xDim/2.), 2*liStripCircuit); + fXwidth11[fCurrentLocalBoard].AddAt(2. * xDim, 2*liStripCircuit); fXpos11[fCurrentLocalBoard].AddAt(TMath::Sign(1.,xyGlobal[0]) * (TMath::Abs(fXpos11[fCurrentLocalBoard][2*liStripCircuit]) + xDim), 2*liStripCircuit + 1); + fXwidth11[fCurrentLocalBoard].AddAt(2. * xDim, 2*liStripCircuit + 1); } liStripCircuit++; @@ -391,17 +432,22 @@ void AliMUONTriggerCircuit::XYGlobal(const AliMpPad& pad, // get the pad position and dimensions Double_t xl1 = pad.GetPositionX(); Double_t yl1 = pad.GetPositionY(); - Double_t zg1 = 0; // positions from local to global fkTransformer->Local2Global(fCurrentDetElem, xl1, yl1, 0, - xyGlobal[0], xyGlobal[1], zg1); + xyGlobal[0], xyGlobal[1], xyGlobal[2]); } //---------------------------------------------------------------------- //--- methods which return member data related info //---------------------------------------------------------------------- +//---------------------------------------------------------------------- +Float_t AliMUONTriggerCircuit::GetX11Pos(Int_t localBoardId, Int_t istrip) const +{ +/// returns X position of Y strip istrip in MC11 + return fXpos11[localBoardId][istrip]; +} Float_t AliMUONTriggerCircuit::GetY11Pos(Int_t localBoardId, Int_t istrip) const { /// returns Y position of X strip istrip in MC11 @@ -414,10 +460,32 @@ Float_t AliMUONTriggerCircuit::GetY21Pos(Int_t localBoardId, Int_t istrip) const return fYpos21[localBoardId][istrip]; } //---------------------------------------------------------------------- -Float_t AliMUONTriggerCircuit::GetX11Pos(Int_t localBoardId, Int_t istrip) const +Float_t AliMUONTriggerCircuit::GetZ11Pos(Int_t localBoardId, Int_t istrip) const { -/// returns X position of Y strip istrip in MC11 - return fXpos11[localBoardId][istrip]; +/// returns Z position of X strip istrip in MC11 + return fZpos11[localBoardId][istrip]; +} +//---------------------------------------------------------------------- +Float_t AliMUONTriggerCircuit::GetZ21Pos(Int_t localBoardId, Int_t istrip) const +{ +/// returns Z position of X strip istrip in MC21 + return fZpos21[localBoardId][istrip]; +} +Float_t AliMUONTriggerCircuit::GetX11Width(Int_t localBoardId, Int_t istrip) const +{ +/// returns width of Y strip istrip in MC11 + return fXwidth11[localBoardId][istrip]; +} +Float_t AliMUONTriggerCircuit::GetY11Width(Int_t localBoardId, Int_t istrip) const +{ +/// returns width of X strip istrip in MC11 + return fYwidth11[localBoardId][istrip]; +} +//---------------------------------------------------------------------- +Float_t AliMUONTriggerCircuit::GetY21Width(Int_t localBoardId, Int_t istrip) const +{ +/// returns width of X strip istrip in MC21 + return fYwidth21[localBoardId][istrip]; } //---------------------------------------------------------------------- diff --git a/MUON/AliMUONTriggerCircuit.h b/MUON/AliMUONTriggerCircuit.h index 03fc5018063..5b226025c2b 100644 --- a/MUON/AliMUONTriggerCircuit.h +++ b/MUON/AliMUONTriggerCircuit.h @@ -31,9 +31,14 @@ public: AliMUONTriggerCircuit& operator=(const AliMUONTriggerCircuit& AliMUONTriggerCircuit); //--- methods which return member data related info + Float_t GetX11Pos(Int_t localBoardId, Int_t istrip) const; Float_t GetY11Pos(Int_t localBoardId, Int_t istrip) const; Float_t GetY21Pos(Int_t localBoardId, Int_t istrip) const; - Float_t GetX11Pos(Int_t localBoardId, Int_t istrip) const; + Float_t GetZ11Pos(Int_t localBoardId, Int_t istrip) const; + Float_t GetZ21Pos(Int_t localBoardId, Int_t istrip) const; + Float_t GetX11Width(Int_t localBoardId, Int_t istrip) const; + Float_t GetY11Width(Int_t localBoardId, Int_t istrip) const; + Float_t GetY21Width(Int_t localBoardId, Int_t istrip) const; // void Print(Option_t* opt="") const; // void dump(const char* what, const Float_t* array, Int_t size); @@ -54,7 +59,7 @@ private: void FillXstrips(const Int_t icol, const Int_t iFirstStrip, const Int_t iLastStrip, - Int_t liStripCircuit, TArrayF& ypos); + Int_t liStripCircuit, const Bool_t is11); void FillYstrips(const Int_t iFirstStrip, const Int_t iLastStrip, Int_t liStripCircuit, @@ -68,6 +73,11 @@ private: TArrayF fXpos11[235]; ///< X position of Y strips in MC11 TArrayF fYpos11[235]; ///< Y position of X strips in MC11 TArrayF fYpos21[235]; ///< Y position of X strips in MC21 + TArrayF fZpos11[235]; ///< Z position of X strips in MC11 + TArrayF fZpos21[235]; ///< Z position of X strips in MC21 + TArrayF fXwidth11[235]; ///< width of Y strips in MC11 + TArrayF fYwidth11[235]; ///< width of X strips in MC11 + TArrayF fYwidth21[235]; ///< width of X strips in MC21 const AliMUONGeometryTransformer* fkTransformer; //!< pointer to transformation const AliMpVSegmentation* fkCurrentSeg; //!< current segmentation @@ -75,6 +85,6 @@ private: Int_t fCurrentDetElem; //!< current detection elt id Int_t fCurrentLocalBoard; //!< current local board id - ClassDef(AliMUONTriggerCircuit,1) // Trigger Circuit class + ClassDef(AliMUONTriggerCircuit,2) // Trigger Circuit class }; #endif diff --git a/MUON/AliMUONTriggerTrack.cxx b/MUON/AliMUONTriggerTrack.cxx index 1ccd47c2e6a..5a6546656e4 100644 --- a/MUON/AliMUONTriggerTrack.cxx +++ b/MUON/AliMUONTriggerTrack.cxx @@ -26,6 +26,7 @@ #include "AliMUONTriggerTrack.h" #include "AliMUONTrackReconstructor.h" +#include "TString.h" #include #include "AliLog.h" @@ -38,30 +39,35 @@ AliMUONTriggerTrack::AliMUONTriggerTrack() : TObject(), fx11(0), fy11(0), - fthetax(0), - fthetay(0), + fz11(0.), + fz21(0.), + fSlopeX(0), + fSlopeY(0), floTrgNum(0), fGTPattern(0), - fHitsPatternInTrigCh(0) - + fHitsPatternInTrigCh(0), + fCovariances(0x0) { /// default ctr AliDebug(1,Form("this=%p",this)); } //__________________________________________________________________________ -AliMUONTriggerTrack::AliMUONTriggerTrack(Float_t x11, Float_t y11, Float_t thetax, Float_t thetay, Int_t loTrgNum, Long_t theGTPattern, UShort_t hitsPatternInTrigCh) +AliMUONTriggerTrack::AliMUONTriggerTrack(Float_t x11, Float_t y11, Float_t z11, Float_t z21, Float_t slopeX, Float_t slopeY, Int_t loTrgNum, Long_t theGTPattern, UShort_t hitsPatternInTrigCh) : TObject(), fx11(x11), fy11(y11), - fthetax(thetax), - fthetay(thetay), + fz11(z11), + fz21(z21), + fSlopeX(slopeX), + fSlopeY(slopeY), floTrgNum(loTrgNum), fGTPattern(theGTPattern), - fHitsPatternInTrigCh(hitsPatternInTrigCh) + fHitsPatternInTrigCh(hitsPatternInTrigCh), + fCovariances(0x0) { /// ctor from local trigger output - AliDebug(1,Form("this=%p x11=%f y11=%f thetax=%f thetay=%f loTrgNum=%d GTPattern=%ld HitsPatternInTrigCh %i", - this,x11,y11,thetax,thetay,loTrgNum,theGTPattern,fHitsPatternInTrigCh)); + AliDebug(1,Form("this=%p x11=%f y11=%f z11=%f z21=%f slopeX=%f slopeY=%f loTrgNum=%d GTPattern=%ld HitsPatternInTrigCh %i", + this,x11,y11,z11,z21,slopeX,slopeY,loTrgNum,theGTPattern,fHitsPatternInTrigCh)); } @@ -70,6 +76,10 @@ AliMUONTriggerTrack::~AliMUONTriggerTrack() { /// Destructor AliDebug(1,Form("this=%p",this)); + if (fCovariances) { + delete fCovariances; + fCovariances = 0x0; + } } //__________________________________________________________________________ @@ -77,16 +87,20 @@ AliMUONTriggerTrack::AliMUONTriggerTrack (const AliMUONTriggerTrack& theMUONTrig : TObject(theMUONTriggerTrack), fx11(theMUONTriggerTrack.fx11), fy11(theMUONTriggerTrack.fy11), - fthetax(theMUONTriggerTrack.fthetax), - fthetay(theMUONTriggerTrack.fthetay), + fz11(theMUONTriggerTrack.fz11), + fz21(theMUONTriggerTrack.fz21), + fSlopeX(theMUONTriggerTrack.fSlopeX), + fSlopeY(theMUONTriggerTrack.fSlopeY), floTrgNum(theMUONTriggerTrack.floTrgNum), fGTPattern(theMUONTriggerTrack.fGTPattern), - fHitsPatternInTrigCh(theMUONTriggerTrack.fHitsPatternInTrigCh) + fHitsPatternInTrigCh(theMUONTriggerTrack.fHitsPatternInTrigCh), + fCovariances(0x0) { /// /// copy ctor /// - AliDebug(1,Form("this=%p copy ctor",this)); + if (theMUONTriggerTrack.fCovariances) fCovariances = new TMatrixD(*(theMUONTriggerTrack.fCovariances)); + AliDebug(1,Form("this=%p copy ctor",this)); } @@ -105,21 +119,67 @@ theMUONTriggerTrack) fx11 = theMUONTriggerTrack.fx11; fy11 = theMUONTriggerTrack.fy11; - fthetax = theMUONTriggerTrack.fthetax; - fthetay = theMUONTriggerTrack.fthetay; + fz11 = theMUONTriggerTrack.fz11; + fz21 = theMUONTriggerTrack.fz21; + fSlopeX = theMUONTriggerTrack.fSlopeX; + fSlopeY = theMUONTriggerTrack.fSlopeY; floTrgNum = theMUONTriggerTrack.floTrgNum; fGTPattern = theMUONTriggerTrack.fGTPattern; fHitsPatternInTrigCh = theMUONTriggerTrack.fHitsPatternInTrigCh; + if (theMUONTriggerTrack.fCovariances) { + if (fCovariances) *fCovariances = *(theMUONTriggerTrack.fCovariances); + else fCovariances = new TMatrixD(*(theMUONTriggerTrack.fCovariances)); + } else { + delete fCovariances; + fCovariances = 0x0; + } + return *this; } //__________________________________________________________________________ void -AliMUONTriggerTrack::Print(Option_t*) const +AliMUONTriggerTrack::Print(Option_t* opt) const { /// Printing + TString optString(opt); + optString.ToUpper(); + if ( optString.Contains("FULL") ) optString = "PARAM COV"; + + if ( optString.Contains("PARAM")) + cout << Form("(X,Y,Z)11=(%7.2f,%7.2f,%7.2f) Z21=%7.2f Slope(X,Y)=(%7.2f,%7.2f) LocalBoard #%3d GlobalTriggerPattern %x HitsPatternInTrigCh %x", + fx11,fy11,fz11,fz21,fSlopeX,fSlopeY,floTrgNum,fGTPattern,fHitsPatternInTrigCh) << endl; + + if ( optString.Contains("COV") ){ + if ( ! fCovariances ) cout << "Covariances not initialized " << endl; + else fCovariances->Print(); + } +} - cout << Form("(X,Y)11=(%7.2f,%7.2f) Theta(X,Y)=(%7.2f,%7.2f) LocalBoard #%3d GlobalTriggerPattern %x HitsPatternInTrigCh %x", - fx11,fy11,fthetax,fthetay,floTrgNum,fGTPattern,fHitsPatternInTrigCh) << endl; +//__________________________________________________________________________ +void AliMUONTriggerTrack::SetCovariances(const TMatrixD& covariances) +{ + /// Set the covariance matrix + if (fCovariances) *fCovariances = covariances; + else fCovariances = new TMatrixD(covariances); +} + +//__________________________________________________________________________ +void AliMUONTriggerTrack::SetCovariances(const Double_t matrix[3][3]) +{ + /// Set the covariance matrix + if (fCovariances) fCovariances->SetMatrixArray(&(matrix[0][0])); + else fCovariances = new TMatrixD(3,3,&(matrix[0][0])); +} + +//__________________________________________________________________________ +const TMatrixD& AliMUONTriggerTrack::GetCovariances() const +{ + /// Return the covariance matrix (create it before if needed) + if (!fCovariances) { + fCovariances = new TMatrixD(3,3); + fCovariances->Zero(); + } + return *fCovariances; } diff --git a/MUON/AliMUONTriggerTrack.h b/MUON/AliMUONTriggerTrack.h index 4623532b8be..541e381da2c 100644 --- a/MUON/AliMUONTriggerTrack.h +++ b/MUON/AliMUONTriggerTrack.h @@ -12,6 +12,8 @@ /// \author Philippe Crochet #include +#include +#include class AliMUONTrackReconstructor; @@ -22,7 +24,8 @@ class AliMUONTriggerTrack : public TObject virtual ~AliMUONTriggerTrack(); // Destructor AliMUONTriggerTrack (const AliMUONTriggerTrack& AliMUONTriggerTrack); // copy constructor AliMUONTriggerTrack& operator=(const AliMUONTriggerTrack& AliMUONTriggerTrack); // assignment operator - AliMUONTriggerTrack(Float_t x11, Float_t y11, Float_t thetax, Float_t thetay, + AliMUONTriggerTrack(Float_t x11, Float_t y11, Float_t z11, Float_t z21, + Float_t slopeX, Float_t slopeY, Int_t iloTrg, Long_t theGTPattern, UShort_t hitsPatternInTrigCh=0); // getters @@ -31,10 +34,18 @@ class AliMUONTriggerTrack : public TObject Float_t GetX11() const {return fx11;} /// Return y position of fired X strip in MC11 Float_t GetY11() const {return fy11;} + /// Return z position of fired X strip in MC11 + Float_t GetZ11() const {return fz11;} + /// Return z position of fired X strip in MC21 + Float_t GetZ21() const {return fz21;} /// Return track theta angle in X - Float_t GetThetax() const {return fthetax;} + Float_t GetThetax() const {return TMath::ATan(fSlopeX);} /// Return track theta angle in Y - Float_t GetThetay() const {return fthetay;} + Float_t GetThetay() const {return TMath::ATan(fSlopeY);} + /// Return track slope in X + Float_t GetSlopeX() const {return fSlopeX;} + /// Return track slope in Y + Float_t GetSlopeY() const {return fSlopeY;} /// Return local trigger number Int_t GetLoTrgNum() const {return floTrgNum;} @@ -44,10 +55,14 @@ class AliMUONTriggerTrack : public TObject void SetX11(Float_t x) {fx11 = x;} /// Set y position of fired X strip in MC11 void SetY11(Float_t y) {fy11 = y;} - /// Set track theta angle in X - void SetThetax(Float_t tx) {fthetax = tx;} - /// Set track theta angle in Y - void SetThetay(Float_t ty) {fthetay = ty;} + /// Set z position of fired X strip in MC11 + void SetZ11(Float_t z) {fz11 = z;} + /// Set z position of fired X strip in MC21 + void SetZ21(Float_t z) {fz21 = z;} + /// Set track slope in X + void SetSlopeX(Float_t slopeX) {fSlopeX = slopeX;} + /// Set track slope in Y + void SetSlopeY(Float_t slopeY) {fSlopeY = slopeY;} /// Set local trigger number void SetLoTrgNum(Int_t loTrgNum) {floTrgNum = loTrgNum;} @@ -61,19 +76,26 @@ class AliMUONTriggerTrack : public TObject /// set word telling which trigger chambers where hit by track void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) {fHitsPatternInTrigCh = hitsPatternInTrigCh;} - virtual void Print(Option_t* opt="") const; + virtual void Print(Option_t* opt="FULL") const; + + const TMatrixD& GetCovariances() const; + void SetCovariances(const TMatrixD& covariances); + void SetCovariances(const Double_t matrix[3][3]); protected: private: Float_t fx11; ///< x position of fired Y strip in MC11 Float_t fy11; ///< y position of fired X strip in MC11 - Float_t fthetax; ///< track theta angle in X - Float_t fthetay; ///< track theta angle in Y + Float_t fz11; ///< z position of fired X strip in MC11 + Float_t fz21; ///< z position of fired X strip in MC21 + Float_t fSlopeX; ///< track slope in X + Float_t fSlopeY; ///< track slope in Y Int_t floTrgNum; ///< local trigger number UChar_t fGTPattern; ///< Global trigger pattern (do not work with static statement) UShort_t fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers + mutable TMatrixD *fCovariances; ///< Covariance matrix of track parameters - ClassDef(AliMUONTriggerTrack, 5) // Reconstructed trigger track in ALICE dimuon spectrometer + ClassDef(AliMUONTriggerTrack, 6) // Reconstructed trigger track in ALICE dimuon spectrometer }; #endif diff --git a/MUON/AliMUONVTrackReconstructor.cxx b/MUON/AliMUONVTrackReconstructor.cxx index dfeafabd9bb..2f7bc462b56 100644 --- a/MUON/AliMUONVTrackReconstructor.cxx +++ b/MUON/AliMUONVTrackReconstructor.cxx @@ -78,6 +78,11 @@ #include "AliMpDEManager.h" #include "AliMpArea.h" +#include "AliMpDDLStore.h" +#include "AliMpVSegmentation.h" +#include "AliMpSegmentation.h" +#include "AliMpPad.h" + #include "AliLog.h" #include "AliCodeTimer.h" #include "AliTracker.h" @@ -1241,7 +1246,7 @@ void AliMUONVTrackReconstructor::EventReconstructTrigger(const AliMUONTriggerCir /// To make the trigger tracks from Local Trigger AliDebug(1, ""); AliCodeTimerAuto("",0); - + AliMUONGlobalTrigger* globalTrigger = triggerStore.Global(); UChar_t gloTrigPat = 0; @@ -1254,57 +1259,61 @@ void AliMUONVTrackReconstructor::EventReconstructTrigger(const AliMUONTriggerCir TIter next(triggerStore.CreateIterator()); AliMUONLocalTrigger* locTrg(0x0); - Float_t z11 = AliMUONConstants::DefaultChamberZ(10); - Float_t z21 = AliMUONConstants::DefaultChamberZ(12); + const Double_t kTrigNonBendReso = AliMUONConstants::TriggerNonBendingReso(); + const Double_t kTrigBendReso = AliMUONConstants::TriggerBendingReso(); + const Double_t kSqrt12 = TMath::Sqrt(12.); AliMUONTriggerTrack triggerTrack; + TMatrixD trigCov(3,3); while ( ( locTrg = static_cast(next()) ) ) { - Bool_t xTrig=locTrg->IsTrigX(); - Bool_t yTrig=locTrg->IsTrigY(); - - Int_t localBoardId = locTrg->LoCircuit(); - - if (xTrig && yTrig) + if ( locTrg->IsTrigX() && locTrg->IsTrigY() ) { // make Trigger Track if trigger in X and Y - + + Int_t localBoardId = locTrg->LoCircuit(); + Float_t y11 = circuit.GetY11Pos(localBoardId, locTrg->LoStripX()); + Float_t z11 = circuit.GetZ11Pos(localBoardId, locTrg->LoStripX()); // need first to convert deviation to [0-30] // (see AliMUONLocalTriggerBoard::LocalTrigger) Int_t deviation = locTrg->GetDeviation(); Int_t stripX21 = locTrg->LoStripX()+deviation+1; Float_t y21 = circuit.GetY21Pos(localBoardId, stripX21); + Float_t z21 = circuit.GetZ21Pos(localBoardId, stripX21); Float_t x11 = circuit.GetX11Pos(localBoardId, locTrg->LoStripY()); - AliDebug(1, Form(" MakeTriggerTrack %d %d %d %d %f %f %f \n",locTrg->LoCircuit(), - locTrg->LoStripX(),locTrg->LoStripX()+locTrg->LoDev()+1,locTrg->LoStripY(),y11, y21, x11)); - - Float_t thetax = TMath::ATan2( x11 , z11 ); - Float_t thetay = TMath::ATan2( (y21-y11) , (z21-z11) ); + AliDebug(1, Form(" MakeTriggerTrack %3d %2d %2d %2d (%f %f %f) (%f %f)\n",locTrg->LoCircuit(), + locTrg->LoStripX(),locTrg->LoStripX()+deviation+1,locTrg->LoStripY(),x11, y11, z11, y21, z21)); - CorrectThetaRange(thetax); - CorrectThetaRange(thetay); + + Double_t deltaZ = z11 - z21; + Float_t slopeX = x11/z11; + Float_t slopeY = (y11-y21) / deltaZ; + + Float_t sigmaX = circuit.GetX11Width(localBoardId, locTrg->LoStripY()) / kSqrt12; + Float_t sigmaY = circuit.GetY11Width(localBoardId, locTrg->LoStripX()) / kSqrt12; + Float_t sigmaY21 = circuit.GetY21Width(localBoardId, locTrg->LoStripX()) / kSqrt12; + + trigCov.Zero(); + trigCov(0,0) = kTrigNonBendReso * kTrigNonBendReso + sigmaX * sigmaX; + trigCov(1,1) = kTrigBendReso * kTrigBendReso + sigmaY * sigmaY; + trigCov(2,2) = + (2. * kTrigBendReso * kTrigBendReso + sigmaY * sigmaY + sigmaY21 * sigmaY21 ) / deltaZ / deltaZ; + trigCov(1,2) = trigCov(2,1) = trigCov(1,1) / deltaZ; + triggerTrack.SetX11(x11); triggerTrack.SetY11(y11); - triggerTrack.SetThetax(thetax); - triggerTrack.SetThetay(thetay); + triggerTrack.SetZ11(z11); + triggerTrack.SetZ21(z21); + triggerTrack.SetSlopeX(slopeX); + triggerTrack.SetSlopeY(slopeY); triggerTrack.SetGTPattern(gloTrigPat); triggerTrack.SetLoTrgNum(localBoardId); - + triggerTrack.SetCovariances(trigCov); + triggerTrackStore.Add(triggerTrack); } // board is fired } // end of loop on Local Trigger } - -//__________________________________________________________________________ -void AliMUONVTrackReconstructor::CorrectThetaRange(Float_t& theta) -{ - /// The angles of the trigger tracks, obtained with ATan2, - /// have values around +pi and -pi. On the contrary, the angles - /// used in the tracker tracks have values around 0. - /// This function sets the same range for the trigger tracks angles. - if (theta < -TMath::PiOver2()) theta += TMath::Pi(); - else if(theta > TMath::PiOver2()) theta -= TMath::Pi(); -} diff --git a/MUON/AliMUONVTrackReconstructor.h b/MUON/AliMUONVTrackReconstructor.h index 90721cdfefe..8e0b127d826 100644 --- a/MUON/AliMUONVTrackReconstructor.h +++ b/MUON/AliMUONVTrackReconstructor.h @@ -108,8 +108,6 @@ class AliMUONVTrackReconstructor : public TObject { Bool_t FollowLinearTrackInChamber(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore, Int_t nextChamber); Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, const AliMUONVClusterStore& clusterStore, Int_t nextStation); - void CorrectThetaRange(Float_t&); - private: // Functions -- 2.39.3