#ifndef __KARLIN_H__
#define __KARLIN_H__

/* Datatype for substitution scores (must be signed) */
typedef long	Score_t;

/*
SCORE_MIN is -2**31 + 1 because some compilers don't properly evaluate
quantities such as (-2147483648)/2.  This phenom has been observed
on the NeXT and on IBM AIX.
*/
#define SCORE_MAX	(2147483647)
#define SCORE_MIN	(-2147483647) /* Must be a large negative number */

double	etopoissonp PROTO((unsigned cnt, double E));
double	etoconsistp PROTO((unsigned cnt, double E));
double	etop PROTO((double E));

int		karlin PROTO((Score_t low, Score_t high, double *prob, int LambdaCalc, double *lambda,
					int KCalc, double *K, int HCalc, double *H));
double	stoprob PROTO((Score_t S, double Lambda, double K, double H,
					unsigned long dblen, unsigned long queryeff));
double	stoe PROTO((Score_t S, double Lambda, double K, double H,
					unsigned long dblen, unsigned long queryeff));
double	stolen PROTO((Score_t S, double Lambda, double H));
Score_t	etos PROTO((double E, double Lambda, double K, double H,
					unsigned long dblen, unsigned long queryeff));
Score_t	ehighs PROTO((double Lambda, double K, double H,
					unsigned long dblen, unsigned long querylen));
#endif /* !__KARLIN_H__ */
