// $Id$
//
-// Task to constrain TPC tracks to SPD vertex.
+// Task to filter Esd tracks and propagate to Emcal surface.
//
// Author: C.Loizides
#include "AliTrackerBase.h"
#include "AliEMCALRecoUtils.h"
-#include "AliEmcalEsdTpcTrackTask.h"
+#include "AliEmcalEsdTrackFilterTask.h"
-ClassImp(AliEmcalEsdTpcTrackTask)
+ClassImp(AliEmcalEsdTrackFilterTask)
//________________________________________________________________________
-AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask() :
- AliAnalysisTaskSE("TpcSpdVertexConstrainedTracks"),
+AliEmcalEsdTrackFilterTask::AliEmcalEsdTrackFilterTask() :
+ AliAnalysisTaskSE("AliEmcalEsdTrackFilterTask"),
fEsdTrackCuts(0),
fDoSpdVtxCon(0),
fHybridTrackCuts(0),
fTracksName(),
fIncludeNoITS(kTRUE),
fDoPropagation(kFALSE),
- fRecoUtils(0),
fDist(440),
- fMinPtCutProp(0.35),
fEsdEv(0),
fTracks(0)
{
}
//________________________________________________________________________
-AliEmcalEsdTpcTrackTask::AliEmcalEsdTpcTrackTask(const char *name) :
+AliEmcalEsdTrackFilterTask::AliEmcalEsdTrackFilterTask(const char *name) :
AliAnalysisTaskSE(name),
fEsdTrackCuts(0),
fDoSpdVtxCon(0),
fHybridTrackCuts(0),
- fTracksName("TpcSpdVertexConstrainedTracks"),
+ fTracksName("EsdTracksOut"),
fIncludeNoITS(kTRUE),
fDoPropagation(kFALSE),
- fRecoUtils(0),
fDist(440),
- fMinPtCutProp(0.35),
fEsdEv(0),
fTracks(0)
{
}
//________________________________________________________________________
-AliEmcalEsdTpcTrackTask::~AliEmcalEsdTpcTrackTask()
+AliEmcalEsdTrackFilterTask::~AliEmcalEsdTrackFilterTask()
{
//Destructor
delete fEsdTrackCuts;
- delete fRecoUtils;
}
//________________________________________________________________________
-void AliEmcalEsdTpcTrackTask::UserCreateOutputObjects()
+void AliEmcalEsdTrackFilterTask::UserCreateOutputObjects()
{
// Create histograms.
fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
fEsdTrackCuts->SetPtRange(0.15,1e3);
}
-
- if (!fRecoUtils) {
- fRecoUtils = new AliEMCALRecoUtils;
- fRecoUtils->SetStep(20);
- AliInfo("No reco utils given, creating default utils");
- }
}
//________________________________________________________________________
-void AliEmcalEsdTpcTrackTask::UserExec(Option_t *)
+void AliEmcalEsdTrackFilterTask::UserExec(Option_t *)
{
// Main loop, called for each event.
continue;
if (fEsdTrackCuts->AcceptTrack(etrack)) {
- if(fDoPropagation) PropagateTrackToEMCal(etrack);
new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
AliESDtrack *newTrack = static_cast<AliESDtrack*>(fTracks->At(ntrnew));
- if(fDoPropagation) newTrack->SetTrackPhiEtaPtOnEMCal(etrack->GetTrackPhiOnEMCal(),etrack->GetTrackEtaOnEMCal(),etrack->GetTrackPtOnEMCal());
-
- newTrack->SetTRDNchamberdEdx(0);
+ if (fDoPropagation)
+ AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
+ //newTrack->SetTRDNchamberdEdx(0); todo
++ntrnew;
} else if (fHybridTrackCuts->AcceptTrack(etrack)) {
- if(fDoPropagation) PropagateTrackToEMCal(etrack);
UInt_t status = etrack->GetStatus();
if (etrack->GetConstrainedParam() && ((status&AliESDtrack::kITSrefit)!=0 || fIncludeNoITS)) {
-
new ((*fTracks)[ntrnew]) AliESDtrack(*etrack);
AliESDtrack *newTrack = static_cast<AliESDtrack*>(fTracks->At(ntrnew));
- ++ntrnew;
const AliExternalTrackParam* constrainParam = etrack->GetConstrainedParam();
newTrack->Set(constrainParam->GetX(),
constrainParam->GetAlpha(),
constrainParam->GetParameter(),
constrainParam->GetCovariance());
- if ((status&AliESDtrack::kITSrefit)==0)
- newTrack->SetTRDNchamberdEdx(2);
- else
- newTrack->SetTRDNchamberdEdx(1);
-
- if(fDoPropagation) newTrack->SetTrackPhiEtaPtOnEMCal(etrack->GetTrackPhiOnEMCal(),etrack->GetTrackEtaOnEMCal(),etrack->GetTrackPtOnEMCal());
+ // if ((status&AliESDtrack::kITSrefit)==0) // todo
+ // newTrack->SetTRDNchamberdEdx(2);
+ // else
+ // newTrack->SetTRDNchamberdEdx(1);
+ if (fDoPropagation)
+ AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newTrack,fDist);
+ ++ntrnew;
}
}
}
}
}
-//______________________________________________________________________________
-void AliEmcalEsdTpcTrackTask::PropagateTrackToEMCal(AliESDtrack *esdTrack)
-{
- // Extrapolate the track to EMCal surface
- esdTrack->ResetStatus(AliVTrack::kEMCALmatch);
-
- Double_t phi = esdTrack->Phi()*TMath::RadToDeg();
- if (TMath::Abs(esdTrack->Eta())>0.9 || phi <= 10 || phi >= 250)
- return;
- if(esdTrack->Pt()<fMinPtCutProp)
- return;
-
- AliExternalTrackParam *trackParam = const_cast<AliExternalTrackParam*>(esdTrack->GetInnerParam());
- if(!trackParam)
- return;
- AliExternalTrackParam emcalParam(*trackParam);
-
- Float_t etaout=-999, phiout=-999, ptout=-999;
- Bool_t ret = fRecoUtils->ExtrapolateTrackToEMCalSurface(&emcalParam,
- fDist,
- esdTrack->GetMass(),
- fRecoUtils->GetStepSurface(),
- etaout,
- phiout,
- ptout);
- if (!ret)
- return;
- if (TMath::Abs(etaout)>0.75 || (phiout<70*TMath::DegToRad()) || (phiout>190*TMath::DegToRad()))
- return;
- esdTrack->SetOuterParam(&emcalParam,AliExternalTrackParam::kMultSec);
- esdTrack->SetTrackPhiEtaPtOnEMCal(phiout, etaout, ptout);
- esdTrack->SetStatus(AliVTrack::kEMCALmatch);
-
-}
-#ifndef ALIEMCALESDTPCTRACKTASK_H
-#define ALIEMCALESDTPCTRACKTASK_H
+#ifndef ALIEMCALESDTRACKFILTERTASK_H
+#define ALIEMCALESDTRACKFILTERTASK_H
// $Id$
class AliEMCALRecoUtils;
#include "AliAnalysisTaskSE.h"
+#include "AliESDtrackCuts.h"
-class AliEmcalEsdTpcTrackTask : public AliAnalysisTaskSE {
+class AliEmcalEsdTrackFilterTask : public AliAnalysisTaskSE {
public:
- AliEmcalEsdTpcTrackTask();
- AliEmcalEsdTpcTrackTask(const char *name);
- virtual ~AliEmcalEsdTpcTrackTask();
+ AliEmcalEsdTrackFilterTask();
+ AliEmcalEsdTrackFilterTask(const char *name);
+ virtual ~AliEmcalEsdTrackFilterTask();
void UserCreateOutputObjects();
void UserExec(Option_t *option);
+ void SetDist(Double_t d) { fDist = d; }
+ void SetDoPropagation(Bool_t b) { fDoPropagation = b; }
void SetDoSpdVtxConstrain(Bool_t b) { fDoSpdVtxCon = b; }
void SetHybridTrackCuts(AliESDtrackCuts *cuts) { fHybridTrackCuts = cuts; }
+ void SetIncludeNoITS(Bool_t f) { fIncludeNoITS = f; }
void SetTrackCuts(AliESDtrackCuts *cuts) { fEsdTrackCuts = cuts; }
void SetTracksName(const char *name) { fTracksName = name; }
- void SetIncludeNoITS(Bool_t f) { fIncludeNoITS = f; }
-
- void SetDoPropagation(Bool_t b) { fDoPropagation = b; }
- void SetDist(Double_t d) { fDist = d; }
- void SetMinPtProp(Double_t pt) { fMinPtCutProp = pt; }
- void SetRecoUtils(AliEMCALRecoUtils *ru) { fRecoUtils = ru; }
protected:
- void PropagateTrackToEMCal(AliESDtrack *esdTrack);
-
AliESDtrackCuts *fEsdTrackCuts; // esd track cuts
Bool_t fDoSpdVtxCon; // if true then do vertex constraint
AliESDtrackCuts *fHybridTrackCuts; // hybrid track cuts
TString fTracksName; // name of tracks
Bool_t fIncludeNoITS; // includes tracks with failed ITS refit
Bool_t fDoPropagation; // propagate all hybrid tracks to EMCal surface
- AliEMCALRecoUtils *fRecoUtils; // esd reco utils
Double_t fDist; // distance to surface (430cm default)
- Double_t fMinPtCutProp; // minimum track pt cut for propagated tracks (350 MeV/c default)
AliESDEvent *fEsdEv; //!esd event
TClonesArray *fTracks; //!track array
private:
- AliEmcalEsdTpcTrackTask(const AliEmcalEsdTpcTrackTask&); // not implemented
- AliEmcalEsdTpcTrackTask &operator=(const AliEmcalEsdTpcTrackTask&); // not implemented
+ AliEmcalEsdTrackFilterTask(const AliEmcalEsdTrackFilterTask&); // not implemented
+ AliEmcalEsdTrackFilterTask &operator=(const AliEmcalEsdTrackFilterTask&); // not implemented
- ClassDef(AliEmcalEsdTpcTrackTask, 2); // Class to constrain TPC tracks to SPD vertex
+ ClassDef(AliEmcalEsdTrackFilterTask, 1); // Class to constrain TPC tracks to SPD vertex
};
#endif