Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r45636:bacc1bb43dca Date: 2011-07-15 08:07 -0700 http://bitbucket.org/pypy/pypy/changeset/bacc1bb43dca/
Log: update benchmark to have a TApplication as per ROOT rules diff --git a/pypy/module/cppyy/bench/Makefile b/pypy/module/cppyy/bench/Makefile --- a/pypy/module/cppyy/bench/Makefile +++ b/pypy/module/cppyy/bench/Makefile @@ -26,4 +26,4 @@ bench02Dict_reflex.so: bench02.h bench02.xml $(genreflex) bench02.h $(genreflexflags) --selection=bench02.xml -I$(ROOTSYS)/include - g++ -o $@ bench02.cxx bench02_rflx.cpp -I$(ROOTSYS)/include -shared -lReflex `root-config --libs` $(cppflags) $(cppflags2) + g++ -o $@ bench02.cxx bench02_rflx.cpp -I$(ROOTSYS)/include -shared -lReflex -lHistPainter `root-config --libs` $(cppflags) $(cppflags2) diff --git a/pypy/module/cppyy/bench/bench02.cxx b/pypy/module/cppyy/bench/bench02.cxx --- a/pypy/module/cppyy/bench/bench02.cxx +++ b/pypy/module/cppyy/bench/bench02.cxx @@ -2,15 +2,93 @@ #include "TROOT.h" #include "TApplication.h" #include "TDirectory.h" +#include "TInterpreter.h" +#include "TSystem.h" +#include "TBenchmark.h" +#include "TStyle.h" +#include "TError.h" +#include "Getline.h" +#include "TVirtualX.h" + +// CINT +#include "Api.h" #include <iostream> +class TTestApplication : public TApplication { +public: + TTestApplication( + const char* acn, Int_t* argc, char** argv, Bool_t bLoadLibs = kTRUE ); + + virtual ~TTestApplication(); +}; + + +//- constructors/destructor -------------------------------------------------- +TTestApplication::TTestApplication( + const char* acn, int* argc, char** argv, bool bLoadLibs ) : + TApplication( acn, argc, argv ) +{ +// Create a TApplication derived for use with interactive ROOT from python. A +// set of standard, often used libs is loaded if bLoadLibs is true (default). + + if ( bLoadLibs ) // note that this section could be programmed in python + { + // follow TRint to minimize differences with CINT + ProcessLine( "#include <iostream>", kTRUE ); + ProcessLine( "#include <_string>", kTRUE ); // for std::string iostream. + ProcessLine( "#include <vector>", kTRUE ); // needed because they're used within the + ProcessLine( "#include <pair>", kTRUE ); // core ROOT dicts and CINT won't be able + // to properly unload these files + + // following RINT, these are now commented out (rely on auto-loading) + // // the following libs are also useful to have, make sure they are loaded... + // gROOT->LoadClass("TMinuit", "Minuit"); + // gROOT->LoadClass("TPostScript", "Postscript"); + // gROOT->LoadClass("THtml", "Html"); + } + +#ifdef WIN32 + // switch win32 proxy main thread id + if (gVirtualX) + ProcessLine("((TGWin32 *)gVirtualX)->SetUserThreadId(0);", kTRUE); +#endif + +// save current interpreter context + gInterpreter->SaveContext(); + gInterpreter->SaveGlobalsContext(); + +// prevent crashes on accessing histor + Gl_histinit( (char*)"-" ); + +// prevent ROOT from exiting python + SetReturnFromRun( kTRUE ); +} + +TTestApplication::~TTestApplication() {} + +static const char* appname = "pypy-cppyy"; + CloserHack::CloserHack() { std::cout << "gROOT is: " << gROOT << std::endl; std::cout << "gApplication is: " << gApplication << std::endl; + + if ( ! gApplication ) { + // retrieve arg list from python, translate to raw C, pass on + int argc = 1; + char* argv[1]; argv[0] = (char*)appname; + gApplication = new TTestApplication( appname, &argc, argv, kTRUE ); + } + + std::cout << "gApplication is: " << gApplication << std::endl; } -CloserHack::~CloserHack() { +void CloserHack::report() { + std::cout << "gROOT is: " << gROOT << std::endl; + std::cout << "gApplication is: " << gApplication << std::endl; +} + +void CloserHack::close() { std::cout << "closing file ... " << std::endl; if (gDirectory && gDirectory != gROOT) { gDirectory->Write(); @@ -18,3 +96,6 @@ } } +CloserHack::~CloserHack() { +} + diff --git a/pypy/module/cppyy/bench/bench02.h b/pypy/module/cppyy/bench/bench02.h --- a/pypy/module/cppyy/bench/bench02.h +++ b/pypy/module/cppyy/bench/bench02.h @@ -13,6 +13,9 @@ public: CloserHack(); ~CloserHack(); + + void report(); + void close(); }; /* diff --git a/pypy/module/cppyy/bench/hsimple.py b/pypy/module/cppyy/bench/hsimple.py --- a/pypy/module/cppyy/bench/hsimple.py +++ b/pypy/module/cppyy/bench/hsimple.py @@ -20,6 +20,8 @@ TNtuple = cppyy.gbl.TNtuple TH1F = cppyy.gbl.TH1F TH2F = cppyy.gbl.TH2F + CH = cppyy.gbl.CloserHack() + CH.report() except ImportError: from ROOT import TCanvas, TFile, TProfile, TNtuple, TH1F, TH2F import random @@ -32,7 +34,7 @@ #gROOT.Reset() # Create a new canvas, and customize it. -#c1 = TCanvas( 'c1', 'Dynamic Filling Example', 200, 10, 700, 500 ) +c1 = TCanvas( 'c1', 'Dynamic Filling Example', 200, 10, 700, 500 ) #c1.SetFillColor( 42 ) #c1.GetFrame().SetFillColor( 21 ) #c1.GetFrame().SetBorderSize( 6 ) @@ -80,9 +82,9 @@ # ntupleFill( px, py, pz, random, i ) # Update display every kUPDATE events. -# if i and i%kUPDATE == 0: -# if i == kUPDATE: -# hpx.Draw() + if i and i%kUPDATE == 0: + if i == kUPDATE: + hpx.Draw() # c1.Modified() # c1.Update() @@ -98,7 +100,8 @@ hfile.Close() #hpx.SetFillColor( 48 ) #c1.Modified() -#c1.Update() +c1.Update() +c1.Draw() #import gc #gc.collect() _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit