本文整理汇总了C++中p7_gmx_Destroy函数的典型用法代码示例。如果您正苦于以下问题:C++ p7_gmx_Destroy函数的具体用法?C++ p7_gmx_Destroy怎么用?C++ p7_gmx_Destroy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了p7_gmx_Destroy函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: main
int
main(int argc, char **argv)
{
ESL_GETOPTS *go = p7_CreateDefaultApp(options, 1, argc, argv, banner, usage);
char *hmmfile = esl_opt_GetArg(go, 1);
ESL_STOPWATCH *w = esl_stopwatch_Create();
ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s"));
ESL_ALPHABET *abc = NULL;
P7_HMMFILE *hfp = NULL;
P7_HMM *hmm = NULL;
P7_BG *bg = NULL;
P7_PROFILE *gm = NULL;
P7_GMX *gx1 = NULL;
P7_GMX *gx2 = NULL;
int L = esl_opt_GetInteger(go, "-L");
int N = esl_opt_GetInteger(go, "-N");
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
float null2[p7_MAXCODE];
int i;
float fsc, bsc;
double Mcs;
if (p7_hmmfile_OpenE(hmmfile, NULL, &hfp, NULL) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile);
if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM");
bg = p7_bg_Create(abc);
p7_bg_SetLength(bg, L);
gm = p7_profile_Create(hmm->M, abc);
p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL);
gx1 = p7_gmx_Create(gm->M, L);
gx2 = p7_gmx_Create(gm->M, L);
esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
p7_GForward (dsq, L, gm, gx1, &fsc);
p7_GBackward(dsq, L, gm, gx2, &bsc);
p7_GDecoding(gm, gx1, gx2, gx2);
esl_stopwatch_Start(w);
for (i = 0; i < N; i++)
p7_GNull2_ByExpectation(gm, gx2, null2);
esl_stopwatch_Stop(w);
Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / w->user;
esl_stopwatch_Display(stdout, w, "# CPU time: ");
printf("# M = %d\n", gm->M);
printf("# %.1f Mc/s\n", Mcs);
free(dsq);
p7_gmx_Destroy(gx1);
p7_gmx_Destroy(gx2);
p7_profile_Destroy(gm);
p7_bg_Destroy(bg);
p7_hmm_Destroy(hmm);
p7_hmmfile_Close(hfp);
esl_alphabet_Destroy(abc);
esl_stopwatch_Destroy(w);
esl_randomness_Destroy(r);
esl_getopts_Destroy(go);
return 0;
}
开发者ID:Janelia-Farm-Xfam,项目名称:Bio-HMM-Logo,代码行数:60,代码来源:p7_null3.c
示例2: utest_null2_expectation
/* compare results to GDecoding(). */
static void
utest_null2_expectation(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance)
{
char *msg = "decoding unit test failed";
P7_HMM *hmm = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
P7_OMX *fwd = p7_omx_Create(M, L, L);
P7_OMX *bck = p7_omx_Create(M, L, L);
P7_OMX *pp = p7_omx_Create(M, L, L);
P7_GMX *gxf = p7_gmx_Create(M, L);
P7_GMX *gxb = p7_gmx_Create(M, L);
P7_GMX *gpp = p7_gmx_Create(M, L);
float *on2 = malloc(sizeof(float) * abc->Kp);
float *gn2 = malloc(sizeof(float) * abc->Kp);
float fsc1, fsc2;
float bsc1, bsc2;
if (!gn2 || !on2) esl_fatal(msg);
if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg);
while (N--)
{
if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg);
if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg);
if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg);
if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg);
if (p7_Null2_ByExpectation(om, pp, on2) != eslOK) esl_fatal(msg);
if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg);
if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg);
if (p7_GDecoding(gm, gxf, gxb, gpp) != eslOK) esl_fatal(msg);
if (p7_GNull2_ByExpectation(gm, gpp, gn2) != eslOK) esl_fatal(msg);
if (esl_vec_FCompare(gn2, on2, abc->Kp, tolerance) != eslOK) esl_fatal(msg);
}
p7_gmx_Destroy(gpp);
p7_gmx_Destroy(gxf);
p7_gmx_Destroy(gxb);
p7_omx_Destroy(pp);
p7_omx_Destroy(fwd);
p7_omx_Destroy(bck);
free(on2);
free(gn2);
free(dsq);
p7_oprofile_Destroy(om);
p7_profile_Destroy(gm);
p7_hmm_Destroy(hmm);
}
开发者ID:dboudour2002,项目名称:musicHMMER,代码行数:52,代码来源:null2.c
示例3: utest_decoding
/* compare results to GDecoding(). */
static void
utest_decoding(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N, float tolerance)
{
char *msg = "decoding unit test failed";
P7_HMM *hmm = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
P7_OMX *fwd = p7_omx_Create(M, L, L);
P7_OMX *bck = p7_omx_Create(M, L, L);
P7_OMX *pp = p7_omx_Create(M, L, L);
P7_GMX *gxf = p7_gmx_Create(M, L);
P7_GMX *gxb = p7_gmx_Create(M, L);
P7_GMX *gxp1 = p7_gmx_Create(M, L);
P7_GMX *gxp2 = p7_gmx_Create(M, L);
float fsc1, fsc2;
float bsc1, bsc2;
if (p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om) != eslOK) esl_fatal(msg);
while (N--)
{
if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal(msg);
if (p7_Forward (dsq, L, om, fwd, &fsc1) != eslOK) esl_fatal(msg);
if (p7_Backward (dsq, L, om, fwd, bck, &bsc1) != eslOK) esl_fatal(msg);
if (p7_Decoding(om, fwd, bck, pp) != eslOK) esl_fatal(msg);
if (p7_omx_FDeconvert(pp, gxp1) != eslOK) esl_fatal(msg);
if (p7_GForward (dsq, L, gm, gxf, &fsc2) != eslOK) esl_fatal(msg);
if (p7_GBackward(dsq, L, gm, gxb, &bsc2) != eslOK) esl_fatal(msg);
if (p7_GDecoding(gm, gxf, gxb, gxp2) != eslOK) esl_fatal(msg);
// p7_gmx_Dump(stdout, gxp1, p7_DEFAULT);
// p7_gmx_Dump(stdout, gxp2, p7_DEFAULT);
if (p7_gmx_Compare(gxp1, gxp2, tolerance) != eslOK) esl_fatal(msg);
}
p7_gmx_Destroy(gxp1);
p7_gmx_Destroy(gxp2);
p7_gmx_Destroy(gxf);
p7_gmx_Destroy(gxb);
p7_omx_Destroy(fwd);
p7_omx_Destroy(bck);
p7_omx_Destroy(pp);
free(dsq);
p7_oprofile_Destroy(om);
p7_profile_Destroy(gm);
p7_hmm_Destroy(hmm);
}
开发者ID:dboudour2002,项目名称:musicHMMER,代码行数:50,代码来源:decoding.c
示例4: utest_viterbi_score
/* ViterbiScore() unit test
*
* We can compare these scores to GViterbi() almost exactly; the only
* differences should be negligible roundoff errors. Must convert
* the optimized profile to lspace, though, rather than pspace.
*/
static void
utest_viterbi_score(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N)
{
P7_HMM *hmm = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
P7_OMX *ox = p7_omx_Create(M, 0, 0);
P7_GMX *gx = p7_gmx_Create(M, L);
float sc1, sc2;
p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om);
p7_oprofile_Logify(om);
while (N--)
{
esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
p7_ViterbiScore(dsq, L, om, ox, &sc1);
p7_GViterbi (dsq, L, gm, gx, &sc2);
if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi score unit test failed: scores differ");
}
free(dsq);
p7_hmm_Destroy(hmm);
p7_omx_Destroy(ox);
p7_gmx_Destroy(gx);
p7_profile_Destroy(gm);
p7_oprofile_Destroy(om);
}
开发者ID:Denis84,项目名称:EPA-WorkBench,代码行数:36,代码来源:vitscore.c
示例5: utest_stotrace
/* tests:
* 1. each sampled trace must validate.
* 2. each trace must be <= viterbi trace score
* 3. in a large # of traces, one is "equal" to the viterbi trace score.
* (this of course is stochastic; but it's true for the particular
* choice of RNG seed used in tests here.)
*/
static void
utest_stotrace(ESL_GETOPTS *go, ESL_RANDOMNESS *rng, ESL_ALPHABET *abc, P7_PROFILE *gm, P7_OPROFILE *om, ESL_DSQ *dsq, int L, int ntrace)
{
P7_GMX *gx = NULL;
P7_OMX *ox = NULL;
P7_TRACE *tr = NULL;
char errbuf[eslERRBUFSIZE];
int idx;
float maxsc = -eslINFINITY;
float vsc, sc;
if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("generic DP matrix creation failed");
if ((ox = p7_omx_Create(gm->M, L, L)) == NULL) esl_fatal("optimized DP matrix create failed");
if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed");
if (p7_GViterbi(dsq, L, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed");
if (p7_Forward (dsq, L, om, ox, NULL) != eslOK) esl_fatal("forward failed");
for (idx = 0; idx < ntrace; idx++)
{
if (p7_StochasticTrace(rng, dsq, L, om, ox, tr) != eslOK) esl_fatal("stochastic trace failed");
if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf);
if (p7_trace_Score(tr, dsq, gm, &sc) != eslOK) esl_fatal("trace scoring failed");
maxsc = ESL_MAX(sc, maxsc);
if (sc > vsc) esl_fatal("sampled trace has score > optimal Viterbi path; not possible");
p7_trace_Reuse(tr);
}
if (esl_FCompare(maxsc, vsc, 0.1) != eslOK) esl_fatal("stochastic trace failed to sample the Viterbi path");
p7_trace_Destroy(tr);
p7_omx_Destroy(ox);
p7_gmx_Destroy(gx);
}
开发者ID:Denis84,项目名称:EPA-WorkBench,代码行数:41,代码来源:stotrace.c
示例6: utest_msv
/* The MSV score can be validated against Viterbi (provided we trust
* Viterbi), by creating a multihit local profile in which:
* 1. All t_MM scores = 0
* 2. All other core transitions = -inf
* 3. All t_BMk entries uniformly log 2/(M(M+1))
*/
static void
utest_msv(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, P7_PROFILE *gm, int nseq, int L)
{
P7_PROFILE *g2 = NULL;
ESL_DSQ *dsq = NULL;
P7_GMX *gx = NULL;
float sc1, sc2;
int k, idx;
if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed");
if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed");
if ((g2 = p7_profile_Clone(gm)) == NULL) esl_fatal("profile clone failed");
/* Make g2's scores appropriate for simulating the MSV algorithm in Viterbi */
esl_vec_FSet(g2->tsc, p7P_NTRANS * g2->M, -eslINFINITY);
for (k = 1; k < g2->M; k++) p7P_TSC(g2, k, p7P_MM) = 0.0f;
for (k = 0; k < g2->M; k++) p7P_TSC(g2, k, p7P_BM) = log(2.0f / ((float) g2->M * (float) (g2->M+1)));
for (idx = 0; idx < nseq; idx++)
{
if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed");
if (p7_GMSV (dsq, L, gm, gx, 2.0, &sc1) != eslOK) esl_fatal("MSV failed");
if (p7_GViterbi(dsq, L, g2, gx, &sc2) != eslOK) esl_fatal("viterbi failed");
if (fabs(sc1-sc2) > 0.0001) esl_fatal("MSV score not equal to Viterbi score");
}
p7_gmx_Destroy(gx);
p7_profile_Destroy(g2);
free(dsq);
return;
}
开发者ID:TuftsBCB,项目名称:SMURFBuild,代码行数:38,代码来源:generic_msv.c
示例7: destroy_hmmer_wrapper
void destroy_hmmer_wrapper() {
int index;
if(models != NULL) {
for(index = 0;index < num_models;index++) {
p7_oprofile_Destroy(models[index]);
p7_profile_Destroy(gmodels[index]);
}
free(models);
free(gmodels);
}
if(wrapper_results != NULL) {
for(index = 0;index < num_models;index++) {
destroy_result(wrapper_results[index]);
}
free(wrapper_results);
}
if(bg != NULL) {
p7_bg_Destroy(bg);
}
if(hmm_fp != NULL) {
p7_hmmfile_Close(hmm_fp);
}
if(oxf) {
p7_omx_Destroy(oxf);
}
if(oxb) {
p7_omx_Destroy(oxb);
}
if(gxf) {
p7_gmx_Destroy(gxf);
}
if(gxb) {
p7_gmx_Destroy(gxb);
}
if(abc) {
esl_alphabet_Destroy(abc);
}
if(tr) {
p7_trace_Destroy(tr);
}
}
开发者ID:rdpstaff,项目名称:AlignmentTools,代码行数:47,代码来源:hmmer_wrapper.c
示例8: utest_basic
/* The "basic" utest is a minimal driver for making a small DNA profile and a small DNA sequence,
* then running Viterbi and Forward. It's useful for dumping DP matrices and profiles for debugging.
*/
static void
utest_basic(ESL_GETOPTS *go)
{
char *query= "# STOCKHOLM 1.0\n\nseq1 GAATTC\nseq2 GAATTC\n//\n";
int fmt = eslMSAFILE_STOCKHOLM;
char *targ = "GAATTC";
ESL_ALPHABET *abc = NULL;
ESL_MSA *msa = NULL;
P7_HMM *hmm = NULL;
P7_PROFILE *gm = NULL;
P7_BG *bg = NULL;
P7_PRIOR *pri = NULL;
ESL_DSQ *dsq = NULL;
P7_GMX *gx = NULL;
P7_TRACE *tr = NULL;
int L = strlen(targ);
float vsc, vsc2, fsc;
if ((abc = esl_alphabet_Create(eslDNA)) == NULL) esl_fatal("failed to create alphabet");
if ((pri = p7_prior_CreateNucleic()) == NULL) esl_fatal("failed to create prior");
if ((msa = esl_msa_CreateFromString(query, fmt)) == NULL) esl_fatal("failed to create MSA");
if (esl_msa_Digitize(abc, msa, NULL) != eslOK) esl_fatal("failed to digitize MSA");
if (p7_Fastmodelmaker(msa, 0.5, NULL, &hmm, NULL) != eslOK) esl_fatal("failed to create GAATTC model");
if (p7_ParameterEstimation(hmm, pri) != eslOK) esl_fatal("failed to parameterize GAATTC model");
if (p7_hmm_SetConsensus(hmm, NULL) != eslOK) esl_fatal("failed to make consensus");
if ((bg = p7_bg_Create(abc)) == NULL) esl_fatal("failed to create DNA null model");
if ((gm = p7_profile_Create(hmm->M, abc)) == NULL) esl_fatal("failed to create GAATTC profile");
if (p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL)!= eslOK) esl_fatal("failed to config profile");
if (p7_profile_Validate(gm, NULL, 0.0001) != eslOK) esl_fatal("whoops, profile is bad!");
if (esl_abc_CreateDsq(abc, targ, &dsq) != eslOK) esl_fatal("failed to create GAATTC digital sequence");
if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("failed to create DP matrix");
if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed");
p7_GViterbi (dsq, L, gm, gx, &vsc);
if (esl_opt_GetBoolean(go, "-v")) printf("Viterbi score: %.4f\n", vsc);
if (esl_opt_GetBoolean(go, "-v")) p7_gmx_Dump(stdout, gx, p7_DEFAULT);
p7_GTrace (dsq, L, gm, gx, tr);
p7_trace_Score(tr, dsq, gm, &vsc2);
if (esl_opt_GetBoolean(go, "-v")) p7_trace_Dump(stdout, tr, gm, dsq);
if (esl_FCompare(vsc, vsc2, 1e-5) != eslOK) esl_fatal("trace score and Viterbi score don't agree.");
p7_GForward (dsq, L, gm, gx, &fsc);
if (esl_opt_GetBoolean(go, "-v")) printf("Forward score: %.4f\n", fsc);
if (esl_opt_GetBoolean(go, "-v")) p7_gmx_Dump(stdout, gx, p7_DEFAULT);
p7_trace_Destroy(tr);
p7_gmx_Destroy(gx);
free(dsq);
p7_profile_Destroy(gm);
p7_bg_Destroy(bg);
p7_hmm_Destroy(hmm);
esl_msa_Destroy(msa);
p7_prior_Destroy(pri);
esl_alphabet_Destroy(abc);
return;
}
开发者ID:ElofssonLab,项目名称:TOPCONS2,代码行数:61,代码来源:generic_viterbi.c
示例9: utest_forward
/* Forward is hard to validate.
* We do know that the Forward score is >= Viterbi.
* We also know that the expected score on random seqs is <= 0 (not
* exactly - we'd have to sample the random length from the background
* model too, not just use a fixed L - but it's close enough to
* being true to be a useful test.)
*/
static void
utest_forward(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, P7_PROFILE *gm, int nseq, int L)
{
float avg_sc;
ESL_DSQ *dsq = NULL;
P7_GMX *fwd = NULL;
P7_GMX *bck = NULL;
int idx;
float fsc, bsc;
float vsc, nullsc;
if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed");
if ((fwd = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed");
if ((bck = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed");
avg_sc = 0.;
for (idx = 0; idx < nseq; idx++)
{
if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed");
if (p7_GViterbi(dsq, L, gm, fwd, &vsc) != eslOK) esl_fatal("viterbi failed");
if (p7_GForward(dsq, L, gm, fwd, &fsc) != eslOK) esl_fatal("forward failed");
if (p7_GBackward(dsq, L, gm, bck, &bsc) != eslOK) esl_fatal("backward failed");
if (fsc < vsc) esl_fatal("Foward score can't be less than Viterbi score");
if (fabs(fsc-bsc) > 0.001) esl_fatal("Forward/Backward failed: %f %f\n", fsc, bsc);
if (p7_bg_NullOne(bg, dsq, L, &nullsc) != eslOK) esl_fatal("null score failed");
avg_sc += fsc - nullsc;
if (esl_opt_GetBoolean(go, "--vv"))
printf("utest_forward: Forward score: %.4f (total so far: %.4f)\n", fsc, avg_sc);
}
avg_sc /= (float) nseq;
if (avg_sc > 0.) esl_fatal("Forward scores have positive expectation (%f nats)", avg_sc);
p7_gmx_Destroy(fwd);
p7_gmx_Destroy(bck);
free(dsq);
return;
}
开发者ID:Denis84,项目名称:EPA-WorkBench,代码行数:49,代码来源:generic_fwdback.c
示例10: utest_Compare
static void
utest_Compare(ESL_RANDOMNESS *r, P7_PROFILE *gm, P7_BG *bg, int L, float tolerance)
{
char *msg = "gmx_Compare unit test failure";
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) *(L+2));
P7_GMX *gx1 = p7_gmx_Create(gm->M, L);
P7_GMX *gx2 = p7_gmx_Create(5, 4);
float fsc;
if (!r || !gm || !dsq || !gx1 || !gx2 ) esl_fatal(msg);
if (esl_rsq_xfIID(r, bg->f, gm->abc->K, L, dsq) != eslOK) esl_fatal(msg);
if (p7_gmx_GrowTo(gx2, gm->M, L) != eslOK) esl_fatal(msg);
if (p7_GForward(dsq, L, gm, gx1, &fsc) != eslOK) esl_fatal(msg);
if (p7_GForward(dsq, L, gm, gx2, &fsc) != eslOK) esl_fatal(msg);
if (p7_gmx_Compare(gx1, gx2, tolerance) != eslOK) esl_fatal(msg);
p7_gmx_Destroy(gx1);
p7_gmx_Destroy(gx2);
free(dsq);
}
开发者ID:ElofssonLab,项目名称:TOPCONS2,代码行数:20,代码来源:p7_gmx.c
示例11: utest_fwdback
/*
* compare to GForward() scores.
*/
static void
utest_fwdback(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N)
{
char *msg = "forward/backward unit test failed";
P7_HMM *hmm = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
P7_OMX *fwd = p7_omx_Create(M, 0, L);
P7_OMX *bck = p7_omx_Create(M, 0, L);
P7_OMX *oxf = p7_omx_Create(M, L, L);
P7_OMX *oxb = p7_omx_Create(M, L, L);
P7_GMX *gx = p7_gmx_Create(M, L);
float tolerance;
float fsc1, fsc2;
float bsc1, bsc2;
float generic_sc;
p7_FLogsumInit();
if (p7_FLogsumError(-0.4, -0.5) > 0.0001) tolerance = 1.0; /* weaker test against GForward() */
else tolerance = 0.0001; /* stronger test: FLogsum() is in slow exact mode. */
p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om);
while (N--)
{
esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
p7_Forward (dsq, L, om, oxf, &fsc1);
p7_Backward (dsq, L, om, oxf, oxb, &bsc1);
p7_ForwardParser (dsq, L, om, fwd, &fsc2);
p7_BackwardParser(dsq, L, om, fwd, bck, &bsc2);
p7_GForward (dsq, L, gm, gx, &generic_sc);
/* Forward and Backward scores should agree with high tolerance */
if (fabs(fsc1-bsc1) > 0.0001) esl_fatal(msg);
if (fabs(fsc2-bsc2) > 0.0001) esl_fatal(msg);
if (fabs(fsc1-fsc2) > 0.0001) esl_fatal(msg);
/* GForward scores should approximate Forward scores,
* with tolerance that depends on how logsum.c was compiled
*/
if (fabs(fsc1-generic_sc) > tolerance) esl_fatal(msg);
}
free(dsq);
p7_hmm_Destroy(hmm);
p7_omx_Destroy(oxb);
p7_omx_Destroy(oxf);
p7_omx_Destroy(bck);
p7_omx_Destroy(fwd);
p7_gmx_Destroy(gx);
p7_profile_Destroy(gm);
p7_oprofile_Destroy(om);
}
开发者ID:Denis84,项目名称:EPA-WorkBench,代码行数:57,代码来源:fwdback.c
示例12: p7_gmx_Create
/* Function: p7_gmx_Create()
* Synopsis: Allocate a new <P7_GMX>.
*
* Purpose: Allocate a reusable, resizeable <P7_GMX> for models up to
* size <allocM> and sequences up to length <allocL>.
*
* We've set this up so it should be easy to allocate
* aligned memory, though we're not doing this yet.
*
* Returns: a pointer to the new <P7_GMX>.
*
* Throws: <NULL> on allocation error.
*/
P7_GMX *
p7_gmx_Create(int allocM, int allocL)
{
int status;
P7_GMX *gx = NULL;
int i;
/* level 1: the structure itself */
ESL_ALLOC(gx, sizeof(P7_GMX));
gx->dp = NULL;
gx->xmx = NULL;
gx->dp_mem = NULL;
/* level 2: row pointers, 0.1..L; and dp cell memory */
ESL_ALLOC(gx->dp, sizeof(float *) * (allocL+1));
ESL_ALLOC(gx->xmx, sizeof(float) * (allocL+1) * p7G_NXCELLS);
ESL_ALLOC(gx->dp_mem, sizeof(float) * (allocL+1) * (allocM+1) * p7G_NSCELLS);
/* Set the row pointers. */
for (i = 0; i <= allocL; i++)
gx->dp[i] = gx->dp_mem + i * (allocM+1) * p7G_NSCELLS;
/* Initialize memory that's allocated but unused, only to keep
* valgrind and friends happy.
*/
for (i = 0; i <= allocL; i++)
{
gx->dp[i][0 * p7G_NSCELLS + p7G_M] = -eslINFINITY; /* M_0 */
gx->dp[i][0 * p7G_NSCELLS + p7G_I] = -eslINFINITY; /* I_0 */
gx->dp[i][0 * p7G_NSCELLS + p7G_D] = -eslINFINITY; /* D_0 */
gx->dp[i][1 * p7G_NSCELLS + p7G_D] = -eslINFINITY; /* D_1 */
gx->dp[i][allocM * p7G_NSCELLS + p7G_I] = -eslINFINITY; /* I_M */
}
gx->M = 0;
gx->L = 0;
gx->allocW = allocM+1;
gx->allocR = allocL+1;
gx->validR = allocL+1;
gx->ncells = (uint64_t) (allocM+1)* (uint64_t) (allocL+1);
return gx;
ERROR:
if (gx != NULL) p7_gmx_Destroy(gx);
return NULL;
}
开发者ID:ElofssonLab,项目名称:TOPCONS2,代码行数:59,代码来源:p7_gmx.c
示例13: utest_viterbi_filter
/* ViterbiFilter() unit test
*
* We can check that scores are identical (within machine error) to
* scores of generic DP with scores rounded the same way. Do this for
* a random model of length <M>, for <N> test sequences of length <L>.
*
* We assume that we don't accidentally generate a high-scoring random
* sequence that overflows ViterbiFilter()'s limited range.
*
*/
static void
utest_viterbi_filter(ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, int M, int L, int N)
{
P7_HMM *hmm = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
P7_OMX *ox = p7_omx_Create(M, 0, 0);
P7_GMX *gx = p7_gmx_Create(M, L);
float sc1, sc2;
p7_oprofile_Sample(r, abc, bg, M, L, &hmm, &gm, &om);
p7_profile_SameAsVF(om, gm); /* round and scale the scores in <gm> the same as in <om> */
#if 0
p7_oprofile_Dump(stdout, om); // dumps the optimized profile
p7_omx_SetDumpMode(stdout, ox, TRUE); // makes the fast DP algorithms dump their matrices
#endif
while (N--)
{
esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
p7_ViterbiFilter(dsq, L, om, ox, &sc1);
p7_GViterbi (dsq, L, gm, gx, &sc2);
#if 0
p7_gmx_Dump(stdout, gx); // dumps a generic DP matrix
#endif
sc2 /= om->scale_w;
sc2 -= 3.0;
if (fabs(sc1-sc2) > 0.001) esl_fatal("viterbi filter unit test failed: scores differ (%.2f, %.2f)", sc1, sc2);
}
free(dsq);
p7_hmm_Destroy(hmm);
p7_omx_Destroy(ox);
p7_gmx_Destroy(gx);
p7_profile_Destroy(gm);
p7_oprofile_Destroy(om);
}
开发者ID:TuftsBCB,项目名称:SMURFBuild,代码行数:53,代码来源:vitfilter.c
示例14: utest_viterbi
/* Viterbi validation is done by comparing the returned score
* to the score of the optimal trace. Not foolproof, but catches
* many kinds of errors.
*
* Another check is that the average score should be <= 0,
* since the random sequences are drawn from the null model.
*/
static void
utest_viterbi(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc, P7_BG *bg, P7_PROFILE *gm, int nseq, int L)
{
float avg_sc = 0.;
char errbuf[eslERRBUFSIZE];
ESL_DSQ *dsq = NULL;
P7_GMX *gx = NULL;
P7_TRACE *tr = NULL;
int idx;
float sc1, sc2;
if ((dsq = malloc(sizeof(ESL_DSQ) *(L+2))) == NULL) esl_fatal("malloc failed");
if ((tr = p7_trace_Create()) == NULL) esl_fatal("trace creation failed");
if ((gx = p7_gmx_Create(gm->M, L)) == NULL) esl_fatal("matrix creation failed");
for (idx = 0; idx < nseq; idx++)
{
if (esl_rsq_xfIID(r, bg->f, abc->K, L, dsq) != eslOK) esl_fatal("seq generation failed");
if (p7_GViterbi(dsq, L, gm, gx, &sc1) != eslOK) esl_fatal("viterbi failed");
if (p7_GTrace (dsq, L, gm, gx, tr) != eslOK) esl_fatal("trace failed");
if (p7_trace_Validate(tr, abc, dsq, errbuf) != eslOK) esl_fatal("trace invalid:\n%s", errbuf);
if (p7_trace_Score(tr, dsq, gm, &sc2) != eslOK) esl_fatal("trace score failed");
if (esl_FCompare(sc1, sc2, 1e-6) != eslOK) esl_fatal("Trace score != Viterbi score");
if (p7_bg_NullOne(bg, dsq, L, &sc2) != eslOK) esl_fatal("null score failed");
avg_sc += (sc1 - sc2);
if (esl_opt_GetBoolean(go, "--vv"))
printf("utest_viterbi: Viterbi score: %.4f (null %.4f) (total so far: %.4f)\n", sc1, sc2, avg_sc);
p7_trace_Reuse(tr);
}
avg_sc /= (float) nseq;
if (avg_sc > 0.) esl_fatal("Viterbi scores have positive expectation (%f nats)", avg_sc);
p7_gmx_Destroy(gx);
p7_trace_Destroy(tr);
free(dsq);
return;
}
开发者ID:TuftsBCB,项目名称:SMURFBuild,代码行数:48,代码来源:generic_viterbi.c
示例15: utest_GrowTo
static void
utest_GrowTo(void)
{
int M, L;
P7_GMX *gx = NULL;
M = 20; L = 20; gx= p7_gmx_Create(M, L); gmx_testpattern(gx, M, L);
M = 40; L = 20; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in M, not L */
M = 40; L = 40; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in L, not M */
M = 80; L = 10; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in M, but with enough ncells */
M = 10; L = 80; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in L, but with enough ncells */
M = 100; L = 100; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L); /* grow in both L and M */
/* The next two calls are carefully constructed to exercise bug #h79.
* GrowTo() must shrink allocW, if M shrinks and L grows enough to force increase in allocR, with sufficient ncells.
*/
M = 179; L = 55; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L);
M = 87; L = 57; p7_gmx_GrowTo(gx, M, L); gmx_testpattern(gx, M, L);
p7_gmx_Destroy(gx);
}
开发者ID:ElofssonLab,项目名称:TOPCONS2,代码行数:21,代码来源:p7_gmx.c
示例16: utest_generation
/* The "generation" test scores sequences generated by the same profile.
* Each Viterbi and Forward score should be >= the trace score of the emitted seq.
* The expectation of Forward scores should be positive.
*/
static void
utest_generation(ESL_GETOPTS *go, ESL_RANDOMNESS *r, ESL_ALPHABET *abc,
P7_PROFILE *gm, P7_HMM *hmm, P7_BG *bg, int nseq)
{
ESL_SQ *sq = esl_sq_CreateDigital(abc);
P7_GMX *gx = p7_gmx_Create(gm->M, 100);
P7_TRACE *tr = p7_trace_Create();
float vsc, fsc, nullsc, tracesc;
float avg_fsc;
int idx;
avg_fsc = 0.0;
for (idx = 0; idx < nseq; idx++)
{
if (p7_ProfileEmit(r, hmm, gm, bg, sq, tr) != eslOK) esl_fatal("profile emission failed");
if (p7_gmx_GrowTo(gx, gm->M, sq->n) != eslOK) esl_fatal("failed to reallocate gmx");
if (p7_GViterbi(sq->dsq, sq->n, gm, gx, &vsc) != eslOK) esl_fatal("viterbi failed");
if (p7_GForward(sq->dsq, sq->n, gm, gx, &fsc) != eslOK) esl_fatal("forward failed");
if (p7_trace_Score(tr, sq->dsq, gm, &tracesc) != eslOK) esl_fatal("trace score failed");
if (p7_bg_NullOne(bg, sq->dsq, sq->n, &nullsc) != eslOK) esl_fatal("null score failed");
if (vsc < tracesc) esl_fatal("viterbi score is less than trace");
if (fsc < tracesc) esl_fatal("forward score is less than trace");
if (vsc > fsc) esl_fatal("viterbi score is greater than forward");
if (esl_opt_GetBoolean(go, "--vv"))
printf("generated: len=%d v=%8.4f f=%8.4f t=%8.4f\n", (int) sq->n, vsc, fsc, tracesc);
avg_fsc += (fsc - nullsc);
}
avg_fsc /= (float) nseq;
if (avg_fsc < 0.) esl_fatal("generation: Forward scores have negative expectation (%f nats)", avg_fsc);
p7_gmx_Destroy(gx);
p7_trace_Destroy(tr);
esl_sq_Destroy(sq);
}
开发者ID:Denis84,项目名称:EPA-WorkBench,代码行数:43,代码来源:generic_fwdback.c
示例17: main
int
main(int argc, char **argv)
{
ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
char *hmmfile = esl_opt_GetArg(go, 1);
ESL_STOPWATCH *w = esl_stopwatch_Create();
ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s"));
ESL_ALPHABET *abc = NULL;
P7_HMMFILE *hfp = NULL;
P7_HMM *hmm = NULL;
P7_BG *bg = NULL;
P7_PROFILE *gm = NULL;
P7_GMX *gx = NULL;
int L = esl_opt_GetInteger(go, "-L");
int N = esl_opt_GetInteger(go, "-N");
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
int i;
float sc;
double base_time, bench_time, Mcs;
if (p7_hmmfile_Open(hmmfile, NULL, &hfp) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile);
if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM");
bg = p7_bg_Create(abc);
p7_bg_SetLength(bg, L);
gm = p7_profile_Create(hmm->M, abc);
p7_ProfileConfig(hmm, bg, gm, L, p7_UNILOCAL);
gx = p7_gmx_Create(gm->M, L);
/* Baseline time. */
esl_stopwatch_Start(w);
for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
esl_stopwatch_Stop(w);
base_time = w->user;
/* Benchmark time. */
esl_stopwatch_Start(w);
for (i = 0; i < N; i++)
{
esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
p7_GViterbi (dsq, L, gm, gx, &sc);
}
esl_stopwatch_Stop(w);
bench_time = w->user - base_time;
Mcs = (double) N * (double) L * (double) gm->M * 1e-6 / (double) bench_time;
esl_stopwatch_Display(stdout, w, "# CPU time: ");
printf("# M = %d\n", gm->M);
printf("# %.1f Mc/s\n", Mcs);
free(dsq);
p7_gmx_Destroy(gx);
p7_profile_Destroy(gm);
p7_bg_Destroy(bg);
p7_hmm_Destroy(hmm);
p7_hmmfile_Close(hfp);
esl_alphabet_Destroy(abc);
esl_stopwatch_Destroy(w);
esl_randomness_Destroy(r);
esl_getopts_Destroy(go);
return 0;
}
开发者ID:TuftsBCB,项目名称:SMURFBuild,代码行数:62,代码来源:generic_viterbi.c
示例18: main
int
main(int argc, char **argv)
{
ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 2, argc, argv, banner, usage);
char *hmmfile = esl_opt_GetArg(go, 1);
char *seqfile = esl_opt_GetArg(go, 2);
ESL_ALPHABET *abc = NULL;
P7_HMMFILE *hfp = NULL;
P7_HMM *hmm = NULL;
P7_BG *bg = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
P7_OMX *ox = NULL;
P7_GMX *gx = NULL;
ESL_SQ *sq = NULL;
ESL_SQFILE *sqfp = NULL;
int format = eslSQFILE_UNKNOWN;
float vfraw, nullsc, vfscore;
float graw, gscore;
double P, gP;
int status;
/* Read in one HMM */
if (p7_hmmfile_Open(hmmfile, NULL, &hfp) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile);
if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM");
/* Read in one sequence */
sq = esl_sq_CreateDigital(abc);
status = esl_sqfile_Open(seqfile, format, NULL, &sqfp);
if (status == eslENOTFOUND) p7_Fail("No such file.");
else if (status == eslEFORMAT) p7_Fail("Format unrecognized.");
else if (status == eslEINVAL) p7_Fail("Can't autodetect stdin or .gz.");
else if (status != eslOK) p7_Fail("Open failed, code %d.", status);
/* create default null model, then create and optimize profile */
bg = p7_bg_Create(abc);
p7_bg_SetLength(bg, sq->n);
gm = p7_profile_Create(hmm->M, abc);
p7_ProfileConfig(hmm, bg, gm, sq->n, p7_LOCAL);
om = p7_oprofile_Create(gm->M, abc);
p7_oprofile_Convert(gm, om);
/* allocate DP matrices, both a generic and an optimized one */
ox = p7_omx_Create(gm->M, 0, sq->n);
gx = p7_gmx_Create(gm->M, sq->n);
/* Useful to place and compile in for debugging:
p7_oprofile_Dump(stdout, om); dumps the optimized profile
p7_omx_SetDumpMode(ox, TRUE); makes the fast DP algorithms dump their matrices
p7_gmx_Dump(stdout, gx); dumps a generic DP matrix
*/
while ((status = esl_sqio_Read(sqfp, sq)) == eslOK)
{
p7_oprofile_ReconfigLength(om, sq->n);
p7_ReconfigLength(gm, sq->n);
p7_bg_SetLength(bg, sq->n);
p7_omx_GrowTo(ox, om->M, 0, sq->n);
p7_gmx_GrowTo(gx, gm->M, sq->n);
p7_ViterbiFilter (sq->dsq, sq->n, om, ox, &vfraw);
p7_bg_NullOne (bg, sq->dsq, sq->n, &nullsc);
vfscore = (vfraw - nullsc) / eslCONST_LOG2;
P = esl_gumbel_surv(vfscore, om->evparam[p7_VMU], om->evparam[p7_VLAMBDA]);
p7_GViterbi (sq->dsq, sq->n, gm, gx, &graw);
gscore = (graw - nullsc) / eslCONST_LOG2;
gP = esl_gumbel_surv(gscore, gm->evparam[p7_VMU], gm->evparam[p7_VLAMBDA]);
if (esl_opt_GetBoolean(go, "-1"))
{
printf("%-30s\t%-20s\t%9.2g\t%7.2f\t%9.2g\t%7.2f\n", sq->name, hmm->name, P, vfscore, gP, gscore);
}
else if (esl_opt_GetBoolean(go, "-P"))
{ /* output suitable for direct use in profmark benchmark postprocessors: */
printf("%g\t%.2f\t%s\t%s\n", P, vfscore, sq->name, hmm->name);
}
else
{
printf("target sequence: %s\n", sq->name);
printf("vit filter raw score: %.2f nats\n", vfraw);
printf("null score: %.2f nats\n", nullsc);
printf("per-seq score: %.2f bits\n", vfscore);
printf("P-value: %g\n", P);
printf("GViterbi raw score: %.2f nats\n", graw);
printf("GViterbi seq score: %.2f bits\n", gscore);
printf("GViterbi P-value: %g\n", gP);
}
esl_sq_Reuse(sq);
}
/* cleanup */
esl_sq_Destroy(sq);
esl_sqfile_Close(sqfp);
p7_omx_Destroy(ox);
p7_gmx_Destroy(gx);
p7_oprofile_Destroy(om);
p7_profile_Destroy(gm);
p7_bg_Destroy(bg);
//.........这里部分代码省略.........
开发者ID:TuftsBCB,项目名称:SMURFBuild,代码行数:101,代码来源:vitfilter.c
示例19: main
int
main(int argc, char **argv)
{
ESL_GETOPTS *go = esl_getopts_CreateDefaultApp(options, 1, argc, argv, banner, usage);
char *hmmfile = esl_opt_GetArg(go, 1);
ESL_STOPWATCH *w = esl_stopwatch_Create();
ESL_RANDOMNESS *r = esl_randomness_CreateFast(esl_opt_GetInteger(go, "-s"));
ESL_ALPHABET *abc = NULL;
P7_HMMFILE *hfp = NULL;
P7_HMM *hmm = NULL;
P7_BG *bg = NULL;
P7_PROFILE *gm = NULL;
P7_OPROFILE *om = NULL;
P7_GMX *gx = NULL;
P7_OMX *fwd = NULL;
P7_OMX *bck = NULL;
int L = esl_opt_GetInteger(go, "-L");
int N = esl_opt_GetInteger(go, "-N");
ESL_DSQ *dsq = malloc(sizeof(ESL_DSQ) * (L+2));
int i;
float fsc, bsc;
float fsc2, bsc2;
double base_time, bench_time, Mcs;
p7_FLogsumInit();
if (p7_hmmfile_Open(hmmfile, NULL, &hfp) != eslOK) p7_Fail("Failed to open HMM file %s", hmmfile);
if (p7_hmmfile_Read(hfp, &abc, &hmm) != eslOK) p7_Fail("Failed to read HMM");
bg = p7_bg_Create(abc);
p7_bg_SetLength(bg, L);
gm = p7_profile_Create(hmm->M, abc);
p7_ProfileConfig(hmm, bg, gm, L, p7_LOCAL);
om = p7_oprofile_Create(gm->M, abc);
p7_oprofile_Convert(gm, om);
p7_oprofile_ReconfigLength(om, L);
if (esl_opt_GetBoolean(go, "-x") && p7_FLogsumError(-0.4, -0.5) > 0.0001)
p7_Fail("-x here requires p7_Logsum() recompiled in slow exact mode");
if (esl_opt_GetBoolean(go, "-P")) {
fwd = p7_omx_Create(gm->M, 0, L);
bck = p7_omx_Create(gm->M, 0, L);
} else {
fwd = p7_omx_Create(gm->M, L, L);
bck = p7_omx_Create(gm->M, L, L);
}
gx = p7_gmx_Create(gm->M, L);
/* Get a baseline time: how long it takes just to generate the sequences */
esl_stopwatch_Start(w);
for (i = 0; i < N; i++) esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
esl_stopwatch_Stop(w);
base_time = w->user;
esl_stopwatch_Start(w);
for (i = 0; i < N; i++)
{
esl_rsq_xfIID(r, bg->f, abc->K, L, dsq);
if (esl_opt_GetBoolean(go, "-P")) {
if (! esl_opt_GetBoolean(go, "-B")) p7_ForwardParser (dsq, L, om, fwd, &fsc);
if (! esl_opt_GetBoolean(go, "-F")) p7_BackwardParser(dsq, L, om, fwd, bck, &bsc);
} else {
if (! esl_opt_GetBoolean(go, "-B")) p7_Forward (dsq, L, om, fwd, &fsc);
if (! esl_opt_GetBoolean(go, "-F")) p7_Backward(dsq, L, om, fwd, bck, &bsc);
}
if (esl_opt_GetBoolean(go, "-c") || esl_opt_GetBoolean(go, "-x"))
{
p7_GForward (dsq, L, gm, gx, &fsc2);
p7_GBackward(dsq, L, gm, gx, &bsc2);
printf("%.4f %.4f %.4f %.4f\n", fsc, bsc, fsc2, bsc2);
}
}
esl_stopwatch_Stop(w);
bench_time = w->user - base_time;
Mcs = (double) N * (doub
|
请发表评论