int pairalign_seq(int istart, int iend, int jstart, int jend) { int i, n, m, si, sj; int len1, len2, maxres; double gg, mm_score; int *mat_xref, *matptr; matptr = gon250mt; mat_xref = def_aa_xref; maxres = get_matrix(matptr, mat_xref, 10); if (maxres == 0) return(-1); for (si = 0; si < nseqs; si++) { if ((n = seqlen_array[si+1]) != 0){ for (i = 1, len1 = 0; i <= n; i++) { char c = seq_array[si+1][i]; if ((c != gap_pos1) && (c != gap_pos2)) len1++; } for (sj = si + 1; sj < nseqs; sj++) { if ((m = seqlen_array[sj+1]) != 0){ int se1, se2, sb1, sb2, maxscore, seq1, seq2, g, gh; int displ[2*MAX_ALN_LENGTH+1]; int print_ptr, last_print; for (i = 1, len2 = 0; i <= m; i++) { char c = seq_array[sj+1][i]; if ((c != gap_pos1) && (c != gap_pos2)) len2++; } gh = 10 * pw_ge_penalty; gg = pw_go_penalty + log((double) MIN(n, m)); g = (mat_avscore <= 0) ? 20 * gg : 2 * mat_avscore * gg; seq1 = si + 1; seq2 = sj + 1; forward_pass(&seq_array[seq1][0], &seq_array[seq2][0], n, m, &se1, &se2, &maxscore, g, gh); reverse_pass(&seq_array[seq1][0], &seq_array[seq2][0], se1, se2, &sb1, &sb2, maxscore, g, gh); print_ptr = 1; last_print = 0; diff(sb1-1, sb2-1, se1-sb1+1, se2-sb2+1, 0, 0, &print_ptr, &last_print, displ, seq1, seq2, g, gh); mm_score = tracepath(sb1, sb2, &print_ptr, &last_print, displ, seq1, seq2); if (len1 == 0 || len2 == 0) mm_score = 0.0; else mm_score /= (double) MIN(len1,len2); seq_output[si*nseqs+sj] = mm_score; } } } } return 0; }
double TimeEstimateCalculator::calculate() { reverse_pass(); forward_pass(); recalculate_trapezoids(); double totalTime = 0; for(unsigned int n=0; n<blocks.size(); n++) { double plateau_distance = blocks[n].decelerate_after - blocks[n].accelerate_until; totalTime += acceleration_time_from_distance(blocks[n].initial_feedrate, blocks[n].accelerate_until, blocks[n].acceleration); totalTime += plateau_distance / blocks[n].nominal_feedrate; totalTime += acceleration_time_from_distance(blocks[n].final_feedrate, (blocks[n].distance - blocks[n].decelerate_after), blocks[n].acceleration); } return totalTime; }
sint pairalign(sint istart, sint iend, sint jstart, sint jend) { short *mat_xref; static sint si, sj, i; static sint n,m,len1,len2; static sint maxres; static short *matptr; static char c; static float gscale,ghscale; displ = (sint *)ckalloc((2*max_aln_length+1) * sizeof(sint)); HH = (pwint *)ckalloc((max_aln_length) * sizeof(pwint)); DD = (pwint *)ckalloc((max_aln_length) * sizeof(pwint)); RR = (pwint *)ckalloc((max_aln_length) * sizeof(pwint)); SS = (pwint *)ckalloc((max_aln_length) * sizeof(pwint)); #ifdef MAC int_scale = 10; #else int_scale = 100; #endif gscale=ghscale=1.0; if (dnaflag) { if (debug>1) fprintf(stdout,"matrix %s\n",pw_dnamtrxname); if (strcmp(pw_dnamtrxname, "iub") == 0) { matptr = swgapdnamt; mat_xref = def_dna_xref; } else if (strcmp(pw_dnamtrxname, "clustalw") == 0) { matptr = clustalvdnamt; mat_xref = def_dna_xref; gscale=0.6667; ghscale=0.751; } else { matptr = pw_userdnamat; mat_xref = pw_dna_xref; } maxres = get_matrix(matptr, mat_xref, matrix, TRUE, int_scale); if (maxres == 0) return((sint)-1); matrix[0][4]=transition_weight*matrix[0][0]; matrix[4][0]=transition_weight*matrix[0][0]; matrix[2][11]=transition_weight*matrix[0][0]; matrix[11][2]=transition_weight*matrix[0][0]; matrix[2][12]=transition_weight*matrix[0][0]; matrix[12][2]=transition_weight*matrix[0][0]; } else { if (debug>1) fprintf(stdout,"matrix %s\n",pw_mtrxname); if (strcmp(pw_mtrxname, "blosum") == 0) { matptr = blosum30mt; mat_xref = def_aa_xref; } else if (strcmp(pw_mtrxname, "pam") == 0) { matptr = pam350mt; mat_xref = def_aa_xref; } else if (strcmp(pw_mtrxname, "gonnet") == 0) { matptr = gon250mt; int_scale /= 10; mat_xref = def_aa_xref; } else if (strcmp(pw_mtrxname, "id") == 0) { matptr = idmat; mat_xref = def_aa_xref; } else { matptr = pw_usermat; mat_xref = pw_aa_xref; } maxres = get_matrix(matptr, mat_xref, matrix, TRUE, int_scale); if (maxres == 0) return((sint)-1); } for (si=MAX(0,istart);si<nseqs && si<iend;si++) { n = seqlen_array[si+1]; len1 = 0; for (i=1;i<=n;i++) { c = seq_array[si+1][i]; if ((c!=gap_pos1) && (c != gap_pos2)) len1++; } for (sj=MAX(si+1,jstart+1);sj<nseqs && sj<jend;sj++) { m = seqlen_array[sj+1]; if(n==0 || m==0) { tmat[si+1][sj+1]=1.0; tmat[sj+1][si+1]=1.0; continue; } len2 = 0; for (i=1;i<=m;i++) { c = seq_array[sj+1][i]; if ((c!=gap_pos1) && (c != gap_pos2)) len2++; } if (dnaflag) { g = 2 * (float)pw_go_penalty * int_scale*gscale; gh = pw_ge_penalty * int_scale*ghscale; } else { if (mat_avscore <= 0) g = 2 * (float)(pw_go_penalty + log((double)(MIN(n,m))))*int_scale; else g = 2 * mat_avscore * (float)(pw_go_penalty + log((double)(MIN(n,m))))*gscale; gh = pw_ge_penalty * int_scale; } if (debug>1) fprintf(stdout,"go %d ge %d\n",(pint)g,(pint)gh); /* align the sequences */ seq1 = si+1; seq2 = sj+1; forward_pass(&seq_array[seq1][0], &seq_array[seq2][0], n, m); reverse_pass(&seq_array[seq1][0], &seq_array[seq2][0]); last_print = 0; print_ptr = 1; /* sb1 = sb2 = 1; se1 = n-1; se2 = m-1; */ /* use Myers and Miller to align two sequences */ maxscore = diff(sb1-1, sb2-1, se1-sb1+1, se2-sb2+1, (sint)0, (sint)0); /* calculate percentage residue identity */ mm_score = tracepath(sb1,sb2); if(len1==0 || len2==0) mm_score=0; else mm_score /= (float)MIN(len1,len2); tmat[si+1][sj+1] = ((float)100.0 - mm_score)/(float)100.0; tmat[sj+1][si+1] = ((float)100.0 - mm_score)/(float)100.0; if (debug>1) { fprintf(stdout,"Sequences (%d:%d) Aligned. Score: %d CompScore: %d\n", (pint)si+1,(pint)sj+1, (pint)mm_score, (pint)maxscore/(MIN(len1,len2)*100)); } else { info("Sequences (%d:%d) Aligned. Score: %d", (pint)si+1,(pint)sj+1, (pint)mm_score); } } } displ=ckfree((void *)displ); HH=ckfree((void *)HH); DD=ckfree((void *)DD); RR=ckfree((void *)RR); SS=ckfree((void *)SS); return((sint)1); }
/* * Recalculate the motion plan according to the following algorithm: * * 1. Go over every block in reverse order... * * Calculate a junction speed reduction (block_t.entry_factor) so: * * a. The junction jerk is within the set limit, and * * b. No speed reduction within one block requires faster * deceleration than the one, true constant acceleration. * * 2. Go over every block in chronological order... * * Dial down junction speed reduction values if: * a. The speed increase within one block would require faster * acceleration than the one, true constant acceleration. * * After that, all blocks will have an entry_factor allowing all speed changes to * be performed using only the one, true constant acceleration, and where no junction * jerk is jerkier than the set limit, Jerky. Finally it will: * * 3. Recalculate "trapezoids" for all blocks. */ void Planner::recalculate() { reverse_pass(); forward_pass(); recalculate_trapezoids(); }
int pairalign(int istart, int iend, int jstart, int jend) { int i, n, m, si, sj; int len1, len2, maxres; double gg, mm_score; int *mat_xref, *matptr; matptr = gon250mt; mat_xref = def_aa_xref; maxres = get_matrix(matptr, mat_xref, 10); if (maxres == 0) return(-1); bots_message("Start aligning "); #pragma omp parallel { #pragma omp single private(i,n,si,sj,len1,m) for (si = 0; si < nseqs; si++) { if ((n = seqlen_array[si+1]) != 0){ for (i = 1, len1 = 0; i <= n; i++) { char c = seq_array[si+1][i]; if ((c != gap_pos1) && (c != gap_pos2)) len1++; } for (sj = si + 1; sj < nseqs; sj++) { if ((m = seqlen_array[sj+1]) != 0) { #pragma omp task untied \ private(i,gg,len2,mm_score) firstprivate(m,n,si,sj,len1) \ shared(nseqs, bench_output,seqlen_array,seq_array,gap_pos1,gap_pos2,pw_ge_penalty,pw_go_penalty,mat_avscore) { int se1, se2, sb1, sb2, maxscore, seq1, seq2, g, gh; int displ[2*MAX_ALN_LENGTH+1]; int print_ptr, last_print; for (i = 1, len2 = 0; i <= m; i++) { char c = seq_array[sj+1][i]; if ((c != gap_pos1) && (c != gap_pos2)) len2++; } gh = 10 * pw_ge_penalty; gg = pw_go_penalty + log((double) MIN(n, m)); g = (mat_avscore <= 0) ? 20 * gg : 2 * mat_avscore * gg; seq1 = si + 1; seq2 = sj + 1; forward_pass(&seq_array[seq1][0], &seq_array[seq2][0], n, m, &se1, &se2, &maxscore, g, gh); reverse_pass(&seq_array[seq1][0], &seq_array[seq2][0], se1, se2, &sb1, &sb2, maxscore, g, gh); print_ptr = 1; last_print = 0; diff(sb1-1, sb2-1, se1-sb1+1, se2-sb2+1, 0, 0, &print_ptr, &last_print, displ, seq1, seq2, g, gh); mm_score = tracepath(sb1, sb2, &print_ptr, &last_print, displ, seq1, seq2); if (len1 == 0 || len2 == 0) mm_score = 0.0; else mm_score /= (double) MIN(len1,len2); bench_output[si*nseqs+sj] = mm_score; } } } } } } bots_message(" completed!\n"); return 0; }