layersWithTracklet = 0;
UInt_t stackHits[fgkTrdStacks];
- Double_t x[3];
+ Double_t x[3] = { 0. };
memset(stackHits, 0, fgkTrdStacks*sizeof(UInt_t));
#ifdef TRD_TM_DEBUG
Double_t r = fgkSaveInnerRadius;
while (r < fgkSaveOuterRadius){
- track->GetXYZAt(r, magFieldinKiloGauss, x);
- stack = EstimateStack(x);
- if (stack >= 0){
- stackHits[stack]++;
- if (stackHits[stack] > 16) // experimental
- break;
+ if (track->GetXYZAt(r, magFieldinKiloGauss, x)) {
+ stack = EstimateStack(x);
+ if (stack >= 0){
+ stackHits[stack]++;
+ if (stackHits[stack] > 16) // experimental
+ break;
#ifdef TRD_TM_DEBUG
- printf(" r=%.3fcm %.2f/%.2f - %d hits for stack %d S%02d-%d (mag=%.1f)\n",
- r, x[0], x[1], stackHits[stack], stack, stack/5, stack%5, magFieldinKiloGauss);
+ printf(" r=%.3fcm %.2f/%.2f - %d hits for stack %d S%02d-%d (mag=%.1f)\n",
+ r, x[0], x[1], stackHits[stack], stack, stack/5, stack%5, magFieldinKiloGauss);
#endif
+ }
}
r += 1.;
}
return kTRUE;
}
-Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) {
+Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent, Bool_t updateRef, Int_t label) {
// performs track matching for all TRD online tracks of the ESD event
for (UInt_t iTrdTrack = 0; iTrdTrack < numTrdTracks; ++iTrdTrack){
trdTrack = esdEvent->GetTrdTrack(iTrdTrack);
+ if ((label != -1) &&
+ (trdTrack->GetLabel() != label))
+ continue;
+
+ if ((trdTrack->GetSector() < 0) || (trdTrack->GetSector() > 17) ||
+ (trdTrack->GetStack() < 0) || (trdTrack->GetStack() > 4))
+ continue;
+
stack = TrdSecSiLsi(trdTrack->GetSector(), trdTrack->GetStack());
trdPt = (esdEvent->GetMagneticField() > 0.) ? (-1.*trdTrack->Pt()) : trdTrack->Pt();
matchTrack = NULL;
}
if ((matchTrack) && (matchRating >= fMinMatchRating)){
+ AliDebug(1, Form("S%02d-%d trd %d - esd %d match! pt: %.2f %.2f",
+ trdTrack->GetSector(), trdTrack->GetStack(), iTrdTrack, matchEsdTrackIndexInStack,
+ trdPt, matchTrack->GetSignedPt()));
#ifdef TRD_TM_DEBUG
printf("#TRACKMATCHING S%02d-%d trd %d - esd %d match! pt: %.2f %.2f\n",
trdTrack->GetSector(), trdTrack->GetStack(), iTrdTrack, matchEsdTrackIndexInStack,
trdPt, matchTrack->GetSignedPt());
#endif
- trdTrack->SetTrackMatchReference(matchTrack);
- } else
- trdTrack->SetTrackMatchReference(NULL);
+ if (updateRef)
+ trdTrack->SetTrackMatchReference(matchTrack);
+ } else {
+ if (updateRef)
+ trdTrack->SetTrackMatchReference(NULL);
+ }
} // loop over TRD online tracks
TGeoHMatrix *matrix = fTRDgeo->GetClusterMatrix(trklDet);
if (!matrix){
if ((stack_gtu != 13*5+2) && (stack_gtu != 14*5+2) && (stack_gtu != 15*5+2))
- AliError(Form("invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet));
+ AliDebug(1, Form("invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet));
return -5;
}
matrix->LocalToMaster(xtrkl, ptrkl);
}
Double_t n[3] = {n0[0]/n_len, n0[1]/n_len, n0[2]/n_len}; // normal vector of plane
- AliExternalTrackParam *outerTPC = new AliExternalTrackParam(*(esd_track->GetOuterParam()));
+ const AliExternalTrackParam *trackParam = esd_track->GetOuterParam();
+ if (!trackParam) {
+ trackParam = esd_track->GetInnerParam();
+ if (!trackParam)
+ trackParam = esd_track;
+ }
+
+ AliExternalTrackParam *outerTPC = new AliExternalTrackParam(*trackParam);
Bool_t isects = TrackPlaneIntersect(outerTPC, layer_ref_global2, n, mag); // find intersection point between track and TRD layer
delete outerTPC;
outerTPC = NULL;