From 847cbaef839dee2c01af98aa65917c1881ba9542 Mon Sep 17 00:00:00 2001 From: martinez Date: Wed, 20 Dec 2006 18:38:04 +0000 Subject: [PATCH] Minor changes to complete the modification of the standard tracking algorithm (Ph. Pillot) --- MUON/AliMUONTrack.cxx | 22 ++++++++++++++-------- MUON/AliMUONTrack.h | 1 - MUON/AliMUONTrackParam.cxx | 18 ++++++------------ MUON/AliMUONTrackParam.h | 3 ++- MUON/AliMUONTrackReconstructor.cxx | 6 +++++- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/MUON/AliMUONTrack.cxx b/MUON/AliMUONTrack.cxx index 5859b9510c6..5a140572a99 100644 --- a/MUON/AliMUONTrack.cxx +++ b/MUON/AliMUONTrack.cxx @@ -98,10 +98,7 @@ AliMUONTrack::AliMUONTrack(AliMUONHitForRec* hitForRec1, AliMUONHitForRec* hitFo AliMUONTrackParam* trackParamAtFirstHit = (AliMUONTrackParam*) fTrackParamAtHit->First(); AliMUONHitForRec* firstHit = trackParamAtFirstHit->GetHitForRecPtr(); AliMUONHitForRec* lastHit = ((AliMUONTrackParam*) fTrackParamAtHit->Last())->GetHitForRecPtr(); - // Z position - Double_t z1 = firstHit->GetZ(); - trackParamAtFirstHit->SetZ(z1); - Double_t dZ = z1 - lastHit->GetZ(); + Double_t dZ = firstHit->GetZ() - lastHit->GetZ(); // Non bending plane Double_t nonBendingCoor = firstHit->GetNonBendingCoor(); trackParamAtFirstHit->SetNonBendingCoor(nonBendingCoor); @@ -112,7 +109,7 @@ AliMUONTrack::AliMUONTrack(AliMUONHitForRec* hitForRec1, AliMUONHitForRec* hitFo Double_t bendingSlope = (bendingCoor - lastHit->GetBendingCoor()) / dZ; trackParamAtFirstHit->SetBendingSlope(bendingSlope); // Inverse bending momentum - Double_t bendingImpact = bendingCoor - z1 * bendingSlope; + Double_t bendingImpact = bendingCoor - firstHit->GetZ() * bendingSlope; Double_t inverseBendingMomentum = 1. / AliMUONTrackExtrap::GetBendingMomentumFromImpactParam(bendingImpact); trackParamAtFirstHit->SetInverseBendingMomentum(inverseBendingMomentum); @@ -265,15 +262,24 @@ AliMUONTrack & AliMUONTrack::operator=(const AliMUONTrack& theMUONTrack) //__________________________________________________________________________ void AliMUONTrack::AddTrackParamAtHit(AliMUONTrackParam *trackParam, AliMUONHitForRec *hitForRec) { - /// Add TrackParamAtHit if "trackParam" != NULL else create empty TrackParamAtHit + /// Add TrackParamAtHit if "trackParam" != NULL + /// else create empty TrackParamAtHit and set the z position to the one of "hitForRec" if any /// Update link to HitForRec if "hitForRec" != NULL if (!fTrackParamAtHit) { fTrackParamAtHit = new TClonesArray("AliMUONTrackParam",10); fNTrackHits = 0; } AliMUONTrackParam* trackParamAtHit; - if (trackParam) trackParamAtHit = new ((*fTrackParamAtHit)[fNTrackHits]) AliMUONTrackParam(*trackParam); - else trackParamAtHit = new ((*fTrackParamAtHit)[fNTrackHits]) AliMUONTrackParam(); + if (trackParam) { + trackParamAtHit = new ((*fTrackParamAtHit)[fNTrackHits]) AliMUONTrackParam(*trackParam); + if (hitForRec) { + if (hitForRec->GetZ() != trackParam->GetZ()) + AliWarning("Added track parameters at a different z position than the one of the attached hit"); + } + } else { + trackParamAtHit = new ((*fTrackParamAtHit)[fNTrackHits]) AliMUONTrackParam(); + if (hitForRec) ((AliMUONTrackParam*) fTrackParamAtHit->UncheckedAt(fNTrackHits))->SetZ(hitForRec->GetZ()); + } if (hitForRec) trackParamAtHit->SetHitForRecPtr(hitForRec); fNTrackHits++; } diff --git a/MUON/AliMUONTrack.h b/MUON/AliMUONTrack.h index 6b7dc6519f0..9056efa8bbf 100644 --- a/MUON/AliMUONTrack.h +++ b/MUON/AliMUONTrack.h @@ -39,7 +39,6 @@ class AliMUONTrack : public TObject TClonesArray* GetTrackParamAtHit(void) const {return fTrackParamAtHit;} /// reset array of track parameters at hit void ResetTrackParamAtHit(void) { fTrackParamAtHit->Delete(); } - /// add track parameters to the array of track parameters at hit void AddTrackParamAtHit(AliMUONTrackParam *trackParam, AliMUONHitForRec *hitForRec); /// return array of hitForRec at hit diff --git a/MUON/AliMUONTrackParam.cxx b/MUON/AliMUONTrackParam.cxx index cf86ff5939f..2f5b20f835a 100644 --- a/MUON/AliMUONTrackParam.cxx +++ b/MUON/AliMUONTrackParam.cxx @@ -100,8 +100,6 @@ AliMUONTrackParam& AliMUONTrackParam::operator=(const AliMUONTrackParam& theMUON AliMUONTrackParam::~AliMUONTrackParam() { /// Destructor -/// Update the number of TrackHit's connected to the attached HitForRec if any - if (fHitForRecPtr) fHitForRecPtr->SetNTrackHits(fHitForRecPtr->GetNTrackHits() - 1); // decrement NTrackHits of hit DeleteCovariances(); } @@ -126,14 +124,6 @@ AliMUONHitForRec* AliMUONTrackParam::GetHitForRecPtr(void) const return fHitForRecPtr; } - //__________________________________________________________________________ -void AliMUONTrackParam::SetHitForRecPtr(AliMUONHitForRec* hitForRec) -{ -/// set pointeur to associated HitForRec and update the number of TrackHit's connected to it - fHitForRecPtr = hitForRec; - fHitForRecPtr->SetNTrackHits(fHitForRecPtr->GetNTrackHits() + 1); // increment NTrackHits of hit -} - //_________________________________________________________________________ void AliMUONTrackParam::GetParamFrom(const AliESDMuonTrack& esdMuonTrack) { @@ -297,8 +287,12 @@ Int_t AliMUONTrackParam::Compare(const TObject* trackParam) const /// "Compare" function to sort with decreasing Z (spectro. muon Z <0). /// Returns 1 (0, -1) if Z of current TrackHit /// is smaller than (equal to, larger than) Z of TrackHit - if (fHitForRecPtr->GetZ() < ((AliMUONTrackParam*)trackParam)->fHitForRecPtr->GetZ()) return(1); - else if (fHitForRecPtr->GetZ() == ((AliMUONTrackParam*)trackParam)->fHitForRecPtr->GetZ()) return(0); + if (fHitForRecPtr) { + if (fHitForRecPtr->GetZ() != fZ) + AliWarning("track parameters are given at a different z position than the one of the corresponding hit"); + } + if (fZ < ((AliMUONTrackParam*)trackParam)->GetZ()) return(1); + else if (fZ == ((AliMUONTrackParam*)trackParam)->GetZ()) return(0); else return(-1); } diff --git a/MUON/AliMUONTrackParam.h b/MUON/AliMUONTrackParam.h index 9b8ad7a008b..bbf082efdf1 100644 --- a/MUON/AliMUONTrackParam.h +++ b/MUON/AliMUONTrackParam.h @@ -61,7 +61,8 @@ class AliMUONTrackParam : public TObject void SetTrackParam(AliMUONTrackParam& theMUONTrackParam); AliMUONHitForRec* GetHitForRecPtr(void) const; - void SetHitForRecPtr(AliMUONHitForRec* hitForRec); + /// set pointeur to associated HitForRec + void SetHitForRecPtr(AliMUONHitForRec* hitForRec) {fHitForRecPtr = hitForRec;} Double_t Px() const; // return px Double_t Py() const; // return py diff --git a/MUON/AliMUONTrackReconstructor.cxx b/MUON/AliMUONTrackReconstructor.cxx index e56892d7da0..4d1ae1125fd 100644 --- a/MUON/AliMUONTrackReconstructor.cxx +++ b/MUON/AliMUONTrackReconstructor.cxx @@ -415,6 +415,8 @@ void AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack* trackCandidat AliMUONTrack *newTrack = 0x0; AliMUONHitForRec *hitForRecCh1, *hitForRecCh2; AliMUONHitForRec *bestHitForRec1 = 0x0, *bestHitForRec2 = 0x0; + Bool_t *hitForRecCh1Used = new Bool_t[fNHitsForRecPerChamber[ch1]]; + for (Int_t hit1 = 0; hit1 < fNHitsForRecPerChamber[ch1]; hit1++) hitForRecCh1Used[hit1] = kFALSE; // //Extrapolate trackCandidate to chamber "ch2" to save computing time in the next steps AliMUONTrackParam *extrapTrackParamPtr = trackCandidate->GetExtrapTrackParam(); @@ -467,6 +469,8 @@ void AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack* trackCandidat // Update the chi2 of the new track if (newTrack->GetFitFMin()<0) newTrack->SetFitFMin(chi2WithTwoHitForRec); else newTrack->SetFitFMin(newTrack->GetFitFMin() + chi2WithTwoHitForRec); + // Tag hitForRecCh1 as used + hitForRecCh1Used[hit1] = kTRUE; // Printout for debuging if ((AliLog::GetDebugLevel("MUON","AliMUONTrackReconstructor") >= 1) || (AliLog::GetGlobalDebugLevel() >= 1)) { cout << "FollowTrackInStation: added two hits in station(1..): " << nextStation+1 @@ -521,7 +525,7 @@ void AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack* trackCandidat } for (Int_t hit1 = 0; hit1 < fNHitsForRecPerChamber[ch1]; hit1++) { hitForRecCh1 = (AliMUONHitForRec*) fHitsForRecPtr->UncheckedAt(fIndexOfFirstHitForRecPerChamber[ch1]+hit1); - if (hitForRecCh1->GetNTrackHits() >= 1) continue; // Skip hitForRec already used + if (hitForRecCh1Used[hit1]) continue; // Skip hitForRec already used chi2WithOneHitForRec = trackCandidate->TryOneHitForRec(hitForRecCh1); // if good chi2 then create a new track by adding the good hitForRec in "ch1" to the "trackCandidate" // We do not try to attach a hitForRec in the other chamber too since it has already been done above -- 2.39.3