source: branches/profile/GDE/MUSCLE/src/tomhydro.cpp

Last change on this file was 10390, checked in by aboeckma, 11 years ago

added muscle sourcles amd makefile

File size: 2.4 KB
Line 
1#include "muscle.h"
2#include "profile.h"
3
4// Original:
5//HYDROPHILIC_CONTEXT 0 6 -0.3969495574
6//HYDROPHILIC_CONTEXT 1 6 -0.9407126603
7//HYDROPHILIC_CONTEXT 2 6 -0.4968150972
8//HYDROPHILIC_CONTEXT 3 6 -0.271646023
9//HYDROPHILIC_CONTEXT 4 6 0.006990406416
10//HYDROPHILIC_CONTEXT 5 6 0.1381111256
11//HYDROPHILIC_CONTEXT 6 6 0.2541439872
12
13// Blosum62:
14//HYDROPHILIC_CONTEXT 0 6 -0.2448419585
15//HYDROPHILIC_CONTEXT 1 6 -0.8734889946
16//HYDROPHILIC_CONTEXT 2 6 -0.5724336598
17//HYDROPHILIC_CONTEXT 3 6 -0.2670439975
18//HYDROPHILIC_CONTEXT 4 6 0.004844647323
19//HYDROPHILIC_CONTEXT 5 6 0.1812057148
20//HYDROPHILIC_CONTEXT 6 6 0.1036540864
21
22static SCORE Factors[7] =
23        {
24        (SCORE) -0.2448419585,
25        (SCORE) -0.8734889946,
26        (SCORE) -0.5724336598,
27        (SCORE) -0.2670439975,
28        (SCORE) 0.004844647323,
29        (SCORE) 0.1812057148,
30        (SCORE) 0.1036540864
31        };
32
33static bool Hydrophilic[20] =
34        {
35        false,          // A
36        false,          // C
37        true,           // D
38        true,           // E
39        false,          // F
40        true,           // G
41        false,          // H
42        false,          // I
43        true,           // K
44        false,          // L
45        false,          // M
46        true,           // N
47        true,           // P
48        true,           // Q
49        true,           // R
50        true,           // S
51        false,          // T
52        false,          // V
53        false,          // Y
54        false,          // W
55        };
56
57bool IsHydrophilic(const FCOUNT fcCounts[])
58        {
59        for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
60                if (fcCounts[uLetter] > 0.0 && Hydrophilic[uLetter])
61                        return false;
62        return true;
63        }
64
65static double HydrophilicFraction(const FCOUNT fcCounts[])
66        {
67        double TotalAll = 0.0;
68        double TotalHydrophilic = 0.0;
69        for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
70                {
71                FCOUNT Freq = fcCounts[uLetter];
72                TotalAll += Freq;
73                if (Hydrophilic[uLetter])
74                        TotalHydrophilic += Freq;
75                }
76        return TotalHydrophilic / TotalAll;
77        }
78
79void TomHydro(ProfPos *Prof, unsigned uLength)
80        {
81        if (ALPHA_Amino != g_Alpha)
82                return;
83        if (uLength < 6)
84                return;
85
86        for (unsigned uColIndex = 3; uColIndex < uLength - 2; ++uColIndex)
87                {
88        // 6-residue window:
89        //       xxxxxx
90        //      AARNCARNGTAGCATNAC
91        //      AARN----------TNAC
92
93                double dCount = 0.0;
94                for (unsigned uColIndexW = uColIndex - 3; uColIndexW < uColIndex + 3;
95                  ++uColIndexW)
96                        {
97                        const ProfPos &PP = Prof[uColIndexW];
98                        dCount += HydrophilicFraction(PP.m_fcCounts);
99                        }
100        // Round to nearest integer
101                unsigned uCount = (unsigned) (dCount + 0.5);
102                if (uCount > 6)
103                        uCount = 6;
104                SCORE dFactor = Factors[uCount];
105                ProfPos &PP = Prof[uColIndex];
106                PP.m_scoreGapOpen += dFactor;
107                PP.m_scoreGapClose += dFactor;
108                }
109        }
Note: See TracBrowser for help on using the repository browser.