/// \file /// \ingroup tutorial_eve7 \\\PBR pbr_4trk.C /// This example display only points in web browser /// /// \macro_code /// #include "TRandom.h" #include "TParticle.h" #include #include #include #include #include #include "TGeoManager.h" #include "TGeoMaterial.h" #include "TGeoMedium.h" #include "TGeoVolume.h" #include "TGeoTrack.h" #include "TRandom.h" #include "TTimer.h" #include "TPad.h" namespace REX = ROOT::Experimental; void create_geo() { if (gGeoManager) { delete gGeoManager; } new TGeoManager("Cylinder", "the simplest detector geometry"); //--- define some materials TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0); TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7); // //--- define some media TGeoMedium *Vacuum = new TGeoMedium("Vacuum",1, matVacuum); TGeoMedium *Al = new TGeoMedium("Root Material",2, matAl); matVacuum->SetTransparency(90); TGeoVolume *top = gGeoManager->MakeBox("TOP",Vacuum,100,100,100); gGeoManager->SetTopVolume(top); top->SetFillColor(3); TGeoVolume *vol = gGeoManager->MakeTube("CYL",Al, 29.8,30,50); vol->SetFillColor(2); vol->SetLineWidth(1); top->AddNode(vol,1); gGeoManager->CloseGeometry(); // auto cyl1 = new REX::REveGeoShape("Cylinder 1"); // cyl1->SetShape(top); // gGeoManager->GetMasterVolume()->Draw(); // top->Draw(); // gPad->Modified(); // gPad->Update(); } //END create_geo void makeTracks(int N_Tracks, REX::REveElement* trackHolder) { TRandom &r = *gRandom; auto prop = new REX::REveTrackPropagator(); prop->SetMagFieldObj(new REX::REveMagFieldDuo(350, 3.5, -2.0)); prop->SetMaxR(300); prop->SetMaxZ(600); prop->SetMaxOrbs(6); // Default is kHelix propagator. // prop->SetStepper(REX::REveTrackPropagator::kRungeKutta); double v = 0.5; double m = 5; for (int i = 0; i < N_Tracks; i++) { auto p = new TParticle(); int pdg = 11 * (r.Integer(2) > 0 ? 1 : -1); p->SetPdgCode(pdg); p->SetProductionVertex(r.Uniform(-v,v), r.Uniform(-v,v), r.Uniform(-v,v), 1); p->SetMomentum(r.Uniform(-m,m), r.Uniform(-m,m), r.Uniform(-m,m)*r.Uniform(1, 3), 1); auto track = new REX::REveTrack(p, 1, prop); track->MakeTrack(); track->SetMainColor(kBlue); track->SetName(Form("RandomTrack_%d", i)); trackHolder->AddElement(track); } } void pbr_4trk() { int Ntracks = 8; auto eveMng = REX::REveManager::Create(); create_geo(); TFile* geom=TFile::Open("CylGeo.root"); REX::REveGeoShapeExtract* gse = (REX::REveGeoShapeExtract*) geom->Get("Cylinder"); REX::REveGeoShape *gGeomCyl=0; gse->Print(); gGeomCyl = REX::REveGeoShape::ImportShapeExtract(gse, 0); geom->Close(); delete geom; eveMng->GetGlobalScene()->AddElement(gGeomCyl); // gEve->AddGlobalElement(gGeomCyl); auto trackHolder = new REX::REveElement("Tracks"); eveMng->GetEventScene()->AddElement(trackHolder); makeTracks(Ntracks, trackHolder); eveMng->Show(); }