message.h

来自「EM算法的改进」· C头文件 代码 · 共 181 行

H
181
字号
/* * $Id: message.h 1339 2006-09-21 19:46:28Z tbailey $ *  * $Log$ * Revision 1.1  2005/07/29 18:44:39  nadya * Initial revision * *//************************************************************************								       **	MEME++							       **	Copyright 1996, The Regents of the University of California    **	Author: Bill Grundy					       **								       ************************************************************************/#ifndef MESSAGE_H#  define MESSAGE_H#include <meme.h> /* We need the defn of S_POINT. *//***************************************************************************//* Type declarations *//***************************************************************************//* To do a reduction, we first pass small packets around containing   the discriminating information. */typedef struct reduction_packet {  double data;				/* logev */  double s_width;			/* starting width */  double s_nsites;			/* starting nsites */  double ID; /* Use a double so the MPI type handle is simple. */} REDUCE_PACKET;typedef struct s_point_packet {  double score;  double iseq; /* Use a double so the MPI type handle is simple. */  double ioff; /* Use a double so the MPI type handle is simple. */} S_POINT_PACKET;/* This structure stores each processor's starting and ending points   in the search for starting points. */typedef struct seq_params {  int start_seq;  int start_off;  int end_seq;  int end_off;} SEQ_PARAMS;/***************************************************************************//* Global variables *//***************************************************************************/EXTERN SEQ_PARAMS *start_n_end;/***************************************************************************//* Macros  *//***************************************************************************//*	llr_node(nsites, pal)	True if this node does llr pvalue table for nsites*//***************************************************************************/#define llr_node(nsites, pal) ((nsites/((pal)?2:1)) % mpNodes())/***************************************************************************//*	balance_loop*//***************************************************************************/#ifdef PARALLEL#define balance_loop(s, n) balance_loop1(s, n)#else#define balance_loop(s, n) #endif/***************************************************************************//*	load_balance_llr(nsites)	Load balancing function for the llr pvalue tables.	Returns true if the node computes table nsites, false otherwise.*//***************************************************************************/#ifdef PARALLEL#define load_balance_llr(nsites, pal) (llr_node((nsites),(pal)) == mpMyID())#else#define load_balance_llr(nsites, pal) TRUE#endif/***************************************************************************//*	Broadcast function for llr pvalue tables.*//***************************************************************************/#ifdef PARALLEL#define broadcast_llr(min, max, pal) {					\  int i;								\  double hdr[5];				/* holds header */	\  ndistrs = max;				/* set the global */	\  Resize(distrs, ndistrs+1, DISTR);		/* set of tables */	\  for (i=min; i<=max; i += (pal)?2:1) {		/* bcast from node */	\    if (load_balance_llr(i, (pal))) {		/* pack header */	\      hdr[0] = distrs[i].alpha; 					\      hdr[1] = distrs[i].w ? distrs[i].range[1] : 0; 			\      hdr[2] = distrs[i].offset[1]; 					\      hdr[3] = distrs[i].mean;						\      hdr[4] = distrs[i].w;						\    } 									\    /* broadcast header */						\    mpBroadcast((void *)hdr, 5*sizeof(double), llr_node(i, (pal)));	\    if (!load_balance_llr(i, (pal))) {		/* unpack header */	\      distrs[i].range = NULL;						\      distrs[i].offset = NULL;						\      distrs[i].cdf = NULL;						\      Resize(distrs[i].range, 2, int);					\      Resize(distrs[i].offset, 2, int);					\      Resize(distrs[i].cdf, 2, double *);				\      distrs[i].alpha = hdr[0]; 					\      distrs[i].range[1] = hdr[1]; 					\      distrs[i].offset[1] = hdr[2]; 					\      distrs[i].mean = hdr[3];						\      distrs[i].w = hdr[4];						\      distrs[i].cdf[1] = NULL;						\      Resize(distrs[i].cdf[1], distrs[i].range[1]+1, double);		\    } 									\    /* broadcast the p-value table */					\    if (distrs[i].w) 							\      mpBroadcast((void *)distrs[i].cdf[1],				\        sizeof(double)*(distrs[i].range[1]+1), llr_node(i, (pal))); 	\  }									\}#else#define broadcast_llr(min, max, pal)#endif/***************************************************************************//* Function prototypes *//***************************************************************************/extern void store_consensus(  MODEL *model,  CANDIDATE *candidates);extern void print_model(   char *label,   MODEL *model);extern void reduce_across_models(   MODEL *model,   int alength);extern void balance_loop1(   SAMPLE **samples,   int n_samples);extern void reduce_across_s_points(  S_POINT *s_points,  SAMPLE **samples,  int n_nsites0,  int n_starts);			  extern void get_start_n_end (  int *start_seq,			/* starting sequence number */  int *start_off,			/* offset in starting sequence */  int *end_seq,				/* ending sequence number */  int *end_off 				/* offset in ending sequence */);#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?