#!/usr/bin/perl # -------------------------------------------- # PSQL fits file viewer # # MDWeinberg 07/12/02 # 03/16/04 updated for multiple compression algorithms # 06/02/04 updated for pfits & bzip2 compression # 05/19/05 added options for title or key= information RFS # -------------------------------------------- # Temporary directory for fits manipulation # -------------------------------------------- $tmpdir = "/tmp"; # -------------------------------------------- # Constants . . . # -------------------------------------------- $radius = 10; $ds9_options = "-wcs skyformat degrees -scale log -scale zmax -zoom 3"; $ds9_grid = "ds9.grd"; # -------------------------------------------- # Test for grid file # -------------------------------------------- if (-e $ds9_grid) { $ds9_options = $ds9_options . " -grid yes -grid load $ds9_grid"; } else { $ds9_options = $ds9_options . " -grid yes"; } # -------------------------------------------- # Main loop . . . # -------------------------------------------- while (<>) { # -------------------------------------------- # Make temporary files # -------------------------------------------- $tmp_fits = `mktemp $tmpdir/vfits.fits.XXXXXXXXXX`; $tmp_reg = `mktemp $tmpdir/vfits.reg.XXXXXXXXXX`; chomp($tmp_fits); chomp($tmp_reg); # -------------------------------------------- # Eat the parameter line and parse # -------------------------------------------- @argv = split(" "); $numarg = $#argv+1; # -------------------------------------------- # Sanity checks # -------------------------------------------- if ($numarg==0 || $numarg> 4) { usage(); } if ($numarg==3 || $numarg==4) { if ($argv[1] < 0.0 || $argv[1] > 360.0 || $argv[2] < -90.0 || $argv[2] > 90.0) { usage(); } } # -------------------------------------------- # Uncompress image # -------------------------------------------- # Parse filename and pick a filter $_ = $argv[0]; if (/[.]fits[.]H[.]gz$/) { $filter = " | gunzip | hdecomp "; } elsif (/[.]fits[.]H$/) { $filter = " | hdecomp "; } elsif (/[.]fits[.]gz$/) { $filter = " | gunzip "; } elsif (/[.]fits[.]H[.]bz2$/) { $filter = " | bzcat | hdecomp "; } elsif (/[.]fits[.]bz2$/) { $filter = " | bzcat "; } elsif (/[.]fits$/) { $filter = ""; } elsif (/[.]pfits[.]bz2$/) { $filter = " | bzcat | unpackfits "; } elsif (/[.]pfits$/) { $filter = " | unpackfits "; } else { print "File extension for <", $argv[0], "> not recognized\n"; usage(); } # Uncompress and save temporary file system(sprintf("cat %s %s > $tmp_fits", $argv[0], $filter)); # -------------------------------------------- # Display command # -------------------------------------------- $display = "ds9 $tmp_fits -wcs fk5 $ds9_options"; # -------------------------------------------- # Make region file and center display # -------------------------------------------- if ($numarg==1 || $numarg==3) { $display = $display . " -title 2MASS_Coadd_Viewer."; # $display = $display . " -title " . sprintf($argv[0]); } if ($numarg==2) { $display = $display . " -title ID=" . sprintf($argv[1]); } if ($numarg==3) { $display = $display . " -title 2MASS_Coadd_Viewer."; open(OUT, ">$tmp_reg"); print OUT sprintf("fk5; circle %sd %sd %d\"\n", $argv[1], $argv[2], $radius); close(OUT); $display = $display . " -region $tmp_reg" . sprintf(" -pan to %s %s fk5", $argv[1], $argv[2]); } if ($numarg==4) { $display = $display . " -title ID=" . sprintf($argv[3]); open(OUT, ">$tmp_reg"); print OUT sprintf("fk5; circle %sd %sd %d\"\n", $argv[1], $argv[2], $radius); close(OUT); $display = $display . " -region $tmp_reg" . sprintf(" -pan to %s %s fk5", $argv[1], $argv[2]); } # -------------------------------------------- # Display it # -------------------------------------------- system($display); # printf($display); # -------------------------------------------- # Clean up the mess # -------------------------------------------- system("rm $tmp_reg $tmp_fits"); } # -------------------------------------------- # All done # -------------------------------------------- exit 0; sub usage { print stderr "===========================================================\n"; print stderr "Usage:\n\n"; print stderr "I need one either one or three arguments per record, e.g.:\n\n"; print stderr " \\o | $0\n"; print stderr " select filename, ra, decl . . . \n"; print stderr " \\o\n\n"; print stderr "or\n\n"; print stderr " \\o | $0\n"; print stderr " select filename . . . \n"; print stderr " \\o\n\n"; print stderr "In the first case, the image with filename will be viewed\n"; print stderr "with a marker at position ra & decl. In the second case,\n"; print stderr "In the second case, the there will be no marker. The\n"; print stderr "image specified by each record will be displayed\n"; print stderr "sequentially.\n"; print stderr "===========================================================\n"; exit; }