-/// Re-calculate hits parameters because two AliTrackReferences are recorded for
-/// each chamber (one when particle is entering + one when particle is leaving
-/// the sensitive volume)
-
- Float_t maxGasGap = 1.; // cm
- AliMUONTrack *track, *trackNew;
- AliMUONHitForRec *hitForRec, *hitForRec1, *hitForRec2;
- AliMUONTrackParam *trackParam, *trackParam1, *trackParam2, *trackParamAtVertex;
- TClonesArray * hitForRecAtHit = 0;
- TClonesArray * trackParamAtHit = 0;
- Float_t xRec,yRec,zRec;
- Float_t xRec1,yRec1,zRec1;
- Float_t xRec2,yRec2,zRec2;
- Float_t bendingSlope,nonBendingSlope,bendingMomentum;
- Float_t bendingSlope1,nonBendingSlope1,bendingMomentum1;
- Float_t bendingSlope2,nonBendingSlope2,bendingMomentum2;
- TClonesArray *newMuonTrackRef = new TClonesArray("AliMUONTrack", 10);
- Int_t iHit1;
- Int_t iChamber = 0, detElemId = 0;
- Int_t nRec = 0;
- Int_t nTrackHits = 0;
-
- hitForRec = new AliMUONHitForRec();
- trackParam = new AliMUONTrackParam();
-
- Int_t nTrackRef = fMuonTrackRef->GetEntriesFast();
- for (Int_t index = 0; index < nTrackRef; index++) {
- track = (AliMUONTrack*)fMuonTrackRef->At(index);
- hitForRecAtHit = track->GetHitForRecAtHit();
- trackParamAtHit = track->GetTrackParamAtHit();
- trackParamAtVertex = track->GetTrackParamAtVertex();
- nTrackHits = hitForRecAtHit->GetEntriesFast();
- trackNew = new AliMUONTrack();
- iHit1 = 0;
- while (iHit1 < nTrackHits) {
- hitForRec1 = (AliMUONHitForRec*) hitForRecAtHit->At(iHit1);
- trackParam1 = (AliMUONTrackParam*) trackParamAtHit->At(iHit1);
- xRec1 = hitForRec1->GetNonBendingCoor();
- yRec1 = hitForRec1->GetBendingCoor();
- zRec1 = hitForRec1->GetZ();
- xRec = xRec1;
- yRec = yRec1;
- zRec = zRec1;
- bendingSlope1 = trackParam1->GetBendingSlope();
- nonBendingSlope1 = trackParam1->GetNonBendingSlope();
- bendingMomentum1 = 0;
- if (TMath::Abs(trackParam1->GetInverseBendingMomentum()) > 0)
- bendingMomentum1 = 1./trackParam1->GetInverseBendingMomentum();
- bendingSlope = bendingSlope1;
- nonBendingSlope = nonBendingSlope1;
- bendingMomentum = bendingMomentum1;
- nRec = 1;
- for (Int_t iHit2 = iHit1+1; iHit2 < nTrackHits; iHit2++) {
- hitForRec2 = (AliMUONHitForRec*) hitForRecAtHit->At(iHit2);
- trackParam2 = (AliMUONTrackParam*) trackParamAtHit->At(iHit2);
- xRec2 = hitForRec2->GetNonBendingCoor();
- yRec2 = hitForRec2->GetBendingCoor();
- zRec2 = hitForRec2->GetZ();
- bendingSlope2 = trackParam2->GetBendingSlope();
- nonBendingSlope2 = trackParam2->GetNonBendingSlope();
- bendingMomentum2 = 0;
- if (TMath::Abs(trackParam2->GetInverseBendingMomentum()) > 0)
- bendingMomentum2 = 1./trackParam2->GetInverseBendingMomentum();
-
- if ( TMath::Abs(zRec2-zRec1) < maxGasGap ) {
-
- nRec++;
- xRec += xRec2;
- yRec += yRec2;
- zRec += zRec2;
- bendingSlope += bendingSlope2;
- nonBendingSlope += nonBendingSlope2;
- bendingMomentum += bendingMomentum2;
- iHit1 = iHit2;
- }
-
- } // end iHit2
- xRec /= (Float_t)nRec;
- yRec /= (Float_t)nRec;
- zRec /= (Float_t)nRec;
- bendingSlope /= (Float_t)nRec;
- nonBendingSlope /= (Float_t)nRec;
- bendingMomentum /= (Float_t)nRec;
-
- hitForRec->SetNonBendingCoor(xRec);
- hitForRec->SetBendingCoor(yRec);
- hitForRec->SetZ(zRec);
- detElemId = hitForRec->GetDetElemId();
- if (detElemId) iChamber = detElemId / 100 - 1;
- else iChamber = AliMUONConstants::ChamberNumber(zRec);
- hitForRec->SetChamberNumber(iChamber);
- hitForRec->SetBendingReso2(0.0);
- hitForRec->SetNonBendingReso2(0.0);
- trackParam->SetNonBendingCoor(xRec);
- trackParam->SetBendingCoor(yRec);
- trackParam->SetZ(zRec);
- trackParam->SetNonBendingSlope(nonBendingSlope);
- trackParam->SetBendingSlope(bendingSlope);
- if (TMath::Abs(bendingMomentum) > 0)
- trackParam->SetInverseBendingMomentum(1./bendingMomentum);
-
- trackNew->AddHitForRecAtHit(hitForRec);
- trackNew->AddTrackParamAtHit(trackParam,0);
-
- iHit1++;
- } // end iHit1