tomhydro.cpp
来自「unix,linux下编译。用于蛋白质」· C++ 代码 · 共 110 行
CPP
110 行
#include "muscle.h"
#include "profile.h"
// Original:
//HYDROPHILIC_CONTEXT 0 6 -0.3969495574//HYDROPHILIC_CONTEXT 1 6 -0.9407126603//HYDROPHILIC_CONTEXT 2 6 -0.4968150972//HYDROPHILIC_CONTEXT 3 6 -0.271646023//HYDROPHILIC_CONTEXT 4 6 0.006990406416//HYDROPHILIC_CONTEXT 5 6 0.1381111256//HYDROPHILIC_CONTEXT 6 6 0.2541439872
// Blosum62:
//HYDROPHILIC_CONTEXT 0 6 -0.2448419585//HYDROPHILIC_CONTEXT 1 6 -0.8734889946//HYDROPHILIC_CONTEXT 2 6 -0.5724336598//HYDROPHILIC_CONTEXT 3 6 -0.2670439975//HYDROPHILIC_CONTEXT 4 6 0.004844647323//HYDROPHILIC_CONTEXT 5 6 0.1812057148//HYDROPHILIC_CONTEXT 6 6 0.1036540864static SCORE Factors[7] =
{
(SCORE) -0.2448419585, (SCORE) -0.8734889946, (SCORE) -0.5724336598, (SCORE) -0.2670439975, (SCORE) 0.004844647323, (SCORE) 0.1812057148, (SCORE) 0.1036540864 };
static bool Hydrophilic[20] =
{
false, // A
false, // C
true, // D
true, // E
false, // F
true, // G
false, // H
false, // I
true, // K
false, // L
false, // M
true, // N
true, // P
true, // Q
true, // R
true, // S
false, // T
false, // V
false, // Y
false, // W
};
bool IsHydrophilic(const FCOUNT fcCounts[])
{
for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
if (fcCounts[uLetter] > 0.0 && Hydrophilic[uLetter])
return false;
return true;
}
static double HydrophilicFraction(const FCOUNT fcCounts[])
{
double TotalAll = 0.0;
double TotalHydrophilic = 0.0;
for (unsigned uLetter = 0; uLetter < 20; ++uLetter)
{
FCOUNT Freq = fcCounts[uLetter];
TotalAll += Freq;
if (Hydrophilic[uLetter])
TotalHydrophilic += Freq;
}
return TotalHydrophilic / TotalAll;
}
void TomHydro(ProfPos *Prof, unsigned uLength)
{
if (ALPHA_Amino != g_Alpha)
return;
if (uLength < 6)
return;
for (unsigned uColIndex = 3; uColIndex < uLength - 2; ++uColIndex)
{
// 6-residue window:
// xxxxxx
// AARNCARNGTAGCATNAC
// AARN----------TNAC
double dCount = 0.0;
for (unsigned uColIndexW = uColIndex - 3; uColIndexW < uColIndex + 3;
++uColIndexW)
{
const ProfPos &PP = Prof[uColIndexW];
dCount += HydrophilicFraction(PP.m_fcCounts);
}
// Round to nearest integer
unsigned uCount = (unsigned) (dCount + 0.5);
if (uCount > 6)
uCount = 6;
SCORE dFactor = Factors[uCount];
ProfPos &PP = Prof[uColIndex];
PP.m_scoreGapOpen += dFactor;
PP.m_scoreGapClose += dFactor;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?