/** \file
 *
 *  Specifies the interface details for the PeakDetectVsDepth component in the
 *  GuidanceModule.
 *
 *  PeakDetectVsDepth.h should only be included by PeakDetectVsDepth.cpp
 *  Other classes should include PeakDetectVsDepthIF.h
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef PEAKDETECTVSDEPTHIF_H_
#define PEAKDETECTVSDEPTHIF_H_

/**
 *  Specifies the interface details for the PeakDetectVsDepth component in the
 *  GuidanceModule.
 *
 *  PeakDetectVsDepth.h should only be included by PeakDetectVsDepth.cpp
 *  Other classes should include PeakDetectVsDepthIF.h
 *
 *  \ingroup modules_guidance
 */
namespace PeakDetectVsDepthIF
{
/// Static const for component name
/// (Can be used by other components)
static const NameURI NAME( "PeakDetectVsDepth", "When change over time in depth "
                           "(or other variable identified by depthSurrogate), changes in sign, "
                           "behavior is satisfied and outputArgs (peak, trough, location, etc) are written" );

/// Static consts for input settings
/// (Supplied so outputs can be directed to these inputs)

static const StringSettingURI DETECT_SETTING( "detect", "The variable that is "
        "being detected (dependent variable)" );

static const StringSettingURI DEPTH_SURROGATE_SETTING( "depthSurrogate", "Optional "
        "name of a variable that is being used instead of depth" );

static const SettingURI CONSECUTIVE_DEPTHS_SETTING( "consecutiveDepths", "#of "
        "samples to confirm a turn-around", Units::COUNT );

static const SettingURI DEPTH_CHANGE_THRESH_SETTING( "depthChangeThresh", "Turn-"
        "arounds must exceed this setting, in the base unit of the depth variable", Units::METER );

static const SettingURI WINDOW_LENGTH_SETTING( "windowLength", "#of samples in "
        "the smoothing window", Units::COUNT );

static const SettingURI MEDIAN_FILTER_LENGTH_SETTING( "medianFilterLength", "#of samples in "
        "the median filter (only for chlorophyll fluorescence)", Units::COUNT );

static const SettingURI SHALLOW_BOUND_SETTING( "shallowBound", "Minimum detection depth", Units::METER );

static const SettingURI DEEP_BOUND_SETTING( "deepBound", "Maximum detection depth", Units::METER );

static const SettingURI TIME_WINDOW_PEAK_REPORT_SETTING( "timeWindowPeakReport", "Time window out of which to report a peak", Units::SECOND );

/// Static consts for outputs

static const OutputURI PEAK_DETECT_OUTPUT( "peakDetect", "Value of detect "
        "variable at peak", Units::NONE );

static const OutputURI TROUGH_DETECT_OUTPUT( "troughDetect", "Value of "
        "detect variable at trough", Units::NONE );

static const OutputURI PEAK_TEMPERATURE_OUTPUT( "peakTemperature", "Value of temperature "
        "at peak", Units::CELSIUS );

static const OutputURI PEAK_DEPTH_OUTPUT( "peakDepth", "Value of depth "
        "at peak", Units::METER );

static const OutputURI PEAK_LATITUDE_OUTPUT( "peakLatitude", "Value of "
        "latitude at peak", Units::DEGREE );

static const OutputURI PEAK_LONGITUDE_OUTPUT( "peakLongitude", "Value of "
        "longitude at peak", Units::DEGREE );

}

#endif /*PEAKDETECTVSDEPTHIF_H_*/
