Thank you. This is just what I wanted to do.
The implicit definitions of "pi" and "rndm" are a surprise to me -- is there anyplace that gives the full list of valid functions and aliases known to TTreeFormula?
Correction: The formula for a Gaussian random number is:
sin(2*pi*rndm)*sqrt(-2*log(rndm))
Note the factor of 2 inside the sin() -- your formula gives only
positive values.
Tom Roberts
Rene Brun wrote:
> see TTree::SetAlias
>
> For example, you can define the following alias
> tree.SetAlias("rng","sin(pi*rndm)*sqrt(-2*log(rndm))")
>
> This will create the tree alias named "rng". The value of the rng
> variable will be a gaussian random number with mean=0 and sigma=1. See
> the effect doing
> tree.Draw("rndm")
> tree.Draw("rng")
> tree.Draw("myvar+0.1*rng")
>
> If you want to create an alias returning a random gaussian number with
> mean = -1.5 and sigma=2.5, do
> tree.SetAlias("rng2","-1.5+2.5*sin(pi*rndm)*sqrt(-2*log(rndm))")
> tree.Draw("myvar+rng2")
>
> above "rndm" is a special keyword known by TFormula. It calls the
> current random number generator pointed by gRandom (currently the
> Mersenne Twister algorithm in TRandom3).
>
> Note that using TTree::SetAlias you can define an alias formula
> referencing any combination of variables in the Tree.
>
> Rene Brun
>
>
> Tom Roberts wrote:
>> Questions on TTreeFormula: >> >> 1) What functions are permitted? Specifically: are there any >> random-numbers? I would specifically like GaussRan(mean,sigma). >> (I want to add a measurement resolution in, but am in a place >> where C++ is hard but can type an expression into a TTreeFormula). >> >> 2) Is it possible for me to define new functions? If so, how? >> >> 3) What is the relationship between TFormula and TTreeFormula? yes, >> I know the latter inherits from the former, but what is the >> relationship for evaluation? This might make (4) below moot. >> >> 4) Is it possible for me to define new variables? specifically, >> I would like to define something like "Ptot=sqrt(Px*Px+Py*Py+Pz*Pz)" >> where Px,Py,Pz are float-s in the TTree. It should be evaluated >> before the TTreeFormula is evaluated (as the formula might use Ptot). >> >> This might be implementable as a friend, but that's complicated, and >> I don't really want to create a whole new TFile for a transient >> thing like this; it would also require a scan of the original >> TTree to fill the friend. >> >> 4a) If it is possible to define a new function, is it possible to >> define one without an argument or parens? this would let me do (4) >> in C++. >> >> If neither (4) nor (4a) is possible, I may implement (4) as a text >> macro that expands defined variable names before creating the >> TTreeFormula. >> >> >> Tom Roberts >>
This archive was generated by hypermail 2.2.0 : Wed Mar 26 2008 - 11:50:02 CET