<?xml version="1.0" encoding="utf-8"?>
<Mission xmlns="Tethys" xmlns:Control="Tethys/Control" 
         xmlns:Guidance="Tethys/Guidance" 
         xmlns:Sensor="Tethys/Sensor"
         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/Guidance http://aosn.mbari.org/tethys/Xml/Guidance.xsd
                             Tethys/Sensor http://aosn.mbari.org/tethys/Xml/Sensor.xsd
                             Tethys/Units http://aosn.mbari.org/tethys/Xml/Units.xsd
                             Tethys/Universal http://aosn.mbari.org/tethys/Xml/Universal.xsd"
         Id="calibrateSparton">

    <DefineArg Name="Depth"><Units:meter /><Value>20.0</Value></DefineArg>

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

    <DefineArg Name="WaitDuration"><Units:second /><Value>20</Value></DefineArg>

    <DefineArg Name="RudderAngle"><Units:degree /><Value>10</Value></DefineArg>

    <DefineArg Name="MagNorthHeading"><Units:degree /><Value>15</Value></DefineArg>

    <DefineArg Name="MinAltitude"><Units:meter/><Value>7</Value></DefineArg>

    <DefineArg Name="MaxDepth"><Units:meter/><Value>30</Value></DefineArg>

    <DefineArg Name="MinWaterDepth"><Units:meter/><Value>15</Value></DefineArg>

    <DefineArg Name="MinOffshore"><Units:meter/><Value>2000</Value></DefineArg>

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

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

    <DefineArg Name="AutoLoops"><Units:count/><Value>3</Value></DefineArg>

    <DefineArg Name="CheckLoops"><Units:count/><Value>2</Value></DefineArg>

    <DefineArg Name="NeutralBuoyancy"><Units:cubic_centimeter/><Value>348</Value></DefineArg>

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

    <Timeout Duration="TimeoutDuration"/>

    <Guidance:AltitudeEnvelope RunIn="Parallel">
        <Setting><Guidance:AltitudeEnvelope.minAltitude /><Arg Name="MinAltitude"/></Setting>
    </Guidance:AltitudeEnvelope>

    <Guidance:DepthEnvelope RunIn="Parallel">
        <Setting><Guidance:DepthEnvelope.maxDepth /><Arg Name="MaxDepth"/></Setting>
    </Guidance:DepthEnvelope>

    <Guidance:WaterDepthEnvelope RunIn="Parallel">
        <Setting><Guidance:WaterDepthEnvelope.minWaterDepth/><Arg Name="MinWaterDepth"/></Setting>
    </Guidance:WaterDepthEnvelope>

    <Guidance:OffshoreEnvelope RunIn="Parallel">
        <Setting><Guidance:OffshoreEnvelope.minOffshore/><Arg Name="MinOffshore"/></Setting>
    </Guidance:OffshoreEnvelope>

    <ReadData Strategy="AllDevices">
        <Universal:platform_orientation/>
    </ReadData>

    <Guidance:Buoyancy RunIn="Progression">
        <Setting><Guidance:Buoyancy.position/><Arg Name="NeutralBuoyancy"/></Setting>
    </Guidance:Buoyancy>

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

    <Guidance:Pitch RunIn="Progression">
        <Setting><Guidance:Pitch.depth /><Arg Name="Depth" /></Setting>
    </Guidance:Pitch>

    <Aggregate Id="MassOff">

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

        <Aggregate Id="Initialization">

            <Guidance:Point RunIn="Progression">
                <Setting><Guidance:Point.heading /><Arg Name="MagNorthHeading" /></Setting>
            </Guidance:Point>

            <Guidance:Wait RunIn="Sequence">
                <Setting><Guidance:Wait.duration /><Arg Name="WaitDuration" /></Setting>
            </Guidance:Wait>

        </Aggregate>

        <Aggregate Id="PreCircles" Repeat = "CheckLoops">

            <Guidance:Point RunIn="Parallel">
                <Setting><Guidance:Point.rudderAngle /><Arg Name="RudderAngle" /></Setting>
            </Guidance:Point>

            <Guidance:Wait RunIn="Sequence">
                <Setting><Guidance:Wait.duration /><Arg Name="WaitDuration" /></Setting>
            </Guidance:Wait>

            <Guidance:Point RunIn="Sequence">
                <Setting><Guidance:Point.heading /><Arg Name="MagNorthHeading" /></Setting>
            </Guidance:Point>

        </Aggregate>

        <Aggregate Id="Calibration">

            <Aggregate Id="Manual Loop" Repeat="ManualLoops">

                <Guidance:Point RunIn="Parallel">
                    <Setting><Guidance:Point.rudderAngle /><Arg Name="RudderAngle" /></Setting>
                </Guidance:Point>

                <Guidance:Wait RunIn="Sequence">
                    <Setting><Guidance:Wait.duration /><Arg Name="WaitDuration" /></Setting>
                </Guidance:Wait>

                <Guidance:Point RunIn="Sequence">
                    <Setting><Guidance:Point.heading /><Arg Name="MagNorthHeading" /></Setting>
                </Guidance:Point>

            </Aggregate>

            <Guidance:Wait RunIn="Sequence">
                <Preemptive><True/></Preemptive>
                <Setting><Guidance:Wait.duration /><Units:second/><Value>0</Value></Setting>
            </Guidance:Wait>

            <Aggregate Id="Auto Loop" Repeat="AutoLoops">

                <Guidance:Point RunIn="Parallel">
                    <Setting><Guidance:Point.rudderAngle /><Arg Name="RudderAngle" /></Setting>
                </Guidance:Point>

                <Guidance:Wait RunIn="Sequence">
                    <Setting><Guidance:Wait.duration /><Arg Name="WaitDuration" /></Setting>
                </Guidance:Wait>

                <Guidance:Point RunIn="Sequence">
                    <Setting><Guidance:Point.heading /><Arg Name="MagNorthHeading" /></Setting>
                </Guidance:Point>

            </Aggregate>

            <Sensor:CalibrateSparton RunIn="Parallel"></Sensor:CalibrateSparton>

        </Aggregate>

        <Aggregate Id="PostCircles" Repeat= "CheckLoops">

            <Guidance:Point RunIn="Parallel">
                <Setting><Guidance:Point.rudderAngle /><Arg Name="RudderAngle" /></Setting>
            </Guidance:Point>

            <Guidance:Wait RunIn="Sequence">
                <Setting><Guidance:Wait.duration /><Arg Name="WaitDuration" /></Setting>
            </Guidance:Wait>

            <Guidance:Point RunIn="Sequence">
                <Setting><Guidance:Point.heading /><Arg Name="MagNorthHeading" /></Setting>
            </Guidance:Point>

        </Aggregate>

    </Aggregate>

    <Aggregate Id="PostCirclesMass" Repeat= "CheckLoops">

        <Guidance:Point RunIn="Parallel">
            <Setting><Guidance:Point.rudderAngle /><Arg Name="RudderAngle" /></Setting>
        </Guidance:Point>

        <Guidance:Wait RunIn="Sequence">
            <Setting><Guidance:Wait.duration /><Arg Name="WaitDuration" /></Setting>
        </Guidance:Wait>

        <Guidance:Point RunIn="Sequence">
            <Setting><Guidance:Point.heading /><Arg Name="MagNorthHeading" /></Setting>
        </Guidance:Point>

    </Aggregate>

</Mission>
