1 /* Mixture Dirichlet distributions 2 */ 3 #ifndef eslMIXDCHLET_INCLUDED 4 #define eslMIXDCHLET_INCLUDED 5 6 #include "esl_config.h" 7 8 #include "esl_random.h" 9 #include "esl_fileparser.h" 10 11 /* ESL_MIXDCHLET 12 * 13 * A mixture Dirichlet density, usually used as a prior 14 * for a multinomial model (turning count vectors into probability 15 * parameters). 16 */ 17 typedef struct { 18 /*::cexcerpt::dirichlet_mixdchlet::begin::*/ 19 double *q; /* mixture coefficients q[0..Q-1] */ 20 double **alpha; /* Dirichlet params alpha[0..Q-1][0..K-1] */ 21 int Q; /* number of mixtures, e.g. 9 for Sjolander */ 22 int K; /* alphabet size, e.g. 20 */ 23 24 double *postq; /* temp space 0..Q-1: for posterior P(k|c) for example */ 25 /*::cexcerpt::dirichlet_mixdchlet::end::*/ 26 } ESL_MIXDCHLET; 27 28 29 extern ESL_MIXDCHLET *esl_mixdchlet_Create(int Q, int K); 30 extern void esl_mixdchlet_Destroy(ESL_MIXDCHLET *dchl); 31 32 extern double esl_mixdchlet_logp_c (ESL_MIXDCHLET *dchl, double *c); 33 extern int esl_mixdchlet_MPParameters(ESL_MIXDCHLET *dchl, double *c, double *p); 34 35 36 extern int esl_mixdchlet_Fit(double **c, int N, ESL_MIXDCHLET *dchl, double *opt_nll); 37 extern int esl_mixdchlet_Sample(ESL_RANDOMNESS *rng, ESL_MIXDCHLET *dchl); 38 39 extern int esl_mixdchlet_Read(ESL_FILEPARSER *efp, ESL_MIXDCHLET **ret_dchl); 40 extern int esl_mixdchlet_Write (FILE *fp, const ESL_MIXDCHLET *dchl); 41 extern int esl_mixdchlet_WriteJSON(FILE *fp, const ESL_MIXDCHLET *dchl); 42 43 extern int esl_mixdchlet_Validate(const ESL_MIXDCHLET *dchl, char *errmsg); 44 extern int esl_mixdchlet_Compare(const ESL_MIXDCHLET *d1, const ESL_MIXDCHLET *d2, double tol); 45 extern int esl_mixdchlet_Dump(FILE *fp, const ESL_MIXDCHLET *dchl); 46 47 #endif // eslMIXDCHLET_INCLUDED 48