fNRecTracks--;
} else if (fNRecTracks > GetRecoParam()->GetMaxTrackCandidates()) {
AliError(Form("Too many track candidates (%d tracks). Stop tracking.", fNRecTracks));
- delete segments;
return kFALSE;
}
} else {
if ((fNRecTracks + segments->GetEntriesFast() - iseg - 1) > GetRecoParam()->GetMaxTrackCandidates()) {
AliError(Form("Too many track candidates (%d tracks). Stop tracking.", fNRecTracks + segments->GetEntriesFast() - iseg - 1));
- delete segments;
return kFALSE;
}
}
}
- // delete the array of segments
- delete segments;
}
// Keep all different tracks or only the best ones as required
// abort tracking if there are too many candidates
if ((fNRecTracks + segments->GetEntriesFast() - iSegment - 1) > GetRecoParam()->GetMaxTrackCandidates()) {
AliError(Form("Too many track candidates (%d tracks). Stop tracking.", fNRecTracks + segments->GetEntriesFast() - iSegment - 1));
- delete segments;
return kFALSE;
}
}
- // delete the array of segments
- delete segments;
}
}
fNRecTracks--;
} else if (fNRecTracks > GetRecoParam()->GetMaxTrackCandidates()) {
AliError(Form("Too many track candidates (%d tracks). Stop tracking.", fNRecTracks));
- delete segments;
return kFALSE;
}
} else {
if ((fNRecTracks + segments->GetEntriesFast() - iSegment - 1) > GetRecoParam()->GetMaxTrackCandidates()) {
AliError(Form("Too many track candidates (%d tracks). Stop tracking.", fNRecTracks + segments->GetEntriesFast() - iSegment - 1));
- delete segments;
return kFALSE;
}
}
}
- // delete the array of segments
- delete segments;
}
// Keep all different tracks if required
// abort tracking if there are too many candidates
if ((fNRecTracks + segments->GetEntriesFast() - iSegment - 1) > GetRecoParam()->GetMaxTrackCandidates()) {
AliError(Form("Too many track candidates (%d tracks). Stop tracking.", fNRecTracks + segments->GetEntriesFast() - iSegment - 1));
- delete segments;
return kFALSE;
}
}
- // delete the array of segments
- delete segments;
}
}
AliCodeTimerAuto(Form("%s",AliRecoParam::GetEventSpecieName(AliRecoParam::AConvert(Master()->GetEventSpecie()))),0);
// load ESD event in the interface
- AliMUONESDInterface esdInterface;
- if (GetRecoParam()) AliMUONESDInterface::ResetTracker(GetRecoParam(), kFALSE);
- else AliError("Unable to get recoParam: use default ones for residual calculation");
- esdInterface.LoadEvent(*esd);
+ if (!AliMUONESDInterface::GetTracker()) {
+ if (GetRecoParam()) AliMUONESDInterface::ResetTracker(GetRecoParam(), kFALSE);
+ else AliError("Unable to get recoParam: use default ones for residual calculation");
+ }
- FillESDsData(AliMUONQAIndices::kESDnTracks,esdInterface.GetNTracks());
- Int_t nTrackMatchTrig = 0;
+ Int_t nTrkTracks = 0, nTrackMatchTrig = 0;
// loop over tracks
Int_t nTracks = (Int_t) esd->GetNumberOfMuonTracks();
// get the ESD track and skip "ghosts"
AliESDMuonTrack* esdTrack = esd->GetMuonTrack(iTrack);
if (!esdTrack->ContainTrackerData()) continue;
+ nTrkTracks++;
// get corresponding MUON track
- AliMUONTrack* track = esdInterface.FindTrack(esdTrack->GetUniqueID());
+ AliMUONTrack track;
+ AliMUONESDInterface::ESDToMUON(*esdTrack, track);
if (esdTrack->ContainTriggerData()) nTrackMatchTrig++;
FillESDsData(AliMUONQAIndices::kESDMomentum,esdTrack->P());
FillESDsData(AliMUONQAIndices::kESDPt,esdTrack->Pt());
FillESDsData(AliMUONQAIndices::kESDRapidity,esdTrack->Y());
- FillESDsData(AliMUONQAIndices::kESDChi2,track->GetNormalizedChi2());
- FillESDsData(AliMUONQAIndices::kESDProbChi2,TMath::Prob(track->GetGlobalChi2(),track->GetNDF()));
+ FillESDsData(AliMUONQAIndices::kESDChi2,track.GetNormalizedChi2());
+ FillESDsData(AliMUONQAIndices::kESDProbChi2,TMath::Prob(track.GetGlobalChi2(),track.GetNDF()));
FillESDsData(AliMUONQAIndices::kESDThetaX,esdTrack->GetThetaXUncorrected() / TMath::Pi() * 180.);
FillESDsData(AliMUONQAIndices::kESDThetaY,esdTrack->GetThetaYUncorrected() / TMath::Pi() * 180.);
- FillESDsData(AliMUONQAIndices::kESDnClustersPerTrack,track->GetNClusters());
+ FillESDsData(AliMUONQAIndices::kESDnClustersPerTrack,track.GetNClusters());
// loop over clusters
- AliMUONTrackParam* trackParam = static_cast<AliMUONTrackParam*>(track->GetTrackParamAtCluster()->First());
+ AliMUONTrackParam* trackParam = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->First());
while (trackParam) {
AliMUONVCluster* cluster = trackParam->GetClusterPtr();
FillESDsData(AliMUONQAIndices::kESDSumLocalChi2YPerDE,deID, localChi2Y);
FillESDsData(AliMUONQAIndices::kESDSumLocalChi2PerDE,deID, localChi2);
- trackParam = static_cast<AliMUONTrackParam*>(track->GetTrackParamAtCluster()->After(trackParam));
+ trackParam = static_cast<AliMUONTrackParam*>(track.GetTrackParamAtCluster()->After(trackParam));
}
}
+ FillESDsData(AliMUONQAIndices::kESDnTracks,nTrkTracks);
FillESDsData(AliMUONQAIndices::kESDMatchTrig,nTrackMatchTrig);
//
}
TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliMUONVClusterStore& clusterStore, Int_t ch1, Int_t ch2)
{
/// To make the list of segments from the list of clusters in the 2 given chambers.
- /// Return a new TClonesArray of segments.
- /// It is the responsibility of the user to delete it afterward.
+ /// Return a TClonesArray of new segments (segments made in a previous call of this function are removed).
AliDebug(1,Form("Enter MakeSegmentsBetweenChambers (1..) %d-%d", ch1+1, ch2+1));
AliCodeTimerAuto("",0);
TIter nextInCh2(clusterStore.CreateChamberIterator(ch2,ch2));
// list of segments
- TClonesArray *segments = new TClonesArray("AliMUONObjectPair", 100);
+ static TClonesArray *segments = new TClonesArray("AliMUONObjectPair", 100);
+ segments->Clear("C");
// Loop over clusters in the first chamber of the station
while ( ( cluster1 = static_cast<AliMUONVCluster*>(nextInCh1()) ) ) {