boolean write_intron_desc(btPasteArea * btp,int start,int stop,int in_number,boolean is_split,char prot,char trans,char * dna) { char buffer[15]; if( is_split ) { sprintf(buffer," %c:%c[%s] ",prot,trans,dna); paste_string_btPasteArea(btp,0,2,buffer,BC_RIGHT,0); } sprintf(buffer," Intron %-2d ",in_number); paste_string_btPasteArea(btp,0,3,buffer,BC_RIGHT,0); sprintf(buffer,"[%-5d:%5d]",start,stop); paste_string_btPasteArea(btp,0,4,buffer,BC_RIGHT,0); return TRUE; }
void print_hsp(gpointer key,gpointer value,gpointer user_data) { Sequence * query; HSPset * set; btCanvas * btc; btPasteArea * btp; int i,j; char q,t; query = (Sequence *)user_data; set = (HSPset *) value; btc = new_Ascii_btCanvas(stdout,12,50,5,3); for(i=0;i<set->len;i++) { for(j=0;j<set->hsp[i]->length;) { btp = get_reserved_left_btCanvas(btc); paste_string_btPasteArea(btp,0,0,query->name,BC_RIGHT,0); paste_string_btPasteArea(btp,0,2,set->hsp[i]->target->name,BC_RIGHT,0); free_btPasteArea(btp); for(;j<set->hsp[i]->length && can_get_paste_area_btCanvas(btc,1) == TRUE;j++) { btp = get_paste_area_btCanvas(btc,1); q = query->seq[set->hsp[i]->query_start+j]; t = set->hsp[i]->target->seq[set->hsp[i]->target_start+j]; paste_char_btPasteArea(btp,0,0,q,0); paste_char_btPasteArea(btp,0,2,t,0); if( q == t ) { paste_char_btPasteArea(btp,0,1,t,0); } free_btPasteArea(btp); } advance_line_btCanvas(btc); } advance_line_btCanvas(btc); } free_btCanvas(btc); }
boolean write_name_start_stuff(btCanvas * btc,char * protname,int protoff,char * dnaname,Sequence * dna,int name_len,AlnColumn * alc) { char buffer[64]; btPasteArea * btp; btp = get_reserved_left_btCanvas(btc); paste_string_btPasteArea(btp,0,0,protname,BC_RIGHT,0); paste_string_btPasteArea(btp,0,3,dnaname,BC_RIGHT,0); sprintf(buffer,"%d",alc->alu[0]->start+1+protoff); paste_string_btPasteArea(btp,name_len+5-strlen(buffer),0,buffer,BC_RIGHT,0); if( dna->offset < dna->end ) sprintf(buffer,"%d",alc->alu[1]->start+1+dna->offset); else sprintf(buffer,"-%d",dna->offset - (alc->alu[1]->start+1)); paste_string_btPasteArea(btp,name_len+5-strlen(buffer),3,buffer,BC_RIGHT,0); free_btPasteArea(btp); return TRUE; }
boolean write_alignment_separator(btCanvas * btc,int aln,int score) { char buffer[64]; btPasteArea * btp; sprintf(buffer,"Alignment %d Score %4.2f (Bits)",aln,Score2Bits(score)); btp = get_paste_area_btCanvas(btc,strlen(buffer)); paste_string_btPasteArea(btp,0,5,buffer,BC_RIGHT,0); free_btPasteArea(btp); advance_line_btCanvas(btc); return TRUE; }
boolean paste_substr_btPasteArea(btPasteArea * bta,int x,int y,const char * str,int len,char (*map_func)(char),btCanvasDirection dir,int format) { char buf[64]; const char *run; int i; for(run=str,i=0;i<len;i++,run++) { if( map_func == NULL ) { buf[i] = *run; } else { buf[i] = (*map_func)(*run); } } buf[i] = '\0'; return paste_string_btPasteArea(bta,x,y,buf,dir,format); }
boolean write_pretty_str_align_btc(AlnBlock * alb,char * qname,char * query,char * tname,char * target,btCanvas * btc) { AlnColumn * alc; AlnUnit * q; AlnUnit * t; char buffer[14]; int number_position; btPasteArea * btp; number_position = strlen(qname); if( strlen(tname) > number_position ) { number_position = strlen(tname); } for(alc=alb->start;alc != NULL;) { /** put names in **/ btp = get_reserved_left_btCanvas(btc); paste_string_btPasteArea(btp,0,0,qname,BC_RIGHT,0); paste_string_btPasteArea(btp,0,2,tname,BC_RIGHT,0); sprintf(buffer,"%d",alc->alu[0]->start+1+1); paste_string_btPasteArea(btp,number_position+2,0,buffer,BC_RIGHT,0); sprintf(buffer,"%d",alc->alu[1]->start+1+1); paste_string_btPasteArea(btp,number_position+2,2,buffer,BC_RIGHT,0); free_btPasteArea(btp); /** now loop over this block **/ for(;alc != NULL && can_get_paste_area_btCanvas(btc,1) == TRUE;alc=alc->next) { q = alc->alu[0]; t = alc->alu[1]; /* * at the end, break */ if( strcmp(q->text_label,"END") == 0 ) { alc = NULL; break; } if( strcmp(t->text_label,"LOOP") == 0 ) { btp = get_paste_area_btCanvas(btc,1); paste_char_btPasteArea(btp,0,0,'L',0); paste_char_btPasteArea(btp,0,1,'$',0); paste_char_btPasteArea(btp,0,2,'L',0); free_btPasteArea(btp); advance_line_btCanvas(btc); for(;alc != NULL && strcmp(alc->alu[1]->text_label,"LOOP") == 0;alc = alc->next) { ; } break; } /* * Get the paste area, length 1, depth will be 3 */ btp = get_paste_area_btCanvas(btc,1); /* * Write in the query sequence * */ if( strcmp(q->text_label,"SEQUENCE") == 0 || strstr(q->text_label,"BOUND") != NULL ) { paste_char_btPasteArea(btp,0,0,((int)query[q->start+1]),0); } else if( strcmp(q->text_label,"UNMATCHED_SEQUENCE") == 0 ) { paste_char_btPasteArea(btp,0,0,tolower((int)query[q->start+1]),0); } else { /** is insert- we could check **/ if( strcmp(q->text_label,"INSERT") != 0 ) { warn("Got an uninterpretable label, %s",q->text_label); paste_char_btPasteArea(btp,0,0,'?',0); } else { paste_char_btPasteArea(btp,0,0,'-',0); } } /* * Write in the target sequence * */ if( strcmp(t->text_label,"SEQUENCE") == 0 ) { paste_char_btPasteArea(btp,0,2,toupper((int)target[t->start+1]),0); } else if( strcmp(t->text_label,"UNMATCHED_SEQUENCE") == 0 ) { paste_char_btPasteArea(btp,0,2,tolower((int)target[t->start+1]),0); } else { /** is insert- we could check **/ if( strcmp(t->text_label,"INSERT") != 0 ) { warn("Got an uninterpretable label, %s",t->text_label); paste_char_btPasteArea(btp,0,2,'?',0); } else { paste_char_btPasteArea(btp,0,2,'-',0); } } /* * Match line */ if( strcmp(q->text_label,"SEQUENCE") == 0 && strcmp(t->text_label,"SEQUENCE") == 0 ) { if( q->score[0] > 0 ) { if( query[q->start+1] == target[t->start+1] ) { paste_char_btPasteArea(btp,0,1,target[t->start+1],0); } else { paste_char_btPasteArea(btp,0,1,'+',0); } } } else paste_char_btPasteArea(btp,0,1,' ',0); free_btPasteArea(btp); } /* end of for this block */ advance_line_btCanvas(btc); } /* end of for the alignment */ return TRUE; /* we never returned false. Ooops! */ }