ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$
//
/// \ingroup macros
/// \file MUONGeometryViewingHelper.C
/// \brief Macro providing methods helping in viewing geometry
///
/// To be run from aliroot:
/// <pre>
/// root[0] .x MUONGeometryViewingHelper.C
/// root[0] buildGeometry();
/// </pre>
///
/// \author: I. Hrivnacova, IPN Orsay

#if !defined(__CINT__) || defined(__MAKECINT__)

#include <Riostream.h>
#include <TObjArray.h>
#include <TBrowser.h>
#include <TGeoManager.h>
#include <TGeoVolume.h>

#endif


void visibilityOff() 
{
/// Set all volumes invisible

  TObjArray* volumes = gGeoManager->GetListOfVolumes();
  for (Int_t i=0; i<volumes->GetEntriesFast(); i++) {
    if ( !((TGeoVolume*)volumes->At(i))->IsAssembly() )
      ((TGeoVolume*)volumes->At(i))->SetVisibility(kFALSE);
  }    
    
}  


void setVisibility(const TString& volumeName, Bool_t visibility= kTRUE) 
{
/// Set visibility to the volume specified by name

  TGeoVolume* volume = gGeoManager->FindVolumeFast(volumeName.Data());

  if ( ! volume ) {
    cerr << "Volume " <<  volumeName.Data() << " not found." << endl;
    return;
  }  
  
  volume->SetVisibility(visibility);
}  

void setDaughtersVisibility(const TString& volumeName, Bool_t visibility= kTRUE)  
{
/// Set visibility to daughter of the volume specified by name.
/// If the daughter volume is an assembly the visibility setting
/// is propagated to its real volumes daughters.

   TGeoVolume* volume = gGeoManager->FindVolumeFast(volumeName.Data());

   if ( ! volume ) { 
     cerr << "Volume " <<  volumeName.Data() << " not found." << endl;
     return;
   }  
     
   //for ( Int_t i=0; i<10; i++ ) {
   Int_t colourNo = 1;
   for ( Int_t i=0; i<volume->GetNdaughters(); i++ ) {
   
     TGeoVolume* dvolume = volume->GetNode(i)->GetVolume();
     if ( dvolume->IsAssembly() ) {
       // Do no set visibility to assembly but to its daughters
       setDaughtersVisibility(dvolume->GetName(), visibility);
     }
     else {  
       cout << "Setting visibility to " <<  dvolume->GetName() << endl;
       dvolume->SetVisibility(visibility);

       // change colors
       ++colourNo;
       if ( colourNo > 9 ) colourNo = 1;
       dvolume->SetLineColor(colourNo); 
     }     
   }
}

void buildGeometry(Bool_t allVisible = kFALSE ) 
{  
/// Load geometry from the file, make all volumes invisible

  TGeoManager::Import("geometry.root");
  
  new TBrowser();
  
  if ( ! allVisible ) visibilityOff();

  gGeoManager->SetVisLevel(10);
  gGeoManager->GetTopVolume()->SetVisContainers(kTRUE);
  gGeoManager->GetTopVolume()->Draw("ogl");

  cout << endl;
  cout << "You can now add volumes in the scene: " << endl;
  cout << "    setVisibility(\"MyVolume\") "  <<  endl;
  cout << "    setDaughtersVisibility(\"MyVolume\") " <<  endl;;
  cout << "or remove them from the scene: " << endl;
  cout << "    setVisibility(\"MyVolume\", kFALSE);" << endl;
  cout << "    setDaughtersVisibility(\"MyVolume\", kFALSE);" << endl;  
  cout << endl;
}  
 MUONGeometryViewingHelper.C:1
 MUONGeometryViewingHelper.C:2
 MUONGeometryViewingHelper.C:3
 MUONGeometryViewingHelper.C:4
 MUONGeometryViewingHelper.C:5
 MUONGeometryViewingHelper.C:6
 MUONGeometryViewingHelper.C:7
 MUONGeometryViewingHelper.C:8
 MUONGeometryViewingHelper.C:9
 MUONGeometryViewingHelper.C:10
 MUONGeometryViewingHelper.C:11
 MUONGeometryViewingHelper.C:12
 MUONGeometryViewingHelper.C:13
 MUONGeometryViewingHelper.C:14
 MUONGeometryViewingHelper.C:15
 MUONGeometryViewingHelper.C:16
 MUONGeometryViewingHelper.C:17
 MUONGeometryViewingHelper.C:18
 MUONGeometryViewingHelper.C:19
 MUONGeometryViewingHelper.C:20
 MUONGeometryViewingHelper.C:21
 MUONGeometryViewingHelper.C:22
 MUONGeometryViewingHelper.C:23
 MUONGeometryViewingHelper.C:24
 MUONGeometryViewingHelper.C:25
 MUONGeometryViewingHelper.C:26
 MUONGeometryViewingHelper.C:27
 MUONGeometryViewingHelper.C:28
 MUONGeometryViewingHelper.C:29
 MUONGeometryViewingHelper.C:30
 MUONGeometryViewingHelper.C:31
 MUONGeometryViewingHelper.C:32
 MUONGeometryViewingHelper.C:33
 MUONGeometryViewingHelper.C:34
 MUONGeometryViewingHelper.C:35
 MUONGeometryViewingHelper.C:36
 MUONGeometryViewingHelper.C:37
 MUONGeometryViewingHelper.C:38
 MUONGeometryViewingHelper.C:39
 MUONGeometryViewingHelper.C:40
 MUONGeometryViewingHelper.C:41
 MUONGeometryViewingHelper.C:42
 MUONGeometryViewingHelper.C:43
 MUONGeometryViewingHelper.C:44
 MUONGeometryViewingHelper.C:45
 MUONGeometryViewingHelper.C:46
 MUONGeometryViewingHelper.C:47
 MUONGeometryViewingHelper.C:48
 MUONGeometryViewingHelper.C:49
 MUONGeometryViewingHelper.C:50
 MUONGeometryViewingHelper.C:51
 MUONGeometryViewingHelper.C:52
 MUONGeometryViewingHelper.C:53
 MUONGeometryViewingHelper.C:54
 MUONGeometryViewingHelper.C:55
 MUONGeometryViewingHelper.C:56
 MUONGeometryViewingHelper.C:57
 MUONGeometryViewingHelper.C:58
 MUONGeometryViewingHelper.C:59
 MUONGeometryViewingHelper.C:60
 MUONGeometryViewingHelper.C:61
 MUONGeometryViewingHelper.C:62
 MUONGeometryViewingHelper.C:63
 MUONGeometryViewingHelper.C:64
 MUONGeometryViewingHelper.C:65
 MUONGeometryViewingHelper.C:66
 MUONGeometryViewingHelper.C:67
 MUONGeometryViewingHelper.C:68
 MUONGeometryViewingHelper.C:69
 MUONGeometryViewingHelper.C:70
 MUONGeometryViewingHelper.C:71
 MUONGeometryViewingHelper.C:72
 MUONGeometryViewingHelper.C:73
 MUONGeometryViewingHelper.C:74
 MUONGeometryViewingHelper.C:75
 MUONGeometryViewingHelper.C:76
 MUONGeometryViewingHelper.C:77
 MUONGeometryViewingHelper.C:78
 MUONGeometryViewingHelper.C:79
 MUONGeometryViewingHelper.C:80
 MUONGeometryViewingHelper.C:81
 MUONGeometryViewingHelper.C:82
 MUONGeometryViewingHelper.C:83
 MUONGeometryViewingHelper.C:84
 MUONGeometryViewingHelper.C:85
 MUONGeometryViewingHelper.C:86
 MUONGeometryViewingHelper.C:87
 MUONGeometryViewingHelper.C:88
 MUONGeometryViewingHelper.C:89
 MUONGeometryViewingHelper.C:90
 MUONGeometryViewingHelper.C:91
 MUONGeometryViewingHelper.C:92
 MUONGeometryViewingHelper.C:93
 MUONGeometryViewingHelper.C:94
 MUONGeometryViewingHelper.C:95
 MUONGeometryViewingHelper.C:96
 MUONGeometryViewingHelper.C:97
 MUONGeometryViewingHelper.C:98
 MUONGeometryViewingHelper.C:99
 MUONGeometryViewingHelper.C:100
 MUONGeometryViewingHelper.C:101
 MUONGeometryViewingHelper.C:102
 MUONGeometryViewingHelper.C:103
 MUONGeometryViewingHelper.C:104
 MUONGeometryViewingHelper.C:105
 MUONGeometryViewingHelper.C:106
 MUONGeometryViewingHelper.C:107
 MUONGeometryViewingHelper.C:108
 MUONGeometryViewingHelper.C:109
 MUONGeometryViewingHelper.C:110
 MUONGeometryViewingHelper.C:111
 MUONGeometryViewingHelper.C:112
 MUONGeometryViewingHelper.C:113
 MUONGeometryViewingHelper.C:114
 MUONGeometryViewingHelper.C:115
 MUONGeometryViewingHelper.C:116
 MUONGeometryViewingHelper.C:117
 MUONGeometryViewingHelper.C:118
 MUONGeometryViewingHelper.C:119
 MUONGeometryViewingHelper.C:120
 MUONGeometryViewingHelper.C:121
 MUONGeometryViewingHelper.C:122
 MUONGeometryViewingHelper.C:123
 MUONGeometryViewingHelper.C:124
 MUONGeometryViewingHelper.C:125