RE: [ROOT] Function on array

From: Philippe Canal (pcanal@fnal.gov)
Date: Sun Apr 04 2004 - 06:48:30 MEST


Hi,

This is currently not possible.  Only function taking numerical arguments
and returning numerical values are usable in TTree::Draw.  (In particular,
you can not pass an array).  Those functions will be called for each
elements
of the array in an entry (which are selected).

Currently, you need to generate a skeleton of code (eg MakeSelector or
MakeClass), to implement such behavior.

We are planning on releasing later this year, a new interface that will
allow you to run a function in scope such that the branch name give
access to their content.  When you have this, you will be able to
run
//file w.C
Float_t w(){
  Float_t tmp=0;
  for(Int_t i=0; i<50; i++)
    tmp+=peUZa[i];
    return tmp;
}
Then I did:
TFile f("test.root");
tree->Draw("w.C+");

Cheers,
Philippe

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Tingjun Yang
Sent: Friday, April 02, 2004 8:17 PM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] Function on array


Hi rooters,
   I have a tree file which has an array branch:
*...........................................................................
*
*Br   13 :peUZa     : peUZa[50]/F
*
*Entries :       10 : Total  Size=       2574 bytes  One basket in memory
*
*Baskets :        0 : Basket Size=      32000 bytes  Compression=   1.00
*
*...........................................................................
*
   I wonder if I can define a function on that array and make a cut on
it. I tried the following way:
//file w.C
Float_t w(Float_t *x){
  Float_t tmp=0;
  for(Int_t i=0; i<50; i++)
    tmp+=x[i];
    return tmp;
}
Then I did:
.L w.C++;
TFile f("test.root");
tree->Draw("w(peUZa)");

   But it doesn't work. Did I make any mistakes? I'm using the cvs version
on rh9. Thank you.

Regards,
T.J.



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET