7 #include <TClonesArray.h>
9 #include <TGeoGlobalMagField.h>
10 #include <AliAnalysisManager.h>
11 #include <AliEMCALRecoUtils.h>
12 #include <AliESDEvent.h>
13 #include <AliESDtrackCuts.h>
15 #include <AliTrackerBase.h>
28 fDoPropagation(kFALSE),
40 AliAnalysisTaskSE(name),
44 fTracksName(
"EsdTracksOut"),
46 fDoPropagation(kFALSE),
60 fBranchNames =
"ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
76 fTracks =
new TClonesArray(
"AliESDtrack");
81 AliInfo(
"No track cuts given, creating default (standard only TPC) cuts");
82 fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
86 AliWarning(
"No track cuts given, but maybe this is indeed intended?");
95 fEsdEv =
dynamic_cast<AliESDEvent*
>(InputEvent());
97 AliError(
"Task works only on ESD events, returning");
101 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
103 AliError(
"Manager zero, returning");
110 InputEvent()->AddObject(
fTracks);
113 am->LoadBranch(
"AliESDRun.");
114 am->LoadBranch(
"AliESDHeader.");
115 am->LoadBranch(
"Tracks");
118 if (!TGeoGlobalMagField::Instance()->GetField()) {
119 fEsdEv->InitMagneticField();
121 am->LoadBranch(
"SPDVertex.");
122 const AliESDVertex *vtxSPD =
fEsdEv->GetPrimaryVertexSPD();
124 AliError(
"No SPD vertex, returning");
127 Int_t ntr =
fEsdEv->GetNumberOfTracks();
128 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
129 AliESDtrack *etrack =
fEsdEv->GetTrack(i);
136 AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(
fEsdEv,etrack->GetID());
139 if (ntrack->Pt()<=0) {
143 Double_t bfield[3] = {0,0,0};
144 ntrack->GetBxByBz(bfield);
145 AliExternalTrackParam exParam;
146 Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam);
152 ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
153 if (ntrack->Pt()<=0) {
165 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,
fDist);
166 new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
170 Int_t ntr =
fEsdEv->GetNumberOfTracks();
171 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
172 AliESDtrack *etrack =
fEsdEv->GetTrack(i);
185 AliESDtrack *ntrack =
new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
187 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,
fDist);
193 am->LoadBranch(
"Tracks");
194 Int_t ntr =
fEsdEv->GetNumberOfTracks();
195 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
196 AliESDtrack *etrack =
fEsdEv->GetTrack(i);
206 AliESDtrack *newTrack =
new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
208 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,
fDist);
209 newTrack->SetBit(BIT(22),0);
210 newTrack->SetBit(BIT(23),0);
211 if (!fMCEvent) newTrack->SetLabel(0);
214 if (!etrack->GetConstrainedParam())
216 UInt_t status = etrack->GetStatus();
225 AliESDtrack *newTrack =
new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
227 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,
fDist);
228 const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
229 newTrack->Set(constrainParam->GetX(),
230 constrainParam->GetAlpha(),
231 constrainParam->GetParameter(),
232 constrainParam->GetCovariance());
233 if ((status&AliESDtrack::kITSrefit)==0) {
234 newTrack->SetBit(BIT(22),0);
235 newTrack->SetBit(BIT(23),1);
237 newTrack->SetBit(BIT(22),1);
238 newTrack->SetBit(BIT(23),0);
240 if (!fMCEvent) newTrack->SetLabel(0);
AliESDtrackCuts * fEsdTrackCuts
TClonesArray * fTracks
esd event
ClassImp(AliEmcalEsdTrackFilterTask) AliEmcalEsdTrackFilterTask
void UserExec(Option_t *option)
AliEmcalEsdTrackFilterTask()
virtual ~AliEmcalEsdTrackFilterTask()
AliESDtrackCuts * fHybridTrackCuts
void UserCreateOutputObjects()