]>
Commit | Line | Data |
---|---|---|
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 | |
10 | ClassImp(AliEmcalClusTrackMatcherTask) | |
11 | ||
aee86258 | 12 | //________________________________________________________________________ |
13 | AliEmcalClusTrackMatcherTask::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 | //________________________________________________________________________ | |
29 | AliEmcalClusTrackMatcherTask::~AliEmcalClusTrackMatcherTask() | |
30 | { | |
31 | // Destructor | |
32 | } | |
33 | ||
34 | //________________________________________________________________________ | |
35 | void AliEmcalClusTrackMatcherTask::UserCreateOutputObjects() | |
36 | { | |
37 | // Create user objects. | |
aee86258 | 38 | } |
39 | ||
40 | //________________________________________________________________________ | |
41 | void 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 | //________________________________________________________________________ | |
123 | void AliEmcalClusTrackMatcherTask::Terminate(Option_t *) | |
124 | { | |
125 | // Called once at the end of the analysis. | |
126 | ||
127 | } |