3 // Track/cluster matcher
5 // Author: C.Loizides, S.Aiola
7 #include "AliEmcalClusTrackMatcherTask.h"
9 #include <TClonesArray.h>
11 #include "AliEmcalParticle.h"
13 #include "AliPicoTrack.h"
14 #include "AliVCluster.h"
15 #include "AliVTrack.h"
17 ClassImp(AliEmcalClusTrackMatcherTask)
19 //________________________________________________________________________
20 AliEmcalClusTrackMatcherTask::AliEmcalClusTrackMatcherTask() :
21 AliAnalysisTaskEmcal("AliEmcalClusTrackMatcherTask",kFALSE),
27 //________________________________________________________________________
28 AliEmcalClusTrackMatcherTask::AliEmcalClusTrackMatcherTask(const char *name) :
29 AliAnalysisTaskEmcal(name,kFALSE),
32 // Standard constructor.
35 //________________________________________________________________________
36 AliEmcalClusTrackMatcherTask::~AliEmcalClusTrackMatcherTask()
41 //________________________________________________________________________
42 Bool_t AliEmcalClusTrackMatcherTask::Run()
44 // Run the matching for the selected options.
46 const Double_t maxd2 = fMaxDistance*fMaxDistance;
48 const Int_t nC = fCaloClusters->GetEntries();
49 const Int_t nT = fTracks->GetEntries();
51 // set the links between tracks and clusters
52 for (Int_t c = 0; c < nC; ++c) {
53 AliEmcalParticle *partC = static_cast<AliEmcalParticle*>(fCaloClusters->At(c));
56 if (!AcceptEmcalPart(partC))
58 for (Int_t t = 0; t < nT; ++t) {
59 AliEmcalParticle *partT = static_cast<AliEmcalParticle*>(fTracks->At(t));
62 if (!AcceptEmcalPart(partT))
64 AliVCluster *clust = partC->GetCluster();
65 AliVTrack *track = partT->GetTrack() ;
68 AliPicoTrack::GetEtaPhiDiff(track, clust, dphi, deta);
69 Double_t d2 = deta * deta + dphi * dphi;
72 Double_t d = TMath::Sqrt(d2);
73 partC->AddMatchedObj(t, d);
74 partT->AddMatchedObj(c, d);
78 for (Int_t c = 0; c < nC; ++c) {
79 AliEmcalParticle *partC = static_cast<AliEmcalParticle*>(fCaloClusters->At(c));
82 if (partC->GetNumberOfMatchedObj() <= 0)
84 const UInt_t matchedId = partC->GetMatchedObjId();
85 AliEmcalParticle *partT = static_cast<AliEmcalParticle*>(fTracks->At(matchedId));
86 AliVCluster *clust = partC->GetCluster();
87 AliVTrack *track = partT->GetTrack() ;
90 AliPicoTrack::GetEtaPhiDiff(track, clust, dphi, deta);
91 clust->SetEmcCpvDistance(matchedId);
92 clust->SetTrackDistance(deta, dphi);
95 for (Int_t t = 0; t < nT; ++t) {
96 AliEmcalParticle *partT = static_cast<AliEmcalParticle*>(fTracks->At(t));
99 if (partT->GetNumberOfMatchedObj() <= 0)
101 AliVTrack *track = partT->GetTrack();
102 track->SetEMCALcluster(partT->GetMatchedObjId());