#ifndef BEADSTRING_H
#define BEADSTRING_H

#include "utils.h"          // Generic utilities. 
#include "alphabet.h"
#include "red-black-tree.h"

// Structure for tracking beadstring command line parameters.
typedef struct options {

  char* command_line;     /* Full command line */
  char* output_dirname;   /* Name of the output directory */
  char* meme_filename;    /* Name of file containg motifs. */
  char* model_filename;   /* Name of external file for HMM. */
  char* seq_filename;     /* Name of file containg sequences. */
  char* bg_filename;      /* Name of file file containg background freq. */
  char* score_filename;
  char* order_string;     /* Motif order and spacing. */

  BOOLEAN_T allow_weak_motifs;
  BOOLEAN_T allow_clobber;
  BOOLEAN_T fim;              /* Represent spacers as free insertion modules? */
  BOOLEAN_T local_scoring;
  BOOLEAN_T motif_scoring;
  BOOLEAN_T perform_search;
  BOOLEAN_T synth;
  BOOLEAN_T zselo;

  int       max_seq;
  int       pam_distance;
  int       paths;
  int       spacer_states;

  PROB_T  motif_e_threshold;   /* e-value threshold for motif inclusion. */
  PROB_T  motif_p_threshold;   /* p-value threshold for motif occurences. */
  PROB_T  e_threshold;   /* e-value threshold for reporting cluster. */
  PROB_T  p_threshold;   /* Turns on p-value scoring and sets zer point. */
  double  gap_extend;    /* penalty for extending a gap */
  double  gap_open;      /* penalty for opening a gap */
  double  motif_pseudo;  /* pseudocount  for motif frequencies */
  double  spacer_pseudo; /* Spacer (self-loop) pseudocount. */
  double  trans_pseudo;  /* Transition pseudocount. */
  double  progress;      /* interval between progress reports */

  ALPH_T *alphabet;    // Alphabet specified by MEME file.
  RBTREE_T *request_nums; // Indices of requested motifs.
  RBTREE_T *request_ids; // IDs of requested motifs
} OPTIONS_T;


#endif
