]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/clusters.C
0f300ed08de0ce5a939f0f2f8d23b17692c047c1
[u/mrichter/AliRoot.git] / EVE / alice-macros / clusters.C
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
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*);
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);
71       for (Int_t c = 0; c < nclusters; ++c)
72       {
73         Int_t index = idx[c];
74         if (index >= 0) // Needed for TRD storing negative values.
75         {
76           AliCluster* cluster = tracker->GetCluster(index);
77           if (cluster) // Needed for TPC returning 0 sometimes.
78             cluster->IncreaseClusterUsage();
79         }
80       }
81     }
82   }
83
84   // Fill visualization structs
85
86   TEveElementList* list = new TEveElementList("Clusters");
87   gEve->AddElement(list);
88
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);
94
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);
100
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);
106
107   // Loop over all clusters, fill appropriate container based
108   // on shared/used information.
109
110   Int_t ncl = clarr->GetEntriesFast();
111   for (Int_t i = 0; i < ncl; ++i)
112   {
113     AliCluster   *cluster = (AliCluster*) clarr->UncheckedAt(i);
114     TEvePointSet *dest    = 0;
115     if (cluster->IsClusterShared())
116       dest = shared;
117     else if (cluster->IsClusterUsed())
118       dest = used;
119     else
120       dest = nonused;
121
122     Float_t g[3]; //global coordinates
123     cluster->GetGlobalXYZ(g);
124     dest->SetNextPoint(g[0], g[1], g[2]);
125     dest->SetPointId(cluster);
126   }
127
128   delete clarr;
129
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 {
135   //    kITS = BIT(0),
136   //    kTPC = BIT(1),
137   //    ...
138   //    kCentralTracking = kITS | kTPC | kTRD | kTOF,
139   //    ...
140   //  };
141
142   gEve->Redraw3D();
143 }