RE: [ROOT] Ntuples in programs

From: kamps (kamps@fsw.leidenuniv.nl)
Date: Fri Oct 27 2000 - 12:05:22 MEST


Hello Rene, Valery, Bernard
If I make a console program, using the files in the attachments, the problem
occurs. If
I comment the #include <iostream> in "network.h", a correct n-tuple is
produced. Some
files are no-op, because I stripped irrelevant code from them, but all are
necesssary to produce the problem.

Bernard: the problem is also present in a slightly larger program that I got
from Andy
and that works fine as starting point for ROOT appications so far. As far as
I am aware
the most important point Andy makes concerning compiling/linking is that
standard <iostream> headers may clash with root files. In the tuple.* files
no such include files are present and the tuple.h file does not expose
references to ROOT objects.

Cheers,
	Marc

> -----Original Message-----
> From: brun@pcbrun.cern.ch [mailto:brun@pcbrun.cern.ch]On Behalf Of Rene
> Brun
> Sent: Thursday, October 26, 2000 4:02 PM
> To: kamps
> Cc: roottalk@pcroot.cern.ch
> Subject: Re: [ROOT] Ntuples in programs
>
>
> Hi Marc,
> Could you send me a simple working example that I can use
> to reproduce your problem ?
>
> Rene Brun
>
> kamps wrote:
> >
> > Hello,
> >
> > I use ROOT version 2.25/03, using MSVC++ 6.0 under WinNT. The
> program below
> > runs fine
> > in principle. If I throw in a couple of events, with
> Tuple::Addevent, I can
> > plot them
> > from the n-tuple that is produced. If I add more and more files to the
> > project, without
> > changing main.cpp at all, none of the extra files using ROOT
> related code,
> > the program will fail in Tuple::CloseTuple, in the line p_file->Write().
> >
> > The message I get is then:
> > --------------------------------------------------------------------
> > <CustomRealloc2>: passed oldsize 1032, should be 18415747
> > Fatal in <CustomReAlloc2>: unreasonable size (18415747)
> > aborting
> > Warning in <TWinNTSystem::StackTrace>: this method must be overriden!
> > --------------------------------------------------------------------
> >
> > I know that linking root into C++ programs sometimes involves subtleties
> > that are
> > not present in macros, so I probably have overlooked something simple. I
> > want to use
> > the buffering and compression facilities of n-tuples in my
> program, however.
> > I hope you can tell from this information what goes wrong.
> > Thanks,
> >         Marc
> >
> > --------------------- main.cpp -----------------------------------
> > #include "D:/code/libs/neuronlib/tuple.h"
> >
> > int main()
> > {
> >         Tuple tup;
> >         tup.OpenTuple("bla");
> >         tup.CloseTuple();
> >
> >         return 0;
> > }
> > ------------------------ tuple.h -----------------------------------
> > class Tuple {
> > public:
> >
> >         Tuple();
> >
> >         bool OpenTuple(const char*p);
> >         void CloseTuple();
> >         void AddEvent( int, int, float);
> > };
> >
> > ------------------------ tuple.cpp
> ---------------------------------------
> > #include "tuple.h"
> >
> > #include <TRoot.h>
> > #include <TNtuple.h>
> > #include <TFile.h>
> >
> > TROOT root("root","tup");
> >
> > TFile*   p_file;
> > TNtuple* p_tuple;
> >
> > Tuple::Tuple()
> > {
> > }
> >
> > bool Tuple::OpenTuple(const char* p)
> > {
> >         p_file  = new TFile(p,"RECREATE","spike simulation run");
> >         p_tuple = new TNtuple("ntuple","events","in:out:time");
> >
> >         return true;
> > }
> >
> > void Tuple::CloseTuple()
> > {
> >         p_file->Write();
> >         p_file->Close();
> >         delete p_file;
> > }
> >
> > void Tuple::AddEvent( int i, int j, float f)
> > {
> >         p_tuple->Fill((float)i,(float)j,f);
> > }
> >
> >
> ------------------------------------------------------------------
> ----------
> > ----
>










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