text: /* structs for GLAM2 alignments */
  #ifndef GLAM2_GLAM2_ALN_H
  #define GLAM2_GLAM2_ALN_H
  
  typedef struct {  /* one column in a glam2 alignment */
    /* fudamental data: */
    int seq_num;  /* number of sequences */
    int *positions;  /* zero-based coordinates */
    int *matches;  /* 0=deletion, 1=match */
    /* derived data: */
    int alph_size;
    int *emission_counts;
    int match_count;
    int delete_count;
  } glam2_col;
  
  typedef struct {  /* a glam2 alignment */
    int seq_num;  /* number of sequences */
    int width;  /* number of columns */
    glam2_col *cols;
    int *strands;  /* '+', '-', or 0 = unaligned */
    /* derived data: */
    int aligned_seq;  /* number of strands != 0 */
    int *insert_counts;
    double score;
  } glam2_aln;
  
  /* Is the s-th sequence of alignment "aln" aligned? */
  #define ALIGNED(aln, s) ((aln)->strands[s])
  
  #define LEFT_POS(col, seq) ((col)->positions[seq])
  
  #define RIGHT_POS(col, seq) ((col)->positions[seq] + (col)->matches[seq])
  
  #define INSERTS(col1, col2, seq) (LEFT_POS(col2, seq) - RIGHT_POS(col1, seq))
  
  #define LEFT_INSERT(aln, col, seq)\
          ((col) > 0 ?\
           INSERTS(&(aln)->cols[(col)-1], &(aln)->cols[col], seq) : 0)
  
  #define RIGHT_INSERT(aln, col, seq)\
          ((col) < (aln)->width-1 ?\
           INSERTS(&(aln)->cols[col], &(aln)->cols[(col)+1], seq) : 0)
  
  /* Allocate memory for a glam2_col */
  void col_init(glam2_col *col, int seq_num, int alph_size);
  
  /* Allocate memory for a glam2_aln */
  void aln_init(glam2_aln *aln, int seq_num, int max_width, int alph_size);
  
  /* Set all sequences unaligned and all counts to zero */
  /* Assumes width has been set */
  void aln_zero(glam2_aln *aln);
  
  /* Copy column b into column a */
  /* Assumes a's memory has already been allocated */
  void col_copy(glam2_col *a, const glam2_col *b);
  
  /* Copy alignment b into alignment a */
  /* Assumes a's memory has already been allocated */
  void aln_copy(glam2_aln *a, const glam2_aln *b);
  
  #endif
  