void rsf_out(FILE *rsfout, sint fres, sint len, ALN mult_aln, ALNOUT_OPT alnout_opt) { char *seq, residue; char val; sint n; sint i,ii,nseqs; sint j,k,slen,cstart,cend; sint start,query_start,query_end; sint line_length=60; sint max_aln_length,max_names; sint color; char shape[20]; char type[20]; sint nrep,*reptype; nseqs=0; max_aln_length=max_names=0; for(i=0; i<mult_aln.nseqs; i++) { if (mult_aln.seqs[i].output_index>=0) { if(mult_aln.seqs[i].len>max_aln_length) max_aln_length=mult_aln.seqs[i].len; if(strlen(mult_aln.seqs[i].name)>max_names) max_names=strlen(mult_aln.seqs[i].name); nseqs++; } } seq = (char *)ckalloc((max_aln_length+1) * sizeof(char)); fprintf(rsfout,"!!RICH_SEQUENCE 1.0\n..\n"); /* set n to the number of sequence groups */ n=0; for(i=0; i<nseqs; i++) if(mult_aln.seqs[i].simgroup>n) n=mult_aln.seqs[i].simgroup; n++; for(ii=0; ii<nseqs; ii++) { i = get_seq_with_index(mult_aln.seqs,mult_aln.nseqs,ii); if(i<0) continue; fprintf(rsfout, "{\nname "); if(alnout_opt.output_names==1) fprintf(rsfout, "%s\n", mult_aln.seqs[i].nid); else if(alnout_opt.output_names==2) fprintf(rsfout, "%s\n", mult_aln.seqs[i].access); else fprintf(rsfout, "%s\n", mult_aln.seqs[i].name); fprintf(rsfout, "descrip %s\n", mult_aln.seqs[i].title); fprintf(rsfout, "creator %s %s\n", mult_aln.seqs[i].org,mult_aln.seqs[i].lifedomain); fprintf(rsfout, "type "); fprintf(rsfout, mult_aln.dnaflag ? "DNA" : "PROTEIN"); fprintf(rsfout, "\n"); if(mult_aln.seqs[i].simgroup>0) fprintf(rsfout, "group %d\n",mult_aln.seqs[i].simgroup); else { fprintf(rsfout, "group %d\n",n); } if(mult_aln.seqs[i].sense!=0) fprintf(rsfout, "strand %d\n",mult_aln.seqs[i].sense); for(j=0;j<MAXFTTYPE;j++) { for(k=0;k<mult_aln.ft[i].nentries[j];k++) { if(mult_aln.ft[i].data[j][k].start<0) continue; pos2col(mult_aln.seqs[i].data,mult_aln.ft[i].data[j][k].start,mult_aln.ft[i].data[j][k].end,&cstart,&cend); color=mult_aln.ft[i].data[j][k].color; if(color>=0) { if(color>12) color=12; fprintf(rsfout, "feature %d %d %d %s %s %s\n",cstart+1,cend+1, color, "square", "solid", mult_aln.ft[i].data[j][k].type); fprintf(rsfout," FT %-10s%5d %5d %s\n", mult_aln.ft[i].data[j][k].type, mult_aln.ft[i].data[j][k].start+1, mult_aln.ft[i].data[j][k].end+1, mult_aln.ft[i].data[j][k].name); } } } slen = 0; for(j=fres; j<fres+len; j++) { val = mult_aln.seqs[i].data[j]; if(val==EOS) break; else if(!isalpha(val)) residue = '.'; else { residue = val; } seq[j-fres] = (char)toupper((int)residue); slen++; } fprintf(rsfout,"sequence\n "); for(j=0; j<slen; j++) { fprintf(rsfout,"%c",seq[j]); if( (j == slen-1)) fprintf(rsfout,"\n"); else if(( j!=0 && (j+1) % line_length == 0)) fprintf(rsfout,"\n "); } fprintf(rsfout,"}\n"); } seq=ckfree((void *)seq); }
void add_ft_entry(ALNPTR mult_aln,sint seq,sint first,sint last,sint type,sint code,float score,char *ctype,char *iname,sint is,sint ie) { sint n,color; sint fr,lr; sint fc,lc; char name[100]; if(mult_aln->ft[seq].nentries[type]>MAXFT) { fprintf(stdout,"WARNING: too many features in %s %d (%d)\n",mult_aln->seqs[seq].name,mult_aln->ft[seq].nentries[type],type); return; } if(last<is || first>ie) return; if(first<is) first=is; if(last>ie) last=ie; n=mult_aln->ft[seq].nentries[type]; alloc_ft_entry(&mult_aln->ft[seq].data[type][n]); strcpy(mult_aln->ft[seq].data[type][n].type,ctype); col2pos(mult_aln->seqs[seq].data,first,last,&fr,&lr); pos2col(mult_aln->seqs[seq].data,fr,lr,&fc,&lc); if(fc==first) mult_aln->ft[seq].data[type][n].start=fr; else mult_aln->ft[seq].data[type][n].start=fr+1; if(lc==last) mult_aln->ft[seq].data[type][n].end=lr; else mult_aln->ft[seq].data[type][n].end=lr-1; strcpy(name,iname); if(strcmp(ctype,"BLOCK")==0) { if (strcmp(name,"SBLOCK")==0) color=code; else if (strcmp(name,"LBLOCK")==0) color=12; } else if(strcmp(ctype,"REGION")==0) { color=10; } else if(strcmp(ctype,"SEQERR")==0) { color=3; } else if(strcmp(ctype,"ANCHOR")==0) { color=code; } else if(strcmp(ctype,"REPEAT")==0) { color=code; } else if(strcmp(ctype,"STRUCT")==0) { if(strncmp(name,"PRED_HELIX",10)==0) color=VLRED; else if(strncmp(name,"PRED_STRAND",11)==0) color=VLGREEN; else if(strncmp(name,"PROP_HELIX",10)==0) color=LRED; else if(strncmp(name,"PROP_STRAND",11)==11) color=LGREEN; else if(strcmp(name,"HELIX")==0) color=RED; else if(strcmp(name,"STRAND")==0) color=GREEN; } else if(strcmp(ctype,"TRANSMEM")==0) { if(strncmp(name,"PRED_",5)==0) { sprintf(name,"%s %.2f",name,score); color=10; } else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=1; } else if(strcmp(ctype,"COIL")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=6; } else if(strcmp(ctype,"LOWCOMP")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=6; } else if(strcmp(ctype,"DOMAIN")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else if(strncmp(name,"DNA_BIND",8)==0) color=2; else if(strncmp(name,"ZN_FING",7)==0) color=3; else color=1; } else if(strcmp(ctype,"PFAM-A")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=code; } else if(strcmp(ctype,"PFAM-B")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=code; } else if(strcmp(ctype,"PROSITE")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=code; } else if(strcmp(ctype,"SIGNAL")==0) { if(strncmp(name,"PRED_",5)==0) { sprintf(name,"%s %.2f",name,score); color=LGRAY; } else if(strncmp(name,"PROP_",5)==0) color=GRAY; else if(strncmp(name,"NUCLEAR",7)==0) color=1; else if(strncmp(name,"CHLOROPLAST",11)==0) color=2; else if(strncmp(name,"MITOCHONDRION",13)==0) color=3; else if(strncmp(name,"MICROBODY",9)==0) color=4; else color=5; } else if(strcmp(ctype,"VARSPLIC")==0) { if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else color=5; } else if(strcmp(ctype,"MOD_RES")==0) { color=0; if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else if(strncmp(name,"ACETYLATION",11)==0) color=1; else if(strncmp(name,"ALKYLATION",10)==0) color=2; else if(strncmp(name,"HYDROXYLATION",13)==0) color=3; else if(strncmp(name,"METHYLATION",11)==0) color=4; else if(strncmp(name,"PHOSPHORYLATION",15)==0) color=5; else if(strncmp(name,"SULFATION",9)==0) color=6; else if(strncmp(name,"PYRROLIDONE",11)==0) color=7; else if(strncmp(name,"MYRISTATE",9)==0) color=8; else if(strncmp(name,"PALMITATE",9)==0) color=9; else if(strncmp(name,"FARNESYL",8)==0) color=10; else if(strncmp(name,"GERANYL",7)==0) color=11; else if(strncmp(name,"GPI-ANCHOR",3)==0) color=12; else if(strncmp(name,"N-ACYL",5)==0) color=13; } else if(strcmp(ctype,"SITE")==0) { color=0; if(strncmp(name,"PRED_",5)==0) color=LGRAY; else if(strncmp(name,"PROP_",5)==0) color=GRAY; else if(strncmp(name,"SITE",4)==0) color=0; else if(strncmp(name,"ACT_SITE",8)==0) color=1; else if(strncmp(name,"CARBOHYD",8)==0) color=2; else if(strncmp(name,"DISULFID",8)==0) color=3; else if(strncmp(name,"BINDING",7)==0) color=4; else if(strncmp(name,"NP_BIND",7)==0) color=5; else if(strncmp(name,"CA_BIND",7)==0) color=6; else if(strncmp(name,"TRANSIT",7)==0) color=7; else if(strncmp(name,"LIPID",5)==0) color=8; else if(strncmp(name,"METAL",5)==0) color=9; } strcpy(mult_aln->ft[seq].data[type][n].name,name); mult_aln->ft[seq].data[type][n].score=score; mult_aln->ft[seq].data[type][n].color=color; mult_aln->ft[seq].nentries[type]++; }