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);