2 #include <TEveManager.h>
3 #include <TEvePointSet.h>
4 #include <TGeoManager.h>
5 #include <EveBase/AliEveEventManager.h>
7 #include "AliRunLoader.h"
8 #include "AliCluster.h"
9 #include "AliTracker.h"
10 #include "AliReconstruction.h"
11 #include "AliESDEvent.h"
12 #include "AliESDtrack.h"
13 #include "AliESDfriend.h"
15 #include "ITS/AliITSRecoParam.h"
20 AliEveEventManager::AssertGeometry();
22 AliRunLoader *rl = AliEveEventManager::AssertRunLoader();
23 AliESDEvent *esd = AliEveEventManager::AssertESD();
24 AliESDfriend *esdfriend = AliEveEventManager::AssertESDfriend();
25 AliMagF *magfield = AliEveEventManager::AssertMagField();
27 AliTracker::SetFieldMap(magfield, kFALSE);
29 const char* detNames[] = { "ITS", "TPC", "TRD", "TOF", "HMPID" };
30 const Int_t detIds[] = { 0, 1, 2, 3, 5 };
31 const Int_t detN = sizeof(detNames)/sizeof(char*);
33 // Hack - AliReconstruction does wonders with gGeoManager.
34 TGeoManager* xxx = gGeoManager; gGeoManager = 0;
35 AliReconstruction* reco = new AliReconstruction;
38 // Hack for ITS - it requires RecoParams outside event-loop!
39 reco->SetRecoParam("ITS", AliITSRecoParam::GetLowFluxParam());
41 reco->ImportRunLoader(rl);
44 for (Int_t i = 0; i < detN; ++i) {
45 alldets += detNames[i];
48 reco->CreateTrackers(alldets);
51 TObjArray* clarr = new TObjArray();
53 // Load clusters, fill them into clarr.
55 for (Int_t i = 0; i < detN; ++i)
57 Int_t det = detIds[i];
58 rl->LoadRecPoints(detNames[i]);
60 TTree *cTree = rl->GetTreeR(detNames[i], false);
64 AliTracker* tracker = reco->GetTracker(det);
65 if (tracker == 0) continue;
66 tracker->LoadClusters(cTree);
67 tracker->FillClusterArray(clarr);
70 // Loop over tracks and friends, tag used clusters.
72 for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
74 AliESDtrack* at = esd->GetTrack(n);
77 for (Int_t i = 0; i < detN; ++i)
79 Int_t det = detIds[i];
80 AliTracker* tracker = reco->GetTracker(det);
81 if (tracker == 0) continue;
82 Int_t nclusters = at->GetClusters(det, idx);
84 for (Int_t c = 0; c < nclusters; )
86 Int_t index = idx[p++];
87 if (index < 0) continue;
89 AliCluster* cluster = tracker->GetCluster(index);
90 if (cluster) cluster->IncreaseClusterUsage();
91 //else printf("Zero cluster pointer for detector: %s\n",detNames[i]);
96 for (Int_t i = 0; i < detN; ++i)
97 rl->UnloadRecPoints(detNames[i]);
99 // Fill visualization structs
101 TEveElementList* list = new TEveElementList("Clusters");
102 gEve->AddElement(list);
104 TEvePointSet* shared = new TEvePointSet("Shared Clusters");
105 shared->SetMainColor(2);
106 shared->SetMarkerSize(0.4);
107 shared->SetMarkerStyle(2);
108 list->AddElement(shared);
110 TEvePointSet* used = new TEvePointSet("Single-used Clusters");
111 used->SetMainColor(3);
112 used->SetMarkerSize(0.4);
113 used->SetMarkerStyle(2);
114 list->AddElement(used);
116 TEvePointSet* nonused = new TEvePointSet("Not-used Clusters");
117 nonused->SetMainColor(4);
118 nonused->SetMarkerSize(0.4);
119 nonused->SetMarkerStyle(2);
120 list->AddElement(nonused);
122 // Loop over all clusters, fill appropriate container based
123 // on shared/used information.
125 Int_t ncl = clarr->GetEntriesFast();
126 for (Int_t i = 0; i < ncl; ++i)
128 AliCluster *cluster = (AliCluster*) clarr->UncheckedAt(i);
129 TEvePointSet *dest = 0;
130 if (cluster->IsClusterShared())
132 else if (cluster->IsClusterUsed())
137 Float_t g[3]; //global coordinates
138 cluster->GetGlobalXYZ(g);
139 dest->SetNextPoint(g[0], g[1], g[2]);
140 dest->SetPointId(cluster);
145 // ??? What to do with trackers ???
146 // I'd propose: have global reconstruction that owns them.
147 // AliEveEventManager::AssertAliReconstruction();
148 // do we have bit-field for detectors, like
149 // enum AliDetectors_e {
153 // kCentralTracking = kITS | kTPC | kTRD | kTOF,