psequence.c

来自「General Hidden Markov Model Library 一个通用」· C语言 代码 · 共 167 行

C
167
字号
/*********************************************************************************       This file is part of the General Hidden Markov Model Library,*       GHMM version 0.8_beta1, see http://ghmm.org**       Filename: ghmm/ghmm/psequence.c*       Authors:  Matthias Heinig**       Copyright (C) 1998-2004 Alexander Schliep*       Copyright (C) 1998-2001 ZAIK/ZPR, Universitaet zu Koeln*       Copyright (C) 2002-2004 Max-Planck-Institut fuer Molekulare Genetik,*                               Berlin**       Contact: schliep@ghmm.org**       This library is free software; you can redistribute it and/or*       modify it under the terms of the GNU Library General Public*       License as published by the Free Software Foundation; either*       version 2 of the License, or (at your option) any later version.**       This library is distributed in the hope that it will be useful,*       but WITHOUT ANY WARRANTY; without even the implied warranty of*       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU*       Library General Public License for more details.**       You should have received a copy of the GNU Library General Public*       License along with this library; if not, write to the Free*       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA***       This file is version $Revision: 1713 $*                       from $Date: 2006-10-16 16:06:28 +0200 (Mon, 16 Oct 2006) $*             last change by $Author: grunau $.********************************************************************************/#ifdef HAVE_CONFIG_H#  include "../config.h"#endif#include <stdlib.h>#include "psequence.h"#include "mes.h"#include "matrix.h"#include "ghmm_internals.h"ghmm_dpseq * ghmm_dpseq_init(int length, int number_of_alphabets, int number_of_d_seqs) {#define CUR_PROC "ghmm_dpseq_init"  ghmm_dpseq * seq;  ARRAY_MALLOC (seq, 1);  seq->length = length;  seq->number_of_alphabets = number_of_alphabets;  seq->number_of_d_seqs = number_of_d_seqs;  seq->seq = NULL;  seq->d_value = NULL;  if (number_of_alphabets > 0) {    seq->seq = ighmm_dmatrix_alloc(number_of_alphabets, length);     if (!(seq->seq)) goto STOP;  }  if (number_of_d_seqs > 0) {    seq->d_value = ighmm_cmatrix_alloc(number_of_d_seqs, length);    if (!(seq->d_value)) goto STOP;  }  return seq;STOP:     /* Label STOP from ARRAY_[CM]ALLOC */  ghmm_dpseq_free(seq);  return NULL;#undef CUR_PROC}int ghmm_dpseq_free(ghmm_dpseq * seq) {#define CUR_PROC "ghmm_dpseq_free"  int i;  mes_check_ptr(seq, return(-1));  if ( seq == NULL ) return(0);  if (seq->seq != NULL) {    for (i=0; i<seq->number_of_alphabets; i++)       m_free(seq->seq[i]);    m_free(seq->seq);  }  if (seq->d_value != NULL) {    for (i=0; i<seq->number_of_d_seqs; i++)      m_free(seq->d_value[i]);    m_free(seq->d_value);  }  m_free(seq);  return 0;#undef CUR_PROC}void ghmm_dpseq_set_discrete(ghmm_dpseq * seq_pointer, int index, int * int_seq) {  seq_pointer->seq[index] = int_seq;}  void ghmm_dpseq_set_continuous(ghmm_dpseq * seq_pointer, int index, double * d_seq) {  seq_pointer->d_value[index] = d_seq;}int * ghmm_dpseq_get_discrete(ghmm_dpseq * seq_pointer, int index){  return seq_pointer->seq[index];}double * ghmm_dpseq_get_continuous(ghmm_dpseq * seq_pointer, int index){  return seq_pointer->d_value[index];}ghmm_dpseq * ghmm_dpseq_slice(ghmm_dpseq * seq_pointer, int start, int stop){  int i, j;  ghmm_dpseq * slice;  if (stop > seq_pointer->length) {    fprintf(stderr, "Slice: sequence index (%i) out of bounds (%i)\n", 	    stop, seq_pointer->length);  }  slice = ghmm_dpseq_init(stop - start, seq_pointer->number_of_alphabets,			  seq_pointer->number_of_d_seqs);  for (i=start; i<stop; i++){    for (j=0; j<slice->number_of_alphabets; j++)      slice->seq[j][i-start] = seq_pointer->seq[j][i];    for (j=0; j<slice->number_of_d_seqs; j++)      slice->d_value[j][i-start] = seq_pointer->d_value[j][i];  }  return slice;}int ghmm_dpseq_get_char(ghmm_dpseq * seq_pointer, int alphabet, int index){  if (alphabet < seq_pointer->number_of_alphabets) {    if (index < 0)      return -1;    if (index < seq_pointer->length) {      return seq_pointer->seq[alphabet][index];    }    else {      fprintf(stderr, "index (%i) larger than length (%i)!", index, seq_pointer->length);      return -1;    }  }  else {    fprintf(stderr, "alphabet (%i) larger than number of alphabets (%i)!",	    alphabet, seq_pointer->number_of_alphabets);    return -1;  }}double ghmm_dpseq_get_double(ghmm_dpseq * seq_pointer, int seq_index, int index){  if (seq_index < seq_pointer->number_of_d_seqs) {    if (index < 0)      return 0;    if (index < seq_pointer->length) {      return seq_pointer->d_value[seq_index][index];    }    else {      fprintf(stderr, "index (%i) larger than length (%i)!", index, seq_pointer->length);      return 0;    }  }  else {    fprintf(stderr, "seq_index (%i) larger than number of seq_indexs (%i)!",	    seq_index, seq_pointer->number_of_d_seqs);    return 0;  }} 

⌨️ 快捷键说明

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