void html_table::emit_colspan (void) { cols *b = columns; cols *c = columns; int width = 0; out->put_string("<colgroup>"); while (c != NULL) { if (b != NULL && b != c && is_gap(b)) /* * blank column for gap */ out->put_string("<col width=\"") .put_number(is_gap(b)) .put_string("%\" class=\"center\"></col>") .nl(); width = (get_right(c)*100 + get_effective_linelength()/2) / get_effective_linelength() - (c->left*100 + get_effective_linelength()/2) /get_effective_linelength(); switch (c->alignment) { case 'C': out->put_string("<col width=\"") .put_number(width) .put_string("%\" class=\"center\"></col>") .nl(); break; case 'R': out->put_string("<col width=\"") .put_number(width) .put_string("%\" class=\"right\"></col>") .nl(); break; default: out->put_string("<col width=\"") .put_number(width) .put_string("%\"></col>") .nl(); } b = c; c = c->next; } out->put_string("</colgroup>").nl(); }
int precomputed_pair_wise (Alignment *A,int*ns, int **l_s,Constraint_list *CL) { int l1, l2, a, b, c; int nid=0, npos=0, id; int r1, r2, s1, s2; l1=strlen(A->seq_al[l_s[0][0]]); l2=strlen(A->seq_al[l_s[1][0]]); if (l1!=l2) { fprintf ( stderr, "\nERROR: improper use of the function precomputed pairwise:[FATAL:%s]", PROGRAM); crash (""); } else if ( l1==0) { A->score_aln=A->score=0; return 0; } for (npos=0, nid=0, a=0; a< ns[0]; a++) { s1=l_s[0][a]; for (b=0; b< ns[1]; b++) { s2=l_s[1][b]; for ( c=0; c<l1; c++) { r1=A->seq_al[s1][c]; r2=A->seq_al[s2][c]; if ( is_gap(r1) || is_gap(r2)); else { npos++; nid+=(r1==r2); } } } } id=(npos==0)?0:((nid*100)/npos); A->score=A->score_aln=id; return A->score; }
int html_table::no_gaps (void) { int n=0; cols *c; for (c = columns; c != NULL; c = c->next) if (is_gap(c)) n++; return n; }
int hasch_seq(char *seq, int **hs, int **lu,int ktup,char *alp) { static int a[10]; int i,j,l,limit,code,flag; char residue; int alp_lu[10000]; int alp_size; alp_size=alp[0]; alp++; for ( i=0; i< alp_size; i++) { alp_lu[(int)alp[i]]=i; } l=strlen (seq); limit = (int) pow((double)(alp_size+1),(double)ktup); hs[0]=(int*)vcalloc ( l+1,sizeof (int)); lu[0]=(int*)vcalloc ( limit+1, sizeof(int)); if ( l==0)myexit(EXIT_FAILURE); for (i=1;i<=ktup;i++) a[i] = (int) pow((double)(alp_size+1),(double)(i-1)); for(i=1;i<=(l-ktup+1);++i) { code=0; flag=FALSE; for(j=1;j<=ktup;++j) { if (is_gap(seq[i+j-2])){flag=TRUE;break;} else residue=alp_lu[(int)seq[i+j-2]]; code+=residue*a[j]; } if ( flag)continue; ++code; if (lu[0][code])hs[0][i]=lu[0][code]; lu[0][code]=i; } return 0; }
void aln2hitMat (Alignment *A, char *phitmat) { float **ffpHitScoreMatrix; int i, j, k, l, s; int nl = A->len_aln; int inseq = A->nseq; int itmpScore; char matrix[100]; char mode[100]; int isim_count, itotal_count, r1, r2; //Initialization for files char *pcFileName = A->file[0]; char prefix[200] ={0}; char *hit_matrix_file =(char*) vcalloc(200, sizeof (char)); char *hit_html_file =(char*) vcalloc(200, sizeof (char)); int len = (strrchr(pcFileName,'.')?strrchr(pcFileName,'.')-pcFileName:strlen(pcFileName)); strncpy(prefix, pcFileName, len); sprintf(hit_matrix_file, "%s%s", prefix, "_aln.hit_matrix"); sprintf(hit_html_file, "%s%s", prefix, ".alnhit_html"); if ( phitmat && strstr ( phitmat, "help")) aln2hitMat_help(); if(phitmat == NULL) phitmat = (char*) vcalloc(1, sizeof(char)); //such that program could get default value strget_param (phitmat, "_MODE_", "id", "%s", mode); strget_param (phitmat, "_MATRIX_", "blosum62mt", "%s", matrix); fprintf ( stdout, "[START] aln to hit matrix\n"); fprintf ( stdout, " Mode:%s\n", mode); fprintf ( stdout, " Matrix:%s\n", matrix); int **mat = read_matrice(matrix); ffpHitScoreMatrix=(float**)vcalloc (nl, sizeof (float*)); for(i = 0; i < nl; i++) ffpHitScoreMatrix[i]=(float*)vcalloc (nl-i, sizeof (float)); fprintf (stdout, "Process positions\n", i); for(i = 0; i < nl; i++) { fprintf (stdout, "%d, ", i); for(j = i; j < nl; j++) { if(strm (mode, "id")) ffpHitScoreMatrix[i][j-i]=generic_get_seq_sim (aln_column2string(A, i), aln_column2string(A, j), (A->cdna_cache)?A->cdna_cache[0]:NULL, matrix); else if(strm (mode, "pairscore")) { isim_count = itotal_count = 0; for (k=0; k< inseq; k++) { r1=tolower(A->seq_al[k][i]); if (is_gap(r1))continue; for (l=0; l< inseq; l++) { r2=tolower(A->seq_al[l][j]); if (is_gap (r2))continue; s=mat[r2-'A'][r1-'A']; s=(s<=0)?0:1; isim_count += s; itotal_count++; } } r1=(isim_count*100)/itotal_count; ffpHitScoreMatrix[i][j-i] = r1; } else aln2hitMat_help(); } } fprintf (stdout, "\n"); output_hit_matrix(hit_matrix_file, ffpHitScoreMatrix, nl); //Output Hit Score into color html output_hit_color_html (A, ffpHitScoreMatrix, nl, hit_html_file); vfree(ffpHitScoreMatrix); vfree(hit_matrix_file); vfree(hit_html_file); fprintf ( stdout, "[END] aln to hit matrix\n"); }
int make_fasta_cdna_pair_wise (Alignment *B,Alignment *A,int*in_ns, int **l_s,Constraint_list *CL, int *diag) { int a,c,p,k; Dp_Result *DPR; static Dp_Model *M; int l0, l1; int len_i, len_j; int f0=0, f1=0; int deltaf0, deltaf1, delta; int nr1, nr2; int ala, alb, aa0, aa1; int type; char **al; int **tl_s; int *tns; /*DEBUG*/ int debug_cdna_fasta=0; Alignment *DA; int score; int state,prev_state; int t, e; int a1, a2; l0=strlen ( B->seq_al[l_s[0][0]]); l1=strlen ( B->seq_al[l_s[1][0]]); al=declare_char (2, l0+l1+1); B=realloc_aln2 (B,B->nseq,l0+l1+1); free_int (B->cdna_cache, -1); B->cdna_cache=declare_int(1, l0+l1+1); if ( !M)M=initialize_dna_dp_model (CL); M->diag=diag; tl_s=declare_int (2, 2);tns=vcalloc(2, sizeof(int));tl_s[0][0]=0;tl_s[1][0]=3;tns[0]=tns[1]=1; DPR=make_fast_dp_pair_wise (A,tns, tl_s,CL,M); vfree(tns);free_int(tl_s, -1); /*new_trace_back*/ a=p=0; aa0=aa1=ala=alb=0; while ( (k=DPR->traceback[a++])!=M->START); while ( (k=DPR->traceback[a++])!=M->END) { f0=M->model_properties[k][M->F0]; f1=M->model_properties[k][M->F1]; len_i=M->model_properties[k][M->LEN_I]; len_j=M->model_properties[k][M->LEN_J]; type=M->model_properties[k][M->TYPE]; if (type==M->CODING0) { deltaf0=(aa0*3+f0)-ala; deltaf1=(aa1*3+f1)-alb; delta=MAX(deltaf0, deltaf1); for (nr1=0, nr2=0,c=0; c<delta; c++, nr1++, nr2++,p++) { if (nr1<deltaf0 && ala<l0)al[0][p]=B->seq_al[l_s[0][0]][ala++]; else al[0][p]='-'; if (nr2<deltaf1 && alb<l1)al[1][p]=B->seq_al[l_s[1][0]][alb++]; else al[1][p]='-'; B->cdna_cache[0][p]=M->NON_CODING; if ( is_gap(al[1][p]) && is_gap(al[0][p]))p--; else if ( debug_cdna_fasta)fprintf (stderr, "\nUM: %c %c", al[0][p], al[1][p]); } for ( c=0; c< 3; c++, p++) { if ( c==0)B->cdna_cache[0][p]=M->CODING0; else if ( c==1)B->cdna_cache[0][p]=M->CODING1; else if ( c==2)B->cdna_cache[0][p]=M->CODING2; if (ala<l0)al[0][p]=B->seq_al[l_s[0][0]][ala++]; else al[0][p]='-'; if (alb<l1)al[1][p]=B->seq_al[l_s[1][0]][alb++]; else al[1][p]='-'; if ( is_gap(al[1][p]) && is_gap(al[0][p]))p--; else if ( debug_cdna_fasta)fprintf (stderr, "\n%d: %c %c",k, al[0][p], al[1][p]); } } aa0+=len_i; aa1+=len_j; } deltaf0=(aa0*3+f0)-ala; deltaf1=(aa1*3+f1)-alb; delta=MAX(deltaf0, deltaf1); for (nr1=0, nr2=0,c=0; c<delta; c++, nr1++, nr2++,p++) { if (nr1<deltaf0 && ala<l0)al[0][p]=B->seq_al[l_s[0][0]][ala++]; else al[0][p]='-'; if (nr2<deltaf1 && alb<l1)al[1][p]=B->seq_al[l_s[1][0]][alb++]; else al[1][p]='-'; B->cdna_cache[0][p]=M->NON_CODING; if ( is_gap(al[1][p]) && is_gap(al[0][p]))p--; else if ( debug_cdna_fasta)fprintf (stderr, "\nUM: %c %c", al[0][p], al[1][p]); } /*End New traceback*/ al[0][p]='\0'; al[1][p]='\0'; sprintf( B->seq_al[l_s[0][0]], "%s", al[0]); sprintf( B->seq_al[l_s[1][0]], "%s", al[1]); B->len_aln=strlen (al[0]); B->nseq=2; if ( debug_cdna_fasta) { fprintf ( stderr, "\nA-A=%d, %d", CL->M['a'-'A']['a'-'A'], CL->M['a'-'A']['a'-'A'] *SCORE_K); for ( a=1; a<diag[0]; a++) { fprintf ( stderr, "\nchosen diag: %d", diag[a]); } fprintf ( stderr, "\n GOP=%d GEP=%d TG_MODE=%d", M->gop, M->gep, M->TG_MODE); fprintf ( stderr, "\nF_GOP=%d F_GEP=%d F_TG_MODE=%d", M->gop, M->gep, M->F_TG_MODE); DA=copy_aln (B, NULL); DA=realloc_aln2 (DA,6,(DA->len_aln+1)); for ( a=0; a<B->len_aln; a++) { fprintf ( stderr, "\n%d", DA->cdna_cache[0][a]); if (DA->cdna_cache[0][a]>=M->CODING0)DA->seq_al[DA->nseq][a]=DA->cdna_cache[0][a]-M->nstate+'0'; else DA->seq_al[DA->nseq][a]=DA->cdna_cache[0][a]-M->nstate+'0'; if (DA->cdna_cache[0][a]==M->CODING0) { DA->seq_al[DA->nseq+1][a]=translate_dna_codon (DA->seq_al[0]+a,'*'); DA->seq_al[DA->nseq+2][a]=translate_dna_codon (DA->seq_al[1]+a,'*'); } else { DA->seq_al[DA->nseq+1][a]='-'; DA->seq_al[DA->nseq+2][a]='-'; } } DA->nseq+=3; print_aln (DA); free_aln(DA); score=0; for (prev_state=M->START,a=0; a< DA->len_aln;) { state=DA->cdna_cache[0][a]; t=M->model[prev_state][state]; if ( DA->cdna_cache[0][a]==M->CODING0) { a1=translate_dna_codon (A->seq_al[0]+a,'x'); a2=translate_dna_codon (A->seq_al[1]+a,'x'); if ( a1!='x' && a2!='x') { e=CL->M[a1-'A'][a2-'A']*SCORE_K; } } else if ( DA->cdna_cache[0][a]>M->CODING0); else { e=M->model_properties[B->cdna_cache[0][a]][M->EMISSION]; } if ( e==UNDEFINED || t==UNDEFINED) fprintf ( stderr, "\nPROBLEM %d\n", a); fprintf ( stderr, "\n[%c..%c: %d(e)+%d(t)=%d]", A->seq_al[0][a], A->seq_al[1][a], e,t,e+t); score+=e+t; prev_state=state; if (B->cdna_cache[0][a]==M->NON_CODING)a++; else a+=3; } } for ( a=0; a<B->len_aln; a++) { if ( B->cdna_cache[0][a]<M->CODING0)B->cdna_cache[0][a]=0; else B->cdna_cache[0][a]=1; } free_char ( al, -1); return DPR->score; }
void html_table::emit_col (int n) { cols *c = columns; cols *b = columns; int width = 0; // must be a different row if (last_col != NULL && n <= last_col->no) emit_new_row(); while (c != NULL && c->no < n) c = c->next; // can we find column, n? if (c != NULL && c->no == n) { // shutdown previous column if (last_col != NULL) out->put_string("</td>").nl(); // find previous column if (last_col == NULL) b = columns; else b = last_col; // have we a gap? if (last_col != NULL) { emit_td(is_gap(b), "></td>"); b = b->next; } // move across to column n while (b != c) { // we compute the difference after converting positions // to avoid rounding errors width = (get_right(b)*100 + get_effective_linelength()/2) / get_effective_linelength() - (b->left*100 + get_effective_linelength()/2) /get_effective_linelength(); emit_td(width, "></td>"); // have we a gap? emit_td(is_gap(b), "></td>"); b = b->next; } width = (get_right(b)*100 + get_effective_linelength()/2) / get_effective_linelength() - (b->left*100 + get_effective_linelength()/2) /get_effective_linelength(); switch (b->alignment) { case 'C': emit_td(width, " align=center>"); break; case 'R': emit_td(width, " align=right>"); break; default: emit_td(width); } // remember column, b last_col = b; } }