-
Introduction
-
Comparisons
In this document, we compare the results of two multilayer
reflectivity codes that contribute to the SAOsac raytrace
software. These two sets of code are independent implementations
of the same algorithm; Each calculates the reflectivity at the
interface of each sublayer to determine the overall reflectivity
of a multilayered surface.
One piece of code was developed by and for the MST Synchrotron
group from code by David Windt, AT&T Bell Laboratories, May 1990.
This code, written in IDL and referred to as lsm, was used to
determine the optical constants of HRMA flats.
The second piece of software was developed by the MST Mirrors
group for use in the SAOsac suite of raytrace software. It is
implemented in C++ and goes by the name multilayer_reflect.
Both the C++ and IDL versions of the multilayer reflection
algorithm implement five modifying factors which are applied to
the reflection coefficients at each sublayer interface. The five
modifying factors are
The development of each version of the reflectivity code has
essentially been isolated from the other. As such, despite
originating from the same algorithm, the two versions have
differences in their implementations. We believe these
differences are due to roundoff errors stemming from the
order in which operations are performed in each version.
Since the optical constants for the HRMA, derived with the IDL
version, are used as input for the C++ version, we must attempt to
understand and minimize the differences between the two
implementations.
Below, we compare the reflectivities calculated by each version
using the three common modifying factors and no modifier over a
range of energies and grazing angles.
The SAO Real Debye-Waller is an SAO variant on the Debye-Waller
from Windt. The "Real" part refers to the fact that the factor is
represented by a double in the code. It is quite possible that
the use of the double is an error introduced at SAO during efforts
to achieve double precision. This factor was originally
implemented in the IDL lsm code and has since been replicated in
the C++ multilayer_reflect code. It is retained for historical
purposes.
The SAO Complex Debye-Waller is an SAO variant on the Debye-Waller
from Windt. The "Complex" part refers to the fact that the factor is
represented by a complex in the code. The use of the complex
corrects the presumed coding error in the SAO Real Deby-Waller.
This code was originally implemented in the IDL lsm code and has
since been replicated in the C++ multilayer_reflect code.
The Spiller Debye-Waller is a variant on the Debye-Waller
from Spiller. It was initially implemented in the C++
multilayer_reflect code and has since been replicated in the IDL
lsm code.
The Modified Debye-Waller factor is the present (November 30,
1999) "default" factor. It is the factor being used in the
optical constants analysis and the factor being used in the SAOsac
raytraces.
With no modifying factor applied, the two sets of code still
provide different reflectivities. Comparing this case, with no
modifier, to the cases with modifiers, it is clear that most of
the differences between the two implementations occur outside of
the application of the modifier.