2 // Author: Matevz Tadel 2009
4 /**************************************************************************
5 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
10 #include "AliEveMultiView.h"
13 //______________________________________________________________________________
14 // Full description of AliEveMultiView
17 ClassImp(AliEveMultiView)
19 AliEveMultiView* AliEveMultiView::fgInstance = 0;
21 AliEveMultiView* AliEveMultiView::Instance()
23 // Return static instance.
28 AliEveMultiView::AliEveMultiView(Bool_t setMuonView) :
29 fRPhiMgr(0), fRhoZMgr(0), fMuonMgr(0),
30 f3DView(0), fRPhiView(0), fRhoZView(0), fMuonView(0),
31 fRPhiGeomScene(0), fRhoZGeomScene(0), fMuonGeomScene(0),
32 fRPhiEventScene(0), fRhoZEventScene(0), fMuonEventScene(0),
33 fGeomGentle(0), fGeomGentleRPhi(0), fGeomGentleRhoZ(0),
34 fGeomGentleTrd(0), fGeomGentleMuon(0), fIsMuonView(kFALSE)
36 // Constructor --- creates required scenes, projection managers
40 throw TEveException("AliEveMultiView::AliEveMultiView already instantiated.");
46 fRPhiGeomScene = gEve->SpawnNewScene("RPhi Geometry",
47 "Scene holding projected geometry for the RPhi view.");
48 fRhoZGeomScene = gEve->SpawnNewScene("RhoZ Geometry",
49 "Scene holding projected geometry for the RhoZ view.");
50 fMuonGeomScene = gEve->SpawnNewScene("Muon Geometry",
51 "Scene holding projected geometry for the Muon view.");
52 fRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
53 "Scene holding projected event-data for the RPhi view.");
54 fRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
55 "Scene holding projected event-data for the RhoZ view.");
56 fMuonEventScene = gEve->SpawnNewScene("Muon Event Data",
57 "Scene holding projected event-data for the Muon view.");
59 fIsMuonView = setMuonView;
61 // Projection managers
62 //=====================
64 fRPhiMgr = new TEveProjectionManager();
65 fRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
66 gEve->AddToListTree(fRPhiMgr, kFALSE);
68 TEveProjectionAxes* a = new TEveProjectionAxes(fRPhiMgr);
69 a->SetMainColor(kWhite);
71 a->SetTitleSize(0.05);
73 a->SetLabelSize(0.025);
75 fRPhiGeomScene->AddElement(a);
78 fRhoZMgr = new TEveProjectionManager();
79 fRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
80 gEve->AddToListTree(fRhoZMgr, kFALSE);
82 TEveProjectionAxes* a = new TEveProjectionAxes(fRhoZMgr);
83 a->SetMainColor(kWhite);
85 a->SetTitleSize(0.05);
87 a->SetLabelSize(0.025);
89 fRhoZGeomScene->AddElement(a);
94 fMuonMgr = new TEveProjectionManager();
95 fMuonMgr->SetProjection(TEveProjection::kPT_RhoZ);
96 gEve->AddToListTree(fMuonMgr, kFALSE);
98 TEveProjectionAxes* a = new TEveProjectionAxes(fMuonMgr);
99 a->SetMainColor(kWhite);
100 a->SetTitle("Rho-Z Muon");
101 a->SetTitleSize(0.05);
102 a->SetTitleFont(102);
103 a->SetLabelSize(0.025);
104 a->SetLabelFont(102);
105 fMuonGeomScene->AddElement(a);
112 TEveWindowSlot *slot = 0;
113 TEveWindowPack *pack = 0;
115 slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
116 pack = slot->MakePack();
117 pack->SetElementName("Multi View");
118 pack->SetHorizontal();
119 pack->SetShowTitleBar(kFALSE);
120 pack->NewSlot()->MakeCurrent();
121 f3DView = gEve->SpawnNewViewer("3D View", "");
122 f3DView->AddScene(gEve->GetGlobalScene());
123 f3DView->AddScene(gEve->GetEventScene());
125 pack = pack->NewSlot()->MakePack();
126 pack->SetShowTitleBar(kFALSE);
127 pack->NewSlot()->MakeCurrent();
128 fRPhiView = gEve->SpawnNewViewer("RPhi View", "");
129 fRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
130 fRPhiView->AddScene(fRPhiGeomScene);
131 fRPhiView->AddScene(fRPhiEventScene);
133 pack->NewSlot()->MakeCurrent();
134 fRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
135 fRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
136 fRhoZView->AddScene(fRhoZGeomScene);
137 fRhoZView->AddScene(fRhoZEventScene);
141 pack->NewSlot()->MakeCurrent();
142 fMuonView = gEve->SpawnNewViewer("RhoZ View Muon", "");
143 fMuonView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
144 fMuonView->AddScene(fMuonGeomScene);
145 fMuonView->AddScene(fMuonEventScene);
150 //-------------------------------------------------------------------------
152 void AliEveMultiView::InitGeomGentle(TEveGeoShape* g3d, TEveGeoShape* grphi, TEveGeoShape* grhoz, TEveGeoShape* gmuon)
154 // Initialize gentle geometry.
157 fGeomGentleRPhi = grphi; fGeomGentleRPhi->IncDenyDestroy();
158 fGeomGentleRhoZ = grhoz; fGeomGentleRhoZ->IncDenyDestroy();
159 if(fIsMuonView) { fGeomGentleMuon = gmuon; fGeomGentleMuon->IncDenyDestroy(); }
161 ImportGeomRPhi(fGeomGentleRPhi);
162 ImportGeomRhoZ(fGeomGentleRhoZ);
163 if(fIsMuonView) ImportGeomMuon(fGeomGentleMuon);
166 void AliEveMultiView::InitGeomGentleTrd(TEveGeoShape* gtrd)
168 // Initialize gentle geometry TRD.
170 fGeomGentleTrd = gtrd;
171 ImportGeomRPhi(fGeomGentleTrd);
172 ImportGeomRhoZ(fGeomGentleTrd);
173 if(fIsMuonView) ImportGeomMuon(fGeomGentleTrd);
176 void AliEveMultiView::InitGeomGentleMuon(TEveGeoShape* gmuon, Bool_t showRPhi, Bool_t showRhoZ, Bool_t showMuon)
178 // Initialize gentle geometry for MUON.
180 fGeomGentleMuon = gmuon;
181 if (showRPhi) ImportGeomRPhi(fGeomGentleMuon);
182 if (showRhoZ) ImportGeomRhoZ(fGeomGentleMuon);
183 if (showMuon && fIsMuonView) ImportGeomMuon(fGeomGentleMuon);
187 //-------------------------------------------------------------------------
189 void AliEveMultiView::SetDepth(Float_t d)
191 // Set current depth on all projection managers.
193 fRPhiMgr->SetCurrentDepth(d);
194 fRhoZMgr->SetCurrentDepth(d);
195 if(fIsMuonView) fMuonMgr->SetCurrentDepth(d);
199 //-------------------------------------------------------------------------
201 void AliEveMultiView::ImportGeomRPhi(TEveElement* el)
203 // Import el into r-phi geometry scene.
205 fRPhiMgr->ImportElements(el, fRPhiGeomScene);
208 void AliEveMultiView::ImportGeomRhoZ(TEveElement* el)
210 // Import el into rho-z geometry scene.
212 fRhoZMgr->ImportElements(el, fRhoZGeomScene);
215 void AliEveMultiView::ImportGeomMuon(TEveElement* el)
217 // Import el into muon geometry scene.
219 if(fIsMuonView) fMuonMgr->ImportElements(el, fMuonGeomScene);
222 void AliEveMultiView::ImportEventRPhi(TEveElement* el)
224 // Import el into r-phi event scene.
226 fRPhiMgr->ImportElements(el, fRPhiEventScene);
229 void AliEveMultiView::ImportEventRhoZ(TEveElement* el)
231 // Import el into rho-z event scene.
233 fRhoZMgr->ImportElements(el, fRhoZEventScene);
236 void AliEveMultiView::ImportEventMuon(TEveElement* el)
238 // Import el into muon event scene.
240 if(fIsMuonView) fMuonMgr->ImportElements(el, fMuonEventScene);
243 void AliEveMultiView::DestroyEventRPhi()
245 // Destroy all elements in r-phi event scene.
247 fRPhiEventScene->DestroyElements();
250 void AliEveMultiView::DestroyEventRhoZ()
252 // Destroy all elements in rho-z event scene.
254 fRhoZEventScene->DestroyElements();
257 void AliEveMultiView::DestroyEventMuon()
259 // Destroy all elements in rho-z event scene.
261 if(fIsMuonView) fMuonEventScene->DestroyElements();
265 //-------------------------------------------------------------------------
267 void AliEveMultiView::SetCenterRPhi(Double_t x, Double_t y, Double_t z)
269 // Set center of r-phi manager.
271 fRPhiMgr->SetCenter(x, y, z);
274 void AliEveMultiView::SetCenterRhoZ(Double_t x, Double_t y, Double_t z)
276 // Set center of rho-z manager.
278 fRhoZMgr->SetCenter(x, y, z);
281 void AliEveMultiView::SetCenterMuon(Double_t x, Double_t y, Double_t z)
283 // Set center of rho-z manager.
285 if(fIsMuonView) fMuonMgr->SetCenter(x, y, z);
288 void AliEveMultiView::DestroyAllGeometries()
290 // Destroy 3d, r-phi and rho-z geometries.
292 fGeomGentle->DestroyElements();
293 fGeomGentleRPhi->DestroyElements();
294 fGeomGentleRhoZ->DestroyElements();
295 if(fIsMuonView) fGeomGentleMuon->DestroyElements();