Re: [ROOT] fcn for TF1

From: Rene Brun (brun@pcbrun.cern.ch)
Date: Thu Sep 30 2004 - 08:36:46 MEST


Art,

If you look carefully in TF1, there are several constructors.
One of them is called when running from CINT, another one called from
compiled code. From the application side, the call is identical.
You can check how it works by running, for instance, the
tutorial FittingDemo.C
root > .x FittingDemo.C  (executed via CINT)
root > .x FittingDemo.C+ (executed via the local compiler)

Rene Brun

On 
Wed, 29 
Sep 2004, Arthur E. Snyder wrote:

> The TF1 constructor from a function(fcn) says (in the comments) that fcn
> is an intrepreted function. I would prefer to compile my function; will
> TF1 accept a compiled function? If not how do I make a compiled function?
> 
> -Art
> 
> A.E. Snyder, Group EC                        \!c*p?/
> SLAC Mail Stop #95                          ((.   .))
> Box 4349                                        |
> Stanford, Ca, USA, 94309                      '\|/`
> e-mail:snyder@slac.stanford.edu                 o
> phone:650-926-2701                              _
> http://www.slac.stanford.edu/~snyder          BaBar
> FAX:650-926-2657                          Collaboration
> 
> 
> 
> On Mon, 5 Aug 2002, Brett Viren wrote:
> 
> > Hi,
> >
> > I sure hope someone can help as I am at my wits end here.
> >
> > I am finding that exceptions which should be caught are instead
> > triggering an abort() when they are called from code which is
> > dynamically loaded into ROOT, either explicitly with gSystem->Load()
> > (or via building a special root.exe which is otherwise the same but
> > uses "-l" to link the library in).  Details and example are below.
> >
> > I have tested it with a fairly recent CVS build but also the binary
> > tar file: root_v3.03.07.Linux.RH7.2.gcc2953.tar.gz.
> >
> > The problem is occuring on Debian system which uses GCC version:
> >
> > bviren@minos:bviren> gcc -v
> > Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
> > gcc version 2.95.4 20011002 (Debian prerelease)
> >
> > I *think* this is just GCC 2.95.3 + some bug fixes by the Debian
> > maintainers.  Other collaborators on other systems don't see it.
> > Also, I don't reproduce it under 3.1.
> >
> > As a test I have a simple struct with one method that will throw an
> > exception:
> >
> > ---------------------------
> > //tlib.cxx
> > #include "tlib.h"
> > void tlib::doit() {
> >     throw "something";
> > }
> > // end tlib.cxx
> > ---------------------------
> > // tlib.h
> > #ifndef TLIB_H
> > #define TLIB_H
> > struct tlib {
> >     void doit();
> > };
> > #endif  // TLIB_H
> > ---------------------------
> > // LinkDef.h
> > #ifdef __CINT__
> > #pragma link off all globals;
> > #pragma link off all classes;
> > #pragma link off all functions;
> > #pragma link C++ struct tlib;
> > #endif
> > ---------------------------
> > // main.cc for testing w/out ROOT
> > #include <iostream>
> > #include "tlib.h"
> > int main() {
> >     try {
> >         tlib t;
> >         t.doit();
> >     }
> >     catch (const char* msg) {
> >         cerr << "Exception!: " << msg << endl << flush;
> >     }
> > }
> > ---------------------------
> > To build I do:
> >
> > ---------------------------
> > g++-2.95 -march=i686 -Wall -g -I. -I$ROOTSYS/include -fPIC -c tlib.cxx -otlib.o
> > rootcint -f tlibCint.cc -c -I. -I$ROOTSYS/include  tlib.h LinkDef.h
> > g++-2.95 -march=i686 -Wall -g -I. -I$ROOTSYS/include -fPIC -c tlibCint.cc -o tlibCint.o
> > g++-2.95 -shared -o libtlib.so tlib.o tlibCint.o
> > gcc-2.95 -shared -o libtlib-noroot.so tlib.o
> > g++-2.95 -march=i686 -Wall -g -I. -L. -o tlib-noroot main.cc -ltlib-noroot -rdynamic
> > ---------------------------
> >
> >
> > And, finally to test it I do:
> >
> >
> > ---------------------------
> > bviren@minos:jnk> ./tlib-noroot
> > Exception!: something
> > bviren@minos:jnk> root.exe
> >   *******************************************
> >   *                                         *
> >   *        W E L C O M E  to  R O O T       *
> >   *                                         *
> >   *   Version   3.03/07      18 July 2002   *
> >   *                                         *
> >   *  You are welcome to visit our Web site  *
> >   *          http://root.cern.ch            *
> >   *                                         *
> >   *******************************************
> >
> > FreeType Engine v1.x used to render TrueType fonts.
> > Compiled for linux with thread support.
> >
> > CINT/ROOT C/C++ Interpreter version 5.15.50, July 7 2002
> > Type ? for help. Commands must be C++ statements.
> > Enclose multiple statements between { }.
> > PAWish style
> > root [0] gSystem->Load("libtlib"); tlib t; t.doit()
> > Aborted
> > ---------------------------
> >
> >
> > Doing this again while running in GDB 5.2 gives a stack trace which
> > looks like:
> >
> >
> > ---------------------------
> > 0x40cb3741 in kill () from /lib/libc.so.6
> > (gdb) where
> > #0  0x40cb3741 in kill () from /lib/libc.so.6
> > #1  0x40c5de5e in pthread_kill () from /lib/libpthread.so.0
> > #2  0x40c5e339 in raise () from /lib/libpthread.so.0
> > #3  0x40cb4b81 in abort () from /lib/libc.so.6
> > #4  0x403643cb in __default_terminate () at ../../gcc/gcc/libgcc2.c:-1
> > #5  0x403643ec in __terminate () from /home/bviren/root/lib/libCore.so
> > #6  0x40364d24 in throw_helper (eh=0x404c34c4, pc=0x40575fe1,
> >     my_udata=0xbffe6f9c, offset_p=0xbffe6f98)
> >    from /home/bviren/root/lib/libCore.so
> > #7  0x40364edc in __throw () from /home/bviren/root/lib/libCore.so
> > #8  0x40f068fd in tlib::doit (this=0x87636a8) at tlib.cxx:4
> > #9  0x40f06b59 in G__tlib_doit_0_0 (result7=0xbfff39f0, funcname=0x0,
> >     libp=0xbfff058c, hash=0) at tlibCint.cc:93
> > #10 0x40575fe2 in G__call_cppfunc () from /home/bviren/root/lib/libCint.so
> > #11 0x4056563b in G__interpret_func () from /home/bviren/root/lib/libCint.so
> > #12 0x4054c95d in G__getfunction () from /home/bviren/root/lib/libCint.so
> > #13 0x405d6b56 in G__getstructmem () from /home/bviren/root/lib/libCint.so
> > #14 0x405cfea0 in G__getvariable () from /home/bviren/root/lib/libCint.so
> > #15 0x40544cbf in G__getitem () from /home/bviren/root/lib/libCint.so
> > #16 0x40543593 in G__getexpr () from /home/bviren/root/lib/libCint.so
> > #17 0x4058c951 in G__exec_function () from /home/bviren/root/lib/libCint.so
> > #18 0x405938eb in G__exec_statement () from /home/bviren/root/lib/libCint.so
> > #19 0x4052ae92 in G__exec_tempfile () from /home/bviren/root/lib/libCint.so
> > #20 0x4059baa7 in G__process_cmd () from /home/bviren/root/lib/libCint.so
> > #21 0x4015da3e in TCint::ProcessLine () from /home/bviren/root/lib/libCore.so
> > #22 0x400f4aa1 in TApplication::ProcessLine ()
> >    from /home/bviren/root/lib/libCore.so
> > #23 0x40c1d5bb in TRint::HandleTermInput ()
> >    from /home/bviren/root/lib/libRint.so
> > #24 0x40c1c71d in TTermInputHandler::Notify ()
> >    from /home/bviren/root/lib/libRint.so
> > #25 0x40c35d54 in TTermInputHandler::ReadNotify ()
> >    from /home/bviren/root/lib/libRint.so
> > #26 0x40196c0a in TUnixSystem::CheckDescriptors ()
> >    from /home/bviren/root/lib/libCore.so
> > #27 0x4019633b in TUnixSystem::DispatchOneEvent ()
> >    from /home/bviren/root/lib/libCore.so
> > #28 0x40139399 in TSystem::InnerLoop () from /home/bviren/root/lib/libCore.so
> > #29 0x40139309 in TSystem::Run () from /home/bviren/root/lib/libCore.so
> > #30 0x400f54c6 in TApplication::Run () from /home/bviren/root/lib/libCore.so
> > #31 0x40c1d070 in TRint::Run () from /home/bviren/root/lib/libRint.so
> > #32 0x080487b7 in main ()
> > #33 0x40ca314f in __libc_start_main () from /lib/libc.so.6
> > ---------------------------
> >
> >
> > Please, Obi-wan (or any-wan), you are my only hope!
> >
> > -Brett.
> >
> 



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET