# Re: [fluka-discuss]: Sampling from fluence using Source routine

From: Anna Ferrari <a.ferrari_at_hzdr.de>
Date: Mon, 03 Feb 2014 02:25:21 +0100

Dear Sion,

I suggest first to read the Chapter 13.2.19 of the manual, "source.f
user-written source". You can find the way to implement in the source routine
a biased distribution. I copy here the part interesting for you:

--------------------------------------
* Sampling from a biased distribution

The technique for sampling from a generic distribution described
above can be extended to modify the probability of sampling in
different parts of the interval (importance sampling). We
replace f(x) by a weighted function g(x) = f(x) * h(x), where h(x)
is any appropriate function of x we like to choose. We normalise g(x)
in the same way as f(x) before:
/x /xmax /x
G(x) = | g(x)dx / | g(x)dx = | f(x)*h(x)dx / B
/xmin /xmin /xmin
and we need also the integral of f(x) over the whole interval:
/xmax
A = | f(x)dx
/xmin

All the sampling is done using the biased cumulative normalised
function G instead of the original unbiased F: we sample a uniform
pseudo-random number t as before, and we get the sampled value XX by
inverting G(x):
-1
XX = G (t)
The particle is assigned a weight B/(A * h(XX))

A special case of importance sampling is when the biasing function
chosen is the inverse of the unbiased distribution function:
h(x) = 1/f(x)
g(x) = f(x) * h(x) = 1
G(x) = (x - xmin) / (xmax - xmin)
In this case we sample a uniform pseudo-random number t using
FLRNDM as shown above. The sampled value XX is simply given by:
XX = xmin + (xmax - xmin)*t
and the particle is assigned a weight:
/xmax
B/(A h(X)) = f(XX)*(xmax - xmin) / | f(x)dx
/xmin
But since FLUKA normalizes all results per unit primary weight, any
constant factor is eliminated in the normalization. Therefore it is
sufficient to assign each particle a weight f(x).
--------------------------------------------------------

The answer to your first question should be now quite clear... the weight is
calculated as illustrated above, no reason to be an integer (why?).

2. No, the biasing of the primaries and the biasing of the secondaries and (I
would add) the importance sampling (which is particle and region-based) refer
to separate actions in the transport: the source generation in the first case
and the tracking of generated particles in the other two cases (respectively
secondaries and primary+secondaries). Obviously you have to take care that the
biasing you chose is meaningful and you don't underestimate important
contributors.
3. I would not change the location of the lines you wrote(...why?)

Hope it helps,
kind regards,
Anna

Am Thu, 30 Jan 2014 16:07:31 -0500 schrieb Sion Koren <skoren_at_chpnet.org>:
> Dear friends,
>
> I would like to sample from fluence by sampling the energy uniformly and
> I have a few questions please:
>
>
> 1. Must a weight be an integer? Can the fluence spectra (photons per
>MeV per incident electron in my case) be multiplied for biasing?
>
> 2. Would it effect the usage of secondary particles biasing with the
>bias card?
>
> 3. In the Source.f subroutine the particle weight is dealt with at
>those lines:
> * Wt is the weight of the particle
> WTFLK (NPFLKA) = ONEONE
> WEIPRI = WEIPRI + WTFLK (NPFLKA)
>
>
> Can the location of these lines in the subroutine be modified?
> Can one please give an example of a correct way to modify the weight.
>
>
>
> Sion Koren, PhD, DABR
>
>
> This message and any attachments are confidential and intended solely
> for the use of the individual or entity to which they are addressed. If
> you are not the intended recipient, you are prohibited from printing,
> copying, forwarding, saving, or otherwise using or relying upon them in
> any manner. Please notify the sender immediately if you have received
> this message by mistake and delete it from your system.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anna Ferrari