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