Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
httpcontrol.C File Reference

Detailed Description

This program demonstrates simple application control via THttpServer Two histogram are filled within endless loop.

Via published commands one can enable/disable histograms filling There are also command to clear histograms content

After macro started, open in browser with url

http://localhost:8080

Histograms will be automatically displayed and monitoring with interval 2000 ms started

#include "TH1.h"
#include "TH2.h"
#include "TRandom3.h"
#include "TSystem.h"
#include "THttpServer.h"
Bool_t bFillHist = kTRUE;
void httpcontrol()
{
// create histograms
TH1D *hpx = new TH1D("hpx","This is the px distribution",100,-4,4);
hpx->SetFillColor(48);
hpx->SetDirectory(nullptr);
TH2D *hpxpy = new TH2D("hpxpy","py vs px",40,-4,4,40,-4,4);
hpxpy->SetDirectory(nullptr);
// start http server
THttpServer* serv = new THttpServer("http:8080");
// One could specify location of newer version of JSROOT
// serv->SetJSROOT("https://root.cern/js/latest/");
// serv->SetJSROOT("https://jsroot.gsi.de/latest/");
// register histograms
serv->Register("/", hpx);
serv->Register("/", hpxpy);
// enable monitoring and
// specify items to draw when page is opened
serv->SetItemField("/","_monitoring","5000");
serv->SetItemField("/","_layout","grid2x2");
serv->SetItemField("/","_drawitem","[hpxpy,hpx,Debug]");
serv->SetItemField("/","_drawopt","col");
// register simple start/stop commands
serv->RegisterCommand("/Start", "bFillHist=kTRUE;", "button;rootsys/icons/ed_execute.png");
serv->RegisterCommand("/Stop", "bFillHist=kFALSE;", "button;rootsys/icons/ed_interrupt.png");
// one could hide commands and let them appear only as buttons
serv->Hide("/Start");
serv->Hide("/Stop");
// register commands, invoking object methods
serv->RegisterCommand("/ResetHPX","/hpx/->Reset()", "button;rootsys/icons/ed_delete.png");
serv->RegisterCommand("/ResetHPXPY","/hpxpy/->Reset()", "button;rootsys/icons/bld_delete.png");
// create debug text element, use MathJax - works only on Firefox
serv->CreateItem("/Debug","debug output");
serv->SetItemField("/Debug", "_kind", "Text");
serv->SetItemField("/Debug", "value","\\(\\displaystyle{x+1\\over y-1}\\)");
serv->SetItemField("/Debug", "mathjax", "true");
// Fill histograms randomly
TRandom3 random;
Float_t px, py;
const Long_t kUPDATE = 1000;
Long_t cnt = 0;
while (kTRUE) {
if (bFillHist) {
random.Rannor(px,py);
hpx->Fill(px);
hpxpy->Fill(px,py);
cnt++;
} else {
gSystem->Sleep(10); // sleep minimal time
}
if ((cnt % kUPDATE==0) || !bFillHist) {
// IMPORTANT: one should regularly call ProcessEvents
// to let http server process requests
serv->SetItemField("/Debug", "value", Form("\\(\\displaystyle{x+1\\over y-1}\\) Loop:%ld", cnt/kUPDATE));
if (gSystem->ProcessEvents()) break;
}
}
}
bool Bool_t
Boolean (0=false, 1=true) (bool).
Definition RtypesCore.h:77
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
Definition RtypesCore.h:68
float Float_t
Float 4 bytes (float).
Definition RtypesCore.h:71
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2496
externTSystem * gSystem
Definition TSystem.h:582
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition TAttFill.h:40
1-D histogram with a double per channel (see TH1 documentation)
Definition TH1.h:926
virtual void SetDirectory(TDirectory *dir)
virtual Int_t Fill(Double_t x)
2-D histogram with a double per channel (see TH1 documentation)
Definition TH2.h:400
Online http server for arbitrary ROOT application.
Definition THttpServer.h:31
Bool_t RegisterCommand(const char *cmdname, const char *method, const char *icon=nullptr)
Register command which can be executed from web interface.
Bool_t CreateItem(const char *fullname, const char *title)
Create item in sniffer.
Bool_t Hide(const char *fullname, Bool_t hide=kTRUE)
Hides folder or element from web gui.
Bool_t Register(const char *subfolder, TObject *obj)
Register object in subfolder.
Bool_t SetItemField(const char *fullname, const char *name, const char *value)
Set item field in sniffer.
Random number generator class based on M.
Definition TRandom3.h:27
virtual void Rannor(Float_t &a, Float_t &b)
Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
Definition TRandom.cxx:506
Author
Sergey Linev

Definition in file httpcontrol.C.