From $ROOTSYS/tutorials/eve/geom_alice_its.C

// @(#)root/eve:$Id$
// Author: Matevz Tadel

// Shows geometry of ALICE ITS.

#include "TEveManager.h"
#include "TEveGeoNode.h"

#include "TGeoManager.h"
#include "TGeoNode.h"
#include "TGeoVolume.h"
#include "TGeoMedium.h"

#include "TString.h"

void geom_alice_its()
{
   TEveManager::Create();

   gGeoManager = gEve->GetGeometry("http://root.cern.ch/files/alice.root");

   TGeoNode* node = gGeoManager->GetTopVolume()->FindNode("ITSV_1");
   TEveGeoTopNode* its = new TEveGeoTopNode(gGeoManager, node);
   gEve->AddGlobalElement(its);

   gEve->Redraw3D(kTRUE);
}


//==============================================================================
// Demonstrate extraction of volumes matching certain criteria.
//==============================================================================

// Should be run in compiled mode -- CINT has issues with recursion.
//
// 1. Creation:
//    root
//      .L geom_alice_its.C+
//      extract_ssd_modules()
//      .q
//    This creates file "test-extract.root" in current dir.
//
// 2. Viewing:
//    root
//      .x show_extract.C("test-extract.root")

TEveGeoNode* descend_extract(TGeoNode* node)
{
   // We only return something if:
   // - this is a node of interest;
   // - one of the daughters returns something of interest.

   const TString material("ITS_SI$");

   TEveGeoNode *res = 0;

   TGeoMedium *medium = node->GetVolume()->GetMedium();
   if (medium && material == medium->GetName())
   {
      // Node of interest - instantiate eve representation and return.
      res = new TEveGeoNode(node);
      return res;
   }

   Int_t nd = node->GetNdaughters();
   for (Int_t i = 0; i < nd; ++i)
   {
      TEveGeoNode *ed = descend_extract(node->GetDaughter(i));

      if (ed)
      {
         if (res == 0) res = new TEveGeoNode(node);
         res->AddElement(ed);
      }
   }

   return res;
}

void extract_ssd_modules()
{
   const TString kEH("extract_ssd_modules");

   TEveManager::Create();

   gGeoManager = gEve->GetGeometry("http://root.cern.ch/files/alice.root");

   Bool_t s = gGeoManager->cd("/ITSV_1/ITSD_1/IT56_1");
   if (!s) {
      Error(kEH, "Start node not found.");
      return;
   }

   TGeoNode *node = gGeoManager->GetCurrentNode();

   TEveGeoNode *egn = descend_extract(node);

   if (egn == 0)
   {
      Warning(kEH, "No matching nodes found.");
      return;
   }

   egn->SaveExtract("test-extract.root", "AliSDD", kTRUE);
}
 geom_alice_its.C:1
 geom_alice_its.C:2
 geom_alice_its.C:3
 geom_alice_its.C:4
 geom_alice_its.C:5
 geom_alice_its.C:6
 geom_alice_its.C:7
 geom_alice_its.C:8
 geom_alice_its.C:9
 geom_alice_its.C:10
 geom_alice_its.C:11
 geom_alice_its.C:12
 geom_alice_its.C:13
 geom_alice_its.C:14
 geom_alice_its.C:15
 geom_alice_its.C:16
 geom_alice_its.C:17
 geom_alice_its.C:18
 geom_alice_its.C:19
 geom_alice_its.C:20
 geom_alice_its.C:21
 geom_alice_its.C:22
 geom_alice_its.C:23
 geom_alice_its.C:24
 geom_alice_its.C:25
 geom_alice_its.C:26
 geom_alice_its.C:27
 geom_alice_its.C:28
 geom_alice_its.C:29
 geom_alice_its.C:30
 geom_alice_its.C:31
 geom_alice_its.C:32
 geom_alice_its.C:33
 geom_alice_its.C:34
 geom_alice_its.C:35
 geom_alice_its.C:36
 geom_alice_its.C:37
 geom_alice_its.C:38
 geom_alice_its.C:39
 geom_alice_its.C:40
 geom_alice_its.C:41
 geom_alice_its.C:42
 geom_alice_its.C:43
 geom_alice_its.C:44
 geom_alice_its.C:45
 geom_alice_its.C:46
 geom_alice_its.C:47
 geom_alice_its.C:48
 geom_alice_its.C:49
 geom_alice_its.C:50
 geom_alice_its.C:51
 geom_alice_its.C:52
 geom_alice_its.C:53
 geom_alice_its.C:54
 geom_alice_its.C:55
 geom_alice_its.C:56
 geom_alice_its.C:57
 geom_alice_its.C:58
 geom_alice_its.C:59
 geom_alice_its.C:60
 geom_alice_its.C:61
 geom_alice_its.C:62
 geom_alice_its.C:63
 geom_alice_its.C:64
 geom_alice_its.C:65
 geom_alice_its.C:66
 geom_alice_its.C:67
 geom_alice_its.C:68
 geom_alice_its.C:69
 geom_alice_its.C:70
 geom_alice_its.C:71
 geom_alice_its.C:72
 geom_alice_its.C:73
 geom_alice_its.C:74
 geom_alice_its.C:75
 geom_alice_its.C:76
 geom_alice_its.C:77
 geom_alice_its.C:78
 geom_alice_its.C:79
 geom_alice_its.C:80
 geom_alice_its.C:81
 geom_alice_its.C:82
 geom_alice_its.C:83
 geom_alice_its.C:84
 geom_alice_its.C:85
 geom_alice_its.C:86
 geom_alice_its.C:87
 geom_alice_its.C:88
 geom_alice_its.C:89
 geom_alice_its.C:90
 geom_alice_its.C:91
 geom_alice_its.C:92
 geom_alice_its.C:93
 geom_alice_its.C:94
 geom_alice_its.C:95
 geom_alice_its.C:96
 geom_alice_its.C:97
 geom_alice_its.C:98
 geom_alice_its.C:99
 geom_alice_its.C:100
 geom_alice_its.C:101
 geom_alice_its.C:102
 geom_alice_its.C:103
 geom_alice_its.C:104
 geom_alice_its.C:105
 geom_alice_its.C:106