17 R__LOAD_LIBRARY(libGeom);
18 R__LOAD_LIBRARY(libROOTEve);
20 namespace REX = ROOT::Experimental;
22 void makeEveGeoShape(TGeoNode* n, REX::REveTrans& trans, REX::REveElement* holder)
24 auto gss = n->GetVolume()->GetShape();
25 auto b1s =
new REX::REveGeoShape(n->GetName());
27 b1s->RefMainTrans().SetFrom(trans.Array());
29 b1s->SetMainColor(kCyan);
30 holder->AddElement(b1s);
34 void filterChildNodes(TGeoNode* pn, REX::REveTrans& trans, REX::REveElement* holder, std::string mat,
int maxlevel,
int level)
40 for (
int i = 0; i < pn->GetNdaughters(); ++i)
42 TGeoNode* n = pn->GetDaughter(i);
43 TGeoMaterial* material = n->GetVolume()->GetMaterial();
44 REX::REveTrans ctrans;
45 ctrans.SetFrom(trans.Array());
48 TGeoMatrix *gm = n->GetMatrix();
49 const Double_t *rm = gm->GetRotationMatrix();
50 const Double_t *tv = gm->GetTranslation();
52 t(1,1) = rm[0]; t(1,2) = rm[1]; t(1,3) = rm[2];
53 t(2,1) = rm[3]; t(2,2) = rm[4]; t(2,3) = rm[5];
54 t(3,1) = rm[6]; t(3,2) = rm[7]; t(3,3) = rm[8];
55 t(1,4) = tv[0]; t(2,4) = tv[1]; t(3,4) = tv[2];
59 std::string mn = material->GetName();
62 makeEveGeoShape(n, ctrans, holder);
64 filterChildNodes(n, ctrans,holder, mat, maxlevel, level);
68 TGeoNode* getNodeFromPath( TGeoNode* top, std::string path)
71 istringstream f(path);
73 while (getline(f, s,
'/'))
74 node = node->GetVolume()->FindNode(s.c_str());
82 auto eveMng = REX::REveManager::Create();
84 TFile::SetCacheFileDir(
".");
86 auto geoManager = eveMng->GetGeometry(
"http://root.cern.ch/files/cms.root");
87 TGeoNode* top = geoManager->GetTopVolume()->FindNode(
"CMSE_1");
91 auto holder =
new REX::REveElement(
"Tracker");
92 eveMng->GetGlobalScene()->AddElement(holder);
93 TGeoNode* n = getNodeFromPath(top,
"TRAK_1/SVTX_1/TGBX_1/GAW1_1");
95 std::string material =
"TOB_Silicon";
96 filterChildNodes(n, trans, holder, material, 6, 0);
101 auto holder =
new REX::REveElement(
"MUON");
102 eveMng->GetGlobalScene()->AddElement(holder);
104 auto n = getNodeFromPath(top,
"MUON_1/MB_1");
106 std::string material =
"M_B_Air";
107 REX::REveTrans trans;
108 filterChildNodes(n, trans, holder, material, 1, 0);
110 auto bv = n->GetVolume();
111 for (
int i = 1; i < 5; ++i ) {
112 auto n = bv->FindNode(Form(
"MBXC_%d",i));
113 auto gss = n->GetVolume()->GetShape();
114 auto b1s =
new REX::REveGeoShape(Form(
"Arc %d", i));
115 b1s->InitMainTrans();
116 const double* move = n->GetMatrix()->GetTranslation();
117 b1s->RefMainTrans().SetFrom( *(n->GetMatrix()));
119 b1s->SetMainColor(kBlue);
120 holder->AddElement(b1s);