aef703ef0ff02335299ebb6083533df00d752cc9
[u/mrichter/AliRoot.git] / EVE / alice-macros / NLT_trackcount_init.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 class TEveProjectionManager;
11 class TEveGeoShape;
12 class TEveUtil;
13
14 TEveProjectionManager  *proj = 0;
15 TEveGeoShape *geom = 0;
16
17 void NLT_trackcount_init()
18 {
19   TEveUtil::LoadMacro("alieve_init.C");
20   alieve_init(".", -1);
21
22   TEveUtil::LoadMacro("geom_gentle.C");
23
24   TEveUtil::LoadMacro("primary_vertex.C");
25   TEveUtil::LoadMacro("esd_tracks.C");
26   TEveUtil::LoadMacro("its_clusters.C+");
27   TEveUtil::LoadMacro("tpc_clusters.C+");
28
29   TEveViewer* nv = gEve->SpawnNewViewer("NLT Projected");
30   TEveScene*  ns = gEve->SpawnNewScene("NLT");
31   nv->AddScene(ns);
32   TGLViewer* v = nv->GetGLViewer();
33   v->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
34   TGLCameraMarkupStyle* mup = v->GetCameraMarkup();
35   if(mup) mup->SetShow(kFALSE);
36
37   AliEveTrackFitter* fitter = new AliEveTrackFitter();
38   gEve->AddToListTree(fitter, 1);
39   gEve->AddElement(fitter, gEve->GetEventScene());
40
41   TEveTrackCounter* g_trkcnt = new TEveTrackCounter("Primary Counter");
42   gEve->AddToListTree(g_trkcnt, kFALSE);
43
44   TEveProjectionManager* pm = new TEveProjectionManager(); 
45   proj = pm;
46   gEve->AddToListTree(proj, kTRUE);
47   gEve->AddElement(proj, ns);
48   
49   TEveProjectionAxes* axes = new TEveProjectionAxes(proj);
50   axes->SetText("Projected Track-Count");
51   axes->SetFontFile("comicbd");
52   axes->SetFontSize(20);
53   gEve->AddElement(axes, ns);
54   gEve->AddToListTree(axes, kTRUE);
55
56   // geometry
57   TEveGeoShape* gg = geom_gentle();
58   geom = gg;
59
60   // event
61   gAliEveEvent->AddNewEventCommand("on_new_event();");
62   gAliEveEvent->GotoEvent(0);
63
64   gEve->Redraw3D(kTRUE);
65 }
66
67 /******************************************************************************/
68
69 void on_new_event()
70 {
71   try {
72     TEvePointSet* itsc = its_clusters();
73     itsc->SetMarkerColor(5);
74
75     TEvePointSet* tpcc = tpc_clusters();
76     tpcc->SetMarkerColor(4);
77   }
78   catch(TEveException& exc) {
79     printf("Exception loading ITS/TPC clusters: %s\n", exc.Data());
80   }
81
82   primary_vertex(1, 1);
83
84   TEveElementList* cont = esd_tracks_vertex_cut();
85
86   // Here we expect five TEveTrackList containers.
87   // First two have reasonable primaries (sigma-to-prim-vertex < 5).
88   // Other three are almost certainly secondaries.
89   Int_t count = 1;
90   TEveTrackCounter* g_trkcnt = TEveTrackCounter::fgInstance;
91   g_trkcnt->Reset();
92   g_trkcnt->SetEventId(gAliEveEvent->GetEventId());
93   TEveElement::List_i i = cont->BeginChildren();
94   while (i != cont->EndChildren()) {
95     TEveTrackList* l = dynamic_cast<TEveTrackList*>(*i);
96     if (l != 0) {
97       l->SetLineWidth(2);
98       g_trkcnt->RegisterTracks(l, (count <= 2));
99       ++count;
100     }
101     ++i;
102   }
103   TEveElement* top = gEve->GetCurrentEvent();
104   proj->DestroyElements();
105   AliESDEvent* esd = AliEveEventManager::AssertESD();
106   Double_t x[3];
107   esd->GetPrimaryVertex()->GetXYZ(x);
108   proj->SetCenter(x[0], x[1], x[2]);
109
110   // geom
111   proj->ImportElements(geom);
112   // event
113   proj->ImportElements(top);
114   // top->SetRnrState(kFALSE);
115 }
116
117 /******************************************************************************/
118
119 TParticle* id(Int_t label=0, Bool_t showParents=kTRUE)
120 {
121   AliRunLoader* rl = AliEveEventManager::AssertRunLoader();
122   rl->LoadKinematics();
123   AliStack* stack = rl->Stack();
124
125   printf("Number primaries %d, all particles %d, label %d\n",
126          stack->GetNprimary(), stack->GetNtrack(), label);
127   if (label < 0 || label >= stack->GetNtrack()) {
128     printf("  Label exceeds available range.\n");
129     return 0;
130   }
131
132   TParticle* part = stack->Particle(label);
133   if (part != 0) {
134     part->Print();
135     if (showParents) {
136       while (part->GetMother(0) >= 0) {
137         part = stack->Particle(part->GetMother(0));
138         part->Print();
139       }
140     }
141   }
142   return stack->Particle(label);
143 }