コード例 #1
0
ファイル: stats.cpp プロジェクト: PoRTiLo/Projekt-IMS
void SCStat::PrintStatAll() {

	PrintMain();
	PrintPlace();
	PrintTransition();
	PrintDirected();
	PrintEnd();
}
コード例 #2
0
ファイル: display.c プロジェクト: Denis84/EPA-WorkBench
/* Function: DisplayPlan7PostAlign()
 *
 * Purpose:  Print out posterior transition probabilities
 *           in modelpost format, for any set of alignments.
 *           
 * Args:     L         - the length of the sequence
 *           hmm       - the model
 *           forward   - forward matrix
 *           backward  - backward matrix
 *           alignment - array of traces
 *           A         - size of alignment array
 *           
 * Return:   void
 *
 */
void DisplayPlan7PostAlign(int L, struct plan7_s *hmm,
			   struct dpmatrix_s *forward,
			   struct dpmatrix_s *backward,
			   struct p7trace_s **alignment,
			   int A)
{
  int sc;
  int i;
  int j;
  int k;
  int kmin;
  int kmax;
  int* min;
  int* max;
  int* on;
  char state;

  sc = forward->xmx[L][XMC] + hmm->xsc[XTC][MOVE];     /* total Forward score */

  min = (int*) calloc (A, sizeof(int));
  max = (int*) calloc (A, sizeof(int));
  on  = (int*) calloc (A, sizeof(int));

  for (i = 0; i <= L; i++)
    {
      for (j = 0; j < A; j++) {
	while (alignment[j]->pos[min[j]] < i - 1 && min[j] < alignment[j]->tlen - 1)
	  min[j]++;

	while (alignment[j]->pos[max[j]] <= i + 1 && max[j] < alignment[j]->tlen - 1)
	  max[j]++;
      }

      for (state = STM; state <= STJ; state++)
	{
	  if (state == STM || state == STB)
	    {
	      kmin = 1;
	      kmax = hmm->M;
	    }
	  else if (state == STD)
	    {
	      kmin = 2;
	      kmax = hmm->M - 1;
	    }
	  else if (state == STI)
	    {
	      kmin = 1;
	      kmax = hmm->M - 1;
	    }
	  else
	    kmin = kmax = 0;
	  
	  for (k = kmin; k <= kmax; k++)
	    {
	      switch (state)
		{
		case STM:
		  if (i<L && k<hmm->M)
		    PrintTransition (STM,i,k, STM,i+1,k+1,
				     forward->mmx[i][k] + hmm->tsc[k][TMM] + backward->mmx[i+1][k+1] - sc,
				     alignment, min, max, on, A);

		  if (i<L && k<hmm->M)
		    PrintTransition (STM,i,k, STI,i+1,k,
				     forward->mmx[i][k] + hmm->tsc[k][TMI] + backward->imx[i+1][k] - sc,
				     alignment, min, max, on, A);

		  if (k<hmm->M-1)
		    PrintTransition (STM,i,k, STD,i,k+1,
				     forward->mmx[i][k] + hmm->tsc[k][TMD] + backward->dmx[i][k+1] - sc,
				     alignment, min, max, on, A);
		  
		  PrintTransition (STM,i,k, STE,i,0,
				   forward->mmx[i][k] + hmm->esc[k] + backward->xmx[i][XME] - sc,
				   alignment, min, max, on, A);
		  break;

		case STD:
		  if (i<L)
		    PrintTransition (STD,i,k, STM,i+1,k+1,
				     forward->dmx[i][k] + hmm->tsc[k][TDM] + backward->mmx[i+1][k+1] - sc,
				     alignment, min, max, on, A);

		  PrintTransition (STD,i,k, STD,i,k+1,
				   forward->dmx[i][k] + hmm->tsc[k][TDD] + backward->dmx[i][k+1] - sc,
				   alignment, min, max, on, A);

		  break;

		case STI:
		  if (i<L)
		    PrintTransition (STI,i,k, STM,i+1,k+1,
				     forward->imx[i][k] + hmm->tsc[k][TIM] + backward->mmx[i+1][k+1] - sc,
				     alignment, min, max, on, A);

		  if (i<L)
		    PrintTransition (STI,i,k, STI,i+1,k,
				     forward->imx[i][k] + hmm->tsc[k][TII] + backward->imx[i+1][k] - sc,
				     alignment, min, max, on, A);

		  break;

		case STB:
		  if (i<L)
		    PrintTransition (STB,i,0, STM,i+1,k,
				     forward->xmx[i][XMB] + hmm->bsc[k] + backward->mmx[i+1][k] - sc,
				     alignment, min, max, on, A);
		  break;
		  
		default:
		  break;

		}
	    }

	  switch (state)
	    {
	    case STN:
	      PrintTransition (STN,i,0, STB,i,0,
			       forward->xmx[i][XMN] + hmm->xsc[XTN][MOVE] + backward->xmx[i][XMB] - sc,
			       alignment, min, max, on, A);
	      
	      if (i<L)
		PrintTransition (STN,i,0, STN,i+1,0,
				 forward->xmx[i][XMN] + hmm->xsc[XTN][LOOP] + backward->xmx[i+1][XMN] - sc,
				 alignment, min, max, on, A);
	      break;

	    case STJ:
	      PrintTransition (STJ,i,0, STB,i,0,
			       forward->xmx[i][XMJ] + hmm->xsc[XTJ][MOVE] + backward->xmx[i][XMB] - sc,
			       alignment, min, max, on, A);
	      
	      if (i<L)
		PrintTransition (STJ,i,0, STJ,i+1,0,
				 forward->xmx[i][XMJ] + hmm->xsc[XTJ][LOOP] + backward->xmx[i+1][XMJ] - sc,
				 alignment, min, max, on, A);
	      break;

	    case STC:
	      PrintTransition (STC,i,0, STT,i,0,
			       forward->xmx[i][XMC] + hmm->xsc[XTC][MOVE] - sc,      /* should be 1 */
			       alignment, min, max, on, A);
	      
	      if (i<L)
		PrintTransition (STC,i,0, STC,i+1,0,
				 forward->xmx[i][XMC] + hmm->xsc[XTC][LOOP] + backward->xmx[i+1][XMC] - sc,
				 alignment, min, max, on, A);
	      break;

	    case STE:
	      PrintTransition (STE,i,0, STC,i,0,
			       forward->xmx[i][XME] + hmm->xsc[XTE][MOVE] + backward->xmx[i][XMC] - sc,
			       alignment, min, max, on, A);
	      
	      PrintTransition (STE,i,0, STJ,i,0,
			       forward->xmx[i][XME] + hmm->xsc[XTE][LOOP] + backward->xmx[i][XMJ] - sc,
			       alignment, min, max, on, A);
	      break;
	      
	    case STS:
	      if (i == 0)
		PrintTransition (STS,i,0, STN,i,0,
				 backward->xmx[i][XMN] - sc,          /* should be 1 */
				 alignment, min, max, on, A);
	      break;

	    case STM:
	    case STD:
	    case STI:
	    case STB:
	    case STT:
	      break;

	    default:
	      Die ("unknown state");

	    }
	}
    }

  free (min);
  free (max);
  free (on);

}