ROOT logo
// $Id$
// Author: Matevz Tadel 2009

/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveMultiView.h"


//______________________________________________________________________________
// Full description of AliEveMultiView
//

ClassImp(AliEveMultiView)

AliEveMultiView* AliEveMultiView::fgInstance = 0;

AliEveMultiView* AliEveMultiView::Instance()
{
  // Return static instance.

  return fgInstance;
}

AliEveMultiView::AliEveMultiView(Bool_t setMuonView) :
  fRPhiMgr(0), fRhoZMgr(0), fMuonMgr(0),
  f3DView(0), fRPhiView(0), fRhoZView(0), fMuonView(0),
  fRPhiGeomScene(0), fRhoZGeomScene(0), fMuonGeomScene(0),
  fRPhiEventScene(0), fRhoZEventScene(0), fMuonEventScene(0),
  fGeomGentle(0), fGeomGentleRPhi(0), fGeomGentleRhoZ(0),
  fGeomGentleTrd(0), fGeomGentleMuon(0), fIsMuonView(kFALSE)
{
  // Constructor --- creates required scenes, projection managers
  // and GL viewers.

  if (fgInstance)
    throw TEveException("AliEveMultiView::AliEveMultiView already instantiated.");
  fgInstance = this;

  // Scenes
  //========

  fRPhiGeomScene  = gEve->SpawnNewScene("RPhi Geometry",
                                        "Scene holding projected geometry for the RPhi view.");
  fRhoZGeomScene  = gEve->SpawnNewScene("RhoZ Geometry",
                                        "Scene holding projected geometry for the RhoZ view.");
  fMuonGeomScene  = gEve->SpawnNewScene("Muon Geometry",
                                        "Scene holding projected geometry for the Muon view.");
  fRPhiEventScene = gEve->SpawnNewScene("RPhi Event Data",
                                        "Scene holding projected event-data for the RPhi view.");
  fRhoZEventScene = gEve->SpawnNewScene("RhoZ Event Data",
                                        "Scene holding projected event-data for the RhoZ view.");
  fMuonEventScene = gEve->SpawnNewScene("Muon Event Data",
                                        "Scene holding projected event-data for the Muon view.");

  fIsMuonView = setMuonView;

  // Projection managers
  //=====================

  fRPhiMgr = new TEveProjectionManager();
  fRPhiMgr->SetProjection(TEveProjection::kPT_RPhi);
  gEve->AddToListTree(fRPhiMgr, kFALSE);
  {
    TEveProjectionAxes* a = new TEveProjectionAxes(fRPhiMgr);
    a->SetMainColor(kWhite);
    a->SetTitle("R-Phi");
    a->SetTitleSize(0.05);
    a->SetTitleFont(102);
    a->SetLabelSize(0.025);
    a->SetLabelFont(102);
    fRPhiGeomScene->AddElement(a);
  }

  fRhoZMgr = new TEveProjectionManager();
  fRhoZMgr->SetProjection(TEveProjection::kPT_RhoZ);
  gEve->AddToListTree(fRhoZMgr, kFALSE);
  {
    TEveProjectionAxes* a = new TEveProjectionAxes(fRhoZMgr);
    a->SetMainColor(kWhite);
    a->SetTitle("Rho-Z");
    a->SetTitleSize(0.05);
    a->SetTitleFont(102);
    a->SetLabelSize(0.025);
    a->SetLabelFont(102);
    fRhoZGeomScene->AddElement(a);
  }

if(fIsMuonView)
{
  fMuonMgr = new TEveProjectionManager();
  fMuonMgr->SetProjection(TEveProjection::kPT_RhoZ);
  gEve->AddToListTree(fMuonMgr, kFALSE);
  {
    TEveProjectionAxes* a = new TEveProjectionAxes(fMuonMgr);
    a->SetMainColor(kWhite);
    a->SetTitle("Rho-Z Muon");
    a->SetTitleSize(0.05);
    a->SetTitleFont(102);
    a->SetLabelSize(0.025);
    a->SetLabelFont(102);
    fMuonGeomScene->AddElement(a);
  }
}

  // Viewers
  //=========

  TEveWindowSlot *slot = 0;
  TEveWindowPack *pack = 0;

  slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
  pack = slot->MakePack();
  pack->SetElementName("Multi View");
  pack->SetHorizontal();
  pack->SetShowTitleBar(kFALSE);
  pack->NewSlot()->MakeCurrent();
  f3DView = gEve->SpawnNewViewer("3D View", "");
  f3DView->AddScene(gEve->GetGlobalScene());
  f3DView->AddScene(gEve->GetEventScene());

  pack = pack->NewSlot()->MakePack();
  pack->SetShowTitleBar(kFALSE);
  pack->NewSlot()->MakeCurrent();
  fRPhiView = gEve->SpawnNewViewer("RPhi View", "");
  fRPhiView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  fRPhiView->AddScene(fRPhiGeomScene);
  fRPhiView->AddScene(fRPhiEventScene);

  pack->NewSlot()->MakeCurrent();
  fRhoZView = gEve->SpawnNewViewer("RhoZ View", "");
  fRhoZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  fRhoZView->AddScene(fRhoZGeomScene);
  fRhoZView->AddScene(fRhoZEventScene);

if(fIsMuonView)
{
  pack->NewSlot()->MakeCurrent();
  fMuonView = gEve->SpawnNewViewer("RhoZ View Muon", "");
  fMuonView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  fMuonView->AddScene(fMuonGeomScene);
  fMuonView->AddScene(fMuonEventScene);
}

}

AliEveMultiView::~AliEveMultiView()
{
		DestroyAllGeometries();
		
		delete fGeomGentle;
		delete fGeomGentleRPhi;
		delete fGeomGentleRhoZ;
		
		delete	fRPhiMgr;
		delete fRhoZMgr;
		delete fMuonMgr;
		
}

//-------------------------------------------------------------------------

void AliEveMultiView::InitGeomGentle(TEveGeoShape* g3d, TEveGeoShape* grphi, TEveGeoShape* grhoz, TEveGeoShape* gmuon)
{
  // Initialize gentle geometry.

  fGeomGentle     = g3d;
  fGeomGentleRPhi = grphi; fGeomGentleRPhi->IncDenyDestroy();
  fGeomGentleRhoZ = grhoz; fGeomGentleRhoZ->IncDenyDestroy();
  if(fIsMuonView) { fGeomGentleMuon = gmuon; fGeomGentleMuon->IncDenyDestroy(); }

  ImportGeomRPhi(fGeomGentleRPhi);
  ImportGeomRhoZ(fGeomGentleRhoZ);
  if(fIsMuonView) ImportGeomMuon(fGeomGentleMuon);
}

void AliEveMultiView::InitGeomGentleTrd(TEveGeoShape* gtrd)
{
  // Initialize gentle geometry TRD.

  fGeomGentleTrd = gtrd;
  ImportGeomRPhi(fGeomGentleTrd);
  ImportGeomRhoZ(fGeomGentleTrd);
  if(fIsMuonView) ImportGeomMuon(fGeomGentleTrd);
}

void AliEveMultiView::InitGeomGentleMuon(TEveGeoShape* gmuon, Bool_t showRPhi, Bool_t showRhoZ, Bool_t showMuon)
{
  // Initialize gentle geometry for MUON.

  fGeomGentleMuon = gmuon;
  if (showRPhi) ImportGeomRPhi(fGeomGentleMuon);
  if (showRhoZ) ImportGeomRhoZ(fGeomGentleMuon);
  if (showMuon && fIsMuonView) ImportGeomMuon(fGeomGentleMuon);

}

//-------------------------------------------------------------------------

void AliEveMultiView::SetDepth(Float_t d)
{
  // Set current depth on all projection managers.

  fRPhiMgr->SetCurrentDepth(d);
  fRhoZMgr->SetCurrentDepth(d);
  if(fIsMuonView) fMuonMgr->SetCurrentDepth(d);

}

//-------------------------------------------------------------------------

void AliEveMultiView::ImportGeomRPhi(TEveElement* el)
{ 
  // Import el into r-phi geometry scene.

  fRPhiMgr->ImportElements(el, fRPhiGeomScene);
}

void AliEveMultiView::ImportGeomRhoZ(TEveElement* el)
{ 
  // Import el into rho-z geometry scene.

  fRhoZMgr->ImportElements(el, fRhoZGeomScene);
}

void AliEveMultiView::ImportGeomMuon(TEveElement* el)
{ 
  // Import el into muon geometry scene.

    if(fIsMuonView) fMuonMgr->ImportElements(el, fMuonGeomScene);
}

void AliEveMultiView::ImportEventRPhi(TEveElement* el)
{ 
  // Import el into r-phi event scene.

  fRPhiMgr->ImportElements(el, fRPhiEventScene);
}

void AliEveMultiView::ImportEventRhoZ(TEveElement* el)
{ 
  // Import el into rho-z event scene.

  fRhoZMgr->ImportElements(el, fRhoZEventScene);
}

void AliEveMultiView::ImportEventMuon(TEveElement* el)
{ 
  // Import el into muon event scene.

    if(fIsMuonView) fMuonMgr->ImportElements(el, fMuonEventScene);
}

void AliEveMultiView::DestroyEventRPhi()
{
  // Destroy all elements in r-phi event scene.

  fRPhiEventScene->DestroyElements();
}

void AliEveMultiView::DestroyEventRhoZ()
{
  // Destroy all elements in rho-z event scene.

  fRhoZEventScene->DestroyElements();
}

void AliEveMultiView::DestroyEventMuon()
{
  // Destroy all elements in rho-z event scene.

    if(fIsMuonView) fMuonEventScene->DestroyElements();
}


//-------------------------------------------------------------------------

void AliEveMultiView::SetCenterRPhi(Double_t x, Double_t y, Double_t z)
{
  // Set center of r-phi manager.

  fRPhiMgr->SetCenter(x, y, z);
}

void AliEveMultiView::SetCenterRhoZ(Double_t x, Double_t y, Double_t z)
{
  // Set center of rho-z manager.

  fRhoZMgr->SetCenter(x, y, z);
}

void AliEveMultiView::SetCenterMuon(Double_t x, Double_t y, Double_t z)
{
  // Set center of rho-z manager.

    if(fIsMuonView) fMuonMgr->SetCenter(x, y, z);
}

void AliEveMultiView::DestroyAllGeometries()
{
  // Destroy 3d, r-phi and rho-z geometries.

  fGeomGentle->DestroyElements();
  fGeomGentleRPhi->DestroyElements();
  fGeomGentleRhoZ->DestroyElements();
  if(fIsMuonView) fGeomGentleMuon->DestroyElements();

}

 AliEveMultiView.cxx:1
 AliEveMultiView.cxx:2
 AliEveMultiView.cxx:3
 AliEveMultiView.cxx:4
 AliEveMultiView.cxx:5
 AliEveMultiView.cxx:6
 AliEveMultiView.cxx:7
 AliEveMultiView.cxx:8
 AliEveMultiView.cxx:9
 AliEveMultiView.cxx:10
 AliEveMultiView.cxx:11
 AliEveMultiView.cxx:12
 AliEveMultiView.cxx:13
 AliEveMultiView.cxx:14
 AliEveMultiView.cxx:15
 AliEveMultiView.cxx:16
 AliEveMultiView.cxx:17
 AliEveMultiView.cxx:18
 AliEveMultiView.cxx:19
 AliEveMultiView.cxx:20
 AliEveMultiView.cxx:21
 AliEveMultiView.cxx:22
 AliEveMultiView.cxx:23
 AliEveMultiView.cxx:24
 AliEveMultiView.cxx:25
 AliEveMultiView.cxx:26
 AliEveMultiView.cxx:27
 AliEveMultiView.cxx:28
 AliEveMultiView.cxx:29
 AliEveMultiView.cxx:30
 AliEveMultiView.cxx:31
 AliEveMultiView.cxx:32
 AliEveMultiView.cxx:33
 AliEveMultiView.cxx:34
 AliEveMultiView.cxx:35
 AliEveMultiView.cxx:36
 AliEveMultiView.cxx:37
 AliEveMultiView.cxx:38
 AliEveMultiView.cxx:39
 AliEveMultiView.cxx:40
 AliEveMultiView.cxx:41
 AliEveMultiView.cxx:42
 AliEveMultiView.cxx:43
 AliEveMultiView.cxx:44
 AliEveMultiView.cxx:45
 AliEveMultiView.cxx:46
 AliEveMultiView.cxx:47
 AliEveMultiView.cxx:48
 AliEveMultiView.cxx:49
 AliEveMultiView.cxx:50
 AliEveMultiView.cxx:51
 AliEveMultiView.cxx:52
 AliEveMultiView.cxx:53
 AliEveMultiView.cxx:54
 AliEveMultiView.cxx:55
 AliEveMultiView.cxx:56
 AliEveMultiView.cxx:57
 AliEveMultiView.cxx:58
 AliEveMultiView.cxx:59
 AliEveMultiView.cxx:60
 AliEveMultiView.cxx:61
 AliEveMultiView.cxx:62
 AliEveMultiView.cxx:63
 AliEveMultiView.cxx:64
 AliEveMultiView.cxx:65
 AliEveMultiView.cxx:66
 AliEveMultiView.cxx:67
 AliEveMultiView.cxx:68
 AliEveMultiView.cxx:69
 AliEveMultiView.cxx:70
 AliEveMultiView.cxx:71
 AliEveMultiView.cxx:72
 AliEveMultiView.cxx:73
 AliEveMultiView.cxx:74
 AliEveMultiView.cxx:75
 AliEveMultiView.cxx:76
 AliEveMultiView.cxx:77
 AliEveMultiView.cxx:78
 AliEveMultiView.cxx:79
 AliEveMultiView.cxx:80
 AliEveMultiView.cxx:81
 AliEveMultiView.cxx:82
 AliEveMultiView.cxx:83
 AliEveMultiView.cxx:84
 AliEveMultiView.cxx:85
 AliEveMultiView.cxx:86
 AliEveMultiView.cxx:87
 AliEveMultiView.cxx:88
 AliEveMultiView.cxx:89
 AliEveMultiView.cxx:90
 AliEveMultiView.cxx:91
 AliEveMultiView.cxx:92
 AliEveMultiView.cxx:93
 AliEveMultiView.cxx:94
 AliEveMultiView.cxx:95
 AliEveMultiView.cxx:96
 AliEveMultiView.cxx:97
 AliEveMultiView.cxx:98
 AliEveMultiView.cxx:99
 AliEveMultiView.cxx:100
 AliEveMultiView.cxx:101
 AliEveMultiView.cxx:102
 AliEveMultiView.cxx:103
 AliEveMultiView.cxx:104
 AliEveMultiView.cxx:105
 AliEveMultiView.cxx:106
 AliEveMultiView.cxx:107
 AliEveMultiView.cxx:108
 AliEveMultiView.cxx:109
 AliEveMultiView.cxx:110
 AliEveMultiView.cxx:111
 AliEveMultiView.cxx:112
 AliEveMultiView.cxx:113
 AliEveMultiView.cxx:114
 AliEveMultiView.cxx:115
 AliEveMultiView.cxx:116
 AliEveMultiView.cxx:117
 AliEveMultiView.cxx:118
 AliEveMultiView.cxx:119
 AliEveMultiView.cxx:120
 AliEveMultiView.cxx:121
 AliEveMultiView.cxx:122
 AliEveMultiView.cxx:123
 AliEveMultiView.cxx:124
 AliEveMultiView.cxx:125
 AliEveMultiView.cxx:126
 AliEveMultiView.cxx:127
 AliEveMultiView.cxx:128
 AliEveMultiView.cxx:129
 AliEveMultiView.cxx:130
 AliEveMultiView.cxx:131
 AliEveMultiView.cxx:132
 AliEveMultiView.cxx:133
 AliEveMultiView.cxx:134
 AliEveMultiView.cxx:135
 AliEveMultiView.cxx:136
 AliEveMultiView.cxx:137
 AliEveMultiView.cxx:138
 AliEveMultiView.cxx:139
 AliEveMultiView.cxx:140
 AliEveMultiView.cxx:141
 AliEveMultiView.cxx:142
 AliEveMultiView.cxx:143
 AliEveMultiView.cxx:144
 AliEveMultiView.cxx:145
 AliEveMultiView.cxx:146
 AliEveMultiView.cxx:147
 AliEveMultiView.cxx:148
 AliEveMultiView.cxx:149
 AliEveMultiView.cxx:150
 AliEveMultiView.cxx:151
 AliEveMultiView.cxx:152
 AliEveMultiView.cxx:153
 AliEveMultiView.cxx:154
 AliEveMultiView.cxx:155
 AliEveMultiView.cxx:156
 AliEveMultiView.cxx:157
 AliEveMultiView.cxx:158
 AliEveMultiView.cxx:159
 AliEveMultiView.cxx:160
 AliEveMultiView.cxx:161
 AliEveMultiView.cxx:162
 AliEveMultiView.cxx:163
 AliEveMultiView.cxx:164
 AliEveMultiView.cxx:165
 AliEveMultiView.cxx:166
 AliEveMultiView.cxx:167
 AliEveMultiView.cxx:168
 AliEveMultiView.cxx:169
 AliEveMultiView.cxx:170
 AliEveMultiView.cxx:171
 AliEveMultiView.cxx:172
 AliEveMultiView.cxx:173
 AliEveMultiView.cxx:174
 AliEveMultiView.cxx:175
 AliEveMultiView.cxx:176
 AliEveMultiView.cxx:177
 AliEveMultiView.cxx:178
 AliEveMultiView.cxx:179
 AliEveMultiView.cxx:180
 AliEveMultiView.cxx:181
 AliEveMultiView.cxx:182
 AliEveMultiView.cxx:183
 AliEveMultiView.cxx:184
 AliEveMultiView.cxx:185
 AliEveMultiView.cxx:186
 AliEveMultiView.cxx:187
 AliEveMultiView.cxx:188
 AliEveMultiView.cxx:189
 AliEveMultiView.cxx:190
 AliEveMultiView.cxx:191
 AliEveMultiView.cxx:192
 AliEveMultiView.cxx:193
 AliEveMultiView.cxx:194
 AliEveMultiView.cxx:195
 AliEveMultiView.cxx:196
 AliEveMultiView.cxx:197
 AliEveMultiView.cxx:198
 AliEveMultiView.cxx:199
 AliEveMultiView.cxx:200
 AliEveMultiView.cxx:201
 AliEveMultiView.cxx:202
 AliEveMultiView.cxx:203
 AliEveMultiView.cxx:204
 AliEveMultiView.cxx:205
 AliEveMultiView.cxx:206
 AliEveMultiView.cxx:207
 AliEveMultiView.cxx:208
 AliEveMultiView.cxx:209
 AliEveMultiView.cxx:210
 AliEveMultiView.cxx:211
 AliEveMultiView.cxx:212
 AliEveMultiView.cxx:213
 AliEveMultiView.cxx:214
 AliEveMultiView.cxx:215
 AliEveMultiView.cxx:216
 AliEveMultiView.cxx:217
 AliEveMultiView.cxx:218
 AliEveMultiView.cxx:219
 AliEveMultiView.cxx:220
 AliEveMultiView.cxx:221
 AliEveMultiView.cxx:222
 AliEveMultiView.cxx:223
 AliEveMultiView.cxx:224
 AliEveMultiView.cxx:225
 AliEveMultiView.cxx:226
 AliEveMultiView.cxx:227
 AliEveMultiView.cxx:228
 AliEveMultiView.cxx:229
 AliEveMultiView.cxx:230
 AliEveMultiView.cxx:231
 AliEveMultiView.cxx:232
 AliEveMultiView.cxx:233
 AliEveMultiView.cxx:234
 AliEveMultiView.cxx:235
 AliEveMultiView.cxx:236
 AliEveMultiView.cxx:237
 AliEveMultiView.cxx:238
 AliEveMultiView.cxx:239
 AliEveMultiView.cxx:240
 AliEveMultiView.cxx:241
 AliEveMultiView.cxx:242
 AliEveMultiView.cxx:243
 AliEveMultiView.cxx:244
 AliEveMultiView.cxx:245
 AliEveMultiView.cxx:246
 AliEveMultiView.cxx:247
 AliEveMultiView.cxx:248
 AliEveMultiView.cxx:249
 AliEveMultiView.cxx:250
 AliEveMultiView.cxx:251
 AliEveMultiView.cxx:252
 AliEveMultiView.cxx:253
 AliEveMultiView.cxx:254
 AliEveMultiView.cxx:255
 AliEveMultiView.cxx:256
 AliEveMultiView.cxx:257
 AliEveMultiView.cxx:258
 AliEveMultiView.cxx:259
 AliEveMultiView.cxx:260
 AliEveMultiView.cxx:261
 AliEveMultiView.cxx:262
 AliEveMultiView.cxx:263
 AliEveMultiView.cxx:264
 AliEveMultiView.cxx:265
 AliEveMultiView.cxx:266
 AliEveMultiView.cxx:267
 AliEveMultiView.cxx:268
 AliEveMultiView.cxx:269
 AliEveMultiView.cxx:270
 AliEveMultiView.cxx:271
 AliEveMultiView.cxx:272
 AliEveMultiView.cxx:273
 AliEveMultiView.cxx:274
 AliEveMultiView.cxx:275
 AliEveMultiView.cxx:276
 AliEveMultiView.cxx:277
 AliEveMultiView.cxx:278
 AliEveMultiView.cxx:279
 AliEveMultiView.cxx:280
 AliEveMultiView.cxx:281
 AliEveMultiView.cxx:282
 AliEveMultiView.cxx:283
 AliEveMultiView.cxx:284
 AliEveMultiView.cxx:285
 AliEveMultiView.cxx:286
 AliEveMultiView.cxx:287
 AliEveMultiView.cxx:288
 AliEveMultiView.cxx:289
 AliEveMultiView.cxx:290
 AliEveMultiView.cxx:291
 AliEveMultiView.cxx:292
 AliEveMultiView.cxx:293
 AliEveMultiView.cxx:294
 AliEveMultiView.cxx:295
 AliEveMultiView.cxx:296
 AliEveMultiView.cxx:297
 AliEveMultiView.cxx:298
 AliEveMultiView.cxx:299
 AliEveMultiView.cxx:300
 AliEveMultiView.cxx:301
 AliEveMultiView.cxx:302
 AliEveMultiView.cxx:303
 AliEveMultiView.cxx:304
 AliEveMultiView.cxx:305
 AliEveMultiView.cxx:306
 AliEveMultiView.cxx:307
 AliEveMultiView.cxx:308
 AliEveMultiView.cxx:309
 AliEveMultiView.cxx:310
 AliEveMultiView.cxx:311
 AliEveMultiView.cxx:312