packages feed

SeqAlign-0.1.0.0: cbits/sw.c

#include <stdlib.h>
#include <stdint.h>
#include "ksw.h"

static const int8_t default_mat[25] = {
    1, -1, -1, -1, 0,
    -1, 1, -1, -1, 0,
    -1, -1, 1, -1, 0,
    -1, -1, -1, 1, 0,
    0, 0, 0, 0, 0
};

static const uint8_t seq_nt4_table[256] = {
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 0, 4, 1,  4, 4, 4, 2,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  3, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 0, 4, 1,  4, 4, 4, 2,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  3, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4, 
    4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4,  4, 4, 4, 4
};

inline void trans_nt4(char* qsq, uint8_t* qnt, int qlen) {
    int i;
    for (i = 0; i < qlen; i++) qnt[i] = seq_nt4_table[qsq[i]];
}

void default_align(int qlen, char *query, int tlen, char *target, int gapo, int gape, int xtra, kswr_t* ret) {
    uint8_t qnt4[qlen];
    trans_nt4(query, qnt4, qlen);
    uint8_t tnt4[tlen];
    trans_nt4(target, tnt4, tlen);
    *ret = ksw_align(qlen, qnt4, tlen, tnt4, 5, default_mat, gapo, gape, xtra, 0);
}

int cigar_align(int qlen, char *query, int tlen, char *target, int gapo, int gape, int w, int *n_cigar, uint32_t **cigar) {
    uint8_t qnt4[qlen];
    trans_nt4(query, qnt4, qlen);
    uint8_t tnt4[tlen];
    trans_nt4(target, tnt4, tlen);
    return ksw_global(qlen, qnt4, tlen, tnt4, 5, default_mat, gapo, gape, w, n_cigar, cigar);
}