]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/EMCALTasks/AliEmcalClusTrackMatcherTask.cxx
set prim vertex
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliEmcalClusTrackMatcherTask.cxx
CommitLineData
aee86258 1// $Id$
980821ba 2//
cd231d42 3// Track/cluster matcher
4//
d258e37e 5// Author: C.Loizides, S.Aiola
aee86258 6
64b4d2f2 7#include <TClonesArray.h>
35789a2d 8
9#include "AliVCluster.h"
10#include "AliVTrack.h"
64b4d2f2 11#include "AliPicoTrack.h"
d258e37e 12#include "AliEmcalParticle.h"
35789a2d 13#include "AliLog.h"
14
15#include "AliEmcalClusTrackMatcherTask.h"
aee86258 16
17ClassImp(AliEmcalClusTrackMatcherTask)
18
d258e37e 19//________________________________________________________________________
20AliEmcalClusTrackMatcherTask::AliEmcalClusTrackMatcherTask() :
21 AliAnalysisTaskEmcal("AliEmcalClusTrackMatcherTask"),
22 fDoClusTrack(1),
23 fDoTrackClus(0),
24 fMaxDistance(0.1)
25{
26 // Constructor.
27}
28
aee86258 29//________________________________________________________________________
30AliEmcalClusTrackMatcherTask::AliEmcalClusTrackMatcherTask(const char *name) :
d258e37e 31 AliAnalysisTaskEmcal(name),
34df23d8 32 fDoClusTrack(1),
d258e37e 33 fDoTrackClus(0),
34 fMaxDistance(0.1)
aee86258 35{
36 // Standard constructor.
aee86258 37}
38
39//________________________________________________________________________
40AliEmcalClusTrackMatcherTask::~AliEmcalClusTrackMatcherTask()
41{
8bec746d 42 // Destructor.
aee86258 43}
44
45//________________________________________________________________________
d258e37e 46Bool_t AliEmcalClusTrackMatcherTask::Run()
aee86258 47{
d258e37e 48 // Run the matching for the selected options.
49
50 if (fDoClusTrack)
51 DoMatching(fCaloClusters, fTracks);
52
53 if (fDoTrackClus)
54 DoMatching(fTracks, fCaloClusters);
55
56 return kTRUE;
aee86258 57}
58
59//________________________________________________________________________
d258e37e 60void AliEmcalClusTrackMatcherTask::DoMatching(TClonesArray *array1, TClonesArray *array2)
aee86258 61{
d258e37e 62 // Do the actual matching.
64b4d2f2 63
d258e37e 64 if (!array1 || !array2)
64b4d2f2 65 return;
64b4d2f2 66
d258e37e 67 const Int_t n1 = array1->GetEntries();
68 const Int_t n2 = array2->GetEntries();
69 for (Int_t i = 0; i < n1; ++i) {
70 AliEmcalParticle *part1 = static_cast<AliEmcalParticle*>(array1->At(i));
71 if (!part1)
72 continue;
73
74 AliVCluster *cluster1 = part1->GetCluster();
75 AliVTrack *track1 = part1->GetTrack() ;
76
77 if ((!cluster1 || !AcceptCluster(cluster1)) &&
78 (!track1 || !AcceptTrack(track1)))
79 continue;
80
81 part1->ResetMatchedObjects();
82
83 for (Int_t j = 0; j < n2; ++j) {
84
85 AliEmcalParticle *part2 = static_cast<AliEmcalParticle*>(array2->At(j));
86 if (!part2)
87 continue;
88
89 AliVCluster *cluster2 = part2->GetCluster();
90 AliVTrack *track2 = part2->GetTrack() ;
91
92 if ((!cluster2 || !AcceptCluster(cluster2)) &&
93 (!track2 || !AcceptTrack(track2)))
94 continue;
95
96 Double_t deta = 999;
97 Double_t dphi = 999;
98 if (track1 && cluster2)
99 AliPicoTrack::GetEtaPhiDiff(track1, cluster2, dphi, deta);
100 else if (track2 && cluster1)
101 AliPicoTrack::GetEtaPhiDiff(track2, cluster1, dphi, deta);
102 else
103 continue;
104
105 Double_t d = TMath::Sqrt(deta * deta + dphi * dphi);
106 if(d < fMaxDistance)
107 part1->AddMatchedObj(j, d);
34df23d8 108 }
d258e37e 109
110 if (part1->GetNumberOfMatchedObj() > 0) {
111 if (track1) {
112 track1->SetEMCALcluster(part1->GetMatchedObjId());
113 } else if (cluster1) {
114 const UInt_t matchedId = part1->GetMatchedObjId();
115 Double_t deta = 999;
116 Double_t dphi = 999;
117 AliEmcalParticle *part2 = static_cast<AliEmcalParticle*>(array2->At(matchedId));
118 AliVTrack *track2 = 0;
119 if (part2)
120 track2 = part2->GetTrack();
121 if (track2) {
122 AliPicoTrack::GetEtaPhiDiff(track2, cluster1, dphi, deta);
123 cluster1->SetEmcCpvDistance(matchedId);
124 cluster1->SetTrackDistance(deta, dphi);
125 }
64b4d2f2 126 }
aee86258 127 }
aee86258 128 }
aee86258 129}