Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
overlay_test.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_eve_7
3/// Demonstrates usage of TEveBox class.
4///
5/// \image html eve_box.png
6/// \macro_code
7///
8/// \author Matevz Tadel
9#include <ROOT/REveBox.hxx>
10#include <ROOT/REveScene.hxx>
11#include <ROOT/REveManager.hxx>
13#include <ROOT/REveTrack.hxx>
14#include <ROOT/REveJetCone.hxx>
15#include <ROOT/REveText.hxx>
16
17using namespace ROOT::Experimental;
18const Double_t kR_min = 240;
19const Double_t kR_max = 250;
20const Double_t kZ_d = 300;
21
22void makeTracks(int N_Tracks, REveElement *trackHolder)
23{
24 TRandom &r = *gRandom;
25 auto prop = new REveTrackPropagator();
26 prop->SetMagFieldObj(new REveMagFieldDuo(350, 3.5, -2.0));
27 prop->SetMaxR(300);
28 prop->SetMaxZ(600);
29 prop->SetMaxOrbs(6);
30 // Default is kHelix propagator.
31 // prop->SetStepper(REX::REveTrackPropagator::kRungeKutta);
32
33 double v = 0.5;
34 double m = 5;
35
36 for (int i = 0; i < N_Tracks; i++) {
37 auto p = new TParticle();
38
39 int pdg = 11 * (r.Integer(2) > 0 ? 1 : -1);
40 p->SetPdgCode(pdg);
41
42 p->SetProductionVertex(r.Uniform(-v, v), r.Uniform(-v, v), r.Uniform(-v, v), 1);
43 p->SetMomentum(r.Uniform(-m, m), r.Uniform(-m, m), r.Uniform(-m, m) * r.Uniform(1, 3), 1);
44 auto track = new REveTrack(p, 1, prop);
45 track->MakeTrack();
46 track->SetMainColor(kBlue);
47 track->SetName(Form("RandomTrack_%d", i));
48 track->SetLineWidth(3);
49 trackHolder->AddElement(track);
50 }
51}
52
53REveElement *makeBox(Float_t a = 10, Float_t d = 5, Float_t x = 0, Float_t y = 0, Float_t z = 0)
54{
55
56 TRandom &r = *gRandom;
57 auto b = new REveBox;
58 b->SetMainColor(kCyan);
59 b->SetMainTransparency(0);
60
61#define RND_BOX(x) r.Uniform(-(x), (x))
62 b->SetVertex(0, x - a + RND_BOX(d), y - a + RND_BOX(d), z - a + RND_BOX(d));
63 b->SetVertex(1, x - a + RND_BOX(d), y + a + RND_BOX(d), z - a + RND_BOX(d));
64 b->SetVertex(2, x + a + RND_BOX(d), y + a + RND_BOX(d), z - a + RND_BOX(d));
65 b->SetVertex(3, x + a + RND_BOX(d), y - a + RND_BOX(d), z - a + RND_BOX(d));
66 b->SetVertex(4, x - a + RND_BOX(d), y - a + RND_BOX(d), z + a + RND_BOX(d));
67 b->SetVertex(5, x - a + RND_BOX(d), y + a + RND_BOX(d), z + a + RND_BOX(d));
68 b->SetVertex(6, x + a + RND_BOX(d), y + a + RND_BOX(d), z + a + RND_BOX(d));
69 b->SetVertex(7, x + a + RND_BOX(d), y - a + RND_BOX(d), z + a + RND_BOX(d));
70#undef RND_BOX
71
72 return b;
73}
74
75void makeJets(int N_Jets, REveElement *jetHolder)
76{
77 TRandom &r = *gRandom;
78
79 for (int i = 0; i < N_Jets; i++) {
80 auto jet = new REveJetCone(Form("Jet_%d", i));
81 jet->SetCylinder(2 * kR_max, 2 * kZ_d);
82 jet->AddEllipticCone(r.Uniform(-0.5, 0.5), r.Uniform(0, TMath::TwoPi()), 0.1, 0.2);
83 jet->SetFillColor(kRed);
84 jet->SetLineColor(kRed);
85
86 jetHolder->AddElement(jet);
87 }
88}
89
90void makeTexts(REveElement *textHolder)
91{
92 {
93 auto text = new REveText(Form("Text_0"));
94 text->SetMainColor(kViolet);
95 REveVector pos(0.5, 0.5, 0.2);
96 text->SetPosition(pos);
97 text->SetFontSize(0.1);
98 text->SetFont(2);
99 text->SetText(text->GetCName());
100 textHolder->AddElement(text);
101 }
102}
103
104void overlay_test()
105{
106 auto gEve = REveManager::Create();
107
108 TRandom &r = *gRandom;
109
110 // create an overlay scene
111 REveScene *os = gEve->SpawnNewScene("Overly scene", "OverlayTitle");
112 ((REveViewer *)(gEve->GetViewers()->FirstChild()))->AddScene(os);
113 os->SetIsOverlay(true);
114
115 makeTexts(os);
116
117 auto jetHolder = new REveElement("jets");
118 makeJets(2, jetHolder);
119 gEve->GetEventScene()->AddElement(jetHolder);
120
121 auto trackHolder = new REveElement("Tracks");
122 gEve->GetEventScene()->AddElement(trackHolder);
123 makeTracks(10, trackHolder);
124
125 gEve->Show();
126}
ROOT::R::TRInterface & r
Definition Object.C:4
#define d(i)
Definition RSha256.hxx:102
#define b(i)
Definition RSha256.hxx:100
#define a(i)
Definition RSha256.hxx:99
double Double_t
Double 8 bytes.
Definition RtypesCore.h:73
float Float_t
Float 4 bytes (float).
Definition RtypesCore.h:71
@ kRed
Definition Rtypes.h:67
@ kCyan
Definition Rtypes.h:67
@ kBlue
Definition Rtypes.h:67
@ kViolet
Definition Rtypes.h:68
externTEveManager * gEve
externTRandom * gRandom
Definition TRandom.h:62
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2496
3D box with arbitrary vertices (cuboid).
Base class for REveUtil visualization elements, providing hierarchy management, rendering control and...
Draws a jet cone with leading particle is specified in (eta,phi) and cone radius is given.
Implements constant magnetic filed that switches on given axial radius fR2 from vector fBIn to fBOut.
Eve representation of TGLScene.
Holding structure for a number of track rendering parameters.
Visual representation of a track.
Eve representation of a GL view.
static REveManager * Create()
If global REveManager* REX::gEve is not set initialize it.
Description of the dynamic properties of a particle.
Definition TParticle.h:26
This is the base class for the ROOT Random number generators.
Definition TRandom.h:27
#define RND_BOX(x)
TText * text
void makeTracks(int N_Tracks, REveElement *trackHolder, float *pos)
const Double_t kR_max
const Double_t kZ_d
const Double_t kR_min
void makeJets(int N_Jets, REveElement *jetHolder)
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Namespace for ROOT features in testing.
Definition TROOT.h:100
REveVectorT< Float_t > REveVector
constexpr Double_t TwoPi()
Definition TMath.h:47
TMarker m
Definition textangle.C:8