2 /// \file MUONGenerateGentleGeometry.C
3 /// \brief Macro for generating a simplified geometry used by the
4 /// event display alieve. The generated file gentle_geo_muon.root
5 /// must be placed in EVE/alice-data/. The input is the sensitive
6 /// volumes list file svmap.dat and the geometry file geometry.root
8 /// To be run from aliroot:
10 /// .x MUONGenerateGentleGeometry.C
13 /// \author: M. Tadel, CERN and B. Vulpescu LPC, Clermont-Ferrand
15 void MUONGenerateGentleGeometry() {
17 gSystem->Load("libGeom");
19 TEveManager::Create();
21 TGeoManager::Import("geometry.root");
22 TGeoNode* tnode = gGeoManager->GetTopNode();
23 TEveGeoTopNode* eve_tnode = new TEveGeoTopNode(gGeoManager, tnode);
24 tnode->SetVisibility(kFALSE);
25 eve_tnode->SetVisLevel(0);
27 gEve->AddGlobalElement(eve_tnode);
34 ifstream in("data/svmap.dat", ios::in);
41 if (!path.Contains("ALIC")) continue;
43 list = path.Tokenize("/");
44 depth = list->GetEntries();
45 AddNodes(tnode,eve_tnode,depth,depth,list);
48 eve_tnode->SaveExtract("gentle_geo_muon.root", "Gentle MUON", kTRUE);
52 //_____________________________________________________________________________
53 void AddNodes(TGeoNode *node, TEveGeoNode *parent, Int_t depth, Int_t depthmax, TObjArray *list)
58 TObjString *nname = (TObjString*)list->At(depthmax-depth);
59 TString sname = nname->GetString();
61 TObjArray *nlist = node->GetVolume()->GetNodes();
62 if (nlist == 0x0) return;
63 Int_t nNodes = nlist->GetEntries();
65 for (Int_t in = 0; in < nNodes; in++)
67 TGeoNode *node = (TGeoNode*) nlist->At(in);
69 if (strcmp(node->GetName(),sname.Data()) == 0)
71 son = dynamic_cast<TEveGeoNode*>(parent->FindChild(nname->GetName()));
74 son = new TEveGeoNode(node);
75 parent->AddElement(son);
80 AddNodes(node,son, depth, depthmax, list);