2 #include <TEveManager.h>
3 #include <TEvePointSet.h>
4 #include <TGeoManager.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>
13 #include <AliITSRecoParam.h>
14 #include <AliEveEventManager.h>
19 AliEveEventManager::AssertGeometry();
21 AliRunLoader *rl = AliEveEventManager::AssertRunLoader();
22 AliESDEvent *esd = AliEveEventManager::AssertESD();
23 AliEveEventManager::AssertESDfriend();
24 AliEveEventManager::AssertMagField();
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 // Hack - AliReconstruction does wonders with gGeoManager.
31 TGeoManager* xxx = gGeoManager; gGeoManager = 0;
32 AliReconstruction* reco = new AliReconstruction;
35 // Hack for ITS - it requires RecoParams outside event-loop!
36 reco->SetRecoParam("ITS", AliITSRecoParam::GetLowFluxParam());
38 reco->ImportRunLoader(rl);
41 for (Int_t i = 0; i < detN; ++i) {
42 alldets += detNames[i];
45 reco->CreateTrackers(alldets);
48 TObjArray* clarr = new TObjArray();
50 // Load clusters, fill them into clarr.
52 for (Int_t i = 0; i < detN; ++i)
54 Int_t det = detIds[i];
55 rl->LoadRecPoints(detNames[i]);
57 TTree *cTree = rl->GetTreeR(detNames[i], false);
61 AliTracker* tracker = reco->GetTracker(det);
62 if (tracker == 0) continue;
63 tracker->LoadClusters(cTree);
64 tracker->FillClusterArray(clarr);
67 // Loop over tracks and friends, tag used clusters.
69 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
71 AliESDtrack* at = esd->GetTrack(n);
74 for (Int_t i = 0; i < detN; ++i)
76 Int_t det = detIds[i];
77 AliTracker* tracker = reco->GetTracker(det);
78 if (tracker == 0) continue;
79 Int_t nclusters = at->GetClusters(det, idx);
81 for (Int_t c = 0; c < nclusters; )
83 Int_t index = idx[p++];
84 if (index < 0) continue;
86 AliCluster* cluster = tracker->GetCluster(index);
87 if (cluster) cluster->IncreaseClusterUsage();
88 //else printf("Zero cluster pointer for detector: %s\n",detNames[i]);
93 for (Int_t i = 0; i < detN; ++i)
94 rl->UnloadRecPoints(detNames[i]);
96 // Fill visualization structs
98 TEveElementList* list = new TEveElementList("Clusters");
99 gEve->AddElement(list);
101 TEvePointSet* shared = new TEvePointSet("Shared Clusters");
102 shared->SetMainColor(2);
103 shared->SetMarkerSize(0.4);
104 shared->SetMarkerStyle(2);
105 list->AddElement(shared);
107 TEvePointSet* used = new TEvePointSet("Single-used Clusters");
108 used->SetMainColor(3);
109 used->SetMarkerSize(0.4);
110 used->SetMarkerStyle(2);
111 list->AddElement(used);
113 TEvePointSet* nonused = new TEvePointSet("Not-used Clusters");
114 nonused->SetMainColor(4);
115 nonused->SetMarkerSize(0.4);
116 nonused->SetMarkerStyle(2);
117 list->AddElement(nonused);
119 // Loop over all clusters, fill appropriate container based
120 // on shared/used information.
122 Int_t ncl = clarr->GetEntriesFast();
123 for (Int_t i = 0; i < ncl; ++i)
125 AliCluster *cluster = (AliCluster*) clarr->UncheckedAt(i);
126 TEvePointSet *dest = 0;
127 if (cluster->IsClusterShared())
129 else if (cluster->IsClusterUsed())
134 Float_t g[3]; //global coordinates
135 cluster->GetGlobalXYZ(g);
136 dest->SetNextPoint(g[0], g[1], g[2]);
137 dest->SetPointId(cluster);
142 // ??? What to do with trackers ???
143 // I'd propose: have global reconstruction that owns them.
144 // AliEveEventManager::AssertAliReconstruction();
145 // do we have bit-field for detectors, like
146 // enum AliDetectors_e {
150 // kCentralTracking = kITS | kTPC | kTRD | kTOF,