double Full_Window_Prob (struct ICM_t icm, const char * string, int frame) { double prob; int num_node, i, pos, sub; num_node = 0; for (i = 0; i < icm.model_depth; i ++) { pos = icm.score [frame] [num_node] . mut_info_pos; if (pos == -1) break; if (pos < -1) // No information here or below in tree, go back up // Shouldn't happen { num_node = PARENT (num_node); pos = icm.score [frame] [num_node] . mut_info_pos; break; } sub = Subscript (string [pos]); num_node = (num_node * ALPHABETSIZE) + sub + 1; } pos = icm.score [frame] [num_node] . mut_info_pos; if (pos < -1) { num_node = PARENT (num_node); pos = icm.score [frame] [num_node] . mut_info_pos; } sub = Subscript (string [icm.model_len - 1]); prob = (double) icm.score [frame] [num_node] . prob [sub]; if (pos < -1) { fprintf (stderr, "WARNING: prob = %.4f pos = %d in Full_Window_Prob\n", prob, pos); fprintf (stderr, "num_node = %d\n", num_node); } return prob; }
void DtSubscript( void ) { //===================== // Data initialize an array element. intstar4 offset; InitVar = GetPtr(); if( !Subscript( InitVar->u.ns.si.va.u.dim_ext, &offset ) ) { NameStmtErr( EV_SSCR_INVALID, InitVar, PR_DATA ); } DtOffset = offset * _SymSize( InitVar ); if( InitVar->u.ns.u1.s.typ != FT_STRUCTURE ) { DtItemSize = InitVar->u.ns.xt.size; } }
void DtFieldSubscript( void ) { //========================== // Data initialize an array element within a structure. sym_id fd; intstar4 offset; intstar4 base; char name[MAX_SYMLEN+1]; base = DXPop(); fd = GetPtr(); if( Subscript( fd->u.fd.dim_ext, &offset ) ) { if( fd->u.fd.typ == FT_STRUCTURE ) { offset *= fd->u.fd.xt.record->size; } else { offset *= fd->u.fd.xt.size; } DXPush( base + offset ); } else { STFieldName( fd, name ); Error( EV_SSCR_INVALID, name, StmtKeywords[ PR_DATA ] ); } }