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

📄 debug.c

📁 hmmer源程序
💻 C
字号:
/***************************************************************** * HMMER - Biological sequence analysis with profile HMMs * Copyright (C) 1992-1999 Washington University School of Medicine * All Rights Reserved *  *     This source code is distributed under the terms of the *     GNU General Public License. See the files COPYING and LICENSE *     for details. *****************************************************************//* debug.c * Thu Nov 21 09:58:05 1996 *  * Printing out or naming various useful things from HMMER * innards. *  * CVS $Id: debug.c,v 1.11 2000/12/24 22:55:18 eddy Exp $ */#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <ctype.h>#include "structs.h"#include "config.h"#include "funcs.h" #include "squid.h"/* Function: Statetype() *  * Purpose:  Returns the state type in text. * Example:  Statetype(S) = "S" */char *Statetype(char st){  switch (st) {  case STS: return "S";  case STN: return "N";  case STB: return "B";  case STM: return "M";  case STD: return "D";  case STI: return "I";  case STE: return "E";  case STJ: return "J";  case STC: return "C";  case STT: return "T";  default: return "BOGUS";  }}/* Function: AlphabetType2String() * Date:     SRE, Sun Dec 24 11:33:40 2000 [St. Louis] * * Purpose:  Returns a string "protein" for hmmAMINO, *           "nucleic acid" for hmmNUCLEIC, etc... used  *           for formatting diagnostics. * * Args:     type - Alphabet type, e.g. hmmAMINO * * Returns:  char * */char *AlphabetType2String(int type){  switch (type) {  case hmmAMINO:     return "protein";  case hmmNUCLEIC:   return "nucleic acid";  case hmmNOTSETYET: return "unknown";  default:           return "BOGUS";  }}/* Function: P7PrintTrace() *  * Purpose:  Print out a traceback structure. *           If hmm is non-NULL, also print transition and emission scores. *            * Args:     fp  - stderr or stdout, often *           tr  - trace structure to print *           hmm - NULL or hmm containing scores to print *           dsq - NULL or digitized sequence trace refers to.                 */voidP7PrintTrace(FILE *fp, struct p7trace_s *tr, struct plan7_s *hmm, char *dsq){  int tpos;			/* counter for trace position */  int sym;  int sc;   if (hmm == NULL) {    fprintf(fp, "st  node   rpos  - traceback len %d\n", tr->tlen);    fprintf(fp, "--  ---- ------\n");    for (tpos = 0; tpos < tr->tlen; tpos++) {      fprintf(fp, "%1s  %4d %6d\n", 	      Statetype(tr->statetype[tpos]),	      tr->nodeidx[tpos],	      tr->pos[tpos]);    }   } else {    if (!(hmm->flags & PLAN7_HASBITS))      Die("oi, you can't print scores from that hmm, it's not ready.");    sc = 0;    fprintf(fp, "st  node   rpos  transit emission - traceback len %d\n", tr->tlen);    fprintf(fp, "--  ---- ------  ------- --------\n");    for (tpos = 0; tpos < tr->tlen; tpos++) {      if (dsq != NULL) sym = (int) dsq[tr->pos[tpos]];      fprintf(fp, "%1s  %4d %6d  %7d", 	      Statetype(tr->statetype[tpos]),	      tr->nodeidx[tpos],	      tr->pos[tpos],	      (tpos < tr->tlen-1) ? 	      TransitionScoreLookup(hmm, tr->statetype[tpos], tr->nodeidx[tpos],				    tr->statetype[tpos+1], tr->nodeidx[tpos+1]) : 0);      if (tpos < tr->tlen-1)	sc += TransitionScoreLookup(hmm, tr->statetype[tpos], tr->nodeidx[tpos],				    tr->statetype[tpos+1], tr->nodeidx[tpos+1]);      if (dsq != NULL) {	if (tr->statetype[tpos] == STM)  	  {	    fprintf(fp, " %8d %c", hmm->msc[sym][tr->nodeidx[tpos]], 		    Alphabet[sym]);	    sc += hmm->msc[sym][tr->nodeidx[tpos]];	  }	else if (tr->statetype[tpos] == STI) 	  {	    fprintf(fp, " %8d %c", hmm->isc[sym][tr->nodeidx[tpos]], 		    (char) tolower((int) Alphabet[sym]));	    sc += hmm->isc[sym][tr->nodeidx[tpos]];	  }	else if ((tr->statetype[tpos] == STN && tr->statetype[tpos-1] == STN) ||		 (tr->statetype[tpos] == STC && tr->statetype[tpos-1] == STC) ||		 (tr->statetype[tpos] == STJ && tr->statetype[tpos-1] == STJ))	  {	    fprintf(fp, " %8d %c", 0, (char) tolower((int) Alphabet[sym]));	  }      } else {	fprintf(fp, " %8s %c", "-", '-');      }      fputs("\n", fp);    }    fprintf(fp, "                 ------- --------\n");    fprintf(fp, "           total: %6d\n\n", sc);  }}/* Function: P7PrintPrior() *  * Purpose:  Print out a Plan 7 prior structure. */voidP7PrintPrior(FILE *fp, struct p7prior_s *pri){  int q, x;			/* counters for mixture component, element */    if      (pri->strategy == PRI_DCHLET) fputs("Dirichlet\n", fp);  else if (pri->strategy == PRI_PAM)    fputs("PAM\n", fp);  else Die("No such strategy.");    if      (Alphabet_type == hmmAMINO)   fputs("Amino\n", fp);  else if (Alphabet_type == hmmNUCLEIC) fputs("Nucleic\n", fp);  /* Transitions   */  fprintf(fp, "\n%d\n", pri->tnum);  for (q = 0; q < pri->tnum; q++)    {      fprintf(fp, "%.4f\n", pri->tq[q]);      for (x = 0; x < 7; x++)	fprintf(fp, "%.4f ", pri->t[q][x]);      fputs("\n", fp);    }  /* Match emissions   */  fprintf(fp, "\n%d\n", pri->mnum);  for (q = 0; q < pri->mnum; q++)    {      fprintf(fp, "%.4f\n", pri->mq[q]);      for (x = 0; x < Alphabet_size; x++)	fprintf(fp, "%.4f ", pri->m[q][x]);      fputs("\n", fp);    }  /* Insert emissions   */  fprintf(fp, "\n%d\n", pri->inum);  for (q = 0; q < pri->inum; q++)    {      fprintf(fp, "%.4f\n", pri->iq[q]);      for (x = 0; x < Alphabet_size; x++)	fprintf(fp, "%.4f ", pri->i[q][x]);      fputs("\n", fp);    }}/* Function: TraceVerify() * Date:     SRE, Mon Feb  2 07:48:52 1998 [St. Louis] * * Purpose:  Check a traceback structure for internal consistency. *           Used in Shiva testsuite, for example. * * Args:     tr  - traceback to verify *           M   - length of HMM *           N   - length of sequence       * * Returns:  1 if OK. 0 if not. */intTraceVerify(struct p7trace_s *tr, int M, int N){  int tpos;			/* position in trace                  */  int k;			/* current position in HMM nodes 1..M */  int i;			/* current position in seq 1..N       */  int nn, nc, nj;		/* number of STN's, STC's, STJ's seen */  int nm;			/* number of STM's seen */    /* Basic checks on ends.   */  if (tr->statetype[0] != STS)          return 0;  if (tr->statetype[1] != STN)          return 0;  if (tr->statetype[tr->tlen-2] != STC) return 0;  if (tr->statetype[tr->tlen-1] != STT) return 0;  if (tr->pos[1] != 0)                  return 0;  /* Check for consistency throughout trace   */  k = i = nn = nc = nj = nm = 0;  for (tpos = 0; tpos < tr->tlen; tpos++)    {      switch (tr->statetype[tpos]) {      case STS:	if (tr->nodeidx[tpos] != 0) return 0;	if (tr->pos[tpos]     != 0) return 0;	if (k != 0)                 return 0;	if (i != 0)                 return 0;	if (tpos != 0)              return 0;	break;      case STN:			/* first N doesn't emit. */	if (tr->nodeidx[tpos] != 0) return 0;	if (k != 0)                 return 0;	if (nn > 0)	  {	    if (tr->pos[tpos] != i+1) return 0;	    i++;	  }	else 	  {	    if (tr->pos[tpos] != 0) return 0;	    if (i != 0)             return 0;	  }	nn++;	break;      case STB:	if (tr->nodeidx[tpos] != 0) return 0;	if (tr->pos[tpos]     != 0) return 0;	nm = 0;	break;      case STM:			/* can enter anywhere on first M */	if (tr->pos[tpos] != i+1) return 0;	if (tr->nodeidx[tpos] < 1 || tr->nodeidx[tpos] > M) return 0;	i++;	if (nm == 0)  k = tr->nodeidx[tpos];	else {	  if (tr->nodeidx[tpos] != k+1) return 0;	  k++;	}	nm++;	break;      case STI:	if (tr->pos[tpos] != i+1)   return 0;	if (tr->nodeidx[tpos] != k) return 0;	if (tr->nodeidx[tpos] < 1 || tr->nodeidx[tpos] > M-1) return 0;	if (k >= M)                 return 0;	i++;	break;      case STD:	if (tr->pos[tpos] != 0)       return 0;	if (tr->nodeidx[tpos] != k+1) return 0;	if (tr->nodeidx[tpos] < 1 || tr->nodeidx[tpos] > M) return 0;	k++;	break;      case STE:	if (tr->nodeidx[tpos] != 0) return 0;	if (tr->pos[tpos]     != 0) return 0;	nj = 0;	break;      case STJ:	if (tr->nodeidx[tpos] != 0) return 0;	if (nj > 0)	  {	    if (tr->pos[tpos] != i+1) return 0;	    i++;	  }	else if (tr->pos[tpos] != 0) return 0;	nj++;	break;      case STC:	if (tr->nodeidx[tpos] != 0) return 0;	if (nc > 0)	  {	    if (tr->pos[tpos] != i+1) return 0;	    i++;	  }	else if (tr->pos[tpos] != 0)  return 0;	nc++;	break;      case STT:	if (tpos != tr->tlen - 1)   return 0;	if (tr->nodeidx[tpos] != 0) return 0;	if (tr->pos[tpos]     != 0) return 0;	if (i != N)                 return 0;	break;      case STBOGUS:      default:	return 0;      }	/* end switch over statetypes */    } /* end loop over trace positions */  return 1;}/* Function: TraceCompare() * Date:     SRE, Wed Mar  4 17:26:49 1998 [St. Louis] * * Purpose:  Compare two tracebacks; return 1 if they're *           identical, else 0. Written for Shiva testsuite. * * Args:     t1 - first trace *           t2 - second trace      * * Returns:  1 if identical; 0 elsewise */intTraceCompare(struct p7trace_s *t1, struct p7trace_s *t2){  int tpos;  if (t1->tlen != t2->tlen) return 0;  for (tpos = 0; tpos < t1->tlen; tpos++)    {      if (t1->statetype[tpos] != t2->statetype[tpos]) return 0;      if (t1->nodeidx[tpos]   != t2->nodeidx[tpos])   return 0;      if (t1->pos[tpos]       != t2->pos[tpos])       return 0;    }  return 1;}

⌨️ 快捷键说明

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