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

📄 xmenu.c

📁 是有关基因比对的经典算法的实现。这对于初学计算生物学的人是非常重要的算法。
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (output_tree_clustal)
	{
		make_prompt(output_list, "SAVE CLUSTAL TREE AS :");
		bootnjtreetext=DialogText(output_list, "", 35, NULL);
		strcpy(name,path);
        	strcat(name,"njb");
		SetTitle(bootnjtreetext, name);
		Break(output_list);
	}
	if (output_tree_phylip)
	{
		make_prompt(output_list, "SAVE PHYLIP TREE AS :");
		bootphtreetext=DialogText(output_list, "", 35, NULL);
		strcpy(name,path);
        	strcat(name,"phb");
		SetTitle(bootphtreetext, name);
		Break(output_list);
	}
	if (output_tree_nexus)
	{
		make_prompt(output_list, "SAVE NEXUS TREE AS :");
		bootnxstreetext=DialogText(output_list, "", 35, NULL);
		strcpy(name,path);
        	strcat(name,"treb");
		SetTitle(bootnxstreetext, name);
		Break(output_list);
	}
	SelectFont(systemFont);
	stdLineHeight=15;
	Break(boottreew);
	bootgr=HiddenGroup(boottreew, 2, 0, NULL);
	shift(bootgr, 140, 20);
	boot_ok=PushButton(bootgr, "  OK  ", BootstrapTree);
	shift(bootgr, 20, 0);
	boot_can=PushButton(bootgr, "CANCEL", CancelWin);


	Show(boottreew);
}

static void CreateAlignTree(ButtoN but)
{
	char path[FILENAMELEN];
	char phylip_name[FILENAMELEN];

	GetTitle(savetreetext, filename, FILENAMELEN);
	strcpy(phylip_name,filename);
	stripspace(filename);

	info("Doing pairwise alignments...");
	if(save_log)
	{
        	get_path(seqname,path);
        	strcpy(save_log_filename,path);
        	strcat(save_log_filename,"log");
		if ((save_log_fd=fopen(save_log_filename,"a"))==NULL)
			error("Cannot open log file %s",save_log_filename);
	}

	WatchCursor();
	if (Visible(savetreew))
	{
		Remove(savetreew);
		savetreew=NULL;
	}
	make_tree(phylip_name);
	if(save_log && save_log_fd!=NULL)
	{
		fclose(save_log_fd);
		save_log_fd=NULL;
	}
	ArrowCursor();
	info("Tree %s created",filename);
}

static void DrawTree(ButtoN but)
{
	char path[FILENAMELEN];
	char phylip_name[FILENAMELEN];
	char clustal_name[FILENAMELEN];
	char dist_name[FILENAMELEN];
	char nexus_name[FILENAMELEN];

	if(output_tree_clustal)
	{
		GetTitle(drawnjtreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(clustal_name,filename);
	}
	if(output_tree_phylip)
	{
		GetTitle(drawphtreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(phylip_name,filename);
	}
	if(output_tree_distances)
	{
		GetTitle(drawdsttreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(dist_name,filename);
	}
	if(output_tree_nexus)
	{
		GetTitle(drawnxstreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(nexus_name,filename);
	}

	info("Calculating tree...");
	WatchCursor();
	if(save_log)
	{
        	get_path(seqname,path);
        	strcpy(save_log_filename,path);
        	strcat(save_log_filename,"log");
		if ((save_log_fd=fopen(save_log_filename,"a"))==NULL)
			error("Cannot open log file %s",save_log_filename);
	}
	if (Visible(drawtreew))
	{
		Remove(drawtreew);
		drawtreew=NULL;
	}
	phylogenetic_tree(phylip_name,clustal_name,dist_name,nexus_name);
	if(save_log && save_log_fd!=NULL)
	{
		fclose(save_log_fd);
		save_log_fd=NULL;
	}
	ArrowCursor();
	info("Tree %s created",filename);
}

static void BootstrapTree(ButtoN but)
{
	char phylip_name[FILENAMELEN];
	char clustal_name[FILENAMELEN];
	char nexus_name[FILENAMELEN];
	char path[FILENAMELEN];

	if(output_tree_clustal)
	{
		GetTitle(bootnjtreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(clustal_name,filename);
	}
	if(output_tree_phylip)
	{
		GetTitle(bootphtreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(phylip_name,filename);
	}
	if(output_tree_nexus)
	{
		GetTitle(bootnxstreetext, filename, FILENAMELEN);
		stripspace(filename);
		strcpy(nexus_name,filename);
	}

	info("Bootstrapping tree...");

	WatchCursor();
	if(save_log)
	{
        	get_path(seqname,path);
        	strcpy(save_log_filename,path);
        	strcat(save_log_filename,"log");
		if ((save_log_fd=fopen(save_log_filename,"a"))==NULL)
			warning("Cannot open log file %s",save_log_filename);
	}
	if (Visible(boottreew))
	{
		Remove(boottreew);
		boottreew=NULL;
	}
	bootstrap_tree(phylip_name,clustal_name,nexus_name);
	if(save_log && save_log_fd!=NULL)
	{
		fclose(save_log_fd);
		save_log_fd=NULL;
	}
	info("Bootstrap tree %s created",filename);
	ArrowCursor();
}

static void OpenSeqFile (IteM item)
{
	int n;
	panel_data data;

	if (nseqs>0)
	{
		if (Message(MSG_YN,"Replace existing sequences ?")==ANS_NO)
			return;
	}

	if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
 
	strcpy(seqname,filename);
	GetPanelExtra(seq_panel.names,&data);
	data.nseqs=0;
	data.vseqs=0;
	SetPanelExtra(seq_panel.names,&data);
	GetPanelExtra(seq_panel.seqs,&data);
	data.nseqs=0;
	data.vseqs=0;
	SetPanelExtra(seq_panel.seqs,&data);
	
	n=seq_input(FALSE);
	if (n<=0)
	{
		info("File %s not loaded.",seqname);
		return;
	}

	load_aln(seq_panel,0,nseqs-1,TRUE);

	ncutseqs=0;

	info("File %s loaded.",seqname);
}

static void AppendSeqFile (IteM item)
{
	int n;
	panel_data data;

	if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
 
	strcpy(seqname,filename);
	GetPanelExtra(seq_panel.names,&data);
	data.nseqs=0;
	SetPanelExtra(seq_panel.names,&data);
	n=seq_input(TRUE);
	if (n<=0)
	{
		info("File %s not loaded.",seqname);
		return;
	}

	load_aln(seq_panel,0,nseqs-1,FALSE);

	info("File %s appended.",seqname);
}

static void OpenPrf1File (IteM item)
{
	int i,j,n,tmpn=0,tmpfs;
	sint *tmplen_array;
	sint *tmpindex;
	char **tmp_array;
	char **tmpnames;
	char **tmptitles;
	panel_data data;

	if (profile1_nseqs>0)
	{
		if (Message(MSG_YN,"Replace existing sequences ?")==ANS_NO)
			return;
	}

	if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
 
	if(!profile2_empty)
	{
		tmpn=nseqs-profile1_nseqs;
		tmpfs=profile1_nseqs;
		tmpnames=(char **)ckalloc((tmpn+1)*sizeof(char *));
		tmptitles=(char **)ckalloc((tmpn+1)*sizeof(char *));
		tmplen_array=(sint *)ckalloc((tmpn+1)*sizeof(sint));
		tmpindex=(sint *)ckalloc((tmpn+1)*sizeof(sint));
		tmp_array=(char **)ckalloc((tmpn+1)*sizeof(char *));
		for(i=profile1_nseqs+1;i<=nseqs;i++)
		{
			tmpnames[i-profile1_nseqs-1]=(char *)ckalloc((MAXNAMES+2)*sizeof(char));
			tmptitles[i-profile1_nseqs-1]=(char *)ckalloc((MAXTITLES+2)*sizeof(char));
			strcpy(tmpnames[i-profile1_nseqs-1],names[i]);

			strcpy(tmptitles[i-profile1_nseqs-1],titles[i]);
			tmplen_array[i-profile1_nseqs-1]=seqlen_array[i];
			tmpindex[i-profile1_nseqs-1]=output_index[i]-tmpfs+profile1_nseqs;
			tmp_array[i-profile1_nseqs-1]=(char *)ckalloc((seqlen_array[i]+2)*sizeof(char));
			for(j=1;j<=seqlen_array[i];j++)
				tmp_array[i-profile1_nseqs-1][j]=seq_array[i][j];
		}
	}

	strcpy(seqname,filename);
	GetPanelExtra(prf_panel[0].names,&data);
	data.nseqs=0;
	data.vseqs=0;
	SetPanelExtra(prf_panel[0].names,&data);
	GetPanelExtra(prf_panel[0].seqs,&data);
	data.nseqs=0;
	data.vseqs=0;
	SetPanelExtra(prf_panel[0].seqs,&data);
        profile_no = 1;
        n=profile_input();
	if (n<=0)
	{
		info("File %s not loaded.",seqname);
		return;
	}
	strcpy(profile1_name,seqname);
	load_aln(prf_panel[0],0,profile1_nseqs-1,TRUE);

	if(tmpn!=0)
	{
		nseqs=tmpn+profile1_nseqs;
		realloc_aln(profile1_nseqs+1,nseqs);
		for(i=profile1_nseqs+1;i<=nseqs;i++)
		{
			names[i]=(char *)ckalloc((MAXNAMES+2)*sizeof(char));
			titles[i]=(char *)ckalloc((MAXTITLES+2)*sizeof(char));

			strcpy(names[i],tmpnames[i-profile1_nseqs-1]);
			ckfree(tmpnames[i-profile1_nseqs-1]);
			strcpy(titles[i],tmptitles[i-profile1_nseqs-1]);
			ckfree(tmptitles[i-profile1_nseqs-1]);
			seqlen_array[i]=tmplen_array[i-profile1_nseqs-1];
			output_index[i]=tmpindex[i-profile1_nseqs-1]-tmpfs+profile1_nseqs;
			seq_array[i]=(char *)ckalloc((seqlen_array[i]+2)*sizeof(char));
			for(j=1;j<=seqlen_array[i];j++)
				seq_array[i][j]=tmp_array[i-profile1_nseqs-1][j];
			ckfree(tmp_array[i-profile1_nseqs-1]);
		}
		ckfree(tmpnames);
		ckfree(tmptitles);
		ckfree(tmplen_array);
		ckfree(tmpindex);
		ckfree(tmp_array);
		profile2_empty=FALSE;
	}
	load_aln(prf_panel[1],profile1_nseqs,nseqs-1,TRUE);

	ncutseqs=0;

	info("File %s loaded.",profile1_name);
}

static void OpenPrf2File (IteM item)
{
	int n;
	panel_data data;

	if(profile1_empty)
	{
		error("You must load profile 1 first.");
		return;
	}

	if (nseqs>profile1_nseqs)
	{
		if (Message(MSG_YN,"Replace existing sequences ?")==ANS_NO)
			return;
	}

	if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
 
	strcpy(seqname,filename);
	GetPanelExtra(prf_panel[1].names,&data);
	data.nseqs=0;
	data.vseqs=0;
	SetPanelExtra(prf_panel[1].names,&data);
	GetPanelExtra(prf_panel[1].seqs,&data);
	data.nseqs=0;
	data.vseqs=0;
	SetPanelExtra(prf_panel[1].seqs,&data);
        profile_no = 2;
        n=profile_input();
	if (n<=0)
	{
		info("File %s not loaded.",seqname);
		return;
	}
	strcpy(profile2_name,seqname);
	ncutseqs=0;
	load_aln(prf_panel[1],profile1_nseqs,nseqs-1,TRUE);

	info("File %s loaded.",profile2_name);
}


static void BlackandWhite(IteM item)
{

	ncolors=1;
	
	if (aln_mode == MULTIPLEM)
		color_seqs();
	else
	{
		color_prf1();
		color_prf2();
	}
	usebw=TRUE;
	usedefcolors=FALSE;
	useusercolors=FALSE;
        SetStatus(bw_item,usebw);
        SetStatus(defcol_item,usedefcolors);
        SetStatus(usercol_item,useusercolors);
	info("Done.");
}


static void DefColorPar(IteM item)
{

	if (explicit_par_file != NULL)
		ckfree(explicit_par_file);
	explicit_par_file=NULL;
	if(dnaflag)
		par_file=find_file(def_dnapar_file);
	else
		par_file=find_file(def_protpar_file);
	init_color_parameters(par_file);
	if (aln_mode == MULTIPLEM)
		color_seqs();
	else
	{
		color_prf1();
		color_prf2();
	}
	usebw=FALSE;
	usedefcolors=TRUE;
	useusercolors=FALSE;
        SetStatus(bw_item,usebw);
        SetStatus(defcol_item,usedefcolors);
        SetStatus(usercol_item,useusercolors);
	info("Done.");
}

void set_reset_new_gaps(IteM i)
{
        reset_alignments_new=GetStatus(i);
	if(reset_alignments_new==TRUE)
	{
		reset_alignments_all=FALSE;
        	SetStatus(all_gaps_item,reset_alignments_all);
	}
}
void set_reset_all_gaps(IteM i)
{
        reset_alignments_all=GetStatus(i);
	if(reset_alignments_all==TRUE)
	{
		reset_alignments_new=FALSE;
        	SetStatus(new_gaps_item,reset_alignments_new);
	}
}
 

static void OpenColorParWin(IteM item)
{

	read_file_window("Input Color File","COLOR PARAMETER FILE NAME:",explicit_par_file,OpenColorPar);
}

static void OpenColorPar(ButtoN but)
{
	GetTitle(readfiletext, filename, FILENAMELEN);
	stripspace(filename);
 
	if (explicit_par_file != NULL)
		ckfree(explicit_par_file);
	explicit_par_file=(char *)ckalloc(FILENAMELEN*sizeof(char));
	if (par_file != NULL)
		ckfree(par_file);
	par_file=(char *)ckalloc(FILENAMELEN*sizeof(char));

	strcpy(explicit_par_file,filename);
	strcpy(par_file,filename);
        info("Loading color file: %s\n",par_file);
	init_color_parameters(par_file);
	if (Visible(readfilew))
	{
		Remove(readfilew);
		readfilew=NULL;
	}
	if (aln_mode == MULTIPLEM)
		color_seqs();
	else
	{
		color_prf1();
		color_prf2();
	}
	usebw=FALSE;
	usedefcolors=FALSE;
	useusercolors=TRUE;
        SetStatus(bw_item,usebw);
        SetStatus(defcol_item,usedefcolors);
        SetStatus(usercol_item,useusercolors);
	info("Done.");
}

static void RemoveGapPos(IteM item)
{
	int i,j,sl;
	Boolean sel=FALSE;

	if (nseqs==0)
	{
		Message(MSG_OK,"No file loaded.");
		return;
	}

	if (Message(MSG_YN,"Remove positions that contain gaps in all sequences ?")==ANS_NO)
		return;

⌨️ 快捷键说明

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