[Frost] root Trees
Michael Dugger
dugger at jlab.org
Tue May 11 18:48:20 EDT 2010
Hi,
It appears that we have the problem fixed ->
We have to let the tree "know" how big the vectors are. We can do this by
using brackets in the particle definitions. For example:
gpid_tree->Branch("Ngpid",&Ngpid,"gpidN/I:pid[7]/I:x[7]/F");
If anyone knows how we can use dynamic vectors within a tree branch,
please let us know. We would like to have the smallest files
possible. Perhaps the ROOT tree compression makes this a moot point?
-Michael
On Tue, 11 May 2010, Brian Morrison wrote:
> Hey All,
>
> Just wondering if anyone has any experience working with ROOT Trees. I'm
> currently trying to make a branch for the GPID bank and fill it with
> arrays of each of the bank values for each event (as shown below):
>
> #define MAX_PARTICLES 20
>
> typedef struct{
> int gpidN;
> int pid[MAX_PARTICLES];
> float x[MAX_PARTICLES];
> float y[MAX_PARTICLES];
> float z[MAX_PARTICLES];
> .
> .
> .
> int Ngrf[MAX_PARTICLES];
> } Ngpid_t;
>
> static Ngpid_t Ngpid;
> TTree *gpid_tree = new TTree("T","test");
> gpid_tree->Branch("Ngpid",&Ngpid,"gpidN/i:pid/i:x/F:y/F:...Ngrf/i");
>
>
> (in the event loop now)
> Ngpid.gpidN = GPID_NH;
> for(int n=0;n<GPID_NH;n++){
> Ngpid.pid[n] = GPID[n].pid;
> Ngpid.x[n] = GPID[n].x;
> .
> .
> .
> Ngpid.Ngrf[n] = GPID[n].ngrf;
> }
>
> gpid_tree->Fill();
>
> I've tested and shown that the Ngpid.x[n] and GPID[n].x are identicle for
> all itterations, however when it goes to fill I get just a bunch of
> garbage once past the pid bank. I can't seem to find many good examples
> of this online so I was hoping that one of you may have some experience
> with this and be able to point out where I'm going wrong. Thanks.
>
> -Brian
>
> _______________________________________________
> Frost mailing list
> Frost at jlab.org
> https://mailman.jlab.org/mailman/listinfo/frost
>
More information about the Frost
mailing list