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;
  }
Beispiel #2
0
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;
    }
}
Beispiel #3
0
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 ] );
    }
}