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");
82 AliInfo(
"No track cuts given, creating default (standard only TPC) cuts");
83 fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
87 AliWarning(
"No track cuts given, but maybe this is indeed intended?");
97 fEsdEv =
dynamic_cast<AliESDEvent*
>(InputEvent());
99 AliError(
"Task works only on ESD events, returning");
103 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
105 AliError(
"Manager zero, returning");
112 InputEvent()->AddObject(
fTracks);
115 am->LoadBranch(
"AliESDRun.");
116 am->LoadBranch(
"AliESDHeader.");
117 am->LoadBranch(
"Tracks");
120 if (!TGeoGlobalMagField::Instance()->GetField()) {
121 fEsdEv->InitMagneticField();
123 am->LoadBranch(
"SPDVertex.");
124 const AliESDVertex *vtxSPD =
fEsdEv->GetPrimaryVertexSPD();
126 AliError(
"No SPD vertex, returning");
129 Int_t ntr =
fEsdEv->GetNumberOfTracks();
130 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
131 AliESDtrack *etrack =
fEsdEv->GetTrack(i);
138 AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(
fEsdEv,etrack->GetID());
141 if (ntrack->Pt()<=0) {
145 Double_t bfield[3] = {0,0,0};
146 ntrack->GetBxByBz(bfield);
147 AliExternalTrackParam exParam;
148 Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam);
154 ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
155 if (ntrack->Pt()<=0) {
167 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,
fDist);
168 new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
172 Int_t ntr =
fEsdEv->GetNumberOfTracks();
173 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
174 AliESDtrack *etrack =
fEsdEv->GetTrack(i);
187 AliESDtrack *ntrack =
new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
189 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,
fDist);
195 am->LoadBranch(
"Tracks");
196 Int_t ntr =
fEsdEv->GetNumberOfTracks();
197 for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
198 AliESDtrack *etrack =
fEsdEv->GetTrack(i);
208 AliESDtrack *newTrack =
new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
210 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,
fDist);
211 newTrack->SetBit(BIT(22),0);
212 newTrack->SetBit(BIT(23),0);
213 if (!fMCEvent) newTrack->SetLabel(0);
216 if (!etrack->GetConstrainedParam())
218 UInt_t status = etrack->GetStatus();
227 AliESDtrack *newTrack =
new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
229 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,
fDist);
230 const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
231 newTrack->Set(constrainParam->GetX(),
232 constrainParam->GetAlpha(),
233 constrainParam->GetParameter(),
234 constrainParam->GetCovariance());
235 if ((status&AliESDtrack::kITSrefit)==0) {
236 newTrack->SetBit(BIT(22),0);
237 newTrack->SetBit(BIT(23),1);
239 newTrack->SetBit(BIT(22),1);
240 newTrack->SetBit(BIT(23),0);
242 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()