Project a parked NXdisk_chopper onto an imaging plane; scan the park angle for
a movie of the disc turning.
Identification
Site:
Author: Gregory Tucker
Origin: European Spallation Source ERIC
Date: 2026
Description
A shadowgraph, not a simulation. A flat, monochromatic, perfectly collimated
field larger than the disc falls on one parked chopper, and a PSD a millimetre
behind it records what got through. With `abs_out = 1` everything but an
opening absorbs -- the disc body, the hub, and the field outside the rim -- so
the image *is* `slit_edges`, drawn as annular sectors between `yheight` and
`radius`. Reading the geometry off the picture is the point: the arcs' outer
radius is the disc's, their inner radius is the hub's, and their angular
extents are the openings.
The disc has five openings of five different widths (8, 15, 25, 40 and 60
degrees) at unevenly spaced angles. Nothing about it is symmetric, so any
rotation of the image is distinguishable from any other -- which is what makes
a scan of `park` legible as a movie rather than as an ambiguous flicker.
One frame:
mcstas-antlr NXdisk_chopper_image.instr
./NXdisk_chopper_image.out -n 262144 park=0
The movie, at five degrees a frame:
mcrun NXdisk_chopper_image.instr park=0,355 -N 72 -n 262144 -d frames
`-n` should be exactly `npix * npix` (262144 for the default 512). The source
rasters one ray per pixel onto the PSD's own grid rather than sampling at
random, so at that count every pixel gets exactly one ray, the image carries no
shot noise at all, and successive frames differ only where the disc moved. A
larger `-n` has to be a whole multiple or the last partial pass brightens one
band of the image; a smaller one leaves the top of the frame black.
Run it single-process. Under MPI the ray index is offset per node, which
scrambles the raster.
The same movie with the disc turning instead of parked, which exercises the
other branch of the component's TRACE:
mcrun NXdisk_chopper_image.instr nu=14 delay=0,-0.0714 -N 72 -n 262144 -d turning
These are the same movie, frame for frame and pixel for pixel: rays cross the
disc at t = 0, so a turning disc stands at `mark = -360 nu delay` and reaches
the parked orientation `park` at `delay = -park / (360 nu)`. One period is
`1/nu`, hence the -0.0714 for a full turn at 14 Hz. Checking the two against
each other is the point -- the parked branch is the one a commissioning run
uses and the turning branch is the one every simulation uses, and nothing else
here makes them meet.
Examples
(Test cases in bold)
Input parameters
Parameters in boldface are required;
the others are optional.
Name
Unit
Description
Default
park
deg
where the disc's zero mark stands while parked; scan this for a movie
0
nu
Hz
signed rotation frequency; 0 (the default) parks the disc
0
delay
s
when the zero mark is on the beam, read only when nu is non-zero
0
beam_angle
deg
where the beam crosses the disc, from the zero mark
0
zero_angle
deg
from +y to the top-dead-centre pickup
0
disc_radius
m
outer radius of the disc
0.35
slit_height
m
radial clearance of the openings across the whole window
0.30
slit_width
m
width of the beam window on the disc; 0 leaves the openings unrestricted
0
lambda
AA
wavelength of the illuminating field
2.0
field
m
side of the square illuminated area and of the PSD
0.72
npix
1
pixels per side of the PSD, and rays per side of the raster