nucDistanceChoices = 
{{"JC69","Jukes-Cantor distance formula (equal character frequencies, all rates equal)."}
 {"K2P", "Kimura 2 parameter (equal character frequencies, transition/trasversion bias correction)."}
 {"K2P_RV", "Kimura 2 parameter and rate variation (equal character frequencies, transition/trasversion bias correction, gamma distributed rate variation from site to site)."}
 {"p_Distance", "Number of observed substituions per site."}
 {"T3P", "Tamura 3-parameter (correction for GC content bias and transition/trasversion bias)."},
 {"TN84", "Tajima-Nei (84) distance (unequal character frequencies)."}
 {"TN93", "Tamura-Nei (93) distance (unequal character frequencies, A->G, C->T and transversional bias corrections)."}
 {"TN93_RV", "Tamura-Nei (93) distance and rate variation (unequal character frequencies, A->G, C->T and transversional bias corrections, gamma distributed rate variation from site to site)."}
 {"Unaligned_LZ", "Distance measure for unaligned sequences based on Lempel Ziv measure of information content."}
 {"Unaligned_LZ_FR", "Distance measure for unaligned sequences based on Lempel Ziv measure of information content using the best choice forward and reverse string orientations."}
};

aaDistanceChoices = 
{{"PC","Poisson corrected distance (equal character frequencies, all rates equal)."}
 {"PC_RV","Poisson corrected distance with rate variation (equal character frequencies, all rates equal, gamma distributed rate variation from site to site))."}
 {"PC_MH","Distance corrected for mulitple hits used in Clustal-W."}
 {"p_Distance_aa", "Number of observed substituions per site."}
 {"Unaligned_LZ", "Distance measure for unaligned sequences based on Lempel Ziv measure of information content."}
 {"Unaligned_LZ_FR", "Distance measure for unaligned sequences based on Lempel Ziv measure of information content using the best choice forward and reverse string orientations."}
};

codonDistanceChoices = 
{{"Nei_Gojobori","Nei and Gojobori (1986) method."}
 {"Modified_Nei_Gojobori","Nei and Gojobori (1986) method with transversion/transition bias correction."}
 {"p_Distance_codon","Substitution counts normalized by sequence length."}
};

binaryDistanceChoices = 
{{"p_Distance_binary","Substitution counts normalized by sequence length."}
};

if (DISTANCE_PROMPTS)
{
	/* determine the size of the data set filter */
	GetDataInfo (cInfo, filteredData, "CHARACTERS");
	filterCharacters = Columns (cInfo);
	
	_distanceFilePath = "";
	
	if (filterCharacters == 4)
	{
		ChoiceList (dfileChoice,"Nucleotide based distance formula.",1,SKIP_NONE,nucDistanceChoices);
		if (dfileChoice < 0)
		{
			return 0;
		}
		_distanceFilePath = PATH_TO_CURRENT_BF + "Distances"+ DIRECTORY_SEPARATOR + nucDistanceChoices[dfileChoice][0];
		ExecuteAFile (_distanceFilePath);
	}
	else
	{
		if (filterCharacters == 20)
		{
			ChoiceList (dfileChoice,"Amino-acid based distance formula.",1,SKIP_NONE,aaDistanceChoices);
			if (dfileChoice < 0)
			{
				return 0;
			}
			_distanceFilePath = PATH_TO_CURRENT_BF + "Distances"+ DIRECTORY_SEPARATOR + aaDistanceChoices[dfileChoice][0];
			ExecuteAFile (_distanceFilePath);
		}
		else
		{
			if (filterCharacters == 2)
			{
				ChoiceList (dfileChoice,"Binary charcters based distance formula.",1,SKIP_NONE,binaryDistanceChoices);
				if (dfileChoice < 0)
				{
					return 0;
				}
				_distanceFilePath = PATH_TO_CURRENT_BF + "Distances"+ DIRECTORY_SEPARATOR + binaryDistanceChoices[dfileChoice][0];
				ExecuteAFile (_distanceFilePath);
			}
			else
			{
				if (Abs (_Genetic_Code) > 0)
				{
					ChoiceList (dfileChoice,"Codon based distance formula.",1,SKIP_NONE,codonDistanceChoices);
					if (dfileChoice < 0)
					{
						return 0;
					}
					_distanceFilePath = PATH_TO_CURRENT_BF + "Distances"+ DIRECTORY_SEPARATOR + codonDistanceChoices[dfileChoice][0];
					ExecuteAFile (_distanceFilePath);
				}
				else
				{
					fprintf (stdout, "\n\nNonstandard data type - no distance formulae are available\n\n");
					return 1;
				}
			}
		}
	}
}
