RE: [ROOT] C structure as a branch?

From: Valeri Fine (fine@bnl.gov)
Date: Thu Nov 21 2002 - 19:41:07 MET


You can use TTable or TGenericTable as a C++ wrappers around of
C-struct array.
 (See:
http://www.usatlas.bnl.gov/computing/software/db/htmldoc/examples/ for
examples)

              Valeri

> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]
> On Behalf Of Yiqun Wang
> Sent: Thursday, November 21, 2002 1:30 PM
> To: roottalk@pcroot.cern.ch
> Subject: Re: [ROOT] C structure as a branch?
> 
> Thanks guys! I was trying to avoid using class. Guess it is time to
grow
> over pure C.
> 
> Yiqun Wang
> 
> > Don't use typedefs, like in your original example, plain structs
like
> > this should work too (struct is an all public class in c++):
> >
> > struct SmdPeak {
> >   Float_t peakPos;
> >   Float_t peakEnerg;
> >   Float_t sigmaPeak;
> >   Int_t   corSimuPeak;
> >   bool    used;
> >
> >   SmdPeak() {}
> >
> >   ClassDef (SmdPeak,1)
> > };
> >
> >
> > -- Fons
> >
> >
> > On Thu, 2002-11-21 at 16:25, Rene Brun wrote:
> >> Hi,
> >>
> >> Create classes instead of struct as shown below
> >>
> >> Rene Brun
> >>
> >>
> >> #include "TTree.h"
> >> #include "TFile.h"
> >> #include "TRandom.h"
> >>
> >> class SmdPeak {
> >>
> >> public:
> >>   Float_t peakPos;
> >>   Float_t peakEnerg;
> >>   Float_t sigmaPeak;
> >>   Int_t   corSimuPeak;
> >>   bool    used;
> >>
> >>   SmdPeak() {}
> >>
> >>   ClassDef (SmdPeak,1)
> >> };
> >>
> >> class FitEvent {
> >>
> >> public:
> >>         UInt_t  runnumber;
> >>         Int_t   event;
> >>         Int_t   numbXPeaks;
> >>         Int_t   numbYPeaks;
> >>         Float_t tower[4][3];
> >>         Float_t smdX[61];
> >>         Float_t smdY[101];
> >>         SmdPeak xPeak[4];
> >>
> >>         ClassDef(FitEvent,1)
> >> };
> >>
> >> void struct2()
> >> {
> >>    TFile f("struct.root","recreate");
> >>    TTree T("T","test struct");
> >>    FitEvent *event = new FitEvent;
> >>
> >>    T.Branch("first","FitEvent",&event);
> >>    for (Int_t i=0;i<1000;i++) {
> >>       event->event = i;
> >>       event->runnumber = (UInt_t)(100*gRandom->Rndm());
> >>       //for (Int_t j=0;j<event.count;j++) event.meas[j] = i+j;
> >>       T.Fill();
> >>    }
> >>    T.Print();
> >>    T.Show(45);
> >>    T.Write();
> >> }
> >>
> >>
> >> On Wed, 20 Nov 2002, Yiqun Wang wrote:
> >>
> >> > Hi,
> >> >
> >> > Is there a way to create a branch that is an array of C
structure?
> >> The online reference on
> >> >
> >> > TBranch(const char *name, void *address, const char *leaflist,
Int_t
> >> basketsize, Int_t compress) :TNamed(name,leaflist)
> >> >
> >> > only talked about a C structure branch.
> >> >
> >> > My header file is like this:
> >> >
> >> >
> >> > typedef struct{
> >> >   Float_t peakPos;
> >> >   Float_t peakEnerg;
> >> >   Float_t sigmaPeak;
> >> >   Int_t   corSimuPeak;
> >> >   bool    used;
> >> > } SmdPeak;
> >> >
> >> > typedef struct{
> >> >
> >> > 	UInt_t  runnumber;
> >> > 	Int_t   event;
> >> > 	Int_t   numbXPeaks;
> >> > 	Int_t   numbYPeaks;
> >> > 	Float_t tower[4][3];
> >> > 	Float_t smdX[61];
> >> > 	Float_t smdY[101];
> >> > 	SmdPeak xPeak[4];
> >> > SmdPeak xPeak[4];
> >> > } FitEvent;
> >> >
> >> >
> >> >
> > --
> > Org:    CERN, European Laboratory for Particle Physics.
> > Mail:   1211 Geneve 23, Switzerland
> > E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
WWW:
> >   http://root.cern.ch/~rdm/            Fax:   +41 22 7679480
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:20 MET