<?xml version="1.0" encoding="UTF-8"?>

<xs:schema
  version         = "1.0"
  xmlns:xs        = "http://www.w3.org/2001/XMLSchema"
  targetNamespace = "http://www.nrao.edu/namespaces/sss"
  xmlns:sss       = "http://www.nrao.edu/namespaces/sss"
  xmlns:widar     = "http://www.nrc.ca/namespaces/widar"
  elementFormDefault = "qualified"> 
 
  <xs:include schemaLocation="../../util/1.38-DEV/commons.xsd"/>
  <xs:include schemaLocation="../../util/1.38-DEV/measure.xsd"/>
  <xs:include schemaLocation="../../util/1.38-DEV/astronomy.xsd"/>
  <xs:include schemaLocation="../../util/1.38-DEV/electronics.xsd"/>
 
  <xs:import schemaLocation="../../../widar/3.22.1/vci/vciRequest.xsd" namespace="http://www.nrc.ca/namespaces/widar"/>
  <xs:import schemaLocation="../../../widar/3.22.1/vci/vciCommon.xsd"  namespace="http://www.nrc.ca/namespaces/widar"/>
  <xs:import schemaLocation="../../../widar/3.22.1/widarCommon.xsd"    namespace="http://www.nrc.ca/namespaces/widar"/>
     
  <!-- ================================================== -->
  <!-- ||||||||||||||||  ELEMENTS  |||||||||||||||||||||| -->
  <!-- ================================================== -->
    
  <xs:element name="resourceCatalog">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="notes"             type="sss:noteList"             minOccurs="0"/>
        <xs:element name="userDefinedValues" type="sss:userDefinedValueList" minOccurs="0"/>
        <xs:element name="userPriorities"    type="sss:userPriorityList"     minOccurs="0"/>
        <xs:group                             ref="sss:userTrackable"/> 
        <xs:element name="entries"           type="sss:resourceCatalogEntryList"/>
        <xs:element name="resourceGroups"    type="sss:resourceGroupList"/>
      </xs:sequence>
      <xs:attribute name="id"            type="xs:long"   use="required"/>
      <xs:attribute name="name"          type="xs:string" use="required"/>
      <xs:attribute name="owner"         type="xs:long"   use="optional"/>
      <xs:attribute name="ownerPriority" type="xs:int"    use="optional" default="0"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="resource" type="sss:resource"/>

  <xs:element name="resourceSpecification" type="sss:resourceSpecification"/>

  <xs:element name="tuningPlan">
    <xs:complexType>
      <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element name="receiver">
          <xs:complexType>
            <xs:sequence minOccurs="1" maxOccurs="unbounded">
              <xs:element name="localOscillator">
                <xs:complexType>
                  <xs:attribute name="name"      type="xs:string" use="required"/>
                  <xs:attribute name="frequency" type="xs:string" use="required"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="band" type="sss:receiverBand" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="telescope" type="sss:telescopeType" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="antennaElectronicsConfiguration"
              type="sss:antennaElectronicsConfiguration"/>

  <!-- These are here primarily for testing. -->
  <xs:element name="tuningSpecification"       type="sss:tuningSpecification"/>
  <xs:element name="spectralLineSpecification" type="sss:spectralLineSpecification"/>
  <xs:element name="evlaWidarConfiguration"    type="sss:evlaWidarCorrelatorConfiguration"/>
  <xs:element name="blbpPool"                  type="sss:baselineBoardPool"/>
  <xs:element name="widarBasebandSinglet"      type="sss:widarBasebandSinglet"/>
  <xs:element name="widarBasebandPair"         type="sss:widarBasebandPair"/>
  <xs:element name="widarSubband"              type="sss:widarSubband"/>
  <xs:element name="widarBasebandPhaseBinModel" type="sss:widarBasebandPhaseBinModel"/>

  <!-- ================================================== -->
  <!-- ||||||||||||||||  COMPLEX TYPES  ||||||||||||||||| -->
  <!-- ================================================== -->
    
  <xs:complexType name="resourceGroupList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="resourceGroup" type="sss:resourceGroup"/>
    </xs:sequence>
  </xs:complexType>
    
  <xs:complexType name="resourceGroup">
    <xs:sequence>
      <xs:element name="notes"             type="sss:noteList"             minOccurs="0"/>
      <xs:element name="userDefinedValues" type="sss:userDefinedValueList" minOccurs="0"/>

      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="member" type="xs:IDREF"/>
      </xs:sequence>
    </xs:sequence>
    <xs:attribute name="id"   type="xs:long"   use="required"/>
    <xs:attribute name="name" type="xs:string" use="required"/>
  </xs:complexType>

  <xs:complexType name="resourceCatalogEntryList">  <!-- not sure why this is named like this -->
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="resource" type="sss:resource"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="resourceList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="resource" type="sss:resource"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="resource">
    <xs:sequence>
      <xs:group ref="sss:userTrackable"/> 
      <xs:element name="userDefinedValues"       type="sss:userDefinedValueList"  minOccurs="0"/> 
      <xs:element name="notes"                   type="sss:noteList"              minOccurs="0"/>
      <xs:element name="scienceSpecification"    type="sss:resourceSpecification" minOccurs="0"/>
      <xs:element name="telescope"               type="sss:telescopeType"/>
      <xs:element name="evlaAntennaElectronics"  type="sss:evlaAntennaElectronics"/>
      <xs:element name="backendElectronics"      type="sss:backendElectronics"/>
    </xs:sequence>
    <xs:attribute name="id"    type="xs:int"         use="required"/>
    <xs:attribute name="xmlId" type="xs:ID"          use="required"/>
    <xs:attribute name="name"  type="xs:string" use="required"/>
    <xs:attribute name="basebandsSet"  type="xs:boolean"/>
    <xs:attribute name="algorithmUsed"  type="xs:boolean"/>
    <xs:attribute name="algorithmBbOption"  type="xs:boolean"/>
    <xs:attribute name="algorithmRbOption"  type="xs:boolean"/>
    <xs:attribute name="manualUsed"  type="xs:boolean"/>
    <xs:attribute name="resourceType"  type="xs:string"/>
    <xs:attribute name="displayFrame"  type="xs:string"/>
  </xs:complexType>

      <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
      <!-- |||||||||||  Science View  ||||||||||| -->
      <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    
  <xs:complexType name="resourceSpecification">
    <xs:all>
      <xs:element name="skyFrequencySpecs" type="sss:skyFreqSpecList"/>
      <xs:element name="spectralLineSpecs" type="sss:spectralLineSpecList"/>
      <xs:element name="pulsarSpecs"       type="sss:pulsarSpecList"/>
    </xs:all>
  </xs:complexType>
     
  <xs:complexType name="skyFreqSpecList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="skyFrequencySpecification" type="sss:skyFrequencySpecification"/>
    </xs:sequence>
  </xs:complexType>
    
  <xs:complexType name="spectralLineSpecList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="spectralLineSpecification" type="sss:spectralLineSpecification"/>
    </xs:sequence>
  </xs:complexType>
    
  <xs:complexType name="skyFrequencySpecification">
    <xs:all>
      <xs:element name="frequencyRange"       type="sss:frequencyRange"/>
      <xs:element name="frequencyResolution"  type="sss:frequency"/>
      <xs:element name="timeResolution"       type="sss:timeDuration"/>
      <xs:element name="polarizationProducts" type="sss:polarizationList"/>
      <xs:element name="additionalSpecifications" type="sss:additionalSpecifications" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="additionalSpecifications">
    <xs:sequence>
      <xs:element name="additionalSpecification" type="sss:keyValueStringString" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="spectralLineSpecification">
    <xs:all>
      <xs:element name="line"                  type="sss:spectralLine"/>
      <xs:element name="dopplerSpecs"          type="sss:dopplerSpecification"/>
      <xs:element name="velocityBandwidth"     type="sss:linearVelocity"/>
      <xs:element name="velocityResolution"    type="sss:linearVelocity"/>
      <xs:element name="timeResolution"        type="sss:timeDuration"/>
      <xs:element name="polarizationProducts"  type="sss:polarizationList"/>
      <xs:element name="additionalSpecifications" type="sss:additionalSpecifications" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="spectralLine">
    <xs:all>
      <xs:element name="species"             type="xs:string"/>
      <xs:element name="transition"          type="xs:string"/>
      <xs:element name="sourceOfInformation" type="xs:string"/>
      <xs:element name="frequency"           type="sss:frequency"/>
      <xs:element name="uncertainty"         type="sss:frequency"/>
    </xs:all>
    <xs:attribute name="useInAlgorithm"      type="xs:boolean" use="optional"/>
  </xs:complexType>

  <xs:complexType name="pulsarSpecList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="pulsarSpecification" type="sss:pulsarSpecification"/>
    </xs:sequence>
  </xs:complexType>
    
  <xs:complexType name="pulsarSpecification">
    <xs:all>
      <!-- TODO elements -->
    </xs:all>
  </xs:complexType>

  <xs:complexType name="tuningSpecList">
    <xs:sequence minOccurs="2" maxOccurs="4">
      <xs:element name="tuningSpecification" type="sss:tuningSpecification"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="tuningSpecification">
    <xs:all>
      <xs:element name="frequency"             type="sss:frequency"/>
      <xs:element name="offset"                type="sss:frequency"            minOccurs="0"/>
      <xs:element name="offsetSign"            type="xs:int"                   minOccurs="0"/>
      <xs:element name="dopplerSpecifications" type="sss:dopplerSpecification" minOccurs="0"/>
    </xs:all>
    <xs:attribute name="name"       type="xs:string"  use="required"/>
    <xs:attribute name="freqIsRest" type="xs:boolean" use="required"/>
    <xs:attribute name="dormant"    type="xs:boolean" use="optional"   default="false"/>
  </xs:complexType>

      <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
      <!-- ||||||||||  Instrument View  ||||||||| -->
      <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
  
  <xs:complexType name="evlaPointingPosition">
    <xs:all>
      <xs:element name="longitude"         type="sss:angle"/>
      <xs:element name="latitude"          type="sss:angle"/>
    </xs:all>
    <xs:attribute name="coordinateSystem"  type="sss:celestialCoordinateSystem"  use="optional"/>
  </xs:complexType>

  <xs:complexType name="receiverList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="receiver" type="sss:receiverBand"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="evlaAntennaElectronics">
    <xs:choice>
      <xs:sequence>
        <xs:element name="receiver"             type="sss:receiverBand"/>
        <xs:element name="timeOfLastTuning"     type="xs:dateTime"           minOccurs="0"/>
        <xs:element name="tuningSpecifications" type="sss:tuningSpecList"/>
      </xs:sequence>
      <xs:element name="configuration" type="sss:antennaElectronicsConfiguration"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="antennaElectronicsConfiguration">
  
    <xs:sequence>
      <xs:element name="bands">
        <xs:simpleType>
          <xs:list itemType="sss:receiverBand"/>
        </xs:simpleType>
      </xs:element>

      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="oscillator">
          <xs:complexType>
            <xs:attribute name="name"   type="xs:string" use="required"/>
            <xs:attribute name="tuning" type="xs:string" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>

      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="sampler">
          <xs:complexType>
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="bitsPerSample"         use="required">
              <xs:simpleType>
                <xs:restriction base="xs:int">
                  <!-- These are EVLA-specific values right now.
                       We can open this up for other telescopes when appropriate. -->
                  <xs:enumeration value="3"/>
                  <xs:enumeration value="8"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:sequence>

      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="switch">
          <xs:complexType>
            <xs:attribute name="name"       type="xs:string" use="required"/>
            <xs:attribute name="inputPole"  type="xs:string" use="optional"/>
            <xs:attribute name="outputPole" type="xs:string" use="optional"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>

      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="transferSwitch">
          <xs:complexType>
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="orientation"           use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="clockwise"/>
                  <xs:enumeration value="counterclockwise"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:sequence>
    
    <xs:attribute name="telescope" type="sss:telescopeType" use="required"/>
  </xs:complexType>
  
  <xs:complexType name="backendElectronics">
    <xs:choice>
      <xs:element name="vlaConfiguration"       type="sss:vlaCorrelatorConfiguration"/>
      <xs:element name="evlaWidarConfiguration" type="sss:evlaWidarCorrelatorConfiguration"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="vlaCorrelatorConfiguration">
    <xs:all>
      <xs:element name="basebands"                type="sss:vlaBasebandList" minOccurs="0"/>
      <xs:element name="centralFrequencyAC"       type="sss:frequency"/>
      <xs:element name="centralFrequencyBD"       type="sss:frequency"/>
      <xs:element name="centralFrequencyACIsSkyFrequency" type="xs:boolean"/>
      <xs:element name="centralFrequencyBDIsSkyFrequency" type="xs:boolean"/>
      <xs:element name="integrationTimeInSeconds" type="xs:decimal"/>
      <xs:element name="correlatorMode"           type="sss:vlaCorrelatorMode"/>
      <xs:element name="bwCodeIfA"                type="sss:vlaBandwidthCode"/>
      <xs:element name="bwCodeIfB"                type="sss:vlaBandwidthCode"/>
      <xs:element name="bwCodeIfC"                type="sss:vlaBandwidthCode"/>
      <xs:element name="bwCodeIfD"                type="sss:vlaBandwidthCode"/>
      <xs:element name="spectralProcessing">
        <xs:simpleType>
          <xs:list itemType="sss:vlaProcessingType"/>
        </xs:simpleType>
      </xs:element>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="evlaWidarCorrelatorConfiguration">
    <xs:sequence>  
      <xs:element name="pulsar" minOccurs="0" maxOccurs="1">
          <xs:complexType>
              <xs:all>
                <xs:element name="pulsarConfiguration" type="sss:pulsarModeType"/>  
                <xs:element name="constPeriod" type="xs:double"/>
                <xs:element name="parFile" type="xs:boolean"/>     
                <xs:element name="pulsarPhaseBinning" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:all>          
                          <xs:element name="numBins" type="xs:int"/>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
                <xs:element name="pulsarObserving" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:all>
                          <xs:element name="channelCount" type="xs:int"/>  
                          <xs:element name="polarizationProductsSavedCount" type="xs:int"/>
                          <xs:element name="pulsePhaseBinCount" type="xs:int"/>
                          <xs:element name="foldingDumpTime" type="xs:double"/> 
                          <xs:element name="timeResolution" type="xs:double"/> 
                          <xs:element name="outputBitCount" type="xs:int"/>  
                          <xs:element name="pulsarObservingMode" type="sss:pulsarObservingMode"/>            
                        </xs:all>
                    </xs:complexType>
                </xs:element> 
                </xs:all>
          </xs:complexType>
      </xs:element>     
      <xs:element name="basebands"         type="sss:widarBasebandList" minOccurs="0"/>
      <xs:element name="maxAntennaCount"   type="xs:int"/>
      <xs:element name="vdifRecording" type="xs:boolean" minOccurs="0"/>   
      <xs:element name="baselineBoardPool" type="sss:baselineBoardPool"/>
    </xs:sequence>
  </xs:complexType>
                    
          <!-- ::::::::::::::::::::::::::::::::::::: -->
          <!-- ::::::::::  Basebands       ::::::::: -->
          <!-- ::::::::::::::::::::::::::::::::::::: -->
                    
  <xs:complexType name="vlaBasebandList">
    <xs:sequence minOccurs="1" maxOccurs="2">
      <xs:element name="vlaBasebandPair" type="sss:vlaBasebandPair"/>
    </xs:sequence>
  </xs:complexType>
                    
  <xs:complexType name="widarBasebandList">
    <xs:sequence minOccurs="1" maxOccurs="8">
      <xs:choice>
        <xs:element name="widarBasebandSinglet" type="sss:widarBasebandSinglet"/>
        <xs:element name="widarBasebandPair"    type="sss:widarBasebandPair"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

 
  <xs:complexType name="widarBasebandPhaseBinModel">
      <xs:sequence>
          <xs:element name="widarBasebandModelCff"  maxOccurs="20">
            <xs:complexType>        
                <xs:attribute name="index" type="xs:int"/>
                <xs:attribute name="cff" type="xs:double"/>
            </xs:complexType>
          </xs:element>
      </xs:sequence>    
      <xs:attribute name="numCff" type="xs:int"/>
      <xs:attribute name="phaseRef" type="xs:double" />
      <xs:attribute name="freqRef" type="xs:double"/>
      <xs:attribute name="tMid" type="xs:double" />
      <xs:attribute name="tStart" type="xs:double" />
      <xs:attribute name="tEnd" type="xs:double" />
  </xs:complexType>

  <xs:group name="correlatorBaseband">
    <xs:sequence>
      <xs:element name="bandwidth" type="sss:frequency"/>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="vlaBasebandPair">
    <xs:sequence>
      <xs:group                        ref="sss:correlatorBaseband"/>
      <xs:element name="inputSignalA" type="sss:digitalSignal"/>
      <xs:element name="inputSignalB" type="sss:digitalSignal"/>
    </xs:sequence>
  </xs:complexType>

  <xs:group name="widarBasebandCommon">
    <xs:sequence>
      <xs:element name="delayModelLifespan"       type="sss:timeDuration" minOccurs="0"/>
      <!--<xs:element  ref="widar:pulsarGating"                               minOccurs="0"/> --> 
      <xs:element name="singlePhaseCenter"        type="xs:boolean"/>
      <xs:element name="noWbcProducts" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="binMaxHwIntegTime" type="xs:float" minOccurs="0" maxOccurs="1"/>
      <xs:element  ref="widar:wideBandCorrelator"                         minOccurs="0"/>
      <xs:element name="widarBasebandPhaseBinModel" type="sss:widarBasebandPhaseBinModel" minOccurs="0" maxOccurs="2000"/>
      <xs:element name="subbands"                 type="sss:widarSubbandList">
         <xs:unique name="subbandIDs">
           <xs:selector xpath="sss:widarSubband"/>
           <xs:field    xpath="@sbId"/>
         </xs:unique>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:complexType name="widarBasebandPair">
    <xs:sequence>
      <xs:group                        ref="sss:correlatorBaseband"/>
      <xs:group                        ref="sss:widarBasebandCommon"/>
      <xs:element name="inputSignalA" type="sss:digitalSignal"/>
      <xs:element name="inputSignalB" type="sss:digitalSignal"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="widarBasebandSinglet">
    <xs:sequence>
      <xs:group                        ref="sss:correlatorBaseband"/>
      <xs:group                        ref="sss:widarBasebandCommon"/>
      <xs:element name="inputSignal"  type="sss:digitalSignal"/>
    </xs:sequence>
  </xs:complexType>
                    
          <!-- ::::::::::::::::::::::::::::::::::::: -->
          <!-- ::::::::::  Subbands        ::::::::: -->
          <!-- ::::::::::::::::::::::::::::::::::::: -->
                    
  <xs:complexType name="widarSubbandList">
    <xs:sequence minOccurs="0" maxOccurs="32">
      <xs:element name="widarSubband" type="sss:widarSubband"/>
    </xs:sequence>
  </xs:complexType>
<!--
  <xs:group name="correlatorSubband">
    <xs:sequence>
      <xs:element name="frequencyRange"     type="sss:frequencyRange"/>
    </xs:sequence>
  </xs:group>
-->
  <xs:complexType name="widarSubband">
    <xs:sequence>
 <!-- <xs:group    ref="sss:correlatorSubband"/> -->
      <xs:element name="frequencyRange"      type="sss:frequencyRange"/>
      <xs:element name="lineComments"            type="xs:string" minOccurs="0"/>
      <xs:element name="comments"            type="xs:string" minOccurs="0"/>
      <xs:element name="frequencyAveraging" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="summedArrayMode" type="sss:summedArrayModeType" minOccurs="0" maxOccurs="1"/>
      <xs:element  ref="widar:radarMode"                      minOccurs="0"/> 
      <xs:element  ref="widar:summedArray"                    minOccurs="0" maxOccurs="2"/>
      <xs:element  ref="widar:toneExtraction"                 minOccurs="0"/>
      <xs:element name="correlationProductGroups" type="sss:widarCorrelationProductGroupList" minOccurs="0"/>
      
    </xs:sequence>
    <xs:attribute name="sbId"                type="sss:sbIdType"   use="required"/> 
    <xs:attribute name="name"                type="xs:string" use="optional"/>
    <xs:attribute name="requantizationBits"  type="xs:int"         use="required"/>
    <xs:attribute name="priority"            type="xs:int"         use="required"/>
    <xs:attribute name="useStage2Mixer"      type="xs:boolean"     use="optional"/>
    <xs:attribute name="mixerPhaseErrorCorr" type="xs:boolean"     use="optional"/>
    <xs:attribute name="fringeRotateInFilterChip" type="xs:boolean" use="optional"/>
    <xs:attribute name="rfiBlankingDurationStr" type="xs:string" use="optional"/> 
    <xs:attribute name="rfiDetectionLevel"   type="xs:double"    use="optional"/> 
    
    <xs:attribute name="interFrameDelay"     type="xs:int"         use="optional"/>
    <xs:attribute name="frameSchedulingAlgorithm" type="xs:string" use="optional"/>
    <xs:attribute name="randomizeDelay"      type="xs:boolean"     use="optional"/>
    <xs:attribute name="phaseBinning"        type="xs:boolean"     use="optional"/>
    <xs:attribute name="binningOffset"       type="xs:double"      use="optional"/>
    <xs:attribute name="gatingPhase"         type="xs:int"         use="optional"/>
    <xs:attribute name="pulsarGatingPhase"   type="xs:double"         use="optional"/>
    <xs:attribute name="signalToNoiseRatio"  type="xs:int"         use="optional"/>
    <xs:attribute name="resistBasebandShift" type="xs:boolean"     use="optional"/>
    <xs:attribute name="fixedChannels" type="xs:boolean" use="optional" default="false"/>
  </xs:complexType>
     
 
                   
  <xs:simpleType name="sbIdType">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="31"/>
    </xs:restriction>
  </xs:simpleType>
                    
          <!-- ::::::::::::::::::::::::::::::::::::::::::::::::: -->
          <!-- ::::::::::  Correlation Product Groups  ::::::::: -->
          <!-- ::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!--
  <xs:group name="correlationProductGroup">
    <xs:sequence>
    </xs:sequence>
  </xs:group>
-->
  <xs:complexType name="widarCorrelationProductGroup">
    <xs:all>
 <!-- <xs:group                               ref="sss:correlationProductGroup"/> -->
      <xs:element name="correlationProducts" type="sss:correlationProductList"/>
      <xs:element name="frequencyAveraging" type="xs:string" minOccurs="0" maxOccurs="1" />
      <xs:element                             ref="widar:autoCorrSubset"   minOccurs="0"/>
      <xs:element name="cbeProcessing"   type="sss:widarCbeProcessing" minOccurs="0"/>
      <xs:element name="integrationTime"     type="sss:widarIntegrationTime"/>
      <xs:element                             ref="widar:productPacking"/>
      <xs:element                             ref="widar:stationPacking"/>
    </xs:all>
    <xs:attribute name="uuid" type="xs:ID" use="required"/>
   
  </xs:complexType>

  <xs:complexType name="widarCorrelationProductGroupList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="group" type="sss:widarCorrelationProductGroup"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="widarCbeProcessing">
      <xs:all>
         <xs:element name="averageFrequency" type="sss:widarCbeAverageFrequency" minOccurs="0" maxOccurs="1"/>
         <xs:element name="window" type="sss:widarCbeWindow" minOccurs="0" maxOccurs="1"/>
      </xs:all>
      <xs:attribute name="nSpectralWindowChannels" type="xs:int" use="optional"/>
      <xs:attribute name="disableVysStream" type="xs:boolean" use="optional"/>
      <xs:attribute name="integrationStyle" type="xs:string" use="optional"/>
  </xs:complexType>  
  <xs:complexType name="widarCbeAverageFrequency">
      <xs:attribute name="algorithm" type="xs:string"/>
      <xs:attribute name="span" type="xs:int"/>
  </xs:complexType>
  <xs:complexType name="widarCbeWindow">
      <xs:attribute name="algorithm" type="xs:string"/>
      <xs:attribute name="width" type="xs:int" use="optional"/>
  </xs:complexType>
  
  <xs:complexType name="widarIntegrationTime">
    <xs:all>
      <xs:element name="minimumHardwareIntegrationTime" type="sss:timeDuration" minOccurs="1" maxOccurs="1"/>
      <xs:element name="burstBlankDuration"             type="sss:timeDuration" minOccurs="0" maxOccurs="1"/>
      <xs:element name="burstDuration"                  type="sss:timeDuration" minOccurs="0" maxOccurs="1"/>
      <xs:element name="pauseBetweenBursts"             type="sss:timeDuration" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute name="recirculationFactor" type="widar:RecirculationFactorType" use="optional"/>
    <xs:attribute name="recirculationPhaseType" type="xs:string" use="optional"/>
    <xs:attribute name="ccMult"              type="sss:positiveInt"               use="required"/>
    <xs:attribute name="ltaMult"             type="sss:positiveInt"               use="required"/>
    <xs:attribute name="cbeMult"             type="sss:positiveInt"               use="required"/>
    <xs:attribute name="firstBurstOffset"    type="sss:positiveInt"               use="optional"/>
    <xs:attribute name="numRollingBursts"    type="sss:positiveInt"               use="optional"/>
  </xs:complexType>
                    
          <!-- ::::::::::::::::::::::::::::::::::::::::::: -->
          <!-- ::::::::::  Correlation Products  ::::::::: -->
          <!-- ::::::::::::::::::::::::::::::::::::::::::: -->

  <xs:complexType name="correlationProduct">
    <xs:attribute name="correlation" type="sss:stokesParameter" use="required"/>
    <xs:attribute name="channels"    type="xs:int"              use="required"/>
  </xs:complexType>

  <xs:complexType name="correlationProductList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="product" type="sss:correlationProduct"/>
    </xs:sequence>
   
  </xs:complexType>
                    
          <!-- ::::::::::::::::::::::::::::::::::::::::::: -->
          <!-- ::::::::::  Baseline Board Pool  :::::::::: -->
          <!-- ::::::::::::::::::::::::::::::::::::::::::: -->

  <xs:complexType name="baselineBoardPool">
    <xs:sequence minOccurs="0" maxOccurs="64">
      <xs:element name="owner" type="sss:blbpOwner"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="blbpOwner">
    <xs:attribute name="id"        type="xs:string"        use="required"/>
    <xs:attribute name="blbpCount" type="sss:blbpQuantity" use="required"/>
  </xs:complexType>
  
  <xs:simpleType name="blbpQuantity">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="64"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- ================================================== -->
  <!-- ||||||||||||||||  ENUMERATIONS  |||||||||||||||||| -->
  <!-- ================================================== -->

  <xs:simpleType name="antennaIdType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ANTENNA_ID"/>
      <xs:enumeration value="PAD_ID"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="antennaSelectionMethod">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ALL"/>
      <xs:enumeration value="LIST"/>
      <xs:enumeration value="MINIMUM_NUMBER"/>
      <xs:enumeration value="MINIMUM_NUMBER_SHORTEST_BASELINES"/>
      <xs:enumeration value="MINIMUM_NUMBER_LONGEST_BASELINES"/>
      <xs:enumeration value="MINIMUM_NUMBER_EVEN_DISTRIBUTION"/>
    </xs:restriction>
  </xs:simpleType>
      
  <xs:simpleType name="telescopeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="GBT"/>
      <xs:enumeration value="VLA"/>
      <xs:enumeration value="EVLA"/>
      <xs:enumeration value="VLBA"/>
      <xs:enumeration value="ALMA"/>
      <xs:enumeration value="OTHER"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="pulsarModeType">
      <xs:restriction base="xs:string">
          <xs:enumeration value="NONE"/>
          <xs:enumeration value="PHASE_BINNING"/>
          <xs:enumeration value="OBSERVING" />
      </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="pulsarObservingMode">
    <xs:restriction base="xs:string">
      <!-- <xs:enumeration value="NONE"/> -->
      <xs:enumeration value="FOLD"/>
      <xs:enumeration value="SEARCH"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="telescopeConfiguration">
    <xs:restriction base="xs:string">
      <xs:enumeration value="VLA_A"/>
      <xs:enumeration value="VLA_B"/>
      <xs:enumeration value="VLA_C"/>
      <xs:enumeration value="VLA_D"/>

      <xs:enumeration value="VLA_AtoD"/>
      <xs:enumeration value="VLA_BtoA"/>
      <xs:enumeration value="VLA_CtoB"/>
      <xs:enumeration value="VLA_DtoC"/>
      <xs:enumeration value="ANY"/>

      <!-- Older hybrids and hybrid-moves. -->
      <xs:enumeration value="VLA_BnA"/>
      <xs:enumeration value="VLA_CnB"/>
      <xs:enumeration value="VLA_DnC"/>
      <xs:enumeration value="VLA_DtoDnC"/>
      <xs:enumeration value="VLA_DnCtoC"/>
      <xs:enumeration value="VLA_CtoCnB"/>
      <xs:enumeration value="VLA_CnBtoB"/>
      <xs:enumeration value="VLA_BtoBnA"/>
      <xs:enumeration value="VLA_BnAtoA"/>

      <!-- Older "move" configurations.  -->      
      <xs:enumeration value="VLA_AtoBnA"/>
      <xs:enumeration value="VLA_BnAtoB"/>
      <xs:enumeration value="VLA_BtoCnB"/>
      <xs:enumeration value="VLA_CnBtoC"/>
      <xs:enumeration value="VLA_CtoDnC"/>
      <xs:enumeration value="VLA_DnCtoD"/>
      <xs:enumeration value="VLA_DtoA"/>
      <xs:enumeration value="VLA_AtoB"/>
      <xs:enumeration value="VLA_BtoC"/>
      <xs:enumeration value="VLA_CtoD"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="receiverBand">
    <xs:restriction base="xs:string">
      <xs:enumeration value="EVLA_L"/>
      <xs:enumeration value="EVLA_S"/>
      <xs:enumeration value="EVLA_C"/>
      <xs:enumeration value="EVLA_X"/>
      <xs:enumeration value="EVLA_Ku"/>
      <xs:enumeration value="EVLA_K"/>
      <xs:enumeration value="EVLA_Ka"/>
      <xs:enumeration value="EVLA_Q"/>
      <xs:enumeration value="EVLA_4"/>
      <xs:enumeration value="EVLA_P"/>
      <xs:enumeration value="EVLA_4_P"/>

      <xs:enumeration value="GBT_PF1_342"/>
      <xs:enumeration value="GBT_PF1_450"/>
      <xs:enumeration value="GBT_PF1_600"/>
      <xs:enumeration value="GBT_PF1_800"/>
      <xs:enumeration value="GBT_PF2"/>
      <xs:enumeration value="GBT_L"/>
      <xs:enumeration value="GBT_S"/>
      <xs:enumeration value="GBT_C"/>
      <xs:enumeration value="GBT_X"/>
      <xs:enumeration value="GBT_Ku"/>
      <xs:enumeration value="GBT_K"/>
      <xs:enumeration value="GBT_Q"/>

      <xs:enumeration value="VLA_4"/>
      <xs:enumeration value="VLA_P"/>
      <xs:enumeration value="VLA_L"/>
      <xs:enumeration value="VLA_C"/>
      <xs:enumeration value="VLA_X"/>
      <xs:enumeration value="VLA_U"/>
      <xs:enumeration value="VLA_K"/>
      <xs:enumeration value="VLA_Q"/>
    </xs:restriction>
  </xs:simpleType>

      <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
      <!-- ||||||||||  VLA Specific  ||||||||| -->
      <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

  <xs:simpleType name="vlaBandwidthCode">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ZERO"/>
      <xs:enumeration value="ONE"/>
      <xs:enumeration value="TWO"/>
      <xs:enumeration value="THREE"/>
      <xs:enumeration value="FOUR"/>
      <xs:enumeration value="FIVE"/>
      <xs:enumeration value="SIX"/>
      <xs:enumeration value="SEVEN"/>
      <xs:enumeration value="EIGHT"/>
      <xs:enumeration value="NINE"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="vlaCorrelatorMode">
    <xs:restriction base="xs:string">
      <xs:enumeration value="CONTINUUM"/>
      <xs:enumeration value="ONE_A"/>
      <xs:enumeration value="ONE_B"/>
      <xs:enumeration value="ONE_C"/>
      <xs:enumeration value="ONE_D"/>
      <xs:enumeration value="TWO_AB"/>
      <xs:enumeration value="TWO_AC"/>
      <xs:enumeration value="TWO_AD"/>
      <xs:enumeration value="TWO_BC"/>
      <xs:enumeration value="TWO_BD"/>
      <xs:enumeration value="TWO_CD"/>
      <xs:enumeration value="FOUR"/>
      <xs:enumeration value="PA"/>
      <xs:enumeration value="PB"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="summedArrayModeType">
     <xs:restriction base="xs:string">
      <xs:enumeration value="MARK5_RECORDER"/>
      <xs:enumeration value="PULSAR_OBSERVING"/>
      <xs:enumeration value="NONE"/>
    </xs:restriction> 
  </xs:simpleType>
  <xs:simpleType name="vlaProcessingType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TRUE_CHANNEL_ZERO"/>
      <xs:enumeration value="HANNING"/>
      <xs:enumeration value="LAG"/>
    </xs:restriction>
  </xs:simpleType>
  
</xs:schema>
