]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALTasks/AliEmcalClusTrackMatcherTask.cxx
changes in AddAnalysisTaskPIDFluctuation.C for only one output file in analysis train...
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliEmcalClusTrackMatcherTask.cxx
CommitLineData
aee86258 1// $Id$
2
3#include "AliEmcalClusTrackMatcherTask.h"
64b4d2f2 4#include <TClonesArray.h>
5#include <TString.h>
6#include "AliESDCaloCluster.h"
7#include "AliESDtrack.h"
8#include "AliPicoTrack.h"
aee86258 9
10ClassImp(AliEmcalClusTrackMatcherTask)
11
aee86258 12//________________________________________________________________________
13AliEmcalClusTrackMatcherTask::AliEmcalClusTrackMatcherTask(const char *name) :
14 AliAnalysisTaskSE("AliEmcalClusTrackMatcherTask"),
15 fTracksName("Tracks"),
34df23d8 16 fCaloName("CaloClusters"),
17 fDoClusTrack(1),
18 fDoTrackClus(0)
aee86258 19{
20 // Standard constructor.
e6fc4207 21
aee86258 22 if (!name)
23 return;
24 SetName(name);
64b4d2f2 25 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.,CaloClusters,Tracks";
aee86258 26}
27
28//________________________________________________________________________
29AliEmcalClusTrackMatcherTask::~AliEmcalClusTrackMatcherTask()
30{
31 // Destructor
32}
33
34//________________________________________________________________________
35void AliEmcalClusTrackMatcherTask::UserCreateOutputObjects()
36{
37 // Create user objects.
aee86258 38}
39
40//________________________________________________________________________
41void AliEmcalClusTrackMatcherTask::UserExec(Option_t *)
42{
43 // Main loop, called for each event.
44
aee86258 45 TList *l = InputEvent()->GetList();
e6fc4207 46 if (!l)
47 return;
64b4d2f2 48
49 TClonesArray *tracks = dynamic_cast<TClonesArray*>(l->FindObject(fTracksName));
50 if (!tracks) {
51 AliError(Form("Pointer to tracks %s == 0", fTracksName.Data() ));
52 return;
53 }
54
55 TClonesArray *clus = dynamic_cast<TClonesArray*>(l->FindObject(fCaloName));
56 if (!clus) {
57 AliError(Form("Pointer to clus %s == 0", fCaloName.Data() ));
58 return;
59 }
60
61 const Int_t Ntrks = tracks->GetEntries();
62 const Int_t Ncls = clus->GetEntries();
64b4d2f2 63
34df23d8 64 if (fDoClusTrack) {
64b4d2f2 65 for(Int_t i=0; i < Ncls; ++i) {
66 AliVCluster *c = dynamic_cast<AliVCluster*>(clus->At(i));
67 if (!c)
68 continue;
34df23d8 69 c->SetEmcCpvDistance(-1);
70 c->SetTrackDistance(999,999);
71 Double_t dEtaMin = 1e9;
72 Double_t dPhiMin = 1e9;
73 Int_t imin = -1;
74 for(Int_t t = 0; t<Ntrks; ++t) {
75 AliVTrack *track = dynamic_cast<AliVTrack*>(tracks->At(t));
76 Double_t etadiff=999;
77 Double_t phidiff=999;
78 AliPicoTrack::GetEtaPhiDiff(track,c,phidiff,etadiff);
79 Double_t dR = TMath::Sqrt(etadiff*etadiff+phidiff*phidiff);
80 if(dR > 25)
81 continue;
82 if (TMath::Abs(etadiff)<TMath::Abs(dEtaMin) && TMath::Abs(phidiff)<TMath::Abs(dPhiMin)) {
83 dEtaMin = etadiff;
84 dPhiMin = phidiff;
85 imin = t;
86 }
87 }
88 c->SetEmcCpvDistance(imin);
89 c->SetTrackDistance(dPhiMin, dEtaMin);
90 }
91 }
92
93 if (fDoTrackClus) {
94 for(Int_t t = 0; t<Ntrks; ++t) {
95 AliVTrack *track = dynamic_cast<AliVTrack*>(tracks->At(t));
96 if (!track)
64b4d2f2 97 continue;
34df23d8 98 Double_t dEtaMin = 1e9;
99 Double_t dPhiMin = 1e9;
100 Int_t imin = -1;
101 for(Int_t i=0; i < Ncls; ++i) {
102 AliVCluster *c = dynamic_cast<AliVCluster*>(clus->At(i));
103 if (!c)
104 continue;
105 Double_t etadiff=999;
106 Double_t phidiff=999;
107 AliPicoTrack::GetEtaPhiDiff(track,c,phidiff,etadiff);
108 Double_t dR = TMath::Sqrt(etadiff*etadiff+phidiff*phidiff);
109 if(dR > 25)
110 continue;
111 if (TMath::Abs(etadiff)<TMath::Abs(dEtaMin) && TMath::Abs(phidiff)<TMath::Abs(dPhiMin)) {
112 dEtaMin = etadiff;
113 dPhiMin = phidiff;
114 imin = t;
115 }
64b4d2f2 116 }
34df23d8 117 track->SetEMCALcluster(imin);
aee86258 118 }
aee86258 119 }
aee86258 120}
121
122//________________________________________________________________________
123void AliEmcalClusTrackMatcherTask::Terminate(Option_t *)
124{
125 // Called once at the end of the analysis.
126
127}