[Up] [Next]
Go up to Simulator Source Code  
Go forward to Simulator Module  

Main Program  

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;
}

- Michael P. Frank, September 12, 1995. Formatted using HyperLaTeX-1.3.

[Up] [Next]