/* Function: p7_bg_Create() * Incept: SRE, Fri Jan 12 13:32:51 2007 [Janelia] * * Purpose: Allocate a <P7_BG> object for digital alphabet <abc>, * initializes it to appropriate default values, and * returns a pointer to it. * * For protein models, default iid background frequencies * are set (by <p7_AminoFrequencies()>) to average * SwissProt residue composition. For DNA, RNA and other * alphabets, default frequencies are set to a uniform * distribution. * * The model composition <bg->mcomp[]> is not initialized * here; neither is the filter null model <bg->fhmm>. To * use the filter null model, caller will want to * initialize these fields by calling * <p7_bg_SetFilterByHMM()>. * * Throws: <NULL> on allocation failure. * * Xref: STL11/125. */ P7_BG * p7_bg_Create(const ESL_ALPHABET *abc) { P7_BG *bg = NULL; int status; ESL_ALLOC(bg, sizeof(P7_BG)); bg->f = NULL; bg->fhmm = NULL; ESL_ALLOC(bg->f, sizeof(float) * abc->K); if ((bg->fhmm = esl_hmm_Create(abc, 2)) == NULL) goto ERROR; if (abc->type == eslAMINO) { if (p7_AminoFrequencies(bg->f) != eslOK) goto ERROR; } else esl_vec_FSet(bg->f, abc->K, 1. / (float) abc->K); bg->p1 = 350./351.; bg->omega = 1./256.; bg->abc = abc; return bg; ERROR: p7_bg_Destroy(bg); return NULL; }
static int make_occasionally_dishonest_casino(ESL_HMM **ret_hmm, ESL_ALPHABET **ret_abc) { ESL_ALPHABET *abc = esl_alphabet_Create(eslDICE); ESL_HMM *hmm = esl_hmm_Create(abc, 2); int x; /* State 0 = fair die */ hmm->pi[0] = 1.0; hmm->pi[1] = 0.0; hmm->pi[2] = 0.0; /* no L=0 seqs */ hmm->t[0][0] = 0.96; hmm->t[0][1] = 0.03; hmm->t[0][2] = 0.01; /* end from state 0; mean length 100 */ for (x = 0; x < abc->K; x++) hmm->e[0][x] = 1.0 / (float) abc->K; /* State 1 = loaded die */ hmm->t[1][0] = 0.05; hmm->t[1][1] = 0.95; hmm->t[1][2] = 0.0; /* no end from state 1 */ for (x = 0; x < abc->K-1; x++) hmm->e[1][x] = 0.5 / ((float) abc->K-1); hmm->e[1][abc->K-1] = 0.5; esl_hmm_Configure(hmm, NULL); *ret_hmm = hmm; *ret_abc = abc; return eslOK; }
/* Function: esl_hmm_Clone() * Synopsis: Duplicate an HMM. * * Purpose: Make a newly allocated duplicate of the HMM <hmm>, * and return a pointer to the duplicate. * * Throws: <NULL> on allocation failure. */ ESL_HMM * esl_hmm_Clone(const ESL_HMM *hmm) { ESL_HMM *dup = NULL; int k, x; if ((dup = esl_hmm_Create(hmm->abc, hmm->M)) == NULL) return NULL; for (k = 0; k < hmm->M; k++) { memcpy(dup->t[k], hmm->t[k], sizeof(float) * (hmm->M+1)); memcpy(dup->e[k], hmm->e[k], sizeof(float) * (hmm->abc->K)); } for (x = 0; x < hmm->abc->Kp; x++) { memcpy(dup->eo[x], hmm->eo[x], sizeof(float) * (hmm->M)); } memcpy(dup->pi, hmm->pi, sizeof(float) * (hmm->M+1)); return dup; }
/* Function: p7_bg_CreateUniform() * Synopsis: Creates background model with uniform freqs. * Incept: SRE, Sat Jun 30 10:25:27 2007 [Janelia] * * Purpose: Creates a background model for alphabet <abc> * with uniform residue frequencies. */ P7_BG * p7_bg_CreateUniform(const ESL_ALPHABET *abc) { P7_BG *bg = NULL; int status; ESL_ALLOC(bg, sizeof(P7_BG)); bg->f = NULL; bg->fhmm = NULL; ESL_ALLOC(bg->f, sizeof(float) * abc->K); if ((bg->fhmm = esl_hmm_Create(abc, 2)) == NULL) goto ERROR; esl_vec_FSet(bg->f, abc->K, 1. / (float) abc->K); bg->p1 = 350./351.; bg->omega = 1./256.; bg->abc = (ESL_ALPHABET *) abc; /* safe: we're just keeping a reference */ return bg; ERROR: p7_bg_Destroy(bg); return NULL; }
/* Function: p7_bg_Create() * Synopsis: Create a <P7_BG> null model object. * * Purpose: Allocate a <P7_BG> object for digital alphabet <abc>, * initializes it to appropriate default values, and * returns a pointer to it. * * For protein models, default iid background frequencies * are set (by <p7_AminoFrequencies()>) to average * Swiss-Prot residue composition. For DNA, RNA and other * alphabets, default frequencies are set to a uniform * distribution. * * The model composition <bg->mcomp[]> is not initialized * here; neither is the filter null model <bg->fhmm>. To * use the filter null model, caller will want to * initialize these fields by calling * <p7_bg_SetFilter()>. * * Throws: <NULL> on allocation failure. * * Xref: STL11/125. */ P7_BG * p7_bg_Create(const ESL_ALPHABET *abc) { P7_BG *bg = NULL; int status; ESL_ALLOC(bg, sizeof(P7_BG)); bg->f = NULL; bg->fhmm = NULL; // this is not hard-coded for alphabet size... ESL_ALLOC(bg->f, sizeof(float) * abc->K); if ((bg->fhmm = esl_hmm_Create(abc, 2)) == NULL) goto ERROR; if (abc->type == eslAMINO) { if (p7_AminoFrequencies(bg->f) != eslOK) goto ERROR; } // adding in background probabilities for music intervals else if (abc->type == eslMUSIC) { if (p7_MusicFrequencies(bg->f) != eslOK) goto ERROR; } else esl_vec_FSet(bg->f, abc->K, 1. / (float) abc->K); bg->p1 = 350./351.; bg->omega = 1./256.; bg->abc = abc; return bg; ERROR: p7_bg_Destroy(bg); return NULL; }
ESL_HMM * create_null_hmm(ESL_ALPHABET *abc) { ESL_HMM *hmm; hmm = esl_hmm_Create(abc, 1); /* state 0 = normal iid model.*/ hmm->t[0][0] = 1.0f; hmm->t[0][1] = 1.0f; /* external length distribution */ /* SW50 iid frequencies: H3 default background */ hmm->e[0][0] = 0.0787945; /* A */ hmm->e[0][1] = 0.0151600; /* C */ hmm->e[0][2] = 0.0535222; /* D */ hmm->e[0][3] = 0.0668298; /* E */ hmm->e[0][4] = 0.0397062; /* F */ hmm->e[0][5] = 0.0695071; /* G */ hmm->e[0][6] = 0.0229198; /* H */ hmm->e[0][7] = 0.0590092; /* I */ hmm->e[0][8] = 0.0594422; /* K */ hmm->e[0][9] = 0.0963728; /* L */ hmm->e[0][10] = 0.0237718; /* M */ hmm->e[0][11] = 0.0414386; /* N */ hmm->e[0][12] = 0.0482904; /* P */ hmm->e[0][13] = 0.0395639; /* Q */ hmm->e[0][14] = 0.0540978; /* R */ hmm->e[0][15] = 0.0683364; /* S */ hmm->e[0][16] = 0.0540687; /* T */ hmm->e[0][17] = 0.0673417; /* V */ hmm->e[0][18] = 0.0114135; /* W */ hmm->e[0][19] = 0.0304133; /* Y */ hmm->pi[0] = 1.0; esl_hmm_Configure(hmm, NULL); return hmm; }
ESL_HMM * create_test_hmm(ESL_ALPHABET *abc) { ESL_HMM *hmm; int L = 400; int M = 200; hmm = esl_hmm_Create(abc, 2); /* state 0 = normal iid model. state 1 = biased state */ hmm->t[0][0] = (float) L / (float) (L+1); hmm->t[0][1] = 1.0f / (float) (L+1); hmm->t[0][2] = 1.0; /* external length distribution */ hmm->t[1][0] = (float) 2.0f / (float) (M+2); hmm->t[1][1] = (float) M / (float) (M+2); hmm->t[1][2] = 1.0; /* SW50 iid frequencies: H3 default background */ hmm->e[0][0] = 0.0787945; /* A */ hmm->e[0][1] = 0.0151600; /* C */ hmm->e[0][2] = 0.0535222; /* D */ hmm->e[0][3] = 0.0668298; /* E */ hmm->e[0][4] = 0.0397062; /* F */ hmm->e[0][5] = 0.0695071; /* G */ hmm->e[0][6] = 0.0229198; /* H */ hmm->e[0][7] = 0.0590092; /* I */ hmm->e[0][8] = 0.0594422; /* K */ hmm->e[0][9] = 0.0963728; /* L */ hmm->e[0][10] = 0.0237718; /* M */ hmm->e[0][11] = 0.0414386; /* N */ hmm->e[0][12] = 0.0482904; /* P */ hmm->e[0][13] = 0.0395639; /* Q */ hmm->e[0][14] = 0.0540978; /* R */ hmm->e[0][15] = 0.0683364; /* S */ hmm->e[0][16] = 0.0540687; /* T */ hmm->e[0][17] = 0.0673417; /* V */ hmm->e[0][18] = 0.0114135; /* W */ hmm->e[0][19] = 0.0304133; /* Y */ /* average of MFS_1 core emissions */ hmm->e[1][0] = 0.1068; /* A */ hmm->e[1][1] = 0.0110; /* C */ hmm->e[1][2] = 0.0242; /* D */ hmm->e[1][3] = 0.0293; /* E */ hmm->e[1][4] = 0.0621; /* F */ hmm->e[1][5] = 0.0899; /* G */ hmm->e[1][6] = 0.0139; /* H */ hmm->e[1][7] = 0.0762; /* I */ hmm->e[1][8] = 0.0319; /* K */ hmm->e[1][9] = 0.1274; /* L */ hmm->e[1][10] = 0.0338; /* M */ hmm->e[1][11] = 0.0285; /* N */ hmm->e[1][12] = 0.0414; /* P */ hmm->e[1][13] = 0.0266; /* Q */ hmm->e[1][14] = 0.0375; /* R */ hmm->e[1][15] = 0.0747; /* S */ hmm->e[1][16] = 0.0568; /* T */ hmm->e[1][17] = 0.0815; /* V */ hmm->e[1][18] = 0.0161; /* W */ hmm->e[1][19] = 0.0303; /* Y */ hmm->pi[0] = 0.99; hmm->pi[1] = 0.01; esl_hmm_Configure(hmm, NULL); return hmm; }