Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
httpgeom.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_http
3 /// This program creates trivial geometry with several tracks and
4 /// configure online monitoring of geometry via THttpServer
5 /// Geometry regularly changed by the program and correspondent changes immediately seen in the browser
6 ///
7 /// \macro_code
8 ///
9 /// \author Sergey Linev
10 
11 #include "THttpServer.h"
12 #include "TGeoManager.h"
13 #include "TGeoMaterial.h"
14 #include "TGeoMedium.h"
15 #include "TGeoVolume.h"
16 #include "TGeoTrack.h"
17 #include "TRandom.h"
18 #include "TTimer.h"
19 #include "TPad.h"
20 
21 THttpServer *serv = nullptr;
22 bool drawing = false;
23 int interval = 2000;
24 
25 void create_geo()
26 {
27  if (gGeoManager) {
28  serv->Unregister(gGeoManager);
29  delete gGeoManager;
30  }
31 
32  new TGeoManager("world", "the simplest geometry");
33 
34  if (serv) {
35  serv->Register("/", gGeoManager);
36  // enable monitoring and
37  // specify item to draw when page is opened
38  // serv->SetItemField("/","_layout","grid2x2");
39  serv->SetItemField("/","_monitoring",Form("%d",interval));
40  serv->SetItemField("/","_drawitem","world");
41  serv->SetItemField("/","_drawopt","tracks");
42  }
43 
44  auto rnd = gRandom;
45 
46  TGeoMaterial *mat = new TGeoMaterial("Vacuum",0,0,0);
47  mat->SetTransparency(50);
48  TGeoMedium *med = new TGeoMedium("Vacuum",1,mat);
49 
50  TGeoVolume *top = gGeoManager->MakeBox("Top",med, 10+5*rnd->Rndm(), 10+5*rnd->Rndm(), 10+5*rnd->Rndm());
51  gGeoManager->SetTopVolume(top);
52  top->SetFillColor(3);
53 
54  TGeoVolume *in = gGeoManager->MakeBox("In",med, 2.,2.,2.);
55  in->SetFillColor(2);
56  TGeoCombiTrans *tr = new TGeoCombiTrans("tr");
57  double x = -8+16*rnd->Rndm();
58  double y = -8+16*rnd->Rndm();
59  double z = -8+16*rnd->Rndm();
60  tr->SetTranslation (x, y, z);
61  tr->RegisterYourself();
62  top->AddNode(in, 1, tr);
63 
64  gGeoManager->CloseGeometry();
65 
66  top->SetLineColor(kMagenta);
67  if (rnd->Rndm() < 0.5)
68  in->SetLineColor(kGreen);
69  else
70  in->SetLineColor(kBlack);
71 
72  for (int j=0; j<50; j++)
73  {
74  Int_t track_index = gGeoManager->AddTrack(2,22);
75  auto track = gGeoManager->GetTrack(track_index);
76  if (rnd->Rndm() < 0.5)
77  track->SetLineColor(kRed);
78  else
79  track->SetLineColor(kBlue);
80  track->SetLineWidth(2);
81 
82  track->AddPoint(x, y, z, 0);
83  track->AddPoint(-10 + 20*rnd->Rndm(), -10 + 20*rnd->Rndm(), -10 + 20*rnd->Rndm(), 0);
84  }
85 
86  if (drawing) {
87  // add "showtop" option to display top volume in JSROOT
88  // gGeoManager->SetTopVisible();
89 
90  top->Draw();
91  gGeoManager->DrawTracks();
92  gPad->Modified();
93  gPad->Update();
94  }
95 }
96 
97 
98 void httpgeom()
99 {
100  drawing = false; // to enable canvas drawing
101 
102  serv = new THttpServer("http:8090");
103 
104  TTimer *timer = new TTimer("create_geo()", interval);
105  timer->TurnOn();
106 }