/**************************************************************************
* 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 MUONGenerateGentleGeometry.C
/// \brief Macro for generating a simplified geometry used by the
/// event display alieve. The generated file gentle_geo_muon.root
/// must be placed in EVE/alice-data/. The input is the sensitive
/// volumes list file svmap.dat and the geometry file geometry.root
///
/// To be run from aliroot:
///
/// .x MUONGenerateGentleGeometry.C
///
///
/// \author: M. Tadel, CERN and B. Vulpescu LPC, Clermont-Ferrand
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TSystem.h>
#include <TEveManager.h>
#include <TEveGeoNode.h>
#include <TGeoManager.h>
#include <TGeoNode.h>
#include <TString.h>
#include <TObjArray.h>
#include <Riostream.h>
#endif
void AddNodes(TGeoNode *node, TEveGeoNode *parent, Int_t depth, Int_t depthmax,
TObjArray *list);
void MUONGenerateGentleGeometry() {
gSystem->Load("libGeom");
TEveManager::Create();
TGeoManager::Import("geometry.root");
TGeoNode* tnode = gGeoManager->GetTopNode();
TEveGeoTopNode* eve_tnode = new TEveGeoTopNode(gGeoManager, tnode);
tnode->SetVisibility(kFALSE);
eve_tnode->SetVisLevel(0);
gEve->AddGlobalElement(eve_tnode);
TString path;
TObjArray *list;
Int_t depth;
Char_t line[256];
ifstream in("data/svmap.dat", ios::in);
while (!in.eof()) {
in >> line;
path = TString(line);
if (!path.Contains("ALIC")) continue;
list = path.Tokenize("/");
depth = list->GetEntries();
AddNodes(tnode,eve_tnode,depth,depth,list);
}
eve_tnode->SaveExtract("gentle_geo_muon.root", "Gentle MUON", kTRUE);
}
//_____________________________________________________________________________
void AddNodes(TGeoNode *node, TEveGeoNode *parent, Int_t depth, Int_t depthmax,
TObjArray *list)
{
if (--depth <= 0)
return;
TObjString *nname = (TObjString*)list->At(depthmax-depth);
TString sname = nname->GetString();
TObjArray *nlist = node->GetVolume()->GetNodes();
if (nlist == 0x0) return;
Int_t nNodes = nlist->GetEntries();
for (Int_t in = 0; in < nNodes; in++)
{
TGeoNode *node2 = (TGeoNode*) nlist->At(in);
TEveGeoNode *son;
if (strcmp(node2->GetName(),sname.Data()) == 0)
{
son = dynamic_cast<TEveGeoNode*>(parent->FindChild(nname->GetName()));
if (!son)
{
son = new TEveGeoNode(node2);
parent->AddElement(son);
}
} else {
continue;
}
AddNodes(node2,son, depth, depthmax, list);
}
}
MUONGenerateGentleGeometry.C:1 MUONGenerateGentleGeometry.C:2 MUONGenerateGentleGeometry.C:3 MUONGenerateGentleGeometry.C:4 MUONGenerateGentleGeometry.C:5 MUONGenerateGentleGeometry.C:6 MUONGenerateGentleGeometry.C:7 MUONGenerateGentleGeometry.C:8 MUONGenerateGentleGeometry.C:9 MUONGenerateGentleGeometry.C:10 MUONGenerateGentleGeometry.C:11 MUONGenerateGentleGeometry.C:12 MUONGenerateGentleGeometry.C:13 MUONGenerateGentleGeometry.C:14 MUONGenerateGentleGeometry.C:15 MUONGenerateGentleGeometry.C:16 MUONGenerateGentleGeometry.C:17 MUONGenerateGentleGeometry.C:18 MUONGenerateGentleGeometry.C:19 MUONGenerateGentleGeometry.C:20 MUONGenerateGentleGeometry.C:21 MUONGenerateGentleGeometry.C:22 MUONGenerateGentleGeometry.C:23 MUONGenerateGentleGeometry.C:24 MUONGenerateGentleGeometry.C:25 MUONGenerateGentleGeometry.C:26 MUONGenerateGentleGeometry.C:27 MUONGenerateGentleGeometry.C:28 MUONGenerateGentleGeometry.C:29 MUONGenerateGentleGeometry.C:30 MUONGenerateGentleGeometry.C:31 MUONGenerateGentleGeometry.C:32 MUONGenerateGentleGeometry.C:33 MUONGenerateGentleGeometry.C:34 MUONGenerateGentleGeometry.C:35 MUONGenerateGentleGeometry.C:36 MUONGenerateGentleGeometry.C:37 MUONGenerateGentleGeometry.C:38 MUONGenerateGentleGeometry.C:39 MUONGenerateGentleGeometry.C:40 MUONGenerateGentleGeometry.C:41 MUONGenerateGentleGeometry.C:42 MUONGenerateGentleGeometry.C:43 MUONGenerateGentleGeometry.C:44 MUONGenerateGentleGeometry.C:45 MUONGenerateGentleGeometry.C:46 MUONGenerateGentleGeometry.C:47 MUONGenerateGentleGeometry.C:48 MUONGenerateGentleGeometry.C:49 MUONGenerateGentleGeometry.C:50 MUONGenerateGentleGeometry.C:51 MUONGenerateGentleGeometry.C:52 MUONGenerateGentleGeometry.C:53 MUONGenerateGentleGeometry.C:54 MUONGenerateGentleGeometry.C:55 MUONGenerateGentleGeometry.C:56 MUONGenerateGentleGeometry.C:57 MUONGenerateGentleGeometry.C:58 MUONGenerateGentleGeometry.C:59 MUONGenerateGentleGeometry.C:60 MUONGenerateGentleGeometry.C:61 MUONGenerateGentleGeometry.C:62 MUONGenerateGentleGeometry.C:63 MUONGenerateGentleGeometry.C:64 MUONGenerateGentleGeometry.C:65 MUONGenerateGentleGeometry.C:66 MUONGenerateGentleGeometry.C:67 MUONGenerateGentleGeometry.C:68 MUONGenerateGentleGeometry.C:69 MUONGenerateGentleGeometry.C:70 MUONGenerateGentleGeometry.C:71 MUONGenerateGentleGeometry.C:72 MUONGenerateGentleGeometry.C:73 MUONGenerateGentleGeometry.C:74 MUONGenerateGentleGeometry.C:75 MUONGenerateGentleGeometry.C:76 MUONGenerateGentleGeometry.C:77 MUONGenerateGentleGeometry.C:78 MUONGenerateGentleGeometry.C:79 MUONGenerateGentleGeometry.C:80 MUONGenerateGentleGeometry.C:81 MUONGenerateGentleGeometry.C:82 MUONGenerateGentleGeometry.C:83 MUONGenerateGentleGeometry.C:84 MUONGenerateGentleGeometry.C:85 MUONGenerateGentleGeometry.C:86 MUONGenerateGentleGeometry.C:87 MUONGenerateGentleGeometry.C:88 MUONGenerateGentleGeometry.C:89 MUONGenerateGentleGeometry.C:90 MUONGenerateGentleGeometry.C:91 MUONGenerateGentleGeometry.C:92 MUONGenerateGentleGeometry.C:93 MUONGenerateGentleGeometry.C:94 MUONGenerateGentleGeometry.C:95 MUONGenerateGentleGeometry.C:96 MUONGenerateGentleGeometry.C:97 MUONGenerateGentleGeometry.C:98 MUONGenerateGentleGeometry.C:99 MUONGenerateGentleGeometry.C:100 MUONGenerateGentleGeometry.C:101 MUONGenerateGentleGeometry.C:102 MUONGenerateGentleGeometry.C:103 MUONGenerateGentleGeometry.C:104 MUONGenerateGentleGeometry.C:105 MUONGenerateGentleGeometry.C:106 MUONGenerateGentleGeometry.C:107 MUONGenerateGentleGeometry.C:108 MUONGenerateGentleGeometry.C:109 MUONGenerateGentleGeometry.C:110 MUONGenerateGentleGeometry.C:111 MUONGenerateGentleGeometry.C:112 MUONGenerateGentleGeometry.C:113 MUONGenerateGentleGeometry.C:114 MUONGenerateGentleGeometry.C:115 MUONGenerateGentleGeometry.C:116 MUONGenerateGentleGeometry.C:117 MUONGenerateGentleGeometry.C:118