]>
Commit | Line | Data |
---|---|---|
bca2f0a5 | 1 | #ifndef __CINT__ |
2 | #include <TEveManager.h> | |
3 | #include <TEvePointSet.h> | |
4 | #include <EveBase/AliEveEventManager.h> | |
5 | ||
6 | #include "AliRunLoader.h" | |
7 | #include "AliCluster.h" | |
8 | #include "AliTracker.h" | |
9 | #include "AliReconstruction.h" | |
10 | #include "AliESDEvent.h" | |
11 | #include "AliESDtrack.h" | |
12 | #include "AliESDfriend.h" | |
13 | #endif | |
14 | ||
15 | void clusters() | |
16 | { | |
17 | AliEveEventManager::AssertGeometry(); | |
18 | ||
19 | AliRunLoader *rl = AliEveEventManager::AssertRunLoader(); | |
20 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
21 | AliESDfriend *esdfriend = AliEveEventManager::AssertESDfriend(); | |
22 | AliMagF *magfield = AliEveEventManager::AssertMagField(); | |
23 | ||
24 | AliTracker::SetFieldMap(magfield, kFALSE); | |
25 | ||
3225076c | 26 | const char* detNames[] = { "ITS", "TPC", "TRD", "TOF", "HMPID" }; |
27 | const Int_t detIds[] = { 0, 1, 2, 3, 5 }; | |
bca2f0a5 | 28 | const Int_t detN = sizeof(detNames)/sizeof(char*); |
29 | ||
30 | AliReconstruction* reco = new AliReconstruction; | |
31 | reco->ImportRunLoader(rl); | |
32 | { | |
33 | TString alldets; | |
34 | for (Int_t i = 0; i < detN; ++i) { | |
35 | alldets += detNames[i]; | |
36 | alldets += " "; | |
37 | } | |
38 | reco->CreateTrackers(alldets); | |
39 | } | |
40 | ||
41 | TObjArray* clarr = new TObjArray(); | |
42 | ||
43 | // Load clusters, fill them into clarr. | |
44 | ||
45 | for (Int_t i = 0; i < detN; ++i) | |
46 | { | |
47 | Int_t det = detIds[i]; | |
48 | rl->LoadRecPoints(detNames[i]); | |
49 | ||
50 | TTree *cTree = rl->GetTreeR(detNames[i], false); | |
51 | if (cTree == 0) | |
52 | continue; | |
53 | ||
54 | AliTracker* tracker = reco->GetTracker(det); | |
55 | tracker->LoadClusters(cTree); | |
56 | tracker->FillClusterArray(clarr); | |
57 | } | |
58 | ||
59 | // Loop over tracks and friends, tag used clusters. | |
60 | ||
61 | for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n) | |
62 | { | |
63 | AliESDtrack* at = esd->GetTrack(n); | |
64 | ||
65 | Int_t idx[200]; | |
66 | for (Int_t i = 0; i < detN; ++i) | |
67 | { | |
68 | Int_t det = detIds[i]; | |
69 | AliTracker* tracker = reco->GetTracker(det); | |
70 | Int_t nclusters = at->GetClusters(det, idx); | |
f63f6252 | 71 | Int_t p=0; |
72 | for (Int_t c = 0; c < nclusters; ) | |
bca2f0a5 | 73 | { |
f63f6252 | 74 | Int_t index = idx[p++]; |
75 | if (index < 0) continue; | |
76 | c++; | |
77 | AliCluster* cluster = tracker->GetCluster(index); | |
78 | if (cluster) cluster->IncreaseClusterUsage(); | |
79 | //else printf("Zero cluster pointer for detector: %s\n",detNames[i]); | |
bca2f0a5 | 80 | } |
81 | } | |
82 | } | |
83 | ||
6b6f47ac | 84 | for (Int_t i = 0; i < detN; ++i) |
85 | rl->UnloadRecPoints(detNames[i]); | |
86 | ||
bca2f0a5 | 87 | // Fill visualization structs |
88 | ||
89 | TEveElementList* list = new TEveElementList("Clusters"); | |
90 | gEve->AddElement(list); | |
91 | ||
92 | TEvePointSet* shared = new TEvePointSet("Shared Clusters"); | |
fbc350a3 | 93 | shared->SetMainColor(2); |
bca2f0a5 | 94 | shared->SetMarkerSize(0.4); |
95 | shared->SetMarkerStyle(2); | |
96 | list->AddElement(shared); | |
97 | ||
98 | TEvePointSet* used = new TEvePointSet("Single-used Clusters"); | |
fbc350a3 | 99 | used->SetMainColor(3); |
bca2f0a5 | 100 | used->SetMarkerSize(0.4); |
101 | used->SetMarkerStyle(2); | |
102 | list->AddElement(used); | |
103 | ||
104 | TEvePointSet* nonused = new TEvePointSet("Not-used Clusters"); | |
fbc350a3 | 105 | nonused->SetMainColor(4); |
bca2f0a5 | 106 | nonused->SetMarkerSize(0.4); |
107 | nonused->SetMarkerStyle(2); | |
108 | list->AddElement(nonused); | |
109 | ||
110 | // Loop over all clusters, fill appropriate container based | |
111 | // on shared/used information. | |
112 | ||
113 | Int_t ncl = clarr->GetEntriesFast(); | |
114 | for (Int_t i = 0; i < ncl; ++i) | |
115 | { | |
116 | AliCluster *cluster = (AliCluster*) clarr->UncheckedAt(i); | |
117 | TEvePointSet *dest = 0; | |
118 | if (cluster->IsClusterShared()) | |
119 | dest = shared; | |
120 | else if (cluster->IsClusterUsed()) | |
121 | dest = used; | |
122 | else | |
123 | dest = nonused; | |
124 | ||
125 | Float_t g[3]; //global coordinates | |
126 | cluster->GetGlobalXYZ(g); | |
127 | dest->SetNextPoint(g[0], g[1], g[2]); | |
128 | dest->SetPointId(cluster); | |
129 | } | |
130 | ||
131 | delete clarr; | |
132 | ||
133 | // ??? What to do with trackers ??? | |
134 | // I'd propose: have global reconstruction that owns them. | |
135 | // AliEveEventManager::AssertAliReconstruction(); | |
136 | // do we have bit-field for detectors, like | |
137 | // enum AliDetectors_e { | |
138 | // kITS = BIT(0), | |
139 | // kTPC = BIT(1), | |
140 | // ... | |
141 | // kCentralTracking = kITS | kTPC | kTRD | kTOF, | |
142 | // ... | |
143 | // }; | |
144 | ||
145 | gEve->Redraw3D(); | |
146 | } |