<?xml version="1.0" encoding="UTF-8"?>
<Mission xmlns="Tethys"
       xmlns:Control="Tethys/Control"
       xmlns:Guidance="Tethys/Guidance" 
       xmlns:Trigger="Tethys/Trigger" 
       xmlns:Units="Tethys/Units"
       xmlns:Universal="Tethys/Universal"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="Tethys http://aosn.mbari.org/tethys/Xml/Tethys.xsd
                           Tethys/Control http://aosn.mbari.org/tethys/Xml/Control.xsd
                           Tethys/Guidance http://aosn.mbari.org/tethys/Xml/Guidance.xsd
                           Tethys/Trigger http://aosn.mbari.org/tethys/Xml/Trigger.xsd
                           Tethys/Units http://aosn.mbari.org/tethys/Xml/Units.xsd
                           Tethys/Universal http://aosn.mbari.org/tethys/Xml/Universal.xsd"
       Id="circle">

<!-- The following arguments are input arguments -->

    <DefineArg Name="NitrateOnPitch"><Units:degree/><Value>5</Value></DefineArg>

    <DefineArg Name="CircleLat"><Units:degree/><Value>36.83496</Value></DefineArg>

    <DefineArg Name="CircleLon"><Units:degree/><Value>-121.90175</Value></DefineArg>

    <DefineArg Name="CircleMaxError"><Units:meter/><Value>50</Value></DefineArg>

    <DefineArg Name="CircleRadius"><Units:kilometer/><Value>1.0</Value></DefineArg>

    <DefineArg Name="CircleTurnToPort"><True/></DefineArg>

    <DefineArg Name="YoYoMinDepth"><Units:meter/><Value>3.0</Value></DefineArg>

    <DefineArg Name="YoYoMaxDepth"><Units:meter/><Value>50.0</Value></DefineArg>

    <DefineArg Name="YoYoPitch"><Units:degree/><Value>20.0</Value></DefineArg>

    <DefineArg Name="NeedCommsTime"><Units:minute/><Value>60</Value></DefineArg>

    <DefineArg Name="Speed"><Units:meter_per_second/><Value>1</Value></DefineArg>

    <DefineArg Name="Repeat"><Units:count/><Value>1</Value></DefineArg>

    <DefineArg Name="BuoyancyNeutral"><CustomUri Uri="Config/Control.buoyancyNeutral"/></DefineArg>

<!-- The timeout -->

    <Timeout Duration="P1440M"/>

<!-- And now the mission -->

    <Guidance:AltitudeEnvelope RunIn="Parallel">
        <Setting><Guidance:AltitudeEnvelope.minAltitude/><Units:meter/><Value>7</Value></Setting>
    </Guidance:AltitudeEnvelope>

    <Guidance:DepthEnvelope RunIn="Parallel">
        <Setting><Guidance:DepthEnvelope.maxDepth/><Units:meter/><Value>65</Value></Setting>
    </Guidance:DepthEnvelope>

    <Guidance:OffshoreEnvelope RunIn="Parallel">
        <Setting><Guidance:OffshoreEnvelope.minOffshore/><Units:kilometer/><Value>2.0</Value></Setting>
        <Setting><Guidance:OffshoreEnvelope.maxOffshore/><Units:kilometer/><Value>20.0</Value></Setting>
    </Guidance:OffshoreEnvelope>

    <Insert Filename="Insert/Surface.xml" Id="SurfaceComms" />

<!-- GPS Update.  Don't go too long w/o a GPS fix. -->

    <Aggregate Id="NeedComms">

        <When><Universal:platform_pitch_angle/>
            <Gt><Units:degree/><Value>0</Value></Gt>
            <And>
            <Elapsed><Universal:time_fix/></Elapsed><Gt><Arg Name="NeedCommsTime"/></Gt></And>
            <Or>
            <Elapsed><Universal:time_fix/></Elapsed><Gt><Arg Name="NeedCommsTime"/><Add><Units:minute/><Value>10</Value></Add></Gt></Or>
        </When>

        <Call RefId="SurfaceComms"/>

    </Aggregate>

<!-- If we're executing here or below, lets' get science data! -->

    <Insert Filename="Insert/Science.xml">
        <RedefineArg Name="PeakDetectChlActive"><True/></RedefineArg>
    </Insert>

    <Aggregate Id="SampleNitrate">

        <Until><Universal:platform_pitch_angle/>
            <Lt><Arg Name="NitrateOnPitch"/></Lt>
        </Until>

        <When><Universal:platform_pitch_angle/>
            <Ge><Arg Name="NitrateOnPitch"/></Ge>
        </When>

        <ReadData>
            <Universal:mole_concentration_of_nitrate_in_sea_water/>
        </ReadData>

        <Guidance:Wait RunIn="Sequence"/>

    </Aggregate>

    <Guidance:Buoyancy RunIn="Parallel">
        <Setting><Guidance:Buoyancy.position /><Arg Name="BuoyancyNeutral"/></Setting>
    </Guidance:Buoyancy>

    <Guidance:Pitch RunIn="Parallel">
        <Setting><Guidance:Pitch.massPosition/><Units:centimeter/><Value>0</Value></Setting>
    </Guidance:Pitch>

    <Guidance:SetSpeed RunIn="Parallel">
        <Setting><Guidance:SetSpeed.speed/><Arg Name="Speed"/></Setting>
    </Guidance:SetSpeed>

    <Guidance:DepthEnvelope RunIn="Parallel">
        <Setting><Guidance:DepthEnvelope.minDepth/><Arg Name="YoYoMinDepth"/></Setting>
        <Setting><Guidance:DepthEnvelope.maxDepth/><Arg Name="YoYoMaxDepth"/></Setting>
        <Setting><Guidance:DepthEnvelope.pitch/><Arg Name="YoYoPitch"/></Setting>
    </Guidance:DepthEnvelope>

    <Guidance:YoYo RunIn="Parallel">
        <Setting><Guidance:YoYo.pitch/><Arg Name="YoYoPitch"/></Setting>
    </Guidance:YoYo>

    <Guidance:Circle RunIn="Sequence">
        <Setting><Guidance:Circle.latitude/><Arg Name="CircleLat"/></Setting>
        <Setting><Guidance:Circle.longitude/><Arg Name="CircleLon"/></Setting>
        <Setting><Guidance:Circle.maxError/><Arg Name="CircleMaxError"/></Setting>
        <Setting><Guidance:Circle.radius/><Arg Name="CircleRadius"/></Setting>
        <Setting><Guidance:Circle.turnToPort/><Arg Name="CircleTurnToPort"/></Setting>
    </Guidance:Circle>

</Mission>
