/******************************************************************************* * Instrument: * * %I * Written by: Wim Bouwman (w.g.bouwman@tudelft.nl), Peter Willendrup and Erik Knudsen * Date: December 2019 * Origin: Delft University of Technology * %INSTRUMENT_SITE: Reactor_Institute_Delft * Idealised SESANS instrument using magnetised foil flippers with realistic sample * * %D * * A full description of the instrument can be found in J. Appl. Cryst. (2021) V. 54 https://doi.org/10.1107/S1600576720015496 * The instrument has the bare essentials to simulate the Larmor precession of the neutron spins in the foil flippers and the * geometry and wavelength distribution of the SESANS in Delft as described in * Rev. Sci. Instrum. 76, 033901 (2005) https://doi.org/10.1063/1.1858579 * An essential component is the realistic SANS sample, describing both the scattered and transmitted neutron, including multiple scattering. * In one scattering simulation both the up- and down intensities are simulated. * For a full SESANS scan the applied magnetic field By has to be scanned. * In principle the sample can be removed to study the empty beam instrument, which with this idealised setup have perfect polarisation. * It is possible to monitor the evolution of the polarisation with several polarisation monitors that have beeen commented in this version. * The foil-angle, thickness and wavelength yield now matched parameters to have the SESANS working. * These parameter and the sphere radius match now with the magnetic fields below to get a good measurement range. * * Example: SESANS_Delft -n 1000000 -N 31 L0=2.165 DL=0.02 By=0,0.0468 * * %P * : [] * L0: [AA] nominal wavelength * DL: [AA] wavelength band width * By: [T] Applied magnetic field in foil flippers * * %L * * https://doi.org/10.1107/S1600576720015496 * %E *******************************************************************************/ DEFINE INSTRUMENT SESANS_Delft(L0=2.165, DL=0.02, By=4.68e-3) DECLARE %{ %} INITIALIZE %{ %} TRACE COMPONENT origin = Progress_bar() AT (0, 0, 0) RELATIVE ABSOLUTE // insert components here (e.g. Insert -> Source -> ...) COMPONENT src = Source_simple( yheight=0.01, xwidth=0.01, dist=2.25, focus_xw=0.01, focus_yh=0.01, lambda0=L0, dlambda=DL, gauss=1) AT (0, 0, 0) RELATIVE PREVIOUS COMPONENT set_pol = Set_pol( px=1) AT (0, 0, 0.1) RELATIVE PREVIOUS COMPONENT px1 = PolLambda_monitor( restore_neutron=1, Lmin=L0-DL, Lmax=L0+DL, nL=501, mx=1,filename="pxAfterAnalyser") AT (0, 0, 0.01) RELATIVE PREVIOUS /* COMPONENT py1 = PolLambda_monitor( restore_neutron=1, Lmin=L0-DL, Lmax=L0+DL, nL=501, my=1,filename="py1") AT (0, 0, 0.01) RELATIVE PREVIOUS */ COMPONENT f1 = Foil_flipper_magnet2( xwidth=0.1, yheight=0.1, zdepth=0.3, phi=0.095993, foilthick=3.0, Bx=0, By=By, Bz=0, foil_in=1, verbose=0) AT (0, 0, 0.5) RELATIVE src COMPONENT px2 = COPY(px1)(filename="pxAfterFirstFoil") AT (0, 0, 0.16) RELATIVE PREVIOUS /* COMPONENT py2 = COPY(py1)(filename="py2") AT (0, 0, 0.01) RELATIVE PREVIOUS */ COMPONENT f2 = COPY(f1)(By=By) AT(0,0,2.0) RELATIVE src COMPONENT px3 = COPY(px1)(filename="pxAfterSecondFoil") AT (0, 0, 0.16) RELATIVE PREVIOUS /* COMPONENT py3 = COPY(py1)(filename="py3") AT (0, 0, 0.01) RELATIVE PREVIOUS */ COMPONENT sans_spheres = SANS_spheres2(xwidth=0.02, yheight=0.02, zthick=0.001, dsdw_inc=0.0, sc_aim=0.8, sans_aim=0.95, R=10000, phi=0.015, singlesp=0, Qmind = 0.00003, Qmaxd = 0.001) WHEN (1==1) AT (0, 0, 2.25) RELATIVE src /* COMPONENT px4 = COPY(px1)(filename="px4") AT (0, 0, 0.01) RELATIVE PREVIOUS COMPONENT py4 = COPY(py1)(filename="py4") AT (0, 0, 0.01) RELATIVE PREVIOUS */ COMPONENT f3 = COPY(f1)(By=-By) AT(0,0,2.5) RELATIVE src /* COMPONENT px5 = COPY(px1)(filename="px5") AT (0, 0, 0.16) RELATIVE PREVIOUS COMPONENT py5 = COPY(py1)(filename="py5") AT (0, 0, 0.01) RELATIVE PREVIOUS */ COMPONENT f4 = COPY(f1)(By=-By) AT(0,0,4.0) RELATIVE src COMPONENT px6 = COPY(px1)(filename="px6") AT (0, 0, 0.16) RELATIVE PREVIOUS /* COMPONENT py6 = COPY(py1)(filename="py6") AT (0, 0, 0.01) RELATIVE PREVIOUS */ COMPONENT ana = PolAnalyser_ideal(mx=1) AT(0,0,4.4) RELATIVE src COMPONENT det = PSD_monitor(xwidth=0.011, yheight=0.011, filename="det",ny=101, nx=101) AT(0,0,4.5) RELATIVE src COMPONENT trick = Arm() AT(0,0,4.4) RELATIVE src EXTEND %{ RESTORE_NEUTRON(INDEX_CURRENT_COMP-2,x,y,z,vx,vy,vz,t,sx,sy,sz,p); %} COMPONENT ana2 = PolAnalyser_ideal(mx=-1) AT(0,0,4.4) RELATIVE src COMPONENT det2 = PSD_monitor(xwidth=0.011, yheight=0.011, filename="det2",ny=101, nx=101) AT(0,0,4.5) RELATIVE src FINALLY %{ %} END