void zoom_bookmark_jump_to(const ZoomBookmark* mark, GDisplay *gdisp) { zoom_bookmark_check_init(); change_scale(gdisp, mark->zoom); scroll_display(gdisp, mark->image_offset_x - gdisp->offset_x, mark->image_offset_y - gdisp->offset_y); }
/** * \brief The fonction called when a corrupting_bonus is updated. * \param value The new number of corrupting_bonus. */ void ptb::corrupting_bonus_component::on_corrupting_bonus_updated (unsigned int value) { if ( value < m_last_corrupting_bonus_count ) change_scale(); else create_floating_corrupting_bonus(); move(); } // corrupting_bonus_component::on_corrupting_bonus_updated()
void output_repeat_legend(FILE *fp, int *startpos, int **breaks, int *numsegment, int **colorindex, char **chrname, int num) { int i, j, k, l, m, n; int base[50], point[4][2]; char c, name[100], temp[100]; char **str; double label[3]; str = (char **) ckalloc(10 * sizeof(char *)); for(i = 0; i < 10; i ++) { str[i] = (char *) ckalloc(100 * sizeof(char)); } sprintf(str[0], "Repeat ID"); sprintf(str[1], "Length"); sprintf(str[2], "Chromosome"); sprintf(str[3], "From-to"); sprintf(str[4], "Subrepeats"); sprintf(str[5], "From-to"); base[0] = 50; base[1] = 800; outputline(fp, str, 6, base, 90, 10); base[1] -= 20; for(i = 0; i < num; i ++) { for(j = 0; j < numsegment[i]; j ++) { if(j == 0) { sprintf(str[0], "R%d", i + 1); sprintf(str[1], "%d", breaks[i][numsegment[i]]); sprintf(str[2], "%s", chrname[i]); sprintf(str[3], "%d-%d", startpos[i], startpos[i] + breaks[i][numsegment[i]] - 1); } else { str[0][0] = str[1][0] = str[2][0] = str[3][0] = '\0'; } m = (colorindex[i][j] - 1) % total_color; sprintf(str[4], "s%d", colorindex[i][j]); sprintf(str[5], "%d-%d", startpos[i] + breaks[i][j], startpos[i] + breaks[i][j + 1] - 1); base[0] = 50; base[1] -= 10; outputline(fp, str, 6, base, 90, 8); if(base[1] <= 50) { base[0] = 50; base[1] = 800; showpage(fp); fprintf(fp, "%%%%Page: P%d\n", npages); npages ++; change_scale(fp, scale); } } } for(i = 0; i < 10; i ++) { free((void *) str[i]); } free((void *) str); }
int key_hook(int keycode, t_all *all) { if (keycode == 65453) change_scale(all, 1); if (keycode == 65451) change_scale(all, 2); if (keycode == 65364) change_scale(all, 3); if (keycode == 65362) change_scale(all, 4); if (keycode == 65363) change_scale(all, 5); if (keycode == 65361) change_scale(all, 6); if (keycode == 65307) exit (0); return (0); }
main(int argc, char **argv) { int i, j, k, l, m, n, len_seq[100], reallen[100]; char **chrname; int *dir, **breaks, **colorindex, base[2]; char **brchrname; int *multip, *multip2, *repeat_length, num_repeat, *startpos, *numsegment; int num_ins, *insertpos, *insertlen; int global_scale; SEGMENT *segment, segment0; long int START_POS; int num_segment; int **repeats; int range[2]; int num_chro; char name[1000], temp[1000], c; char pt; FILE *fp, *fp1; if(argc < 4) { printf("Usage: makefig intv_file output_file(ps format) chrolistfile\n"); exit(-1); } chrname = alloc_name(100, 100); fp = ckopen(argv[3], "r"); num_chro = readchrolist(len_seq, chrname, reallen, fp); fclose(fp); segment = (SEGMENT *) ckalloc(20000 * sizeof(SEGMENT)); fp = ckopen(argv[1], "r"); num_segment = input_segment(segment, chrname, num_chro, fp); fclose(fp); /* Sort the segments */ qsort((void *) segment, num_segment, sizeof(SEGMENT), (void *) segcompar); /* for(i = 0; i < num_segment; i ++) { printf("aftersort segment %d %d %d\n", segment[i].pos[0], segment[i].pos[1], segment[i].eq_pos[1]); } getchar(); */ /* Compute multiplicity of each sub-repeat */ repeat_length = (int *) ckalloc(20000 * sizeof(int)); multip = (int *) ckalloc(20000 * sizeof(int)); num_repeat = 0; k = 0; for(i = 0; i < num_segment; i ++) { repeat_length[segment[i].eq_pos[0] - 1] = segment[i].length; multip[segment[i].eq_pos[0] - 1] ++; if(segment[i].eq_pos[0] > num_repeat) { num_repeat = segment[i].eq_pos[0]; } } printf("num_repeat %d\n", num_repeat); global_scale = 25; multip2 = (int *) ckalloc(num_repeat * sizeof(int)); repeats = (int **) ckalloc(num_repeat * sizeof(int *)); for(i = 0; i < num_repeat; i ++) { repeats[i] = (int *) ckalloc((1 + multip[i]) * sizeof(int)); } startpos = (int *) ckalloc(num_segment * sizeof(int)); numsegment = (int *) ckalloc(num_segment * sizeof(int)); breaks = (int **) ckalloc(num_segment * sizeof(int *)); brchrname = (char **) ckalloc(num_segment * sizeof(char *)); colorindex = (int **) ckalloc(num_segment * sizeof(int *)); for(i = 0; i < num_segment; i ++) { breaks[i] = (int *) ckalloc(num_segment * sizeof(int)); brchrname[i] = (char *) ckalloc(100 * sizeof(char)); colorindex[i] = (int *) ckalloc(num_segment * sizeof(int)); } dir = (int *) ckalloc(num_segment * sizeof(int)); k = m = 0; fp = ckopen(argv[2], "w"); prt_Header(fp, "Tang Hai-xu", "OUTPUT", "2-21-2004", 0); prt_Macro(fp); scale[0] = 0.7; scale[1] = 0.8; change_scale(fp, scale); base[0] = 50; base[1] = 850; for(i = 0; i < num_segment; i ++) { if(i == num_segment - 1 || segment[i + 1].pos[0] > segment[i].pos[1] + min_length || segment[i + 1].chro != segment[i].chro) { for(j = k; j <= i; j ++) { breaks[m][j - k + 1] += segment[j].pos[1] - segment[k].pos[0] + 1; colorindex[m][j - k] = segment[j].eq_pos[0]; dir[j - k] = segment[j].eq_pos[1]; repeats[segment[j].eq_pos[0] - 1][multip2[segment[j].eq_pos[0] - 1] ++] = m; } startpos[m] = range[0] = segment[k].pos[0]; numsegment[m] = i - k + 1; strcpy(brchrname[m], chrname[segment[i].chro]); range[1] = segment[i].pos[1]; sprintf(name, "R%d", m + 1); l = output_region(fp, base, name, chrname[segment[k].chro], range, global_scale, breaks[m], i - k + 2, colorindex[m], dir); m ++; base[0] = 50; base[1] -= 25; if(base[1] < 150) { showpage(fp); fprintf(fp, "%%%%Page: P%d\n", npages); npages ++; change_scale(fp, scale); base[0] = 50; base[1] = 850; } k = i + 1; } } showpage(fp); fprintf(fp, "%%%%Page: P%d\n", npages); npages ++; change_scale(fp, scale); fflush(fp); for(i = 0; i < num_repeat; i ++) { if(multip[i] != multip2[i]) { printf("i %d multip %d %d\n", i, multip[i], multip2[i]); exit(0); } } output_length_legend(fp); output_legend(fp, repeat_length, multip, num_repeat, repeats); showpage(fp); fprintf(fp, "%%%%Page: P%d\n", npages); npages ++; change_scale(fp, scale); output_repeat_legend(fp, startpos, breaks, numsegment, colorindex, brchrname, m); showpage(fp); page_trailer(fp); restore_scale(fp); prt_Trailer(fp, k + 1); fclose(fp); printf("%d regions output.\n", m); chrname = free_name(chrname, 100); for(i = 0; i < num_repeat; i ++) { free((void *) repeats[i]); } free((void **) repeats); free((void *) repeat_length); for(i = 0; i < num_segment; i ++) { free((void *) brchrname[i]); free((void *) breaks[i]); free((void *) colorindex[i]); } free((void *) multip); free((void *) multip2); free((void **) brchrname); free((void **) breaks); free((void **) colorindex); free((void *) startpos); free((void *) numsegment); free((void *) dir); free((void *) segment); }
void output_legend(FILE *fp, int *repeat_length, int *multip, int num_repeat, int **repeats) { int i, j, k, l, m, n; int base[50], point[4][2]; char c, name[100], temp[100]; char **str; double label[3]; str = (char **) ckalloc(10 * sizeof(char *)); for(i = 0; i < 10; i ++) { str[i] = (char *) ckalloc(100 * sizeof(char)); } sprintf(str[0], "Subrepeat ID"); sprintf(str[1], "Length"); sprintf(str[2], "Multiplicity"); sprintf(str[3], "Repeats"); sprintf(str[4], "Color coding"); base[0] = 50; base[1] = 680; outputline(fp, str, 5, base, 60, 10); for(i = 0; i < num_repeat; i ++) { if(multip[i] == 0) continue; sprintf(name, "s%d", i + 1); strcpy(str[0], name); sprintf(str[1], "%d", repeat_length[i]); sprintf(str[2], "%d", multip[i]); str[3][0] = '\0'; for(j = 0; j < min(multip[i], MIN_NUM); j ++) { sprintf(temp, "R%d ", repeats[i][j] + 1); strcat(str[3], temp); } base[0] = 50; base[1] -= 10; outputline(fp, str, 4, base, 60, 8); point[0][0] = 370; point[0][1] = base[1]; point[1][0] = 370 + length_intv(repeat_length[i]); point[1][1] = base[1]; point[2][0] = 370 + length_intv(repeat_length[i]); point[2][1] = base[1] + 5; point[3][0] = 370; point[3][1] = base[1] + 5; m = i % total_color; for(j = 0; j < 3; j ++) { label[j] = color_box[m][j]; } prt_box(fp, point, label, 0, 0, 0); base[0] = 370 + length_intv(repeat_length[i]) / 2; base[1] += 2; prt_Text(fp, name, base, 8, 0); if(base[1] <= 50 && i < num_repeat - 1) { base[0] = 50; base[1] = 800; showpage(fp); fprintf(fp, "%%%%Page: P%d\n", npages); npages ++; change_scale(fp, scale); } } for(i = 0; i < 10; i ++) { free((void *) str[i]); } free((void *) str); }