summaryrefslogtreecommitdiff
path: root/util/tables/raw_scoremat.c
blob: d0c4e47d9a3dd9d2a0b0977a861b0cdc9253e7dc (plain)
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.
 *
 * ===========================================================================
 */