void SCStat::PrintStatAll() { PrintMain(); PrintPlace(); PrintTransition(); PrintDirected(); PrintEnd(); }
/* 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); }