[NeXus-committee] Reflectometry definitions
Paul Kienzle
pkienzle at nist.gov
Thu Oct 25 23:50:03 BST 2007
Hi,
Now that you are all comfortably back from the NeXus meeting, I would
like propose some changes to allow a ratified reflectometry monochromatic
reflectometry definition.
1. New background NXcharacterization type:
specular_offset_background
The two existing backgrounds are isotropic_scatter and empty_container.
Physically we are moving the detector/sample slightly away from
the specular reflection condition and measuring the strength of the
signal rather than putting an isotropic scatter at the sample
position or leaving it empty.
Note: this simply identifies the location of the background scan,
but does not specify how the background was measured.
2. Need to know the sample angle.
Propose adding the following to NXsample:
<polar_angle units="degrees" type="NX_FLOAT[np]">
{Polar angle of the sample with respect to the beam incident on
the monochromator}
</polar_angle>
<azimuthal_angle units="degress" type="NX_FLOAT[np]">
{Azimuthal angle of the sample with respect to the beam incident on
the monochromator}
</azimuthal_angle>
<rotation_angle units="degrees" type="NX_FLOAT[np]">
{Rotation angle of the sample}
</rotation_angle>
These fields are already used in the ratified NXmonotas, so there
should be no problem ratifying them in the base class.
3. For polarized neutron reflectometry the control software allows the user
to select and tune a particular spin state. Expressed in terms of the
individual filters and flipper currents, it is difficult to determine
which spin state is desired. Instead the instrument component should
record the target spin state.
Propose NXspin class to record the target spin at the sample or
at the detector:
<?xml version="1.0" encoding="UTF-8"?>
<!--
URL: http://definitions.nexusformat.org/NXspin.xml
Editor: NIAC
$Id$
This is a description of the neutron spin state at a point in the
beam path, as set by the combination of filters and flippers.
-->
<NXspin name="{presample_spin|predetector_spin}">
<azimuthal_angle type="NX_FLOAT[np]" units="degrees">
{90 for spin up, -90 for spin down}
</azimuthal_angle>
<polar_angle type="NX_FLOAT[np]" units="degrees">
{Constant usually ignored. 0 in the direction of the beam path.}
</polar_angle>
</NXspin>
4. We need an accurate record of the start and stop of every
measurement in a scan (e.g., to normalize by measurement time,
and to correct for He3 polarizer efficiency decay).
NXmonitor already stores count duration. Propose adding count
start_time as well:
<start_time type="NX_FLOAT[n]" units="seconds">
{Start time for each scan point}
</start_time>
The alternative is to use NXlog and assume a particularly
named log corresponds to the NXmonitor, with the same length
as the measured points:
<NXlog name="count_time">
<time start="{ISO8601}" type="NX_FLOAT[np]" units="seconds">
{Start of the measurement of point np}
</time>
<value type="NX_FLOAT[np]" units="seconds">
{Durations of the measurement point np}
</value>
</NXlog>
The first solution is cleaner.
5. Given the above, propose ratifying the attached reflectometry
definition.
Regards,
Paul Kienzle
-------------- next part --------------
<?xml version="1.0" ?>
<!--
Instrument Definition for Monochromatic Source Reflectometers.
Editor: Paul Kienzle <pkienzle at nist.gov>
Mangled_by: Nick Maliszewskyj <nickm at nist.gov>
$Id$
See http://www.neutron.anl.gov:8080/NeXus/5 for component definitions.
Not handled: recording both the transmitted and the reflected beam off
the polarizer onto the 2D detector. Multiple analyzers is a similar
problem. In either case a solution similar to that in TAS can be applied.
2006-02-03 Refined by NIAC group meetings.
2006-10-04 Refined by NIAC group meetings.
2007-01-21 Tidy up formatting
2007-09-25 Refined by Paul Kienzle
-->
<NXentry name="{name of entry}">+
<definition version="1.0"
URL="http://www.nexusformat.org/instruments/xml/monoref.xml">
NXmonoref
</definition>
<start_time type="ISO8601" />
<NXcharacterization name="empty_container">?
{Suggested spectrum measurement for intensity vs. wavelength
for a given slit setting. Warning: beam profile is not
regular, but this effect is accommodated in the
spectrum measurement}
</NXcharacterization>
<NXcharacterization name="specular_offset_background">?
{Suggested background measurement. The referenced background
measurement should indicate whether it is sample offset, detector
offset or Qx offset.}
</NXcharacterization>
<!-- Scan identification tags for the specific measurement type -->
<measurement_type type="NX_CHAR">
{ "specular"|"intensity"|"q_offset"|"sample_offset"|"detector_offset"|"slice"|"area"|"alignment"|"other"
Reflectometry has a variety of standard scan types. Chief among these
is the specular scan, which is the signal of interest. The
intensity scan is required to normalize the signal and compute
reflectivity. Background scans are made offsetting the sample or
the detector, or offsetting both such that the background is measured
at the same Qz (which measurement is used depends on the expected
nature of the background). Slice scans are used to determine
resolution or measure off-specular diffraction peaks. Area scans
can measure a swathe of Q, yielding specular, background and slice
measurements simultaneously. Various alignment scans are performed.
Generally the user is not interested in these during reduction and
analysis. Other scans are done for unusual measurements not
related to reflectivity.
}
</measurement_type>
<range name="{fieldname}" type="NX_FLOAT[2]" units="{variable}">*
{scan range for the named field; for display and sorting purposes;
the field name(s) can be instrument and measurement specific.}
</range>
<NXsample name="sample">
<polar_angle type="NX_FLOAT[np]" units="degree">?
{Sample angle relative to beam from the monochromator}
</polar_angle>
</NXsample>
<NXinstrument name="{name of instrument}">
<instrument_geometry>"vertical|horizontal"</instrument_geometry>
<!-- wavelength selection -->
<NXsource name="{name of source}"><probe /></NXsource>
<NXmonochromator name="monochromator">
<wavelength type="NX_FLOAT" units="Angstrom" />
<wavelength_error type="NX_FLOAT" units="Angstrom" />
</NXmonochromator>
<!-- collimation -->
<NXaperture name="pre[sample|detector]_slit#">
<NXgeometry name="geometry">?
<NXtranslation name="translation">
<distances type="NX_FLOAT" units="millimeter">
{ Location of slit along beamline (midway between slits
if slits are not coplanar). This is required to compute
instrument resolution. }
</distances>
</NXtranslation>
<NXshape name="shape">
<shape>"nxvertical_slit|nxhorizontal_slit"</shape>
<size type="NX_FLOAT[np]" units="millimeter">
{ Aperature opening. Use the instrument_geometry field
to determine if the slit defines resolution in Qz.
Square aperatures should be represented by two
vertical and horizontal slits at the same location.
Warning: vertical slits refers to the orientation
of the slit blades. They open horizontally.
}
</NXshape>
</NXgeometry>
</NXaperture>
<NXspin name="pre[sample|detector]_spin">
<azimuthal_angle type="NX_FLOAT[np]" units="degree">
{Use 90 for spin up, -90 for spin down for neutrons perpendicular
to the beam.}
</azimuthal_angle>
<polar_angle type="NX_FLOAT[np]" units="degree">
{Use 0 for neutrons perpendicular to the beam and 90 for neutrons
parallel to the beam, or -90 for neutrons antiparallel.}
</polar_angle>
</NXspin>
<!-- detector may be protected by an attenuator and/or a beam stop -->
<NXattenuator name="{name of attenuator}">?
<attenuator_transmission type="NX_FLOAT[np]" />
</NXattenuator>
<NXbeam_stop name="{name of beamstop}">
{ Need all fields so that we can calculate shadow of beam stop on
detector, and not use those pixels when calculating background. }?
</NXbeam_stop>
<NXdetector name="{name of detector}">
<polar_angle type="NX_FLOAT[np]">
{ Angle of the detector relative to the scattering center. }
</polar_angle>
<azimuthal_angle type="NX_FLOAT" units="degree">
{ Indicate sense of scattering:
0 = front of sample, 180 = back of sample.
If the beam is entering the side of the sample and reflecting
off the back surface of the film then the polar angle will be
negative, with negative angles interpreted as inverting the
scattering length density profile of the film. Note that the
absorption is likely to be high in these circumstances, though
measuring the intensity scan through the sample will normalize
for this automatically.
Users beware that the NeXus file writer may not know whether the
instrument geometry is measuring reflection off the back of the
sample (azimuthal_angle=180, polar_angle>0) or reflection
off the back surface of the front of the sample (azimuthal_angle=0,
polar_angle<0), so software needs to allow the polar_angle
to be negated.
}
</azimuthal_angle>
</NXdetector>
</NXinstrument>
<NXdata name="{name of data}">?
<!--
Not a required component. Because of limitations in HDF, we cannot
link scan variables with identical names from different groups
into the same field in the NXdata group, so for example slit
openings will not be available. Interested parties will have
to examine all fields to determine which elements are varying
through the scan; these should be listed as range fields in the NXentry.
-->
</NXdata>
<NXmonitor name="control">
<mode type="NX_CHAR">
{"monitor"|"timer"}
</mode>
<preset type="NX_FLOAT">
{preset value for time in seconds or monitor in counts}
</preset>
<data type="NX_INT[np]">
{Monitor counts, absent if no monitor}?
</data>
<count_time type="NX_FLOAT[np]" units="second">
{Elapsed time for each scan point}
</count_time>
<start_time type="NX_FLOAT[np]" units="second">
{Start time for each scan point relative to start of the measurement}
</start_time>
</NXmonitor>
<NXlog name="{name of log}">*
{ Various logs for temperature, field, etc. which are assumed to
be constant over the duration of the run. The reduction program
should be able to display their values on a parallel graph. Note
that logs are not necessarily sampled synchronously with the
data points; use NXtimer and plot data points vs. start_time }
</NXlog>
<!-- Include the following only if start_time is not part of NXmonitor.
<NXlog start_time="ISO8601" name="elapsed_time">?
<time type="FLOAT[np]" unit="second">
{Start of the measurement of point np}
</time>
<value type="FLOAT[np]" unit="second">
{Elapsed time during the measurement of point, including dead time
when the detector/monitor were off. This will be greater than or
equal to the count_time field recorded in the monitor.}
</value>
</NXlog>
-->
</NXentry>
More information about the NeXus-committee
mailing list