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

📄 xutils.c

📁 是有关基因比对的经典算法的实现。这对于初学计算生物学的人是非常重要的算法。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
 
#include <vibrant.h>
 
#include "clustalw.h"
#include "xmenu.h"

static int get_series_matrixname(char *usermtrxname, short *usermat,short *aa_xref,int usermatnum,int *matnum,PrompT mattext);

extern Boolean x_menus;
extern WindoW mainw;
extern GrouP matrix_list,pw_matrix_list;
extern GrouP dnamatrix_list,pw_dnamatrix_list;
extern GrouP seg_matrix_list,seg_dnamatrix_list;
extern GrouP score_matrix_list,score_dnamatrix_list;
extern Boolean  interactive;
extern Boolean  dnaflag;
extern char     hyd_residues[];
extern sint     gap_dist;
extern Boolean  no_var_penalties, no_hyd_penalties, no_pref_penalties;
extern Boolean  use_endgaps;
extern Boolean  realign_endgappenalties;
extern Boolean  align_endgappenalties;
extern sint     divergence_cutoff;
extern Boolean  lowercase; /* Flag for GDE output - set on comm. line*/
extern Boolean  cl_seq_numbers;
extern sint     output_order;
extern Boolean  save_log;
extern Boolean  quick_pairalign;
extern Boolean  neg_matrix;
extern Boolean  output_clustal, output_nbrf, output_phylip, output_gcg, output_gde, output_nexus;
extern Boolean  save_parameters;
extern Boolean  output_tree_clustal, output_tree_phylip, output_tree_distances, output_tree_nexus;
extern char	seqname[];
extern float	transition_weight;
extern float    gap_open,      gap_extend;
extern float    dna_gap_open,  dna_gap_extend;
extern float    prot_gap_open, prot_gap_extend;
extern float    pw_go_penalty,      pw_ge_penalty;
extern float    dna_pw_go_penalty,  dna_pw_ge_penalty;
extern float    prot_pw_go_penalty, prot_pw_ge_penalty;
extern sint    wind_gap,ktup,window,signif;
extern sint    dna_wind_gap, dna_ktup, dna_window, dna_signif;
extern sint    prot_wind_gap,prot_ktup,prot_window,prot_signif;
extern Boolean tossgaps;  /* Ignore places in align. where ANY seq. has a gap*/
extern Boolean kimura;    /* Use correction for multiple substitutions */
extern sint boot_ntrials;               /* number of bootstrap trials */
extern unsigned sint boot_ran_seed;     /* random number generator seed */
extern sint    bootstrap_format;
extern sint struct_penalties,struct_penalties1,struct_penalties2;
extern sint output_struct_penalties;
extern sint    profile1_nseqs;
extern sint     nseqs;
extern Boolean use_ss1, use_ss2;
extern int inverted;
extern char     mtrxname[], pw_mtrxname[];
extern char     usermtrxname[], pw_usermtrxname[];
extern sint        matnum,pw_matnum;
extern short    usermat[], pw_usermat[];
extern short    aa_xref[], pw_aa_xref[];
extern char     dnamtrxname[], pw_dnamtrxname[];
extern char     dnausermtrxname[], pw_dnausermtrxname[];
extern sint        dnamatnum,pw_dnamatnum;
extern short    userdnamat[], pw_userdnamat[];
extern short    dna_xref[], pw_dna_xref[];
extern Boolean  use_ambiguities;

extern MatMenu matrix_menu;
extern MatMenu dnamatrix_menu;
extern MatMenu pw_matrix_menu;

extern sint        helix_penalty;
extern sint        strand_penalty;
extern sint        loop_penalty;
extern sint        helix_end_minus;
extern sint        helix_end_plus;
extern sint        strand_end_minus;
extern sint        strand_end_plus;
extern sint        helix_end_penalty;
extern sint        strand_end_penalty;

extern TexT savealntext;
extern GrouP slow_para,fast_para;

extern PrompT   message;           /* used in temporary message window */
extern Boolean mess_output;
extern FILE *save_log_fd;
extern color color_lut[];
extern spanel  seq_panel;        /* data for multiple alignment area */
extern spanel  prf_panel[];       /* data for profile alignment areas */
extern Boolean aln_mode;
extern Boolean fixed_prf_scroll;
extern Boolean output_ss;
extern Boolean output_gp;
extern PrompT mattext,pwmattext;
extern PrompT dnamattext,pwdnamattext;
extern int    save_format;
extern Boolean residue_exceptions;
extern Boolean segment_exceptions;
extern int font_size;
extern FonT datafont;
extern int av_font[];
extern TexT blocklentext;
extern IteM segment_item;

extern int      pagesize;
extern int      orientation;
extern Boolean  ps_ruler,ps_header,resize,ps_curve,ps_resno;
extern int      first_printres,last_printres,blocklen;
extern int      firstres,lastres;



void set_go_penalty(TexT t)
{
	char str[10];
	float temp;

	GetTitle(t,str,10);
	temp = atof(str);
	if (temp < 0 || temp > 100)
		return;
	gap_open=temp;

        if(dnaflag)
         	dna_gap_open     = gap_open;
	else
         	prot_gap_open     = gap_open;
}

void set_ge_penalty(TexT t)
{
	char str[10];
	float temp;

	GetTitle(t,str,10);
	temp = atof(str);
	if (temp < 0 || temp > 100)
		return;
	gap_extend=temp;

        if(dnaflag)
         	dna_gap_extend     = gap_extend;
	else
         	prot_gap_extend     = gap_extend;
}

void set_gap_dist(TexT t)
{
	char str[10];
	int temp;

	GetTitle(t,str,10);
	temp = atoi(str);
	if (temp < 0 || temp > 100)
		return;
	gap_dist = temp;

}

void set_ntrials(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
	if (str == NULL) return;
	temp = atoi(str);
        if (temp < 0 || temp > 10000)
                return;
        boot_ntrials = temp;
}

void set_ran_seed(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
        temp = atoi(str);
        if (temp < 0 || temp > 1000)
                return;
        boot_ran_seed = temp;
}

void set_div_seq(TexT t)
{
	char str[10];
	int temp;

	GetTitle(t,str,10);
	temp = atoi(str);
	if (temp < 0 || temp > 100)
		return;
	divergence_cutoff = temp;
}

void set_pw_go_penalty(TexT t)
{
        char str[10];
        float temp;
 
        GetTitle(t,str,10);
        temp = atof(str);
        if (temp < 0 || temp > 100)
                return;

	pw_go_penalty = temp;
        if(dnaflag)
         	dna_pw_go_penalty     = pw_go_penalty;
	else
         	prot_pw_go_penalty     = pw_go_penalty;
}

void set_pw_ge_penalty(TexT t)
{
        char str[10];
        float temp;
 
        GetTitle(t,str,10);
        temp = atof(str);
        if (temp < 0 || temp > 100)
                return;

	pw_ge_penalty = temp;
        if(dnaflag)
         	dna_pw_ge_penalty     = pw_ge_penalty;
	else
         	prot_pw_ge_penalty     = pw_ge_penalty;
}

void set_gp(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
        temp = atoi(str);
        if (temp < 0 || temp > 100)
                return;

	wind_gap = temp;
        if(dnaflag)
         	dna_wind_gap       = wind_gap;
	else
         	prot_wind_gap       = wind_gap;
}

void set_ktuple(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
        temp = atoi(str);
        if (temp < 0 || temp > 100)
                return;

	ktup = temp;
        if(dnaflag)
         	dna_ktup       = ktup;
	else
         	prot_ktup       = ktup;
}

void set_topdiags(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
        temp = atoi(str);
        if (temp < 0 || temp > 100)
                return;

	signif = temp;
        if(dnaflag)
         	dna_signif     = signif;
	else
         	prot_signif     = signif;
}

void set_window(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
        temp = atoi(str);
        if (temp < 0 || temp > 100)
                return;

	window = temp;
        if(dnaflag)
         	dna_window     = window;
	else
         	prot_window     = window;
}

void set_hyd_res(TexT t)
{
	int i,j;
	char tstr[27];

	GetTitle(t,tstr,27);
	for (i=0,j=0;i<strlen(hyd_residues) && i<27;i++)
	{
		if (isalpha(tstr[i]))
			hyd_residues[j++] = tstr[i];
	}
	hyd_residues[j]='\0';
}

void set_button(ButtoN l,Boolean *value)
{
	int tmp;

	tmp = GetStatus(l);
	if (tmp == TRUE)
		*value = TRUE;
	else
		*value = FALSE;
}

void set_toggle(PopuP l,Boolean *value)
{
	int tmp;

	tmp = GetValue(l);
	if (tmp == 1)
		*value = TRUE;
	else
		*value = FALSE;
}

void set_pref_penalties(PopuP l)
{
	set_toggle(l,&no_pref_penalties);
}

void set_hyd_penalties(PopuP l)
{
	set_toggle(l,&no_hyd_penalties);
}
void set_var_penalties(PopuP l)
{
	set_toggle(l,&no_var_penalties);
}
void set_endgaps(PopuP l)
{
	set_toggle(l,&use_endgaps);
}
void set_align_endgappenalties(PopuP l)
{
	set_toggle(l,&align_endgappenalties);
}
void set_realign_endgappenalties(PopuP l)
{
	set_toggle(l,&realign_endgappenalties);
}
void set_case(PopuP l)
{
	set_toggle(l,&lowercase);
}
void set_snos(PopuP l)
{
	set_toggle(l,&cl_seq_numbers);
}
void set_save_paras(PopuP l)
{
	set_toggle(l,&save_parameters);
}
void set_transitions(TexT t)
{
        char str[10];
        float temp;
 
        GetTitle(t,str,10);
        temp = atof(str);
        if (temp < 0 || temp > 100)
                return;
 
        transition_weight = temp;
}

void set_ambiguities(PopuP l)
{
	set_toggle(l,&use_ambiguities);
}

void set_neg_matrix(PopuP l)
{
	set_toggle(l,&neg_matrix);
}

void set_output_nbrf(ButtoN l)
{
	set_button(l,&output_nbrf);
}
void set_output_phylip(ButtoN l)
{
	set_button(l,&output_phylip);
}
void set_output_gcg(ButtoN l)
{
	set_button(l,&output_gcg);
}

void set_output_order(PopuP g)
{
	int tmp;
	tmp = GetValue(g);
	if (tmp == 1)
		output_order=INPUT;
	else
		output_order=ALIGNED;
}

void set_pagesize(PopuP g)
{
	int tmp;
	char tstr[10];

	tmp = GetValue(g);
	if (tmp == 1)
		pagesize=A4;
	else if (tmp == 2)
		pagesize=A3;
	else
		pagesize=USLETTER;
	if(orientation==LANDSCAPE)
	{
		if(pagesize==A4) blocklen=150;
		else if (pagesize==A3) blocklen=250;
		else blocklen=150;
	}
	else
	{
		if(pagesize==A4) blocklen=80;
		else if (pagesize==A3) blocklen=150;
		else blocklen=150;
	}
	sprintf(tstr,"%d",blocklen);
	SetTitle(blocklentext,tstr);
}
void set_orientation(PopuP g)
{
	int tmp;
	char tstr[10];

	tmp = GetValue(g);
	if (tmp == 1)
		orientation=LANDSCAPE;
	else
		orientation=PORTRAIT;

	if(orientation==LANDSCAPE)
	{
		if(pagesize==A4) blocklen=150;
		else if (pagesize==A3) blocklen=250;
		else blocklen=150;
	}
	else
	{
		if(pagesize==A4) blocklen=80;
		else if (pagesize==A3) blocklen=150;
		else blocklen=150;
	}
	sprintf(tstr,"%d",blocklen);
	SetTitle(blocklentext,tstr);
}
void set_resno(PopuP l)
{
	set_toggle(l,&ps_resno);
}
void set_curve(PopuP l)
{
	set_toggle(l,&ps_curve);
}
void set_ruler(PopuP l)
{
	set_toggle(l,&ps_ruler);
}
void set_header(PopuP l)
{
	set_toggle(l,&ps_header);
}
void set_resize(PopuP l)
{
	set_toggle(l,&resize);
}
void set_fres(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
	if (str == NULL) return;
	temp = atoi(str);
        if (temp < 0 || temp > 100000)
                return;
        firstres = temp;
}
void set_lres(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
	if (str == NULL) return;
	temp = atoi(str);
        if (temp < 0 || temp > 100000)
                return;
        lastres = temp;
}
void set_fpres(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
	if (str == NULL) return;
	temp = atoi(str);
        if (temp < 0 || temp > 10000)
                return;
        first_printres = temp;
}
void set_lpres(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
	if (str == NULL) return;
	temp = atoi(str);
        if (temp < 0 || temp > 10000)
                return;
        last_printres = temp;
}
void set_blocklen(TexT t)
{
        char str[10];
        int temp;
 
        GetTitle(t,str,10);
	if (str == NULL) return;
	temp = atoi(str);
        if (temp < 0 || temp > 10000)
                return;
        blocklen = temp;
}
void set_output_tree_nexus(ButtoN l)
{
	set_button(l,&output_tree_nexus);
}
void set_output_tree_clustal(ButtoN l)
{
	set_button(l,&output_tree_clustal);
}
void set_output_tree_phylip(ButtoN l)
{
	set_button(l,&output_tree_phylip);
}
void set_output_tree_distances(ButtoN l)
{
	set_button(l,&output_tree_distances);
}
void set_tossgaps(IteM i)
{
	tossgaps=GetStatus(i);
}
void set_kimura(IteM i)
{
	kimura=GetStatus(i);
}
void set_boot_format(PopuP g)
{
	int tmp;
	tmp = GetValue(g);
	if (tmp == 1)
		bootstrap_format=BS_NODE_LABELS;
	else
		bootstrap_format=BS_BRANCH_LABELS;
}

char prompt_for_yes_no(char *title,char *prompt)
{
        char lin2[MESSLENGTH*MESSLINES];
 
	if(!x_menus) return;

	strcpy(lin2,title);
	strcat(lin2,".\n");
	strcat(lin2,prompt);
	strcat(lin2,"?");
	if (Message(MSG_YN,lin2)==ANS_NO)
                return('n');
        else
                return('y');
 
}
 

/*
*	fatal()
*
*	Prints error msg and exits.
*	Variadic parameter list can be passed.
*
*	Return values:
*		none
*/

void fatal( char *msg,...)
{
	va_list ap;
	char istr[MESSLENGTH*MESSLINES] = "FATAL ERROR: ";
	char vstr[1000];

	
	va_start(ap,msg);
	vsprintf(vstr,msg,ap);
	va_end(ap);
	strncat(istr,vstr,MESSLENGTH*MESSLINES-20);
	Message(MSG_FATAL,istr);
}

/*
*	error()
*
*	Prints error msg.
*	Variadic parameter list can be passed.

⌨️ 快捷键说明

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