procedure xdisplay (image) string image ="" {prompt="image to be displayed"} int buff =1 {prompt="frame buffer to display image in"} real z1 =0. {prompt="minimum greylevel to be displayed"} real z2 =0. {prompt="maximum greylevel to be displayed"} string zmode ="linear" {enum="linear|log",prompt="transformation"} real cenx =0.5 {prompt="x center"} real ceny =0.5 {prompt="y center"} real sizx =0.5 {prompt="display window horizontal size"} real sizy =0.5 {prompt="display window vertical size"} real zoom =1. {min=0.125,max=8.,prompt="magnification factor"} bool verbose =no {prompt="verbose messages?"} # @(#) task xdisplay Author: R.A. Jansen -- Jul 31 1997 # @(#) # @(#) User interface to task display, with a somewhat less annoying de- # @(#) fault behaviour regarding choice of scale and range when viewing # @(#) extended sources (result may be inferior, however, for stars). # @(#) Uses: 'tv.display' and user task 'imgstat'. # @(#) # @(#) Jun 14 2000 -- Added support for multi-extension/N-dim images. RAJ. # @(#) May 11 2001 -- Added 'zoom' and 'buf' parameters. RAJ. begin string img, trans, imtyp, rpstr, rgnstr, statsec real zlo, zhi, rlo, rhi, null int ncol, nrow, ibuff img = image ibuff = buff zlo = z1 zhi = z2 trans = zmode imtyp = "."//envget("imtype") rpstr = "" rgnstr = "[*,*]" null = 0. if ( zlo == INDEF ) { zlo = null } if ( zhi == INDEF ) { zhi = null } # Check whether tv package is loaded... if ( !defpac("tv") ) { tv } # Check whether image exists ... unlearn chkimg chkimg (img, "access", verbose=yes) if (!chkimg.ok) { return } img = chkimg.imroot # The image exists. Check whether a region or image plane # was specified ... cparse (chkimg.imrpstr, delim="]") if (cparse.nfields>0) { if (strlen(cparse.field1) == 2 ) { rpstr = cparse.field1//"]" } else { rgnstr = cparse.field1//"]" } if (cparse.nfields==2) { rgnstr = cparse.field2//"]" } } # Apply transformation? if ( trans == "log" ) { if ( !defpac("stsdas") ) { stsdas } if ( !defpac("toolbox") ) { toolbox } if ( !defpac("imgtools") ) { imgtools } imgstat (img//imtyp//rpstr//rgnstr, domode=yes, lower=INDEF,upper=INDEF) rlo = imgstat.rmode - 6.0*imgstat.stddev rhi = imgstat.rmode + 6.0*imgstat.stddev imgstat (img//imtyp//rpstr//rgnstr, domode=yes, lower=rlo, upper=rhi) rlo = imgstat.rmode - 6.0*imgstat.stddev fparse (img, verbose=no) imcalc (img//imtyp//rpstr//rgnstr, fparse.directory//"log_"//fparse.root//imtyp, "if im1 .gt. "//str(rlo)//" then log10(1+im1) else 0.", pixtype="real", nullval=0., verbose=no) img = fparse.directory//"log_"//fparse.root #rpstr = "" rpstr = "[1]" rgnstr = "" if ( zlo == null ) { zlo = 0. } else { zlo = log10(zlo) } if ( zhi == null ) { zhi = 0. } else { zhi = log10(zhi) } null = 0. } # Determine image statistics and set cut-levels... imgstat (img//imtyp//rpstr//rgnstr, domode=yes, lower=INDEF,upper=INDEF) rlo = imgstat.rmode - 6.0*imgstat.stddev rhi = imgstat.rmode + 6.0*imgstat.stddev imgstat (img//imtyp//rpstr//rgnstr, domode=yes, lower=rlo, upper=rhi) if ( zlo == null ) { zlo = imgstat.rmode - imgstat.stddev } if ( zhi == null || zhi < zlo ) { if ( zhi < zlo && zhi != null ) { print ("WARNING: z2 < z1! Ignoring specified z2 ...") } if ( rgnstr == "" || rgnstr == "[*,*]" ) { imgets (img//imtyp//rpstr, "naxis2") ; nrow = int(imgets.value) imgets (img//imtyp//rpstr, "naxis2") ; nrow = int(imgets.value) imgets (img//imtyp//rpstr, "naxis1") ; ncol = int(imgets.value) nrow = nint(nrow/2.) ncol = nint(ncol/2.) if ( ncol > 10 ) { statsec = "["//str(ncol-10)//":"//str(ncol+10)//"," } else { statsec = "[*," } if ( nrow > 10 ) { statsec = statsec//str(nrow-10)//":"//str(nrow+10)//"]" } else { statsec = statsec//"*]" } } else { statsec = rgnstr } zhi = imgstat.rmode + 3.0*imgstat.stddev imgstat (img//imtyp//rpstr//statsec, domode=no) zhi = max(imgstat.max,zhi) } # Display image... if (verbose) { print ("Displaying image "//img//" ...") } display (img//imtyp//rpstr//rgnstr, ibuff, erase=yes, border_erase=yes, select_frame=yes, repeat=no, fill=no, zscale=no, contrast=0.25, zrange=no, nsample=1000, xcenter=cenx, ycenter=ceny, xsize=sizx, ysize=sizy, xmag=zoom, ymag=zoom, order=0, z1=zlo, z2=zhi, ztrans="linear", lutfile="") # Clean-up... if ( trans == "log" ) { imdelete (fparse.directory//"log_"//fparse.root//imtyp, yes, verify=no, default_acti=yes) } end