void SetSceneTransparency(TEveGeoNode *node, int transp) { static int level = 0; if (node->NumChildren() > 0) { TEveElementList::List_i iter; for (iter = node->BeginChildren(); iter != node->EndChildren(); iter++) { level++; SetSceneTransparency((TEveGeoNode *)*iter, transp); level--; } } node->SetMainTransparency(transp); } void AddTracks(std::vector> trackPars, TEveTrackList *trList) { static int ntracks = 0; for (auto pars : trackPars) { TEveRecTrackF *etrack = new TEveRecTrackF(); etrack->fV = TEveVectorF(pars[0], pars[1], pars[2]); etrack->fP = TEveVectorF(pars[3], pars[4], pars[5]); etrack->fIndex = ntracks++; TEveTrack *_track = new TEveTrack(etrack, trList->GetPropagator()); _track->SetName(Form("XZ Track %d", etrack->fIndex)); _track->SetStdTitle(); _track->SetAttLineAttMarker(trList); trList->AddElement(_track); } trList->MakeTracks(); } void reproducer() { gEve = new TEveManager(1280, 800, kTRUE, "IV"); auto _XZGeomScene = gEve->SpawnNewScene("XOZG", "XOZ Geometry Scene"); auto _YZGeomScene = gEve->SpawnNewScene("YOZG", "YOZ Geometry Scene"); auto _XYGeomScene = gEve->SpawnNewScene("XOYG", "XOY Geometry Scene"); auto _XZEventScene = gEve->SpawnNewScene("XOZE", "XOZ Event Scene"); auto _YZEventScene = gEve->SpawnNewScene("YOZE", "YOZ Event Scene"); auto _XYEventScene = gEve->SpawnNewScene("XOYE", "XOY Event Scene"); auto _trListXZ = new TEveTrackList("XZ tracks"); auto _trListYZ = new TEveTrackList("YZ tracks"); auto _trListXY = new TEveTrackList("XY tracks"); _trListXZ->GetPropagator()->SetStepper(TEveTrackPropagator::kRungeKutta); _trListYZ->GetPropagator()->SetStepper(TEveTrackPropagator::kRungeKutta); _trListXY->GetPropagator()->SetStepper(TEveTrackPropagator::kRungeKutta); _trListXZ->SetMainColor(kYellow); _trListXZ->SetMarkerColor(kYellow); _trListXZ->SetLineWidth(2); _trListXZ->IncDenyDestroy(); _trListYZ->SetMainColor(kYellow); _trListYZ->SetMarkerColor(kYellow); _trListYZ->SetLineWidth(2); _trListYZ->IncDenyDestroy(); _trListXY->SetMainColor(kYellow); _trListXY->SetMarkerColor(kYellow); _trListXY->SetLineWidth(2); _trListXY->IncDenyDestroy(); // organize windows auto _slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight()); auto _pack = _slot->MakePack(); _pack->SetElementName("Multi View"); _pack->SetHorizontal(); _pack->SetShowTitleBar(kFALSE); _pack->NewSlot()->MakeCurrent(); auto _XZView = gEve->SpawnNewViewer("XZ View", ""); _XZView->AddScene(_XZGeomScene); _XZView->AddScene(_XZEventScene); _XZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoZOX); _pack->NewSlot()->MakeCurrent(); auto _YZView = gEve->SpawnNewViewer("YZ View", ""); _YZView->AddScene(_YZGeomScene); _YZView->AddScene(_YZEventScene); _YZView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoZnOY); _pack->NewSlot()->MakeCurrent(); auto _XYView = gEve->SpawnNewViewer("XY View", ""); _XYView->AddScene(_XYGeomScene); _XYView->AddScene(_XYEventScene); _XYView->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); gEve->GetBrowser()->GetTabRight()->SetTab(1); // Loading geometry std::string geometryFile = "ParamGeo.root"; gGeoManager = gEve->GetGeometry(geometryFile.c_str()); TGeoNode *_wnode = (TGeoNode *)gGeoManager->GetListOfNodes()->At(0); while (_wnode != gGeoManager->GetTopNode()) { gGeoManager->CdUp(); _wnode = gGeoManager->GetCurrentNode(); } gGeoManager->DefaultColors(); TEveGeoTopNode *_node = new TEveGeoTopNode(gGeoManager, _wnode); gEve->AddGlobalElement(_node); _node->ExpandIntoListTreesRecursively(); SetSceneTransparency(_node, 95); gEve->GetGlobalScene()->Changed(); gEve->GetGlobalScene()->Repaint(); _XZGeomScene->AddElement(_node); _YZGeomScene->AddElement(_node); _XYGeomScene->AddElement(_node); gEve->FullRedraw3D(kTRUE); // Apparently the bounding box for the XZ projection is either wrong or ignored // good job, Eve... double *_cvec = _XZView->GetGLViewer()->CurrentCamera().GetCenterVec(); _XZView->GetGLViewer()->CurrentCamera().SetCenterVec(_cvec[0], _cvec[1], _cvec[2] - 40); _XZView->GetGLViewer()->CurrentCamera().Zoom(215, 0, 0); _XZView->GetGLViewer()->ResetCurrentCamera(); _XYView->GetGLViewer()->CurrentCamera().Zoom(95, 0, 0); auto debugfile = TFile::Open("EDdebug.root"); TEvePointSet *pSetXZ = (TEvePointSet *)debugfile->Get("pSetXZ"); _XZEventScene->AddElement(pSetXZ); TEvePointSet *pSetYZ = (TEvePointSet *)debugfile->Get("pSetYZ"); _YZEventScene->AddElement(pSetYZ); TEvePointSet *pSetXY = (TEvePointSet *)debugfile->Get("pSetXY"); _XYEventScene->AddElement(pSetXY); // XZ std::vector> _XZpars = {{-99.8965, 0, -4.54812, 0.997105, 0, -0.076039}, {5.21958, 0, 99.8637, -0.242694, 0, -0.970103}}; // YZ std::vector> _YZpars = {{0, -2.11108, 99.9777, 0, 0.0327038, -0.999465}}; // XY std::vector> _XYpars = {{-97.3266, 22.9681, 0, 0.965948, -0.258736, 0}}; AddTracks(_XZpars, _trListXZ); AddTracks(_YZpars, _trListYZ); AddTracks(_XYpars, _trListXY); _XZEventScene->AddElement(_trListXZ); _YZEventScene->AddElement(_trListYZ); _XYEventScene->AddElement(_trListXY); }