#include "AliEmcalEsdTrackFilterTask.h"
#include <TClonesArray.h>
#include <TRandom3.h>
#include <TGeoGlobalMagField.h>
#include <AliAnalysisManager.h>
#include <AliEMCALRecoUtils.h>
#include <AliESDEvent.h>
#include <AliESDtrackCuts.h>
#include <AliMagF.h>
#include <AliTrackerBase.h>
ClassImp(AliEmcalEsdTrackFilterTask)
AliEmcalEsdTrackFilterTask::AliEmcalEsdTrackFilterTask() :
AliAnalysisTaskSE("AliEmcalEsdTrackFilterTask"),
fEsdTrackCuts(0),
fDoSpdVtxCon(0),
fHybridTrackCuts(0),
fTracksName(),
fIncludeNoITS(kTRUE),
fDoPropagation(kFALSE),
fDist(440),
fTrackEfficiency(0),
fIsMC(kFALSE),
fEsdEv(0),
fTracks(0)
{
}
AliEmcalEsdTrackFilterTask::AliEmcalEsdTrackFilterTask(const char *name) :
AliAnalysisTaskSE(name),
fEsdTrackCuts(0),
fDoSpdVtxCon(0),
fHybridTrackCuts(0),
fTracksName("EsdTracksOut"),
fIncludeNoITS(kTRUE),
fDoPropagation(kFALSE),
fDist(440),
fTrackEfficiency(0),
fIsMC(kFALSE),
fEsdEv(0),
fTracks(0)
{
if (!name)
return;
SetName(name);
fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
}
AliEmcalEsdTrackFilterTask::~AliEmcalEsdTrackFilterTask()
{
delete fEsdTrackCuts;
}
void AliEmcalEsdTrackFilterTask::UserCreateOutputObjects()
{
fTracks = new TClonesArray("AliESDtrack");
fTracks->SetName(fTracksName);
if (fDoSpdVtxCon) {
if (!fEsdTrackCuts) {
AliInfo("No track cuts given, creating default (standard only TPC) cuts");
fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
fEsdTrackCuts->SetPtRange(0.15,1e3);
}
} else {
AliWarning("No track cuts given, but maybe this is indeed intended?");
}
}
void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
{
fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
if (!fEsdEv) {
AliError("Task works only on ESD events, returning");
return;
}
AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
if (!am) {
AliError("Manager zero, returning");
return;
}
fTracks->Delete();
if (!(InputEvent()->FindListObject(fTracksName)))
InputEvent()->AddObject(fTracks);
if (!fHybridTrackCuts) {
am->LoadBranch("AliESDRun.");
am->LoadBranch("AliESDHeader.");
am->LoadBranch("Tracks");
if (fDoSpdVtxCon) {
if (!TGeoGlobalMagField::Instance()->GetField()) {
fEsdEv->InitMagneticField();
}
am->LoadBranch("SPDVertex.");
const AliESDVertex *vtxSPD = fEsdEv->GetPrimaryVertexSPD();
if (!vtxSPD) {
AliError("No SPD vertex, returning");
return;
}
Int_t ntr = fEsdEv->GetNumberOfTracks();
for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
AliESDtrack *etrack = fEsdEv->GetTrack(i);
if (!etrack)
continue;
if (!fEsdTrackCuts->AcceptTrack(etrack))
continue;
AliESDtrack *ntrack = AliESDtrackCuts::GetTPCOnlyTrack(fEsdEv,etrack->GetID());
if (!ntrack)
continue;
if (ntrack->Pt()<=0) {
delete ntrack;
continue;
}
Double_t bfield[3] = {0,0,0};
ntrack->GetBxByBz(bfield);
AliExternalTrackParam exParam;
Bool_t relate = ntrack->RelateToVertexBxByBz(vtxSPD,bfield,kVeryBig,&exParam);
if (!relate) {
delete ntrack;
continue;
}
ntrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
if (ntrack->Pt()<=0) {
delete ntrack;
continue;
}
if (fTrackEfficiency) {
Double_t r = gRandom->Rndm();
if (fTrackEfficiency->Eval(ntrack->Pt()) < r)
continue;
}
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,fDist);
new ((*fTracks)[ntrnew++]) AliESDtrack(*ntrack);
delete ntrack;
}
} else {
Int_t ntr = fEsdEv->GetNumberOfTracks();
for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
AliESDtrack *etrack = fEsdEv->GetTrack(i);
if (!etrack)
continue;
if ((fEsdTrackCuts!=0) && !fEsdTrackCuts->AcceptTrack(etrack))
continue;
if (fTrackEfficiency) {
Double_t r = gRandom->Rndm();
if (fTrackEfficiency->Eval(etrack->Pt()) < r)
continue;
}
AliESDtrack *ntrack = new ((*fTracks)[ntrnew++]) AliESDtrack(*etrack);
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(ntrack,fDist);
}
}
} else {
am->LoadBranch("Tracks");
Int_t ntr = fEsdEv->GetNumberOfTracks();
for (Int_t i=0, ntrnew=0; i<ntr; ++i) {
AliESDtrack *etrack = fEsdEv->GetTrack(i);
if (!etrack)
continue;
if (fEsdTrackCuts->AcceptTrack(etrack)) {
if (fTrackEfficiency) {
Double_t r = gRandom->Rndm();
if (fTrackEfficiency->Eval(etrack->Pt()) < r)
continue;
}
AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
newTrack->SetBit(BIT(22),0);
newTrack->SetBit(BIT(23),0);
if (!fMCEvent) newTrack->SetLabel(0);
++ntrnew;
} else if (fHybridTrackCuts->AcceptTrack(etrack)) {
if (!etrack->GetConstrainedParam())
continue;
UInt_t status = etrack->GetStatus();
if (!fIncludeNoITS && ((status&AliESDtrack::kITSrefit)==0))
continue;
if (fTrackEfficiency) {
Double_t r = gRandom->Rndm();
if (fTrackEfficiency->Eval(etrack->Pt()) < r)
continue;
}
AliESDtrack *newTrack = new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
if (fDoPropagation)
AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
newTrack->Set(constrainParam->GetX(),
constrainParam->GetAlpha(),
constrainParam->GetParameter(),
constrainParam->GetCovariance());
if ((status&AliESDtrack::kITSrefit)==0) {
newTrack->SetBit(BIT(22),0);
newTrack->SetBit(BIT(23),1);
} else {
newTrack->SetBit(BIT(22),1);
newTrack->SetBit(BIT(23),0);
}
if (!fMCEvent) newTrack->SetLabel(0);
++ntrnew;
}
}
}
}
AliEmcalEsdTrackFilterTask.cxx:1 AliEmcalEsdTrackFilterTask.cxx:2 AliEmcalEsdTrackFilterTask.cxx:3 AliEmcalEsdTrackFilterTask.cxx:4 AliEmcalEsdTrackFilterTask.cxx:5 AliEmcalEsdTrackFilterTask.cxx:6 AliEmcalEsdTrackFilterTask.cxx:7 AliEmcalEsdTrackFilterTask.cxx:8 AliEmcalEsdTrackFilterTask.cxx:9 AliEmcalEsdTrackFilterTask.cxx:10 AliEmcalEsdTrackFilterTask.cxx:11 AliEmcalEsdTrackFilterTask.cxx:12 AliEmcalEsdTrackFilterTask.cxx:13 AliEmcalEsdTrackFilterTask.cxx:14 AliEmcalEsdTrackFilterTask.cxx:15 AliEmcalEsdTrackFilterTask.cxx:16 AliEmcalEsdTrackFilterTask.cxx:17 AliEmcalEsdTrackFilterTask.cxx:18 AliEmcalEsdTrackFilterTask.cxx:19 AliEmcalEsdTrackFilterTask.cxx:20 AliEmcalEsdTrackFilterTask.cxx:21 AliEmcalEsdTrackFilterTask.cxx:22 AliEmcalEsdTrackFilterTask.cxx:23 AliEmcalEsdTrackFilterTask.cxx:24 AliEmcalEsdTrackFilterTask.cxx:25 AliEmcalEsdTrackFilterTask.cxx:26 AliEmcalEsdTrackFilterTask.cxx:27 AliEmcalEsdTrackFilterTask.cxx:28 AliEmcalEsdTrackFilterTask.cxx:29 AliEmcalEsdTrackFilterTask.cxx:30 AliEmcalEsdTrackFilterTask.cxx:31 AliEmcalEsdTrackFilterTask.cxx:32 AliEmcalEsdTrackFilterTask.cxx:33 AliEmcalEsdTrackFilterTask.cxx:34 AliEmcalEsdTrackFilterTask.cxx:35 AliEmcalEsdTrackFilterTask.cxx:36 AliEmcalEsdTrackFilterTask.cxx:37 AliEmcalEsdTrackFilterTask.cxx:38 AliEmcalEsdTrackFilterTask.cxx:39 AliEmcalEsdTrackFilterTask.cxx:40 AliEmcalEsdTrackFilterTask.cxx:41 AliEmcalEsdTrackFilterTask.cxx:42 AliEmcalEsdTrackFilterTask.cxx:43 AliEmcalEsdTrackFilterTask.cxx:44 AliEmcalEsdTrackFilterTask.cxx:45 AliEmcalEsdTrackFilterTask.cxx:46 AliEmcalEsdTrackFilterTask.cxx:47 AliEmcalEsdTrackFilterTask.cxx:48 AliEmcalEsdTrackFilterTask.cxx:49 AliEmcalEsdTrackFilterTask.cxx:50 AliEmcalEsdTrackFilterTask.cxx:51 AliEmcalEsdTrackFilterTask.cxx:52 AliEmcalEsdTrackFilterTask.cxx:53 AliEmcalEsdTrackFilterTask.cxx:54 AliEmcalEsdTrackFilterTask.cxx:55 AliEmcalEsdTrackFilterTask.cxx:56 AliEmcalEsdTrackFilterTask.cxx:57 AliEmcalEsdTrackFilterTask.cxx:58 AliEmcalEsdTrackFilterTask.cxx:59 AliEmcalEsdTrackFilterTask.cxx:60 AliEmcalEsdTrackFilterTask.cxx:61 AliEmcalEsdTrackFilterTask.cxx:62 AliEmcalEsdTrackFilterTask.cxx:63 AliEmcalEsdTrackFilterTask.cxx:64 AliEmcalEsdTrackFilterTask.cxx:65 AliEmcalEsdTrackFilterTask.cxx:66 AliEmcalEsdTrackFilterTask.cxx:67 AliEmcalEsdTrackFilterTask.cxx:68 AliEmcalEsdTrackFilterTask.cxx:69 AliEmcalEsdTrackFilterTask.cxx:70 AliEmcalEsdTrackFilterTask.cxx:71 AliEmcalEsdTrackFilterTask.cxx:72 AliEmcalEsdTrackFilterTask.cxx:73 AliEmcalEsdTrackFilterTask.cxx:74 AliEmcalEsdTrackFilterTask.cxx:75 AliEmcalEsdTrackFilterTask.cxx:76 AliEmcalEsdTrackFilterTask.cxx:77 AliEmcalEsdTrackFilterTask.cxx:78 AliEmcalEsdTrackFilterTask.cxx:79 AliEmcalEsdTrackFilterTask.cxx:80 AliEmcalEsdTrackFilterTask.cxx:81 AliEmcalEsdTrackFilterTask.cxx:82 AliEmcalEsdTrackFilterTask.cxx:83 AliEmcalEsdTrackFilterTask.cxx:84 AliEmcalEsdTrackFilterTask.cxx:85 AliEmcalEsdTrackFilterTask.cxx:86 AliEmcalEsdTrackFilterTask.cxx:87 AliEmcalEsdTrackFilterTask.cxx:88 AliEmcalEsdTrackFilterTask.cxx:89 AliEmcalEsdTrackFilterTask.cxx:90 AliEmcalEsdTrackFilterTask.cxx:91 AliEmcalEsdTrackFilterTask.cxx:92 AliEmcalEsdTrackFilterTask.cxx:93 AliEmcalEsdTrackFilterTask.cxx:94 AliEmcalEsdTrackFilterTask.cxx:95 AliEmcalEsdTrackFilterTask.cxx:96 AliEmcalEsdTrackFilterTask.cxx:97 AliEmcalEsdTrackFilterTask.cxx:98 AliEmcalEsdTrackFilterTask.cxx:99 AliEmcalEsdTrackFilterTask.cxx:100 AliEmcalEsdTrackFilterTask.cxx:101 AliEmcalEsdTrackFilterTask.cxx:102 AliEmcalEsdTrackFilterTask.cxx:103 AliEmcalEsdTrackFilterTask.cxx:104 AliEmcalEsdTrackFilterTask.cxx:105 AliEmcalEsdTrackFilterTask.cxx:106 AliEmcalEsdTrackFilterTask.cxx:107 AliEmcalEsdTrackFilterTask.cxx:108 AliEmcalEsdTrackFilterTask.cxx:109 AliEmcalEsdTrackFilterTask.cxx:110 AliEmcalEsdTrackFilterTask.cxx:111 AliEmcalEsdTrackFilterTask.cxx:112 AliEmcalEsdTrackFilterTask.cxx:113 AliEmcalEsdTrackFilterTask.cxx:114 AliEmcalEsdTrackFilterTask.cxx:115 AliEmcalEsdTrackFilterTask.cxx:116 AliEmcalEsdTrackFilterTask.cxx:117 AliEmcalEsdTrackFilterTask.cxx:118 AliEmcalEsdTrackFilterTask.cxx:119 AliEmcalEsdTrackFilterTask.cxx:120 AliEmcalEsdTrackFilterTask.cxx:121 AliEmcalEsdTrackFilterTask.cxx:122 AliEmcalEsdTrackFilterTask.cxx:123 AliEmcalEsdTrackFilterTask.cxx:124 AliEmcalEsdTrackFilterTask.cxx:125 AliEmcalEsdTrackFilterTask.cxx:126 AliEmcalEsdTrackFilterTask.cxx:127 AliEmcalEsdTrackFilterTask.cxx:128 AliEmcalEsdTrackFilterTask.cxx:129 AliEmcalEsdTrackFilterTask.cxx:130 AliEmcalEsdTrackFilterTask.cxx:131 AliEmcalEsdTrackFilterTask.cxx:132 AliEmcalEsdTrackFilterTask.cxx:133 AliEmcalEsdTrackFilterTask.cxx:134 AliEmcalEsdTrackFilterTask.cxx:135 AliEmcalEsdTrackFilterTask.cxx:136 AliEmcalEsdTrackFilterTask.cxx:137 AliEmcalEsdTrackFilterTask.cxx:138 AliEmcalEsdTrackFilterTask.cxx:139 AliEmcalEsdTrackFilterTask.cxx:140 AliEmcalEsdTrackFilterTask.cxx:141 AliEmcalEsdTrackFilterTask.cxx:142 AliEmcalEsdTrackFilterTask.cxx:143 AliEmcalEsdTrackFilterTask.cxx:144 AliEmcalEsdTrackFilterTask.cxx:145 AliEmcalEsdTrackFilterTask.cxx:146 AliEmcalEsdTrackFilterTask.cxx:147 AliEmcalEsdTrackFilterTask.cxx:148 AliEmcalEsdTrackFilterTask.cxx:149 AliEmcalEsdTrackFilterTask.cxx:150 AliEmcalEsdTrackFilterTask.cxx:151 AliEmcalEsdTrackFilterTask.cxx:152 AliEmcalEsdTrackFilterTask.cxx:153 AliEmcalEsdTrackFilterTask.cxx:154 AliEmcalEsdTrackFilterTask.cxx:155 AliEmcalEsdTrackFilterTask.cxx:156 AliEmcalEsdTrackFilterTask.cxx:157 AliEmcalEsdTrackFilterTask.cxx:158 AliEmcalEsdTrackFilterTask.cxx:159 AliEmcalEsdTrackFilterTask.cxx:160 AliEmcalEsdTrackFilterTask.cxx:161 AliEmcalEsdTrackFilterTask.cxx:162 AliEmcalEsdTrackFilterTask.cxx:163 AliEmcalEsdTrackFilterTask.cxx:164 AliEmcalEsdTrackFilterTask.cxx:165 AliEmcalEsdTrackFilterTask.cxx:166 AliEmcalEsdTrackFilterTask.cxx:167 AliEmcalEsdTrackFilterTask.cxx:168 AliEmcalEsdTrackFilterTask.cxx:169 AliEmcalEsdTrackFilterTask.cxx:170 AliEmcalEsdTrackFilterTask.cxx:171 AliEmcalEsdTrackFilterTask.cxx:172 AliEmcalEsdTrackFilterTask.cxx:173 AliEmcalEsdTrackFilterTask.cxx:174 AliEmcalEsdTrackFilterTask.cxx:175 AliEmcalEsdTrackFilterTask.cxx:176 AliEmcalEsdTrackFilterTask.cxx:177 AliEmcalEsdTrackFilterTask.cxx:178 AliEmcalEsdTrackFilterTask.cxx:179 AliEmcalEsdTrackFilterTask.cxx:180 AliEmcalEsdTrackFilterTask.cxx:181 AliEmcalEsdTrackFilterTask.cxx:182 AliEmcalEsdTrackFilterTask.cxx:183 AliEmcalEsdTrackFilterTask.cxx:184 AliEmcalEsdTrackFilterTask.cxx:185 AliEmcalEsdTrackFilterTask.cxx:186 AliEmcalEsdTrackFilterTask.cxx:187 AliEmcalEsdTrackFilterTask.cxx:188 AliEmcalEsdTrackFilterTask.cxx:189 AliEmcalEsdTrackFilterTask.cxx:190 AliEmcalEsdTrackFilterTask.cxx:191 AliEmcalEsdTrackFilterTask.cxx:192 AliEmcalEsdTrackFilterTask.cxx:193 AliEmcalEsdTrackFilterTask.cxx:194 AliEmcalEsdTrackFilterTask.cxx:195 AliEmcalEsdTrackFilterTask.cxx:196 AliEmcalEsdTrackFilterTask.cxx:197 AliEmcalEsdTrackFilterTask.cxx:198 AliEmcalEsdTrackFilterTask.cxx:199 AliEmcalEsdTrackFilterTask.cxx:200 AliEmcalEsdTrackFilterTask.cxx:201 AliEmcalEsdTrackFilterTask.cxx:202 AliEmcalEsdTrackFilterTask.cxx:203 AliEmcalEsdTrackFilterTask.cxx:204 AliEmcalEsdTrackFilterTask.cxx:205 AliEmcalEsdTrackFilterTask.cxx:206 AliEmcalEsdTrackFilterTask.cxx:207 AliEmcalEsdTrackFilterTask.cxx:208 AliEmcalEsdTrackFilterTask.cxx:209 AliEmcalEsdTrackFilterTask.cxx:210 AliEmcalEsdTrackFilterTask.cxx:211 AliEmcalEsdTrackFilterTask.cxx:212 AliEmcalEsdTrackFilterTask.cxx:213 AliEmcalEsdTrackFilterTask.cxx:214 AliEmcalEsdTrackFilterTask.cxx:215 AliEmcalEsdTrackFilterTask.cxx:216 AliEmcalEsdTrackFilterTask.cxx:217 AliEmcalEsdTrackFilterTask.cxx:218 AliEmcalEsdTrackFilterTask.cxx:219 AliEmcalEsdTrackFilterTask.cxx:220 AliEmcalEsdTrackFilterTask.cxx:221 AliEmcalEsdTrackFilterTask.cxx:222 AliEmcalEsdTrackFilterTask.cxx:223 AliEmcalEsdTrackFilterTask.cxx:224 AliEmcalEsdTrackFilterTask.cxx:225 AliEmcalEsdTrackFilterTask.cxx:226 AliEmcalEsdTrackFilterTask.cxx:227 AliEmcalEsdTrackFilterTask.cxx:228 AliEmcalEsdTrackFilterTask.cxx:229 AliEmcalEsdTrackFilterTask.cxx:230 AliEmcalEsdTrackFilterTask.cxx:231 AliEmcalEsdTrackFilterTask.cxx:232 AliEmcalEsdTrackFilterTask.cxx:233 AliEmcalEsdTrackFilterTask.cxx:234 AliEmcalEsdTrackFilterTask.cxx:235 AliEmcalEsdTrackFilterTask.cxx:236 AliEmcalEsdTrackFilterTask.cxx:237 AliEmcalEsdTrackFilterTask.cxx:238 AliEmcalEsdTrackFilterTask.cxx:239 AliEmcalEsdTrackFilterTask.cxx:240 AliEmcalEsdTrackFilterTask.cxx:241 AliEmcalEsdTrackFilterTask.cxx:242 AliEmcalEsdTrackFilterTask.cxx:243 AliEmcalEsdTrackFilterTask.cxx:244 AliEmcalEsdTrackFilterTask.cxx:245