39 namespace REX = ROOT::Experimental;
42 REX::REveManager *eveMng =
nullptr;
43 REX::REveProjectionManager *mngRhoPhi =
nullptr;
44 REX::REveProjectionManager *mngRhoZ =
nullptr;
45 REX::REveScene *rPhiGeomScene =
nullptr, *rPhiEventScene =
nullptr;
46 REX::REveScene *rhoZGeomScene =
nullptr, *rhoZEventScene =
nullptr;
47 REX::REveViewer *rphiView =
nullptr;
48 REX::REveViewer *rhoZView =
nullptr;
50 const Double_t kR_min = 240;
51 const Double_t kR_max = 250;
52 const Double_t kZ_d = 300;
55 REX::REvePointSet *getPointSet(
int npoints = 2,
float s=2,
int color=28)
57 TRandom &r = *gRandom;
59 auto ps =
new REX::REvePointSet(
"fu",
"", npoints);
61 for (Int_t i=0; i<npoints; ++i)
62 ps->SetNextPoint(r.Uniform(-s,s), r.Uniform(-s,s), r.Uniform(-s,s));
64 ps->SetMarkerColor(color);
65 ps->SetMarkerSize(3+r.Uniform(1, 7));
66 ps->SetMarkerStyle(4);
72 REX::REveElement*
event = eveMng->GetEventScene();
74 auto pntHolder =
new REX::REveElement(
"Hits");
76 auto ps1 = getPointSet(20, 100);
77 ps1->SetName(
"Points_1");
78 pntHolder->AddElement(ps1);
80 auto ps2 = getPointSet(10, 200, 4);
81 ps2->SetName(
"Points_2");
82 pntHolder->AddElement(ps2);
84 event->AddElement(pntHolder);
89 TRandom &r = *gRandom;
91 REX::REveElement*
event = eveMng->GetEventScene();
92 auto prop =
new REX::REveTrackPropagator();
93 prop->SetMagFieldObj(
new REX::REveMagFieldDuo(350, -3.5, 2.0));
98 auto trackHolder =
new REX::REveElement(
"Tracks");
103 int N_Tracks = 10 + r.Integer(20);
104 for (
int i = 0; i < N_Tracks; i++)
106 TParticle* p =
new TParticle();
108 int pdg = 11* (r.Integer(2) -1);
111 p->SetProductionVertex(r.Uniform(-v,v), r.Uniform(-v,v), r.Uniform(-v,v), 1);
112 p->SetMomentum(r.Uniform(-m,m), r.Uniform(-m,m), r.Uniform(-m,m)*r.Uniform(1, 3), 1);
113 auto track =
new REX::REveTrack(p, 1, prop);
115 track->SetMainColor(kBlue);
116 track->SetName(Form(
"RandomTrack_%d", i));
117 trackHolder->AddElement(track);
120 event->AddElement(trackHolder);
125 TRandom &r = *gRandom;
127 REX::REveElement *
event = eveMng->GetEventScene();
128 auto jetHolder =
new REX::REveElement(
"Jets");
130 int N_Jets = 5 + r.Integer(5);
131 for (
int i = 0; i < N_Jets; i++)
133 auto jet =
new REX::REveJetCone(Form(
"Jet_%d", i));
134 jet->SetCylinder(2*kR_max, 2*kZ_d);
135 jet->AddEllipticCone(r.Uniform(-3.5, 3.5), r.Uniform(0, TMath::TwoPi()),
136 r.Uniform(0.02, 0.2), r.Uniform(0.02, 0.3));
137 jet->SetFillColor(kPink - 8);
138 jet->SetLineColor(kViolet - 7);
140 jetHolder->AddElement(jet);
142 event->AddElement(jetHolder);
147 float pos[3] = {1.46589e-06,-1.30522e-05,-1.98267e-05};
151 double a[16] = {1.46589e-01,-1.30522e-02,-1.98267e-02, 0,
152 -1.30522e-02, 4.22955e-02,-5.86628e-03, 0,
153 -1.98267e-02,-5.86628e-03, 2.12836e-01, 0,
159 for(
int i = 0; i < 3; i++)
160 for(
int j = 0; j < 3; j++)
162 xxx(i,j) = t(i+1,j+1);
165 TMatrixDEigen eig(xxx);
166 TVectorD xxxEig ( eig.GetEigenValues() );
167 xxxEig = xxxEig.Sqrt();
169 TMatrixD vecEig = eig.GetEigenVectors();
170 REX::REveVector v[3];
int ei = 0;
171 for (
int i = 0; i < 3; ++i)
173 v[i].Set(vecEig(0,i), vecEig(1,i), vecEig(2,i));
176 REX::REveEllipsoid* ell =
new REX::REveEllipsoid(
"VertexError");
177 ell->InitMainTrans();
178 ell->SetMainColor(kGreen + 10);
179 ell->SetLineWidth(2);
180 ell->SetBaseVectors(v[0], v[1], v[2]);
182 REX::REveElement *
event = eveMng->GetEventScene();
183 event->AddElement(ell);
186 auto ps =
new REX::REvePointSet();
187 ps->SetMainColor(kGreen + 10);
188 ps->SetNextPoint(pos[0], pos[1], pos[2]);
189 ps->SetMarkerStyle(4);
190 ps->SetMarkerSize(4);
191 event->AddElement(ps);
195 void makeEventScene()
203 void makeGeometryScene()
205 auto b1 =
new REX::REveGeoShape(
"Barrel 1");
206 b1->SetShape(
new TGeoTube(kR_min, kR_max, kZ_d));
207 b1->SetMainColor(kCyan);
208 eveMng->GetGlobalScene()->AddElement(b1);
212 b1->SetNSegments(40);
216 void createProjectionStuff()
219 rPhiGeomScene = eveMng->SpawnNewScene(
"RPhi Geometry",
"RPhi");
220 rPhiEventScene = eveMng->SpawnNewScene(
"RPhi Event Data",
"RPhi");
222 mngRhoPhi =
new REX::REveProjectionManager(REX::REveProjection::kPT_RPhi);
224 rphiView = eveMng->SpawnNewViewer(
"RPhi View",
"");
225 rphiView->AddScene(rPhiGeomScene);
226 rphiView->AddScene(rPhiEventScene);
230 rhoZGeomScene = eveMng->SpawnNewScene(
"RhoZ Geometry",
"RhoZ");
231 rhoZEventScene = eveMng->SpawnNewScene(
"RhoZ Event Data",
"RhoZ");
233 mngRhoZ =
new REX::REveProjectionManager(REX::REveProjection::kPT_RhoZ);
235 rhoZView = eveMng->SpawnNewViewer(
"RhoZ View",
"");
236 rhoZView->AddScene(rhoZGeomScene);
237 rhoZView->AddScene(rhoZEventScene);
240 void projectScenes(
bool geomp,
bool eventp)
244 for (
auto &ie : eveMng->GetGlobalScene()->RefChildren())
246 mngRhoPhi->ImportElements(ie, rPhiGeomScene);
247 mngRhoZ ->ImportElements(ie, rhoZGeomScene);
252 for (
auto &ie : eveMng->GetEventScene()->RefChildren())
254 mngRhoPhi->ImportElements(ie, rPhiEventScene);
255 mngRhoZ ->ImportElements(ie, rhoZEventScene);
270 class EventManager :
public REX::REveElement
273 EventManager() =
default;
275 virtual ~EventManager() {}
277 virtual void NextEvent()
279 eveMng->DisableRedraw();
280 auto scene = eveMng->GetEventScene();
281 scene->DestroyElements();
283 for (
auto &ie : scene->RefChildren())
286 mngRhoPhi->ImportElements(ie, rPhiEventScene);
288 mngRhoZ ->ImportElements(ie, rhoZEventScene);
290 eveMng->EnableRedraw();
291 eveMng->DoRedraw3D();
294 virtual void QuitRoot()
296 printf(
"Quit ROOT\n");
297 if (gApplication) gApplication->Terminate();
309 eveMng = REX::REveManager::Create();
311 auto eventMng =
new EventManager();
312 eventMng->SetName(
"EventManager");
313 eveMng->GetWorld()->AddElement(eventMng);
315 eveMng->GetWorld()->AddCommand(
"QuitRoot",
"sap-icon://log", eventMng,
"QuitRoot()");
317 eveMng->GetWorld()->AddCommand(
"NextEvent",
"sap-icon://step", eventMng,
"NextEvent()");
323 createProjectionStuff();
324 projectScenes(
true,
true);