X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=ANALYSIS%2FAliAnalysisTaskESDfilter.cxx;h=dd1e8bc23646f6437484fcec68729f7e310f626c;hp=20515a1c5e024bddb198d0dbf7dfede6c8032c4c;hb=59076376e8d9bc1f325dd60b5517d063a6a2347a;hpb=ef7661fd4220e72250bc0563b2d23f954019a9a1 diff --git a/ANALYSIS/AliAnalysisTaskESDfilter.cxx b/ANALYSIS/AliAnalysisTaskESDfilter.cxx index 20515a1c5e0..dd1e8bc2364 100644 --- a/ANALYSIS/AliAnalysisTaskESDfilter.cxx +++ b/ANALYSIS/AliAnalysisTaskESDfilter.cxx @@ -60,6 +60,11 @@ #include "TVector3.h" #include "AliTPCdEdxInfo.h" +#include "AliESDTrdTrack.h" +#include "AliESDTrdTracklet.h" +#include "AliAODTrdTrack.h" +#include "AliAODTrdTracklet.h" + using std::cout; using std::endl; ClassImp(AliAnalysisTaskESDfilter) @@ -76,6 +81,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(): fPtshape(0x0), fEnableFillAOD(kTRUE), fUsedTrack(0x0), + fUsedTrackCopy(0x0), fUsedKink(0x0), fUsedV0(0x0), fAODTrackRefs(0x0), @@ -112,6 +118,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(): fAreEMCALTriggerEnabled(kTRUE), fArePHOSTriggerEnabled(kTRUE), fAreTrackletsEnabled(kTRUE), + fIsTRDEnabled(kTRUE), fESDpid(0x0), fIsPidOwner(kFALSE), fTPCaloneTrackCuts(0), @@ -148,6 +155,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name): fPtshape(0x0), fEnableFillAOD(kTRUE), fUsedTrack(0x0), + fUsedTrackCopy(0x0), fUsedKink(0x0), fUsedV0(0x0), fAODTrackRefs(0x0), @@ -184,6 +192,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name): fAreEMCALTriggerEnabled(kTRUE), fArePHOSTriggerEnabled(kTRUE), fAreTrackletsEnabled(kTRUE), + fIsTRDEnabled(kTRUE), fESDpid(0x0), fIsPidOwner(kFALSE), fTPCaloneTrackCuts(0), @@ -464,7 +473,7 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) Double_t momNeg[3] = { 0. }; Double_t momPosAtV0vtx[3]={0.}; Double_t momNegAtV0vtx[3]={0.}; - + Int_t tofLabel[3] = {0}; TClonesArray& verticesArray = Vertices(); TClonesArray& tracksArray = Tracks(); TClonesArray& cascadesArray = Cascades(); @@ -571,7 +580,8 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) esdCascadeBach->GetXYZ(pos); esdCascadeBach->GetCovarianceXYZPxPyPz(covTr); esdCascadeBach->GetESDpid(pid); - + esdCascadeBach->GetTOFLabel(tofLabel); + fUsedTrack[idxBachFromCascade] = kTRUE; UInt_t selectInfo = 0; if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdCascadeBach); @@ -598,12 +608,13 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) aodTrack->SetTPCPointsF(esdCascadeBach->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdCascadeBach->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdCascadeBach->GetIntegratedLength()); + aodTrack->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(aodTrack,idxBachFromCascade); if (esdCascadeBach->GetSign() > 0) ++fNumberOfPositiveTracks; aodTrack->ConvertAliPIDtoAODPID(); aodTrack->SetFlags(esdCascadeBach->GetStatus()); - SetAODPID(esdCascadeBach,aodTrack,detpid); + SetAODPID(esdCascadeBach,aodTrack,detpid); } else { aodTrack = static_cast( fAODTrackRefs->At(idxBachFromCascade) ); @@ -654,7 +665,7 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) esdCascadePos->GetXYZ(pos); esdCascadePos->GetCovarianceXYZPxPyPz(covTr); esdCascadePos->GetESDpid(pid); - + esdCascadePos->GetTOFLabel(tofLabel); if (!fUsedTrack[idxPosFromV0Dghter]) { fUsedTrack[idxPosFromV0Dghter] = kTRUE; @@ -685,6 +696,7 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) aodTrack->SetTPCPointsF(esdCascadePos->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdCascadePos->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdCascadePos->GetIntegratedLength()); + aodTrack->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(aodTrack,idxPosFromV0Dghter); if (esdCascadePos->GetSign() > 0) ++fNumberOfPositiveTracks; @@ -704,6 +716,7 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) esdCascadeNeg->GetXYZ(pos); esdCascadeNeg->GetCovarianceXYZPxPyPz(covTr); esdCascadeNeg->GetESDpid(pid); + esdCascadeNeg->GetTOFLabel(tofLabel); if (!fUsedTrack[idxNegFromV0Dghter]) { @@ -734,6 +747,7 @@ void AliAnalysisTaskESDfilter::ConvertCascades(const AliESDEvent& esd) aodTrack->SetTPCPointsF(esdCascadeNeg->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdCascadeNeg->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdCascadeNeg->GetIntegratedLength()); + aodTrack->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(aodTrack,idxNegFromV0Dghter); if (esdCascadeNeg->GetSign() > 0) ++fNumberOfPositiveTracks; @@ -886,7 +900,7 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd) Double_t momNeg[3]={0.}; Double_t momPosAtV0vtx[3]={0.}; Double_t momNegAtV0vtx[3]={0.}; - + Int_t tofLabel[3] = {0}; for (Int_t nV0 = 0; nV0 < esd.GetNumberOfV0s(); ++nV0) { if (fUsedV0[nV0]) continue; // skip if already added to the AOD @@ -949,6 +963,7 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd) esdV0Pos->GetXYZ(pos); esdV0Pos->GetCovarianceXYZPxPyPz(covTr); esdV0Pos->GetESDpid(pid); + esdV0Pos->GetTOFLabel(tofLabel); const AliESDVertex *vtx = esd.GetPrimaryVertex(); @@ -979,12 +994,13 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd) aodTrack->SetTPCPointsF(esdV0Pos->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdV0Pos->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdV0Pos->GetIntegratedLength()); + aodTrack->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(aodTrack,posFromV0); // if (fDebug > 0) printf("-------------------Bo: pos track from original pt %.3f \n",aodTrack->Pt()); if (esdV0Pos->GetSign() > 0) ++fNumberOfPositiveTracks; aodTrack->ConvertAliPIDtoAODPID(); aodTrack->SetFlags(esdV0Pos->GetStatus()); - SetAODPID(esdV0Pos,aodTrack,detpid); + SetAODPID(esdV0Pos,aodTrack,detpid); } else { aodTrack = static_cast(fAODTrackRefs->At(posFromV0)); @@ -998,6 +1014,7 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd) esdV0Neg->GetXYZ(pos); esdV0Neg->GetCovarianceXYZPxPyPz(covTr); esdV0Neg->GetESDpid(pid); + esdV0Neg->GetTOFLabel(tofLabel); if (!fUsedTrack[negFromV0]) { fUsedTrack[negFromV0] = kTRUE; @@ -1026,12 +1043,13 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd) aodTrack->SetTPCPointsF(esdV0Neg->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdV0Neg->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdV0Neg->GetIntegratedLength()); + aodTrack->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(aodTrack,negFromV0); // if (fDebug > 0) printf("-------------------Bo: neg track from original pt %.3f \n",aodTrack->Pt()); if (esdV0Neg->GetSign() > 0) ++fNumberOfPositiveTracks; aodTrack->ConvertAliPIDtoAODPID(); aodTrack->SetFlags(esdV0Neg->GetStatus()); - SetAODPID(esdV0Neg,aodTrack,detpid); + SetAODPID(esdV0Neg,aodTrack,detpid); } else { aodTrack = static_cast(fAODTrackRefs->At(negFromV0)); @@ -1124,7 +1142,7 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd) Double_t rDCA[3] = { 0. }; // position at DCA Float_t dDCA[2] = {0.}; // DCA to the vertex d and z Float_t cDCA[3] = {0.}; // covariance of impact parameters - + Int_t tofLabel[3] = {0}; AliAODTrack* aodTrack(0x0); // AliAODPid* detpid(0x0); @@ -1203,8 +1221,9 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd) track->GetXYZ(pos); track->GetCovarianceXYZPxPyPz(covTr); esdTrack->GetESDpid(pid);// original PID - + esdTrack->GetTOFLabel(tofLabel); if(fMChandler)fMChandler->SelectParticle(esdTrack->GetLabel()); + fUsedTrackCopy[nTrack] |= selectInfo; aodTrack = new(Tracks()[fNumberOfTracks++]) AliAODTrack((track->GetID()+1)*-1, track->GetLabel(), p, @@ -1235,7 +1254,7 @@ void AliAnalysisTaskESDfilter::ConvertTPCOnlyTracks(const AliESDEvent& esd) aodTrack->SetTPCPointsF(track->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(track->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(track->GetIntegratedLength()); - + aodTrack->SetTOFLabel(tofLabel); //Perform progagation of tracks if needed if(fDoPropagateTrackToEMCal) PropagateTrackToEMCal(esdTrack); aodTrack->SetTrackPhiEtaPtOnEMCal(esdTrack->GetTrackPhiOnEMCal(),esdTrack->GetTrackEtaOnEMCal(),esdTrack->GetTrackPtOnEMCal()); @@ -1290,6 +1309,7 @@ void AliAnalysisTaskESDfilter::ConvertGlobalConstrainedTracks(const AliESDEvent& Double_t rDCA[3] = { 0. }; // position at DCA Float_t dDCA[2] = {0.}; // DCA to the vertex d and z Float_t cDCA[3] = {0.}; // covariance of impact parameters + Int_t tofLabel[3] = {0}; AliAODTrack* aodTrack(0x0); @@ -1350,7 +1370,9 @@ void AliAnalysisTaskESDfilter::ConvertGlobalConstrainedTracks(const AliESDEvent& esdTrack->GetConstrainedXYZ(pos); exParamGC->GetCovarianceXYZPxPyPz(covTr); esdTrack->GetESDpid(pid); + esdTrack->GetTOFLabel(tofLabel); if(fMChandler)fMChandler->SelectParticle(esdTrack->GetLabel()); + fUsedTrackCopy[nTrack] |= selectInfo; aodTrack = new(Tracks()[fNumberOfTracks++]) AliAODTrack((esdTrack->GetID()+1)*-1, esdTrack->GetLabel(), p, @@ -1372,7 +1394,7 @@ void AliAnalysisTaskESDfilter::ConvertGlobalConstrainedTracks(const AliESDEvent& aodTrack->SetTPCClusterMap(esdTrack->GetTPCClusterMap()); aodTrack->SetTPCSharedMap (esdTrack->GetTPCSharedMap()); aodTrack->SetChi2perNDF(Chi2perNDF(esdTrack)); - + // set the DCA values to the AOD track aodTrack->SetPxPyPzAtDCA(pDCA[0],pDCA[1],pDCA[2]); @@ -1383,7 +1405,7 @@ void AliAnalysisTaskESDfilter::ConvertGlobalConstrainedTracks(const AliESDEvent& aodTrack->SetTPCPointsF(esdTrack->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdTrack->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdTrack->GetIntegratedLength()); - + aodTrack->SetTOFLabel(tofLabel); if(isHybridGC){ // only copy AOD information for hybrid, no duplicate information aodTrack->ConvertAliPIDtoAODPID(); @@ -1412,6 +1434,7 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd) Double_t pos[3] = { 0. }; Double_t covTr[21] = { 0. }; Double_t pid[10] = { 0. }; + Int_t tofLabel[3] = {0}; AliAODTrack* aodTrack(0x0); AliAODPid* detpid(0x0); @@ -1433,7 +1456,9 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd) esdTrack->GetXYZ(pos); esdTrack->GetCovarianceXYZPxPyPz(covTr); esdTrack->GetESDpid(pid); + esdTrack->GetTOFLabel(tofLabel); if(fMChandler)fMChandler->SelectParticle(esdTrack->GetLabel()); + fUsedTrack[nTrack] = kTRUE; fPrimaryVertex->AddDaughter(aodTrack = new(Tracks()[fNumberOfTracks++]) AliAODTrack(esdTrack->GetID(), esdTrack->GetLabel(), @@ -1458,6 +1483,7 @@ void AliAnalysisTaskESDfilter::ConvertTracks(const AliESDEvent& esd) aodTrack->SetTPCPointsF(esdTrack->GetTPCNclsF()); aodTrack->SetTPCNCrossedRows(UShort_t(esdTrack->GetTPCCrossedRows())); aodTrack->SetIntegratedLength(esdTrack->GetIntegratedLength()); + aodTrack->SetTOFLabel(tofLabel); if(esdTrack->IsEMCAL()) aodTrack->SetEMCALcluster(esdTrack->GetEMCALcluster()); if(esdTrack->IsPHOS()) aodTrack->SetPHOScluster(esdTrack->GetPHOScluster()); @@ -1748,6 +1774,7 @@ void AliAnalysisTaskESDfilter::ConvertKinks(const AliESDEvent& esd) Double_t covTr[21]={0.}; Double_t pid[10]={0.}; AliAODPid* detpid(0x0); + Int_t tofLabel[3] = {0}; fNumberOfKinks = esd.GetNumberOfKinks(); @@ -1816,6 +1843,7 @@ void AliAnalysisTaskESDfilter::ConvertKinks(const AliESDEvent& esd) esdTrackM->GetXYZ(pos); esdTrackM->GetCovarianceXYZPxPyPz(covTr); esdTrackM->GetESDpid(pid); + esdTrackM->GetTOFLabel(tofLabel); if(fMChandler)fMChandler->SelectParticle(esdTrackM->GetLabel()); mother = new(Tracks()[fNumberOfTracks++]) AliAODTrack(esdTrackM->GetID(), @@ -1840,7 +1868,7 @@ void AliAnalysisTaskESDfilter::ConvertKinks(const AliESDEvent& esd) mother->SetTPCPointsF(esdTrackM->GetTPCNclsF()); mother->SetTPCNCrossedRows(UShort_t(esdTrackM->GetTPCCrossedRows())); mother->SetIntegratedLength(esdTrackM->GetIntegratedLength()); - + mother->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(mother, imother); if (esdTrackM->GetSign() > 0) ++fNumberOfPositiveTracks; @@ -1881,6 +1909,7 @@ void AliAnalysisTaskESDfilter::ConvertKinks(const AliESDEvent& esd) esdTrackD->GetXYZ(pos); esdTrackD->GetCovarianceXYZPxPyPz(covTr); esdTrackD->GetESDpid(pid); + esdTrackD->GetTOFLabel(tofLabel); selectInfo = 0; if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdTrackD); if(fMChandler)fMChandler->SelectParticle(esdTrackD->GetLabel()); @@ -1906,6 +1935,7 @@ void AliAnalysisTaskESDfilter::ConvertKinks(const AliESDEvent& esd) daughter->SetTPCPointsF(esdTrackD->GetTPCNclsF()); daughter->SetTPCNCrossedRows(UShort_t(esdTrackD->GetTPCCrossedRows())); daughter->SetIntegratedLength(esdTrackD->GetIntegratedLength()); + daughter->SetTOFLabel(tofLabel); fAODTrackRefs->AddAt(daughter, idaughter); if (esdTrackD->GetSign() > 0) ++fNumberOfPositiveTracks; @@ -2168,6 +2198,105 @@ Int_t AliAnalysisTaskESDfilter::ConvertHMPID(const AliESDEvent& esd) // clm return cntHmpidGoodTracks; } +void AliAnalysisTaskESDfilter::ConvertTRD(const AliESDEvent& esd) +{ + // fill TRD on-line tracks with assiocated tracklets + // as used for the TRD level-1 triggers + + const Int_t nTrdTracks = esd.GetNumberOfTrdTracks(); + const Int_t nLayers = 6; + + for (Int_t iTrdTrack = 0; iTrdTrack < nTrdTracks; ++iTrdTrack) { + // copy information from ESD track to AOD track + const AliESDTrdTrack *esdTrdTrk = esd.GetTrdTrack(iTrdTrack); + AliAODTrdTrack &aodTrdTrk = AODEvent()->AddTrdTrack(esdTrdTrk); + + // copy the contributing tracklets + for (Int_t iTracklet = 0; iTracklet < nLayers; ++iTracklet) { + if (const AliESDTrdTracklet *esdTrdTrkl = esdTrdTrk->GetTracklet(iTracklet)) + aodTrdTrk.AddTracklet(*esdTrdTrkl, iTracklet); + } + + // add the reference to the matched global track + AliAODTrack *aodTrkMatch = 0x0; + AliESDtrack *esdTrkMatch = (AliESDtrack*) esdTrdTrk->GetTrackMatch(); + if (esdTrkMatch) { + Int_t idx = esdTrkMatch->GetID(); + + if (idx < 0) + AliError("track has a matched track that was not found"); + else if (esdTrkMatch != esd.GetTrack(idx)) + AliError("wrong track found for ESD track index"); + else { + UInt_t selectInfo = fTrackFilter ? fTrackFilter->IsSelected(esdTrkMatch) : 0; + + if (fUsedTrack[idx]) { + aodTrkMatch = (AliAODTrack*) (*fAODTrackRefs)[idx]; + AliDebug(2, Form("event %lld: existing track (idx %i, pt = %f) matched to TRD track (idx %i, pt = %f), cut flags: 0x%08x", + Entry(), idx, esdTrkMatch->Pt(), iTrdTrack, esdTrdTrk->Pt(), + selectInfo)); + } + else { + if (selectInfo & fUsedTrackCopy[idx]) { + // mask filter bits already used in track copies + selectInfo &= ~fUsedTrackCopy[idx]; + AliWarning(Form("event %lld: copied track (idx %i, pt = %f) matched to TRD track (idx %i, pt = %f), cut flags: 0x%08x -> 0x%08x", + Entry(), idx, esdTrkMatch->Pt(), iTrdTrack, esdTrdTrk->Pt(), + fTrackFilter->IsSelected(esdTrkMatch), selectInfo)); + } + AliDebug(2, Form("event %lld: unused track (idx %i, pt = %f) matched to TRD track (idx %i, pt = %f), cut flags: 0x%08x -> 0x%08x", + Entry(), idx, esdTrkMatch->Pt(), iTrdTrack, esdTrdTrk->Pt(), + fTrackFilter->IsSelected(esdTrkMatch), selectInfo)); + + Double_t mom[3]={0.}; + Double_t pos[3]={0.}; + Double_t covTr[21]={0.}; + Double_t pid[10]={0.}; + + esdTrkMatch->GetPxPyPz(mom); + esdTrkMatch->GetXYZ(pos); + esdTrkMatch->GetCovarianceXYZPxPyPz(covTr); + esdTrkMatch->GetESDpid(pid); + const AliESDVertex* vtx = esd.GetPrimaryVertex(); + + fUsedTrack[idx] = kTRUE; + if(fMChandler) fMChandler->SelectParticle(esdTrkMatch->GetLabel()); + + aodTrkMatch = new(Tracks()[fNumberOfTracks++]) + AliAODTrack(esdTrkMatch->GetID(), + esdTrkMatch->GetLabel(), + mom, + kTRUE, + pos, + kFALSE, + covTr, + (Short_t)esdTrkMatch->GetSign(), + esdTrkMatch->GetITSClusterMap(), + pid, + fPrimaryVertex, + kTRUE, + vtx->UsesTrack(esdTrkMatch->GetID()), + AliAODTrack::kUndef, + selectInfo); + + aodTrkMatch->SetTPCFitMap(esdTrkMatch->GetTPCFitMap()); + aodTrkMatch->SetTPCClusterMap(esdTrkMatch->GetTPCClusterMap()); + aodTrkMatch->SetTPCSharedMap (esdTrkMatch->GetTPCSharedMap()); + aodTrkMatch->SetChi2perNDF(Chi2perNDF(esdTrkMatch)); + aodTrkMatch->SetTPCPointsF(esdTrkMatch->GetTPCNclsF()); + aodTrkMatch->SetTPCNCrossedRows(UShort_t(esdTrkMatch->GetTPCCrossedRows())); + aodTrkMatch->SetIntegratedLength(esdTrkMatch->GetIntegratedLength()); + fAODTrackRefs->AddAt(aodTrkMatch,idx); + if (esdTrkMatch->GetSign() > 0) ++fNumberOfPositiveTracks; + aodTrkMatch->ConvertAliPIDtoAODPID(); + aodTrkMatch->SetFlags(esdTrkMatch->GetStatus()); + } + } + } + aodTrdTrk.SetTrackMatchReference(aodTrkMatch); + } +} + //______________________________________________________________________________ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() { @@ -2261,7 +2390,11 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() // Array to take into account the tracks already added to the AOD fUsedTrack = new Bool_t[nTracks]; - for (Int_t iTrack=0; iTrack