;; ---------------------------------------------------------------------------------------------------------------------------------- ;; NAME: TEST_SYNMAG.PRO ;; ;; PURPOSE: Unit testing of the synmag code ;; ;; HISTORY: ;; Created K. Bundy - Nov 2012 pro test_synmag ;; .................................................................................................... ;; Test 1) No arguments print, ' TEST_SYNMAG: 1) No arguments: Should print syntax' synmag print ;; .................................................................................................... ;; Test 2) Single FWHM mag = 21.0 rad = 3.0 AB = 0.8 aperture_radii =[2, 3, 4, 5]/2.0 ;; arcsec, aperture radii for the synthetic aperture photometry FWHM = 1.3 print, ' TEST_SYNMAG: 2) Single FWHM' ;; SDSS Exp synmag, mag, rad, AB, FWHM, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, ' TEST_SYNMAG: Following should show MGE_INTRINSIC array and mgeout structure' help, mge_intrinsic help, mgeout, /str print print, ' TEST_SYNMAG: 2) Single FWHM - SDSS Exp, Should read: 23.3540 22.6278 22.1761 21.8704' print, transpose(synmag_out) ;; SDSS Exp, Integers synmag, fix(mag), fix(rad), AB, FWHM, aperture_radii, synmag_out, n_sersic=1, /SDSS print, ' TEST_SYNMAG: 2) Single FWHM - SDSS Exp Integers, Should read: 23.3540 22.6278 22.1761 21.8704' print, transpose(synmag_out) ;; SDSS Dev synmag, mag, rad, AB, FWHM, aperture_radii, synmag_out, n_sersic=4.0, /SDSS print, ' TEST_SYNMAG: 2) Single FWHM - SDSS Dev, Should read: 22.7302 22.2186 21.9479 21.7762' print, transpose(synmag_out) ;; Exp synmag, mag, rad, AB, FWHM, aperture_radii, synmag_out, n_sersic=1.0 print, ' TEST_SYNMAG: 2) Single FWHM - Exp (standard), Should read: 23.3686 22.6423 22.1906 21.8849' print, transpose(synmag_out) ;; Dev synmag, mag, rad, AB, FWHM, aperture_radii, synmag_out, n_sersic=4.0 print, ' TEST_SYNMAG: 2) Single FWHM - Dev (standard), Should read: 22.6462 22.1442 21.8801 21.7114' print, transpose(synmag_out) ;; .................................................................................................... ;; Test 3) Double Gaussian ;; Define a 2-component Gaussian PSF FWHM1 = 2.07 R_PSF1 = (9/10.)/(2*!pi*(FWHM1/2.3548)^2) PSF_FWHM_dbl = [ [R_PSF1, FWHM1], [R_PSF1/36, 2*FWHM1]] synmag, mag, rad, AB, PSF_FWHM_dbl, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout ;;print, ' TEST_SYNMAG: 3) Double FWHM - Should read: 23.5792 22.8042 22.3105 21.9724' print, transpose(synmag_out) ;; .................................................................................................... ;; Test 4) Double Gaussian with one component squished and inclined PSF_FWHM_dbl2 = [ [R_PSF1, FWHM1, FWHM1, 0], [R_PSF1/36, 2*FWHM1, 1.5*FWHM1, 30]] synmag, mag, rad, AB, PSF_FWHM_dbl2, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) ;; .................................................................................................... ;; Test 5) Double Gaussian with one component squished, inclined, and offset PSF_FWHM_dbl3 = [ [R_PSF1, FWHM1, FWHM1, 0, 0, 0], [R_PSF1/36, 2*FWHM1, 1.5*FWHM1, 30, 1.5, 0.4]] synmag, mag, rad, AB, PSF_FWHM_dbl3, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) ;; .................................................................................................... ;; Test 6) Double Gaussians with parameters per object mag = [21.0, 20.4, 23.6] rad = [3.0, 2.3, 0.6] AB = [0.8, 0.1, 1.0] aperture_radii =[2, 3, 4, 5]/2.0 ;; arcsec, aperture radii for the synthetic aperture photometry PSF_info = fltarr(2, 2, 3) ;; A 3-dimensional array of size [2, n_PSF, nobj], [4, n_PSF, nobj], or [6, n_PSF, nobj], where the PSF_info[0, 0, *] = [0.9, 0.9, 0.9] & PSF_info[1, 0, *] = [1.5, 2.0, 0.8] ;; 1st PSF component, amplitude and FWHM PSF_info[0, 1, *] = [0.1, 0.1, 0.1] & PSF_info[1, 1, *] = [3, 4, 1.0] ;; 2nd PSF component, amplitude and FWHM synmag, mag, rad, AB, PSF_info, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) PSF_info = fltarr(4, 2, 3) ;; A 3-dimensional array of size [2, n_PSF, nobj], [4, n_PSF, nobj], or [6, n_PSF, nobj], where the PSF_info[0, 0, *] = [0.9, 0.9, 0.9] & PSF_info[1, 0, *] = [1.5, 2.0, 0.8] ;; 1st PSF component, amplitude and FWHM PSF_info[0, 1, *] = [0.1, 0.1, 0.1] & PSF_info[1, 1, *] = [3, 4, 1.0] ;; 2nd PSF component, amplitude and FWHM PSF_info[2, 0, *] = [1.5, 2.0, 0.8] & PSF_info[3, 0, *] = [0, 0, 0] ;; 1st PSF component, minor axis and PA PSF_info[2, 1, *] = [1.5, 2.0, 0.5] & PSF_info[3, 1, *] = [35, 35, 35] ;; 2nd PSF component, minor axis and PA synmag, mag, rad, AB, PSF_info, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) PSF_info = fltarr(6, 2, 3) ;; A 3-dimensional array of size [2, n_PSF, nobj], [4, n_PSF, nobj], or [6, n_PSF, nobj], where the PSF_info[0, 0, *] = [0.9, 0.9, 0.9] & PSF_info[1, 0, *] = [1.5, 2.0, 0.8] ;; 1st PSF component, amplitude and FWHM PSF_info[0, 1, *] = [0.1, 0.1, 0.1] & PSF_info[1, 1, *] = [3, 4, 1.0] ;; 2nd PSF component, amplitude and FWHM PSF_info[2, 0, *] = [1.5, 2.0, 0.8] & PSF_info[3, 0, *] = [0, 0, 0] ;; 1st PSF component, minor axis and PA PSF_info[2, 1, *] = [1.5, 2.0, 0.5] & PSF_info[3, 1, *] = [35, 35, 35] ;; 2nd PSF component, minor axis and PA PSF_info[4, 0, *] = [0.0, 0.0, 0.0] & PSF_info[5, 0, *] = [0, 0, 0] ;; 1st PSF component, x-offset and y-offset PSF_info[4, 1, *] = [1.5, 2.0, 0.5] & PSF_info[5, 1, *] = [-0.2, -0.1, 0.5] ;; 2nd PSF component, x-offset and y-offset synmag, mag, rad, AB, PSF_info, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) ;; Maybe one final test of ultimate complexity but very close to ;; simplest example to see how they compare in the limit of ;; approaching simplicity? ;; .................................................................................................... ;; Test 7) Assymptotic variations in the PSF nmag = 3 mag = fltarr(nmag) + 21.0 rad = fltarr(nmag) + 3.0 AB = fltarr(nmag) + 0.8 FWHM1 = 2.07 & FWHM2 = 2*FWHM1 R_PSF1 = (9/10.)/(2*!pi*(FWHM1/2.3548)^2) R_PSF2 = R_PSF1/36.0 PSF_info = fltarr(4, 2, nmag) ;; A 3-dimensional array of size [2, n_PSF, nobj], [4, n_PSF, nobj], or [6, n_PSF, nobj], where the PSF_info[0, 0, *] = fltarr(nmag)+R_PSF1 & PSF_info[1, 0, *] = fltarr(nmag)+FWHM1 ;; 1st PSF component, amplitude and FWHM PSF_info[0, 1, *] = fltarr(nmag)+R_PSF2 & PSF_info[1, 1, *] = fltarr(nmag)+FWHM2 ;; 2nd PSF component, amplitude and FWHM PSF_info[2, 0, *] = fltarr(nmag)+FWHM1 & PSF_info[3, 0, *] = [0, 0, 0] ;; 1st PSF component, minor axis and PA PSF_info[2, 1, *] = FWHM2*[1.0, 0.8, 0.8] & PSF_info[3, 1, *] = [0, 35, -75] ;; 2nd PSF component, minor axis and PA synmag, mag, rad, AB, PSF_info, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) print, ' TEST_SYNMAG: Compare with simple double-Gaussian: 23.5792 22.8042 22.3105 21.9724' print, ' The 2nd and 3rd rows (objects) should be the same: They have the same 2nd-PSF component axis ratio, but with different position angles ' PSF_info = fltarr(6, 2, nmag) ;; A 3-dimensional array of size [2, n_PSF, nobj], [4, n_PSF, nobj], or [6, n_PSF, nobj], where the PSF_info[0, 0, *] = fltarr(nmag)+R_PSF1 & PSF_info[1, 0, *] = fltarr(nmag)+FWHM1 ;; 1st PSF component, amplitude and FWHM PSF_info[0, 1, *] = fltarr(nmag)+R_PSF2 & PSF_info[1, 1, *] = fltarr(nmag)+FWHM2 ;; 2nd PSF component, amplitude and FWHM PSF_info[2, 0, *] = fltarr(nmag)+FWHM1 & PSF_info[3, 0, *] = [0, 0, 0] ;; 1st PSF component, minor axis and PA PSF_info[2, 1, *] = FWHM2*[0.8, 0.8, 0.8] & PSF_info[3, 1, *] = [0, 45, 225] ;; 2nd PSF component, minor axis and PA PSF_info[4, 0, *] = [0.0, 0.0, 0.0] & PSF_info[5, 0, *] = [0, 0, 0] ;; 1st PSF component, x-offset and y-offset PSF_info[4, 1, *] = [0, +1.0, -1.0] & PSF_info[5, 1, *] = [0, +1.0, -1.0] ;; 2nd PSF component, x-offset and y-offset synmag, mag, rad, AB, PSF_info, aperture_radii, synmag_out, n_sersic=1.0, /SDSS, mge_intrinsic = mge_intrinsic, mgeout = mgeout print, transpose(synmag_out) print, ' TEST_SYNMAG: Small X/Y offsets: Compare 1st objct with last two above: 23.5849 22.8110 22.3186 21.9820' print, ' The 2nd and 3rd rows should be the same: ' print, ' 1) PSF2 is rotated 45 deg and 225 deg between the two (axisymmetric)' print, ' 2) PSF2 (x,y) is (+1,+1) and (-1,-1)' end