* AliEveTrack
[u/mrichter/AliRoot.git] / EVE / alice-macros / clusters_from_index.C
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 TEvePointSet* clusters_from_index(Int_t index=0, TEveElement* cont=0)
11 {
12   AliESDEvent* esd = AliEveEventManager::AssertESD();
13
14   if (index < 0) {
15     Warning("clusters_from_index", "index not set.");
16     return 0;
17   }
18
19   if (index >= esd->GetNumberOfTracks()) {
20     Warning("clusters_from_index", "index out of range");
21     return 0;
22   }
23
24   TEvePointSet* clusters = new TEvePointSet(64);
25   clusters->SetOwnIds(kTRUE);
26
27   AliESDtrack* at = esd->GetTrack(index);
28   const AliTrackPointArray* pArr = at->GetTrackPointArray();
29   if (pArr == 0) {
30     Warning("clusters_from_index", "TrackPointArray not stored with ESD track.");
31     continue;
32   }
33   Int_t np =  pArr->GetNPoints();
34   const Float_t* x = pArr->GetX();
35   const Float_t* y = pArr->GetY();
36   const Float_t* z = pArr->GetZ();
37   for (Int_t i=0; i<np; ++i) {
38     clusters->SetNextPoint(x[i], y[i], z[i]);
39     AliTrackPoint *atp = new AliTrackPoint;
40     pArr->GetPoint(*atp, i);
41     clusters->SetPointId(atp);    }
42
43
44   if(clusters->Size() == 0 && gEve->GetKeepEmptyCont() == kFALSE) {
45     Warning("clusters_from_index", Form("No clusters for index '%d'", index));
46     delete clusters;
47     return 0;
48   }
49
50   clusters->SetMarkerStyle(2);
51   clusters->SetMarkerSize(2);
52   clusters->SetMarkerColor(4);
53
54   clusters->SetName(Form("Clusters idx=%d", index));
55   clusters->SetTitle(Form("N=%d", clusters->Size()));
56
57   gEve->AddElement(clusters);
58
59   if (gMultiView)
60   {
61     gMultiView->ImportEventRPhi(clusters);
62     gMultiView->ImportEventRhoZ(clusters);
63   }
64
65   gEve->Redraw3D();
66
67   return clusters;
68 }