diff --git a/tutorials/http/httpgeom.C b/tutorials/http/httpgeom.C new file mode 100644 index 0000000000000000000000000000000000000000..06447f16bbc08e9ea4c02b6ad78c295ed2f25551 --- /dev/null +++ b/tutorials/http/httpgeom.C @@ -0,0 +1,106 @@ +/// \file +/// \ingroup tutorial_http +/// This program creates trivial geometry with several tracks and +/// configure online monitoring of geometry via THttpServer +/// Geometry regularly changed by the program and correspondent changes immediately seen in the browser +/// +/// \macro_code +/// +/// \author Sergey Linev + +#include "THttpServer.h" +#include "TGeoManager.h" +#include "TGeoMaterial.h" +#include "TGeoMedium.h" +#include "TGeoVolume.h" +#include "TGeoTrack.h" +#include "TRandom.h" +#include "TTimer.h" +#include "TPad.h" + +THttpServer *serv = nullptr; +bool drawing = false; +int interval = 2000; + +void create_geo() +{ + if (gGeoManager) { + serv->Unregister(gGeoManager); + delete gGeoManager; + } + + new TGeoManager("world", "the simplest geometry"); + + if (serv) { + serv->Register("/", gGeoManager); + // enable monitoring and + // specify item to draw when page is opened + // serv->SetItemField("/","_layout","grid2x2"); + serv->SetItemField("/","_monitoring",Form("%d",interval)); + serv->SetItemField("/","_drawitem","world"); + serv->SetItemField("/","_drawopt","tracks"); + } + + auto rnd = gRandom; + + TGeoMaterial *mat = new TGeoMaterial("Vacuum",0,0,0); + mat->SetTransparency(50); + TGeoMedium *med = new TGeoMedium("Vacuum",1,mat); + + TGeoVolume *top = gGeoManager->MakeBox("Top",med, 10+5*rnd->Rndm(), 10+5*rnd->Rndm(), 10+5*rnd->Rndm()); + gGeoManager->SetTopVolume(top); + top->SetFillColor(3); + + TGeoVolume *in = gGeoManager->MakeBox("In",med, 2.,2.,2.); + in->SetFillColor(2); + TGeoCombiTrans *tr = new TGeoCombiTrans("tr"); + double x = -8+16*rnd->Rndm(); + double y = -8+16*rnd->Rndm(); + double z = -8+16*rnd->Rndm(); + tr->SetTranslation (x, y, z); + tr->RegisterYourself(); + top->AddNode(in, 1, tr); + + gGeoManager->CloseGeometry(); + + top->SetLineColor(kMagenta); + if (rnd->Rndm() < 0.5) + in->SetLineColor(kGreen); + else + in->SetLineColor(kBlack); + + for (int j=0; j<50; j++) + { + Int_t track_index = gGeoManager->AddTrack(2,22); + auto track = gGeoManager->GetTrack(track_index); + if (rnd->Rndm() < 0.5) + track->SetLineColor(kRed); + else + track->SetLineColor(kBlue); + track->SetLineWidth(2); + + track->AddPoint(x, y, z, 0); + track->AddPoint(-10 + 20*rnd->Rndm(), -10 + 20*rnd->Rndm(), -10 + 20*rnd->Rndm(), 0); + } + + if (drawing) { + // add "showtop" option to display top volume in JSROOT + // gGeoManager->SetTopVisible(); + + top->Draw(); + gGeoManager->DrawTracks(); + gPad->Modified(); + gPad->Update(); + } +} + + +void httpgeom() +{ + drawing = false; // to enable canvas drawing + + serv = new THttpServer("http:8090"); + + TTimer *timer = new TTimer("create_geo()", interval); + timer->TurnOn(); +}