46 #include <Riostream.h> 49 #include <TClonesArray.h> 52 void TrackChi2(Int_t &nParam, Double_t *gradient, Double_t &
chi2, Double_t *param, Int_t flag);
82 TClonesArray *segments;
87 AliDebug(1,
"Enter MakeTrackCandidates");
90 Int_t firstChamber(0);
99 for (Int_t i = firstChamber; i <= lastChamber; ++i )
105 for (Int_t istat=4; istat>=3; istat--) {
111 for (Int_t iseg=0; iseg<segments->GetEntriesFast(); iseg++)
113 AliDebug(1,Form(
"Making primary candidate(1..) %d",++iCandidate));
136 AliError(Form(
"Too many track candidates (%d tracks). Stop tracking.",
fNRecTracks + segments->GetEntriesFast() - iseg - 1));
164 TClonesArray *segments;
167 Int_t iCandidate = 0, iCurrentTrack, nCurrentTracks;
170 AliDebug(1,
"Enter MakeMoreTrackCandidates");
173 for (Int_t ich1 = 6; ich1 <= 7; ich1++) {
174 for (Int_t ich2 = 8; ich2 <= 9; ich2++) {
183 for (Int_t iSegment=0; iSegment<segments->GetEntriesFast(); iSegment++)
185 AliDebug(1,Form(
"Making primary candidate(1..) %d",++iCandidate));
197 if (
GetRecoParam()->TrackAllTracks() && clusterFound) iCurrentTrack++;
201 while (iCurrentTrack < nCurrentTracks) {
212 AliError(Form(
"Too many track candidates (%d tracks). Stop tracking.",
fNRecTracks + segments->GetEntriesFast() - iSegment - 1));
239 Int_t currentNRecTracks;
244 for (Int_t station = 2; station >= 0; station--) {
251 for (Int_t iRecTrack = 0; iRecTrack <currentNRecTracks; iRecTrack++) {
252 AliDebug(1,Form(
"FollowTracks: track candidate(1..) %d", iRecTrack+1));
261 Fit(*track, kFALSE, kTRUE, kTRUE);
262 else Fit(*track, kFALSE, kFALSE, kTRUE);
314 nextTrackParam->
SetZ(trackParam->
GetZ());
383 Int_t trackIndex = -1;
390 Fit(*track, kTRUE, kFALSE, kTRUE);
394 cout <<
"FollowTracks: track candidate(0..) " << trackIndex <<
" after final fit" << endl;
422 nextTrackParam->
SetZ(trackParam->
GetZ());
463 AliDebug(1,Form(
"Enter FollowTrackInChamber(1..) %d", nextChamber+1));
468 Double_t bestChi2WithOneCluster = maxChi2WithOneCluster;
469 Bool_t foundOneCluster = kFALSE;
483 cout<<endl<<
"Track parameters and covariances at first cluster:"<<endl;
493 while (currentChamber > nextChamber + 1) {
513 cout <<
"FollowTrackInStation: look for clusters in chamber(1..): " << nextChamber+1 << endl;
526 while ( ( cluster = static_cast<AliMUONVCluster*>(next()) ) ) {
532 chi2WithOneCluster =
TryOneCluster(extrapTrackParamAtCh, cluster, extrapTrackParamAtCluster);
535 if (chi2WithOneCluster < maxChi2WithOneCluster) {
536 foundOneCluster = kTRUE;
540 cout <<
"FollowTrackInStation: found one cluster in chamber(1..): " << nextChamber+1
541 <<
" (Chi2 = " << chi2WithOneCluster <<
")" << endl;
553 cout <<
"FollowTrackInStation: added one cluster in chamber(1..): " << nextChamber+1 << endl;
557 }
else if (chi2WithOneCluster < bestChi2WithOneCluster) {
559 bestChi2WithOneCluster = chi2WithOneCluster;
560 bestTrackParamAtCluster = extrapTrackParamAtCluster;
569 if (foundOneCluster) {
570 UpdateTrack(trackCandidate,bestTrackParamAtCluster);
574 cout <<
"FollowTrackInStation: added the best cluster in chamber(1..): " << bestTrackParamAtCluster.
GetClusterPtr()->
GetChamberId()+1 << endl;
578 }
else return kFALSE;
580 }
else if (foundOneCluster) {
586 }
else return kFALSE;
601 AliDebug(1,Form(
"Enter FollowTrackInStation(1..) %d", nextStation+1));
607 if (nextStation==4) {
608 ch1 = 2*nextStation+1;
612 ch2 = 2*nextStation+1;
621 Double_t bestChi2WithOneCluster = maxChi2WithOneCluster;
622 Double_t bestChi2WithTwoClusters = maxChi2WithTwoClusters;
623 Bool_t foundOneCluster = kFALSE;
624 Bool_t foundTwoClusters = kFALSE;
640 cout<<endl<<
"Track parameters and covariances at first cluster:"<<endl;
650 while (ch1 < ch2 && currentChamber > ch2 + 1) {
670 cout <<
"FollowTrackInStation: look for clusters in chamber(1..): " << ch2+1 << endl;
679 Int_t nClusters = clusterStore.
GetSize();
680 Bool_t *clusterCh1Used =
new Bool_t[nClusters];
681 for (Int_t i = 0; i < nClusters; i++) clusterCh1Used[i] = kFALSE;
689 while ( ( clusterCh2 = static_cast<AliMUONVCluster*>(nextInCh2()) ) ) {
695 chi2WithOneCluster =
TryOneCluster(extrapTrackParamAtCh, clusterCh2, extrapTrackParamAtCluster2);
698 if (chi2WithOneCluster < maxChi2WithOneCluster) {
699 Bool_t foundSecondCluster = kFALSE;
703 cout <<
"FollowTrackInStation: found one cluster in chamber(1..): " << ch2+1
704 <<
" (Chi2 = " << chi2WithOneCluster <<
")" << endl;
706 cout <<
" look for second clusters in chamber(1..): " << ch1+1 <<
" ..." << endl;
713 extrapTrackParam = extrapTrackParamAtCluster2;
723 if (normalExtrap)
while ( ( clusterCh1 = static_cast<AliMUONVCluster*>(nextInCh1()) ) ) {
730 chi2WithTwoClusters =
TryTwoClusters(extrapTrackParamAtCluster2, clusterCh1, extrapTrackParamAtCluster1);
733 if (chi2WithTwoClusters < maxChi2WithTwoClusters) {
734 foundSecondCluster = kTRUE;
735 foundTwoClusters = kTRUE;
739 cout <<
"FollowTrackInStation: found second cluster in chamber(1..): " << ch1+1
740 <<
" (Global Chi2 = " << chi2WithTwoClusters <<
")" << endl;
747 UpdateTrack(*newTrack,extrapTrackParamAtCluster1,extrapTrackParamAtCluster2);
751 clusterCh1Used[iCluster1] = kTRUE;
755 cout <<
"FollowTrackInStation: added two clusters in station(1..): " << nextStation+1 << endl;
759 }
else if (chi2WithTwoClusters < bestChi2WithTwoClusters) {
761 bestChi2WithTwoClusters = chi2WithTwoClusters;
762 bestTrackParamAtCluster1 = extrapTrackParamAtCluster1;
763 bestTrackParamAtCluster2 = extrapTrackParamAtCluster2;
771 if (!foundSecondCluster) {
772 foundOneCluster = kTRUE;
782 cout <<
"FollowTrackInStation: added one cluster in chamber(1..): " << ch2+1 << endl;
786 }
else if (!foundTwoClusters && chi2WithOneCluster < bestChi2WithOneCluster) {
788 bestChi2WithOneCluster = chi2WithOneCluster;
789 bestTrackParamAtCluster1 = extrapTrackParamAtCluster2;
800 if (
GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
817 cout <<
"FollowTrackInStation: look for single clusters in chamber(1..): " << ch1+1 << endl;
825 if (normalExtrap)
while ( ( clusterCh1 = static_cast<AliMUONVCluster*>(nextInCh1()) ) ) {
828 if (clusterCh1Used[iCluster1])
continue;
834 chi2WithOneCluster =
TryOneCluster(extrapTrackParamAtCh, clusterCh1, extrapTrackParamAtCluster1);
838 if (chi2WithOneCluster < maxChi2WithOneCluster) {
839 foundOneCluster = kTRUE;
843 cout <<
"FollowTrackInStation: found one cluster in chamber(1..): " << ch1+1
844 <<
" (Chi2 = " << chi2WithOneCluster <<
")" << endl;
856 cout <<
"FollowTrackInStation: added one cluster in chamber(1..): " << ch1+1 << endl;
860 }
else if (chi2WithOneCluster < bestChi2WithOneCluster) {
862 bestChi2WithOneCluster = chi2WithOneCluster;
863 bestTrackParamAtCluster1 = extrapTrackParamAtCluster1;
874 if (foundTwoClusters) {
875 UpdateTrack(trackCandidate,bestTrackParamAtCluster1,bestTrackParamAtCluster2);
879 cout <<
"FollowTrackInStation: added the two best clusters in station(1..): " << nextStation+1 << endl;
883 }
else if (foundOneCluster) {
884 UpdateTrack(trackCandidate,bestTrackParamAtCluster1);
888 cout <<
"FollowTrackInStation: added the best cluster in chamber(1..): " << bestTrackParamAtCluster1.
GetClusterPtr()->
GetChamberId()+1 << endl;
893 delete [] clusterCh1Used;
897 }
else if (foundOneCluster || foundTwoClusters) {
904 delete [] clusterCh1Used;
908 delete [] clusterCh1Used;
924 trackParamAtCluster2.
SetZ(trackParamAtCluster1.
GetZ());
962 Double_t direction[5] = {-1.,-1.,1.,1.,-1.};
963 for (Int_t i=0; i<5; i++) {
965 if (kParamCov(i,i) == 0.)
continue;
967 for (Int_t j=0; j<5; j++) {
969 dParam(j,0) = TMath::Sqrt(kParamCov(i,i));
970 dParam(j,0) *= TMath::Sign(1.,direction[j]*paramAtCluster1Save(j,0));
971 }
else dParam(j,0) = 0.;
984 jacob(3,i) = (trackParam.
GetBendingCoor() - bendingCoor2 ) / dParam(i,0);
988 TMatrixD tmp(jacob,TMatrixD::kMult,kParamCov);
989 error =
TMatrixD(tmp,TMatrixD::kMultTranspose,jacob);
999 if (error.Determinant() != 0) {
1007 TMatrixD tmp2(dPos,TMatrixD::kTransposeMult,error);
1008 TMatrixD result(tmp2,TMatrixD::kMult,dPos);
1024 Double_t localChi2 = deltaX*deltaX / cluster->
GetErrX2() +
1025 deltaY*deltaY / cluster->
GetErrY2();
1051 Double_t localChi2AtCluster1 = deltaX*deltaX / cluster1->
GetErrX2() +
1052 deltaY*deltaY / cluster1->
GetErrY2();
1053 trackParamAtCluster1.
SetLocalChi2(localChi2AtCluster1);
1062 Double_t localChi2AtCluster2 = deltaX*deltaX / cluster2->
GetErrX2() +
1063 deltaY*deltaY / cluster2->
GetErrY2();
1064 trackParamAtCluster2.
SetLocalChi2(localChi2AtCluster2);
1087 if (nextStation > 1)
return kFALSE;
1089 Int_t worstClusterNumber = -1;
1090 Double_t localChi2, worstLocalChi2 = -1.;
1093 for (Int_t clusterNumber = 0; clusterNumber < 2; clusterNumber++) {
1100 if (!trackParamAtCluster->
IsRemovable())
return kFALSE;
1107 if (localChi2 > worstLocalChi2) {
1108 worstLocalChi2 = localChi2;
1109 worstClusterNumber = clusterNumber;
1115 if (worstClusterNumber < 0)
return kFALSE;
1123 Fit(trackCandidate, kFALSE, kFALSE, kTRUE);
1143 AliDebug(1,
"Enter SetVertexForFit");
1154 nonBendingReso2 = 0.;
1158 const TMatrixD& kParamCov = paramAtVertex.GetCovariances();
1159 nonBendingReso2 += kParamCov(0,0);
1160 bendingReso2 += kParamCov(2,2);
1176 Double_t benC, errorParam, invBenP, nonBenC, x, y;
1178 Double_t arg[1], fedm, errdef, globalChi2;
1180 Int_t status, covStatus;
1183 if (!gMinuit) gMinuit =
new TMinuit(6);
1187 gMinuit->SetObjectFit(&track);
1191 gMinuit->mnexcm(
"SET PRI", arg, 1, status);
1193 gMinuit->mnexcm(
"SHO COV", arg, 0, status);
1196 gMinuit->mnexcm(
"SET PRI", arg, 1, status);
1199 gMinuit->mnexcm(
"SET NOW", arg, 0, status);
1209 AliWarning(
"cannot take into account the multiple scattering effects");
1224 gMinuit->mnparm(0,
"X", trackParam->
GetNonBendingCoor(), 0.03, -500.0, 500.0, status);
1225 gMinuit->mnparm(1,
"NonBenS", trackParam->
GetNonBendingSlope(), 0.001, -1., 1., status);
1226 gMinuit->mnparm(2,
"Y", trackParam->
GetBendingCoor(), 0.10, -500.0, 500.0, status);
1227 gMinuit->mnparm(3,
"BenS", trackParam->
GetBendingSlope(), 0.001, -1.5, 1.5, status);
1231 gMinuit->mnexcm(
"MIGRAD", arg, 0, status);
1234 if (calcCov) gMinuit->mnexcm(
"HESSE", arg, 0, status);
1237 gMinuit->GetParameter(0, x, errorParam);
1239 gMinuit->GetParameter(1, nonBenC, errorParam);
1241 gMinuit->GetParameter(2, y, errorParam);
1243 gMinuit->GetParameter(3, benC, errorParam);
1245 gMinuit->GetParameter(4, invBenP, errorParam);
1249 gMinuit->mnstat(globalChi2, fedm, errdef, npari, nparx, covStatus);
1256 Double_t matrix[5][5];
1257 for (Int_t i=0; i<5; i++)
for (Int_t j=0; j<5; j++) matrix[i][j] = 0.;
1258 gMinuit->mnemat(&matrix[0][0],5);
1292 Double_t nonBendingReso2,bendingReso2;
1298 chi2 += dX * dX / nonBendingReso2 + dY * dY / bendingReso2;
1317 AliDebug(1,
"Enter ComplementTracks");
1319 Int_t chamberId, detElemId;
1320 Double_t chi2OfCluster, bestChi2OfCluster;
1323 Bool_t foundOneCluster, trackModified, hasChanged = kFALSE;
1325 AliMUONTrackParam *trackParam, *nextTrackParam, copyOfTrackParam, trackParamAtCluster, bestTrackParamAtCluster;
1329 trackModified = kFALSE;
1332 while (trackParam) {
1333 foundOneCluster = kFALSE;
1334 bestChi2OfCluster = 2. * sigmaCut2;
1342 copyOfTrackParam.
SetZ(trackParam->
GetZ());
1350 while ( ( cluster = static_cast<AliMUONVCluster*>(nextInCh()) ) ) {
1359 chi2OfCluster =
TryOneCluster(copyOfTrackParam, cluster, trackParamAtCluster);
1362 if (chi2OfCluster < bestChi2OfCluster) {
1363 bestChi2OfCluster = chi2OfCluster;
1364 bestTrackParamAtCluster = trackParamAtCluster;
1365 foundOneCluster = kTRUE;
1371 if (foundOneCluster) {
1375 cout <<
"ComplementTracks: found one cluster in chamber(1..): " << chamberId+1 << endl;
1377 cout<<endl<<
"Track parameters and covariances at cluster:"<<endl;
1385 trackModified = kTRUE;
1389 trackParam = nextTrackParam;
1393 if (trackModified)
Fit(*track, kTRUE, kFALSE, kTRUE);
1409 Double_t localChi2, worstLocalChi2;
1421 AliWarning(
"unable to update track parameters and covariances --> stop improvement");
1429 worstTrackParamAtCluster = NULL;
1430 worstLocalChi2 = 0.;
1432 while (trackParamAtCluster) {
1436 if (localChi2 > worstLocalChi2) {
1437 worstLocalChi2 = localChi2;
1438 worstTrackParamAtCluster = trackParamAtCluster;
1445 if (!worstTrackParamAtCluster) {
1451 if (worstLocalChi2 < 2. * sigmaCut2) {
1457 if (!worstTrackParamAtCluster->
IsRemovable())
break;
1465 Fit(track, kTRUE, kFALSE, kTRUE);
1469 cout <<
"ImproveTracks: track " <<
fRecTracksPtr->IndexOf(&track)+1 <<
" improved " << endl;
1483 AliWarning(
"finalization failed due to extrapolation problem");
1496 AliWarning(
"the track does not contain enough clusters --> unable to refit");
1503 AliWarning(
"track parameters at first chamber are not initialized --> unable to refit");
1510 AliWarning(
"bad track refitting due to extrapolation failure");
1517 Fit(track, kTRUE, kFALSE, kTRUE);
1526 AliWarning(
"track not finalized due to extrapolation failure");
void AskForNewClustersInStation(const AliMUONTrackParam &trackParam, AliMUONVClusterStore &clusterStore, Int_t station)
static Double_t AbsZEnd()
Return z-position of absorber end.
Bool_t FollowLinearTrackInStation(AliMUONTrack &trackCandidate, const AliMUONVClusterStore &clusterStore, Int_t nextStation)
void SetSmoothParameters(const TMatrixD ¶meters)
Virtual class for the MUON track reconstruction.
void RemoveTrackParamAtCluster(AliMUONTrackParam *trackParam)
Int_t GetNClusters() const
return the number of clusters attached to the track
virtual Int_t Clusterize(Int_t chamberId, AliMUONVClusterStore &clusterStore, const AliMpArea &area, const AliMUONRecoParam *recoParam=0x0)=0
Find and add clusters from a given region of a given chamber to the store.
Double_t GetLocalChi2() const
return the local chi2 of the associated cluster with respect to the track
virtual Bool_t FinalizeTrack(AliMUONTrack &track)
Finalize the given track.
Double_t GetSigmaCutForTracking() const
return the cut in sigma to apply on cluster (local chi2) and track (global chi2) during tracking ...
virtual Double_t GetZ() const =0
Return coordinate Z (cm)
Bool_t FollowTrackInStation(AliMUONTrack &trackCandidate, AliMUONVClusterStore &clusterStore, Int_t nextStation)
const TMatrixD & GetSmoothCovariances() const
void SetVertexErrXY2(Double_t nonBendingErr2, Double_t bendingErr2)
set the vertex resolution square used during the tracking procedure
Double_t GetBendingCoor() const
return bending coordinate (cm)
Double_t TryOneCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster *cluster, AliMUONTrackParam &trackParamAtCluster, Bool_t updatePropagator=kFALSE)
const TMatrixD & GetParameters() const
return track parameters
void RemoveUsedSegments(TClonesArray &segments)
Interface of a cluster finder for combined tracking.
Bool_t CovariancesExist() const
return kTRUE if the covariance matrix exist, kFALSE if not
Bool_t FitWithVertex() const
return kTrue if the vertex must be used to constrain the fit, kFalse if not
void RemoveIdenticalTracks()
virtual Int_t GetSize() const =0
The number of objects stored.
Double_t GetZ() const
return Z coordinate (cm)
A rectangle area positioned in plane..
virtual ~AliMUONTrackReconstructor()
Track parameters in ALICE dimuon spectrometer.
virtual void ImproveTrack(AliMUONTrack &track)
Improve the given reconstructed track.
Double_t GetNormalizedChi2() const
Class with MUON reconstruction parameters.
Bool_t IsAcceptable(AliMUONTrackParam &trackParam)
virtual Double_t GetErrX2() const =0
Return resolution**2 (cm**2) on coordinate X.
void SetNonBendingCoor(Double_t nonBendingCoor)
set non bending coordinate (cm)
virtual Bool_t MakeTrackCandidates(AliMUONVClusterStore &clusterStore)
Make track candidates from clusters in stations(1..) 4 and 5.
void SetLocalChi2(Double_t chi2)
set the local chi2 of the associated cluster with respect to the track
void AddParameters(const TMatrixD ¶meters)
add track parameters
void Fit(AliMUONTrack &track, Bool_t includeMCS, Bool_t fitWithVertex, Bool_t calcCov)
Double_t TryTwoClusters(const AliMUONTrackParam &trackParamAtCluster, AliMUONVCluster *cluster2, AliMUONTrackParam &trackParamAtCluster2)
Bool_t TryOneClusterFast(const AliMUONTrackParam &trackParam, const AliMUONVCluster *cluster)
Bool_t ComputeLocalChi2(Bool_t accountForMCS)
void AskForNewClustersInChamber(const AliMUONTrackParam &trackParam, AliMUONVClusterStore &clusterStore, Int_t chamber)
Double_t GetInverseBendingMomentum() const
return inverse bending momentum (GeV/c ** -1) times the charge (assumed forward motion) ...
Double_t GetBendingVertexDispersion() const
return the vertex dispersion (cm) in bending plane
#define AliWarning(message)
void SetVariances(const Double_t matrix[5][5])
Bool_t UpdateCovTrackParamAtCluster()
const AliMUONRecoParam * GetRecoParam() const
Return reco parameters.
Int_t GetMaxTrackCandidates() const
Get the maximum number of track candidates above which the tracking abort.
virtual void Print(Option_t *option="") const
void UpdateTrack(AliMUONTrack &track, AliMUONTrackParam &trackParamAtCluster)
Double_t GetBendingSlope() const
return bending slope (cm ** -1)
Double_t ComputeGlobalChi2(Bool_t accountForMCS)
void SetSmoothCovariances(const TMatrixD &covariances)
void SetBendingSlope(Double_t bendingSlope)
set bending slope (cm ** -1)
abstract base class for clusters
static Int_t GetGlobalDebugLevel()
AliMUONVClusterServer * fClusterServer
reference to our cluster server
void SetImproved(Bool_t improved)
set the flag telling whether the track has been improved or not
Bool_t FitWithMCS() const
return kTrue if the multiple scattering must be accounted for in the fit, kFalse if not ...
Double_t GetGlobalChi2() const
return the minimum value of the function minimized by the fit
Bool_t RecoverTrack(AliMUONTrack &track, AliMUONVClusterStore &clusterStore, Int_t nextStation)
void SetClusterPtr(AliMUONVCluster *cluster, Bool_t owner=kFALSE)
Bool_t FollowTrackInChamber(AliMUONTrack &trackCandidate, AliMUONVClusterStore &clusterStore, Int_t nextChamber)
void TrackChi2(Int_t &nParam, Double_t *gradient, Double_t &chi2, Double_t *param, Int_t flag)
Bool_t FollowLinearTrackInChamber(AliMUONTrack &trackCandidate, const AliMUONVClusterStore &clusterStore, Int_t nextChamber)
Bool_t UpdateTrackParamAtCluster()
void AddTrackParamAtCluster(const AliMUONTrackParam &trackParam, AliMUONVCluster &cluster, Bool_t copy=kFALSE)
const TMatrixD & GetSmoothParameters() const
Bool_t IsRemovable() const
return kTRUE if the associated cluster can be removed from the track it belongs to ...
Double_t GetNonBendingVertexDispersion() const
return the vertex dispersion (cm) in non bending plane
TClonesArray * MakeSegmentsBetweenChambers(const AliMUONVClusterStore &clusterStore, Int_t ch1, Int_t ch2)
Interface of a cluster container.
virtual Bool_t FollowTracks(AliMUONVClusterStore &clusterStore)
Follow tracks in stations(1..) 3, 2 and 1.
virtual TIterator * CreateChamberIterator(Int_t firstChamberId, Int_t lastChamberId) const =0
Return an iterator to loop over the store in the given chamber range.
void SetNonBendingSlope(Double_t nonBendingSlope)
set non bending slope (cm ** -1)
void GetVertexErrXY2(Double_t &nonBendingErr2, Double_t &bendingErr2) const
return the vertex resolution square used during the tracking procedure
virtual Double_t GetErrY2() const =0
Return resolution**2 (cm**2) on coordinate Y.
virtual Bool_t MakeMoreTrackCandidates(AliMUONVClusterStore &clusterStore)
Make extra track candidates from clusters in stations(1..) 4 and 5.
void SetVertexErrXY2ForFit(AliMUONTrack &trackCandidate)
void SetParameters(const TMatrixD ¶meters)
set track parameters
static Int_t GetChamberId(UInt_t uniqueID)
Return chamber id (0..), part of the uniqueID.
void SetInverseBendingMomentum(Double_t inverseBendingMomentum)
set inverse bending momentum (GeV/c ** -1) times the charge (assumed forward motion) ...
virtual Double_t GetY() const =0
Return coordinate Y (cm)
void MakeTrackCandidatesFast(Bool_t flag)
switch on/off the fast building of track candidates (assuming linear propagation between stations 4 a...
virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement=kTRUE)
Re-fit the given track.
#define AliDebug(logLevel, message)
void SetBendingCoor(Double_t bendingCoor)
set bending coordinate (cm)
static Float_t * DefaultChamberZ()
Return pointer to array of positions.
void RequestStation(Int_t iSt, Bool_t flag)
request or not at least one cluster in the station to validate the track
Double_t GetNonBendingCoor() const
return non bending coordinate (cm)
void RemoveDoubleTracks()
void RecoverTracks(Bool_t flag)
switch on/off the recovering of tracks being lost during reconstruction
void SetRemovable(Bool_t removable)
set the flag telling whether the associated cluster can be removed from the track it belongs to or no...
AliMUONVCluster * GetClusterPtr() const
get pointeur to associated cluster
Int_t fNRecTracks
number of reconstructed tracks
static Double_t ChamberThicknessInX0(Int_t chId)
Return chamber thickness in X0.
static Int_t GetDetElemId(UInt_t uniqueID)
Return detection element id, part of the uniqueID.
Standard class for the MUON track reconstruction.
virtual Double_t GetX() const =0
Return coordinate X (cm)
static Int_t GetDebugLevel(const char *module, const char *className)
virtual Bool_t ComplementTracks(const AliMUONVClusterStore &clusterStore)
Complement the reconstructed tracks.
void RecursiveDump(void) const
Reconstructed track in ALICE dimuon spectrometer.
#define AliError(message)
Bool_t IsImproved() const
return kTRUE if the track has been improved
Double_t GetSigmaCutForImprovement() const
return the cut in sigma to apply on cluster (local chi2) during track improvement ...
void SetCovariances(const TMatrixD &covariances)
Double_t GetMinBendingMomentum() const
return the minimum value (GeV/c) of momentum in bending plane
void SetZ(Double_t z)
set Z coordinate (cm)
const TMatrixD & GetCovariances() const
TClonesArray * fRecTracksPtr
pointer to array of reconstructed tracks
The equivalent of a std::pair<TObject*,TObject*> ;-)
void TagRemovableClusters(UInt_t requestedStationMask)
class TMatrixT< Double_t > TMatrixD
static Double_t MaxChi2()
return the maximum chi2 above which the track can be considered as abnormal (due to extrapolation fai...
TObjArray * GetTrackParamAtCluster() const
Bool_t ComputeClusterWeights(TMatrixD *mcsCovariances=0)
void SetGlobalChi2(Double_t chi2)
set the minimum value of the function minimized by the fit
Double_t GetNonBendingSlope() const
return non bending slope (cm ** -1)