]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/NLT_trackcount_init.C
Set center of the projection to the primary vertex.
[u/mrichter/AliRoot.git] / EVE / alice-macros / NLT_trackcount_init.C
1 namespace Reve
2 {
3 class NLTProjector;
4 class GeoShapeRnrEl;
5 class RnrElement*;
6 }
7
8 Reve::NLTProjector  * proj = 0;
9 Reve::GeoShapeRnrEl * geom = 0;
10
11 void NLT_trackcount_init()
12 {
13   Reve::LoadMacro("alieve_init.C");
14   alieve_init(".", -1);
15
16   Reve::LoadMacro("geom_gentle.C");
17
18   Reve::LoadMacro("primary_vertex.C");
19   Reve::LoadMacro("esd_tracks.C");
20   Reve::LoadMacro("its_clusters.C+");
21   Reve::LoadMacro("tpc_clusters.C+");
22
23   TGLViewer* v = (TGLViewer *)gReve->GetGLViewer();
24   v->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
25   TGLCameraMarkupStyle* mup = v->GetCameraMarkup();
26   if(mup) mup->SetShow(kFALSE);
27
28   Reve::TrackCounter* g_trkcnt = new Reve::TrackCounter("Primary Counter");
29   gReve->AddToListTree(g_trkcnt, kFALSE);
30
31   Reve::Scene* s = gReve->SpawnNewScene("Projected Event");
32   gReve->GetDefViewer()->RemoveElements();
33   gReve->GetDefViewer()->AddScene(s);
34
35   Reve::NLTProjector* p = new Reve::NLTProjector; proj = p;
36   gReve->AddToListTree(p, kTRUE);
37   gReve->AddRenderElement(proj, s);
38
39   // geometry
40   Reve::GeoShapeRnrEl* gg = geom_gentle();
41   geom = gg;
42
43   // event
44   Alieve::gEvent->AddNewEventCommand("on_new_event();");
45   Alieve::gEvent->GotoEvent(0);
46
47   gReve->Redraw3D(kTRUE);
48 }
49
50 /**************************************************************************/
51
52 void on_new_event()
53 {
54   Reve::PointSet* itsc = its_clusters();
55   itsc->SetMarkerColor(5);
56
57   Reve::PointSet* tpcc = tpc_clusters();
58   tpcc->SetMarkerColor(4);
59
60   primary_vertex(1, 1);
61
62   Reve::RenderElementList* cont = esd_tracks_vertex_cut();
63
64   // Here we expect five TrackList containers.
65   // First two have reasonable primaries (sigma-to-prim-vertex < 5).
66   // Other three are almost certainly secondaries.
67   Int_t count = 1;
68   Reve::TrackCounter* g_trkcnt = Reve::TrackCounter::fgInstance;
69   g_trkcnt->Reset();
70   g_trkcnt->SetEventId(Alieve::gEvent->GetEventId());
71   Reve::RenderElement::List_i i = cont->BeginChildren();
72   while (i != cont->EndChildren()) {
73     Reve::TrackList* l = dynamic_cast<Reve::TrackList*>(*i);
74     if (l != 0) {
75       l->SetLineWidth(2);
76       g_trkcnt->RegisterTracks(l, (count <= 2));
77       ++count;
78     }
79     ++i;
80   }
81
82   Reve::RenderElement* top = gReve->GetCurrentEvent();
83   proj->DestroyElements();
84   AliESDEvent* esd = Alieve::Event::AssertESD();
85   Double_t x[3];
86   esd->GetPrimaryVertex()->GetXYZ(x);
87   proj->SetCenter(x[0], x[1], x[2]);
88
89   // geom
90   proj->ImportElements(geom);
91   // event
92   proj->ImportElements(top);
93   // top->SetRnrState(kFALSE);
94 }
95
96 /**************************************************************************/
97
98 TParticle* id(Int_t label=0, Bool_t showParents=kTRUE)
99 {
100   AliRunLoader* rl = Alieve::Event::AssertRunLoader();
101   rl->LoadKinematics();
102   AliStack* stack = rl->Stack();
103
104   printf("Number primaries %d, all particles %d, label %d\n",
105          stack->GetNprimary(), stack->GetNtrack(), label);
106   if (label < 0 || label >= stack->GetNtrack()) {
107     printf("  Label exceeds available range.\n");
108     return 0;
109   }
110
111   TParticle* part = stack->Particle(label);
112   if(part != 0) {
113     part->Print();
114     if(showParents) {
115       while(part->GetMother(0) >= 0) {
116         part = stack->Particle(part->GetMother(0));
117         part->Print();
118       }
119     }
120   }
121   return stack->Particle(label);
122 }