if (esdCascadeBach->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdCascadeBach->GetStatus());
- SetAODPID(esdCascadeBach,aodTrack,detpid,timezero);
+ SetAODPID(esdCascadeBach,aodTrack,detpid,timezero,esd->GetMagneticField());
}
else {
aodTrack = dynamic_cast<AliAODTrack*>( aodTrackRefs->At(idxBachFromCascade) );
if (esdCascadePos->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdCascadePos->GetStatus());
- SetAODPID(esdCascadePos,aodTrack,detpid,timezero);
+ SetAODPID(esdCascadePos,aodTrack,detpid,timezero,esd->GetMagneticField());
}
else {
aodTrack = dynamic_cast<AliAODTrack*>(aodTrackRefs->At(idxPosFromV0Dghter));
if (esdCascadeNeg->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdCascadeNeg->GetStatus());
- SetAODPID(esdCascadeNeg,aodTrack,detpid,timezero);
+ SetAODPID(esdCascadeNeg,aodTrack,detpid,timezero,esd->GetMagneticField());
}
else {
aodTrack = dynamic_cast<AliAODTrack*>(aodTrackRefs->At(idxNegFromV0Dghter));
esd->GetPrimaryVertex()->GetY(),
esd->GetMagneticField()) );
- esdCascade->GetBPxPyPz(momBachAtCascadeVtx[0], momBachAtCascadeVtx[1], momBachAtCascadeVtx[3]);
+ esdCascade->GetBPxPyPz(momBachAtCascadeVtx[0], momBachAtCascadeVtx[1], momBachAtCascadeVtx[2]);
aodCascade = new(cascades[jCascades++]) AliAODcascade( vCascade,
esdCascade->Charge(),
if (esdV0Pos->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdV0Pos->GetStatus());
- SetAODPID(esdV0Pos,aodTrack,detpid,timezero);
+ SetAODPID(esdV0Pos,aodTrack,detpid,timezero,esd->GetMagneticField());
}
else {
aodTrack = dynamic_cast<AliAODTrack*>(aodTrackRefs->At(posFromV0));
if (esdV0Neg->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdV0Neg->GetStatus());
- SetAODPID(esdV0Neg,aodTrack,detpid,timezero);
+ SetAODPID(esdV0Neg,aodTrack,detpid,timezero,esd->GetMagneticField());
}
else {
aodTrack = dynamic_cast<AliAODTrack*>(aodTrackRefs->At(negFromV0));
mother->ConvertAliPIDtoAODPID();
primary->AddDaughter(mother);
mother->ConvertAliPIDtoAODPID();
- SetAODPID(esdTrackM,mother,detpid,timezero);
+ SetAODPID(esdTrackM,mother,detpid,timezero,esd->GetMagneticField());
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " kink " << TMath::Abs(ikink)-1
daughter->ConvertAliPIDtoAODPID();
vkink->AddDaughter(daughter);
daughter->ConvertAliPIDtoAODPID();
- SetAODPID(esdTrackD,daughter,detpid,timezero);
+ SetAODPID(esdTrackD,daughter,detpid,timezero,esd->GetMagneticField());
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " kink " << TMath::Abs(ikink)-1
if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->SetFlags(esdTrack->GetStatus());
aodTrack->ConvertAliPIDtoAODPID();
- SetAODPID(esdTrack,aodTrack,detpid,timezero);
+ SetAODPID(esdTrack,aodTrack,detpid,timezero,esd->GetMagneticField());
} // end of loop on tracks
// Update number of AOD tracks in header at the end of track loop (M.G.)
}
-void AliAnalysisTaskESDfilter::SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid, Double_t timezero)
+void AliAnalysisTaskESDfilter::SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid, Double_t timezero, Double_t bfield)
{
//
// Setter for the raw PID detector signals
if(esdtrack->Pt()>fHighPthreshold) {
detpid = new AliAODPid();
- SetDetectorRawSignals(detpid,esdtrack,timezero);
+ SetDetectorRawSignals(detpid,esdtrack,timezero, bfield);
aodtrack->SetDetPID(detpid);
} else {
if(fPtshape){
Double_t y = fPtshape->Eval(esdtrack->Pt())/fPtshape->Eval(fHighPthreshold);
if(gRandom->Rndm(0)<1./y){
detpid = new AliAODPid();
- SetDetectorRawSignals(detpid,esdtrack,timezero);
+ SetDetectorRawSignals(detpid,esdtrack,timezero, bfield);
aodtrack->SetDetPID(detpid);
}//end rndm
}//end if p < pmin
}// end else
}
-void AliAnalysisTaskESDfilter::SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track, Double_t timezero)
+void AliAnalysisTaskESDfilter::SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track, Double_t timezero, Double_t bfield)
{
//
//assignment of the detector signals (AliXXXesdPID inspired)
aodpid->SetTOFsignal(track->GetTOFsignal()-timezero); // to be fixed
aodpid->SetHMPIDsignal(track->GetHMPIDsignal());
+ //Extrapolate track to EMCAL surface for AOD-level track-cluster matching
+ Double_t emcpos[3] = {0.,0.,0.};
+ Double_t emcmom[3] = {0.,0.,0.};
+ aodpid->SetEMCALPosition(emcpos);
+ aodpid->SetEMCALMomentum(emcmom);
+
+ AliExternalTrackParam *outerparam = (AliExternalTrackParam*)track->GetOuterParam();
+ if(!outerparam) return;
+
+ //To be replaced by call to AliEMCALGeoUtils when the class becomes available
+ Double_t radius = 441.0; //[cm] EMCAL radius +13cm
+
+ Bool_t okpos = outerparam->GetXYZAt(radius,bfield,emcpos);
+ Bool_t okmom = outerparam->GetPxPyPzAt(radius,bfield,emcmom);
+ if(!(okpos && okmom)) return;
+
+ aodpid->SetEMCALPosition(emcpos);
+ aodpid->SetEMCALMomentum(emcmom);
+
}
void AliAnalysisTaskESDfilter::Terminate(Option_t */*option*/)