]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/alice-macros/clusters.C
Merge of EVE-dev branch.
[u/mrichter/AliRoot.git] / EVE / alice-macros / clusters.C
CommitLineData
bca2f0a5 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
15void 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
3225076c 26 const char* detNames[] = { "ITS", "TPC", "TRD", "TOF", "HMPID" };
27 const Int_t detIds[] = { 0, 1, 2, 3, 5 };
bca2f0a5 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
6b6f47ac 84 for (Int_t i = 0; i < detN; ++i)
85 rl->UnloadRecPoints(detNames[i]);
86
bca2f0a5 87 // Fill visualization structs
88
89 TEveElementList* list = new TEveElementList("Clusters");
90 gEve->AddElement(list);
91
92 TEvePointSet* shared = new TEvePointSet("Shared Clusters");
fbc350a3 93 shared->SetMainColor(2);
bca2f0a5 94 shared->SetMarkerSize(0.4);
95 shared->SetMarkerStyle(2);
96 list->AddElement(shared);
97
98 TEvePointSet* used = new TEvePointSet("Single-used Clusters");
fbc350a3 99 used->SetMainColor(3);
bca2f0a5 100 used->SetMarkerSize(0.4);
101 used->SetMarkerStyle(2);
102 list->AddElement(used);
103
104 TEvePointSet* nonused = new TEvePointSet("Not-used Clusters");
fbc350a3 105 nonused->SetMainColor(4);
bca2f0a5 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}