File name: main.c.
#include <stdlib.h> /* double atof() */
#include <stdio.h>
#include "sim.h" /* sim() */
#include "struct.h" /* Oligo, Sym */
#include "read.h" /* read_oligos */
void usage(progname,exitval)
int exitval;
{
printf("\n");
printf("Usage: %s [options] filename\n",progname);
printf("\n");
printf(" filename = Name of Oligo and initial strand\n");
printf(" specification file.\n");
printf("\n");
printf("Options:\n");
printf("\n");
printf(" -T # Set annealing temperature in Celsius (default 55).\n");
printf(" -c # Set oligonucleotide concentration in Molar\n");
printf(" Default is 1e-7\n");
printf(" -t # Set amount of time to run simulation, in seconds.\n");
printf(" Default is 240 (1 min. ramping plus 3 mins\n");
printf(" annealing).\n");
printf(" -p # Set number of PCR cycles. Zero, the default, means\n");
printf(" infinity.\n");
printf(" -s # Set random number seed. Default is the current system\n");
printf(" time.\n");
printf(" -r Operate in real time (no speedup over reality).\n");
printf(" -m Operate at medium speed (about 30x real time).\n");
printf(" -n No animation, show final result only (max speed).\n");
printf(" -h Help (this message).\n");
printf(" - Do not treat any remaining arguments as options.\n");
printf(" Allows for filenames starting with '-'.\n");
printf("\n");
exit(exitval);
}
int main(c,v)
int c; char **v;
{
/* Default parameters. */
char *filename = 0;
double temp = 328.15; /* 55 C */
double conc = 1e-7; /* 0.1 micromolar */
int ntick = 240; /* 3 minutes */
int ncyc = 0; /* forever */
int seed = time(0); /* random seed = current time */
int speed = FASTEST; /* Run as fast as possible */
/* Parse command-line args. */
{
int i;
int noswitch = 0;
for(i=1;i<c;i++){
if (!noswitch && *v[i] == '-') {
switch(v[i][1]){
case 'T':
i++;
if (i<c) {
temp = atof(v[i]) + 273.15;
} else {
printf("Warning: No temperature specified after -T.\n");
}
break;
case 'c':
i++;
if (i<c) {
conc = atof(v[i]);
} else {
printf("Warning: No concentration specified after -c.\n");
}
break;
case 't':
i++;
if (i<c) {
ntick = atoi(v[i]);
} else {
printf("Warning: No time specified after -t.\n");
}
break;
case 'p':
i++;
if (i<c) {
ncyc = atoi(v[i]);
} else {
printf("Warning: No number of PCR cycles specified after -p.\n");
}
break;
case 's':
i++;
if (i<c) {
seed = atoi(v[i]);
} else {
printf("Warning: No random number seed specified after -s.\n");
}
break;
case 'r':
speed = REAL_TIME;
break;
case 'm':
speed = MEDIUM_SPEED;
break;
case 'n':
speed = NO_ANIMATION;
break;
case 'h':
usage(v[0],0);
break;
case '\0':
noswitch=1;
break;
default:
printf("Warning: unknown option %s, ignoring.\n",v[i]);
break;
}
} else {
if (filename) {
printf("Warning: multiple filenames specified.\n");
printf(" Ignoring all but last.\n");
}
filename = v[i];
}
}
}
if (!filename) {
printf("Error: No filename specified.\n");
usage(v[0],1);
}
printf("Parameters: file = %s, T = %6.2f, c = %g, t = %d,\n",
filename,temp,conc,ntick);
printf(" p = %d, s = %d\n", ncyc,seed);
srandom(seed);
/* Read the oligo file and run the simulation. */
{
Oligo *oligos;
int nOligos;
Sym *syms;
int nSyms;
int *iniDNA;
int iniDNAlen;
read_oligos (filename, &oligos, &nOligos, &syms, &nSyms,
&iniDNA, &iniDNAlen);
sim (iniDNA, iniDNAlen, oligos, nOligos, syms, nSyms,
temp, conc, ntick, ncyc, speed);
}
return 0;
}