31 namespace REX = ROOT::Experimental;
33 REX::REveManager *eveMng =
nullptr;
35 REX::REvePointSet* getPointSet(
int npoints = 2,
float s=2,
int color=28)
37 TRandom &r = *gRandom;
39 auto ps =
new REX::REvePointSet(
"testPnts",
"title", npoints);
41 for (Int_t i=0; i<npoints; ++i)
42 ps->SetNextPoint(r.Uniform(-s,s), r.Uniform(-s,s), r.Uniform(-s,s));
44 ps->SetMarkerColor(color);
45 ps->SetMarkerSize(3+r.Uniform(1, 2));
50 void makeProjectedViewsAndScene(REX::REveProjection::EPType_e type,
bool scale)
52 auto rPhiGeomScene = eveMng->SpawnNewScene(Form(
"Project%s Geo", scale ?
"PreScaled" :
""));
53 auto rPhiEventScene = eveMng->SpawnNewScene(Form(
"Project%s Event", scale ?
"PreScaled" :
""));
55 auto mngRhoPhi =
new REX::REveProjectionManager(type);
57 REX::REveProjection* p = mngRhoPhi->GetProjection();
58 p->AddPreScaleEntry(0, 0, 4);
59 p->AddPreScaleEntry(0, 45, 1);
60 p->AddPreScaleEntry(0, 310, 0.5);
61 p->SetUsePreScale(kTRUE);
63 auto rphiView = eveMng->SpawnNewViewer(
"Projected View",
"");
64 rphiView->AddScene(rPhiGeomScene);
65 rphiView->AddScene(rPhiEventScene);
67 for (
auto &ie : eveMng->GetGlobalScene()->RefChildren())
68 mngRhoPhi->ImportElements(ie, rPhiGeomScene);
70 for (
auto &ie : eveMng->GetEventScene()->RefChildren())
71 mngRhoPhi->ImportElements(ie, rPhiEventScene);
74 TGeoNode* getNodeFromPath( TGeoNode* top, std::string path)
77 istringstream f(path);
79 while (getline(f, s,
'/'))
80 node = node->GetVolume()->FindNode(s.c_str());
86 void projection_prescale(std::string type =
"RhPhi")
88 eveMng = REX::REveManager::Create();
91 TFile::SetCacheFileDir(
".");
92 auto geoManager = eveMng->GetGeometry(
"http://root.cern.ch/files/cms.root");
93 TGeoNode* top = geoManager->GetTopVolume()->FindNode(
"CMSE_1");
94 auto holder =
new REX::REveElement(
"MUON");
95 eveMng->GetGlobalScene()->AddElement(holder);
96 auto n = getNodeFromPath(top,
"MUON_1/MB_1");
97 auto m =
new REX::REveGeoShape(
"MB_1");
98 m->SetShape(n->GetVolume()->GetShape());
99 m->SetMainColor(kOrange);
100 holder->AddElement(m);
102 auto bv = n->GetVolume();
103 for (
int i = 1; i < 5; ++i ) {
105 auto n = bv->FindNode(Form(
"MBXC_%d",i));
106 auto gss = n->GetVolume()->GetShape();
107 auto b1s =
new REX::REveGeoShape(Form(
"Arc %d", i));
108 b1s->InitMainTrans();
109 const double* move = n->GetMatrix()->GetTranslation();
110 b1s->RefMainTrans().SetFrom( *(n->GetMatrix()));
112 b1s->SetMainColor(kBlue);
113 holder->AddElement(b1s);
117 auto line =
new REX::REveLine();
118 line->SetNextPoint(0, 0, 0);
120 line->SetNextPoint(a, a, a);
121 eveMng->GetEventScene()->AddElement(line);
123 auto line2 =
new REX::REveLine();
124 line2->SetNextPoint(0, 0, 0);
126 line2->SetNextPoint(b, b+5, b);
127 line2->SetMainColor(kRed);
128 eveMng->GetEventScene()->AddElement(line2);
130 auto points = getPointSet(10, 30);
131 eveMng->GetEventScene()->AddElement(points);
134 if (type ==
"RPhi") {
135 makeProjectedViewsAndScene(REX::REveProjection::kPT_RPhi,
true);
136 makeProjectedViewsAndScene(REX::REveProjection::kPT_RPhi,
false);
139 makeProjectedViewsAndScene(REX::REveProjection::kPT_RhoZ,
true);
140 makeProjectedViewsAndScene(REX::REveProjection::kPT_RhoZ,
false);