1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#include "myutils.h"
#include "alpha.h"
#include "timing.h"
bool isgap(byte c)
{
return c == '-' || c == '.';
}
const char *WordToStrAmino(unsigned Word, unsigned WordLength)
{
static char Str[32];
for (unsigned i = 0; i < WordLength; ++i)
{
unsigned Letter = Word%20;
Str[WordLength-i-1] = g_LetterToCharAmino[Letter];
Word /= 20;
}
Str[WordLength] = 0;
return Str;
}
const char *WordToStrAmino2(unsigned Word, unsigned WordLength, char *Str)
{
for (unsigned i = 0; i < WordLength; ++i)
{
unsigned Letter = Word%20;
Str[WordLength-i-1] = g_LetterToCharAmino[Letter];
Word /= 20;
}
Str[WordLength] = 0;
return Str;
}
const char *WordToStrNucleo(unsigned Word, unsigned WordLength)
{
static char Str[32];
for (unsigned i = 0; i < WordLength; ++i)
{
unsigned Letter = Word%4;
Str[WordLength-i-1] = g_LetterToCharNucleo[Letter];
Word /= 4;
}
Str[WordLength] = 0;
return Str;
}
const char *WordToStr(unsigned Word, unsigned WordLength, bool Nucleo)
{
return (Nucleo ? WordToStrNucleo : WordToStrAmino)(Word, WordLength);
}
byte *RevCompAlloc(const byte *Seq, unsigned L)
{
byte *RCSeq = MYALLOC(byte, L, Alpha);
for (unsigned i = 0; i < L; ++i)
RCSeq[L-i-1] = g_CharToCompChar[Seq[i]];
return RCSeq;
}
void RevCompInPlace(byte *Seq, unsigned L)
{
unsigned L1 = L - 1;
unsigned L2 = L/2;
for (unsigned i = 0; i < L2; ++i)
{
unsigned j = L1 - i;
unsigned ci = Seq[i];
unsigned cj = Seq[j];
unsigned ri = g_CharToCompChar[ci];
unsigned rj = g_CharToCompChar[cj];
Seq[i] = rj;
Seq[j] = ri;
}
if (L%2 == 1)
Seq[L2] = g_CharToCompChar[Seq[L2]];
}
void RevComp(const byte *Seq, unsigned L, byte *RCSeq)
{
for (unsigned i = 0; i < L; ++i)
RCSeq[L-i-1] = g_CharToCompChar[Seq[i]];
}
unsigned char GetAminoCharFrom3NucChars(unsigned char c1, unsigned char c2,
unsigned char c3)
{
unsigned Letter1 = g_CharToLetterNucleo[c1];
unsigned Letter2 = g_CharToLetterNucleo[c2];
unsigned Letter3 = g_CharToLetterNucleo[c3];
unsigned Word = Letter1*(4*4) + Letter2*4 + Letter3;
unsigned Letter = g_CodonWordToAminoLetter[Word];
return g_LetterToCharAmino[Letter];
}
|