Bool_t AliTRDonlineTrackMatching::fEsdTrackCutPrim = kFALSE;
AliTRDonlineTrackMatching::AliTRDonlineTrackMatching() :
+ TObject(),
fTRDgeo(NULL),
fMinMatchRating(0.25),
fHistMatchRating(NULL)
}
AliTRDonlineTrackMatching::AliTRDonlineTrackMatching(const AliTRDonlineTrackMatching &c) :
+ TObject(c),
fTRDgeo(c.fTRDgeo),
fMinMatchRating(c.fMinMatchRating),
fHistMatchRating(c.fHistMatchRating)
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.;
}
// returns result ESD track cuts
- UInt_t status = (esdTrack) ? esdTrack->GetStatus() : 0;
+ if (!esdTrack)
+ return kFALSE;
+
+ UInt_t status = esdTrack->GetStatus();
if (fEsdTrackCutMinimal){
return ((status & AliESDtrack::kTPCout) > 0);
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
return kTRUE;
if (!AliGeomManager::GetGeometry()){
- printf("Geometry not available! Aborting TRD track matching.\n");
+ AliError("Geometry not available! Skipping TRD track matching.");
return kFALSE;
}
esdTrack = esdEvent->GetTrack(iEsdTrack);
if (!esdTrack){
- printf("#TRACKMATCHING - invalid ESD track!\n");
+ AliError("invalid ESD track!");
continue;
}
break;
if (stacksForReg[iReg] >= 90){
- printf("#TRACKMATCHING - invalid stack for registration: %i\n", stacksForReg[iReg]);
+ AliError(Form("invalid stack for registration: %i", stacksForReg[iReg]));
continue;
}
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
// transform to global coordinates
TGeoHMatrix *matrix = fTRDgeo->GetClusterMatrix(trklDet);
if (!matrix){
- printf("ERROR - invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet);
+ if ((stack_gtu != 13*5+2) && (stack_gtu != 14*5+2) && (stack_gtu != 15*5+2))
+ AliDebug(1, Form("invalid TRD cluster matrix in EstimateTrackDistance for detector %i", trklDet));
return -5;
}
matrix->LocalToMaster(xtrkl, ptrkl);
Double_t n_len = TMath::Sqrt(n0[0]*n0[0] + n0[1]*n0[1] + n0[2]*n0[2]);
if (n_len == 0.){ // This should never happen
- printf("<ERROR> divison by zero in estimate_track_distance!");
+ AliError("divison by zero in estimate_track_distance!");
n_len = 1.;
}
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;
fEsdTrackCutMaxDCAtoVertexZ = 1000.;
fEsdTrackCutsITSlayerMask = 0x0;
} else
- printf("ERROR: invalid cut set");
+ AliErrorClass("invalid cut set");
+
}