#include <ncbi.h>
#include "karlin.h"

/* stoe() -- given a score, return the associated Expect value */
double
stoe(S, Lambda, K, H, dblen, qlen)
	Score_t	S;
	double	Lambda, K, H; /* parameters for Karlin statistics */
	unsigned long	dblen;	/* length of database */
	unsigned long	qlen;	/* length of query sequence */
{
	register double	expect;
	register double	expected_len;
	register double	xqlen = qlen;
	register double	xdblen = dblen;

#ifdef REFINED_STATS
	expected_len = stolen(S, Lambda, H);
	xqlen = MAX(1., xqlen - expected_len);
	xdblen = MAX(1., xdblen - expected_len);
#endif /* REFINED_STATS */

	expect = K * xqlen * xdblen * exp(-Lambda * S);

	return expect;
}
