]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALTasks/AliEmcalTrackPropagatorTask.cxx
Transition PWG4 --> PWGGA
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliEmcalTrackPropagatorTask.cxx
1 // $Id$
2 //
3 // Task to propagate tracks to EMCAL surface.
4 //
5 //
6
7 #include <TClonesArray.h>
8 #include "AliAnalysisManager.h"
9 #include "AliEMCALRecoUtils.h"
10 #include "AliESDEvent.h"
11 #include "AliEmcalTrackPropagatorTask.h"
12
13 ClassImp(AliEmcalTrackPropagatorTask)
14
15 //________________________________________________________________________
16 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask() : 
17   AliAnalysisTaskSE(),
18   fRecoUtils(0),
19   fTracksName(),
20   fDist(430),
21   fMinPtCut(0.5),
22   fEsdEv(0),
23   fTracks(0)
24 {
25   // Constructor.
26 }
27
28 //________________________________________________________________________
29 AliEmcalTrackPropagatorTask::AliEmcalTrackPropagatorTask(const char *name) : 
30   AliAnalysisTaskSE(name),
31   fRecoUtils(0),
32   fTracksName("TpcSpdVertexConstrainedTracks"),
33   fDist(430),
34   fMinPtCut(0.5),
35   fEsdEv(0),
36   fTracks(0)
37 {
38   // Constructor.
39   fBranchNames = "ESD:AliESDHeader.,Tracks";
40 }
41
42 //________________________________________________________________________
43 AliEmcalTrackPropagatorTask::~AliEmcalTrackPropagatorTask()
44 {
45   // Destructor.
46
47   delete fRecoUtils;
48 }
49
50 //________________________________________________________________________
51 void AliEmcalTrackPropagatorTask::UserCreateOutputObjects()
52 {
53   // Create histograms.
54
55   if (!fRecoUtils) {
56     fRecoUtils = new AliEMCALRecoUtils;
57     fRecoUtils->SetStep(25);
58     AliInfo("No reco utils given, creating default utils");
59   }
60 }
61
62 //________________________________________________________________________
63 void AliEmcalTrackPropagatorTask::UserExec(Option_t *) 
64 {
65   // Main loop, called for each event.
66
67   fEsdEv = dynamic_cast<AliESDEvent*>(InputEvent());
68   if (!fEsdEv) {
69     AliError("Task works only on ESD events, returning");
70     return;
71   }
72
73   AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
74   if (!am) {
75     AliError("Manager zero, returning");
76     return;
77   }
78
79   // get tracks from event if not yet there
80   if (fTracksName == "Tracks")
81     am->LoadBranch("Tracks");
82   fTracks = dynamic_cast<TClonesArray*>((InputEvent()->FindListObject(fTracksName)));
83   if (!fTracks) {
84     AliError(Form("Could not get tracks %s, returning", fTracksName.Data()));
85     return;
86   }
87
88   // Loop over all tracks
89   const Int_t ntr = fTracks->GetEntries();
90   for (Int_t i=0; i<ntr; ++i) {
91     AliESDtrack *eTrack = static_cast<AliESDtrack*>(fTracks->At(i));
92     if (!eTrack)
93       continue;
94     eTrack->ResetStatus(AliVTrack::kEMCALmatch);
95     if(eTrack->Pt()<fMinPtCut) 
96       continue;
97     Double_t phi = eTrack->Phi()*TMath::RadToDeg();
98     if (TMath::Abs(eTrack->Eta())>0.8 || phi <= 20 || phi >= 240) 
99       continue;
100     AliExternalTrackParam *trackParam =  const_cast<AliExternalTrackParam*>(eTrack->GetInnerParam());
101     if(!trackParam) 
102       continue;
103
104     // Extrapolate the track to EMCal surface
105     AliExternalTrackParam emcalParam(*trackParam);
106     Float_t etaout=-999, phiout=-999;
107     Bool_t ret = fRecoUtils->ExtrapolateTrackToEMCalSurface(&emcalParam, 
108                                                             fDist, 
109                                                             fRecoUtils->GetMass(), 
110                                                             fRecoUtils->GetStepSurface(), 
111                                                             etaout, 
112                                                             phiout);
113     if (!ret)
114       continue;
115     if (TMath::Abs(etaout)>0.75 || (phiout<70*TMath::DegToRad()) || (phiout>190*TMath::DegToRad()))
116       continue;
117     eTrack->SetOuterParam(&emcalParam,AliExternalTrackParam::kMultSec);
118     eTrack->SetStatus(AliVTrack::kEMCALmatch);
119   }
120 }