Beispiel #1
0
def examine_residuals(ff, trim=36):
    """ input: FringeFitter instance after fringes are fit """

    print(
        "\nExamine_residuals, standard deviations & variances of *independent* CP's and CAs:"
    )
    print("   Closure phase mean {:+.4f}  std dev {:.2e}  var {:.2e}".format(
        ff.nrm.redundant_cps.mean(),
        np.sqrt(utils.cp_var(ff.nrm.N, ff.nrm.redundant_cps)),
        utils.cp_var(ff.nrm.N, ff.nrm.redundant_cps)))

    print("   Closure amp   mean {:+.4f}  std dev {:.2e}  var {:.2e}".format(
        ff.nrm.redundant_cas.mean(),
        np.sqrt(utils.cp_var(ff.nrm.N, ff.nrm.redundant_cas)),
        utils.cp_var(ff.nrm.N, ff.nrm.redundant_cas)))

    print("    Fringe amp   mean {:+.4f}  std dev {:.2e}  var {:.2e}".format(
        ff.nrm.fringeamp.mean(), ff.nrm.fringeamp.std(),
        ff.nrm.fringeamp.var()))

    np.set_printoptions(precision=3,
                        formatter={'float': lambda x: '{:+.1e}'.format(x)},
                        linewidth=80)
    print(" Normalized residuals central 6 pixels")
    tlo, thi = (ff.nrm.residual.shape[0] // 2 - 3,
                ff.nrm.residual.shape[0] // 2 + 3)
    print((ff.nrm.residual / ff.datapeak)[tlo:thi, tlo:thi])
    print(" Normalized residuals max and min: {:.2e}, {:.2e}".format(
        ff.nrm.residual.max() / ff.datapeak,
        ff.nrm.residual.min() / ff.datapeak))
    utils.default_printoptions()
def analyze_data(fitsfn=None,
                 fitsimdir=None,
                 oitdir=None,
                 oifdir=None,
                 affine2d=None,
                 psf_offset_find_rotation=(0.0, 0.0),
                 psf_offset_ff=None,
                 rotsearch_d=None,
                 set_pistons=None,
                 oversample=3,
                 firstfew=None,
                 verbose=False):
    """ 
        returns: affine2d (measured or input), 
        psf_offset_find_rotation (input),
        psf_offset_ff (input or found),
        fringe pistons/r (found)
    """

    if verbose: print("analyze_data: input", fitsimdir + fitsfn)
    if verbose: print("analyze_data: oversample", oversample)

    fobj = fits.open(fitsimdir + fitsfn)

    if verbose: print(fobj[0].header['FILTER'])
    niriss = InstrumentData.NIRISS(
        fobj[0].header['FILTER'],
        bpexist=False,
        firstfew=
        firstfew,  # read_data truncation to only read first few slices...
    )

    ff = nrm_core.FringeFitter(
        niriss,
        oitdir=
        oitdir,  # write OI text files here, and diagnostic images if desired
        oifdir=oifdir,  # write OI fits files here
        oversample=oversample,
        interactive=False,
        save_txt_only=False)

    ff.fit_fringes(fitsimdir + fitsfn)
    examine_residuals(ff)

    np.set_printoptions(formatter={'float': lambda x: '{:+.2e}'.format(x)},
                        linewidth=80)
    if verbose: print("analyze_data: fringepistons/rad", ff.nrm.fringepistons)
    utils.default_printoptions()
    return affine2d, psf_offset_find_rotation, ff.nrm.psf_offset, ff.nrm.fringepistons
Beispiel #3
0
def analyze_data(fitsfn=None, fitsimdir=None, affine2d=None,
                         psf_offset_find_rotation = (0.0,0.0),
                         psf_offset_ff = None, 
                         rotsearch_d=None,
                         set_pistons=None,
                         oversample=3,
                         mnem='',
                         firstfew=None,
                         verbose=False):
    """ 
        returns: affine2d (measured or input), 
        psf_offset_find_rotation (input),
        psf_offset_ff (input or found),
        fringe pistons/r (found)
    """

    if verbose: print("analyze_data: input", fitsimdir+fitsfn)
    if verbose: print("analyze_data: oversample", oversample)

    fobj = fits.open(fitsimdir+fitsfn)

    if verbose: print(fobj[0].header['FILTER'])
    niriss = InstrumentData.NIRISS(fobj[0].header['FILTER'], 
                                   usebp=False,
                                   firstfew=firstfew,# read_data truncation to only read first few slices...
                                   )

    
    ff = nrm_core.FringeFitter(niriss, 
                                 datadir=fitsimdir, 
                                 savedir=fitsimdir,
                                 oifdir='/Users/anand/data/oifdir/',
                                 oversample=oversample,
                                 oifprefix="ov{:d}_".format(oversample)+mnem,
                                 interactive=False,
                                 save_txt_only=False)

    ff.fit_fringes(fitsimdir+fitsfn)
    examine_residuals(ff)

    np.set_printoptions(formatter={'float': lambda x: '{:+.2e}'.format(x)}, linewidth=80)
    if verbose: print("analyze_data: fringepistons/rad", ff.nrm.fringepistons)
    utils.default_printoptions()
    return affine2d, psf_offset_find_rotation, ff.nrm.psf_offset, ff.nrm.fringepistons
Beispiel #4
0
def analyze_data(fitsfn=None,
                 fitsimdir=None,
                 affine2d=None,
                 psf_offset_find_rotation=(0.0, 0.0),
                 psf_offset_ff=None,
                 rotsearch_d=None,
                 set_pistons=None,
                 oversample=3):
    """ 
        returns: affine2d (measured or input), 
        psf_offset_find_rotation (input),
        psf_offset_ff (input or found),
        fringe pistons/r (found)
    """

    print("analyze_data: input file", fitsfn)
    print("analyze_data: oversample", oversample)

    data = fits.getdata(fitsfn)
    fobj = fits.open(fitsfn)

    print(fobj[0].header['FILTER'])
    niriss = InstrumentData.NIRISS(fobj[0].header['FILTER'], bpexist=False)
    ff_t = nrm_core.FringeFitter(niriss,
                                 datadir=fitsimdir,
                                 savedir=fitsimdir,
                                 oversample=oversample,
                                 oifprefix="ov{:d}_".format(oversample),
                                 interactive=False)
    ff_t.fit_fringes(fitsfn)
    print(fitsfn)
    sys.exit()
    examine_residuals(ff_t)

    np.set_printoptions(formatter={'float': lambda x: '{:+.2e}'.format(x)},
                        linewidth=80)
    print("analyze_data: fringepistons/rad", ff_t.nrm.fringepistons)
    utils.default_printoptions()
    return affine2d, psf_offset_find_rotation, ff_t.nrm.psf_offset, ff_t.nrm.fringepistons
Beispiel #5
0
def raw_observables( fitsfn=None, fitsimdir=None, oitdir=None, oifdir=None, affine2d=None,
                     psf_offset_find_rotation=(0.0, 0.0), psf_offset_ff=None, 
                     rotsearch_d=None, set_pistons=None, oversample=3, mnem="", firstfew=None,
                     usebp=False, verbose=False,):
    """
    Reduce calibrated image data to raw fringe observables

    returns: affine2d (measured or input),
    psf_offset_find_rotation (input),
    psf_offset_ff (input or found),
    fringe pistons/r (found)
    """

    if verbose: print("raw_observables: input", os.path.join(fitsimdir, fitsfn))
    if verbose: print("raw_observables: oversample", oversample)

    fobj = fits.open(os.path.join(fitsimdir, fitsfn))

    if verbose: print(fobj[0].header["FILTER"])

    print("InstrumentData file:",  InstrumentData.__file__)
    niriss = InstrumentData.NIRISS( fobj[0].header["FILTER"], usebp=usebp, # bpexist=False,
                                    firstfew=firstfew,  # read_data truncation to only read first few slices...
                                    noise=1.0e-6,
                                    )

    ff = nrm_core.FringeFitter( niriss, oitdir=oitdir,  # write OI text files here, and diagnostic images if desired
                                        oifdir=oifdir,  # write OI fits files here
                                        weighted=True, oversample=oversample, 
                                        interactive=False, save_txt_only=False,)

    ff.fit_fringes(os.path.join(fitsimdir, fitsfn))
    examine_observables(ff)

    np.set_printoptions( formatter={"float": lambda x: "{:+.2e}".format(x)}, linewidth=80)
    if verbose: print("raw_observables: fringepistons/rad", *ff.nrm.fringepistons)
    utils.default_printoptions()
    fobj.close()
    return affine2d, psf_offset_find_rotation, ff.nrm.psf_offset, ff.nrm.fringepistons