Minor changes to complete the modification of the standard tracking algorithm (Ph...
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 20 Dec 2006 18:38:04 +0000 (18:38 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 20 Dec 2006 18:38:04 +0000 (18:38 +0000)
MUON/AliMUONTrack.cxx
MUON/AliMUONTrack.h
MUON/AliMUONTrackParam.cxx
MUON/AliMUONTrackParam.h
MUON/AliMUONTrackReconstructor.cxx

index 5859b95..5a14057 100644 (file)
@@ -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++;
 }
index 6b7dc65..9056efa 100644 (file)
@@ -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
index cf86ff5..2f5b20f 100644 (file)
@@ -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);
 }
 
index 9b8ad7a..bbf082e 100644 (file)
@@ -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
index e56892d..4d1ae11 100644 (file)
@@ -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