⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doinit.c

📁 序列对齐 Compare a protein sequence to a protein sequence database or a DNA sequence to a DNA sequenc
💻 C
字号:
/*	doinit.c	general and function-specific initializations *//* copyright (c) 1996, 1997, 1998  William R. Pearson and the U. of Virginia *//* $Name: fa35_03_06 $ - $Id: doinit.c,v 1.68 2008/02/19 08:50:13 wrp Exp $ *//* this file performs general initializations of search parameters   In addition, it calls several functions in init??.c that provide   program-specific initializations:   f_initenv()	- called from initenv()   f_getopt()	- called from initenv() during a getopt() scan   f_getarg()	- called from initenv() after the getopt() scan*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "defs.h"#include "param.h"#include "upam.h"	/* required for 'U' option change of nascii */#include "structs.h"#define XTERNAL#include "uascii.h"#undef XTERNALextern char *s_optstr;extern int optind;		/* used by getopt() */#ifdef PCOMPLIB#define PARALLEL#include "p_mw.h"extern char pgmdir[];extern char managepgm[];extern char workerpgm[];extern int max_buf_cnt;#define MAX_WORKERS MAXWRKR#endifchar prog_name[MAX_FN];extern void f_initenv(struct mngmsg *, struct pstruct *, unsigned char **);extern void f_lastenv(struct mngmsg *, struct pstruct *);extern void f_getopt(char, char *, struct mngmsg *, struct pstruct *);extern void f_getarg(int, char **, int, struct mngmsg *, struct pstruct *);void ann_ascii(int *qascii, char *ann_arr);int set_markx(int markx, int val);int optcnt;int max_workers=MAX_WORKERS;#ifdef PCOMPLIBint worker_1=0;int worker_n=0;#endifextern char *optarg;/* initenv ()  initializes the environment */void initenv (int argc, char **argv, struct mngmsg *m_msg, 		 struct pstruct *ppst, unsigned char **aa0){   char   *cptr, ctmp;   int     copt, itmp;   /* options for all search functions */   char   *g_optstr = "ab:BC:d:DE:F:HiIJ:K:l:Lm:N:O:QqR:T:v:V:w:W:X:Z:";   char    optstring[MAX_STR];/*  these initializations will be used by all functions */   /* prog_name[] is only used for error messages */   strncpy(prog_name,argv[0],sizeof(prog_name));   prog_name[sizeof(prog_name)-1]='\0';#ifdef PARALLEL   if ((cptr = getenv ("MANAGEPGM")) != NULL) strncpy (managepgm, cptr, 120);   if ((cptr = getenv ("WORKERPGM")) != NULL) strncpy (workerpgm, cptr, 120);   if ((cptr = getenv ("PGMDIR")) != NULL) strncpy (pgmdir, cptr, 120);#endif   m_msg->ltitle[0] = '\0';   if ((cptr=getenv("FASTLIBS"))!=NULL) {     strncpy(m_msg->flstr,cptr,MAX_FN);     m_msg->flstr[MAX_FN-1] = '\0';   }   else m_msg->flstr[0]='\0';   m_msg->std_output = 1;   m_msg->hist.hist_a = NULL;   m_msg->outfile[0] = '\0';   m_msg->ldnaseq = SEQT_PROT;	/* library is protein */   m_msg->n1_low = ppst->n1_low = 0;   m_msg->n1_high = ppst->n1_high = BIGNUM;   m_msg->ql_start = 1;	/* start with first query sequence */   m_msg->ql_stop = BIGNUM;	/* end with the last query sequence */   m_msg->pamd1 = MAXSQ;   m_msg->pamd2 = MAXSQ;   m_msg->term_code = 0;   ppst->tr_type = 0;   ppst->debug_lib = 0;   m_msg->nshow = 20;   ppst->max_repeat = 50;#if defined(PCOMPLIB)   m_msg->nohist = 1;   m_msg->mshow = 20;#else   m_msg->nohist = 0;   m_msg->mshow = 50;#endif   m_msg->do_showbest = 1;   m_msg->ashow = -1;   m_msg->nmlen = DEF_NMLEN;   m_msg->z_bits = 1;   m_msg->mshow_flg = 0;   m_msg->aln.llen = 0;   m_msg->aln.llcntx = 30;   m_msg->aln.llcntx_flg = 0;   m_msg->e_low = 0.0;   m_msg->e_cut_set = 0;   m_msg->revcomp = 0;   m_msg->self = 0;   m_msg->long_info = 0;   m_msg->maxn = 0;   m_msg->dupn = SEQDUP;   m_msg->dfile[0] = '\0';   m_msg->tname[0] = '\0';   m_msg->lname[0] = '\0';   m_msg->show_code = 0;   m_msg->aln.showall = 0;   m_msg->markx = 0;   m_msg->sq0off = m_msg->sq1off = 1;   strncpy(m_msg->sqnam,"aa",4);   strncpy(m_msg->sqtype,"protein",10);   m_msg->q_ann_flg = 0;   m_msg->ann_arr[0] = '\0';   m_msg->aa0a = NULL;      ppst->e_cut = m_msg->e_cut = 10.0;   ppst->zs_win = 0;   ppst->show_ident = 0;   ppst->zdb_size = -1;   ppst->zdb_size_set = 0;   ppst->dnaseq = SEQT_PROT;	/* default is protein */   ppst->nt_align = 0;   ppst->other_info = NULL;   f_initenv (m_msg, ppst, aa0);   strncpy (optstring, g_optstr, sizeof (optstring));   strncat (optstring, s_optstr, sizeof (optstring));   while ((copt = getopt (argc, argv, optstring)) != EOF)   {      if (strchr (g_optstr, copt) != NULL)      {	switch (copt) {  /* switches for all options */	case 'a': m_msg->aln.showall = 1; break;	case 'b':	  if (optarg[0] == '$') {	    m_msg->mshow = -1;	    m_msg->e_cut = 10000000.0;	    break;	  }	  else sscanf (optarg, "%d", &m_msg->mshow);	  m_msg->e_cut = 10000000.0;	  m_msg->e_cut_set = 1;	  m_msg->mshow_flg = 1;	  break;	case 'B': m_msg->z_bits = 0; break;	case 'C': sscanf(optarg,"%d",&m_msg->nmlen);	  if (m_msg->nmlen > MAX_UID-1) m_msg->nmlen = MAX_UID-1;	  break;	case 'd': sscanf(optarg,"%d",&m_msg->ashow);	  if (m_msg->ashow > m_msg->mshow) m_msg->mshow=m_msg->ashow;	  /* m_msg->ashow_flg = 1; (ashow_flg not in structs.h, not used)*/	  break;	case 'D': ppst->debug_lib = 1;	  break;	case 'E':	  sscanf(optarg,"%lf",&m_msg->e_cut);	  ppst->e_cut = m_msg->e_cut;	  m_msg->e_cut_set = 1;	  break;	case 'F':	  sscanf(optarg,"%lg",&m_msg->e_low);	  m_msg->e_cut_set = 1;	  break;	case 'H':#if defined(PCOMPLIB)	  m_msg->nohist = 0; break;#else	  m_msg->nohist = 1; break;#endif	case 'i':	  m_msg->revcomp = 1; break;#ifdef PARALLEL	case 'I':	  m_msg->self = 1; break;	case 'J':	  if (optarg[0]==':') {	    m_msg->ql_start = 0;	    sscanf(optarg,":%d",&m_msg->ql_stop);	    m_msg->ql_stop++;	  }	  else if (!strchr(optarg,':')) {	    m_msg->ql_stop = BIGNUM;	    sscanf(optarg,"%d",&m_msg->ql_start);	  }	  else {	    sscanf(optarg,"%d:%d",&m_msg->ql_start,&m_msg->ql_stop);	    m_msg->ql_stop++;	  }	  break;	case 'K':	  sscanf(optarg,"%d",&max_buf_cnt);	  break;#else	case 'I':	  ppst->show_ident=1;	  break;	case 'K':	  sscanf(optarg,"%d", &ppst->max_repeat);	  break;#endif	case 'l':	  strncpy(m_msg->flstr,optarg,MAX_FN);	  m_msg->flstr[MAX_FN-1]='\0';	  break;	case 'L':	  m_msg->long_info = 1; break;	case 'm':	  sscanf(optarg,"%d%c",&itmp,&ctmp);	  if (itmp==9 && ctmp=='c') {	    m_msg->show_code = SHOW_CODE_ALIGN;	  }	  else if (itmp==9 && ctmp=='i') {	    m_msg->show_code = SHOW_CODE_ID;	  }	  if (itmp > 6 && itmp != 11 && itmp != 10 && itmp != 9 ) itmp = 0;	  m_msg->markx = set_markx(m_msg->markx,itmp);	  if (itmp == 11) { m_msg->std_output = 0;}	  break;	case 'N':	  sscanf(optarg,"%d",&m_msg->maxn);	  break;	case 'O':	  strncpy(m_msg->outfile,optarg,MAX_FN);	  m_msg->outfile[MAX_FN-1]='\0';	  break;	case 'q':	case 'Q':	  m_msg->quiet = 1;	  break;	case 'R':	  strncpy (m_msg->dfile, optarg, MAX_FN);	  m_msg->dfile[MAX_FN-1]='\0';	  break;	case 'T':#ifdef PCOMPLIB	  if (strchr(optarg,'-') != NULL) {	    sscanf(optarg,"%d-%d",&worker_1,&worker_n);	    if (worker_1 > worker_n) {	      worker_1 = worker_n = 0;	    }	  }	  else #endif	    sscanf (optarg, "%d", &max_workers);	  if (max_workers < 0) max_workers=1;	  break;	case 'v':	  sscanf (optarg,"%d",&ppst->zs_win);	  break;	case 'V':	  strncpy(m_msg->ann_arr+1,optarg,MAX_FN-2);	  m_msg->ann_arr[0]='\0';	  m_msg->ann_arr[MAX_FN-2]='\0';	  m_msg->q_ann_flg = 1;	  ann_ascii(qascii, m_msg->ann_arr);	  break;/*	case 'V':	  fprintf(stderr," -V option not currently supported in parallel\n");	  break;*/	case 'w':	  sscanf (optarg,"%d",&m_msg->aln.llen);	  if (m_msg->aln.llen < 10) m_msg->aln.llen = 10;	  if (m_msg->aln.llen > 200) m_msg->aln.llen = 200;	  if (!m_msg->aln.llcntx_flg) m_msg->aln.llcntx = m_msg->aln.llen/2;	  break;	case 'W':	  sscanf (optarg,"%d",&m_msg->aln.llcntx);	  m_msg->aln.llcntx_flg = 1;	  break;	case 'X':	  sscanf (optarg,"%ld %ld",&m_msg->sq0off,&m_msg->sq1off); break;	case 'Z':	  sscanf(optarg,"%ld",&ppst->zdb_size);	  ppst->zdb_size_set = 1;	  break;	}      }      else if (strchr (s_optstr, copt))	 f_getopt (copt, optarg, m_msg, ppst);   }   optind--;   f_lastenv (m_msg, ppst);   if (argc - optind < 3) return;   m_msg->tnamesize = sizeof (m_msg->tname);   if (argc - optind > 1) strncpy (m_msg->tname, argv[optind + 1],MAX_FN);   if (argc - optind > 2) { strncpy(m_msg->lname, argv[optind + 2],MAX_FN); }   f_getarg (argc, argv, optind, m_msg, ppst);}intann_scan(unsigned char *aa0, int n0, struct mngmsg *m_msg, int seqtype){  unsigned char *aa0p, *aa0d, *aa0ad;  int n_n0;  /* count how many "real" residues */  if (seqtype==SEQT_UNK) {    for (n_n0=0, aa0p = aa0; aa0p < aa0+n0; aa0p++) {      if (*aa0p > '@' || *aa0p == ESS ) n_n0++;    }  }  else {    for (n_n0=0, aa0p = aa0; aa0p < aa0+n0; aa0p++) {      if (*aa0p < NANN ) n_n0++;    }  }  aa0d = aa0;  /* n_n0 has the real sequence length */  if ((m_msg->aa0a = calloc(n_n0+2, sizeof(char)))==NULL) {    fprintf(stderr," cannot allocate annotation sequence: %d\n",n_n0);    m_msg->q_ann_flg = 0;    if (seqtype==SEQT_UNK) {      for (aa0p = aa0; aa0p < aa0+n0; aa0p++) {	if (*aa0p > '@' || *aa0p == ESS) {*aa0d++ = *aa0p;}      }    }    else {      for (aa0p = aa0; aa0p < aa0+n0; aa0p++) {	if (*aa0p < NANN) {*aa0d++ = *aa0p;}      }    }      *aa0d = '\0';    return n_n0;  }  aa0ad = m_msg->aa0a;  if (seqtype==SEQT_UNK) {    for (aa0p = aa0; aa0p<aa0+n0; aa0p++) {      if (*aa0p > '@' || *aa0p == ESS) {*aa0d++ = *aa0p; *aa0ad++='\0';}      else if (aa0ad > m_msg->aa0a) { aa0ad[-1] = *aa0p - NANN;}    }  }  else {    for (aa0p = aa0; aa0p<aa0+n0; aa0p++) {      if (*aa0p < NANN) {*aa0d++ = *aa0p; *aa0ad++='\0';}      else if (aa0ad > m_msg->aa0a) { aa0ad[-1] = *aa0p - NANN;}    }  }  *aa0ad = *aa0d = '\0';  return n_n0;}voidann_ascii(int *qascii, char *ann_arr){  char *ann_p;  int ann_ix = NANN+1;  ann_arr[0] = ' ';  if (strchr(ann_arr+1,'*')) {qascii['*'] = NA;}  for (ann_p = ann_arr+1; *ann_p; ann_p++) {    if (qascii[*ann_p] == NA) { qascii[*ann_p] = ann_ix++;}  }}int set_markx(int markx, int val) {  if (val < 3) {    return markx | (MX_ATYPE & val);  }  else if (val == 3) {    markx |= (MX_ATYPE + MX_ASEP);  }  else if (val == 4) {    markx |= (MX_ATYPE + MX_AMAP);  }  else if (val == 5) {    markx |= MX_AMAP;  }  else if (val == 6) {    markx |= (MX_HTML) ;  }  else if (val == 9) {    markx |= MX_M9SUMM;  }  else if (val == 10) {    markx |= MX_M10FORM;  }  else if (val == 11) {    markx |= MX_M11OUT;  }  return markx;}

⌨️ 快捷键说明

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