Recently I have been using the TH1::FillRandom method extensively, and
although very straightforward, it is also time consuming for generating
large numbers of random events. My solution to this was the following:
1) create a (normalized) function: TH1F* F
2) create an "experiment": TRandom2* EXP
3) for each bin in the histogram to be filled, evaluate the average
number of events expected in that bin: MU = f->Eval(XBIN)*BINWIDTH (or
area or volume). More sophisticated: calculate the integral of f within
the bin.
4) multiply this number with the required number of events for the total
histogram: MU *= TOTAL
5) calculate COUNTS = EXP->Poisson(MU) and store this in the histogram
In this way, you will get TOTAL+-sqrt(TOTAL) events in your histogram
(i.e. not exactly TOTAL!). The time needed to generate the histogram is
proportional to the number of bins of the histogram, not the number of
events. The statistics of the data is correct for all those cases where
the Poisson distribution is applicable.
Perhaps this could be used to make Root even more powerful (and fast)? For
completeness, a Binomial random generator would be handy.
Anyhow, it saved me a lot of time,
-- Gerco
Dr. C.J.G. Onderwater
Nuclear Physics Laboratory
312 Loomis Laboratory of Physics
University of Illinois at Urbana-Champaign
1110 West Green Street
Urbana, IL 61801-3080
Phone : (217) 244-7363
Fax : (217) 333-1215
E-mail: onderwat@uiuc.edu