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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/* $Id: raw_scoremat.c,v 1.2 2003/10/02 15:37:34 ivanov Exp $
* ===========================================================================
*
* PUBLIC DOMAIN NOTICE
* National Center for Biotechnology Information
*
* This software/database is a "United States Government Work" under the
* terms of the United States Copyright Act. It was written as part of
* the author's official duties as a United States Government employee and
* thus cannot be copyrighted. This software/database is freely available
* to the public for use. The National Library of Medicine and the U.S.
* Government have not placed any restriction on its use or reproduction.
*
* Although all reasonable efforts have been taken to ensure the accuracy
* and reliability of the software and data, the NLM and the U.S.
* Government do not and cannot warrant the performance or results that
* may be obtained by using this software or data. The NLM and the U.S.
* Government disclaim all warranties, express or implied, including
* warranties of performance, merchantability or fitness for any particular
* purpose.
*
* Please cite the author in any work or product based on this material.
*
* ===========================================================================
*
* Author: Aaron Ucko
*
* File Description:
* Protein alignment score matrices; shared between the two toolkits.
*
*/
#include <util/tables/raw_scoremat.h>
#include <ctype.h>
#include <string.h>
#include "sm_blosum45.c"
#include "sm_blosum62.c"
#include "sm_blosum80.c"
#include "sm_pam30.c"
#include "sm_pam70.c"
static const char kNCBIstdaa[] = "-ABCDEFGHIKLMNPQRSTVWXYZU*";
int NCBISM_GetIndex(const SNCBIPackedScoreMatrix* sm, int aa)
{
const char *p;
/* Translate to NCBIeaa */
if (aa >= 0 && aa < sizeof(kNCBIstdaa)) {
aa = kNCBIstdaa[aa];
} else if (islower(aa)) {
aa = toupper(aa);
}
p = strchr(sm->symbols, aa);
return p ? p - sm->symbols : -1;
}
TNCBIScore NCBISM_GetScore(const SNCBIPackedScoreMatrix* sm,
int aa1, int aa2)
{
int i1, i2;
i1 = NCBISM_GetIndex(sm, aa1);
i2 = NCBISM_GetIndex(sm, aa2);
if (i1 >=0 && i2 >= 0) {
return sm->scores[i1 * strlen(sm->symbols) + i2];
} else {
return sm->defscore;
}
}
void NCBISM_Unpack(const SNCBIPackedScoreMatrix* psm,
SNCBIFullScoreMatrix* fsm)
{
const char* sym;
int dim, i, j, aa1, aa2;
sym = psm->symbols;
dim = strlen(sym);
/* fill with default */
memset(&fsm->s, psm->defscore, NCBI_FSM_DIM * NCBI_FSM_DIM);
for (i = 0; i < dim; ++i) {
aa1 = sym[i];
/* get core (NCBIeaa x NCBIeaa) */
for (j = 0; j < dim; ++j) {
aa2 = sym[j];
fsm->s[aa1][aa2] = psm->scores[i * dim + j];
}
/* extend horizontally */
for (aa2 = 0; aa2 < sizeof(kNCBIstdaa); ++aa2) {
fsm->s[aa1][aa2] = fsm->s[aa1][(int)kNCBIstdaa[aa2]];
}
for (aa2 = 'a'; aa2 <= 'z'; ++aa2) {
fsm->s[aa1][aa2] = fsm->s[aa1][toupper(aa2)];
}
}
/* extend vertically */
for (aa1 = 0; aa1 < sizeof(kNCBIstdaa); ++aa1) {
memcpy(fsm->s[aa1], fsm->s[(int)kNCBIstdaa[aa1]], NCBI_FSM_DIM);
}
for (aa1 = 'a'; aa1 <= 'z'; ++aa1) {
memcpy(fsm->s[aa1], fsm->s[toupper(aa1)], NCBI_FSM_DIM);
}
}
/*
* ===========================================================================
* $Log: raw_scoremat.c,v $
* Revision 1.2 2003/10/02 15:37:34 ivanov
* Get rid of compilation warnings
*
* Revision 1.1 2003/08/21 19:48:20 ucko
* Add tables library (shared with C) for raw score matrices, etc.
*
* ===========================================================================
*/
|