Adding macro the regenerate the gentle geometry for EVE (Bogdan)
authorlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Mar 2011 13:20:29 +0000 (13:20 +0000)
committerlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 15 Mar 2011 13:20:29 +0000 (13:20 +0000)
MUON/MUONGenerateGentleGeometry.C [new file with mode: 0644]
MUON/READMEeve.txt

diff --git a/MUON/MUONGenerateGentleGeometry.C b/MUON/MUONGenerateGentleGeometry.C
new file mode 100644 (file)
index 0000000..e8474c6
--- /dev/null
@@ -0,0 +1,83 @@
+/// \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
+
+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 *node = (TGeoNode*) nlist->At(in);
+    TEveGeoNode *son;
+    if (strcmp(node->GetName(),sname.Data()) == 0)
+    {
+      son = dynamic_cast<TEveGeoNode*>(parent->FindChild(nname->GetName()));
+      if (!son)
+      {
+       son = new TEveGeoNode(node);
+       parent->AddElement(son);
+      }
+    } else {
+      continue;
+    }
+    AddNodes(node,son, depth, depthmax, list);
+  }
+
+}
index 13e143a..a2e840d 100644 (file)
@@ -117,6 +117,11 @@ Just use the buttons or choose the event number in the bottom panel. You can als
 <pre></pre>
 -# Leave the cursor on a track to pop-up its characteristics
 
+\section eve_s3 The simplified "gentle" geometry for the event display
+
+Execute from aliroot the macro MUONGenerateGentleGeometry.C and place the resulting file in EVE/alice-data. This file is used by the macro geom_gentle_muon.C
+from EVE/alice-macros.
+
 This chapter is defined in the READMEeve.txt file.
 
 */