Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
httpserver.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_http
3/// This program creates :
4/// - a one dimensional histogram
5/// - a two dimensional histogram
6/// - a profile histogram
7/// - a memory-resident ntuple
8///
9/// These objects are filled with some random numbers and saved on a in-memory file.
10/// All objects can be seen in web browser is open url:
11/// ~~~
12/// http://localhost:8080
13/// ~~~
14///
15/// \macro_code
16///
17/// \author Sergey Linev
18
19#include "TFile.h"
20#include "TMemFile.h"
21#include "TNtuple.h"
22#include "TH2.h"
23#include "TProfile.h"
24#include "TCanvas.h"
25#include "TFrame.h"
26#include "TROOT.h"
27#include "TSystem.h"
28#include "TRandom3.h"
29#include "TBenchmark.h"
30#include "THttpServer.h"
31
32void httpserver(const char* jobname = "job1", Long64_t maxcnt = 0)
33{
34 auto filename = TString::Format("%s.root", jobname);
35 TFile *hfile = new TMemFile(filename,"RECREATE","Demo ROOT file with histograms");
36
37 // Create some histograms, a profile histogram and an ntuple
38 TH1F *hpx = new TH1F("hpx","This is the px distribution",100,-4,4);
39 hpx->SetFillColor(48);
40 TH2F *hpxpy = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4);
41 TProfile *hprof = new TProfile("hprof","Profile of pz versus px",100,-4,4,0,20);
42 TNtuple *ntuple = new TNtuple("ntuple","Demo ntuple","px:py:pz:random:i");
43 hfile->Write();
44
45
46 // http server with port 8080, use jobname as top-folder name
47 THttpServer* serv = new THttpServer(TString::Format("http:8080?top=%s", jobname));
48
49 // fastcgi server with port 9000, use jobname as top-folder name
50 // THttpServer* serv = new THttpServer(TString::Format("fastcgi:9000?top=%s_fastcgi", jobname));
51
52 // when read-only mode disabled one could execute object methods like TTree::Draw()
53 serv->SetReadOnly(kFALSE);
54
55 // One could specify location of newer version of JSROOT
56 // serv->SetJSROOT("https://root.cern/js/latest/");
57 // serv->SetJSROOT("https://jsroot.gsi.de/latest/");
58
59
60 gBenchmark->Start(jobname);
61
62 // Create a new canvas.
63 TCanvas *c1 = new TCanvas("c1","Dynamic Filling Example",200,10,700,500);
64 c1->SetFillColor(42);
65 c1->GetFrame()->SetFillColor(21);
66 c1->GetFrame()->SetBorderSize(6);
67 c1->GetFrame()->SetBorderMode(-1);
68
69 // Fill histograms randomly
70 TRandom3 random;
71 Float_t px, py, pz;
72 const Int_t kUPDATE = 1000;
73 Long64_t i = 0;
74
75 while (true) {
76 random.Rannor(px,py);
77 pz = px*px + py*py;
78 Float_t rnd = random.Rndm(1);
79 hpx->Fill(px);
80 hpxpy->Fill(px,py);
81 hprof->Fill(px,pz);
82 // fill only first 25000 events in NTuple
83 if (i < 25000) ntuple->Fill(px,py,pz,rnd,i);
84 if (i && (i%kUPDATE) == 0) {
85 if (i == kUPDATE) hpx->Draw();
86 c1->Modified();
87 c1->Update();
88 if (i == kUPDATE) hfile->Write();
89
90 if (gSystem->ProcessEvents()) break;
91 }
92 i++;
93 if ((maxcnt>0) && (i>=maxcnt)) break;
94 }
95
96 gBenchmark->Show(jobname);
97}
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
long long Long64_t
Definition RtypesCore.h:80
R__EXTERN TBenchmark * gBenchmark
Definition TBenchmark.h:59
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
R__EXTERN TSystem * gSystem
Definition TSystem.h:555
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition TAttFill.h:37
virtual void Start(const char *name)
Starts Benchmark with the specified name.
virtual void Show(const char *name)
Stops Benchmark name and Prints results.
The Canvas class.
Definition TCanvas.h:23
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:53
Int_t Write(const char *name=nullptr, Int_t opt=0, Int_t bufsiz=0) override
Write memory objects to this file.
Definition TFile.cxx:2429
1-D histogram with a float per channel (see TH1 documentation)
Definition TH1.h:621
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
Definition TH1.cxx:3344
void Draw(Option_t *option="") override
Draw this histogram with options.
Definition TH1.cxx:3066
2-D histogram with a float per channel (see TH1 documentation)
Definition TH2.h:307
Int_t Fill(Double_t) override
Invalid Fill method.
Definition TH2.cxx:393
Online http server for arbitrary ROOT application.
Definition THttpServer.h:31
void SetReadOnly(Bool_t readonly=kTRUE)
Set read-only mode for the server (default on)
A TMemFile is like a normal TFile except that it reads and writes only from memory.
Definition TMemFile.h:19
A simple TTree restricted to a list of float variables only.
Definition TNtuple.h:28
Int_t Fill() override
Fill a Ntuple with current values in fArgs.
Definition TNtuple.cxx:169
Profile Histogram.
Definition TProfile.h:32
Int_t Fill(const Double_t *v)
Definition TProfile.h:55
Random number generator class based on M.
Definition TRandom3.h:27
Double_t Rndm() override
Machine independent random number generator.
Definition TRandom3.cxx:99
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:507
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2378
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
Definition TSystem.cxx:416
return c1
Definition legend1.C:41