[ROOT] Share memory

From: Laurent Mirabito (mirabito@in2p3.fr)
Date: Fri Dec 22 2000 - 09:15:16 MET


	Hi all,
I attach to this mail the file hprod.cxx which create a big share memory
and put several TH1F in it. It compiles and works with ROOT 3.0 on Linux
PC (Suse 7.0) but I cannot open the share memory in root interactively
(segfault). Any idea?
	Many thanks in advance for any help
	Laurent Mirabito 
	IPN Lyon


// @(#)root/test:$Name:  $:$Id: hsimple.cxx,v 1.2 2000/07/11 18:05:26 rdm Exp $
// Author: Rene Brun   19/08/96

//*-*-*-*-*-*-*Simple examples with histograms created/filled and saved*-*-*-*
//*-*          ========================================================
//*-*
//*-*  This program creates :
//*-*    - a one dimensional histogram
//*-*    - a two dimensional histogram
//*-*    - a profile histogram
//*-*    - an ntuple
//*-*
//*-*  These objects are filled with some random numbers and saved on a file.
//*-*
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

int hsimple();

#ifndef __CINT__
#include "TROOT.h"
#include "TFile.h"
#include "TH1.h"
#include "TH2.h"
#include "TProfile.h"
#include "TMapFile.h"
#include "TNtuple.h"
#include "TRandom.h"

int hproducer();
//______________________________________________________________________________
int main()
{
  TROOT simple("simple","Test of histogramming and I/O");
  return hproducer();
}
#endif

int hproducer()
{
  // Create a new ROOT binary machine independent file.
  // Note that this file may contain any kind of ROOT objects, histograms,
  // pictures, graphics objects, detector geometries, tracks, events, etc..
  // This file is now becoming the current directory.
  //  TFile hfile("hsimple.root","RECREATE","Demo ROOT file with histograms");
  TMapFile* mfile = TMapFile::Create("hsimple.map","RECREATE", 4000000,
                            "Demo memory mapped file with histograms");
  // Create some histograms, a profile histogram and an ntuple
  TH1F* hpx[100];
  for (Int_t i=0;i<100;i++)
    {
      char cmd[100];
      sprintf(cmd,"hpx%.2d",i);
      hpx[i]   = new TH1F(cmd,"This is the px distribution",1000,-4,4);
    }
  TH2F *hpxpy = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4);
  TProfile *hprof = new TProfile("hprof","Profile of pz versus px",100,-4,4,0,20);
  mfile->Print();
  
  // Fill histograms randomly
  Float_t px, py, pz;
  Int_t ii=0;
  while(1) {
     gRandom->Rannor(px,py); //px and py will be two gaussian random numbers
     pz = px*px + py*py;
     Float_t random = gRandom->Rndm(1);
     for (Int_t j=0;j<100;j++)
       hpx[j]->Fill(px);
     hpxpy->Fill(px,py);
     hprof->Fill(px,pz);
     if (!(ii % 10)) {
       mfile->Update();       // updates all objects in shared memory
       if (!ii) mfile->ls();  // print contents of mapped file after
     }                         // first update
     ii++;
  }

  // Save all objects in this file

  return 0;
}



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:40 MET