src/test/test.c 1.4
1.4 2009/08/19 23:30:50 angie
Added option to mgSaveToGif and its call stack, to use GIF's Graphic Control Extension to make memgfx's background color (0) transparent. Also corrected terminology for PNG in .h files: useAlpha -> useTransparency.
Index: src/test/test.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/test/test.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -b -B -U 1000000 -r1.3 -r1.4
--- src/test/test.c 20 Aug 2008 10:42:23 -0000 1.3
+++ src/test/test.c 19 Aug 2009 23:30:50 -0000 1.4
@@ -1,117 +1,117 @@
/* Test.c */
#include "common.h"
#include "portable.h"
#include "dnautil.h"
#include "dnaseq.h"
#include "fa.h"
#include "nt4.h"
#include "wormdna.h"
#include "cda.h"
#include "crudeali.h"
#include "fuzzyFind.h"
#include "htmshell.h"
#include "cheapcgi.h"
/* Function: EVDDistribution()
* Date: SRE, Tue Nov 18 08:02:22 1997 [St. Louis]
*
* Purpose: Returns the extreme value distribution P(S < x)
* evaluated at x, for an EVD controlled by parameters
* mu and lambda.
*/
double EVDDistribution(double x, double mu, double lambda)
{
return (exp(-1. * exp(-1. * lambda * (x - mu))));
}
double poisson(int x, double lambda)
{
double fac = 1.0;
double pow = lambda;
int i;
for (i=2; i<=x; ++i)
fac *= i;
for (i=1; i<x; ++i)
pow *= lambda;
return exp(-lambda) * pow / fac;
}
double simpleGaussean(double x)
{
return 1.0 / sqrt(2.0*3.14159) * exp(-0.5*x*x );
}
double gaussean(double x, double mean, double sd)
{
x -= mean;
return 1.0 / (sd * sqrt(2.0*3.14159)) * exp(-0.5*x*x / (sd * sd));
}
double complexGaussean(double x, double mean, double sd)
{
return simpleGaussean((x-mean)/sd)/sd;
}
void doGraph(double mu, double lambda, double n)
{
struct tempName gifTn;
struct memGfx *mg;
int pixWidth = 400, pixHeight = 300;
int virtWidth = 100, virtHeight = 100;
int i;
int y;
double virtX;
double virtY;
double virtScaleX = (double)virtWidth/pixWidth;
double virtScaleY = (double)pixHeight/virtHeight;
mg = mgNew(pixWidth, pixHeight);
mgClearPixels(mg);
for (i=0; i<pixWidth; ++i)
{
virtX = i *virtScaleX;
// virtY = EVDDistribution(virtX, mu, lambda) * n;
// virtY = poisson((int)virtX, lambda) * n;
virtY = n * gaussean(virtX, mu, lambda);
y = (int)(virtScaleY*virtY);
mgPutDot(mg, i, pixHeight-1-y, MG_BLACK);
}
/* Save out picture and tell html file about it. */
for (i=0; i<10; ++i)
{
printf("simple %f complex %f<BR>\n", gaussean(i, 7.0, 3.0),
complexGaussean(i, 7.0, 3.0));
}
makeTempName(&gifTn, "trk", ".gif");
-mgSaveGif(mg, gifTn.forCgi);
+mgSaveGif(mg, gifTn.forCgi, FALSE);
printf(
"<P><IMAGE SRC = \"%s\" BORDER=1 WIDTH=%d HEIGHT=%d NAME = \"mouse\" ALIGN=BOTTOM><BR>\n",
gifTn.forHtml, pixWidth, pixHeight);
mgFree(&mg);
}
void doMiddle()
{
double mu = cgiDouble("mu");
double lambda = cgiDouble("lambda");
double n = cgiDouble("n");
doGraph(mu, lambda, n);
}
int main(int argc, char *argv[])
{
dnaUtilOpen();
if (argc == 2 && sameWord(argv[1], "test") )
{
doGraph(1.0, 2.0, 10.0);
}
else
{
htmShell("Test Output", doMiddle, "QUERY");
}
return 0;
}