--- /dev/null
+/******************************COPYRIGHT NOTICE*******************************/
+/* (c) Centro de Regulacio Genomica */
+/* and */
+/* Cedric Notredame */
+/* 12 Aug 2014 - 22:07. */
+/*All rights reserved. */
+/*This file is part of T-COFFEE. */
+/* */
+/* T-COFFEE is free software; you can redistribute it and/or modify */
+/* it under the terms of the GNU General Public License as published by */
+/* the Free Software Foundation; either version 2 of the License, or */
+/* (at your option) any later version. */
+/* */
+/* T-COFFEE 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 General Public License for more details. */
+/* */
+/* You should have received a copy of the GNU General Public License */
+/* along with Foobar; if not, write to the Free Software */
+/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+/*............................................... */
+/* If you need some more information */
+/* cedric.notredame@europe.com */
+/*............................................... */
+/******************************COPYRIGHT NOTICE*******************************/
+#ifndef FSA_DP_H
+#define FSA_DP_H
+
+/*By convention, 0: START, 1: END*/
+
+struct Hmm
+{
+
+ double freeT; /*Free transition*/
+ double forbiden; /*Forbiden transition*/
+ int start; /*start, by convention: 0*/
+ int end; /*end, by convention: 1*/
+
+ int nS; /*Number of states*/
+ int order;
+ struct HmmState **S; /*State List*/
+
+ /*Bounded HMM*/
+ double **T; /*Transition matrix*/
+ int **fromM; /*For any sate s, fromM[0]->number of states leading to s*/
+ int **toM; /*For any sate s, toM[0]->number of s can go to*/
+ /*End and Start are NOT included in toM and FromM*/
+
+
+};
+typedef struct Hmm Hmm;
+
+struct HmmAln
+{
+ Hmm *H;
+ int *state_list;
+};
+typedef struct HmmAln HmmAln;
+
+typedef double (*Generic_em_func)(struct Hmm*, struct HmmState*, int);
+
+struct HmmState
+{
+char name[100];
+int state;
+int DJ;
+int DI;
+
+ /*Pair HMM*/
+double em;
+Col_cost_func em_func;
+
+ /*Linear HMM*/
+double *em2;
+Generic_em_func em_func2;
+int nT;
+struct StateTrans **T;
+};
+typedef struct HmmState HmmState;
+
+struct StateTrans
+{
+ char name[101];
+ double tr;
+};
+typedef struct StateTrans StateTrans;
+
+struct MatState
+{
+ int i;
+ int j;
+ int st;
+ int pst;
+ double sc;
+ struct MatState *n;
+ struct MatState *p;
+ struct MatState *m; /*memory*/
+ struct MatState *s; /*memory of the start point*/
+ /*Heap Mamagement: Never copy*/
+ struct MatState *Hn;/*Heap Next*/
+ struct MatState *Hp;/*Heap Previous*/
+
+ struct MatState *Mn;/*Marked Heap section*/
+ struct MatState *Mp;/*Marked Heap Section*/
+ int free;
+};
+typedef struct MatState MatState;
+
+
+/*********************************************************************************/
+/* */
+/* */
+/* simple HMM: Viterbi */
+/* */
+/* */
+/*********************************************************************************/
+int seq_viterbi_pair_wise (Alignment *A,int*ns, int **ls,Constraint_list *CL);
+
+/*********************************************************************************/
+/* */
+/* */
+/* HMM: Viterbi */
+/* */
+/* */
+/*********************************************************************************/
+
+int viterbi_pair_wise_OLD (Alignment *A,int*ns, int **ls,Constraint_list *CL);
+Alignment * viterbipath2aln (Alignment *A, int *ns,int **ls,int *tb, Hmm *H);
+double*** viterbi_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL);
+int * viterbi2path (int l1,int l2, Hmm *H, double ***M);
+/*********************************************************************************/
+/* */
+/* */
+/* HMM modeling */
+/* */
+/* */
+/*********************************************************************************/
+int viterbiL_pair_wise (Alignment *A,int*ns, int **ls,Constraint_list *CL);
+MatState* RviterbiL_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E);
+MatState* viterbiL_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL, MatState *S, MatState *E);
+
+int viterbiD_pair_wise (Alignment *A,int*ns, int **ls,Constraint_list *CL);
+double lu_RviterbiD_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E, int **seg_list);
+MatState* RviterbiD_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E, int **seg_list);
+MatState* viterbiD_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL, MatState *S, MatState *E, int **seg_list);
+int **seglist2table ( int **seglist,int l1, int l2);
+int *seglist2line ( int **seglist, int line, int start, int end);
+int * traceback (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E, int **seg_list);
+
+int viterbiDGL_pair_wise (Alignment *A,int*ns, int **ls,Constraint_list *CL);
+double lu_RviterbiDGL_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E, int **seg_list);
+MatState* RviterbiDGL_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E, int **seg_list);
+MatState* viterbiDGL_hmm (Alignment *A,int *ns, int **ls, Hmm *H, Constraint_list *CL,MatState *S, MatState *E, int **seg_list);
+
+
+/*********************************************************************************/
+/* */
+/* */
+/* HMM modeling */
+/* */
+/* */
+/*********************************************************************************/
+int MatStateAreIdentical (MatState*I, MatState*O);
+int MaxDeltaMatState (MatState*I, MatState*O);
+int MinDeltaMatState (MatState*I, MatState*O);
+
+MatState * ManageMatState(int Mode, MatState *C);
+MatState* CopyMatState ( MatState*I, MatState*O);
+
+Hmm* read_hmm(char *file);
+Hmm* declare_hmm(int n);
+Hmm* free_Hmm(Hmm*H);
+void DisplayHmm ( Hmm *H);
+
+/*********************************************************************************/
+/* */
+/* */
+/* HMM Models */
+/* */
+/* */
+/*********************************************************************************/
+Hmm* define_two_mat_model(Constraint_list *CL);
+Hmm* define_probcons_model(Constraint_list *CL);
+Hmm* define_simple_model(Constraint_list *CL);
+
+Hmm * bound_hmm ( Hmm *H);
+
+#endif // FSA_DP_H