Show Ensemble Metadata Schema (XSD)

ILDG Home
PUNCH Home

MDC index

Ensemble index
Ensemble list

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.lqcd.org/ildg/QCDml/ensemble1.4" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://www.lqcd.org/ildg/QCDml/ensemble1.4">
  <xs:complexType name="arrayType">
    <xs:annotation>
      <xs:documentation>SciDAC array definition</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="elem" maxOccurs="unbounded" type="xs:anySimpleType">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="action">
    <xs:annotation>
      <xs:documentation>The action XML chunk</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="gluon">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="generalGluonAction" maxOccurs="unbounded">
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="quark" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="generalQuarkAction" maxOccurs="unbounded">
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="boundaryConditionType">
    <xs:annotation>
      <xs:documentation>Enumeration of possible BCs</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="periodic">
      </xs:enumeration>
      <xs:enumeration value="antiperiodic">
      </xs:enumeration>
      <xs:enumeration value="dirichlet">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="representationType">
    <xs:annotation>
      <xs:documentation>Enumeration of possible representations of groups</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="fundamental">
      </xs:enumeration>
      <xs:enumeration value="adjoint">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="gaugeGroupType">
    <xs:annotation>
      <xs:documentation>Enumeration of possible gauge groups</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:enumeration value="SU(3)">
      </xs:enumeration>
      <xs:enumeration value="SU(2)">
      </xs:enumeration>
      <xs:enumeration value="SU(4)">
      </xs:enumeration>
      <xs:enumeration value="SU(5)">
      </xs:enumeration>
      <xs:enumeration value="SU(6)">
      </xs:enumeration>
      <xs:enumeration value="U(1)">
      </xs:enumeration>
      <xs:enumeration value="U(3)">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="quarkField">
    <xs:annotation>
      <xs:documentation>Describes the quark field normalisation and boundary conditions</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="normalisation" type="xs:string">
        </xs:element>
        <xs:element ref="boundaryCondition">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="gluonField">
    <xs:annotation>
      <xs:documentation>Contains the properties of the gluon field, e.g. gauge group and representation</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="gaugeGroup" type="gaugeGroupType">
        </xs:element>
        <xs:element name="representation" type="representationType">
        </xs:element>
        <xs:element ref="boundaryCondition">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="array" type="arrayType" abstract="true">
    <xs:annotation>
      <xs:documentation>The SciDAC array definition</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="numberOfFlavours" type="xs:integer">
    <xs:annotation>
      <xs:documentation>The number of flavours of quarks that have the action defined by the following couplings</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="boundaryCondition">
    <xs:annotation>
      <xs:documentation>An array of boundaryConditionType</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="elem" maxOccurs="unbounded" type="boundaryConditionType">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="couplingsType">
    <xs:annotation>
      <xs:documentation>General complex type contains more than one coupling</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="nCouplings" maxOccurs="unbounded" type="couplingType">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="couplingType">
    <xs:annotation>
      <xs:documentation>All couplings are of this type, essentially a double</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:double">
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="quarkCouplingsType">
    <xs:annotation>
      <xs:documentation>Contaings N couplings plus integer numberOfFlavours</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="numberOfFlavours">
      </xs:element>
      <xs:element name="nCouplings" maxOccurs="unbounded" type="couplingType">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="generalQuarkActionType">
    <xs:annotation>
      <xs:documentation>Has the general properties of the quark action</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="glossary" type="xs:anyURI">
      </xs:element>
      <xs:element ref="quarkField">
      </xs:element>
      <xs:element ref="numberOfFlavours">
      </xs:element>
      <xs:element ref="linkSmearing" minOccurs="0">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="generalQuarkAction" type="generalQuarkActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>Has the general properties of the quark action, i.e. the number of quark flavours and the properties of the fields</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="anisotropicQuarkActionType">
    <xs:complexContent>
      <xs:extension base="generalQuarkActionType">
        <xs:sequence>
          <xs:element name="xi0" minOccurs="1" maxOccurs="1" type="couplingType" default="1.0">
          </xs:element>
          <xs:element name="anisoDirection" minOccurs="1" maxOccurs="1" type="xs:Name" default="T">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalQuarkAction" name="anisotropicQuarkAction" type="anisotropicQuarkActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>Extends the general quark action with fields related to anisotropy namely the xi0 parameter and the direction which is anisotropic</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="generalGluonActionType">
    <xs:annotation>
      <xs:documentation>Has the general properties of the gluon action</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="glossary" type="xs:anyURI">
      </xs:element>
      <xs:element ref="gluonField">
      </xs:element>
      <xs:element ref="topologyFixing" minOccurs="0">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="generalGluonAction" type="generalGluonActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>Has the general properties of the gloun action, i.e. the gluon field and the glossary XML</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="anisotropicGluonActionType">
    <xs:complexContent>
      <xs:extension base="generalGluonActionType">
        <xs:sequence>
          <xs:element name="xi0" minOccurs="1" maxOccurs="1" type="couplingType" default="1.0">
          </xs:element>
          <xs:element name="anisoDirection" minOccurs="1" maxOccurs="1" type="xs:Name" default="T">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalGluonAction" name="anisotropicGluonAction" type="anisotropicGluonActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>Extends a general quark action with with anisotropy parameters xi0 and the anisotropy direction</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="iwasakiRGGluonActionType">
    <xs:complexContent>
      <xs:extension base="sixLinkGluonActionType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="sixLinkGluonAction" name="iwasakiRGGluonAction" type="iwasakiRGGluonActionType">
    <xs:annotation>
      <xs:documentation>This six-link action has three couplings</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="plaquetteGluonActionType">
    <xs:complexContent>
      <xs:extension base="generalGluonActionType">
        <xs:sequence>
          <xs:element name="beta" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="sixLinkGluonActionType" abstract="true">
    <xs:complexContent>
      <xs:extension base="plaquetteGluonActionType">
        <xs:sequence>
          <xs:element name="normalisation">
            <xs:simpleType>
              <xs:restriction base="xs:NMTOKEN">
                <xs:enumeration value="cs_sum_to_one">
                </xs:enumeration>
                <xs:enumeration value="c0_is_one">
                </xs:enumeration>
              </xs:restriction>
            </xs:simpleType>
          </xs:element>
          <xs:element name="c0" type="couplingType">
          </xs:element>
          <xs:element name="c1" type="couplingType">
          </xs:element>
          <xs:element name="c2" type="couplingType">
          </xs:element>
          <xs:element name="c3" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="anisotropicWilsonGluonActionType">
    <xs:complexContent>
      <xs:extension base="anisotropicGluonActionType">
        <xs:sequence>
          <xs:element name="beta" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="anisotropicTpWilsonGluonActionType">
    <xs:complexContent>
      <xs:extension base="anisotropicWilsonGluonActionType">
        <xs:sequence>
          <xs:element name="tadpoleSpatial" type="couplingType">
          </xs:element>
          <xs:element name="tadpoleTemporal" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="plaquetteGluonAction" name="sixLinkGluonAction" type="sixLinkGluonActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>Abstract class of all six link gluon action. Doesn't fix the couplings.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="generalGluonAction" name="plaquetteGluonAction" type="plaquetteGluonActionType">
    <xs:annotation>
      <xs:documentation>The Wilson plaquette action, has a coupling beta</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="anisotropicGluonAction" name="anisotropicWilsonGluonAction" type="anisotropicWilsonGluonActionType">
    <xs:annotation>
      <xs:documentation>Anisotropic version of the Wilson Plaquette Action</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="anisotropicWilsonGluonAction" name="anisotropicTpWilsonGluonAction" type="anisotropicTpWilsonGluonActionType">
    <xs:annotation>
      <xs:documentation>Anisotropic version of the Wilson Plaquette Action with tadpole improvement</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="DBW2GluonActionType">
    <xs:complexContent>
      <xs:extension base="sixLinkGluonActionType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="sixLinkGluonAction" name="DBW2GluonAction" type="DBW2GluonActionType">
    <xs:annotation>
      <xs:documentation>DBW2 is a six link action with specific couplings</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="treelevelSymanzikGluonActionType">
    <xs:complexContent>
      <xs:extension base="sixLinkGluonActionType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="sixLinkGluonAction" name="treelevelSymanzikGluonAction" type="treelevelSymanzikGluonActionType">
    <xs:annotation>
      <xs:documentation>The treelevel Symanzik action is a six link action with specific couplings</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="LuescherWeiszGluonActionType">
    <xs:complexContent>
      <xs:extension base="sixLinkGluonActionType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="sixLinkGluonAction" name="LuescherWeiszGluonAction" type="LuescherWeiszGluonActionType">
    <xs:annotation>
      <xs:documentation>The Luescher-Weisz gluon action is a six link action</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="tpLuescherWeiszGluonActionType">
    <xs:complexContent>
      <xs:extension base="LuescherWeiszGluonActionType">
        <xs:sequence>
          <xs:element name="u0" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="sixLinkGluonAction" name="tpLuescherWeiszGluonAction" type="tpLuescherWeiszGluonActionType">
    <xs:annotation>
      <xs:documentation>The Luescher-Weisz gluon action with tadpole-improved coefficients is a six link action</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonQuarkActionType">
    <xs:complexContent>
      <xs:extension base="generalQuarkActionType">
        <xs:sequence>
          <xs:element name="kappa" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="anisotropicWilsonQuarkActionType">
    <xs:complexContent>
      <xs:extension base="anisotropicQuarkActionType">
        <xs:sequence>
          <xs:choice>
            <xs:sequence>
              <xs:element name="kappaSpatial" type="couplingType">
              </xs:element>
              <xs:element name="kappaTemporal" type="couplingType">
              </xs:element>
            </xs:sequence>
            <xs:sequence>
              <xs:element name="nu" type="couplingType">
              </xs:element>
              <xs:element name="mass" type="couplingType">
              </xs:element>
            </xs:sequence>
          </xs:choice>
          <xs:element name="rSpatial" minOccurs="0" maxOccurs="1" type="couplingType" default="1.0">
          </xs:element>
          <xs:element name="rTemporal" minOccurs="0" maxOccurs="1" type="couplingType" default="1.0">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="anisotropicQuarkAction" name="anisotropicWilsonQuarkAction" type="anisotropicWilsonQuarkActionType">
    <xs:annotation>
      <xs:documentation>Anisotropic Wilson Action in either (mu,mass) or (kappa_s,kappa_t) convention. Wilson's r parameters are optional. Default values are 1.0.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="generalQuarkAction" name="wilsonQuarkAction" type="wilsonQuarkActionType">
    <xs:annotation>
      <xs:documentation>The wilson quark action, has a coupling kappa</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="cloverQuarkActionType" abstract="true">
    <xs:complexContent>
      <xs:extension base="wilsonQuarkActionType">
        <xs:sequence>
          <xs:element name="cSW" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="npCloverQuarkActionType">
    <xs:complexContent>
      <xs:extension base="cloverQuarkActionType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="wilsonQuarkAction" name="cloverQuarkAction" type="cloverQuarkActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>The generic clover wilson action type. It is abstract because there are different definitions of CSW that are all clover actions</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="tpCloverQuarkActionType">
    <xs:complexContent>
      <xs:extension base="cloverQuarkActionType">
        <xs:sequence>
          <xs:element name="u0" minOccurs="1" maxOccurs="1" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="cloverQuarkAction" name="npCloverQuarkAction" type="npCloverQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Clover Wilson quark action where the coefficient has been determined non-perturbatively</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="cloverQuarkAction" name="tpCloverQuarkAction" type="tpCloverQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Clover Wilson quark action where the coefficient has been determined by tadpole improved perturbation theory</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="anisotropicCloverQuarkActionType">
    <xs:complexContent>
      <xs:extension base="anisotropicWilsonQuarkActionType">
        <xs:sequence>
          <xs:element name="cSWSpatial" type="couplingType">
          </xs:element>
          <xs:element name="cSWTemporal" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="anisotropicWilsonQuarkAction" name="anisotropicCloverQuarkAction" type="anisotropicCloverQuarkActionType">
    <xs:annotation>
      <xs:documentation>An element for anisotropic clover</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="fatLinkIrrelevantCloverQuarkActionType">
    <xs:complexContent>
      <xs:extension base="cloverQuarkActionType">
        <xs:sequence>
          <xs:element name="u0" minOccurs="1" maxOccurs="1" type="couplingType">
          </xs:element>
          <xs:element name="u0fl" minOccurs="1" maxOccurs="1" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="cloverQuarkAction" name="fatLinkIrrelevantCloverQuarkAction" type="fatLinkIrrelevantCloverQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Clover Wilson quark action where the coefficient has been determined by tadpole improved perturbation theory and the links for irrelevant operators have been smeared</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="npCloverQuarkAction" name="fatLinkDerivNpCloverQuarkAction" type="npCloverQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Clover Wilson quark action where the coefficient has been determined non-perturbatively and smeared links are used in the derivative term</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonTmQuarkActionType">
    <xs:complexContent>
      <xs:extension base="wilsonQuarkActionType">
        <xs:sequence>
          <xs:element name="mu" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="wilsonQuarkAction" name="wilsonTmQuarkAction" type="wilsonTmQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Wilson twisted mass quark action</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonCloverTmQuarkActionType">
    <xs:complexContent>
      <xs:extension base="wilsonTmQuarkActionType">
        <xs:sequence>
          <xs:element name="cSW" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="wilsonTmQuarkAction" name="wilsonCloverTmQuarkAction" type="wilsonCloverTmQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Wilson twisted mass quark action with Clover term</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonTmMassSplitQuarkActionType">
    <xs:complexContent>
      <xs:extension base="wilsonQuarkActionType">
        <xs:sequence>
          <xs:element name="muTwist" type="couplingType">
          </xs:element>
          <xs:element name="muMassSplit" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="wilsonQuarkAction" name="wilsonTmMassSplitQuarkAction" type="wilsonTmMassSplitQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Wilson twisted mass quark action with mass-split doublet as described in Eq. (9) of arXiv:hep-lat/0606011v1. Note that unlike in the wilsonTmQuarkAction the twist is in the tau1 direction, while the tau3 direction is used for the mass splitting.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonCloverTmMassSplitQuarkActionType">
    <xs:complexContent>
      <xs:extension base="wilsonTmMassSplitQuarkActionType">
        <xs:sequence>
          <xs:element name="cSW" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="wilsonTmMassSplitQuarkAction" name="wilsonCloverTmMassSplitQuarkAction" type="wilsonCloverTmMassSplitQuarkActionType">
    <xs:annotation>
      <xs:documentation>The Wilson twisted mass quark action with mass-split doublet plus Clover term</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="KSQuarkActionType">
    <xs:complexContent>
      <xs:extension base="generalQuarkActionType">
        <xs:sequence>
          <xs:element name="mass" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalQuarkAction" name="KSQuarkAction" type="KSQuarkActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>The basic KS action. Abstract</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="asqTadQuarkActionType">
    <xs:complexContent>
      <xs:extension base="KSQuarkActionType">
        <xs:sequence>
          <xs:element name="cNaik" type="couplingType">
          </xs:element>
          <xs:element name="c1Link" type="couplingType">
          </xs:element>
          <xs:element name="c3Link" type="couplingType">
          </xs:element>
          <xs:element name="c5LinkChair" type="couplingType">
          </xs:element>
          <xs:element name="c7LinkTwist" type="couplingType">
          </xs:element>
          <xs:element name="cLepage" type="couplingType">
          </xs:element>
          <xs:element name="u0" minOccurs="1" maxOccurs="1" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="KSQuarkAction" name="asqTadQuarkAction" type="asqTadQuarkActionType">
    <xs:annotation>
      <xs:documentation>A specific improved KS quark action</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="KSLinkTreatmentType">
    <xs:sequence>
      <xs:element name="glossary" minOccurs="1" maxOccurs="1" type="xs:anyURI">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="KSLinkTreatment" abstract="true" type="KSLinkTreatmentType">
  </xs:element>
  <xs:complexType name="fat7QuarkLinkTreatmentType">
    <xs:complexContent>
      <xs:extension base="KSLinkTreatmentType">
        <xs:sequence>
          <xs:element name="c1Link" type="couplingType">
          </xs:element>
          <xs:element name="c3Link" type="couplingType">
          </xs:element>
          <xs:element name="c5LinkChair" type="couplingType">
          </xs:element>
          <xs:element name="c7LinkTwist" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="u0" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="KSLinkTreatment" name="fat7QuarkLinkTreatment" type="fat7QuarkLinkTreatmentType">
  </xs:element>
  <xs:complexType name="projectGroupLinkTreatmentType">
    <xs:complexContent>
      <xs:extension base="KSLinkTreatmentType">
        <xs:sequence>
          <xs:element name="group" maxOccurs="1" minOccurs="0" type="gaugeGroupType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="KSLinkTreatment" name="projectGroupLinkTreatment" type="projectGroupLinkTreatmentType">
  </xs:element>
  <xs:complexType name="epsilonType">
    <xs:sequence>
      <xs:element maxOccurs="1" minOccurs="1" name="method" type="xs:string">
      </xs:element>
      <xs:element maxOccurs="1" minOccurs="1" name="value" type="couplingType">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="asqTadQuarkLinkTreatmentType">
    <xs:complexContent>
      <xs:extension base="KSLinkTreatmentType">
        <xs:sequence>
          <xs:element maxOccurs="1" minOccurs="0" name="epsilon" type="epsilonType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="cNaik" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="c1Link" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="c3Link" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="c5LinkChair" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="c7LinkTwist" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="cLepage" type="couplingType">
          </xs:element>
          <xs:element maxOccurs="1" minOccurs="1" name="u0" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="KSLinkTreatment" name="asqTadQuarkLinkTreatment" type="asqTadQuarkLinkTreatmentType">
  </xs:element>
  <xs:complexType name="hisqQuarkActionType">
    <xs:complexContent>
      <xs:extension base="KSQuarkActionType">
        <xs:sequence>
          <xs:element name="LinkTreatment">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="fat7QuarkLinkTreatment" minOccurs="1" maxOccurs="1">
                </xs:element>
                <xs:element ref="projectGroupLinkTreatment" minOccurs="1" maxOccurs="1">
                </xs:element>
                <xs:element ref="asqTadQuarkLinkTreatment" minOccurs="1" maxOccurs="1">
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="KSQuarkAction" name="hisqQuarkAction" type="hisqQuarkActionType">
    <xs:annotation>
      <xs:documentation>The HISQ Quark action</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element substitutionGroup="generalQuarkAction" name="generalOverlapQuarkAction" type="generalOverlapQuarkActionType" abstract="true">
    <xs:annotation>
      <xs:documentation>The abstract Overlap quark operator</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="generalOverlapQuarkActionType">
    <xs:complexContent>
      <xs:extension base="generalQuarkActionType">
        <xs:sequence>
          <xs:element name="mass" type="couplingType">
            <xs:annotation>
              <xs:documentation>The quark mass for this operator</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="kernelMass" type="couplingType">
            <xs:annotation>
              <xs:documentation>The mass that goes into the kernel. Sometimes called the domain wall height. Sometimes given a negative sign convention. This is NOT enforced here.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="domainWallQuarkActionType">
    <xs:complexContent>
      <xs:extension base="generalOverlapQuarkActionType">
        <xs:sequence>
          <xs:element name="N5" type="couplingType">
            <xs:annotation>
              <xs:documentation>The degree of the approximation for the square root or equivalently the size of the fifth dimension</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalOverlapQuarkAction" name="domainWallQuarkAction" type="domainWallQuarkActionType">
    <xs:annotation>
      <xs:documentation>The domain Wall quark action. 4D is Wilson and the approx is tanh</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="ciQuarkActionType">
    <xs:annotation>
      <xs:documentation>Chirally Improved fermions. Notation follows arXiv:hep-lat/0003005</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="generalQuarkActionType">
        <xs:sequence>
          <xs:element name="mass" type="couplingType">
          </xs:element>
          <xs:element name="s1" type="couplingType">
          </xs:element>
          <xs:element name="s2" type="couplingType">
          </xs:element>
          <xs:element name="s3" type="couplingType">
          </xs:element>
          <xs:element name="s4" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="s5" type="couplingType">
          </xs:element>
          <xs:element name="s6" type="couplingType">
          </xs:element>
          <xs:element name="s7" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="s8" type="couplingType">
          </xs:element>
          <xs:element name="s9" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="s10" type="couplingType">
          </xs:element>
          <xs:element name="s11" type="couplingType">
          </xs:element>
          <xs:element name="s12" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="s13" type="couplingType">
          </xs:element>
          <xs:element name="v1" type="couplingType">
          </xs:element>
          <xs:element name="v2" type="couplingType">
          </xs:element>
          <xs:element name="v3" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v4" type="couplingType">
          </xs:element>
          <xs:element name="v5" type="couplingType">
          </xs:element>
          <xs:element name="v6" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v7" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v8" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v9" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v10" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v11" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v12" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v13" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v14" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v15" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v16" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v17" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="v18" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t1" type="couplingType">
          </xs:element>
          <xs:element name="t2" type="couplingType">
          </xs:element>
          <xs:element name="t3" type="couplingType">
          </xs:element>
          <xs:element name="t4" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t5" type="couplingType">
          </xs:element>
          <xs:element name="t6" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t7" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t8" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t9" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t10" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t11" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t12" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t13" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t14" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="t15" type="couplingType">
          </xs:element>
          <xs:element name="a1" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="a2" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="a3" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="a4" minOccurs="0" type="couplingType">
          </xs:element>
          <xs:element name="p1" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalQuarkAction" name="ciQuarkAction" type="ciQuarkActionType">
    <xs:annotation>
      <xs:documentation>Extends the general quark action to chirally improved fermion actions</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="fatLinkCIQuarkActionType">
    <xs:complexContent>
      <xs:extension base="ciQuarkActionType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="ciQuarkAction" name="fatLinkCIQuarkAction" type="fatLinkCIQuarkActionType">
    <xs:annotation>
      <xs:documentation>Chirally improved fermion action with fat links</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:simpleType name="variableType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="variable">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="signApproxNPoleType">
    <xs:union memberTypes="variableType xs:positiveInteger">
    </xs:union>
  </xs:simpleType>
  <xs:simpleType name="signApproxThresholdMethodType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="eigenmode">
      </xs:enumeration>
      <xs:enumeration value="ignore">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="signApproxThresholdType">
    <xs:complexContent>
      <xs:restriction base="xs:anyType">
        <xs:sequence>
          <xs:element name="min" type="couplingType">
          </xs:element>
          <xs:element name="max" type="couplingType">
          </xs:element>
          <xs:element name="method" type="signApproxThresholdMethodType">
          </xs:element>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
  <xs:element name="zolotarevSignApprox">
    <xs:annotation>
      <xs:documentation>The Zolotarev rational polynomial approximation is used to estimate sign(H_W). The range of the approximation is specified by either "threshold" or "nEngenmode".</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element name="threshold" type="signApproxThresholdType">
            <xs:annotation>
              <xs:documentation>The range OUTSIDE the approximation and how contribution from the range is treated. "method"=eigenmode: all eigenmodes in (min,max) are calculated and the sign(H_W) is treated exactly in the range. "method"=ignore: contribution from the range is simply ignored. Note that "min = - max .lt. 0" is an usual cases. Also note that the upper bound of the sign approximation function is not marked up, because it is in general dependent of configurations.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="nEigenmode" type="xs:positiveInteger">
            <xs:annotation>
              <xs:documentation>Low-lying eigenmodes (lambda_i, i=1 to "nEigenmode") are identified and the sign approximation formula is applied for the range of x given by "|x| .ge. max_i |lambda_i|". Upper-bound of the range is not marked up.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:choice>
        <xs:element name="nPole" type="signApproxNPoleType">
          <xs:annotation>
            <xs:documentation>The number of poles of the sign approximation formula. Positive integer is recommended when "threshold" is given. variable is allowed when "nEigenmode" is given.</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="overlapQuarkActionType">
    <xs:complexContent>
      <xs:extension base="generalOverlapQuarkActionType">
        <xs:sequence>
          <xs:element ref="zolotarevSignApprox">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalOverlapQuarkAction" name="overlapQuarkAction" type="overlapQuarkActionType">
    <xs:annotation>
      <xs:documentation>The overlap quark action.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="size">
    <xs:annotation>
      <xs:documentation>The simulation size, for each dimension, as well as the order of the dimensioons</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="elem" maxOccurs="unbounded" type="dimensionType">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="dimensionType">
    <xs:annotation>
      <xs:documentation>The name of the dimension and its size</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="xs:Name">
      </xs:element>
      <xs:element name="length" type="xs:integer">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="observables">
    <xs:annotation>
      <xs:documentation>Observables calculated on configurations of this ensemble</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="elem" type="observableType">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="observableType">
    <xs:annotation>
      <xs:documentation>Definition of observalbes</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="observableNameType">
      </xs:element>
      <xs:element name="val" type="xs:double">
      </xs:element>
      <xs:element name="err" type="xs:double">
      </xs:element>
      <xs:element name="glossary" type="xs:anyURI">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="observableNameType">
    <xs:annotation>
      <xs:documentation>Enumeration of possible observable names</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="ampi">
      </xs:enumeration>
      <xs:enumeration value="amrho">
      </xs:enumeration>
      <xs:enumeration value="mpi/mrho">
      </xs:enumeration>
      <xs:enumeration value="r0/a">
      </xs:enumeration>
      <xs:enumeration value="r1/a">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="physics">
    <xs:annotation>
      <xs:documentation>Contains the physics information</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="size">
        </xs:element>
        <xs:element ref="action">
        </xs:element>
        <xs:element ref="observables" minOccurs="0">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="markovChain">
    <xs:annotation>
      <xs:documentation>Also known as ensemble XML. below this level the XML is static across an ensemble of data.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="markovChainURI">
        </xs:element>
        <xs:element ref="management">
        </xs:element>
        <xs:element ref="physics">
        </xs:element>
        <xs:element name="algorithm" type="algorithmType">
        </xs:element>
        <xs:element name="cLibrary" minOccurs="0" type="xs:anyURI">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="data" type="xs:anyURI">
    <xs:annotation>
      <xs:documentation>The Logical file name on the grid of the data file itself</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="markovChainURI" type="xs:anyURI">
    <xs:annotation>
      <xs:documentation>The URI which identifies the of the ensemble</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="algorithmType">
    <xs:annotation>
      <xs:documentation>The type for algorithms</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="name" type="xs:Name">
      </xs:element>
      <xs:element name="glossary" type="xs:anyURI">
      </xs:element>
      <xs:element name="reference" type="xs:string">
      </xs:element>
      <xs:element name="exact" type="xs:boolean">
      </xs:element>
      <xs:element name="parameters" minOccurs="0">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="parameterType">
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax">
      </xs:any>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="parameterType">
    <xs:annotation>
      <xs:documentation>Contains a name and a value</xs:documentation>
    </xs:annotation>
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="name" type="xs:Name">
      </xs:element>
      <xs:element name="value" type="xs:anySimpleType">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="management">
    <xs:annotation>
      <xs:documentation>Contains information about who, what, and when the data was done</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="revisions" minOccurs="0" type="xs:nonNegativeInteger">
          <xs:annotation>
            <xs:documentation>The number of times the entry for this ensemble has been revised</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="collaboration" type="xs:normalizedString">
        </xs:element>
        <xs:element name="projectName" type="xs:normalizedString">
        </xs:element>
        <xs:element name="ensembleLabel" minOccurs="0" type="xs:normalizedString">
          <xs:annotation>
            <xs:documentation>An optional label to identify this ensemble or to categorize several ensembles</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="publishedAlias" minOccurs="0" type="xs:normalizedString">
          <xs:annotation>
            <xs:documentation>An optional short text string to identify this ensemble by collaboration dependent notations, such as a list of name and value pairs of coupling parameters in publications</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="reference" minOccurs="0" type="xs:normalizedString">
        </xs:element>
        <xs:element name="archiveHistory">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="elem" minOccurs="0" maxOccurs="unbounded" type="managementActionType">
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="replicate" minOccurs="0" type="permissionType">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:annotation>
  </xs:annotation>
  <xs:complexType name="managementActionType">
    <xs:annotation>
      <xs:documentation>Management action such as add to the catalogue, withdraw from the catalogue</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="revision" minOccurs="0" type="xs:nonNegativeInteger">
      </xs:element>
      <xs:element name="revisionAction" type="revisionActionType">
      </xs:element>
      <xs:element name="participant">
        <xs:annotation>
          <xs:documentation>Who made this revision</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="name" type="xs:string">
            </xs:element>
            <xs:element name="institution" type="xs:string">
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="date" type="xs:dateTime">
      </xs:element>
      <xs:element name="comment" minOccurs="0" type="xs:string">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="revisionActionType">
    <xs:annotation>
      <xs:documentation>An enumeration of revision actions</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="add">
        <xs:annotation>
          <xs:documentation>add a new ensemble</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="replace">
        <xs:annotation>
          <xs:documentation>replace ensemble document</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="remove">
        <xs:annotation>
          <xs:documentation>remove ensemble</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="negativeCouplingType">
    <xs:restriction base="couplingType">
      <xs:maxExclusive value="0.0">
      </xs:maxExclusive>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="topologyFixing">
    <xs:annotation>
      <xs:documentation>Contains the method to fix topology and the value of the topological charge</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="generalDeterminant" minOccurs="0">
        </xs:element>
        <xs:element name="charge" type="xs:integer">
          <xs:annotation>
            <xs:documentation>the value of the polological charge (integer)</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="generalDeterminantType" abstract="true">
    <xs:annotation>
      <xs:documentation>The base type for defining a determinant to fix topology.</xs:documentation>
    </xs:annotation>
  </xs:complexType>
  <xs:element name="generalDeterminant" type="generalDeterminantType" abstract="true">
    <xs:annotation>
      <xs:documentation>an abstract element for determinants</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonDeterminantType">
    <xs:annotation>
      <xs:documentation>wilson determinant type for topology fixing.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="generalDeterminantType">
        <xs:sequence>
          <xs:element name="kernelMass" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="generalDeterminant" name="wilsonDeterminant" type="wilsonDeterminantType">
    <xs:annotation>
      <xs:documentation>wilson determinant det(H_W(-m0)^2) for topology fixing with the Hermitian Wilson-Dirac kernel H_W, where m0 is the kernelMass.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="wilsonTmGhostDeterminantType">
    <xs:annotation>
      <xs:documentation>wilson twisted ghost determinant type for topology fixing.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="wilsonDeterminantType">
        <xs:sequence>
          <xs:element name="twistedMass" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="wilsonDeterminant" name="wilsonTmGhostDeterminant" type="wilsonTmGhostDeterminantType">
    <xs:annotation>
      <xs:documentation>wilson plus twisted ghost determinant det(H_W(-m0)^2/(H_W(-m0)^2+mu^2)) for topology fixing with the Hermitian Wilson-Dirac kernel H_W, where m0 is the kernelMass and mu is the twistedMass.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="linkSmearing">
    <xs:annotation>
      <xs:documentation>link smearing</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="linkBlocking">
        </xs:element>
        <xs:element ref="linkUnitarization">
        </xs:element>
        <xs:element name="numSmear" type="xs:integer">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="linkBlockingType" abstract="true">
    <xs:annotation>
      <xs:documentation>The base type for defining a link blocking scheme, being the a sum of link paths with common endpoints (those of the original link). The paths are weighted by one or more coefficients.</xs:documentation>
    </xs:annotation>
  </xs:complexType>
  <xs:element name="linkBlocking" type="linkBlockingType" abstract="true">
  </xs:element>
  <xs:complexType name="apeLinkBlockingType">
    <xs:annotation>
      <xs:documentation>Block the links using an isotropic APE blocking method. rho0 is the coefficient of the original link. rho1 is the coefficient in front of the sum of six simple staples. rho0 = 0, rho0 = 1 and rho0 = (1 - 6 rho1) are typical examples. Reference: Phys. Lett. B192 163, 1987.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="linkBlockingType">
        <xs:sequence>
          <xs:element name="rho0" type="couplingType">
          </xs:element>
          <xs:element name="rho1" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="linkBlocking" name="apeLinkBlocking" type="apeLinkBlockingType">
  </xs:element>
  <xs:complexType name="anisotropicApeLinkBlockingType">
    <xs:annotation>
      <xs:documentation>Block the links using an anisotropic APE blocking method. rho0S, rho1SS and rho1ST are coefficients for blocking links in spatial direction: rho0S is the coefficient of the link, rho1SS is that in front of the sum of 4 space-space staples, rho1ST is that in front of the sum of 2 space-time staples. rho0T and rho1TS are coefficients for blocking links in temporal direction: rho0T is the coefficient of the link, rho1TS is the coefficient in front of the sum of 6 space-time staples. Reference: Phys. Lett. B192 163, 1987 and QCDml documentation.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="linkBlockingType">
        <xs:sequence>
          <xs:element name="rho0S" type="couplingType">
          </xs:element>
          <xs:element name="rho0T" type="couplingType">
          </xs:element>
          <xs:element name="rho1SS" type="couplingType">
          </xs:element>
          <xs:element name="rho1ST" type="couplingType">
          </xs:element>
          <xs:element name="rho1TS" type="couplingType">
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="linkBlocking" name="anisotropicApeLinkBlocking" type="anisotropicApeLinkBlockingType">
  </xs:element>
  <xs:complexType name="linkUnitarizationType" abstract="true">
    <xs:annotation>
      <xs:documentation>The base type for defining a link unitarization method. The method should take a matrix and construct a special unitary matrix.</xs:documentation>
    </xs:annotation>
  </xs:complexType>
  <xs:element name="linkUnitarization" type="linkUnitarizationType" abstract="true">
  </xs:element>
  <xs:complexType name="stoutLinkUnitarizationType">
    <xs:annotation>
      <xs:documentation>Unitarise the blocked links with the stout link construction. Reference: Phys.Rev.D69:054501,2004, hep-lat/0311018.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="linkUnitarizationType"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="linkUnitarization" name="stoutLinkUnitarization" type="stoutLinkUnitarizationType">
  </xs:element>
  <xs:complexType name="invSqRootLinkUnitarizationType">
    <xs:annotation>
      <xs:documentation>Unitarise the blocked links by multiplying the inverse square root of the matrices, then factor out the determinant. Reference: Phys.Rev.D70:014502,2004, hep-lat/0403019.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="linkUnitarizationType">
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element substitutionGroup="linkUnitarization" name="invSqRootLinkUnitarization" type="invSqRootLinkUnitarizationType">
  </xs:element>
  <xs:simpleType name="permissionType">
    <xs:annotation>
      <xs:documentation>Enumeration of possible permisions</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="allow">
      </xs:enumeration>
      <xs:enumeration value="deny">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>