/* allocModel - Allocates memory for a model containing uu states and ii * features. */ Model *allocModel(int ii, int uu) { Model *m; int u; if (ii<=0||uu<=0) panic("allocModel(): %s must be>0", ii<=0?"ii":"uu"); m = (Model *)safe_malloc(sizeof(Model)); m->ffm = (Ffm **)safe_malloc(uu*sizeof(Ffm *)); m->uu = uu; m->hmm = allocHMM(uu); for (u = 0; u<uu; u++) m->ffm[u] = allocFFM(ii); return m;}
void copyHMM(Hmm *m1, Hmm *m2) { int u; if(m1->uu != m2->uu){ freeHMM(m1); m1 = allocHMM(m2->uu); } copyRVec(VECTOR(m1->logB), VECTOR(m2->logB), m1->uu); for (u = 0; u<m1->uu; u++) { copyRVec(MATRIX(m1->logA)[u], MATRIX(m2->logA)[u], m1->uu);} }
xHmm *allocXHMM(int uu, int ii, int tt){ assert(uu > 0 && ii > 0 && tt > 0); xHmm *xhmm = safe_malloc(sizeof *xhmm); xhmm->m = allocHMM(uu); xhmm->ii = ii; xhmm->tt = tt; if (tt > 1) xhmm->bps = allocRMat3d(tt - 1, ii, ii); else xhmm->bps = NULL; xhmm->bss = allocRMat(tt, ii); return xhmm; }
void copyHMM(Hmm *m1, Hmm *m2) { int u; //assert(m1->uu>=m2->uu); /* Take into account the elimination of unreachable states */ if(m1->uu != m2->uu){ freeHMM(m1); m1 = allocHMM(m2->uu); } copyRVec(VECTOR(m1->logB), VECTOR(m2->logB), m1->uu); for (u = 0; u<m1->uu; u++) { copyRVec(MATRIX(m1->logA)[u], MATRIX(m2->logA)[u], m1->uu);} }