[ROOT] Streaming an array whose size is a non-const parameter

From: Carlos Muņoz Camacho (cmunoz@clipper.ens.fr)
Date: Fri Jan 31 2003 - 18:57:56 MET


Hi,

   I have a class similar to Event.h with an array of Float_t as a member.
I want the dimension of the array to be a non-const parameter (as it will
be read from an input file). The parameter is a static member of an
inherited class, but this can change. The important thing is I don't want
to hardcode the value of the parameter, because it is read from a file.

   The solution I found in the documentation is to allocate it dynamically
via a pointer and tell the streamer the size of the array in the
commentary field : //[fSize] . However, fSize needs to be a data member of
the class. Obviously, I don't want to save this data member to file
because it is constant for all the events. If I use fSize //! to avoid
writing it, I get an Error in <TStreamerInfo::Build>. Below is a short
example which reproduces the problem.

Is there a way around this?

ROOT 3.03/08 on a RH 7.2


File:  class.C
______________________________________________________

#include "TObject.h"

class TEvent : public TObject {

private :

Int_t fSize;                //!
Float_t* fBlocks;           //[fSize]

ClassDef(TEvent,1)

};
_______________________________________________

Result:

CINT/ROOT C/C++ Interpreter version 5.15.53, Aug 15 2002
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] .L class.C+
Info in <TUnixSystem::ACLiC>: creating shared library
/dsm/phnpcd232/local/home/cmunoz/./class_C.so
root [1] TEvent *ev=new TEvent();
root [2] TTree t("t","My tree");
root [3] t.Branch("event","TEvent",&ev,16000,99);
Error in <TStreamerInfo::Build>: TEvent, discarding: Float_t* fBlocks,
illegal [fSize]



Carlos Munoz Camacho
SPhN/CEA-Saclay



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET