#include "libMUSCLE/muscle.h"

namespace muscle {

// Pascaralle and Argos gap factors
// after Table 1 in Thompson et. al. ClustalW NAR paper.
// static const double PAFFacs[20] =
//  	{
//	1.13,		// A
//	1.13,		// C
//	0.96,		// D
//	1.31,		// E
//	1.20,		// F
//	0.61,		// G
//	1.00,		// H
//	1.32,		// I
//	0.96,		// K
//	1.21,		// L
//	1.29,		// M
//	0.62,		// N
//	0.74,		// P
//	1.07,		// Q
//	0.72,		// R
//	0.76,		// S
//	0.89,		// T
//	1.25,		// V
//	1.00,		// Y
//	1.23,		// W
//	};
//
//// (Not used: does not appear to work well).
//SCORE PAFactor(const FCOUNT fcCounts[])
//	{
//	if (ALPHA_Amino != g_Alpha.get())
//		Quit("PAFFactor: requires amino acid sequence");
//
//	FCOUNT fLetterCount = 0;
//	double dSum = 0;
//	for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
//		{
//		const FCOUNT fCount = fcCounts[uLetter];
//		dSum += fCount*PAFFacs[uLetter];
//		fLetterCount += fCount;
//		}
//	if (0 == fLetterCount)
//		return 0.5;
//	return (SCORE) (dSum/fLetterCount);
//	}
//
//static const bool Hydrophilic[20] =
//	{
//	false,		// A
//	false,		// C
//	true,		// D
//	true,		// E
//	false,		// F
//	true,		// G
//	false,		// H
//	false,		// I
//	true,		// K
//	false,		// L
//	false,		// M
//	true,		// N
//	true,		// P
//	true,		// Q
//	true,		// R
//	true,		// S
//	false,		// T
//	false,		// V
//	false,		// Y
//	false,		// W
//	};
//
//bool IsHydrophilic(const FCOUNT fcCounts[])
//	{
//	if (ALPHA_Amino != g_Alpha.get())
//		Quit("IsHydrophilic: requires amino acid sequence");
//
//	for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
//		if (fcCounts[uLetter] > 0 && !Hydrophilic[uLetter])
//			return false;
//	return true;
//	}
//
//bool IsHydrophilic(const unsigned uCounts[])
//	{
//	if (ALPHA_Amino != g_Alpha.get())
//		Quit("IsHydrophilic: requires amino acid sequence");
//
//	for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
//		if (uCounts[uLetter] > 0 && !Hydrophilic[uLetter])
//			return false;
//	return true;
//	}

// LIVCATMFYWHK
// Venn		Pascaralla	B&T		Me
// L		y			y		y
// I		y			y		y
// V		y			y		y
// C		y			n
// A		y			y		y
// T		N			n
// M		y			y		y
// F		y			y		y
// Y		n			n
// W		y			n
// H		n			n
// K		n			n
static const bool Hydrophobic[20] =
	{
	true,		// A
	true,		// C
	false,		// D
	false,		// E
	true,		// F
	false,		// G
	true,		// H
	true,		// I
	false,		// K
	true,		// L
	true,		// M
	false,		// N
	false,		// P
	false,		// Q
	false,		// R
	false,		// S
	true,		// T
	true,		// V
	true,		// Y
	true,		// W
	};

bool IsHydrophobic(const FCOUNT fcCounts[])
	{
	if (ALPHA_Amino != g_Alpha.get())
		Quit("IsHydrophobic: requires amino acid sequence");

	for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
		if (fcCounts[uLetter] > 0.0 && !Hydrophobic[uLetter])
			return false;
	return true;
	}
} 
