--- /Users/yaya/NXtransformations.nxdl.xml	2016-10-05 20:34:15.000000000 +0200
+++ NXtransformations.nxdl.xml	2016-10-14 13:08:27.000000000 +0200
@@ -24,7 +24,7 @@
 <definition xmlns="http://definition.nexusformat.org/nxdl/3.1" 
 	category="contributed"
 	name="NXtransformations" 
-	version="1.0"
+	version="1.1"
 	type="group" 
 	extends="NXobject"
 	ignoreExtraGroups="true"
@@ -33,19 +33,41 @@
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://definition.nexusformat.org/nxdl/3.1 ../nxdl.xsd"
 	>
+				<!--	
+						nxdl.xsd rules do not allow us to show this as a variable name
+						- we'll use AXISNAME in ALL CAPS for consistency with the
+						use in NXDATA.  We'll use ``AXISUNITS`` for the units appropriate
+						to the type of axis.
+				-->
 
 	<doc>
-		Collection of translations and rotations to describe a geometry
-		
-		A sequence of transformations lists the
-		offset and rotation steps needed to describe the position and orientation
-		of any movable or fixed device.
-
-		This class will usually contain all axes of a sample stage or goniometer.
+		Collection of axis-based translations and rotations to describe a geometry.
+		May also contain axes that do not move and therefore do not have a transformation
+		type specified, but are useful in understanding coordinate frames within which
+		transformations are done, or in documenting important directions, such as the
+		direction of gravity.
+		
+		A nested sequence of transformations lists the offset and rotation steps needed 
+		to describe the position and orientation of any movable or fixed device.
+
+		There will be one or more transformations (axes) defined by one or more fields
+		for each transformation.  The all-caps name ``AXISNAME`` designates the
+		particular axis generating a transformation (e.g. a rotation axis or a translation
+		axis or a general axis).   The all-caps name ``AXISUNITS`` designates the
+		units appropriate to the transformation_type value, i.e. ``NX_LENGTH`` for
+		``translation``, ``NX_ANGLE`` for ``rotation``, and ``NX_UNITLESS`` for
+		axes for which no transformation type is specified.
+
+		This class will usually contain all axes of a sample stage or goniometer or
+		a detector.  The NeXus default McSTAS coordinate frame is assumed, but additional
+		useful coordinate axes may be defined by using axes for which no transformation
+		type has been specified.
 
 		The entry point (``depends_on``) will be outside of this class and point to a
 		field in here. Following the chain may also require following ``depends_on`` 
-		links to transformations outside, for example to a common base table.
+		links to transformations outside, for example to a common base table.  If
+		a relative path is given, it is relative to the group enclosing the ``depends_on``
+		specification.
 		
 		..
 			Given an entry point :math:`\vec{p_i}`, the point :math:`\vec{p_{i+1}}` 
@@ -67,41 +89,94 @@
 		This entire explanation is not clear.
 		-->
 
-	<field name="TRANSFORMATION" nameType="any" type="NX_NUMBER" maxOccurs="unbounded">
+	<field name="AXISNAME" nameType="any" units="AXISUNITS" type="NX_NUMBER" maxOccurs="unbounded">
 		<doc>
 			Units need to be appropriate for translation or rotation
 			
-			The name of this field is not defined.  The user is free to use any name
-			that does not cause confusion.  When using more than one TRANSFORMATION field,
+			The name of this field is not forced.  The user is free to use any name
+			that does not cause confusion.  When using more than one ``AXISNAME`` field,
 			make sure that each field name is unique in the same group, as required
 			by HDF5.
+
+			The values given should be the start points of exposures for the corresponding
+			frames.  The end points should be given in ``AXISNAME_end``.
+		</doc>
+		<attribute name="transformation_type" minOccurs="0">
+			<doc>
+				The transformation_type may be ``translation``, in which case the
+				values are linear displacements along the axis, ``rotation``,
+				in which case the values are angular rotations around the axis.
+
+				If this attribute is omitted, this is an axis for which there
+				is no motion to be specifies, such as the direction of gravity,
+				or the direction to the source, or a basis vector of a
+				coordinate frame.
 		</doc>
-		<attribute name="transformation_type">
 			<enumeration>
 				<item value="translation" />
 				<item value="rotation" />
+				<!-- <item value="general" /> -->
 			</enumeration>
 		</attribute>
-		<attribute name="vector" type="NX_NUMBER">
+		<attribute name="vector" units="NX_DIMENSIONLESS" type="NX_NUMBER">
 			<doc>
-				Three values that define the axis for this transformation
+				Three values that define the axis for this transformation.
+				The axis should be normalized to unit length, making it
+				dimensionless.  For ``rotation`` axes, the direction should be
+				chosen for a right-handed rotation with increasing angle.
+				For ``translation`` axes the direction should be chosen for
+				increasing displacement.
 			</doc>
+			<dimensions rank="1" value="3" />
 		</attribute>
 		<attribute name="offset" type="NX_NUMBER">
 			<doc>
 				A fixed offset applied before the transformation (three vector components).
 			</doc>
+			<dimensions rank="1" value="3" />
 		</attribute>
 		<attribute name="offset_units" type="NX_CHAR">
 			<doc>
-				Units of the offset.
+				Units of the offset.  Values should be consistent with NX_LENGTH.
 			</doc>
 		</attribute>
 		<attribute name="depends_on" type="NX_CHAR">
 			<doc>
-				Points to the name of the next element in the geometry chain.
+				Points to the path to a field defining the axis on which this
+				depends or the string ".".
 			</doc>
 		</attribute>
 	</field>
-</definition>
+	<field name="AXISNAME_end" units="AXISUNITS" nameType="any" type="NX_NUMBER" minOccurs="0">
+		<doc>
+			``AXISNAME_end`` is a placeholder for a name constructed from the actual
+			name of an axis to which ``_end`` has been appended.
+
+			The values in this field are the end points of the motions that start
+			at the corresponding positions given in the ``AXISNAME`` field.
+		</doc>
+	</field>
+	<!-- as per NIAC discussion, 13 Oct 2016, we have removed AXISNAME_range as duplicative.	
+	<field name="AXISNAME_range" units="AXISUNITS"  nameType="any" type="NX_NUMBER" minOccurs="0">
+		<doc>
+			AXISNAME_range is a placeholder for a name constructed from the actual
+			name of an axis to which ``_range`` has been appended.
+
+			The values in this optional field are differences between the values
+			in the field AXISNAME_end and the field AXISNAME.
+		</doc>
+	</field>
+	-->
+	<field name="AXISNAME_increment_set" units="AXISUNITS"  nameType="any" type="NX_NUMBER" minOccurs="0">
+		<doc>
+			``AXISNAME_increment_set`` is a placeholder for a name constructed from the actual
+			name of an axis to which ``_increment_set`` has been appended.
 
+			The value of this optional field is the intended average range through which
+			the corresponding axis moves during the exposure of a frame.  Ideally, the
+			value of this field added to each value of ``AXISNAME`` would agree with the
+			corresponding values of ``AXISNAME_end``, but there is a possibility of significant
+			differences.  Use of ``AXISNAME_end`` is recommended. 
+		</doc>
+	</field>
+</definition>