2 #include <TEveManager.h>
3 #include <TEvePointSet.h>
4 #include <EveBase/AliEveEventManager.h>
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"
17 AliEveEventManager::AssertGeometry();
19 AliRunLoader *rl = AliEveEventManager::AssertRunLoader();
20 AliESDEvent *esd = AliEveEventManager::AssertESD();
21 AliESDfriend *esdfriend = AliEveEventManager::AssertESDfriend();
22 AliMagF *magfield = AliEveEventManager::AssertMagField();
24 AliTracker::SetFieldMap(magfield, kFALSE);
26 const char* detNames[] = { "ITS", "TPC", "TRD", "TOF", "HMPID" };
27 const Int_t detIds[] = { 0, 1, 2, 3, 5 };
28 const Int_t detN = sizeof(detNames)/sizeof(char*);
30 AliReconstruction* reco = new AliReconstruction;
31 reco->ImportRunLoader(rl);
34 for (Int_t i = 0; i < detN; ++i) {
35 alldets += detNames[i];
38 reco->CreateTrackers(alldets);
41 TObjArray* clarr = new TObjArray();
43 // Load clusters, fill them into clarr.
45 for (Int_t i = 0; i < detN; ++i)
47 Int_t det = detIds[i];
48 rl->LoadRecPoints(detNames[i]);
50 TTree *cTree = rl->GetTreeR(detNames[i], false);
54 AliTracker* tracker = reco->GetTracker(det);
55 tracker->LoadClusters(cTree);
56 tracker->FillClusterArray(clarr);
59 // Loop over tracks and friends, tag used clusters.
61 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
63 AliESDtrack* at = esd->GetTrack(n);
66 for (Int_t i = 0; i < detN; ++i)
68 Int_t det = detIds[i];
69 AliTracker* tracker = reco->GetTracker(det);
70 Int_t nclusters = at->GetClusters(det, idx);
71 for (Int_t c = 0; c < nclusters; ++c)
74 if (index >= 0) // Needed for TRD storing negative values.
76 AliCluster* cluster = tracker->GetCluster(index);
77 if (cluster) // Needed for TPC returning 0 sometimes.
78 cluster->IncreaseClusterUsage();
84 // Fill visualization structs
86 TEveElementList* list = new TEveElementList("Clusters");
87 gEve->AddElement(list);
89 TEvePointSet* shared = new TEvePointSet("Shared Clusters");
90 shared->SetMainColor((Color_t)2);
91 shared->SetMarkerSize(0.4);
92 shared->SetMarkerStyle(2);
93 list->AddElement(shared);
95 TEvePointSet* used = new TEvePointSet("Single-used Clusters");
96 used->SetMainColor((Color_t)3);
97 used->SetMarkerSize(0.4);
98 used->SetMarkerStyle(2);
99 list->AddElement(used);
101 TEvePointSet* nonused = new TEvePointSet("Not-used Clusters");
102 nonused->SetMainColor((Color_t)4);
103 nonused->SetMarkerSize(0.4);
104 nonused->SetMarkerStyle(2);
105 list->AddElement(nonused);
107 // Loop over all clusters, fill appropriate container based
108 // on shared/used information.
110 Int_t ncl = clarr->GetEntriesFast();
111 for (Int_t i = 0; i < ncl; ++i)
113 AliCluster *cluster = (AliCluster*) clarr->UncheckedAt(i);
114 TEvePointSet *dest = 0;
115 if (cluster->IsClusterShared())
117 else if (cluster->IsClusterUsed())
122 Float_t g[3]; //global coordinates
123 cluster->GetGlobalXYZ(g);
124 dest->SetNextPoint(g[0], g[1], g[2]);
125 dest->SetPointId(cluster);
130 // ??? What to do with trackers ???
131 // I'd propose: have global reconstruction that owns them.
132 // AliEveEventManager::AssertAliReconstruction();
133 // do we have bit-field for detectors, like
134 // enum AliDetectors_e {
138 // kCentralTracking = kITS | kTPC | kTRD | kTOF,