Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
parallelMergeClient.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_net
3 /// Client program which creates and fills 2 histograms and a TTree.
4 /// Every 1000000 fills the histograms and TTree is send to the server which displays the histogram.
5 ///
6 /// To run this demo do the following:
7 /// - Open at least 2 windows
8 /// - Start ROOT in the first windows
9 /// - Execute in the first window: .x fastMergeServer.C
10 /// - Execute in the other windows: root.exe -b -l -q .x treeClient.C
11 /// (You can put it in the background if wanted).
12 /// If you want to run the hserv.C on a different host, just change
13 /// "localhost" in the TSocket ctor below to the desired hostname.
14 ///
15 /// \macro_code
16 ///
17 /// \authors Fons Rademakers, Philippe Canal
18 
19 #include "TMessage.h"
20 #include "TBenchmark.h"
21 #include "TSocket.h"
22 #include "TH2.h"
23 #include "TTree.h"
24 #include "TParallelMergingFile.h"
25 #include "TRandom.h"
26 #include "TError.h"
27 
28 void parallelMergeClient()
29 {
30  gBenchmark->Start("treeClient");
31 
32  TParallelMergingFile *file = (TParallelMergingFile*)TFile::Open("mergedClient.root?pmerge=localhost:1095","RECREATE");
33 
34  file->Write();
35  file->UploadAndReset(); // We do this early to get assigned an index.
36  UInt_t idx = file->fServerIdx; // This works on in ACLiC.
37 
38  TH1 *hpx;
39  if (idx%2 == 0) {
40  // Create the histogram
41  hpx = new TH1F("hpx","This is the px distribution",100,-4,4);
42  hpx->SetFillColor(48); // set nice fill-color
43  } else {
44  hpx = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4);
45  }
46  Float_t px, py;
47  TTree *tree = new TTree("tree","tree");
48  tree->SetAutoFlush(4000000);
49  tree->Branch("px",&px);
50  tree->Branch("py",&py);
51 
52  // Fill histogram randomly
53  gRandom->SetSeed();
54  const int kUPDATE = 1000000;
55  for (int i = 0; i < 25000000; ) {
56  gRandom->Rannor(px,py);
57  if (idx%2 == 0)
58  hpx->Fill(px);
59  else
60  hpx->Fill(px,py);
61  tree->Fill();
62  ++i;
63  if (i && (i%kUPDATE) == 0) {
64  file->Write();
65  }
66  }
67  file->Write();
68  delete file;
69 
70  gBenchmark->Show("treeClient");
71 }