From DANSE
<?xml version="1.0"?>
<!--
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!
! {LicenseText}
!
! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-->
<!--
URL: http://www.
Editor: Tim Kelley <tkelley at caltech dot edu>
$Id: ARCS_template.xml,v 1.2 2005/07/14 17:06:46 tim Exp $
Instrument definition for ARCS time-of-flight neutron direct geometry spectrometer.
-->
<!-- Removed length specifiers. -->
<NXfile NeXus_version="{Version of NeXus API, if any}"
file_name="{Name of this file when originally created}"
file_time="{Time when this file was originally created}"
modified_time="{Time when this file was last modified}"
creator="{Facility or program where this file originated}?"
>
<!-- Cache XML rep -->
<xmlrep name="{name of rep}" type="NX_CHAR" date="{time stamp for xml rep}">?{XML representation of the structure of this file}</xmlrep>
<pythonRep name="{name}" type="NX_CHAR" date="{time stamp}">?{Pickled representation of object graph that represents this file's structure}</pythonRep>
<NXentry name="{Entry Name}">+
<title>{Extended title for entry}</title>
<!-- ??
<analysis version="$Revision: 1.2 $" URL="http://www.neutron.anl.gov/nexus/xml/NXtofndgs.xml">TOFNDGS</analysis>
-->
<!-- ISO8601 sounds like a format, not a type. I may be wrong. (Update: can the Nexus API treat IOS8601 as a type?) (Update update: yes, sort of)-->
<start_time type="NX_CHAR" format="ISO8601">{Starting time of measurement}?</start_time>
<end_time type="NX_CHAR" format="ISO8601">{Ending time of measurement}?</end_time>
<duration type="NX_INT" units="seconds">{Duration of measurement}</duration>
<NXuser name="user"
affiliation="{Affiliation of user}?"
address="{Address of user}?"
telephone_number="{Telephone number of user}?"
fax_number="{Fax number of user}?"
email="{Email of user}?"
>*
</NXuser>
<!-- Must have a sample -->
<NXsample name="sample">+
<name>{Descriptive name of sample}</name>
<!-- Added "irregular" specifier. Want to add possibility that an
irregular shape could be defined by a large array of points? -->
<shape>"plate"|"sphere"|"cylinder"|"hollow cylinder"|"irregular"</shape>
<dimension type="NX_FLOAT[3]" units="cm">{Dimensions of sample if plate-like}?</dimension>
<radius type="NX_FLOAT" units="cm">{Radius of sample if cylindrical or spherical}?</radius>
<inner_radius type="NX_FLOAT" units="cm">{Inner radius of sample if hollow}?</inner_radius>
<height type="NX_FLOAT" units="cm">{Height of sample}?</height>
<mass type="NX_FLOAT" units="g">{Mass of sample}?</mass>
<density type="NX_FLOAT" units="g cm-3">{Density of sample}?</density>
<molecular_weight type="NX_FLOAT">{Molecular weight of sample}?</molecular_weight>
<coherent_cross_section type="NX_FLOAT" units="barns">{Coherent cross section}?</coherent_cross_section>
<incoherent_cross_section type="NX_FLOAT" units="barns">{Incoherent cross section}?</incoherent_cross_section>
<absorption_cross_section type="NX_FLOAT" units="barns">{Absorption cross section}?</absorption_cross_section>
<!-- crystalline info -->
<crystalline>"single crystal"|"polycrystal"|"amorphous"?</crystalline>
<unit_cell type="NX_FLOAT[n_comp,6])">{Unit cell parameters (lengths and angles)}?</unit_cell>
<orientation_matrix type="NX_FLOAT[n_comp,3,3]">{Orientation matrix of single crystal sample}{The is the orientation matrix using Busing-Levy convention}?</orientation_matrix>
<!-- What about UB matrix?-->
<unit_cell_group type="NX_CHAR[n_comp]">{Crystallographic point or space group}?</unit_cell_group>
<!-- What other sample properties might be recorded? -->
</NXsample>
<!-- Must have an instrument -->
<NXinstrument name="ARCS">+
<NXsource name="SNS moderator 51"
type="Spallation Neutron Source"
probe="neutron"
power=""
current="tres chic"
voltage=""
frequency="60 Hz"
target_material="Hg"
>
<pulse_shape type="NX_FLOAT" units="" reference_point="{point at which profile measured" calibration_status="'Nominal'|'Measured'">{Pulse profile measured at some point}</pulse_shape>
</NXsource>
<!-- For T0, added frequency, phasing, energy bands blocked-->
<NXchopper name="T-zero chopper">
<distance type="NX_FLOAT" units="m">{Distance of chopper from source}</distance>
<configuration type="NX_CHAR">"Vertical Axis"|"Horizontal Axis"|"Other"</configuration>
<width type="NX_FLOAT" units="cm">{width of blade (horiz. ax.) or slot (vert. ax.)}?</width>
<frequency type="NX_FLOAT" units="Hertz">{Chopper frequency}</frequency>
<phasing type="NX_FLOAT" units="microseconds" calibration_status="'Nominal'|'Measured'">
{time from T-zero to first center-of-chopper-in-beam incident}</phasing>
<!-- Pairs of doubles [emin, emax] -->
<blocked_energies type="NX_FLOAT[i,2]" units="meV" calibration_status="'Nominal'|'Measured'">
{Energy bands blocked by chopper}</blocked_energies>
</NXchopper>
<NXchopper name="Fermi chopper">
<distance type="NX_FLOAT" units="m">{Distance of chopper from source}</distance>
<energy type="NX_FLOAT" units="meV" calibration_status="'Nominal'|'Measured'">{Optimum energy transmitted by the chopper}?</energy>
<radius_of_curvature type="NX_FLOAT" units="cm^{-2}">{Chopper radius of curvature}</radius_of_curvature>
<frequency type="NX_FLOAT" units="Hertz">{Chopper frequency}</frequency>
<phasing type="NX_FLOAT" units="microseconds" calibration_status="'Nominal'|'Measured'">
{time from T-zero to first center-of-chopper-in-beam incident}</phasing>
<time_fudge type="NX_FLOAT[]">{Whatever other numbers the instrument scientist needs to describe fully the timing}</time_fudge>
<!-- Pairs of doubles [emin, emax] -->
<transmitted_energies type="NX_FLOAT[i,2]" units="meV" calibration_status="'Nominal'|'Measured'">
{Energy bands transmitted by chopper}</transmitted_energies>
<!-- Added rotor/bearing info, made slit_package, slits, and slats into groups: these can be
swapped modularly -->
<rotor_id type="NX_INT">{id of rotor}</rotor_id>
<bearing_id type="NX_INT"></bearing_id>
<housing_id type="NX_INT"></housing_id>
<!-- We can have more than one slit package -->
<NXslit_package>
<id type="NX_INT"></id>
<radius_of_curvature units="cm" type="NX_FLOAT"></radius_of_curvature>
<slit_height units="cm" type="NX_FLOAT"></slit_height>
<!-- Transmitting parts: -->
<NXslit name="slit">
<width type="NX_FLOAT" units="cm">{width of slit}?</width>
<material type="NX_CHAR">{Material from which slits are made}?</material>
<mass type="NX_FLOAT" units="g">{Mass of sample}?</mass>
<density type="NX_FLOAT" units="g cm-3">{Density of sample}?</density>
<molecular_weight type="NX_FLOAT">{Molecular weight of sample}?</molecular_weight>
<coherent_cross_section type="NX_FLOAT" units="barns">{Coherent cross section}?</coherent_cross_section>
<incoherent_cross_section type="NX_FLOAT" units="barns">{Incoherent cross section}?</incoherent_cross_section>
<absorption_cross_section type="NX_FLOAT" units="barns">{Absorption cross section}?</absorption_cross_section>
</NXslit>
<!-- Absorbing parts: -->
<NXslit name="slat">
<!-- Geometry -->
<width type="NX_FLOAT" units="cm">{width of slat}?</width>
<material type="NX_CHAR">{Material from which slats are made}?</material>
<!-- neutronics -->
<coherent_cross_section type="NX_FLOAT" units="barns">{Coherent cross section}?</coherent_cross_section>
<incoherent_cross_section type="NX_FLOAT" units="barns">{Incoherent cross section}?</incoherent_cross_section>
<absorption_cross_section type="NX_FLOAT" units="barns">{Absorption cross section}?</absorption_cross_section>
<!-- bonus properties: irrelevant? -->
<density type="NX_FLOAT" units="g cm-3">{Density of sample}?</density>
<molecular_weight type="NX_FLOAT" units="dimensionless">{Molecular weight of sample}?</molecular_weight>
</NXslit>
</NXslit_package>
</NXchopper> <!-- end of Fermi chopper -->
<!-- After trying several ways, we're converging on the following representation of a detector array
(June, 2005). The default way to specify coordinates for arcs detector elements is to give the position in
the instrument coordinate system (spherical) that has the origin at the sample, the +ve x-axis along the
transmitted beam, the +ve z-axis straight up, and the y-axis determined by the right-hand rule. Orientations
are the angles around the x, y, and z axes needed to make the element's respective axes lie along the
instrument's.
Note that this represents the bare amount of information about detectors and pixels. One might want to
include more, such as detector efficiency or pixel solid angle.
-->
<DetectorArray name="">+
<DetectorPack name="" old_name="" comment="" index="" shape="" xLength="" yLength="" zLength="" >+
<LPSD>+
<position rank="1" dimension1="3" datatype=""/>
<orientation rank="1" dimension1="3" datatype=""/>
<ARCSPixelInfo shape="cylinder"> <!-- if there are n pixels then there are...-->
<heights rank="1" dimension1="" datatype=""/> <!-- ... n heights, ... -->
<orientations rank="1" dimension1="" datatype=""/> <!-- ... 3n orientation angles, ... -->
<positions rank="1" dimension1="" datatype=""/> <!-- ... 3n position coordinates, ... -->
<radii rank="1" dimension1="" datatype=""/> <!-- ... n radii, ... -->
</ARCSPixelInfo>
</LPSD>
</DetectorPack>
</DetectorArray>
<!-- This is probably the preferred way of storing detector information.
UPDATE: not any more--see above! -TK 06/06/05 -->
<!-- I've kept this below, as a lengthy listing of all the things one might ever want in
a detector. -TK 06/06/05-->
<NX_detectorPack name="">+
<type type="NX_CHAR">"multi-tube He3 PSD"</type>
<id type="NX_INT">{This element's GUID}</id>
<reference_point type="NX_CHAR">"Center of bank"</reference_point>
<distance type="NX_FLOAT" units="m" calibration_status="'Nominal'|'Measured'">{Distance from parent's reference point to reference point}</distance>
<polar_angle type="NX_FLOAT" units="degrees" calibration_status="'Nominal'|'Measured'">{Polar angle of detector element}</polar_angle>
<azimuthal_angle type="NX_FLOAT" units="degrees" calibration_status="'Nominal'|'Measured'">{Azimuthal angle of detector element}</azimuthal_angle>
<NXdetector name="Linear He3 PSD">+
<id type="NX_INT">{This element's identifier}</id>
<type type="NX_CHAR"> "He3 PSD"</type>
<reference_point type="NX_CHAR">"tube center"</reference_point>
<distance type="NX_FLOAT" units="m" calibration_status="'Nominal'|'Measured'">{Distance from parent's reference point to reference point}</distance>
<height type="NX_FLOAT" units="cm" calibration_status="'Nominal'|'Measured'">{Height of detector element}</height>
<radius type="NX_FLOAT" units="cm" calibration_status="'Nominal'|'Measured'">{Radius of detector element}</radius>
<!-- What does orientation mean? Possible to do this with 3 Euler angles?-->
<orientation type="NX_FLOAT[6]" units="degrees" calibration_status="'Nominal'|'Measured'">{Orientation of detector element}</orientation>
<dead_time type="NX_FLOAT">{Detector dead time}?</dead_time>
<hold_off type="NX_FLOAT" units="micro.second">{Delay in detector registering an event}?</hold_off>
<crate type="NX_INT" local_name="{Equivalent local term}">{Crate number of detector}?</crate>
<slot type="NX_INT" local_name="{Equivalent local term}">{Slot number of detector}?</slot>
<!-- What is input number? -->
<input type="NX_INT" local_name="{Equivalent local term}">{Input number of detector}?</input>
<type type="NX_CHAR">"He3 gas cylinder"|"He3 PSD"|"He3 planar multidetector"| "He3 curved multidetector"| "multi-tube He3 PSD"|"BF3 gas"|"scintillator"|"fission chamber"?</type>
<NXdata name="efficiency">{Efficiency of detector with respect to e.g. wavelength}?</NXdata>
<calibration_date type="NX_CHAR" format="ISO8601">{date of last calibration (geometry and/or efficiency) measurements}?</calibration_date>
<calibration_method type="NX_CHAR" format="NXnote">{summary of conversion of array data to pixels (e.g. polynomial approximations) and location of details of the calibrations}?</calibration_method>
<gas_pressure type="NX_FLOAT" units="bars">{Detector gas pressure}</gas_pressure>
<NX_pixel_info name="Pixel">+
<id type="NX_INT">{This element's identifier}</id>
<type type="NX_CHAR"> "Pixel"</type>
<reference_point type="NX_CHAR">"pixel center"</reference_point>
<distance type="NX_FLOAT" units="m" calibration_status="'Nominal'|'Measured'">{Distance from parent's reference point to reference point}</distance>
<solid_angle type="NX_FLOAT" units="steradians" calibration_status="'Nominal'|'Measured'"></solid_angle>
<height type="NX_FLOAT" units="cm" calibration_status="'Nominal'|'Measured'">{Height of detector element}</height>
</NX_pixel_info>
</NXdetector>
</NX_detectorPack>
<!-- monitor upstream of Fermi chopper -->
<NXmonitor name="monitor1">?
<position units="mm, degrees, degrees" type="NX_FLOAT">{position in spherical coordinates, ARCS standard system}</position>
<orientation units="degrees, degrees, degrees" type="NX_FLOAT">{orientation, ARCS standard system}</orientation>
</NXmonitor>
<!-- monitor between Fermi chopper and sample -->
<NXmonitor name="monitor2">
<position units="mm, degrees, degrees" type="NX_FLOAT">{position in spherical coordinates, ARCS standard system}</position>
<orientation units="degrees, degrees, degrees" type="NX_FLOAT">{orientation, ARCS standard system}</orientation>
</NXmonitor>
<!-- monitor downstream from sample -->
<NXmonitor name="monitor3">
<position units="mm, degrees, degrees" type="NX_FLOAT">{position in spherical coordinates, ARCS standard system}</position>
<orientation units="degrees, degrees, degrees" type="NX_FLOAT">{orientation, ARCS standard system}</orientation>
</NXmonitor>
</NXinstrument>
<!-- Data -->
<!-- I(det, pix, tof) -->
<NXdata name="" type="measured"|"simulated">+
<time_of_flight type="NX_FLOAT[j]" axis="1" long_name="Time-of-Flight (microseconds)" histogram_offset="{Offset to first histogram bin center">
{Total time of flight}
</time_of_flight>
<detector_id type="NX_INT" axis="2" long_name="Detector no.">{Identifier for detector}?</detector_id>
<pixel_id type="NX_INT" axis="3" long_name="Pixel number">{Identifier for pixel numver}?</pixel_id>
<data type="NX_INT[i,j,k]" signal="1" axes="[detector_id, pixel_id, time_of_flight]" long_name="{Title of measurement}?">
{Data values}</data>
</NXdata>
<!-- I(det, pix): data summed over all times -->
<NXdata name="" type="measured"|"simulated">+
<detector_id type="NX_INT" axis="2" long_name="Detector no.">{Identifier for detector}?</detector_id>
<pixel_id type="NX_INT" axis="3" long_name="Pixel number">{Identifier for pixel numver}?</pixel_id>
<data type="NX_INT[i,j]" signal="1" axes="[detector_id, pixel_id]" long_name="{Title of measurement}?">
{Data values}</data>
</NXdata>
<!-- Other permutations? -->
<!-- Monitor data -->
<NXdata name="monitor1_data" component="monitor1">
<tof type="NX_FLOAT[numbins + 1]" units="microsec">{time of flight bin boundaries}</tof>
<data type="NX_FLOAT[numBins]" units="counts">{counts}</data>
</NXdata>
<NXdata name="monitor2_data" component="monitor2">
<tof type="NX_FLOAT[numbins + 1]" units="microsec">{time of flight bin boundaries}</tof>
<data type="NX_FLOAT[numBins]" units="counts">{counts}</data>
</NXdata>
<NXdata name="monitor3_data" component="monitor3">
<tof type="NX_FLOAT[numbins + 1]" units="microsec">{time of flight bin boundaries}</tof>
<data type="NX_FLOAT[numBins]" units="counts">{counts}</data>
</NXdata>
</NXentry>
</NXfile>
<!-- version-->
<!-- $Id: ARCS_template.xml,v 1.2 2005/07/14 17:06:46 tim Exp $-->
<!-- Generated automatically by XMLMill on Tue Feb 15 13:04:38 2005-->
<!-- End of file -->