misc.c

来自「这是一个基于HMM 模型的生物多序列比对算法的linux实现版本。hmmer」· C语言 代码 · 共 178 行

C
178
字号
/************************************************************ * HMMER - Biological sequence analysis with profile HMMs * Copyright (C) 1992-2003 Washington University School of Medicine * All Rights Reserved *  *     This source code is distributed under the terms of the *     GNU General Public License. See the files COPYING and LICENSE *     for details. ************************************************************//* misc.c * SRE, Thu Jul 15 18:49:19 1993 *  * Functions that I don't know quite where to put yet. */#include "config.h"#include "squidconf.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <float.h>#include <limits.h>#include "squid.h"#include "structs.h"/* Function: HMMERBanner() * Date:     SRE, Sun Jun 20 17:19:41 1999 [Graeme's kitchen] * * Purpose:  Print a package version and copyright banner. *           Used by all the main()'s. *            *    Expects to be able to pick up defined preprocessor variables: *    variable          example *    --------           --------------   *    PACKAGE_NAME      "HMMER" *    PACKAGE_VERSION   "2.0.42" *    PACKAGE_DATE      "April 1999" *    PACKAGE_COPYRIGHT "Copyright (C) 1992-1999 Washington University School of Medicine" *    PACKAGE_LICENSE   "Freely distributed under the GNU General Public License (GPL)." *            *    This gives us a general mechanism to update release information *    without changing multiple points in the code. *  * Args:     fp     - where to print it *           banner - one-line program description, e.g.: *                    "foobar - make bars from foo with elan"  * Returns:  (void) */voidHMMERBanner(FILE *fp, char *banner){  fprintf(fp, "%s\n", banner);  fprintf(fp, "%s %s (%s)\n", PACKAGE_NAME, PACKAGE_VERSION, PACKAGE_DATE);  fprintf(fp, "%s\n", PACKAGE_COPYRIGHT);  fprintf(fp, "%s\n", PACKAGE_LICENSE);  fprintf(fp, "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");}/* Function: Getword() *  * Purpose:  little function used by ReadPrior() and ReadHMM() to parse *           next valid field out of an open file, ignoring *           comments. '#' marks the beginning of a comment. * * Arg:      fp   - open file for reading *           type - sqdARG_INT, sqdARG_FLOAT, or sqdARG_STRING from squid.h */char *Getword(FILE *fp, int type){  static char buffer[512];  static char *sptr = NULL;    if (sptr != NULL) sptr = strtok(NULL, " \t\n");  while (sptr == NULL)    {      if ((sptr = fgets(buffer, 512, fp)) == NULL) return NULL;      if ((sptr = strchr(buffer, '#')) != NULL) *sptr = '\0';      sptr = strtok(buffer, " \t\n");    }  switch (type) {  case sqdARG_STRING:     if (strlen(sptr) == 0) {       Warn("Parse failed: expected string, got nothing");       sptr = NULL;     }    break;  case sqdARG_INT:        if (!IsInt(sptr)) {      Warn("Parse failed: expected integer, got %s", sptr);      sptr = NULL;    }    break;  case sqdARG_FLOAT:    if (!IsReal(sptr)) {      Warn("Parse failed: expected real value, got %s", sptr);       sptr = NULL;    }    break;  }  return sptr;}/* Function: Getline() *  * Purpose:  Get the next non-blank, non-comment line from an open file. *           A comment line has '#' as the first non-whitespace character. *           Returns NULL if no line is found.  *           Syntax is the same as fgets(). *            * Args:     s  - allocated storage for line *           n  - number of characters allocated for s *           fp - open FILE * *            * Return:   Either s, or NULL if no new line is found. */        char * Getline(char *s, int n, FILE *fp){  char *first;  do {    if (fgets(s, n, fp) == NULL) return NULL;    first = s; while (isspace((int) (*first))) first++;  } while (*first == '#' || *first == '\0');  return s;}/* Function: SetAutocuts() * Date:     SRE, Thu Jun  8 08:19:46 2000 [TW721 over Ireland] * * Purpose:  Set score thresholds using the GA, TC, or NC information *           in an HMM. * * Args:     thresh - score threshold structure. autocut must be set *                    properly (CUT_GA, CUT_NC, or CUT_TC). *           hmm    - HMM containing appropriate score cutoff info * * Returns:  1 on success. *           0 if HMM does not have the score cutoffs available -- caller *             will have to decide on a fallback plan. *           Has no effect (and returns success) if autocut is *           CUT_NONE. */intSetAutocuts(struct threshold_s *thresh, struct plan7_s *hmm){  if (thresh->autocut == CUT_GA) {    if (! (hmm->flags & PLAN7_GA)) return 0;    thresh->globT = hmm->ga1;    thresh->domT  = hmm->ga2;    thresh->globE = thresh->domE = FLT_MAX;  } else if (thresh->autocut == CUT_NC) {    if (! (hmm->flags & PLAN7_NC)) return 0;    thresh->globT = hmm->nc1;    thresh->domT  = hmm->nc2;    thresh->globE = thresh->domE = FLT_MAX;  } else if (thresh->autocut == CUT_TC) {    if (! (hmm->flags & PLAN7_TC)) return 0;    thresh->globT = hmm->tc1;    thresh->domT  = hmm->tc2;    thresh->globE = thresh->domE = FLT_MAX;  }  return 1;}

⌨️ 快捷键说明

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