Commit e7f3abe5 authored by Gregory Ashton's avatar Gregory Ashton
Browse files

Several combined improvements/fixes in the main pyftsat code

1) Fixes missing passing of binary argument ot the search tool
(previouslly, the binary parameters where not searched over!)
2) Adds min/maxfraction to cumulative plot and fixed start times
3) Adds binary parameters to cumulative plot call
parent be55d032
...@@ -411,11 +411,12 @@ class ComputeFstat(object): ...@@ -411,11 +411,12 @@ class ComputeFstat(object):
def calculate_twoF_cumulative(self, F0, F1, F2, Alpha, Delta, asini=None, def calculate_twoF_cumulative(self, F0, F1, F2, Alpha, Delta, asini=None,
period=None, ecc=None, tp=None, argp=None, period=None, ecc=None, tp=None, argp=None,
tstart=None, tend=None, Npoints=1000, tstart=None, tend=None, npoints=1000,
minfraction=0.01): minfraction=0.01, maxfraction=1):
""" Calculate the cumulative twoF along the obseration span """ """ Calculate the cumulative twoF along the obseration span """
duration = tend - tstart duration = tend - tstart
taus = np.linspace(minfraction*duration, duration, Npoints) tstart = tstart + minfraction*duration
taus = np.linspace(minfraction*duration, maxfraction*duration, npoints)
twoFs = [] twoFs = []
if self.transient is False: if self.transient is False:
self.transient = True self.transient = True
...@@ -430,6 +431,7 @@ class ComputeFstat(object): ...@@ -430,6 +431,7 @@ class ComputeFstat(object):
def plot_twoF_cumulative(self, label, outdir, ax=None, c='k', savefig=True, def plot_twoF_cumulative(self, label, outdir, ax=None, c='k', savefig=True,
title=None, **kwargs): title=None, **kwargs):
taus, twoFs = self.calculate_twoF_cumulative(**kwargs) taus, twoFs = self.calculate_twoF_cumulative(**kwargs)
if ax is None: if ax is None:
fig, ax = plt.subplots() fig, ax = plt.subplots()
...@@ -654,7 +656,8 @@ class MCMCSearch(BaseSearchClass): ...@@ -654,7 +656,8 @@ class MCMCSearch(BaseSearchClass):
earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem,
detector=self.detector, BSGL=self.BSGL, transient=False, detector=self.detector, BSGL=self.BSGL, transient=False,
minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime,
BSGL_PREFACTOR=self.BSGL_PREFACTOR, BSGL_FLOOR=self.BSGL_FLOOR) BSGL_PREFACTOR=self.BSGL_PREFACTOR, BSGL_FLOOR=self.BSGL_FLOOR,
binary=self.binary)
def logp(self, theta_vals, theta_prior, theta_keys, search): def logp(self, theta_vals, theta_prior, theta_keys, search):
H = [self.generic_lnprior(**theta_prior[key])(p) for p, key in H = [self.generic_lnprior(**theta_prior[key])(p) for p, key in
...@@ -957,15 +960,25 @@ class MCMCSearch(BaseSearchClass): ...@@ -957,15 +960,25 @@ class MCMCSearch(BaseSearchClass):
fig.savefig('{}/{}_prior_posterior.png'.format( fig.savefig('{}/{}_prior_posterior.png'.format(
self.outdir, self.label)) self.outdir, self.label))
def plot_cumulative_max(self): def plot_cumulative_max(self, **kwargs):
d, maxtwoF = self.get_max_twoF() d, maxtwoF = self.get_max_twoF()
for key, val in self.theta_prior.iteritems(): for key, val in self.theta_prior.iteritems():
if key not in d: if key not in d:
d[key] = val d[key] = val
self.search.plot_twoF_cumulative(
self.label, self.outdir, F0=d['F0'], F1=d['F1'], F2=d['F2'], if hasattr(self, 'search') is False:
Alpha=d['Alpha'], Delta=d['Delta'], tstart=self.tstart, self.inititate_search_object()
tend=self.tend) if self.binary is False:
self.search.plot_twoF_cumulative(
self.label, self.outdir, F0=d['F0'], F1=d['F1'], F2=d['F2'],
Alpha=d['Alpha'], Delta=d['Delta'], tstart=self.tstart,
tend=self.tend, **kwargs)
else:
self.search.plot_twoF_cumulative(
self.label, self.outdir, F0=d['F0'], F1=d['F1'], F2=d['F2'],
Alpha=d['Alpha'], Delta=d['Delta'], asini=d['asini'],
period=d['period'], ecc=d['ecc'], argp=d['argp'], tp=d['argp'],
tstart=self.tstart, tend=self.tend, **kwargs)
def generic_lnprior(self, **kwargs): def generic_lnprior(self, **kwargs):
""" Return a lambda function of the pdf """ Return a lambda function of the pdf
...@@ -1408,7 +1421,7 @@ class MCMCSearch(BaseSearchClass): ...@@ -1408,7 +1421,7 @@ class MCMCSearch(BaseSearchClass):
deltaTs = np.diff(tbounderies) deltaTs = np.diff(tbounderies)
ntrials = [time_trials + delta_F0 * dT for dT in deltaTs] ntrials = [time_trials + delta_F0 * dT for dT in deltaTs]
p_val = self.p_val_twoFhat(max_twoF, ntrials) p_val = self.p_val_twoFhat(max_twoF, ntrials)
print 'p-value = {}'.format(p_val) print('p-value = {}'.format(p_val))
return p_val return p_val
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment