⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rna_algebra.h

📁 ViennaRNA-1.6.1
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _RNA_ALGEBRA_H_#define _RNA_ALGEBRA_H_
#include <assert.h>#include <algorithm>#include "algebra.h"#include "debug.h"#include "misc.h"#include "rna_alphabet.h"#include "rnaforester_options.h"/* ****************************************** *//*          Definitions and typedefs          *//* ****************************************** */const double DBL_NEG = -100000000.0;		// the values from limits.h caused problems..const double DBL_POS = 100000000.0;typedef Algebra<double,RNA_Alphabet_Profile> DoubleScoreProfileAlgebraType;
typedef Algebra<int,RNA_Alphabet> IntScore_AlgebraType;typedef RNA_Algebra<int,RNA_Alphabet> IntScoreRNA_AlgebraType;typedef SZAlgebra<int,RNA_Alphabet> IntScoreSZAlgebraType;/* ****************************************** *//*                 Class Score                *//* ****************************************** *//** Class Score reads scoring parameters from RNAforester command line. */class Score{ private:  bool m_isDistance;  bool m_isLocal;
  bool m_isRIBOSUM; public:  int m_bp_rep_score;  int m_bp_del_score;  int m_b_match_score;  int m_b_rep_score;  int m_b_del_score;  Score(RNAforesterOptions &options);  Score(const Score &s);  void print();};/* ****************************************** *//*            RNA Algebra Classes             *//* ****************************************** *//** Similarity algebra for RNA forests */class IntSimiRNA_Algebra : public IntScoreRNA_AlgebraType{ private:  Score m_s;   public:  int empty() const {return 0;};  int replacepair(RNA_Alphabet la, RNA_Alphabet lb, int down, RNA_Alphabet ra, RNA_Alphabet rb, int over) const    {      return m_s.m_bp_rep_score+down+over;    };  int replace(RNA_Alphabet a,int down, RNA_Alphabet b, int over) const  {    if(a==ALPHA_BASEPAIR && b == ALPHA_BASEPAIR)      return m_s.m_bp_rep_score+down+over;    else      {	if(a==ALPHA_BASEPAIR || b==ALPHA_BASEPAIR)	  return INT_MIN/4;	else	  {	    if(a==b)	      return m_s.m_b_match_score+down+over;	    else	      return m_s.m_b_rep_score+down+over;	  }      }	       };  int del(RNA_Alphabet a,int down, int over) const  {    if(a==ALPHA_BASEPAIR)      return m_s.m_bp_del_score+down+over;    else      return m_s.m_b_del_score+down+over;  };  int insert(int down,RNA_Alphabet b,int over) const  {    if(b==ALPHA_BASEPAIR)     return m_s.m_bp_del_score+down+over;    else      return m_s.m_b_del_score+down+over;  };  int choice(int a, int  b) const  {
	  return max(a,b);
  };  int worst_score() const  {    return INT_MIN;  };  IntSimiRNA_Algebra(const Score &s)    : m_s(s) {};};/** Distance algebra for RNA forests */class IntDistRNA_Algebra : public IntScoreRNA_AlgebraType{ private:  Score m_s; public:  int empty() const {return 0;};  int replacepair(RNA_Alphabet la, RNA_Alphabet lb, int down, RNA_Alphabet ra, RNA_Alphabet rb, int over) const    {      return m_s.m_bp_rep_score+down+over;    };  int replace(RNA_Alphabet a,int down, RNA_Alphabet b, int over) const  {    if(a==ALPHA_BASEPAIR && b == ALPHA_BASEPAIR)      return m_s.m_bp_rep_score+down+over;    else      {	if(a==ALPHA_BASEPAIR || b==ALPHA_BASEPAIR)	  return INT_MAX/4;	else	  {	    if(a==b)	      return m_s.m_b_match_score+down+over;	    else	      return m_s.m_b_rep_score+down+over;	  }      }	       };  int del(RNA_Alphabet a,int down,int over) const  {    if(a==ALPHA_BASEPAIR)      return m_s.m_bp_del_score+down+over;    else      return m_s.m_b_del_score+down+over;  };  int insert(int down,RNA_Alphabet b,int over) const  {    if(b==ALPHA_BASEPAIR)      return m_s.m_bp_del_score+down+over;    else      return m_s.m_b_del_score+down+over;  };  int choice(int a, int  b) const  {
	  return min(a,b);
  };  int worst_score() const  {    return INT_MAX;  };  IntDistRNA_Algebra(const Score &s)    : m_s(s) {};};/** RIBOSUM85-60 matrix published in RSEARCH: Finding homologs of single structured RNA sequences *  R. Klein and S. Eddy, BMC Bioinformatics 2003 Vol.4 */class RIBOSUM8560 : public IntScoreRNA_AlgebraType{ private:  Score m_s;  int m_baseSubstMtrx[4][4];  int m_basepairSubstMtrx[4][4][4][4]; public:  int empty() const {return 0;};  int replacepair(RNA_Alphabet la, RNA_Alphabet lb, int down, RNA_Alphabet ra, RNA_Alphabet rb, int over) const    {      int i,j,k,l;      i=alpha2RNA_Alpha(la);      j=alpha2RNA_Alpha(ra);      k=alpha2RNA_Alpha(lb);      l=alpha2RNA_Alpha(rb);      return m_basepairSubstMtrx[i][j][k][l]+down+over;    };  int replace(RNA_Alphabet a,int down, RNA_Alphabet b, int over) const  {    assert(!(a==ALPHA_BASEPAIR && b==ALPHA_BASEPAIR));        if(a==ALPHA_BASEPAIR || b==ALPHA_BASEPAIR)      return INT_MIN/4;    else      {	int i,j;	i=alpha2RNA_Alpha(a);	j=alpha2RNA_Alpha(b);		return m_baseSubstMtrx[i][j]+down+over;      }  };  int del(RNA_Alphabet a,int down, int over) const  {    if(a==ALPHA_BASEPAIR)      return m_s.m_bp_del_score+down+over;    else      return m_s.m_b_del_score+down+over;  };  int insert(int down,RNA_Alphabet b,int over) const  {    if(b==ALPHA_BASEPAIR)     return m_s.m_bp_del_score+down+over;    else      return m_s.m_b_del_score+down+over;  };  int choice(int a, int  b) const  {    return max(a,b);  };  int worst_score() const  {    return INT_MIN;  };  RIBOSUM8560(const Score &s)    : m_s(s)    {      int i,j,k,l;      // set substitution matrices      // base replacement      m_baseSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_A]=222;      m_baseSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_C]=-186;      m_baseSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_G]=-146;      m_baseSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U]=-139;      m_baseSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_C]=116;      m_baseSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G]=-248;      m_baseSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_U]=-105;      m_baseSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_G]=103;      m_baseSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U]=-174;      m_baseSubstMtrx[ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_U]=165;      // copy triangle      for(i=0;i<=ALPHA_PRO_BASE_U;i++)	for(j=0;j<i;j++)	  m_baseSubstMtrx[i][j]=m_baseSubstMtrx[j][i];	        // basepair replacement      // set default score. This score should never be used since the scores for canonical basepairs are defined later      for(i=0;i<=ALPHA_PRO_BASE_U;i++)	for(j=0;j<=ALPHA_PRO_BASE_U;j++)	  for(k=i;k<=ALPHA_PRO_BASE_U;k++)	    for(l=j;l<=ALPHA_PRO_BASE_U;l++)	      m_basepairSubstMtrx[i][j][k][l]=-1000;      m_basepairSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U]=449;      m_basepairSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G]=167;      m_basepairSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C]=270;      m_basepairSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U]=59;      m_basepairSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A]=161;      m_basepairSubstMtrx[ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G]=-51;            m_basepairSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G]=536;      m_basepairSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C]=211;      m_basepairSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U]=-27;      m_basepairSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A]=275;      m_basepairSubstMtrx[ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G]=132;      m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C]=562;      m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U]=121;      m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A]=167;      m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_C][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G]=-8;            m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U]=347;      m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A]=-57;      m_basepairSubstMtrx[ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G]=-209;      m_basepairSubstMtrx[ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A]=497;      m_basepairSubstMtrx[ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_A][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G]=114;      m_basepairSubstMtrx[ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G][ALPHA_PRO_BASE_U][ALPHA_PRO_BASE_G]=336;      // copy triangle      for(i=0;i<=ALPHA_PRO_BASE_U;i++)	for(j=0;j<=ALPHA_PRO_BASE_U;j++)	  for(k=0;k<=ALPHA_PRO_BASE_U;k++)	    for(l=0;l<=ALPHA_PRO_BASE_U;l++)	      if(k<i || (k==i && l<j))		m_basepairSubstMtrx[i][j][k][l]=m_basepairSubstMtrx[k][l][i][j];    };};/* ****************************************** *//*        RNA Profile Algebra Classes         *//* ****************************************** *//** Similarity algebra for RNA profile forests */class DoubleSimiProfileAlgebra : public DoubleScoreProfileAlgebraType{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -