AliEveMacro
[u/mrichter/AliRoot.git] / EVE / macros / visscan_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 AliEveMacroExecutor;
11
12 class TEveProjectionManager;
13 class TEveGeoShape;
14 class TEveUtil;
15
16 TEveGeoShape *gGeomGentle     = 0;
17 TEveGeoShape *gGeomGentleRPhi = 0;
18 TEveGeoShape *gGeomGentleRhoZ = 0;
19 TEveGeoShape *gGeomGentleTRD  = 0;
20 TEveGeoShape *gGeomGentleMUON = 0;
21
22 TEveScene *gRPhiGeomScene  = 0;
23 TEveScene *gRhoZGeomScene  = 0;
24 TEveScene *gRPhiEventScene = 0;
25 TEveScene *gRhoZEventScene = 0;
26
27 TEveProjectionManager *gRPhiMgr = 0;
28 TEveProjectionManager *gRhoZMgr = 0;
29
30 TEveViewer *g3DView   = 0;
31 TEveViewer *gRPhiView = 0;
32 TEveViewer *gRhoZView = 0;
33
34 Bool_t gShowTRD      = kFALSE;
35 Bool_t gShowMUON     = kTRUE;
36 Bool_t gShowMUONRPhi = kFALSE;
37 Bool_t gShowMUONRhoZ = kTRUE;
38
39 Bool_t gCenterProjectionsAtPrimaryVertex = kFALSE;
40
41 void visscan_init(Bool_t show_extra_geo=kFALSE)
42 {
43   if (!show_extra_geo)
44   {
45     gShowTRD = gShowMUON = gShowMUONRPhi = gShowMUONRhoZ = kFALSE;
46   }
47
48   TEveUtil::LoadMacro("alieve_init.C");
49   alieve_init(".", -1);
50
51   // TEveLine::SetDefaultSmooth(1);
52
53   TEveUtil::AssertMacro("VizDB_scan.C");
54
55   AliEveMacroExecutor *exec    = AliEveEventManager::GetMaster()->GetExecutor();
56   TEveBrowser         *browser = gEve->GetBrowser();
57
58   //==============================================================================
59   // Geometry, scenes, projections and viewers
60   //==============================================================================
61
62   browser->ShowCloseTab(kFALSE);
63
64   // Geometry
65
66   TEveUtil::LoadMacro("geom_gentle.C");
67   gGeomGentle = geom_gentle();
68   gGeomGentleRPhi = geom_gentle_rphi(); gGeomGentleRPhi->IncDenyDestroy();
69   gGeomGentleRhoZ = geom_gentle_rhoz(); gGeomGentleRhoZ->IncDenyDestroy();
70   if (gShowTRD) {
71     TEveUtil::LoadMacro("geom_gentle_trd.C");
72     gGeomGentleTRD = geom_gentle_trd();
73   }
74   if (gShowMUON) {
75     TEveUtil::LoadMacro("geom_gentle_muon.C");
76     gGeomGentleMUON = geom_gentle_muon();
77   }
78
79   // Scenes
80
81   gRPhiGeomScene  = gEve->SpawnNewScene("RPhi Geometry",
82                     "Scene holding projected geometry for the RPhi view.");
83   gRhoZGeomScene  = gEve->SpawnNewScene("RhoZ Geometry",
84                     "Scene holding projected geometry for the RhoZ view.");
85   gRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
86                     "Scene holding projected geometry for the RPhi view.");
87   gRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
88                     "Scene holding projected geometry for the RhoZ view.");
89
90   // Projection managers
91
92   gRPhiMgr = new TEveProjectionManager();
93   gRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
94   gEve->AddToListTree(gRPhiMgr, kFALSE);
95   {
96     TEveProjectionAxes* a = new TEveProjectionAxes(gRPhiMgr);
97     a->SetMainColor(kWhite);
98     a->SetTitle("R-Phi");
99     a->SetTitleSize(0.05);
100     a->SetTitleFont(102);
101     a->SetLabelSize(0.025);
102     a->SetLabelFont(102);
103     gRPhiGeomScene->AddElement(a);
104   }
105   gRPhiMgr->ImportElements(gGeomGentleRPhi, gRPhiGeomScene);
106   if (gShowTRD)      gRPhiMgr->ImportElements(gGeomGentleTRD, gRPhiGeomScene);
107   if (gShowMUONRPhi) gRPhiMgr->ImportElements(gGeomGentleMUON, gRPhiGeomScene);
108
109   gRhoZMgr = new TEveProjectionManager();
110   gRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
111   gEve->AddToListTree(gRhoZMgr, kFALSE);
112   {
113     TEveProjectionAxes* a = new TEveProjectionAxes(gRhoZMgr);
114     a->SetMainColor(kWhite);
115     a->SetTitle("Rho-Z");
116     a->SetTitleSize(0.05);
117     a->SetTitleFont(102);
118     a->SetLabelSize(0.025);
119     a->SetLabelFont(102);
120     gRhoZGeomScene->AddElement(a);
121   }
122   gRhoZMgr->ImportElements(gGeomGentleRhoZ, gRhoZGeomScene);
123   if (gShowTRD)      gRhoZMgr->ImportElements(gGeomGentleTRD, gRhoZGeomScene);
124   if (gShowMUONRhoZ) gRhoZMgr->ImportElements(gGeomGentleMUON, gRhoZGeomScene);
125
126   // Viewers
127
128   TEveWindowSlot *slot = 0;
129   TEveWindowPack *pack = 0;
130
131   slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
132   pack = slot->MakePack();
133   pack->SetElementName("Multi View");
134   pack->SetHorizontal();
135   pack->SetShowTitleBar(kFALSE);
136   pack->NewSlot()->MakeCurrent();
137   g3DView = gEve->SpawnNewViewer("3D View", "");
138   g3DView->AddScene(gEve->GetGlobalScene());
139   g3DView->AddScene(gEve->GetEventScene());
140
141   pack = pack->NewSlot()->MakePack();
142   pack->SetShowTitleBar(kFALSE);
143   pack->NewSlot()->MakeCurrent();
144   gRPhiView = gEve->SpawnNewViewer("RPhi View", "");
145   gRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
146   gRPhiView->AddScene(gRPhiGeomScene);
147   gRPhiView->AddScene(gRPhiEventScene);
148
149   pack->NewSlot()->MakeCurrent();
150   gRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
151   gRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
152   gRhoZView->AddScene(gRhoZGeomScene);
153   gRhoZView->AddScene(gRhoZEventScene);
154
155
156   //==============================================================================
157   // Registration of per-event macros
158   //==============================================================================
159
160   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Track",   "kine_tracks.C", "kine_tracks", "", kFALSE));
161
162   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit ITS", "its_hits.C",    "its_hits",    "", kFALSE));
163   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit TPC", "tpc_hits.C",    "tpc_hits",    "", kFALSE));
164   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit T0",  "t0_hits.C",     "t0_hits",     "", kFALSE));
165   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "SIM Hit FMD", "fmd_hits.C",    "fmd_hits",    "", kFALSE));
166
167   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "DIG FMD",     "fmd_digits.C",  "fmd_digits",  "", kFALSE));
168
169   exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW TPC",     "tpc_raw.C",     "tpc_raw",     "", kFALSE));
170   exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW T0",      "t0_raw.C",      "t0_raw",      "", kFALSE));
171   exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW FMD",     "fmd_raw.C",     "fmd_raw",     "", kFALSE));
172   exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW VZERO",   "vzero_raw.C",   "vzero_raw",   "", kFALSE));
173   exec->AddMacro(new AliEveMacro(AliEveMacro::kRawReader, "RAW ACORDE",  "acorde_raw.C",  "acorde_raw",  "", kFALSE));
174
175   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex",             "",                kTRUE));
176   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse",     "",                kTRUE));
177   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box",         "kFALSE, 3, 3, 3", kFALSE));
178   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex_spd",         "",                kTRUE));
179   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_spd", "",                kTRUE));
180   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box_spd",     "kFALSE, 3, 3, 3", kFALSE));
181   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX",         "primary_vertex.C", "primary_vertex_tpc",         "",                kFALSE));
182   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Ellipse", "primary_vertex.C", "primary_vertex_ellipse_tpc", "",                kFALSE));
183   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC PVTX Box",     "primary_vertex.C", "primary_vertex_box_tpc",     "kFALSE, 3, 3, 3", kFALSE));
184
185   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0",   "esd_V0_points.C",       "esd_V0_points_onfly"));
186   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0",   "esd_V0_points.C",       "esd_V0_points_offline"));
187   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC V0",   "esd_V0.C",              "esd_V0"));
188   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade_points.C",  "esd_cascade_points"));
189   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC CSCD", "esd_cascade.C",         "esd_cascade"));
190
191   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks",             "", kFALSE));
192   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_MI",          "", kFALSE));
193   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Track", "esd_tracks.C", "esd_tracks_by_category", "", kTRUE));
194
195   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC Tracklet", "esd_spd_tracklets.C", "esd_spd_tracklets", "", kFALSE));
196
197   exec->AddMacro(new AliEveMacro(AliEveMacro::kESD, "REC ZDC",      "esd_zdc.C", "esd_zdc", "", kFALSE));
198
199   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus",     "clusters.C+",     "clusters", "", kFALSE));
200   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus ITS", "its_clusters.C+", "its_clusters"));
201   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC", "tpc_clusters.C+", "tpc_clusters"));
202   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TRD", "trd_clusters.C+", "trd_clusters"));
203   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TOF", "tof_clusters.C+", "tof_clusters"));
204
205   exec->AddMacro(new AliEveMacro(AliEveMacro::kRunLoader, "REC Clus TPC", "vplot_tpc.C+",    "vplot_tpc", "", kFALSE));
206
207   exec->AddMacro(new AliEveMacro(AliEveMacro::kAOD, "ANA Jets", "jetplane.C", "jetplane", "", kFALSE));
208
209   //==============================================================================
210   // Additional GUI components
211   //==============================================================================
212
213   slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
214   slot->StartEmbedding();
215   AliEveMacroExecutorWindow* exewin = new AliEveMacroExecutorWindow(exec);
216   slot->StopEmbedding("DataSelection");
217   exewin->PopulateMacros();
218
219   slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
220   slot->StartEmbedding();
221   new AliQAHistViewer(gClient->GetRoot(), 600, 400, kTRUE);
222   slot->StopEmbedding("QA histograms");
223
224   browser->GetTabRight()->SetTab(1);
225
226   browser->StartEmbedding(TRootBrowser::kBottom);
227   new AliEveEventManagerWindow(AliEveEventManager::GetMaster());
228   browser->StopEmbedding("EventCtrl");
229
230   slot = TEveWindow::CreateWindowInTab(browser->GetTabRight());
231   TEveWindowTab *store_tab = slot->MakeTab();
232   store_tab->SetElementNameTitle("WindowStore",
233     "Undocked windows whose previous container is not known\n"
234     "are placed here when the main-frame is closed.");
235   gEve->GetWindowManager()->SetDefaultContainer(store_tab);
236
237   //==============================================================================
238   // AliEve objects - global tools
239   //==============================================================================
240
241   AliEveTrackFitter* fitter = new AliEveTrackFitter();
242   gEve->AddToListTree(fitter, 1);
243   gEve->AddElement(fitter, gEve->GetEventScene());
244
245   AliEveTrackCounter* g_trkcnt = new AliEveTrackCounter("Primary Counter");
246   gEve->AddToListTree(g_trkcnt, kFALSE);
247
248
249   //==============================================================================
250   // Final stuff
251   //==============================================================================
252
253   // A refresh to show proper window.
254   gEve->Redraw3D(kTRUE);
255   gSystem->ProcessEvents();
256
257   // Register command to call on each event.
258   AliEveEventManager::GetMaster()->AddNewEventCommand("on_new_event();");
259   AliEveEventManager::GetMaster()->GotoEvent(0);
260
261   gEve->EditElement(g_trkcnt);
262
263   gEve->Redraw3D(kTRUE);
264 }
265
266 /******************************************************************************/
267
268 void on_new_event()
269 {
270   AliEveTrackCounter* g_trkcnt = AliEveTrackCounter::fgInstance;
271   g_trkcnt->Reset();
272   g_trkcnt->SetEventId(AliEveEventManager::GetMaster()->GetEventId());
273
274   if (g_esd_tracks_by_category_container != 0)
275   {
276     TEveElementList* cont = g_esd_tracks_by_category_container;
277
278     // Here we expect several TEveTrackList containers.
279     // First two have reasonable primaries (sigma-to-prim-vertex < 5).
280     // Others are almost certainly secondaries.
281     Int_t count = 1;
282     TEveElement::List_i i = cont->BeginChildren();
283     while (i != cont->EndChildren())
284     {
285       TEveTrackList* l = dynamic_cast<TEveTrackList*>(*i);
286       if (l != 0)
287       {
288         g_trkcnt->RegisterTracks(l, (count <= 2));
289         ++count;
290       }
291       ++i;
292     }
293
294     // Set it to zero, so that we do not reuse an old one.
295     g_esd_tracks_by_category_container = 0;
296   }
297   else
298   {
299     Warning("on_new_event", "g_esd_tracks_by_category_container not initialized.");
300   }
301
302   Double_t x[3] = { 0, 0, 0 };
303
304   if (AliEveEventManager::HasESD())
305   {
306     AliESDEvent* esd = AliEveEventManager::AssertESD();
307     esd->GetPrimaryVertex()->GetXYZ(x);
308
309     TTimeStamp ts(esd->GetTimeStamp());
310     TString win_title("Eve Main Window -- Timestamp: ");
311     win_title += ts.AsString("s");
312     win_title += "; Event # in ESD file: ";
313     win_title += esd->GetEventNumberInFile();
314     gEve->GetBrowser()->SetWindowName(win_title);
315   }
316
317   TEveElement* top = gEve->GetCurrentEvent();
318
319   if (gRPhiMgr && top)
320   {
321     gRPhiEventScene->DestroyElements();
322     if (gCenterProjectionsAtPrimaryVertex)
323       gRPhiMgr->SetCenter(x[0], x[1], x[2]);
324     gRPhiMgr->ImportElements(top, gRPhiEventScene);
325   }
326   if (gRhoZMgr && top)
327   {
328     gRhoZEventScene->DestroyElements();
329     if (gCenterProjectionsAtPrimaryVertex)
330       gRhoZMgr->SetCenter(x[0], x[1], x[2]);
331     gRhoZMgr->ImportElements(top, gRhoZEventScene);
332   }
333 }