Vitess is an open source software package for the simulation of neutron scattering experiments that comprises all established instrument hardware such as neutron optics, wavelength selectors and a growing variety of samples.
Although it was initially developed to aid the design of neutron scattering instruments for the European Spallation Source (ESS) as the name implies, VITESS serves as a generic simulation tool for a large variety of neutron scattering instruments at all major pulsed or continuous neutron sources.
It comprises all established instrument hardware such as:
These allow to perform virtual experiments including sophisticated setups like polarized neutrons in magnetic fields.
Parameters specifying the instrument components can be given by means of a graphical user interface, which makes VITESS comparably easy to use and quick to learn for new users, while advanced users can contribute their own modules. The validity of VITESS simulations is tested by comparison with other neutron simulation packages and with measurements at neutron scattering facilities.
VITESS simulations are carried out by means of a Monte Carlo ray-tracing method. Neutron trajectories are created in a source module or loaded from a file created in a previous simulation.
Each neutron is assigned a count rate which is modified on each interaction with the instrument, like the reflection at or transmission through a (super)mirror plate.
The trajectory is discarded if the neutron does not hit the subsequent component or gets absorbed.
Some components (e.g. sample environment) can multiply neutron trajectories by splitting the neutrons into several possible final states and assigning the appropriate probability to each of them, thus keeping the total neutron intensity either constant or decreasing if neutrons are lost.
Instrument parts are represented by modules which run independently in a pipe structure during simulation.
Neutrons are passed from one module to the next in packages of typically 10000 neutrons, meaning that for most simulations that require more statistics, all modules run in parallel.
This modular structure allows to split the simulation into several parts, and e.g. save the neutrons in any part of the instrument to feed them as input to the subsequent part in a separate simulation.