Пример #1
0
def initPSFObjects(parameters):
    """
    Create and return the PSF objects (spline, pupil function or psf FFT).
    """
    psf_objects = []

    # Try PSF FFT.
    #
    if (len(mpUtil.getPSFFFTAttrs(parameters)) > 0):

        # Create PSF FFT PSF objects.
        for psf_fft_attr in mpUtil.getPSFFFTAttrs(parameters):
            psf_objects.append(
                psfFn.PSFFn(psf_filename=parameters.getAttr(psf_fft_attr)))

        # All the PSF FFT objects have to have the same Z range.
        for i in range(1, len(psf_objects)):
            assert (psf_objects[0].getZMin() == psf_objects[i].getZMin())
            assert (psf_objects[0].getZMax() == psf_objects[i].getZMax())

    # Try pupil functions.
    #
    elif (len(mpUtil.getPupilFnAttrs(parameters)) > 0):

        # Get fitting Z range (this is in microns).
        [min_z, max_z] = parameters.getZRange()

        # Create pupil function PSF objects.
        for pupil_fn_attr in mpUtil.getPupilFnAttrs(parameters):
            psf_objects.append(
                pupilFn.PupilFunction(
                    pf_filename=parameters.getAttr(pupil_fn_attr),
                    zmin=min_z * 1.0e+3,
                    zmax=max_z * 1.0e+3))

    # Try splines.
    #
    elif (len(mpUtil.getSplineAttrs(parameters)) > 0):

        # Create Spline PSF objects.
        for spline_attr in mpUtil.getSplineAttrs(parameters):
            psf_objects.append(
                splineToPSF.SplineToPSF3D(
                    spline_file=parameters.getAttr(spline_attr)))

        # All the splines have to have the same Z range.
        for i in range(1, len(psf_objects)):
            assert (psf_objects[0].getZMin() == psf_objects[i].getZMin())
            assert (psf_objects[0].getZMax() == psf_objects[i].getZMax())

    else:
        raise Exception("No PSF objects found.")

    return psf_objects
Пример #2
0
def initPSFObjects(parameters):
    """
    Create and return the PSF objects (spline, pupil function or psf FFT).
    """
    psf_objects = []

    # Try PSF FFT.
    #
    if (len(mpUtil.getPSFFFTAttrs(parameters)) > 0):
        
        # Create PSF FFT PSF objects.
        for psf_fft_attr in mpUtil.getPSFFFTAttrs(parameters):
            psf_objects.append(psfFn.PSFFn(psf_filename = parameters.getAttr(psf_fft_attr)))

        # All the PSF FFT objects have to have the same Z range.
        for i in range(1, len(psf_objects)):
            assert (psf_objects[0].getZMin() == psf_objects[i].getZMin())
            assert (psf_objects[0].getZMax() == psf_objects[i].getZMax())
            
    # Try pupil functions.
    #
    elif (len(mpUtil.getPupilFnAttrs(parameters)) > 0):

        # Get fitting Z range (this is in microns).
        [min_z, max_z] = parameters.getZRange()
        
        # Create pupil function PSF objects.
        for pupil_fn_attr in mpUtil.getPupilFnAttrs(parameters):
            psf_objects.append(pupilFn.PupilFunction(pf_filename = parameters.getAttr(pupil_fn_attr),
                                                     zmin = min_z * 1.0e+3,
                                                     zmax = max_z * 1.0e+3))

    # Try splines.
    #
    elif (len(mpUtil.getSplineAttrs(parameters)) > 0):

        # Create Spline PSF objects.
        for spline_attr in mpUtil.getSplineAttrs(parameters):
            psf_objects.append(splineToPSF.SplineToPSF3D(spline_file = parameters.getAttr(spline_attr)))

        # All the splines have to have the same Z range.
        for i in range(1, len(psf_objects)):
            assert (psf_objects[0].getZMin() == psf_objects[i].getZMin())
            assert (psf_objects[0].getZMax() == psf_objects[i].getZMax())

    else:
        raise Exception("No PSF objects found.")

    return psf_objects
Пример #3
0
def planeWeighting(parameters, background, photons):
    """
    This calculates and return the weights to use for each parameter at each z value.
    """
    pixel_size = parameters.getAttr("pixel_size")
    cr_psf_objects = []

    # Try PSF FFTs.
    #
    if (len(mpUtil.getPSFFFTAttrs(parameters)) > 0):

        # Create PSF FFT CR PSF objects.
        for psf_fft_attr in mpUtil.getPSFFFTAttrs(parameters):
            psf_fft_name = parameters.getAttr(psf_fft_attr)
            cr_psf_objects.append(
                psfFFTCramerRao.CRPSFFn(psf_filename=psf_fft_name,
                                        pixel_size=pixel_size))

    # Try pupil functions.
    #
    if (len(mpUtil.getPupilFnAttrs(parameters)) > 0):

        # Create pupil function CR PSF objects.
        [zmin, zmax] = parameters.getZRange()
        for pfn_attr in mpUtil.getPupilFnAttrs(parameters):
            pfn_name = parameters.getAttr(pfn_attr)
            cr_psf_objects.append(
                pupilFnCramerRao.CRPupilFn(psf_filename=pfn_name,
                                           pixel_size=pixel_size,
                                           zmax=zmax,
                                           zmin=zmin))

    # Try splines.
    #
    if (len(mpUtil.getSplineAttrs(parameters)) > 0):

        # Create Spline CR PSF objects.
        for spline_attr in mpUtil.getSplineAttrs(parameters):
            spline_name = parameters.getAttr(spline_attr)
            cr_psf_objects.append(
                splinerCramerRao.CRSplineToPSF3D(psf_filename=spline_name,
                                                 pixel_size=pixel_size))

    assert (len(cr_psf_objects) > 0), "No CR PSF objects were found."

    print("Calculating Cramer-Rao bounds.")
    variances = planeVariances(cr_psf_objects, background, photons)

    # Clean up Cramer-Rao PSF objects (some use C libraries).
    #
    for cr_po in cr_psf_objects:
        cr_po.cleanup()

    # I believe based on simulation testing that X and Y should not be transposed here.
    #
    print("Correcting for mapping.")
    [variances[2],
     variances[3]] = xyMappingCorrect(parameters.getAttr("mapping"),
                                      variances[2], variances[3])

    weights = {
        "bg": planeWeights(variances[0]),
        "h": planeWeights(variances[1]),
        "x": planeWeights(variances[2]),
        "y": planeWeights(variances[3]),
        "z": planeWeights(variances[4]),
        "background": background,
        "photons": photons
    }

    return [weights, variances]
Пример #4
0
def planeWeighting(parameters, background, photons):
    """
    This calculates and return the weights to use for each parameter at each z value.
    """
    pixel_size = parameters.getAttr("pixel_size")
    cr_psf_objects = []


    # Try PSF FFTs.
    #
    if (len(mpUtil.getPSFFFTAttrs(parameters)) > 0):

        # Create PSF FFT CR PSF objects.
        for psf_fft_attr in mpUtil.getPSFFFTAttrs(parameters):
            psf_fft_name = parameters.getAttr(psf_fft_attr)
            cr_psf_objects.append(psfFFTCramerRao.CRPSFFn(psf_filename = psf_fft_name,
                                                          pixel_size = pixel_size))

    # Try pupil functions.
    #
    if (len(mpUtil.getPupilFnAttrs(parameters)) > 0):

        # Create pupil function CR PSF objects.
        [zmin, zmax] = parameters.getZRange()
        for pfn_attr in mpUtil.getPupilFnAttrs(parameters):
            pfn_name = parameters.getAttr(pfn_attr)
            cr_psf_objects.append(pupilFnCramerRao.CRPupilFn(psf_filename = pfn_name,
                                                             pixel_size = pixel_size,
                                                             zmax = zmax,
                                                             zmin = zmin))
    
    # Try splines.
    #
    if (len(mpUtil.getSplineAttrs(parameters)) > 0):

        # Create Spline CR PSF objects.
        for spline_attr in mpUtil.getSplineAttrs(parameters):
            spline_name = parameters.getAttr(spline_attr)
            cr_psf_objects.append(splinerCramerRao.CRSplineToPSF3D(psf_filename = spline_name,
                                                                   pixel_size = pixel_size))
        

    assert (len(cr_psf_objects) > 0), "No CR PSF objects were found."
    
    print("Calculating Cramer-Rao bounds.")
    variances = planeVariances(cr_psf_objects,
                               background,
                               photons)

    # Clean up Cramer-Rao PSF objects (some use C libraries).
    #
    for cr_po in cr_psf_objects:
        cr_po.cleanup()

    # I believe based on simulation testing that X and Y should not be transposed here.
    #
    print("Correcting for mapping.")
    [variances[2], variances[3]] = xyMappingCorrect(parameters.getAttr("mapping"),
                                                    variances[2],
                                                    variances[3])
    
    weights = {"bg" : planeWeights(variances[0]),
               "h" : planeWeights(variances[1]),
               "x" : planeWeights(variances[2]),
               "y" : planeWeights(variances[3]),
               "z" : planeWeights(variances[4]),
               "background" : background,
               "photons" : photons}

    return [weights, variances]