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
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
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
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