]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/clusters.C
With Cvetan: two hacks to make it work again:
[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   // Hack - AliReconstruction does wonders with gGeoManager.
31   TGeoManager* xxx = gGeoManager; gGeoManager = 0;
32   AliReconstruction* reco = new AliReconstruction;
33   gGeoManager = xxx;
34
35   // Hack for ITS - it requires RecoParams outside event-loop!
36   reco.SetRecoParam("ITS", AliITSRecoParam::GetLowFluxParam());
37
38   reco->ImportRunLoader(rl);
39   {
40     TString alldets;
41     for (Int_t i = 0; i < detN; ++i) {
42       alldets += detNames[i];
43       alldets += " ";
44     }
45     reco->CreateTrackers(alldets);
46   }
47
48   TObjArray* clarr = new TObjArray();
49
50   // Load clusters, fill them into clarr.
51
52   for (Int_t i = 0; i < detN; ++i)
53   {
54     Int_t det = detIds[i];
55     rl->LoadRecPoints(detNames[i]);
56
57     TTree *cTree = rl->GetTreeR(detNames[i], false);
58     if (cTree == 0)
59       continue;
60
61     AliTracker* tracker = reco->GetTracker(det);
62     tracker->LoadClusters(cTree);
63     tracker->FillClusterArray(clarr);
64   }
65
66   // Loop over tracks and friends, tag used clusters.
67
68   for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
69   {
70     AliESDtrack* at = esd->GetTrack(n);
71
72     Int_t idx[200];
73     for (Int_t i = 0; i < detN; ++i)
74     {
75       Int_t det = detIds[i];
76       AliTracker* tracker = reco->GetTracker(det);
77       Int_t nclusters = at->GetClusters(det, idx);
78       Int_t p=0;
79       for (Int_t c = 0; c < nclusters; )
80       {
81         Int_t index = idx[p++];
82         if (index < 0) continue;
83         c++;
84         AliCluster* cluster = tracker->GetCluster(index);
85         if (cluster) cluster->IncreaseClusterUsage();
86         //else printf("Zero cluster pointer for detector: %s\n",detNames[i]);
87       }
88     }
89   }
90
91   for (Int_t i = 0; i < detN; ++i)
92     rl->UnloadRecPoints(detNames[i]);
93
94   // Fill visualization structs
95
96   TEveElementList* list = new TEveElementList("Clusters");
97   gEve->AddElement(list);
98
99   TEvePointSet* shared = new TEvePointSet("Shared Clusters");
100   shared->SetMainColor(2);
101   shared->SetMarkerSize(0.4);
102   shared->SetMarkerStyle(2);
103   list->AddElement(shared);
104
105   TEvePointSet* used = new TEvePointSet("Single-used Clusters");
106   used->SetMainColor(3);
107   used->SetMarkerSize(0.4);
108   used->SetMarkerStyle(2);
109   list->AddElement(used);
110
111   TEvePointSet* nonused = new TEvePointSet("Not-used Clusters");
112   nonused->SetMainColor(4);
113   nonused->SetMarkerSize(0.4);
114   nonused->SetMarkerStyle(2);
115   list->AddElement(nonused);
116
117   // Loop over all clusters, fill appropriate container based
118   // on shared/used information.
119
120   Int_t ncl = clarr->GetEntriesFast();
121   for (Int_t i = 0; i < ncl; ++i)
122   {
123     AliCluster   *cluster = (AliCluster*) clarr->UncheckedAt(i);
124     TEvePointSet *dest    = 0;
125     if (cluster->IsClusterShared())
126       dest = shared;
127     else if (cluster->IsClusterUsed())
128       dest = used;
129     else
130       dest = nonused;
131
132     Float_t g[3]; //global coordinates
133     cluster->GetGlobalXYZ(g);
134     dest->SetNextPoint(g[0], g[1], g[2]);
135     dest->SetPointId(cluster);
136   }
137
138   delete clarr;
139
140   // ??? What to do with trackers ???
141   // I'd propose: have global reconstruction that owns them.
142   // AliEveEventManager::AssertAliReconstruction();
143   // do we have bit-field for detectors, like
144   // enum AliDetectors_e {
145   //    kITS = BIT(0),
146   //    kTPC = BIT(1),
147   //    ...
148   //    kCentralTracking = kITS | kTPC | kTRD | kTOF,
149   //    ...
150   //  };
151
152   gEve->Redraw3D();
153 }