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

#ifndef PEAKDETECTTHRESHOLDIF_H_
#define PEAKDETECTTHRESHOLDIF_H_

#include "data/ElementURI.h"

/**
 *  Specifies the interface details for the PeakDetectHorizontal component in the
 *  GuidanceModule.
 *
 *  PeakDetectHorizontal.h should only be included by PeakDetectHorizontal.cpp
 *  Other classes should include PeakDetectHorizontalIF.h
 *
 *  \ingroup modules_guidance
 */
namespace PeakDetectHorizontalIF
{
/// Static const for component name
/// (Can be used by other components)
static const Str NAME( "PeakDetectHorizontal" );

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

/// detectFrom is the variable that is being detected (dependent variable)
static const SettingURI DETECT_FROM_SETTING( "detectFrom", Units::NONE );

/// depthFrom is the variable that contains depth of the dependent variable
/// defaults to Universal::DEPTH
static const SettingURI DEPTH_FROM_SETTING( "depthFrom", Units::METER );

/// latitudeFrom is the variable that contains latitude of the dependent variable
/// defaults to Universal::LATITUDE
static const SettingURI LATITUDE_FROM_SETTING( "latitudeFrom", Units::RADIAN );

/// longitudeFrom is the variable that contains longitude of the dependent variable
/// defaults to Universal::LONGITUDE
static const SettingURI LONGITUDE_FROM_SETTING( "longitudeFrom", Units::RADIAN );

/// set advectValues to true if values should be advected in space
static const SettingURI ADVECT_VALUES_SETTING( "advectValues", Units::BOOL );

/// set patchTracking to true if tracking a patch.
static const SettingURI PATCH_TRACKING_SETTING( "patchTracking", Units::BOOL );

/// detectTrough is true if we are looking for a low value rather than a high value
static const SettingURI DETECT_TROUGH_SETTING( "detectTrough", Units::BOOL );

/// beginThreshold the (higher) threshold that indicates the beginning of the peak
static const SettingURI BEGIN_THRESHOLD_SETTING( "beginThreshold", Units::NONE );

/// offPeakFraction when this much lower than the peak, assume end of peak
static const SettingURI OFF_PEAK_FRACTION_SETTING( "offPeakFraction", Units::NONE );

/// filterWidth, how many points to use in the filter
static const SettingURI FILTER_WIDTH_SETTING( "filterWidth", Units::COUNT );

/// numProfilesSlidingwindow. pick the highest peak value (on yo-yo profiles) within a horizontal sliding window (of length numProfilesSlidingwindowSetting_)
static const SettingURI NUMPROFILES_SLIDINGWINDOW_SETTING( "numProfilesSlidingwindow", Units::COUNT );

/// set centerPeak true if the peak is centered between points >= beginThreshold,
/// set centerPeak false if peak is the maximum point between points >= beginThreshold
static const SettingURI CENTER_PEAK_SETTING( "centerPeak", Units::BOOL );

/// timeout if detected value does not reach threshold
static const SettingURI DETECT_TIMEOUT_SETTING( "detectTimeout", Units::SECOND );

/// Static consts for outputs

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

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

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

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

/// Distance from the peak
static const OutputURI PEAK_DISTANCE_OUTPUT( "peakDistance", Units::METER );

}

#endif /*PEAKDETECTTHRESHOLDIF_H_*/
