Hi Matthieu, Using a struct in a TTree should be saved for the simplest cases. In your case you should be better of using a compiled class. Create a file ENTITE.h: const Int_t nmax=250; class ENTITE { Int_t TREEn; Float_t TREEpt[nmax], ... ; ... Float_t TREEmmax[nmax][5],TREEptmax[nmax][5], ... ; } ENTITE; Generate and load the proper shared library: gROOT->ProcessLine(".L ENTITE.h+"); Create the branch: ENTITE P[n_entite]; for(int i_P;i_P<n_entite;++i_P) { TString branchname = suffix[i_P] + "."; TTree.Branch(branchname,"ENTITE",&(P[i_P]); } Cheers, Philippe -----Original Message----- From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Matthieu Lechowski Sent: Wednesday, August 27, 2003 3:08 AM To: roottalk@cern.ch Subject: [ROOT] matrix in TTree with a C structure Hello, I have a problem which is a little hard to explain. I have a TTree with a C structure: const Int_t nmax=250; typedef struct { Int_t TREEn; Float_t TREEpt[nmax], ... ; ... Float_t TREEmmax[nmax][5],TREEptmax[nmax][5], ... ; } ENTITE; ENTITE P[n_entite]; for(int i_P;i_P<n_entite;++i_P) { TREE.Branch("n"+suffix[i_P],&P[i_P].TREEn,"n"+suffix[i_P]+"/I"); TREE.Branch("pt"+suffix[i_P],P[i_P].TREEpt, "pt"+suffix[i_P]+"[n"+suffix[i_P]+"]/F"); ... TREE.Branch("mmax"+suffix[i_P],P[i_P].TREEmmax, "mmax"+suffix[i_P]+ "["+Nsel_str[i_P]+"]["+Nattendu_str[i_P]+"]/F"); ... } As you can see, each object ("ENTITE") has its suffix for the name of the variables, and its dimensions for the matrixes as mmax (Nsel_str and Nattendu_str are TString, I did Nsel_str[i_P]+=Nsel[i_P]; where Nsel[] are integers; I think it was not necessary) This synthax works with "pt", but not with mmax. Indeed, when I read the Tree, the variable has the good dimension (2x2 for example), but fields are empty beyond the first column (or line!), i.e mmax[0][j] are filled, but mmax[i>0][j] are 0. I checked, just before filling (function Fill()) the Tree, that my variables are really filled, and they are, so informations are lost filling the Tree. I think my synthax of "Branch(..)" is not correct for matrix. Have you an idea ? (I'm using root at cern om lxplus: ROOTSYS=/afs/cern.ch/sw/root/v3.05.05/rh73_gcc2952/root ) Thank you. Matthieu Lechowski LAL Orsay
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET