Пример #1
0
def p9figs(events=None, directory='./', idl=False, titles=True,
            isinteractive=isinteractive):

    if events == None:
        events = p7Restore(directory, idl)

    nummodels = np.array([len(event.params.model) for event in events],
                         dtype=int)


    printout = po.init(events[0].params.printout, events)
    for j, event in enumerate(events):
        print("\n" + event.eventname, file=printout)
        nummin = nummodels.min()
        for i in range(nummin):
            print("\nCurrent model = " + str(event.params.model[i]),
                    file=printout)
            p9.figs (event, i, j*nummin+i, titles=titles)
    po.close(printout)

    if isinteractive == False:
        plt.close('all')
    else:
        plt.show()

    return
Пример #2
0
def p9figs(event=None,
           filedir='.',
           topdir=None,
           idl=False,
           isinteractive=True):
    import p9figs as p9
    #reload(p9)
    #global numevents, nummodels, isinteractive
    if event == None:
        event = p7Restore(filedir, topdir, idl)
    cwd = os.getcwd().split("/")
    if cwd[-1] == event[0].modeldir:
        os.chdir('..')
    printout = printoutput.init(event[0].params.printout, event)
    numevents = len(event)
    nummodels = np.zeros(numevents, dtype=int)
    for j in range(numevents):
        nummodels[j] = len(event[j].params.model)
    for j in range(numevents):
        print("\n" + event[j].eventname, file=printout)
        for i in range(nummodels.min()):
            print("\nCurrent model = " + str(event[j].params.model[i]),
                  file=printout)
            p9.figs(event[j], i, j * nummodels.min() + i)
    printoutput.close(printout)
    if isinteractive == False:
        plt.close('all')
    else:
        plt.show()
    return
Пример #3
0
def p7anal(events=None, directory='./', idl=False, islak=False,
            isinteractive=isinteractive):

    if events == None:
        events = p6Restore(directory, idl)

    nummodels = np.array([len(event.params.model) for event in events],
                             dtype=int)

    printout = po.init(events[0].params.printout, events)
    for j, event in enumerate(events):
        print("\n" + event.eventname, file=printout)
        minnum = nummodels.min()
        for i in range(minnum):
            print("\nCurrent model = " + str(event.params.model[i]),
                    file=printout)
            p7.stdanal(event, event.fit[i], j*minnum+i,
                    printout, islak)
            p7Save(event, directory)
    po.close(printout)

    if isinteractive == False:
        plt.close('all')
    else:
        plt.show()
    return
Пример #4
0
def p8tables(events=None, directory='./', idl=False, eclphase=0.5):

    if events == None:
        events = p7Restore(directory, idl)

    nummodels = np.array([len(event.params.model) for event in events],
                             dtype=int)

    printout = po.init(events[0].params.printout, events)
    for event in events:
        print("\n" + event.eventname, file=printout)
        event.meanphase = eclphase
        for i in range(nummodels.min()):
            print("\nCurrent model = " + str(event.params.model[i]),
                  file=printout)
            p8.tables(event, i, printout)
    po.close(printout)

    return
Пример #5
0
def p8tables(event=None, filedir='.', topdir=None, idl=False, eclphase=0.5):
    import p8tables as p8
    #reload(p8)
    #global numevents, nummodels
    if event == None:
        event = p7Restore(filedir, topdir, idl)
    cwd = os.getcwd().split("/")
    if cwd[-1] == event[0].modeldir:
        os.chdir('..')
    printout = printoutput.init(event[0].params.printout, event)
    for j in range(numevents):
        print("\n" + event[j].eventname, file=printout)
        event[j].meanphase = eclphase
        for i in range(nummodels.min()):
            print("\nCurrent model = " + str(event[j].params.model[i]),
                  file=printout)
            p8.tables(event[j], i, printout)
    printoutput.close(printout)
    return
Пример #6
0
def p6model(event=None,
            newdir=True,
            filedir='..',
            topdir=None,
            clip=None,
            idl=False,
            isinteractive=True):
    """
    
    """
    import p6model as p6
    reload(p6)
    #global numevents, nummodels, isinteractive
    if event == None:
        if idl == False:
            event = poetRestore(filedir, topdir, clip)
        else:
            event = p5idlRestore(filedir)
    if len(event) == 0:
        print("Event object is empty.")
        return

    if newdir == True:
        #CREATE NEW DIRECTORY FOR MODEL RUN
        modeldir = datetime.datetime.strftime(datetime.datetime.today(),
                                              "%Y-%m-%d_%H:%M")
        os.mkdir(modeldir)
    elif type(newdir) == str:
        #CREATE NEW DIRECTORY FOR MODEL RUN WITH CUSTOM NAME
        modeldir = datetime.datetime.strftime(datetime.datetime.today(),
                                              "%Y-%m-%d_%H:%M") + "-" + newdir
        os.mkdir(modeldir)
    else:
        try:
            modeldir = event[0].modeldir
        except:
            print("Model directory has not been specified.")
            return

    #RELOAD MODEL PARAMETERS
    numevents = len(event)
    nummodels = np.zeros(numevents, dtype=int)
    for j in range(numevents):
        exec('import ' + event[j].eventname + '_params as op' + str(j))
        exec("reload(op" + str(j) + ")")
        event[j].params = readeventhdf.initParams()
        exec("op" + str(j) + ".modelparams(event[" + str(j) + "].params)")
        #exec("event[" + str(j) + "].params = op" + str(j) + ".params")
        event[j].fit = []
        event[j].modeldir = modeldir
        if hasattr(
                event[j].params,
                'noisewavelet') and event[j].params.noisewavelet[0] == 'all':
            event[j].params.noisewavelet = pywt.wavelist(kind='discrete')
            nummodels[j] = len(pywt.wavelist(kind='discrete'))
            event[j].params.model = [
                event[j].params.model[0] for i in range(nummodels[j])
            ]
        else:
            nummodels[j] = len(event[j].params.model)
        if j > 0 and nummodels[j] != nummodels[j - 1]:
            print("WARNING: Number of models in each event does not match.")

    #INITIALIZE OUTPUT TYPE: stdout, A FILE OBJECT OR A FILE
    printout = printoutput.init(event[0].params.printout, event)

    #Execute rundmc
    for i in range(nummodels.min()):
        p6.rundmc(event, i, printout, isinteractive=isinteractive)
        if hasattr(event[0].params,
                   'savedata') and event[0].params.savedata == False:
            pass
        else:
            for j in range(numevents):
                p6Save(event[j])

    #PRINT PARAMETERS USED FOR COMPARISON
    print("\nBest-fit eclipse depths or transit radius ratios with errors:",
          file=printout)
    for j in range(numevents):
        event[j].minbic = np.inf  #Minimum BIC value of all fits for one event.
        print(event[j].eventname, file=printout)
        for i in range(len(event[j].fit)):
            if hasattr(event[j].fit[i].i, 'depth'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.depth],
                      event[j].fit[i].medianp[event[j].fit[i].i.depth, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'depth2'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.depth2],
                      event[j].fit[i].medianp[event[j].fit[i].i.depth2, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'depth3'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.depth3],
                      event[j].fit[i].medianp[event[j].fit[i].i.depth3, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'trqrprs'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.trqrprs],
                      event[j].fit[i].medianp[event[j].fit[i].i.trqrprs, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'trq2rprs'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.trq2rprs],
                      event[j].fit[i].medianp[event[j].fit[i].i.trq2rprs, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'trrprs'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.trrprs],
                      event[j].fit[i].medianp[event[j].fit[i].i.trrprs, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'trrprs2'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.trrprs2],
                      event[j].fit[i].medianp[event[j].fit[i].i.trrprs2, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'rprs'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.rprs],
                      event[j].fit[i].medianp[event[j].fit[i].i.rprs, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            if hasattr(event[j].fit[i].i, 'rprs2'):
                print(event[j].fit[i].bestp[event[j].fit[i].i.rprs2],
                      event[j].fit[i].medianp[event[j].fit[i].i.rprs2, 1],
                      event[j].fit[i].saveext,
                      file=printout)
            event[j].minbic = np.min((event[j].minbic, event[j].fit[i].bic))

    print(
        "\n     S/N      SDNR     \xce\x94BIC       MODEL   NUMIT  BIN_SZ(y,x)   MinNumPts     Wavelet",
        file=printout)
    #Delta = '\xce\x94' in utf-8
    for j in range(numevents):
        print(event[j].eventname, file=printout)
        minbic = event[j].minbic
        for i in range(len(event[j].fit)):
            try:
                sdnr = event[j].fit[i].sdnr
                bic = event[j].fit[i].bic - minbic
                model = event[j].fit[i].saveext
                numit = event[j].params.numit[1]
                if len(event[j].params.ystep) == len(event[j].params.model):
                    ystep, xstep = event[j].params.ystep[i], event[
                        j].params.xstep[i]
                else:
                    ystep, xstep = event[j].params.ystep[0], event[
                        j].params.xstep[0]
                if len(event[j].params.minnumpts) == len(
                        event[j].params.model):
                    minnumpts = event[j].params.minnumpts[i]
                else:
                    minnumpts = event[j].params.minnumpts[0]
                if event[j].params.model[i].__contains__('rednoise'):
                    if len(event[j].params.noisewavelet) == len(
                            event[j].params.model):
                        wavelet = event[j].params.noisewavelet[i]
                    else:
                        wavelet = event[j].params.noisewavelet[0]
                else:
                    wavelet = 'None'

                snrkeys = 'depth', 'depth2', 'depth3', 'trrprs', 'trrprs2', 'trqrprs', 'trq2rprs', 'rprs', 'rprs2', 'fpfs', 'btrprs', 'berprs'
                for snrkey in snrkeys:
                    if hasattr(event[j].fit[i].i, snrkey):
                        snr   = event[j].fit[i].bestp  [getattr(event[j].fit[i].i, snrkey)] / \
                                event[j].fit[i].medianp[getattr(event[j].fit[i].i, snrkey), 1]
                        print(
                            '%8.4f %9.7f %8.1f %11s %7.1e %6.3f,%5.3f %4.0f %12s'
                            % (snr, sdnr, bic, model, numit, ystep, xstep,
                               minnumpts, wavelet),
                            file=printout)

            except:
                print("Error calculating values. %13s" %
                      event[j].fit[i].saveext,
                      file=printout)
    printoutput.close(printout)
    if isinteractive == False:
        plt.close('all')
    else:
        plt.show()
    return
Пример #7
0
def p6model(events=None, directory='./', modeldir=None, clip=None,
            idl=False, mode='full', numit=None, nodate=True, rundir=None,
            justplot=False, isinteractive=isinteractive, control=None,
            retmoddir=False, params_override=None):

    # adjust modeldir
    if modeldir is None or not nodate:
        date = datetime.datetime.today().strftime("%Y-%m-%d_%H_%M")

        # if modeldir is not None:
        #     modeldir = date + modeldir + '/'

    # If a control is given, recursively
    # call on all paths specified in control.
    if control is not None:

        if isinstance(control, dict):
            p6pcf = rd.Pcf(control)
        else:
            p6pcf = rd.read_pcf(control, 'p6', simple=True,
                                d1lists=["centering", "photometry"],
                                d2lists=["path"])

        paths = getp6filedirs(p6pcf, directory)

        if modeldir is None:
            modeldir = p6pcf.modeldir

        if modeldir is None:
            modeldir = date
        elif not nodate:
            modeldir = date + modeldir + '/'

        if p6pcf.threads < 1:
            print("ERROR: less than 1 threads specified in p6.pcf."
                  "\nExiting...")
            return

        procs = []
        for path in paths:
            while len(mp.active_children()) >= p6pcf.threads:
                time.sleep(10)
            p = mp.Process(target=p6model,
                           kwargs={"events":events, "directory":path,
                                   "modeldir":modeldir, "clip":clip,
                                   "idl":idl, "mode":mode, "rundir":rundir,
                                   "numit":numit, "nodate":True,
                                   "isinteractive":isinteractive,
                                   "control":None,
                                   "params_override":params_override})
            p.start()
            procs.append(p)

        for proc in procs:
            proc.join()

        print("Making p6 plots.")
        if retmoddir:
            return modeldir, plots.p6plots(modeldir, paths, directory)
        return plots.p6plots(modeldir, paths, directory)

    if modeldir is None:
        modeldir = date

    # Create new directory for model run with custom name:
    if os.path.isdir(directory + '/' + modeldir):
        print("path :", directory + '/' + modeldir,
              "already exists.\nSkipping this p6 run...")
        return "skip"

    try:
        os.mkdir(directory + '/' + modeldir)
    except:
        print("WARNING: Specified model directory already exists.")

    if events == None:
        if idl:
            events = p5idlRestore(directory)
        else:
            events = poetRestore(directory, clip, rundir, modeldir,
                                 params_override=params_override)

    numevents = len(events)

    if numevents == 0:
        print("Event object is empty.")
        return

    # Reload model parameters:
    nummodels = np.zeros(numevents, dtype=int)
    # attributes to be converted to 1d-lists
    d1lists = ['modelfile', 'numit', 'preclip', 'postclip',
               'priorvars', 'xstep', 'ystep', 'minnumpts',
               'sssteps', 'nx', 'ny', 'sx', 'sy']
    # attributes to be converted to 2d-lists
    d2lists = ['model', 'ortholist', 'interclip', 'priorvals',
               'ipclip']
    # attributes to be converted to 2d-lists
    nparrs = ['numit', 'priorvals']
    for i, event in enumerate(events):

        event.params = rd.read_pcf(event.paramsfile, 'params',
                                       simple=True, d1lists=d1lists,
                                       d2lists=d2lists, nparrs=nparrs)
        if params_override:
            for key in params_override:
                setattr(event.params, key, params_override[key])

        event.fit = []
        event.modeldir = directory + '/' + modeldir
        nummodels[i] = len(event.params.model)
        if i > 0 and nummodels[i] != nummodels[i-1]:
            print("WARNING: Number of models in each event does not"
                  + "match.")

    # Initialize output type: stdout, a file object or a file
    printout = po.init(events[0].params.printout, events)

    # Execute p6 setup
    for i in range(nummodels.min()):
        p6.setup(events, i, printout, mode=mode, numit=numit)

    printout = po.init(events[0].params.printout, events)
    dataout = open(directory + '/plotpoint.txt', 'a')
    for i in range(nummodels.min()):
        p6.finalrun(events, i, printout, numit=numit)
        for event in events:
            p6Save(event, directory + '/' + modeldir)

    # Print parameters used for comparison:
    print("\nBest-fit eclipse depths or transit radius ratios with"
          + " errors:", file=printout)
    for event in events:
        event.minbic = np.inf  # Min BIC value of all fits for one
                               # event
        print(event.eventname, file=printout)
        print(event.eventname, file=dataout)
        for fit in event.fit:

            if hasattr(fit.i,'depth'):
                print(fit.bestp[fit.i.depth],
                      fit.std  [fit.i.depth],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.depth],
                      fit.std  [fit.i.depth],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'depth2'):
                print(fit.bestp[fit.i.depth2],
                      fit.std  [fit.i.depth2],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.depth2],
                      fit.std  [fit.i.depth2],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'depth3'):
                print(fit.bestp[fit.i.depth3], 
                      fit.std  [fit.i.depth3],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.depth3], 
                      fit.std  [fit.i.depth3],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'trrprs'):
                print(fit.bestp[fit.i.trrprs], 
                      fit.std  [fit.i.trrprs],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.trrprs], 
                      fit.std  [fit.i.trrprs],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'trrprs2'):
                print(fit.bestp[fit.i.trrprs2], 
                      fit.std  [fit.i.trrprs2],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.trrprs2], 
                      fit.std  [fit.i.trrprs2],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'rprs'):
                print(fit.bestp[fit.i.rprs], 
                      fit.std  [fit.i.rprs],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.rprs], 
                      fit.std  [fit.i.rprs],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'rprs2'):
                print(fit.bestp[fit.i.rprs2], 
                      fit.std  [fit.i.rprs2],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.rprs2], 
                      fit.std  [fit.i.rprs2],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'trdepth'):
                print(fit.bestp[fit.i.trdepth], 
                      fit.std  [fit.i.trdepth],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.trdepth], 
                      fit.std  [fit.i.trdepth],
                      fit.saveext, fit.bsigchi, file=dataout)

            if hasattr(fit.i,'gdepth'):
                print(fit.bestp[fit.i.gdepth], 
                      fit.std  [fit.i.gdepth],
                      fit.saveext, fit.bsigchi, file=printout)
                print(fit.bestp[fit.i.gdepth], 
                      fit.std  [fit.i.gdepth],
                      fit.saveext, fit.bsigchi, file=dataout)                

            event.minbic = np.min((event.minbic,fit.bic))

    # Print SDNR for joint fit if more than one event:
    if len(events) > 1:

        # Joint-fit normalized residuals:
        jnres = np.array([])
        for event in events:

            # Force the normalized residuals to 1D shape:
            nres = event.fit[0].normresiduals.flatten()
            # Concatenate values:
            jnres = np.concatenate((jnres,nres))

        # Joint SDNR:
        jsdnr = np.std(jnres)
        print("\nJoint-fit SDNR: %9.7f"%jsdnr, file=printout)

    print("\n S/N SDNR \xce\x94BIC MODEL NUMIT "
          + "BIN_SZ(y,x) MinNumPts", file=printout)
    # Delta = '\xce\x94' in utf-8
    for event in events:

        print(event.eventname, file=printout)
        print(event.eventname, file=dataout)
        minbic = event.minbic
        for i, fit in enumerate(event.fit):
            try:

                sdnr  = fit.sdnr
                bic   = fit.bic - minbic
                model = fit.saveext
                numit = event.params.numit[1]

                if len(event.params.ystep) == \
                   len(event.params.model):
                    ystep, xstep = event.params.ystep[i],\
                                   event.params.xstep[i]

                else:
                    ystep, xstep = event.params.ystep[0],\
                                   event.params.xstep[0] 

                if len(event.params.minnumpts) == \
                   len(event.params.model):
                    minnumpts = event.params.minnumpts[i] 

                else:
                    minnumpts = event.params.minnumpts[0]

                # extract string code
                ec ='%8.4f %9.7f %8.1f %11s %7.1e %6.3f,%5.3f %4.0f'

                print(sdnr, file=dataout)
                if hasattr(fit.i,'depth'):
                    snr = fit.bestp[fit.i.depth] /\
                          fit.std  [fit.i.depth]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'depth2'):
                    snr = fit.bestp[fit.i.depth2] /\
                          fit.std  [fit.i.depth2]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'depth3'):
                    snr = fit.bestp[fit.i.depth3] /\
                          fit.std  [fit.i.depth3]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'trrprs'):
                    snr = fit.bestp[fit.i.trrprs] /\
                          fit.std  [fit.i.trrprs]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'trrprs2'):
                    snr = fit.bestp[fit.i.trrprs2] /\
                          fit.std  [fit.i.trrprs2]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'rprs'):
                    snr = fit.bestp[fit.i.rprs] /\
                          fit.std  [fit.i.rprs]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'rprs2'):
                    snr = fit.bestp[fit.i.rprs2] /\
                          fit.std  [fit.i.rprs2]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'trdepth'):
                    snr = fit.bestp[fit.i.trdepth] /\
                          fit.std  [fit.i.trdepth]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)

                if hasattr(fit.i,'gdepth'):
                    snr = fit.bestp[fit.i.gdepth] /\
                          fit.std  [fit.i.gdepth]
                    print(ec%(snr, sdnr, bic, model, numit, ystep,
                              xstep, minnumpts), file=printout)          

            except:
                print("Error calculating values. %13s" %
                        event.fit[i].saveext, file=printout)

    po.close(printout)

    if isinteractive == False:
       plt.close('all')

    else:
       plt.show()

    return event.modeldir