hcons.C: Histogram consumer script. Create a canvas and 3 pads. Connect
{
// Histogram consumer script. Create a canvas and 3 pads. Connect
// to memory mapped file "hsimple.map", that was created by hprod.C.
// It reads the histograms from shared memory and displays them
// in the pads (sleeping for 0.1 seconds before starting a new read-out
// cycle). This script runs in an infinite loop, so use ctrl-c to stop it.
//Author: Fons Rademakers
gROOT->Reset();
// Create a new canvas and 3 pads
TCanvas *c1;
TPad *pad1, *pad2, *pad3;
if (!gROOT->IsBatch()) {
c1 = new TCanvas("c1","Shared Memory Consumer Example",200,10,700,780);
pad1 = new TPad("pad1","This is pad1",0.02,0.52,0.98,0.98,21);
pad2 = new TPad("pad2","This is pad2",0.02,0.02,0.48,0.48,21);
pad3 = new TPad("pad3","This is pad3",0.52,0.02,0.98,0.48,21);
pad1->Draw();
pad2->Draw();
pad3->Draw();
}
// Open the memory mapped file "hsimple.map" in "READ" (default) mode.
mfile = TMapFile::Create("hsimple.map");
// Print status of mapped file and list its contents
mfile->Print();
mfile->ls();
// Create pointers to the objects in shared memory.
TH1F *hpx = 0;
TH2F *hpxpy = 0;
TProfile *hprof = 0;
// Loop displaying the histograms. Once the producer stops this
// script will break out of the loop.
Double_t oldentries = 0;
while (1) {
hpx = (TH1F *) mfile->Get("hpx", hpx);
hpxpy = (TH2F *) mfile->Get("hpxpy", hpxpy);
hprof = (TProfile *) mfile->Get("hprof", hprof);
if (hpx->GetEntries() == oldentries) break;
oldentries = hpx->GetEntries();
if (!gROOT->IsBatch()) {
pad1->cd();
hpx->Draw();
pad2->cd();
hprof->Draw();
pad3->cd();
hpxpy->Draw("cont");
c1->Modified();
c1->Update();
} else {
printf("Entries, hpx=%d, Mean=%g, RMS=%g\n",hpx->GetEntries(),hpx->GetMean(),hpx->GetRMS());
}
gSystem->Sleep(100); // sleep for 0.1 seconds
if (gSystem->ProcessEvents())
break;
}
}