def run_tests(random_seed,
              outfile,
              config=None,
              gsparams=None,
              wmult=None,
              logger=None,
              fail_value=-666.):
    """Run a full set of tests, writing pickled tuple output to outfile.
    """
    import sys
    import cPickle
    import numpy as np
    import galsim
    import galaxy_sample
    # Load up the comparison_utilities module from the parent directory
    sys.path.append('..')
    import comparison_utilities

    if config is None:
        use_config = False
        if gsparams is None:
            import warnings
            warnings.warn("No gsparams provided to run_tests?")
        if wmult is None:
            raise ValueError("wmult must be set if config=None.")
    else:
        use_config = True
        if gsparams is not None:
            import warnings
            warnings.warn(
                "gsparams is provided as a kwarg but the config['image']['gsparams'] will take "
                + "precedence.")
        if wmult is not None:
            import warnings
            warnings.warn(
                "wmult is provided as a kwarg but the config['image']['wmult'] will take "
                + "precedence.")
    # Get galaxy sample
    n_cosmos, hlr_cosmos, gabs_cosmos = galaxy_sample.get()
    # Only take the first NOBS objects
    n_cosmos = n_cosmos[0:NOBS]
    hlr_cosmos = hlr_cosmos[0:NOBS]
    gabs_cosmos = gabs_cosmos[0:NOBS]
    ntest = len(SERSIC_N_TEST)
    # Setup a UniformDeviate
    ud = galsim.UniformDeviate(random_seed)
    # Open the output file and write a header:
    fout = open(outfile, 'wb')
    fout.write(
        '#  g1obs_draw g2obs_draw sigma_draw delta_g1obs delta_g2obs delta_sigma '
        + 'err_g1obs err_g2obs err_sigma\n')
    # Start looping through the sample objects and collect the results
    for i, hlr, gabs in zip(range(NOBS), hlr_cosmos, gabs_cosmos):
        print "Testing galaxy #"+str(i+1)+"/"+str(NOBS)+\
              " with (hlr, |g|) = "+str(hlr)+", "+str(gabs)
        random_theta = 2. * np.pi * ud()
        g1 = gabs * np.cos(2. * random_theta)
        g2 = gabs * np.sin(2. * random_theta)
        for j, sersic_n in zip(range(ntest), SERSIC_N_TEST):
            print "Exploring Sersic n = " + str(sersic_n)
            if use_config:
                # Increment the random seed so that each test gets a unique one
                config['image'][
                    'random_seed'] = random_seed + i * NOBS * ntest + j * ntest + 1
                config['gal'] = {
                    "type": "Sersic",
                    "n": sersic_n,
                    "half_light_radius": hlr,
                    "ellip": {
                        "type": "G1G2",
                        "g1": g1,
                        "g2": g2
                    }
                }
                config['psf'] = {
                    "type": "Airy",
                    "lam_over_diam": PSF_LAM_OVER_DIAM
                }
                try:
                    results = comparison_utilities.compare_dft_vs_photon_config(
                        config,
                        abs_tol_ellip=TOL_ELLIP,
                        abs_tol_size=TOL_SIZE,
                        logger=logger)
                    test_ran = True
                except RuntimeError as err:
                    test_ran = False
                    pass
                # Uncomment lines below to ouput a check image
                #import copy
                #checkimage = galsim.config.BuildImage(copy.deepcopy(config))[0] #im = first element
                #checkimage.write('junk_'+str(i + 1)+'_'+str(j + 1)+'.fits')
            else:
                test_gsparams = galsim.GSParams(maximum_fft_size=MAX_FFT_SIZE)
                galaxy = galsim.Sersic(sersic_n,
                                       half_light_radius=hlr,
                                       gsparams=test_gsparams)
                galaxy.applyShear(g1=g1, g2=g2)
                psf = galsim.Airy(lam_over_diam=PSF_LAM_OVER_DIAM,
                                  gsparams=test_gsparams)
                try:
                    results = comparison_utilities.compare_dft_vs_photon_object(
                        galaxy,
                        psf_object=psf,
                        rng=ud,
                        pixel_scale=PIXEL_SCALE,
                        size=IMAGE_SIZE,
                        abs_tol_ellip=TOL_ELLIP,
                        abs_tol_size=TOL_SIZE,
                        n_photons_per_trial=NPHOTONS,
                        wmult=wmult)
                    test_ran = True
                except RuntimeError, err:
                    test_ran = False
                    pass

            if not test_ran:
                import warnings
                warnings.warn('RuntimeError encountered for galaxy ' +
                              str(i + 1) + '/' + str(NOBS) + ' with ' +
                              'Sersic n = ' + str(sersic_n) + ': ' + str(err))
                fout.write('%e %e %e %e %e %e %e %e %e %e %e %e %e\n' %
                           (fail_value, fail_value, fail_value, fail_value,
                            fail_value, fail_value, fail_value, fail_value,
                            fail_value, fail_value, fail_value, fail_value,
                            fail_value))
                fout.flush()
            else:
                fout.write('%e %e %e %e %e %e %e %e %e %e %e %e %e\n' %
                           (results.g1obs_draw, results.g2obs_draw,
                            results.sigma_draw, results.delta_g1obs,
                            results.delta_g2obs, results.delta_sigma,
                            results.err_g1obs, results.err_g2obs,
                            results.err_sigma, sersic_n, hlr, g1, g2))
                fout.flush()
def run_tests(use_interpolants, nitems=test_interpolants.default_nitems):
    """Run the tests for the specified interpolants."""

    import sys
    # Import the Sersic galaxy sample module
    try:
        import galaxy_sample
    except ImportError:
        import sys
        sys.path.append('../external/test_sersic_highn')
        import galaxy_sample

    # Get the COSMOS galaxy sample parameters
    ns_cosmos, hlrs_cosmos, gobss_cosmos = galaxy_sample.get()
    # Only use the first nitems galaxies in these lists, starting at test_interpolants.first_index
    istart = test_interpolants.default_first_index
    iend = istart + nitems
    ns_cosmos = ns_cosmos[istart: iend]
    hlrs_cosmos = hlrs_cosmos[istart: iend]
    gobss_cosmos = gobss_cosmos[istart: iend]

    # Draw a whole load of images of Sersic profiles at random orientations using these params
    sersic_images = draw_sersic_images(
        ns_cosmos, hlrs_cosmos, gobss_cosmos, random_seed=test_interpolants.rseed, nmin=0.3,
        nmax=4.2, image_size=SERSIC_IMAGE_SIZE, pixel_scale=test_interpolants.pixel_scale)

    # Calculate the reference results for g1obs, g2obs and sigma for these reference images
    g1_list = []
    g2_list = []
    sigma_list = []
    print "Calculating reference g1, g2 & sigma for "+str(len(sersic_images))+" Sersic images"
    for sersic_image in sersic_images:
        shape = test_interpolants.CatchAdaptiveMomErrors(sersic_image)
        if isinstance(shape, float):
            g1_list.append(-10)
            g2_list.append(-10)
            sigma_list.append(-10)
        elif isinstance(shape, galsim.hsm.ShapeData):
            g1_list.append(shape.observed_shape.g1)
            g2_list.append(shape.observed_shape.g2)
            sigma_list.append(shape.moments_sigma)
        else:
            raise TypeError("Unexpected output from test_interpolants.CatchAdaptiveMomErrors().")
    g1_list = np.asarray(g1_list)
    g2_list = np.asarray(g2_list)
    sigma_list = np.asarray(sigma_list)

    # Then start the interpolant tests...
    # Define a dict storing PSFs to iterate over along with the appropriate test pixel scale and
    # filename
    psf_dict = {
        "delta" : (
            galsim.Gaussian(1.e-8), test_interpolants.pixel_scale, DELTA_FILENAME),
        "original" : (
            None, test_interpolants.pixel_scale, ORIGINAL_FILENAME),
    }
    print''
    # Then we start the grand loop producing output in a similar fashion to test_interpolants.py
    for image_type in ("delta", "original"):
 
        # Get the correct PSF and test image pixel scale
        psf = psf_dict[image_type][0]
        dx_test = psf_dict[image_type][1]
        outfile = open(psf_dict[image_type][2], 'wb')
        print "Writing test results to "+str(outfile)
        for padding in test_interpolants.padding_list:

            print "Using padding = "+str(padding)
            for interpolant in use_interpolants:

                print "Using interpolant: "+str(interpolant)
                print 'Running Angle tests'
                for angle in test_interpolants.angle_list: # Possible rotation angles

                    sys.stdout.write('.')
                    sys.stdout.flush()
                    dataXint = calculate_interpolated_image_g1g2sigma(
                        sersic_images, psf=psf, dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test, shear=None, magnification=None, angle=angle*galsim.degrees,
                        shift=None, x_interpolant=interpolant, padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(
                        outfile, g1_list, g2_list, sigma_list, dataXint)
                    dataKint = calculate_interpolated_image_g1g2sigma(
                        sersic_images, psf=psf, dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test, shear=None, magnification=None, angle=angle*galsim.degrees,
                        shift=None, k_interpolant=interpolant, padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(
                        outfile, g1_list, g2_list, sigma_list, dataKint)
                sys.stdout.write('\n')
 
                print 'Running Shear/Magnification tests'
                for (g1, g2, mag) in test_interpolants.shear_and_magnification_list:

                    sys.stdout.write('.')
                    sys.stdout.flush()
                    dataXint = calculate_interpolated_image_g1g2sigma(
                        sersic_images, psf=psf, dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test, shear=(g1, g2), magnification=mag, angle=None,
                        shift=None, x_interpolant=interpolant, padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(
                        outfile, g1_list, g2_list, sigma_list, dataXint)
                    dataKint = calculate_interpolated_image_g1g2sigma(
                        sersic_images, psf=psf, dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test, shear=(g1, g2), magnification=mag, angle=None,
                        shift=None, k_interpolant=interpolant, padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(
                        outfile, g1_list, g2_list, sigma_list, dataKint)
                sys.stdout.write('\n')

                print 'Running Shift tests'
                for shift in test_interpolants.shift_list:

                    sys.stdout.write('.')
                    sys.stdout.flush()
                    dataXint = calculate_interpolated_image_g1g2sigma(
                        sersic_images, psf=psf, dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test, shear=None, magnification=None, angle=None,
                        shift=shift, x_interpolant=interpolant, padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(
                        outfile, g1_list, g2_list, sigma_list, dataXint)
                    dataKint = calculate_interpolated_image_g1g2sigma(
                        sersic_images, psf=psf, dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test, shear=None, magnification=None, angle=None,
                        shift=shift, k_interpolant=interpolant, padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(
                        outfile, g1_list, g2_list, sigma_list, dataKint)
                sys.stdout.write('\n')

                print ''

        print "Finished tests for image_type: "+str(image_type) 
        print ""
        outfile.close()
def run_tests(random_seed, outfile, config=None, gsparams=None, wmult=None, logger=None,
              fail_value=-666.):
    """Run a full set of tests, writing pickled tuple output to outfile.
    """
    import cPickle
    import numpy as np
    import galsim
    import galaxy_sample
    
    if config is None:
        use_config = False
        if gsparams is None:
            import warnings
            warnings.warn("No gsparams provided to run_tests?")
        if wmult is None:
            raise ValueError("wmult must be set if config=None.")
    else:
        use_config = True
        if gsparams is not None:
            import warnings
            warnings.warn(
                "gsparams is provided as a kwarg but the config['image']['gsparams'] will take "+
                "precedence.")
        if wmult is not None:
            import warnings
            warnings.warn(
                "wmult is provided as a kwarg but the config['image']['wmult'] will take "+
                "precedence.")
    # Get galaxy sample
    n_cosmos, hlr_cosmos, gabs_cosmos = galaxy_sample.get()
    # Only take the first NOBS objects
    n_cosmos = n_cosmos[0: NOBS]
    hlr_cosmos = hlr_cosmos[0: NOBS]
    gabs_cosmos = gabs_cosmos[0: NOBS]
    # Setup a UniformDeviate
    ud = galsim.UniformDeviate(random_seed)
    # Open the output file and write a header:
    fout = open(outfile, 'wb')
    fout.write(
        '#  g1obs_draw g2obs_draw sigma_draw delta_g1obs delta_g2obs delta_sigma '+
        'err_g1obs err_g2obs err_sigma\n')
    # Start looping through the sample objects and collect the results
    for i, hlr, gabs in zip(range(NOBS), hlr_cosmos, gabs_cosmos):
        print "Testing galaxy #"+str(i+1)+"/"+str(NOBS)+\
              " with (hlr, |g|) = "+str(hlr)+", "+str(gabs)
        random_theta = 2. * np.pi * ud()
        g1 = gabs * np.cos(2. * random_theta)
        g2 = gabs * np.sin(2. * random_theta)
        if use_config:
            # Increment the random seed so that each test gets a unique one
            config['image']['random_seed'] = random_seed + i * NOBS + 1
            config['gal'] = {
                "type" : "Gaussian" , "half_light_radius" : hlr ,
                "ellip" : {
                    "type" : "G1G2" , "g1" : g1 , "g2" : g2
                }
            }
            config['psf'] = {"type" : "Airy" , "lam_over_diam" : PSF_LAM_OVER_DIAM }
            try:
                results = galsim.utilities.compare_dft_vs_photon_config(
                    config, abs_tol_ellip=TOL_ELLIP, abs_tol_size=TOL_SIZE, logger=logger)
                test_ran = True
            except RuntimeError as err:
                test_ran = False
                pass
            # Uncomment lines below to ouput a check image
            #import copy
            #checkimage = galsim.config.BuildImage(copy.deepcopy(config))[0] #im = first element
            #checkimage.write('junk_'+str(i + 1)+'_'+str(j + 1)+'.fits')
        else:
            test_gsparams = galsim.GSParams(maximum_fft_size=MAX_FFT_SIZE)
            galaxy = galsim.Gaussian(half_light_radius=hlr, gsparams=test_gsparams)
            galaxy.applyShear(g1=g1, g2=g2)
            psf = galsim.Airy(lam_over_diam=PSF_LAM_OVER_DIAM, gsparams=test_gsparams)
            try:
                results = galsim.utilities.compare_dft_vs_photon_object(
                    galaxy, psf_object=psf, rng=ud, pixel_scale=PIXEL_SCALE, size=IMAGE_SIZE,
                    abs_tol_ellip=TOL_ELLIP, abs_tol_size=TOL_SIZE,
                    n_photons_per_trial=NPHOTONS, wmult=wmult)
                test_ran = True
            except RuntimeError, err:
                test_ran = False
                pass

        if not test_ran:
            import warnings
            warnings.warn(
                'RuntimeError encountered for galaxy '+str(i + 1)+'/'+str(NOBS)+': '+str(err))
            fout.write(
                '%e %e %e %e %e %e %e %e %e %e %e %e\n' % (
                    fail_value, fail_value, fail_value, fail_value, fail_value, fail_value,
                    fail_value, fail_value, fail_value, fail_value, fail_value, fail_value,
                )
            )
            fout.flush()
        else:
            fout.write(
                '%e %e %e %e %e %e %e %e %e %e %e %e\n' % (
                    results.g1obs_draw, results.g2obs_draw, results.sigma_draw,
                    results.delta_g1obs, results.delta_g2obs, results.delta_sigma,
                    results.err_g1obs, results.err_g2obs, results.err_sigma, hlr, g1, g2
                )
            )
            fout.flush()
Beispiel #4
0
def run_tests(use_interpolants, nitems=test_interpolants.default_nitems):
    """Run the tests for the specified interpolants."""

    import sys
    # Import the Sersic galaxy sample module
    try:
        import galaxy_sample
    except ImportError:
        import sys
        sys.path.append('../external/test_sersic_highn')
        import galaxy_sample

    # Get the COSMOS galaxy sample parameters
    ns_cosmos, hlrs_cosmos, gobss_cosmos = galaxy_sample.get()
    # Only use the first nitems galaxies in these lists, starting at test_interpolants.first_index
    istart = test_interpolants.default_first_index
    iend = istart + nitems
    ns_cosmos = ns_cosmos[istart:iend]
    hlrs_cosmos = hlrs_cosmos[istart:iend]
    gobss_cosmos = gobss_cosmos[istart:iend]

    # Draw a whole load of images of Sersic profiles at random orientations using these params
    sersic_images = draw_sersic_images(
        ns_cosmos,
        hlrs_cosmos,
        gobss_cosmos,
        random_seed=test_interpolants.rseed,
        nmin=0.3,
        nmax=4.2,
        image_size=SERSIC_IMAGE_SIZE,
        pixel_scale=test_interpolants.pixel_scale)

    # Calculate the reference results for g1obs, g2obs and sigma for these reference images
    g1_list = []
    g2_list = []
    sigma_list = []
    print "Calculating reference g1, g2 & sigma for " + str(
        len(sersic_images)) + " Sersic images"
    for sersic_image in sersic_images:
        shape = test_interpolants.CatchAdaptiveMomErrors(sersic_image)
        if isinstance(shape, float):
            g1_list.append(-10)
            g2_list.append(-10)
            sigma_list.append(-10)
        elif isinstance(shape, galsim.hsm.ShapeData):
            g1_list.append(shape.observed_shape.g1)
            g2_list.append(shape.observed_shape.g2)
            sigma_list.append(shape.moments_sigma)
        else:
            raise TypeError(
                "Unexpected output from test_interpolants.CatchAdaptiveMomErrors()."
            )
    g1_list = np.asarray(g1_list)
    g2_list = np.asarray(g2_list)
    sigma_list = np.asarray(sigma_list)

    # Then start the interpolant tests...
    # Define a dict storing PSFs to iterate over along with the appropriate test pixel scale and
    # filename
    psf_dict = {
        "delta": (galsim.Gaussian(1.e-8), test_interpolants.pixel_scale,
                  DELTA_FILENAME),
        "original": (None, test_interpolants.pixel_scale, ORIGINAL_FILENAME),
    }
    print ''
    # Then we start the grand loop producing output in a similar fashion to test_interpolants.py
    for image_type in ("delta", "original"):

        # Get the correct PSF and test image pixel scale
        psf = psf_dict[image_type][0]
        dx_test = psf_dict[image_type][1]
        outfile = open(psf_dict[image_type][2], 'wb')
        print "Writing test results to " + str(outfile)
        for padding in test_interpolants.padding_list:

            print "Using padding = " + str(padding)
            for interpolant in use_interpolants:

                print "Using interpolant: " + str(interpolant)
                print 'Running Angle tests'
                for angle in test_interpolants.angle_list:  # Possible rotation angles

                    sys.stdout.write('.')
                    sys.stdout.flush()
                    dataXint = calculate_interpolated_image_g1g2sigma(
                        sersic_images,
                        psf=psf,
                        dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test,
                        shear=None,
                        magnification=None,
                        angle=angle * galsim.degrees,
                        shift=None,
                        x_interpolant=interpolant,
                        padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(outfile, g1_list, g2_list,
                                                    sigma_list, dataXint)
                    dataKint = calculate_interpolated_image_g1g2sigma(
                        sersic_images,
                        psf=psf,
                        dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test,
                        shear=None,
                        magnification=None,
                        angle=angle * galsim.degrees,
                        shift=None,
                        k_interpolant=interpolant,
                        padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(outfile, g1_list, g2_list,
                                                    sigma_list, dataKint)
                sys.stdout.write('\n')

                print 'Running Shear/Magnification tests'
                for (g1, g2,
                     mag) in test_interpolants.shear_and_magnification_list:

                    sys.stdout.write('.')
                    sys.stdout.flush()
                    dataXint = calculate_interpolated_image_g1g2sigma(
                        sersic_images,
                        psf=psf,
                        dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test,
                        shear=(g1, g2),
                        magnification=mag,
                        angle=None,
                        shift=None,
                        x_interpolant=interpolant,
                        padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(outfile, g1_list, g2_list,
                                                    sigma_list, dataXint)
                    dataKint = calculate_interpolated_image_g1g2sigma(
                        sersic_images,
                        psf=psf,
                        dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test,
                        shear=(g1, g2),
                        magnification=mag,
                        angle=None,
                        shift=None,
                        k_interpolant=interpolant,
                        padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(outfile, g1_list, g2_list,
                                                    sigma_list, dataKint)
                sys.stdout.write('\n')

                print 'Running Shift tests'
                for shift in test_interpolants.shift_list:

                    sys.stdout.write('.')
                    sys.stdout.flush()
                    dataXint = calculate_interpolated_image_g1g2sigma(
                        sersic_images,
                        psf=psf,
                        dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test,
                        shear=None,
                        magnification=None,
                        angle=None,
                        shift=shift,
                        x_interpolant=interpolant,
                        padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(outfile, g1_list, g2_list,
                                                    sigma_list, dataXint)
                    dataKint = calculate_interpolated_image_g1g2sigma(
                        sersic_images,
                        psf=psf,
                        dx_input=test_interpolants.pixel_scale,
                        dx_test=dx_test,
                        shear=None,
                        magnification=None,
                        angle=None,
                        shift=shift,
                        k_interpolant=interpolant,
                        padding=padding,
                        image_type=image_type)
                    test_interpolants.print_results(outfile, g1_list, g2_list,
                                                    sigma_list, dataKint)
                sys.stdout.write('\n')

                print ''

        print "Finished tests for image_type: " + str(image_type)
        print ""
        outfile.close()