<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="nxdlformat.xsl" ?>
<!--
  # NXsnshisto: candidate NeXus definition for histogram data from Spallation Neutron Source (SNS) at ORNL.
-->
<definition type="group" name="NXsnshisto" category="contributed" extends="NXobject"
  xmlns="http://definition.nexusformat.org/nxdl/3.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://definition.nexusformat.org/nxdl/3.1 ../nxdl.xsd"
    >
  <doc>This is a definition for histogram data from Spallation Neutron Source (SNS) at ORNL.</doc>
  <group type="NXentry" minOccurs="1">
      <group type="NXcollection" name="DASlogs">
        <doc>
          Details of all logs, both from cvinfo file and from HistoTool (frequency and proton_charge).
        </doc>
        <group type="NXlog" minOccurs="1">
          <field name="average_value" type="NX_FLOAT"/>
          <field name="average_value_error" type="NX_FLOAT"/>
          <field name="description"/>
          <field name="duration" type="NX_FLOAT"/>
          <field name="maximum_value" type="NX_FLOAT"/>
          <field name="minimum_value" type="NX_FLOAT"/>
          <field name="time" type="NX_FLOAT">
            <dimensions rank="1">
              <dim index="1" value="nvalue"></dim>
            </dimensions>
          </field>
          <field name="value" type="NX_FLOAT">
            <dimensions rank="1">
              <dim index="1" value="nvalue"/>
            </dimensions>
          </field>
        </group> 
        <group type="NXpositioner" minOccurs="0">
          <doc>
            Motor logs from cvinfo file.
          </doc>
          <field name="average_value" type="NX_FLOAT"/>
          <field name="average_value_error" type="NX_FLOAT"/>
          <field name="description"/>
          <field name="duration" type="NX_FLOAT"/>
          <field name="maximum_value" type="NX_FLOAT"/>
          <field name="minimum_value" type="NX_FLOAT"/>
          <field name="time" type="NX_FLOAT">
            <dimensions rank="1">
              <dim index="1" value="numvalue"/>
            </dimensions>
          </field>
          <field name="value" type="NX_FLOAT">
            <dimensions rank="1">
              <dim index="1" value="numvalue"/>
            </dimensions>
          </field>
        </group> 
      </group>
      <group type="NXnote" name="SNSHistoTool">
        <field name="SNSbanking_file_name"/>
        <field name="SNSmapping_file_name"/>
        <field name="author"/>
        <field name="command1">
          <doc>
            Command string for event2histo_nxl.
          </doc>  
        </field>
        <field name="date"/>
        <field name="description"/>
        <field name="version"/>     
      </group>    
      <group type="NXdata" minOccurs="1">
        <!-- for all NXdata/banks -->
      <link name="data" target="/NXentry/NXinstrument/NXdetector/data"/>
      <link name="data_x_time_of_flight" target="/NXentry/NXinstrument/NXdetector/data_x_time_of_flight"/>
      <link name="data_x_y" target="/NXentry/NXinstrument/NXdetector/data_x_y"/>
        <link name="data_y_time_of_flight" target="/NXentry/NXinstrument/NXdetector/data_y_time_of_flight"/>
        <link name="pixel_id" target="/NXentry/NXinstrument/NXdetector/pixel_id"/>
        <link name="time_of_flight" target="/NXentry/NXinstrument/NXdetector/time_of_flight"/>
        <link name="total_counts" target="/NXentry/NXinstrument/NXdetector/total_counts"/>
        <link name="x_pixel_offset" target="/NXentry/NXinstrument/NXdetector/x_pixel_offset"/>
        <link name="y_pixel_offset" target="/NXentry/NXinstrument/NXdetector/y_pixel_offset"/>
      </group>
      <field name="collection_identifier"/>
      <field name="collection_title"/>
      <field name="definition">
        <doc>
          Official NXDL schema after this file goes to applications.
        </doc>
        <enumeration>
          <item value="NXsnshisto"/>
        </enumeration>     
      </field>
      <field name="duration" type="NX_FLOAT" units="NX_TIME"/>
      <field name="end_time" type="NX_DATE_TIME"/>
      <field name="entry_identifier"/>
      <field name="experiment_identifier"/>
      <group type="NXinstrument" name="instrument">
        <group type="NXsource" name="SNS">
          <field name="frequency" type="NX_FLOAT" units="NX_FREQUENCY"/>
          <field name="name"/>
          <field name="probe"/>
          <field name="type"/>
        </group>
        <field name="SNSdetector_calibration_id">
          <doc>
            Detector calibration id from DAS.
          </doc>
        </field>
        <field name="SNSgeometry_file_name"/>       
        <!-- SNSnxtranslate -->
        <field name="SNStranslation_service"/>  
        <group type="NXdetector" minOccurs="1">
          <!-- for all NXdetector/banks -->
          <field name="azimuthal_angle" type="NX_FLOAT" units="NX_ANGLE">
            <dimensions rank="2">
              <dim index="1" value="numx"/>
              <dim index="2" value="numy"/>
            </dimensions>
          </field> 
          <field name="data" type="NX_UINT" signal="1" axes="x_pixel_offset,y_pixel_offset,time_of_flight">
            <dimensions rank="3">
              <dim index="1" value="numx"/>
              <dim index="2" value="numy"/>
              <dim index="3" value="numtof"/>
            </dimensions>
          </field> 
          <field name="data_x_time_of_flight" type="NX_UINT" signal="3" axes="x_pixel_offset,time_of_flight">
            <dimensions rank="2">
              <dim index="1" value="numx"/>
              <dim index="2" value="numtof"/>
            </dimensions>
          </field> 
          <field name="data_x_y" type="NX_UINT" signal="2" axes="x_pixel_offset,y_pixel_offset">
            <dimensions rank="2">
              <dim index="1" value="numx"/>
              <dim index="2" value="numy"/>
            </dimensions>
          </field> 
          <field name="data_y_time_of_flight" type="NX_UINT" signal="4" axes="y_pixel_offset,time_of_flight">
            <dimensions rank="2">
              <dim index="1" value="numy"/>
              <dim index="2" value="numtof"/>
            </dimensions>
          </field> 
          <field name="distance" type="NX_FLOAT" units="NX_LENGTH">
            <dimensions rank="2">
              <dim index="1" value="numx"/>
              <dim index="2" value="numy"/>
            </dimensions>
          </field>
          <group type="NXgeometry" name="origin">
            <group type="NXorientation" name="orientation">
              <field name="value" type="NX_FLOAT">
                <doc>
                  Six out of nine rotation parameters.
                </doc>
                <dimensions rank="1">
                  <dim index="1" value="6"/>
                </dimensions>
              </field>
            </group>
            <group type="NXshape" name="shape">
              <field name="description"/>
              <field name="shape"/>
              <field name="size" type="NX_FLOAT" units="NX_LENGTH">
                <dimensions rank="1">
                  <dim index="1" value="3"/>
                </dimensions>
              </field>
            </group>
            <group type="NXtranslation" name="translation">
              <field name="distance" type="NX_FLOAT" units="NX_LENGTH">
                <dimensions rank="1">
                  <dim index="1" value="3"/>
                </dimensions>
              </field>
            </group>
          </group>
          <field name="pixel_id" type="NX_UINT">
            <dimensions rank="2">
              <dim index="1" value="numx"/>
              <dim index="2" value="numy"/>
            </dimensions>
          </field> 
          <field name="polar_angle" type="NX_FLOAT" units="NX_ANGLE">
            <dimensions rank="2">
              <dim index="1" value="numx"/>
              <dim index="2" value="numy"/>
            </dimensions>
          </field> 
          <field name="time_of_flight" type="NX_FLOAT" axis="3" primary="1" units="NX_TIME_OF_FLIGHT">
            <dimensions rank="1">
              <dim index="1" value="numtof + 1"/>
            </dimensions>
          </field> 
          <field name="total_counts" type="NX_UINT"/> 
          <field name="x_pixel_offset" type="NX_FLOAT" axis="1" primary="1" units="NX_LENGTH">
            <dimensions rank="1">
              <dim index="1" value="numx"/>
            </dimensions>
          </field> 
          <field name="y_pixel_offset" type="NX_FLOAT" axis="2" primary="1" units="NX_LENGTH">
            <dimensions rank="1">
              <dim index="1" value="numy"/>
            </dimensions>        
          </field> 
        </group>       
        <field name="beamline"/>
        <group type="NXdisk_chopper" minOccurs="0">
          <doc>
            Original specification called for NXchopper, 
            which is not a valid NeXus base class.
            Select either NXdisk_chopper or NXfermi_chopper, as appropriate.
          </doc>
          <field name="distance" type="NX_FLOAT" units="NX_LENGTH"/>
        </group>   
        <group type="NXfermi_chopper" minOccurs="0">
          <doc>
            Original specification called for NXchopper, 
            which is not a valid NeXus base class.
            Select either NXdisk_chopper or NXfermi_chopper, as appropriate.
          </doc>
          <field name="distance" type="NX_FLOAT" units="NX_LENGTH"/>
        </group>   
        <group type="NXmoderator" name="moderator">
          <field name="coupling_material"/>
          <field name="distance" type="NX_FLOAT" units="NX_LENGTH"/>
          <field name="temperature" type="NX_FLOAT" units="NX_TEMPERATURE"/>
          <field name="type"/>
        </group>  
        <field name="name"/>  
        <group type="NXaperture" minOccurs="0">
          <group type="NXgeometry" name="origin">
            <group type="NXorientation" name="orientation">
              <field name="value" type="NX_FLOAT">
                <doc>
                  Six out of nine rotation parameters.
                </doc>
                <dimensions rank="1">
                  <dim index="1" value="6"/>
                </dimensions>
              </field>
            </group>
            <group type="NXshape" name="shape">
              <field name="description"/>
              <field name="shape"/>
              <field name="size" type="NX_FLOAT" units="NX_LENGTH">
                <dimensions rank="1">
                  <dim index="1" value="3"/>
                </dimensions>
              </field>
            </group>
            <group type="NXtranslation" name="translation">
              <field name="distance" type="NX_FLOAT" units="NX_LENGTH">
                <dimensions rank="1">
                  <dim index="1" value="3"/>
                </dimensions>
              </field>
            </group>
          </group>
          <field name="x_pixel_offset" type="NX_FLOAT" units="NX_LENGTH">
          </field>
        </group>
        <group type="NXattenuator" minOccurs="0">
          <field name="distance" type="NX_FLOAT" units="NX_LENGTH"/>
          <!-- motor links from DASlogs when exist -->
        </group>
        <group type="NXpolarizer" minOccurs="0"/>
        <!-- motor links from DASlogs when exist -->
        <group type="NXcrystal" minOccurs="0">
          <group type="NXgeometry" name="origin">
            <field name="description"/>
            <group type="NXorientation" name="orientation">
              <field name="value" type="NX_FLOAT">
                <doc>
                  Six out of nine rotation parameters.
                </doc>
                <dimensions rank="1">
                  <dim index="1" value="6"/>
                </dimensions>
              </field>
            </group>
            <group type="NXshape" name="shape">
              <field name="description"/>
              <field name="shape"/>
              <field name="size" type="NX_FLOAT" units="NX_LENGTH">
              </field>
            </group>
            <group type="NXtranslation" name="translation">
              <field name="distance" type="NX_FLOAT" units="NX_LENGTH">
                <dimensions rank="1">
                  <dim index="1" value="3"/>
                </dimensions>
              </field>
            </group>
          </group>
          <field name="type"/>
          <field name="wavelength" type="NX_FLOAT" units="NX_WAVELENGTH"/>
        </group>
      </group>
      <group type="NXmonitor" minOccurs="0">
        <field name="data" type="NX_UINT" signal="1" axes="time_of_flight">
          <dimensions rank="1">
            <dim index="1" value="numtimechannels"/>
          </dimensions>
        </field>  
        <field name="distance" type="NX_FLOAT" units="NX_LENGTH"/>  
        <field name="mode"/>  
        <field name="time_of_flight" type="NX_FLOAT" units="NX_TIME">
          <dimensions rank="1">
            <dim index="1" value="numtimechannels + 1"/>
          </dimensions>   
        </field>      
      </group>
      <field name="notes"/>   
    <field name="proton_charge" type="NX_FLOAT" units="NX_CHARGE"/>
      <field name="raw_frames" type="NX_INT"/>
      <field name="run_number"/>
      <group type="NXsample" name="sample">
        <field name="changer_position"/>
        <field name="holder"/>
        <field name="identifier"/>
        <field name="name">
          <doc>Descriptive name of sample</doc>
        </field>   
        <field name="nature"/>
      </group>  
      <field name="start_time" type="NX_DATE_TIME"/>
      <field name="title"/>
      <field name="total_counts" type="NX_UINT" units="NX_UNITLESS"/>
      <field name="total_uncounted_counts" type="NX_UINT" units="NX_UNITLESS"/>
      <group type="NXuser" minOccurs="1">
        <field name="facility_user_id"/>
        <field name="name"/>
        <field name="role"/>
      </group>     
    </group>
</definition>
