diff swalign.h @ 18:e4d75f9efb90 draft

planemo upload commit b'4303231da9e48b2719b4429a29b72421d24310f4\n'-dirty
author nick
date Thu, 02 Feb 2017 18:44:31 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/swalign.h	Thu Feb 02 18:44:31 2017 -0500
@@ -0,0 +1,89 @@
+/*
+ *  Copyright (c) 2010 Nicolaus Lance Hepler
+ *
+ *  Permission is hereby granted, free of charge, to any person
+ *  obtaining a copy of this software and associated documentation
+ *  files (the "Software"), to deal in the Software without
+ *  restriction, including without limitation the rights to use,
+ *  copy, modify, merge, publish, distribute, sublicense, and/or sell
+ *  copies of the Software, and to permit persons to whom the
+ *  Software is furnished to do so, subject to the following
+ *  conditions:
+ *
+ *  The above copyright notice and this permission notice shall be
+ *  included in all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *  OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define GAP -1.0
+#define MATCH 2.0
+#define MISMATCH -0.5
+//             ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz
+#define TRANS "TVGHEFCDIJMLKNOPQYWAABSXRZ[\\]^_`tvghefcdijmlknopqywaabsxrz"
+#define TRANS_OFFSET 65
+
+typedef enum { false, true } bool;
+
+typedef struct {
+  char *a;
+  unsigned int alen;
+  char *b;
+  unsigned int blen;
+} seq_pair_t;
+
+// An entry is a cell in the matrix.
+// prev holds the coordinates of the previous cell in the matrix.
+typedef struct {
+  double score;
+  unsigned int prev[2];
+} entry_t;
+
+typedef struct {
+  unsigned int m;
+  unsigned int n;
+  entry_t **mat;
+} matrix_t;
+
+typedef struct {
+  seq_pair_t *seqs;
+  int start_a;
+  int start_b;
+  int end_a;
+  int end_b;
+  int matches;
+  double score;
+} align_t;
+
+static char* reverse(char *str);
+
+static char get_char_comp(char c);
+
+char* revcomp(char *str);
+
+static align_t *traceback(seq_pair_t *problem, matrix_t *S, bool local);
+
+static matrix_t *create_matrix(unsigned int m, unsigned int n);
+
+void destroy_matrix(matrix_t *S);
+
+void print_matrix(matrix_t *matrix, seq_pair_t *seq_pair);
+
+void destroy_seq_pair(seq_pair_t *pair);
+
+align_t *smith_waterman(seq_pair_t *problem, bool local);
+
+void print_alignment(align_t *result, int target_len, int query_len);