Tom Roberts wrote:
> 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?
TTreeFormula derives from TFormula. For a complete list of keywords see
TFormula::Analyze
>
> 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.
Correct
Rene Brun
>
>
>
> 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
>>>
>>
>
Received on Wed Mar 26 2008 - 09:43:31 CET
This archive was generated by hypermail 2.2.0 : Wed Mar 26 2008 - 11:50:02 CET