]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/clusters.C
From Alexandru: new/improved TRD macros.
[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   for (Int_t i = 0; i < detN; ++i)
85     rl->UnloadRecPoints(detNames[i]);
86
87   // Fill visualization structs
88
89   TEveElementList* list = new TEveElementList("Clusters");
90   gEve->AddElement(list);
91
92   TEvePointSet* shared = new TEvePointSet("Shared Clusters");
93   shared->SetMainColor((Color_t)2);
94   shared->SetMarkerSize(0.4);
95   shared->SetMarkerStyle(2);
96   list->AddElement(shared);
97
98   TEvePointSet* used = new TEvePointSet("Single-used Clusters");
99   used->SetMainColor((Color_t)3);
100   used->SetMarkerSize(0.4);
101   used->SetMarkerStyle(2);
102   list->AddElement(used);
103
104   TEvePointSet* nonused = new TEvePointSet("Not-used Clusters");
105   nonused->SetMainColor((Color_t)4);
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 }