]> git.donarmstrong.com Git - mothur.git/blobdiff - cmdargs.cpp
moved mothur's source into a folder to make grabbing just the source easier on github
[mothur.git] / cmdargs.cpp
diff --git a/cmdargs.cpp b/cmdargs.cpp
deleted file mode 100644 (file)
index 929b4aa..0000000
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * cmdargs.c
- *
- * $Id$
- *
- *****************************************************************************
- *
- * Copyright (c) 2004,  Luke Sheneman
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met:
- * 
- *  + Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer. 
- *  + Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in 
- *    the documentation and/or other materials provided with the 
- *    distribution. 
- *  + The names of its contributors may not be used to endorse or promote 
- *    products derived  from this software without specific prior 
- *    written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
- * POSSIBILITY OF SUCH DAMAGE.  
- *
- *****************************************************************************
- *
- * AUTHOR:
- * 
- *   Luke Sheneman
- *   sheneman@cs.uidaho.edu
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-
-#ifdef USE_GNU
-#include <getopt.h>
-#else
-#include "getopt_long.h"
-#endif /* USE_GNU*/
-
-
-#include "clearcut.h"
-#include "cmdargs.h"
-
-
-/*
- * NJ_handle_args() - 
- *
- */
-NJ_ARGS *
-NJ_handle_args(int argc,
-              char *argv[]) {
-  
-  static NJ_ARGS nj_args;
-  int option_index, c;
-  
-  optind = 0;  //neccasary to read in arguments if code is run more than once
-
-  struct option NJ_long_options[] = {
-
-    /* These options don't set a flag */
-    {"in",        required_argument, NULL, 'i'},
-    {"out",       required_argument, NULL, 'o'},
-    {"seed",      required_argument, NULL, 's'},
-    {"matrixout", required_argument, NULL, 'm'},
-    {"ntrees",    required_argument, NULL, 'n'},
-
-    /* These options set a flag */
-    {"verbose",      no_argument, &(nj_args.verbose_flag),  1},
-    {"quiet",        no_argument, &(nj_args.quiet_flag),    1},
-    {"distance",     no_argument, &(nj_args.input_mode),    NJ_INPUT_MODE_DISTANCE}, 
-    {"alignment",    no_argument, &(nj_args.input_mode),    NJ_INPUT_MODE_ALIGNED_SEQUENCES},
-    {"help",         no_argument, &(nj_args.help),          1},
-    {"version",      no_argument, &(nj_args.version),       1},
-    {"norandom",     no_argument, &(nj_args.norandom),      1},
-    {"shuffle",      no_argument, &(nj_args.shuffle),       1},
-    {"stdin",        no_argument, &(nj_args.stdin_flag),    1},
-    {"stdout",       no_argument, &(nj_args.stdout_flag),   1},
-    {"dna",          no_argument, &(nj_args.dna_flag),      1},
-    {"DNA",          no_argument, &(nj_args.dna_flag),      1},
-    {"protein",      no_argument, &(nj_args.protein_flag),  1},
-    {"neighbor",     no_argument, &(nj_args.neighbor),      1},
-    {"expblen",      no_argument, &(nj_args.expblen),       1},
-    {"expdist",      no_argument, &(nj_args.expdist),       1}, 
-
-    {"jukes",        no_argument, &(nj_args.jukes_flag),    1},
-    {"kimura",       no_argument, &(nj_args.kimura_flag),   1},
-    
-    {0, 0, 0, 0}
-
-  };
-  
-  /* initializes options to their default */
-  nj_args.infilename       = NULL;
-  nj_args.outfilename      = NULL;
-  nj_args.matrixout        = NULL;
-  nj_args.seed             = time(0);
-  nj_args.verbose_flag     = 0;
-  nj_args.quiet_flag       = 0;
-  nj_args.input_mode       = NJ_INPUT_MODE_DISTANCE;
-  nj_args.help             = 0;
-  nj_args.version          = 0;
-  nj_args.norandom         = 0;
-  nj_args.shuffle          = 0;
-  nj_args.stdin_flag       = 0;
-  nj_args.stdout_flag      = 0;
-  nj_args.dna_flag         = 0;
-  nj_args.protein_flag     = 0;
-  nj_args.correction_model = NJ_MODEL_NONE;
-  nj_args.jukes_flag       = 0;
-  nj_args.kimura_flag      = 0;
-  nj_args.neighbor         = 0;
-  nj_args.ntrees           = 1;
-  nj_args.expblen          = 0;
-  nj_args.expdist          = 0;
-
-  while(1) {
-
-    c = getopt_long(argc,
-                   argv,
-                   "i:o:s:m:n:vqduahVSIOrDPjkNeE",
-                   NJ_long_options,
-                   &option_index);
-    if(c == -1) {
-      break;
-    }
-//printf("%d\t%d\n", option_index, argc);
-//for (int red = 0; red < argc; red++) { printf("%s\n", argv[red]); }
-    switch(c) {
-
-    case 0:
-      if(NJ_long_options[option_index].flag) {
-       break;
-      }
-
-      printf("option %s", NJ_long_options[option_index].name);
-      if(optarg) {
-       printf(" with arg %s", optarg);
-      }
-      printf("\n");
-      break;
-
-    case 'i':
-      nj_args.infilename = optarg;
-      break;
-
-    case 'o':
-      nj_args.outfilename = optarg;
-      break;
-
-    case 's':
-      nj_args.seed = atoi(optarg);
-      break;
-
-    case 'm':
-      nj_args.matrixout = optarg;
-      break;
-
-    case 'n':
-      nj_args.ntrees = atoi(optarg);
-      break;
-
-    case 'v':
-      nj_args.verbose_flag = 1;
-      break; 
-
-    case 'q':
-      nj_args.quiet_flag = 1;
-      break;
-
-    case 'd':
-      nj_args.input_mode = NJ_INPUT_MODE_DISTANCE;
-      break;
-
-    case 'a':
-      nj_args.input_mode = NJ_INPUT_MODE_ALIGNED_SEQUENCES;
-      break;
-
-    case 'h':
-      nj_args.help = 1;
-      break;
-
-    case 'V':
-      nj_args.version = 1;
-      break;
-
-    case 'S':
-      nj_args.shuffle = 1;
-      break;
-      
-    case 'I':
-      nj_args.stdin_flag = 1;
-      break;
-
-    case 'O':
-      nj_args.stdin_flag = 1;
-      break;
-
-    case 'r':
-      nj_args.norandom = 1;
-      break;
-
-    case 'D':
-      nj_args.dna_flag = 1;
-      break;
-
-    case 'P':
-      nj_args.protein_flag = 1;
-      break;
-
-    case 'j':
-      nj_args.jukes_flag = 1;
-      break;
-
-    case 'k':
-      nj_args.kimura_flag = 1;
-      break;
-
-    case 'N':
-      nj_args.neighbor = 1;
-      break;
-
-    case 'e':
-      nj_args.expblen = 1;
-      break;
-
-    case 'E':
-      nj_args.expdist = 1;
-      break;
-
-   default:
-     NJ_usage();
-     exit(-1);
-    }
-  }
-  if(optind < argc) {
-    fprintf(stderr, "Clearcut: Unknown command-line argument:\n  --> %s\n", argv[optind]);
-    NJ_usage();
-    exit(-1);
-  }
-  
-  if(nj_args.version) {
-    printf("Clearcut Version: %s\n", NJ_VERSION);
-   //exit(0);
-  }
-  
-  if(nj_args.help) {
-    NJ_usage();
-    //exit(0);
-  }
-  
-  /* if stdin & explicit filename are specified for input */
-  if(nj_args.stdin_flag) {
-    if(nj_args.infilename) {
-      fprintf(stderr, "Clearcut:  Ambiguous input source specified.  Specify input filename OR stdin.\n");
-      NJ_usage();
-      exit(-1);
-    }
-  }
-
-  /* if stdout & explicit filename are specified for output */
-  if(nj_args.stdout_flag) {
-    if(nj_args.outfilename) {
-      fprintf(stderr, "Clearcut:  Ambiguous output specified.  Specify output filename OR stdout.\n");
-      NJ_usage();
-      exit(-1);
-    }
-  }
-
-  /* if user did not specify stdin or filename, default to stdin */
-  if(!nj_args.stdin_flag) {
-    if(!nj_args.infilename) {
-
-      fprintf(stderr, "Clearcut: No input file specified.  Using stdin.\n");
-      nj_args.stdin_flag = 1;
-    }
-  }
-  
-  /* if user did not specify stdout or filename, default to stdout */
-  if(!nj_args.stdout_flag) {
-    if(!nj_args.outfilename) {
-      
-      fprintf(stderr, "Clearcut: No output file specified.  Using stdout.\n");
-      nj_args.stdout_flag = 1;
-    }
-  }
-  
-  /* User must specify distance matrix or alignment */
-  if(nj_args.input_mode == NJ_INPUT_MODE_UNKNOWN) {
-    fprintf(stderr, "Clearcut: Must specify input type (--distance | --alignment)\n");
-    NJ_usage();
-    exit(-1);
-  }
-
-  /* do not allow protein or DNA options for distance matrix input */
-  if(nj_args.input_mode == NJ_INPUT_MODE_DISTANCE) {
-    if(nj_args.dna_flag || nj_args.protein_flag) {
-      fprintf(stderr, "Clearcut:  Ambiguous arguments.  (--protein | --DNA) do not apply to distance \n");
-      NJ_usage();
-      exit(-1);
-    }
-  }
-  
-  /* make sure different filenames were specified for input and output */
-  if(!nj_args.stdin_flag && !nj_args.stdout_flag) {
-
-    if(!strcmp(nj_args.infilename, nj_args.outfilename)) {
-      fprintf(stderr, "Clearcut: Input filename and output filename must be unique.\n");
-      NJ_usage();
-      exit(-1);
-    }
-  }
-
-  /* make sure that user specifies DNA or Protein if dealing with alignment input */
-  if(nj_args.input_mode == NJ_INPUT_MODE_ALIGNED_SEQUENCES) {
-    if(!nj_args.dna_flag && !nj_args.protein_flag) {
-      fprintf(stderr, "Clearcut: Must specify protein or DNA for alignment input.\n");
-      NJ_usage();
-      exit(-1);
-    }
-  }
-
-  /* make sure that user does not specify both protein and DNA when dealing with alignment input */
-  if(nj_args.input_mode == NJ_INPUT_MODE_ALIGNED_SEQUENCES) {
-    if(nj_args.dna_flag && nj_args.protein_flag) {
-      fprintf(stderr, "Clearcut: Specifying protein and DNA sequences are mutually exclusive options\n");
-      NJ_usage();
-      exit(-1);
-    }
-  }
-
-  /* make sure verbose and quiet were not specified together */
-  if(nj_args.verbose_flag && nj_args.quiet_flag) {
-    fprintf(stderr, "Clearcut: Verbose and Quiet mode are mutually exclusive.\n");
-    NJ_usage();
-    exit(-1);
-  }
-  
-  /* make sure that a correction model was specified only when providing an alignment */
-  if(nj_args.input_mode == NJ_INPUT_MODE_DISTANCE) {
-    if(nj_args.jukes_flag || nj_args.kimura_flag) {
-      fprintf(stderr, "Clearcut:  Only specify correction model for alignment input.\n");
-      NJ_usage();
-      exit(-1);
-    }
-  } else {
-    if(nj_args.jukes_flag && nj_args.kimura_flag) {
-      fprintf(stderr, "Clearcut:  Only specify one correction model\n");
-      NJ_usage();
-      exit(-1);
-    } else {
-      if(nj_args.jukes_flag && !nj_args.kimura_flag) {
-       nj_args.correction_model = NJ_MODEL_JUKES;
-      } else if(nj_args.kimura_flag && !nj_args.jukes_flag) {
-       nj_args.correction_model = NJ_MODEL_KIMURA;
-      } else {
-       nj_args.correction_model = NJ_MODEL_NONE;  /* DEFAULT */
-      }
-    }
-  }
-  
-  /* make sure that the number of output trees is reasonable */
-  if(nj_args.ntrees <= 0) {
-    fprintf(stderr, "Clearcut: Number of output trees must be a positive integer.\n");
-    NJ_usage();
-    exit(-1);
-  }
-  
-  /* 
-   * make sure that if exponential distances are specified, 
-   * we are dealing with alignment input
-   */
-  if(nj_args.expdist && nj_args.input_mode != NJ_INPUT_MODE_ALIGNED_SEQUENCES) {
-    fprintf(stderr, "Clearcut: Exponential notation for distance matrix output requires that input be an alignment\n");
-    NJ_usage();
-    exit(-1);
-  }
-  
-  return(&nj_args);
-}
-
-
-
-
-
-/*
- * NJ_print_args() - 
- *
- */
-void
-NJ_print_args(NJ_ARGS *nj_args) {
-  
-  char input_mode[32];
-  
-  switch (nj_args->input_mode) {
-  case NJ_INPUT_MODE_DISTANCE:
-    sprintf(input_mode, "Distance Matrix");
-    break;
-  case NJ_INPUT_MODE_UNALIGNED_SEQUENCES:
-    sprintf(input_mode, "Unaligned Sequences");
-    break;
-  case NJ_INPUT_MODE_ALIGNED_SEQUENCES:
-    sprintf(input_mode, "Aligned Sequences");
-    break;
-  default:
-    sprintf(input_mode, "UNKNOWN");
-    break;
-  }
-
-  printf("\n***  Command Line Arguments ***\n");
-  
-  printf("Input Mode: %s\n", input_mode);
-  
-  if(nj_args->stdin_flag) {
-    printf("Input from STDIN\n");
-  } else {
-    printf("Input File: %s\n", nj_args->infilename);
-  }
-
-  if(nj_args->stdout_flag) {
-    printf("Output from STDOUT\n");
-  } else {
-    printf("Output File: %s\n", nj_args->outfilename);
-  }
-  
-  if(nj_args->input_mode != NJ_INPUT_MODE_DISTANCE) {
-    if(nj_args->aligned_flag) {
-      printf("Input Sequences Aligned: YES\n");
-    } else {
-      printf("Input Sequences Aligned:  NO\n");
-    }
-  }
-  
-  if(nj_args->verbose_flag) {
-    printf("Verbose Mode: ON\n");
-  } else {
-    printf("Verbose Mode: OFF\n");
-  }
-  
-  if(nj_args->quiet_flag) {
-    printf("Quiet Mode: ON\n");
-  } else {
-    printf("Quiet Mode: OFF\n");
-  }
-  
-  if(nj_args->seed) {
-    printf("Random Seed: %d\n", nj_args->seed);
-  }
-  
-  printf("\n*******\n");
-  
-  return;
-}
-
-
-
-
-/*
- * NJ_usage() -
- *
- * Print a usage message
- *
- */
-void
-NJ_usage(void) {
-  
-  printf("Usage: clearcut --in=<infilename> --out=<outfilename> [options]...\n");
-  printf("GENERAL OPTIONS:\n");
-  printf("  -h, --help         Display this information.\n");
-  printf("  -V, --version      Print the version of this program.\n");
-  printf("  -v, --verbose      More output. (Default: OFF)\n");
-  printf("  -q, --quiet        Silent operation. (Default: ON)\n");
-  printf("  -s, --seed=<seed>  Explicitly set the PRNG seed to a specific value.\n");
-  printf("  -r, --norandom     Attempt joins deterministically.  (Default: OFF)\n");
-  printf("  -S, --shuffle      Randomly shuffle the distance matrix.  (Default: OFF)\n");
-  printf("  -N, --neighbor     Use traditional Neighbor-Joining algorithm. (Default: OFF)\n");
-
-  printf("\n");
-  printf("INPUT OPTIONS:\n");
-  printf("  -I, --stdin        Read input from STDIN.\n");
-  printf("  -d, --distance     Input file is a distance matrix. (Default: ON)\n");
-  printf("  -a, --alignment    Input file is a set of aligned sequences. (Default: OFF)\n");
-  printf("  -D, --DNA          Input alignment are DNA sequences.\n");
-  printf("  -P, --protein      Input alignment are protein sequences.\n");
-
-  printf("\n");
-  printf("CORRECTION MODEL FOR COMPUTING DISTANCE MATRIX (Default: NO Correction):\n");
-  printf("  -j, --jukes        Use Jukes-Cantor correction for computing distance matrix.\n");
-  printf("  -k, --kimura       Use Kimura correction for distance matrix.\n");
-  
-  printf("\n");
-  printf("OUTPUT OPTIONS:\n");
-  printf("  -O, --stdout           Output tree to STDOUT.\n");
-  printf("  -m, --matrixout=<file> Output distance matrix to specified file.\n");
-  printf("  -n, --ntrees=<n>       Output n trees.  (Default: 1)\n");
-  printf("  -e, --expblen          Exponential notation for branch lengths. (Default: OFF)\n");
-  printf("  -E, --expdist          Exponential notation in distance output. (Default: OFF)\n");
-  
-  printf("\n");
-  printf("EXAMPLES:\n");
-  printf("  Compute tree by supplying distance matrix via stdin:\n");
-  printf("  clearcut --distance < distances.txt > treefile.tre\n");
-  printf("\n");
-  printf("  Compute tree by supplying an alignment of DNA sequences from a file:\n");
-  printf("  clearcut --alignment --DNA --in=alignment.txt --out=treefile.tre\n");
-  
-  return;
-}
-
-
-