<?xml version="1.0" encoding="utf-8"?>

<!-- Example analysis algorithm description. -->
<algorithm id="algorithm-1"
	   xmlns="urn:bml/brainml.org:internal/BrainML/4"
	   xmlns:bmtl="urn:bml/brainml.org:internal/BrainMetaL/1"
	   xmlns:xlink="http://www.w3.org/1999/xlink">
    <name>Metric space</name>
    <short_description>Metric space analysis method.</short_description>
    <long_description>Metric space analysis method.</long_description>
    
    <bmtl:author id="author-id-1">
	<bmtl:first>J.</bmtl:first>
	<bmtl:middle>D.</bmtl:middle>
	<bmtl:last>Victor</bmtl:last>
    </bmtl:author>

    <bmtl:author id="author-id-2">
	<bmtl:first>K.</bmtl:first>
	<bmtl:middle>P.</bmtl:middle>
	<bmtl:last>Purpura</bmtl:last>
    </bmtl:author>

    <bmtl:author id="author-id-3">
	<bmtl:first>D.</bmtl:first>
	<bmtl:last>Aronov</bmtl:last>
    </bmtl:author>

    <bmtl:citation id="ref-101" type="article">
	<bmtl:link dest="urn:bml/brainml.org:internal/BrainMetaL/1,author" xlink:href="#author-id-1"/>
	<bmtl:link dest="urn:bml/brainml.org:internal/BrainMetaL/1,author" xlink:href="#author-id-2"/>
	<bmtl:title>Metric-space analysis of spike trains: theory, algorithms and application.</bmtl:title>
	<bmtl:year>1997</bmtl:year>
	<bmtl:journal>Network: Computation in Neural Systems</bmtl:journal>
	<bmtl:volume>8</bmtl:volume>
	<bmtl:pages>127-164</bmtl:pages>
    </bmtl:citation>

    <bmtl:citation id="ref-102" type="article">
	<bmtl:link dest="urn:bml/brainml.org:internal/BrainMetaL/1,author" xlink:href="#author-id-3"/>
	<bmtl:title>Fast algorithm for the metric-space analysis of simultaneous responses of multiple single neurons.</bmtl:title>
	<bmtl:year>2003</bmtl:year>
	<bmtl:journal>Journal of Neuroscience Methods</bmtl:journal>
	<bmtl:volume>124</bmtl:volume>
	<bmtl:pages>175-179</bmtl:pages>
    </bmtl:citation>

    <!-- metricopen -->
    <module id="module-1" seq="1">
	<name>metricopen</name>
	<short_description>Prepare input data structure for metric space analysis.</short_description>
	<long_description>Prepare input data structure for metric space analysis.</long_description>

	<!-- start_time -->
	<parameter id="param-1" required="true">
	    <name>start_time</name>
	    <display_name>Start time</display_name>
	    <short_description>
		The start time of the analysis window. The default is
		the maximum of all of the start times in X.
	    </short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="decimal" dimensions="1">0.0</bmtl:datasetC>
	    </default_value>
	    <range>
		<max>end_time</max>
	    </range>
	</parameter>

	<!-- end_time -->
	<parameter id="param-2" required="true">
	    <name>end_time</name>
	    <display_name>End time</display_name>
	    <short_description>
		The end time of the analysis window. The default is the
		minimum of all of the end times in X.
	    </short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="decimal" dimensions="1">100.0</bmtl:datasetC>
	    </default_value>
	    <range>
		<min>start_time</min>
	    </range>
	</parameter>
    </module>

    <!-- metricdist -->
    <module id="module-2" seq="2">
	<name>metricdist</name>
	<short_description>Compute distances between sets of spike train pairs.</short_description>
	<long_description>Compute distances between sets of spike train pairs.</long_description>

	<!-- metric_family -->
	<option id="param-30" required="true">
	    <name>metric_family</name>
	    <display_name>Metric family</display_name>
	    <short_description>Metric family</short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">0</bmtl:datasetC>
	    </default_value>
	    <option_set>
		<bmtl:labeled_dataset>
		    <bmtl:datasetC type="integer" dimensions="2">
			0,1
		    </bmtl:datasetC>
		    <bmtl:datasetC type="string" dimensions="2">
			'Spike','Interval'
		    </bmtl:datasetC>
		</bmtl:labeled_dataset>
	    </option_set>
	</option>

	<!-- shift_cost -->
	<parameter id="param-3" required="true">
	    <name>shift_cost</name>
	    <display_name>Shift cost</display_name>
	    <short_description>Shift cost</short_description>
	    <vectorizable>true</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">0</bmtl:datasetC>
	    </default_value>
	    <range>
		<min_or_equal>0</min_or_equal>
	    </range>
	</parameter>

	<!-- label_cost -->
	<parameter id="param-4" required="true">
	    <name>label_cost</name>
	    <display_name>Label cost</display_name>
	    <short_description>Label cost</short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">0</bmtl:datasetC>
	    </default_value>
	    <range>
		<min_or_equal>0</min_or_equal>
		<max_or_equal>2</max_or_equal>
	    </range>
	</parameter>
    </module>

    <!-- metricclust -->
    <module id="module-3" seq="3">
	<name>metricclust</name>
	<short_description>Cluster spike trains based on distance matrix.</short_description>
	<long_description>Cluster spike trains based on distance matrix.</long_description>

	<!-- clustering_exponent -->
	<parameter id="param-5" required="true">
	    <name>clustering_exponent</name>
	    <display_name>Clustering exponent</display_name>
	    <short_description>Clustering exponent</short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">-2</bmtl:datasetC>
	    </default_value>
	</parameter>
    </module>

    <!-- info2d -->
    <module id="module-5" seq="4">
	<name>info2d</name>
	<short_description>Information and entropies from a 2-D histogram.</short_description>
	<long_description>Information and entropies from a 2-D histogram.</long_description>

	<!-- unoccupied_bins_strategy -->
	<option id="param-6" required="true">
	    <name>unoccupied_bins_strategy</name>
	    <display_name>Unoccupied bins strategy</display_name>
	    <short_description>unoccupied_bins_strategy</short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">-1</bmtl:datasetC>
	    </default_value>
	    <option_set>
		<bmtl:labeled_dataset>
		    <bmtl:datasetC type="integer" dimensions="1">
			-1,0,1
		    </bmtl:datasetC>
		    <bmtl:datasetC type="string" dimensions="1">
			'Ignore unoccupied bins',
			'Use an unoccupied bin only if its row and column are occupied',
			'Use all bins'
		    </bmtl:datasetC>
		</bmtl:labeled_dataset>
	    </option_set>
	</option>

	<!-- entropy_estimation_method -->
	<option id="param-7" required="true">
	    <name>entropy_estimation_method</name>
	    <display_name>Entropy estimation method</display_name>
	    <short_description>entropy_estimation_method</short_description>
	    <vectorizable>true</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">0</bmtl:datasetC>
	    </default_value>
	    <option_set>
		<bmtl:labeled_dataset>
		    <bmtl:datasetC type="integer" dimensions="3">
			0,1,2
		    </bmtl:datasetC>
		    <bmtl:datasetC type="string" dimensions="3">
			'plugin', 'tpmc', 'jack'
		    </bmtl:datasetC>
		</bmtl:labeled_dataset>
	    </option_set>
	</option>

	<!-- variance_estimation_method -->
	<option id="param-8" required="false">
	    <name>variance_estimation_method</name>
	    <display_name>Variance estimation method</display_name>
	    <short_description>variance_estimation_method</short_description>
	    <vectorizable>false</vectorizable>
	    <default_value>
		<bmtl:datasetC type="integer" dimensions="1">-1</bmtl:datasetC>
	    </default_value>
	    <option_set>
		<bmtl:labeled_dataset>
		    <bmtl:datasetC type="integer" dimensions="1">
			-1,2
		    </bmtl:datasetC>
		    <bmtl:datasetC type="string" dimensions="1">
			'Ignore this method', 'jack'
		    </bmtl:datasetC>
		</bmtl:labeled_dataset>
	    </option_set>
	</option>
    </module>
</algorithm>

