static void utest_Compare(void) { ESL_RANDOMNESS *r = esl_randomness_CreateFast(42); ESL_ALPHABET *abc = esl_alphabet_Create(eslAMINO); P7_HMM *hmm = NULL; P7_BG *bg = NULL; P7_PROFILE *gm = NULL; P7_PROFILE *gm2 = NULL; int M = 200; int L = 400; p7_modelsample(r, M, abc, &hmm); /* master and worker's sampled profiles are identical */ bg = p7_bg_Create(abc); gm = p7_profile_Create(hmm->M, abc); gm2 = p7_profile_Create(hmm->M, abc); p7_profile_Config(gm, hmm, bg); p7_profile_Config(gm2, hmm, bg); p7_profile_SetLength(gm, L); p7_profile_SetLength(gm2, L); if (p7_profile_Compare(gm, gm2, 0.001) != eslOK) p7_Die("identical profile comparison failed"); p7_profile_Destroy(gm); p7_profile_Destroy(gm2); p7_bg_Destroy(bg); p7_hmm_Destroy(hmm); esl_alphabet_Destroy(abc); esl_randomness_Destroy(r); return; }
/* Function: p7_oprofile_Compare() * Synopsis: Compare two optimized profiles for equality. * Incept: MSF Tue Nov 3, 2009 [Janelia] * * Purpose: Compare the contents of <om1> and <om2>; return * <eslOK> if they are effectively identical profiles, * or <eslFAIL> if not. * * Floating point comparisons are done to a tolerance * of <tol> using <esl_FCompare()>. * * If a comparison fails, an informative error message is * left in <errmsg> to indicate why. * * Internal allocation sizes are not compared, only the * data. * * Args: om1 - one optimized profile to compare * om2 - the other * tol - floating point comparison tolerance; see <esl_FCompare()> * errmsg - ptr to array of at least <eslERRBUFSIZE> characters. * * Returns: <eslOK> on effective equality; <eslFAIL> on difference. */ int p7_oprofile_Compare(P7_OPROFILE *om1, P7_OPROFILE *om2, float tol, char *errmsg) { return p7_profile_Compare(om1, om2, tol); }