X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=TRD%2FAliTRDonlineTrackMatching.cxx;h=fb509e84866ee3e8e5d9434b2b99a17d348e4f14;hp=66a620a911d426b5e6d1d899681b99a31e51f904;hb=23dd4d225c16bf3180714bceeec32f6c9b4a29a3;hpb=633f3ec490ffb3dc062b2c2700c1b9d987f35adc diff --git a/TRD/AliTRDonlineTrackMatching.cxx b/TRD/AliTRDonlineTrackMatching.cxx index 66a620a911d..fb509e84866 100644 --- a/TRD/AliTRDonlineTrackMatching.cxx +++ b/TRD/AliTRDonlineTrackMatching.cxx @@ -180,7 +180,7 @@ Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *trac 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 @@ -189,16 +189,17 @@ Bool_t AliTRDonlineTrackMatching::StackToTrack(const AliExternalTrackParam *trac 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.; } @@ -319,7 +320,7 @@ Bool_t AliTRDonlineTrackMatching::AcceptTrack(const AliESDtrack* esdTrack, const 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 @@ -476,6 +477,14 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) { 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; @@ -525,14 +534,20 @@ Bool_t AliTRDonlineTrackMatching::ProcessEvent(AliESDEvent *esdEvent) { } 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 @@ -631,7 +646,7 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A 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); @@ -661,7 +676,14 @@ Int_t AliTRDonlineTrackMatching::EstimateTrackDistance(AliESDtrack *esd_track, A } 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;