int main(int argc, char** args) { int c; dl* xys = dl_new(16); dl* radecs = dl_new(16); dl* otherradecs = dl_new(16); double* xy; double* xyz; int i, N; tan_t tan, tan2, tan3; int W=0, H=0; double crpix[] = { HUGE_VAL, HUGE_VAL }; int loglvl = LOG_MSG; FILE* logstream = stderr; int order = 1; while ((c = getopt(argc, args, OPTIONS)) != -1) { switch (c) { case 'v': loglvl++; break; case 'h': exit(0); case 'o': order = atoi(optarg); break; case 'W': W = atoi(optarg); break; case 'H': H = atoi(optarg); break; case 'X': crpix[0] = atof(optarg); break; case 'Y': crpix[1] = atof(optarg); break; } } if (optind != argc) { exit(-1); } log_init(loglvl); log_to(logstream); errors_log_to(logstream); if (W == 0 || H == 0) { logerr("Need -W, -H\n"); exit(-1); } if (crpix[0] == HUGE_VAL) crpix[0] = W/2.0; if (crpix[1] == HUGE_VAL) crpix[1] = H/2.0; while (1) { double x,y,ra,dec; if (fscanf(stdin, "%lf %lf %lf %lf\n", &x, &y, &ra, &dec) < 4) break; if (x == -1 && y == -1) { dl_append(otherradecs, ra); dl_append(otherradecs, dec); } else { dl_append(xys, x); dl_append(xys, y); dl_append(radecs, ra); dl_append(radecs, dec); } } logmsg("Read %i x,y,ra,dec tuples\n", dl_size(xys)/2); N = dl_size(xys)/2; xy = dl_to_array(xys); xyz = malloc(3 * N * sizeof(double)); for (i=0; i<N; i++) radecdeg2xyzarr(dl_get(radecs, 2*i), dl_get(radecs, 2*i+1), xyz + i*3); dl_free(xys); dl_free(radecs); fit_tan_wcs(xyz, xy, N, &tan, NULL); tan.imagew = W; tan.imageh = H; logmsg("Computed TAN WCS:\n"); tan_print_to(&tan, logstream); sip_t* sip; { tweak_t* t = tweak_new(); starxy_t* sxy = starxy_new(N, FALSE, FALSE); il* imginds = il_new(256); il* refinds = il_new(256); for (i=0; i<N; i++) { starxy_set_x(sxy, i, xy[2*i+0]); starxy_set_y(sxy, i, xy[2*i+1]); } tweak_init(t); tweak_push_ref_xyz(t, xyz, N); tweak_push_image_xy(t, sxy); for (i=0; i<N; i++) { il_append(imginds, i); il_append(refinds, i); } // unweighted; no dist2s tweak_push_correspondence_indices(t, imginds, refinds, NULL, NULL); tweak_push_wcs_tan(t, &tan); t->sip->a_order = t->sip->b_order = t->sip->ap_order = t->sip->bp_order = order; for (i=0; i<10; i++) { // go to TWEAK_HAS_LINEAR_CD -> do_sip_tweak // t->image has the indices of corresponding image stars // t->ref has the indices of corresponding catalog stars tweak_go_to(t, TWEAK_HAS_LINEAR_CD); logmsg("\n"); sip_print(t->sip); t->state &= ~TWEAK_HAS_LINEAR_CD; } tan_write_to_file(&t->sip->wcstan, "kt1.wcs"); sip = t->sip; } for (i=0; i<dl_size(otherradecs)/2; i++) { double ra, dec, x,y; ra = dl_get(otherradecs, 2*i); dec = dl_get(otherradecs, 2*i+1); if (!sip_radec2pixelxy(sip, ra, dec, &x, &y)) { logerr("Not in tangent plane: %g,%g\n", ra, dec); exit(-1); //continue; } printf("%g %g\n", x, y); } /* blind_wcs_move_tangent_point(xyz, xy, N, crpix, &tan, &tan2); blind_wcs_move_tangent_point(xyz, xy, N, crpix, &tan2, &tan3); logmsg("Moved tangent point to (%g,%g):\n", crpix[0], crpix[1]); tan_print_to(&tan3, logstream); tan_write_to_file(&tan, "kt1.wcs"); tan_write_to_file(&tan3, "kt2.wcs"); */ dl_free(otherradecs); free(xy); free(xyz); return 0; }
int main(int argc, char *args[]) { int argchar; char* progname = args[0]; plot_args_t pargs; plotxy_t* xy; plotimage_t* img; int loglvl = LOG_MSG; // log errors to stderr, not stdout. errors_log_to(stderr); plotstuff_init(&pargs); pargs.fout = stdout; pargs.outformat = PLOTSTUFF_FORMAT_PNG; xy = plotstuff_get_config(&pargs, "xy"); img = plotstuff_get_config(&pargs, "image"); assert(xy); assert(img); plotstuff_set_color(&pargs, "white"); plotstuff_set_bgcolor(&pargs, "black"); img->format = PLOTSTUFF_FORMAT_PPM; while ((argchar = getopt(argc, args, OPTIONS)) != -1) switch (argchar) { case 'v': loglvl++; break; case 'C': plotstuff_set_color(&pargs, optarg); break; case 'b': plotstuff_set_bgcolor(&pargs, "optarg"); break; case 'o': pargs.outfn = optarg; break; case 'X': plot_xy_set_xcol(xy, optarg); break; case 'Y': plot_xy_set_ycol(xy, optarg); break; case 'P': pargs.outformat = PLOTSTUFF_FORMAT_PPM; break; case 'J': pargs.outformat = PLOTSTUFF_FORMAT_PDF; break; case 'p': img->format = PLOTSTUFF_FORMAT_PNG; break; case 'I': plot_image_set_filename(img, optarg); break; case 'S': xy->scale = atof(optarg); break; case 'i': plot_xy_set_filename(xy, optarg); break; case 'x': xy->xoff = atof(optarg); break; case 'y': xy->yoff = atof(optarg); break; case 'W': pargs.W = atoi(optarg); break; case 'H': pargs.H = atoi(optarg); break; case 'n': xy->firstobj = atoi(optarg); break; case 'N': xy->nobjs = atoi(optarg); break; case 'e': xy->ext = atoi(optarg); break; case 'r': pargs.markersize = atof(optarg); break; case 'w': pargs.lw = atof(optarg); break; case 's': plotstuff_set_marker(&pargs, optarg); break; case 'h': printHelp(progname); exit(0); case '?': default: printHelp(progname); exit(-1); } if (optind != argc) { printHelp(progname); exit(-1); } if (!xy->fn) { printHelp(progname); exit(-1); } log_init(loglvl); log_to(stderr); fits_use_error_system(); if (img->fn) { if (plot_image_setsize(&pargs, img)) { ERROR("Failed to set plot size from image"); exit(-1); } plotstuff_run_command(&pargs, "image"); } else { if (pargs.W == 0 || pargs.H == 0) { if (plot_xy_setsize(&pargs, xy)) { ERROR("Failed to set plot size from xylist"); exit(-1); } } } plotstuff_run_command(&pargs, "xy"); plotstuff_output(&pargs); plotstuff_free(&pargs); return 0; }
int main(int argc, char *argv[]) { int argchar; char* infn = NULL; char* outfn = NULL; FILE* fout; anbool tostdout = FALSE; anqfits_t* anq; int W, H; qfits_header* hdr; const anqfits_image_t* animg; float* img; int loglvl = LOG_MSG; int scale = 2; int winw; int winh; int plane; int out_bitpix = -32; float* outimg; int outw, outh; int edge = EDGE_TRUNCATE; int ext = 0; int npixout = 0; while ((argchar = getopt (argc, argv, OPTIONS)) != -1) switch (argchar) { case 'v': loglvl++; break; case 's': scale = atoi(optarg); break; case 'e': ext = atoi(optarg); break; case '?': case 'h': printHelp(argv[0]); return 0; default: return -1; } log_init(loglvl); log_to(stderr); errors_log_to(stderr); fits_use_error_system(); if (argc - optind != 2) { logerr("Need two arguments: input and output files.\n"); printHelp(argv[0]); exit(-1); } infn = argv[optind]; outfn = argv[optind+1]; if (streq(outfn, "-")) { tostdout = TRUE; fout = stdout; } else { fout = fopen(outfn, "wb"); if (!fout) { SYSERROR("Failed to open output file \"%s\"", outfn); exit(-1); } } anq = anqfits_open(infn); if (!anq) { ERROR("Failed to open input file \"%s\"", infn); exit(-1); } animg = anqfits_get_image_const(anq, ext); W = (int)animg->width; H = (int)animg->height; if (!animg) { ERROR("Failde to read image from \"%s\"", infn); exit(-1); } /* if (tostdout) dump.filename = "STDOUT"; else dump.filename = outfn; dump.ptype = PTYPE_FLOAT; dump.out_ptype = out_bitpix; */ get_output_image_size(W % scale, H % scale, scale, edge, &outw, &outh); outw += (W / scale); outh += (H / scale); hdr = qfits_header_default(); fits_header_add_int(hdr, "BITPIX", out_bitpix, "bits per pixel"); if (animg->planes > 1) fits_header_add_int(hdr, "NAXIS", 3, "number of axes"); else fits_header_add_int(hdr, "NAXIS", 2, "number of axes"); fits_header_add_int(hdr, "NAXIS1", outw, "image width"); fits_header_add_int(hdr, "NAXIS2", outh, "image height"); if (animg->planes > 1) fits_header_add_int(hdr, "NAXIS3", animg->planes, "number of planes"); if (qfits_header_dump(hdr, fout)) { ERROR("Failed to write FITS header to \"%s\"", outfn); exit(-1); } qfits_header_destroy(hdr); winw = W; winh = (int)ceil(ceil(1024*1024 / (float)winw) / (float)scale) * scale; outimg = malloc((int)ceil(winw/scale)*(int)ceil(winh/scale) * sizeof(float)); logmsg("Image is %i x %i x %i\n", W, H, (int)animg->planes); logmsg("Output will be %i x %i x %i\n", outw, outh, (int)animg->planes); logverb("Reading in blocks of %i x %i\n", winw, winh); for (plane=0; plane<animg->planes; plane++) { int bx, by; int nx, ny; for (by=0; by<(int)ceil(H / (float)winh); by++) { for (bx=0; bx<(int)ceil(W / (float)winw); bx++) { int i; int lox, loy, hix, hiy, outw, outh; nx = MIN(winw, W - bx*winw); ny = MIN(winh, H - by*winh); lox = bx*winw; loy = by*winh; hix = lox + nx; hiy = loy + ny; logverb(" reading %i,%i + %i,%i\n", lox, loy, nx, ny); img = anqfits_readpix(anq, ext, lox, hix, loy, hiy, plane, PTYPE_FLOAT, NULL, &W, &H); if (!img) { ERROR("Failed to load pixel window: x=[%i, %i), y=[%i,%i), plane %i\n", lox, hix, loy, hiy, plane); exit(-1); } average_image_f(img, nx, ny, scale, edge, &outw, &outh, outimg); free(img); logverb(" writing %i x %i\n", outw, outh); if (outw * outh == 0) continue; for (i=0; i<outw*outh; i++) { int nbytes = abs(out_bitpix)/8; char buf[nbytes]; if (qfits_pixel_ctofits(PTYPE_FLOAT, out_bitpix, outimg + i, buf)) { ERROR("Failed to convert pixel to FITS type\n"); exit(-1); } if (fwrite(buf, nbytes, 1, fout) != 1) { ERROR("Failed to write pixels\n"); exit(-1); } } npixout += outw*outh; } } } free(outimg); anqfits_close(anq); if (tostdout) { // pad. int N; char pad[2880]; N = (npixout * (abs(out_bitpix) / 8)) % 2880; memset(pad, 0, 2880); fwrite(pad, 1, N, fout); } else { if (fits_pad_file(fout)) { ERROR("Failed to pad output file"); exit(-1); } if (fclose(fout)) { SYSERROR("Failed to close output file"); exit(-1); } } logverb("Done!\n"); return 0; }
int main(int argc, char *args[]) { int loglvl = LOG_MSG; int argchar; char* progname = args[0]; plot_args_t pargs; plotstuff_init(&pargs); pargs.fout = stdout; pargs.outformat = PLOTSTUFF_FORMAT_PNG; while ((argchar = getopt(argc, args, OPTIONS)) != -1) switch (argchar) { case 'v': loglvl++; break; case 'o': pargs.outfn = optarg; break; case 'P': pargs.outformat = PLOTSTUFF_FORMAT_PPM; break; case 'j': pargs.outformat = PLOTSTUFF_FORMAT_JPG; break; case 'J': pargs.outformat = PLOTSTUFF_FORMAT_PDF; break; case 'W': pargs.W = atoi(optarg); break; case 'H': pargs.H = atoi(optarg); break; case 'h': printHelp(progname); exit(0); case '?': default: printHelp(progname); exit(-1); } if (optind != argc) { printHelp(progname); exit(-1); } log_init(loglvl); // log errors to stderr, not stdout. errors_log_to(stderr); fits_use_error_system(); for (;;) { if (plotstuff_read_and_run_command(&pargs, stdin)) break; } if (plotstuff_output(&pargs)) exit(-1); plotstuff_free(&pargs); return 0; }
int main(int argc, char *argv[]) { int argchar; char* infn = NULL; char* outfn = NULL; anbool tostdout = FALSE; FILE* fin = NULL; FILE* fout = NULL; il* exts; int i; char* progname = argv[0]; anbool inblocks = FALSE; anbool inmegs = FALSE; int allexts = 0; int Next = -1; anbool dataonly = FALSE; anbool headeronly = FALSE; anqfits_t* anq = NULL; int loglvl = LOG_MSG; exts = il_new(16); while ((argchar = getopt (argc, argv, OPTIONS)) != -1) switch (argchar) { case 'v': loglvl++; break; case 'D': dataonly = TRUE; break; case 'H': headeronly = TRUE; break; case 'a': allexts = 1; break; case 'b': inblocks = TRUE; break; case 'M': inmegs = TRUE; break; case 'e': il_append(exts, atoi(optarg)); break; case 'i': infn = optarg; break; case 'o': outfn = optarg; break; case '?': case 'h': printHelp(progname); return 0; default: return -1; } if (headeronly && dataonly) { fprintf(stderr, "Can't write data blocks only AND header blocks only!\n"); exit(-1); } if (inblocks && inmegs) { fprintf(stderr, "Can't write sizes in FITS blocks and megabytes.\n"); exit(-1); } fits_use_error_system(); log_init(loglvl); log_to(stderr); errors_log_to(stderr); if (infn) { anq = anqfits_open(infn); if (!anq) { ERROR("Failed to open input file \"%s\"", infn); exit(-1); } Next = anqfits_n_ext(anq); fprintf(stderr, "File %s contains %i FITS extensions.\n", infn, Next); } if (infn && !outfn) { for (i=0; i<Next; i++) { off_t hdrstart, hdrlen, datastart, datalen; hdrstart = anqfits_header_start(anq, i); hdrlen = anqfits_header_size(anq, i); datastart = anqfits_data_start(anq, i); datalen = anqfits_data_size(anq, i); if (inblocks) { off_t block = (off_t)FITS_BLOCK_SIZE; fprintf(stderr, "Extension %i : header start %zu , length %zu ; data start %zu , length %zu blocks.\n", i, (size_t)(hdrstart / block), (size_t)(hdrlen / block), (size_t)(datastart / block), (size_t)(datalen / block)); } else if (inmegs) { off_t meg = 1024*1024; fprintf(stderr, "Extension %i : header start %zu , length %zu ; data start %zu , length %zu megabytes.\n", i, (size_t)(hdrstart/meg), (size_t)(hdrlen/meg), (size_t)(datastart/meg), (size_t)(datalen/meg)); } else { fprintf(stderr, "Extension %i : header start %zu , length %zu ; data start %zu , length %zu .\n", i, (size_t)hdrstart, (size_t)hdrlen, (size_t)datastart, (size_t)datalen); } } anqfits_close(anq); exit(0); } if (!infn || !outfn || !(il_size(exts) || allexts)) { printHelp(progname); exit(-1); } if (!strcmp(outfn, "-")) { tostdout = TRUE; if (allexts) { fprintf(stderr, "Specify all extensions (-a) and outputting to stdout (-o -) doesn't make much sense...\n"); exit(-1); } } if (infn) { fin = fopen(infn, "rb"); if (!fin) { fprintf(stderr, "Failed to open input file %s: %s\n", infn, strerror(errno)); exit(-1); } } if (tostdout) fout = stdout; else { if (allexts) for (i=0; i<Next; i++) il_append(exts, i); else { // open the (single) output file. fout = fopen(outfn, "wb"); if (!fout) { fprintf(stderr, "Failed to open output file %s: %s\n", outfn, strerror(errno)); exit(-1); } } } for (i=0; i<il_size(exts); i++) { off_t hdrstart, hdrlen, datastart, datalen; int ext = il_get(exts, i); if (allexts) { char fn[256]; snprintf(fn, sizeof(fn), outfn, ext); fout = fopen(fn, "wb"); if (!fout) { fprintf(stderr, "Failed to open output file %s: %s\n", fn, strerror(errno)); exit(-1); } } hdrstart = anqfits_header_start(anq, ext); hdrlen = anqfits_header_size(anq, ext); datastart = anqfits_data_start(anq, ext); datalen = anqfits_data_size(anq, ext); if (inblocks) { off_t block = (off_t)FITS_BLOCK_SIZE; fprintf(stderr, "Writing extension %i : header start %zu , length %zu ; data start %zu , length %zu blocks.\n", ext, (size_t)(hdrstart / block), (size_t)(hdrlen / block), (size_t)(datastart / block), (size_t)(datalen / block)); } else if (inmegs) { off_t meg = 1024*1024; fprintf(stderr, "Writing extension %i : header start %zu , length %zu ; data start %zu , length %zu megabytes.\n", ext, (size_t)(hdrstart/meg), (size_t)(hdrlen/meg), (size_t)(datastart/meg), (size_t)(datalen/meg)); } else { fprintf(stderr, "Writing extension %i : header start %zu , length %zu ; data start %zu , length %zu .\n", ext, (size_t)hdrstart, (size_t)hdrlen, (size_t)datastart, (size_t)datalen); } if (hdrlen && !dataonly) { if (pipe_file_offset(fin, hdrstart, hdrlen, fout)) { fprintf(stderr, "Failed to write header for extension %i: %s\n", ext, strerror(errno)); exit(-1); } } if (datalen && !headeronly) { if (pipe_file_offset(fin, datastart, datalen, fout)) { fprintf(stderr, "Failed to write data for extension %i: %s\n", ext, strerror(errno)); exit(-1); } } if (allexts) if (fclose(fout)) { fprintf(stderr, "Failed to close output file: %s\n", strerror(errno)); exit(-1); } } fclose(fin); if (!allexts && !tostdout) fclose(fout); il_free(exts); anqfits_close(anq); return 0; }