[mcstas-users] Fwd: split neutron into component

Erik B Knudsen erkn at fysik.dtu.dk
Sun May 14 23:48:07 CEST 2017


Dear Santiago,

My suggestion for accomplishing something along the lines of this is to
use the same concept as is being done for both PowderN and
Single_crystal components. (As these components are quite complex it
might not be completely obvious that this is what is going on...)

The idea is simple enough though.

1. Upon entry into the TRACE of you component you store the incoming
neutron state in some static memory location (as delcared in DECLARE for
instance)
 or at least the relevant bits of it.
2. For the first neutron entering you just do the full calculation as
you would normally, but make sure you store the relevant intermediate
results. In the case of Single_crystal this is the shortlist of
possible/probable Bragg reflections, their scattering vectors etc.
3. For each subsequent neutron you check if it is identical to the
stored one. If it is you can simply recall the earlier results and reuse
it. If it is _not_ identical recompute the results and store them. Also
store the new neutron state.

If you now put a SPLIT NN in your instrument in front of the component,
the component TRACE will see a series of identical neutrons and reuse
the intermediate results NN times.

This is more or less what you wanted - right? It is not an internal
split but in effect the same, without coding up a new complicated
infrastructure.

If anything is unclear - please to hesitate to ask.

cheers
Erik

On 12/05/17 20:56, Santiago Gómez wrote:
> Hello Kim, thank you for the answer.
> 
> Yes, in the case of a complex instrument with several components, an
> important source of statistical error is the lost of neutron into the
> relevant monitors.
> 
> In the case of my component, its a monochromator and there are two kind
> of statistical errors. One is related to the effective neutron which are
> impacting on the component (similar of that you mention). Other one is
> the necessary correlation between the direction and the energy inside
> the thickness of the monochromator for the Bragg diffraction.
> 
> For a given incoming direction, my component can link the source
> component to implement a variance reduction in energy, so it selects
> only the suitable energy range where bragg diffraction is possible
> (satisfying the energy-direction correlation), so I think an split in
> that point of the coding will be very effective, there are a lot of
> calculation to know the energies intervals for one incoming direction,
> and if I can do an split there, it is not necessary to do this part again.
> 
> Surely, an special care must be taken to split the neutron with the
> correct weights, but may be it can be done automatically by some macro
> function.. but I don't know how difficult will be to implement it if
> it's not already coded.
> 
> Regards
> Santiago
> 
> 
> 
>> On Fri, May 12, 2017 at 1:53 PM, Kim Lefmann <lefmann at nbi.ku.dk> wrote:
>> Hi Santiago,
>>
>> The short answer is that SPLIT is meant to function at the instrument
>> level, e.g. for users that will not need to worry about programming
>> components themselves.
>>
>> To make a SPLIT inside a component, much more bookkeeping is needed,
>> in particular for the fractional rays that would emerge in the middle
>> of a component, and this has only been imagined and never implemented
>> (Peter may correct me here if some test fragments exist?).
>>
>> However, most of the computational work done by the simulation at
>> (almost) any given point in the instrument lies in all the rays that
>> were lost earlier in the simulation, e.g. in the guide system, the
>> slits, the monochromator, and so on. Therefore, in most cases not much
>> actual running time would be gained by an in-component SPLIT compared
>> to the existing instrument-level SPLIT. This analysis is roughly what
>> lies behind the fact that the in-component SPLIT has never been
>> implemented.
>>
>> best, Kim
>>
>> On 05/12/2017 06:31 PM, Santiago Gómez wrote:
>> Hello
>>
>> I would like to split a neutron inside component.
>>
>> As far I see it is possible to split a neutron that reaches a specific
>> component using the SPLIT macro before the component declaration in
>> the instrument file, but it cannot be used inside de component.
>>
>> I would prefer to split the neutron inside my component because if I
>> do the SPLIT outside, a series of calculations already done be my
>> components will be redundant (I would say more than 50% of all the
>> calculation of the component).
>>
>> The idea of the split is to do a variance reduction which optimizes
>> the time, so for my component will be much more better to do that
>> inside the component code.
>>
>> Is it possible to performs it? I think that a similar issue is the
>> possibility to have more than one source component in a single
>> instrument file.
>>
>> Best regards
>>
>> _______________________________________________
>> mcstas-users mailing list
>> mcstas-users at mcstas.org
>> http://mailman.mcstas.org/cgi-bin/mailman/listinfo/mcstas-users [1]
> 
> -- 
> 
> Santiago Miguel Gómez
> 
> Si queremos un mundo de paz y de justicia hay que poner decididamente la
> inteligencia al servicio del amor. Antoine de Saint-Exupery
> 

-- 
Erik Bergbäck Knudsen, Research Engineer         | DTU | morituri
NEXMAP, DTU Fysik, DK-2800 Kgs. Lyngby, Denmark  |<>-<>|    te
phone: (+45) 2132 6655                           |<>-<>| salutant



More information about the mcstas-users mailing list