1 /* Routines for manipulating sequence alignment score matrices. 2 */ 3 #ifndef eslSCOREMATRIX_INCLUDED 4 #define eslSCOREMATRIX_INCLUDED 5 #include "esl_config.h" 6 7 #include "esl_alphabet.h" 8 #include "esl_fileparser.h" 9 #include "esl_dmatrix.h" 10 11 /* ESL_SCOREMATRIX: 12 * allocation is in one array in s[0]. 13 * 14 * i,j can range from 0..Kp-1, including all characters valid in the alphabet. 15 * Only values for 0..K-1 (canonical alphabet) are mandatory. 16 */ 17 typedef struct { 18 int **s; /* s[i][j] is the score of aligning residue i,j; i,j range 0..Kp-1 */ 19 int K; /* size of base alphabet (duplicate of S->abc_r->K) */ 20 int Kp; /* full size of s[][], including degeneracies (duplicate of S->abc_r->Kp) */ 21 22 /* bookkeeping for degenerate residues */ 23 char *isval; /* array 0..Kp-1: which residues of alphabet have valid scores in S. */ 24 const ESL_ALPHABET *abc_r; /* reference to the alphabet: includes K, Kp, and sym order */ 25 26 /* bookkeeping that lets us output exactly the residue order we read in a matrix file */ 27 int nc; /* number of residues with scores (inclusive of *, if present) */ 28 char *outorder; /* NUL-terminated string 0..nc-1 giving order of residues in col/row labels */ 29 30 char *name; /* optional: name of score matrix; or NULL */ 31 char *path; /* optional: full path to file that score matrix was read from; or NULL */ 32 } ESL_SCOREMATRIX; 33 34 35 36 /* 1. The ESL_SCOREMATRIX object. */ 37 extern ESL_SCOREMATRIX *esl_scorematrix_Create(const ESL_ALPHABET *abc); 38 extern int esl_scorematrix_Copy(const ESL_SCOREMATRIX *src, ESL_SCOREMATRIX *dest); 39 extern ESL_SCOREMATRIX *esl_scorematrix_Clone(const ESL_SCOREMATRIX *S); 40 extern int esl_scorematrix_Compare(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2); 41 extern int esl_scorematrix_CompareCanon(const ESL_SCOREMATRIX *S1, const ESL_SCOREMATRIX *S2); 42 extern int esl_scorematrix_Max(const ESL_SCOREMATRIX *S); 43 extern int esl_scorematrix_Min(const ESL_SCOREMATRIX *S); 44 extern int esl_scorematrix_IsSymmetric(const ESL_SCOREMATRIX *S); 45 extern int esl_scorematrix_ExpectedScore(ESL_SCOREMATRIX *S, double *fi, double *fj, double *ret_E); 46 extern int esl_scorematrix_RelEntropy(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, 47 double lambda, double *ret_D); 48 extern int esl_scorematrix_JointToConditionalOnQuery(const ESL_ALPHABET *abc, ESL_DMATRIX *P); 49 extern void esl_scorematrix_Destroy(ESL_SCOREMATRIX *S); 50 51 /* 2. Some classic score matrices */ 52 extern int esl_scorematrix_Set(const char *name, ESL_SCOREMATRIX *S); 53 extern int esl_scorematrix_SetIdentity(ESL_SCOREMATRIX *S); 54 55 /* 3. Deriving a score matrix probabilistically */ 56 extern int esl_scorematrix_SetFromProbs(ESL_SCOREMATRIX *S, double lambda, const ESL_DMATRIX *P, 57 const double *fi, const double *fj); 58 extern int esl_scorematrix_SetWAG(ESL_SCOREMATRIX *S, double lambda, double t); 59 60 /* 4. Reading/writing score matrices. */ 61 extern int esl_scorematrix_Read(ESL_FILEPARSER *efp, const ESL_ALPHABET *abc, ESL_SCOREMATRIX **ret_S); 62 extern int esl_scorematrix_Write(FILE *fp, const ESL_SCOREMATRIX *S); 63 64 /* 5. Implicit probabilistic basis, I: given bg. */ 65 extern int esl_scorematrix_ProbifyGivenBG(const ESL_SCOREMATRIX *S, const double *fi, const double *fj, 66 double *opt_lambda, ESL_DMATRIX **opt_P); 67 68 /* 6. Implicit probabilistic basis, II: bg unknown. */ 69 extern int esl_scorematrix_Probify(const ESL_SCOREMATRIX *S, ESL_DMATRIX **opt_P, 70 double **opt_fi, double **opt_fj, double *opt_lambda); 71 72 #endif /*eslSCOREMATRIX_INCLUDED*/ 73 74 75 76 77