<?xml version="1.0" encoding="utf-8"?>
<executable class="register">
  <name>Register3d</name>
  <version>1.0</version>
  <description>This registers and resamples two images</description>

  <parameters>
    <!-- a switch is a boolean flag, likely a checkbox.
         on the command line, name is the long version, flag is the
         one character version of the argument
         -->
    <switch name="interpolate" flag="i" default="true" required="false">
      <description></description>
    </switch>

    <!-- a value takes a single argument, may be required to be present
         and has a type.  In this case, the "metric" value is constrained to be
         one of the listed options below.  This should be represented by a
         group of radio buttons or drop down menu.
         -->
    <value name="metric" flag="m" default="mattes" required="false" type="string">
      <description></description>
      <constraints>
        <list>
          <constraint>mattes</constraint>
          <constraint>mi</constraint>
          <constraint>normalizedcorrelation</constraint>
        </list>
      </constraints>
    </value>

    <!-- an integer value with a range -->
    <value name="threshold" flag="t" type="integer">
      <constraints>
        <range minimum="0" maximum="100"/>
      </constraints>
    </value>

    <!-- a value argument that allow several instances of the argument to be specified.
         The values are appended to each other and returned in a vector.
         In the GUI, this could be a list of numbers in a string, or a
         dynamic list constructed by the user.
         -->
    <value name="iterations" flag="e" type="iteration" allowrepeats="true">
      <constraints>
        <range minimum="1"/>
      </constraints>
    </value>

    <!-- xor specifies that only one of it's contained parameters
         be specified.  In this case, we want a file or url, but not
         both -->
    <xor>
      <value name="file" flag="f" type="filename"/>
      <value name="url" flag="u"/>
    </xor>

    <!-- unlabeledvalue do not have a flag associated with them, and are positional.
         In this case, we are looking for 3 filenames.
         -->
    <unlabeledvalue name="fixedimage" position="0" type="filename"/>
    <unlabeledvalue name="movingimage" position="1" type="filename"/>
    <unlabeledvalue name="outputimage" position="2" type="filename"/>
  </parameters>
</executable>

