diff --git a/pyfstat/core.py b/pyfstat/core.py index 95dd66b4a680e91eb8520dfad6c82affd4fb16ad..88bac00e2b4777f7462c41cb6fd422e9dd42256d 100755 --- a/pyfstat/core.py +++ b/pyfstat/core.py @@ -5,7 +5,6 @@ import os import logging import copy - import glob import numpy as np import scipy.special @@ -27,15 +26,14 @@ else: helper_functions.set_up_matplotlib_defaults() args, tqdm = helper_functions.set_up_command_line_arguments() -earth_ephem, sun_ephem = helper_functions.set_up_ephemeris_configuration() detector_colors = {'h1': 'C0', 'l1': 'C1'} class Bunch(object): """ Turns dictionary into object with attribute-style access - Parameter - --------- + Parameters + ---------- dict Input dictionary @@ -178,18 +176,7 @@ def predict_fstat(h0, cosi, psi, Alpha, Delta, Freq, sftfilepattern, class BaseSearchClass(object): - """ The base search class providing parent methods to other searches - - Attributes - ---------- - earth_ephem_default, sun_ephem_default : str - Paths to the earth and sun ephemeris files to use if not specified - elsewhere - - """ - - earth_ephem_default = earth_ephem - sun_ephem_default = sun_ephem + """ The base search class providing parent methods to other searches """ def _add_log_file(self): """ Log output to a file, requires class to have outdir and label """ @@ -306,19 +293,37 @@ class BaseSearchClass(object): raise IOError('No sfts found matching {}'.format( self.sftfilepattern)) + def set_ephemeris_files(self, earth_ephem=None, sun_ephem=None): + """ Set the ephemeris files to use for the Earth and Sun -class ComputeFstat(object): - """ Base class providing interface to `lalpulsar.ComputeFstat` """ + Parameters + ---------- + earth_ephem, sun_ephem: str + Paths of the two files containing positions of Earth and Sun, + respectively at evenly spaced times, as passed to CreateFstatInput - earth_ephem_default = earth_ephem - sun_ephem_default = sun_ephem + Note: If not manually set, default values in ~/.pyfstat are used + + """ + + earth_ephem_default, sun_ephem_default = ( + helper_functions.get_ephemeris_files()) + + if earth_ephem is None: + self.earth_ephem = earth_ephem_default + if sun_ephem is None: + self.sun_ephem = sun_ephem_default + + +class ComputeFstat(BaseSearchClass): + """ Base class providing interface to `lalpulsar.ComputeFstat` """ @helper_functions.initializer def __init__(self, tref, sftfilepattern=None, minStartTime=None, maxStartTime=None, binary=False, transient=True, BSGL=False, detectors=None, minCoverFreq=None, maxCoverFreq=None, - earth_ephem=None, sun_ephem=None, injectSources=None, - injectSqrtSX=None, assumeSqrtSX=None, SSBprec=None): + injectSources=None, injectSqrtSX=None, assumeSqrtSX=None, + SSBprec=None): """ Parameters ---------- @@ -343,10 +348,6 @@ class ComputeFstat(object): The min and max cover frequency passed to CreateFstatInput, if either is None the range of frequencies in the SFT less 1Hz is used. - earth_ephem, sun_ephem : str - Paths of the two files containing positions of Earth and Sun, - respectively at evenly spaced times, as passed to CreateFstatInput. - If None defaults will be used. injectSources : dict or str Either a dictionary of the values to inject, or a string pointing to the .cff file to inject @@ -362,11 +363,7 @@ class ComputeFstat(object): """ - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - + self.set_ephemeris_files() self.init_computefstatistic_single_point() def _get_SFTCatalog(self): @@ -827,15 +824,15 @@ class ComputeFstat(object): return ax -class SemiCoherentSearch(BaseSearchClass, ComputeFstat): +class SemiCoherentSearch(ComputeFstat): """ A semi-coherent search """ @helper_functions.initializer def __init__(self, label, outdir, tref, nsegs=None, sftfilepattern=None, binary=False, BSGL=False, minStartTime=None, maxStartTime=None, minCoverFreq=None, maxCoverFreq=None, - detectors=None, earth_ephem=None, sun_ephem=None, - injectSources=None, assumeSqrtSX=None, SSBprec=None): + detectors=None, injectSources=None, assumeSqrtSX=None, + SSBprec=None): """ Parameters ---------- @@ -853,10 +850,7 @@ class SemiCoherentSearch(BaseSearchClass, ComputeFstat): """ self.fs_file_name = "{}/{}_FS.dat".format(self.outdir, self.label) - if self.earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if self.sun_ephem is None: - self.sun_ephem = self.sun_ephem_default + self.set_ephemeris_files() self.transient = True self.init_computefstatistic_single_point() self.init_semicoherent_parameters() @@ -957,7 +951,7 @@ class SemiCoherentSearch(BaseSearchClass, ComputeFstat): return d_detStat -class SemiCoherentGlitchSearch(BaseSearchClass, ComputeFstat): +class SemiCoherentGlitchSearch(ComputeFstat): """ A semi-coherent glitch search This implements a basic `semi-coherent glitch F-stat in which the data @@ -970,8 +964,7 @@ class SemiCoherentGlitchSearch(BaseSearchClass, ComputeFstat): def __init__(self, label, outdir, tref, minStartTime, maxStartTime, nglitch=0, sftfilepattern=None, theta0_idx=0, BSGL=False, minCoverFreq=None, maxCoverFreq=None, assumeSqrtSX=None, - detectors=None, earth_ephem=None, sun_ephem=None, - SSBprec=None, injectSources=None): + detectors=None, SSBprec=None, injectSources=None): """ Parameters ---------- @@ -994,10 +987,7 @@ class SemiCoherentGlitchSearch(BaseSearchClass, ComputeFstat): """ self.fs_file_name = "{}/{}_FS.dat".format(self.outdir, self.label) - if self.earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if self.sun_ephem is None: - self.sun_ephem = self.sun_ephem_default + self.set_ephemeris_files() self.transient = True self.binary = False self.init_computefstatistic_single_point() @@ -1017,7 +1007,7 @@ class SemiCoherentGlitchSearch(BaseSearchClass, ComputeFstat): np.array([delta_phi, delta_F0s, delta_F1s, delta_F2]).T) thetas = self._calculate_thetas(theta, delta_thetas, tboundaries, - theta0_idx=self.theta0_idx) + theta0_idx=self.theta0_idx) twoFSum = 0 for i, theta_i_at_tref in enumerate(thetas): diff --git a/pyfstat/grid_based_searches.py b/pyfstat/grid_based_searches.py index 46cf086d04566d5a9da83515a64ffaee50e5399a..99e16e83ad56ae3c4c40094cc2da3ac2ecbcc55e 100644 --- a/pyfstat/grid_based_searches.py +++ b/pyfstat/grid_based_searches.py @@ -13,7 +13,7 @@ import matplotlib.pyplot as plt import pyfstat.helper_functions as helper_functions from pyfstat.core import (BaseSearchClass, ComputeFstat, SemiCoherentGlitchSearch, SemiCoherentSearch, tqdm, - args, earth_ephem, sun_ephem, read_par) + args, read_par) class GridSearch(BaseSearchClass): @@ -22,9 +22,8 @@ class GridSearch(BaseSearchClass): def __init__(self, label, outdir, sftfilepattern, F0s=[0], F1s=[0], F2s=[0], Alphas=[0], Deltas=[0], tref=None, minStartTime=None, maxStartTime=None, nsegs=1, BSGL=False, minCoverFreq=None, - maxCoverFreq=None, earth_ephem=None, sun_ephem=None, - detectors=None, SSBprec=None, injectSources=None, - input_arrays=False, assumeSqrtSX=None): + maxCoverFreq=None, detectors=None, SSBprec=None, + injectSources=None, input_arrays=False, assumeSqrtSX=None): """ Parameters ---------- @@ -45,11 +44,6 @@ class GridSearch(BaseSearchClass): For all other parameters, see `pyfstat.ComputeFStat` for details """ - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if os.path.isdir(outdir) is False: os.mkdir(outdir) self.set_out_file() @@ -61,7 +55,6 @@ class GridSearch(BaseSearchClass): self.search = ComputeFstat( tref=self.tref, sftfilepattern=self.sftfilepattern, minCoverFreq=self.minCoverFreq, maxCoverFreq=self.maxCoverFreq, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, detectors=self.detectors, transient=False, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, BSGL=self.BSGL, SSBprec=self.SSBprec, @@ -75,7 +68,6 @@ class GridSearch(BaseSearchClass): BSGL=self.BSGL, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, minCoverFreq=self.minCoverFreq, maxCoverFreq=self.maxCoverFreq, detectors=self.detectors, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, injectSources=self.injectSources) def cut_out_tstart_tend(*vals): @@ -313,7 +305,7 @@ class GridGlitchSearch(GridSearch): F1s=[0], F2s=[0], delta_F0s=[0], delta_F1s=[0], tglitchs=None, Alphas=[0], Deltas=[0], tref=None, minStartTime=None, maxStartTime=None, minCoverFreq=None, maxCoverFreq=None, - write_after=1000, earth_ephem=None, sun_ephem=None): + write_after=1000): """ Parameters @@ -333,16 +325,11 @@ class GridGlitchSearch(GridSearch): """ if tglitchs is None: self.tglitchs = [self.maxStartTime] - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default self.search = SemiCoherentGlitchSearch( label=label, outdir=outdir, sftfilepattern=self.sftfilepattern, tref=tref, minStartTime=minStartTime, maxStartTime=maxStartTime, minCoverFreq=minCoverFreq, maxCoverFreq=maxCoverFreq, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, BSGL=self.BSGL) if os.path.isdir(outdir) is False: @@ -372,8 +359,7 @@ class FrequencySlidingWindow(GridSearch): Alpha, Delta, tref, minStartTime=None, maxStartTime=None, window_size=10*86400, window_delta=86400, BSGL=False, minCoverFreq=None, maxCoverFreq=None, - earth_ephem=None, sun_ephem=None, detectors=None, - SSBprec=None, injectSources=None): + detectors=None, SSBprec=None, injectSources=None): """ Parameters ---------- @@ -392,11 +378,6 @@ class FrequencySlidingWindow(GridSearch): For all other parameters, see `pyfstat.ComputeFStat` for details """ - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if os.path.isdir(outdir) is False: os.mkdir(outdir) self.set_out_file() @@ -411,7 +392,6 @@ class FrequencySlidingWindow(GridSearch): self.search = ComputeFstat( tref=self.tref, sftfilepattern=self.sftfilepattern, minCoverFreq=self.minCoverFreq, maxCoverFreq=self.maxCoverFreq, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, detectors=self.detectors, transient=True, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, BSGL=self.BSGL, SSBprec=self.SSBprec, @@ -487,8 +467,7 @@ class DMoff_NO_SPIN(GridSearch): @helper_functions.initializer def __init__(self, par, label, outdir, sftfilepattern, minStartTime=None, maxStartTime=None, minCoverFreq=None, maxCoverFreq=None, - earth_ephem=None, sun_ephem=None, detectors=None, - injectSources=None, assumeSqrtSX=None): + detectors=None, injectSources=None, assumeSqrtSX=None): """ Parameters ---------- @@ -506,11 +485,6 @@ class DMoff_NO_SPIN(GridSearch): For all other parameters, see `pyfstat.ComputeFStat` for details """ - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if os.path.isdir(outdir) is False: os.mkdir(outdir) diff --git a/pyfstat/helper_functions.py b/pyfstat/helper_functions.py index 6d3db14e403b6c36dd8d577cac5b06f061418d7a..1a776368ffce7a594bd1ae3a3e4cbf5b52ff7abc 100644 --- a/pyfstat/helper_functions.py +++ b/pyfstat/helper_functions.py @@ -80,7 +80,7 @@ def set_up_command_line_arguments(): return args, tqdm -def set_up_ephemeris_configuration(): +def get_ephemeris_files(): """ Returns the earth_ephem and sun_ephem """ config_file = os.path.expanduser('~')+'/.pyfstat.conf' if os.path.isfile(config_file): diff --git a/pyfstat/make_sfts.py b/pyfstat/make_sfts.py index ea3028a712909a176bc63796e2189b904bc2375c..702930172dd43d1667fbbf7cfc085a696ca7d1a6 100644 --- a/pyfstat/make_sfts.py +++ b/pyfstat/make_sfts.py @@ -13,8 +13,6 @@ import lalpulsar from pyfstat.core import BaseSearchClass, tqdm, args import pyfstat.helper_functions as helper_functions -earth_ephem, sun_ephem = helper_functions.set_up_ephemeris_configuration() - class KeyboardInterruptError(Exception): pass @@ -49,6 +47,7 @@ class Writer(BaseSearchClass): see `lalapps_Makefakedata_v5 --help` for help with the other paramaters """ + self.set_ephemeris_files() self.tstart = int(tstart) self.duration = int(duration) @@ -372,15 +371,11 @@ class GlitchWriter(Writer): class FrequencyModulatedArtifactWriter(Writer): """ Instance object for generating SFTs containing artifacts """ - earth_ephem_default = earth_ephem - sun_ephem_default = sun_ephem - @helper_functions.initializer def __init__(self, label, outdir=".", tstart=700000000, data_duration=86400, F0=30, F1=0, tref=None, h0=10, Tsft=1800, sqrtSX=1, Band=4, Pmod=lal.DAYSID_SI, Pmod_phi=0, Pmod_amp=1, - Alpha=None, Delta=None, IFO='H1', earth_ephem=None, - sun_ephem=None): + Alpha=None, Delta=None, IFO='H1'): """ Parameters ---------- @@ -399,6 +394,7 @@ class FrequencyModulatedArtifactWriter(Writer): see `lalapps_Makefakedata_v4 --help` for help with the other paramaters """ + self.set_ephemeris_files() self.tstart = int(tstart) self.data_duration = int(data_duration) @@ -414,11 +410,6 @@ class FrequencyModulatedArtifactWriter(Writer): self.cosi = 0 self.Fmax = F0 - if self.earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if self.sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if Alpha is not None and Delta is not None: self.n = np.array([np.cos(Alpha)*np.cos(Delta), np.sin(Alpha)*np.cos(Delta), diff --git a/pyfstat/mcmc_based_searches.py b/pyfstat/mcmc_based_searches.py index 1dc22d70a0d4d21919fbf20122b59c7f5ba1a7a0..dda1de89fa592f2ee908871cc8580fd9deb245a5 100644 --- a/pyfstat/mcmc_based_searches.py +++ b/pyfstat/mcmc_based_searches.py @@ -16,8 +16,8 @@ import corner import dill as pickle import pyfstat.core as core -from pyfstat.core import tqdm, args, earth_ephem, sun_ephem, read_par -from pyfstat.optimal_setup_functions import get_Nstar_estimate, get_optimal_setup +from pyfstat.core import tqdm, args, read_par +import pyfstat.optimal_setup_functions as optimal_setup_functions import pyfstat.helper_functions as helper_functions @@ -33,17 +33,17 @@ class MCMCSearch(core.BaseSearchClass): asini='', period='s', ecc='', tp='', argp='') rescale_dictionary = {} - @helper_functions.initializer def __init__(self, label, outdir, theta_prior, tref, minStartTime, maxStartTime, sftfilepattern=None, nsteps=[100, 100], nwalkers=100, ntemps=1, log10temperature_min=-5, theta_initial=None, scatter_val=1e-10, rhohatmax=1000, binary=False, BSGL=False, minCoverFreq=None, SSBprec=None, - maxCoverFreq=None, detectors=None, earth_ephem=None, - sun_ephem=None, injectSources=None, assumeSqrtSX=None): + maxCoverFreq=None, detectors=None, + injectSources=None, assumeSqrtSX=None): """ Parameters + ---------- label, outdir: str A label and directory to read/write data from/to sftfilepattern: str @@ -83,10 +83,6 @@ class MCMCSearch(core.BaseSearchClass): minCoverFreq, maxCoverFreq: float Minimum and maximum instantaneous frequency which will be covered over the SFT time span as passed to CreateFstatInput - earth_ephem, sun_ephem: str - Paths of the two files containing positions of Earth and Sun, - respectively at evenly spaced times, as passed to CreateFstatInput - If None defaults defined in BaseSearchClass will be used """ @@ -108,11 +104,6 @@ class MCMCSearch(core.BaseSearchClass): else: self.betas = None - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if args.clean and os.path.isfile(self.pickle_path): os.rename(self.pickle_path, self.pickle_path+".old") @@ -137,7 +128,6 @@ class MCMCSearch(core.BaseSearchClass): self.search = core.ComputeFstat( tref=self.tref, sftfilepattern=self.sftfilepattern, minCoverFreq=self.minCoverFreq, maxCoverFreq=self.maxCoverFreq, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, detectors=self.detectors, BSGL=self.BSGL, transient=False, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, binary=self.binary, injectSources=self.injectSources, @@ -1516,7 +1506,7 @@ class MCMCGlitchSearch(MCMCSearch): theta_initial=None, scatter_val=1e-10, rhohatmax=1000, dtglitchmin=1*86400, theta0_idx=0, detectors=None, BSGL=False, minCoverFreq=None, maxCoverFreq=None, - earth_ephem=None, sun_ephem=None, injectSources=None): + injectSources=None): """ Parameters ---------- @@ -1570,10 +1560,6 @@ class MCMCGlitchSearch(MCMCSearch): minCoverFreq, maxCoverFreq: float Minimum and maximum instantaneous frequency which will be covered over the SFT time span as passed to CreateFstatInput - earth_ephem, sun_ephem: str - Paths of the two files containing positions of Earth and Sun, - respectively at evenly spaced times, as passed to CreateFstatInput - If None defaults defined in BaseSearchClass will be used """ @@ -1590,11 +1576,6 @@ class MCMCGlitchSearch(MCMCSearch): self.betas = np.logspace(0, self.log10temperature_min, self.ntemps) else: self.betas = None - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if args.clean and os.path.isfile(self.pickle_path): os.rename(self.pickle_path, self.pickle_path+".old") @@ -1611,8 +1592,7 @@ class MCMCGlitchSearch(MCMCSearch): label=self.label, outdir=self.outdir, sftfilepattern=self.sftfilepattern, tref=self.tref, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, minCoverFreq=self.minCoverFreq, - maxCoverFreq=self.maxCoverFreq, earth_ephem=self.earth_ephem, - sun_ephem=self.sun_ephem, detectors=self.detectors, BSGL=self.BSGL, + maxCoverFreq=self.maxCoverFreq, detectors=self.detectors, BSGL=self.BSGL, nglitch=self.nglitch, theta0_idx=self.theta0_idx, injectSources=self.injectSources) @@ -1778,8 +1758,7 @@ class MCMCSemiCoherentSearch(MCMCSearch): theta_initial=None, scatter_val=1e-10, rhohatmax=1000, detectors=None, BSGL=False, minStartTime=None, maxStartTime=None, minCoverFreq=None, maxCoverFreq=None, - earth_ephem=None, sun_ephem=None, injectSources=None, - assumeSqrtSX=None): + injectSources=None, assumeSqrtSX=None): """ """ @@ -1797,11 +1776,6 @@ class MCMCSemiCoherentSearch(MCMCSearch): self.betas = np.logspace(0, self.log10temperature_min, self.ntemps) else: self.betas = None - if earth_ephem is None: - self.earth_ephem = self.earth_ephem_default - if sun_ephem is None: - self.sun_ephem = self.sun_ephem_default - if args.clean and os.path.isfile(self.pickle_path): os.rename(self.pickle_path, self.pickle_path+".old") @@ -1827,11 +1801,10 @@ class MCMCSemiCoherentSearch(MCMCSearch): logging.info('Setting up search object') self.search = core.SemiCoherentSearch( label=self.label, outdir=self.outdir, tref=self.tref, - nsegs=self.nsegs, sftfilepattern=self.sftfilepattern, binary=self.binary, - BSGL=self.BSGL, minStartTime=self.minStartTime, + nsegs=self.nsegs, sftfilepattern=self.sftfilepattern, + binary=self.binary, BSGL=self.BSGL, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, minCoverFreq=self.minCoverFreq, maxCoverFreq=self.maxCoverFreq, detectors=self.detectors, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, injectSources=self.injectSources, assumeSqrtSX=self.assumeSqrtSX) def logp(self, theta_vals, theta_prior, theta_keys, search): @@ -1888,7 +1861,7 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): return True else: logging.info( - 'Old setup does not match one of NstarMax, Nsegs0 or prior') + "Old setup doesn't match one of NstarMax, Nsegs0 or prior") except KeyError as e: logging.info( 'Error found when comparing with old setup: {}'.format(e)) @@ -1926,13 +1899,13 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): generate_setup = True if generate_setup: - nsegs_vals, Nstar_vals = get_optimal_setup( - NstarMax, Nsegs0, self.tref, self.minStartTime, - self.maxStartTime, self.theta_prior, - self.search.detector_names, self.earth_ephem, - self.sun_ephem) - self.write_setup_input_file(run_setup_input_file, NstarMax, Nsegs0, - nsegs_vals, Nstar_vals, + nsegs_vals, Nstar_vals = ( + optimal_setup_functions.get_optimal_setup( + NstarMax, Nsegs0, self.tref, self.minStartTime, + self.maxStartTime, self.theta_prior, + self.search.detector_names)) + self.write_setup_input_file(run_setup_input_file, NstarMax, + Nsegs0, nsegs_vals, Nstar_vals, self.theta_prior) run_setup = [((self.nsteps[0], 0), nsegs, False) @@ -1954,10 +1927,9 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): if args.no_template_counting: Nstar_vals.append([1, 1, 1]) else: - Nstar = get_Nstar_estimate( + Nstar = optimal_setup_functions.get_Nstar_estimate( rs[1], self.tref, self.minStartTime, self.maxStartTime, - self.theta_prior, self.search.detector_names, - self.earth_ephem, self.sun_ephem) + self.theta_prior, self.search.detector_names) Nstar_vals.append(Nstar) if log_table: @@ -2137,7 +2109,6 @@ class MCMCTransientSearch(MCMCSearch): self.search = core.ComputeFstat( tref=self.tref, sftfilepattern=self.sftfilepattern, minCoverFreq=self.minCoverFreq, maxCoverFreq=self.maxCoverFreq, - earth_ephem=self.earth_ephem, sun_ephem=self.sun_ephem, detectors=self.detectors, transient=True, minStartTime=self.minStartTime, maxStartTime=self.maxStartTime, BSGL=self.BSGL, binary=self.binary, diff --git a/pyfstat/optimal_setup_functions.py b/pyfstat/optimal_setup_functions.py index dc0c5fb65cf76b8d756a31885bdbab28aa7db34f..5b25be408dc0f943ec50488090963d4a1f1491c1 100644 --- a/pyfstat/optimal_setup_functions.py +++ b/pyfstat/optimal_setup_functions.py @@ -15,7 +15,7 @@ import pyfstat.helper_functions as helper_functions def get_optimal_setup( NstarMax, Nsegs0, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem): + detector_names): """ Using an optimisation step, calculate the optimal setup ladder Parameters @@ -29,7 +29,6 @@ def get_optimal_setup( Prior dictionary, each item must either be a fixed scalar value, or a uniform prior. detector_names : list of str - earth_ephem, sun_ephem : str Returns ------- @@ -43,7 +42,7 @@ def get_optimal_setup( Nstar_0 = get_Nstar_estimate( Nsegs0, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem) + detector_names) logging.info( 'Stage {}, nsegs={}, Nstar={}'.format(0, Nsegs0, int(Nstar_0))) @@ -55,7 +54,7 @@ def get_optimal_setup( while nsegs_i > 1: nsegs_i, Nstar_i = _get_nsegs_ip1( nsegs_i, NstarMax, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem) + detector_names) nsegs_vals.append(nsegs_i) Nstar_vals.append(Nstar_i) i += 1 @@ -66,13 +65,13 @@ def get_optimal_setup( def _get_nsegs_ip1(nsegs_i, NstarMax, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem): + detector_names): """ Calculate Nsegs_{i+1} given Nsegs_{i} """ log10NstarMax = np.log10(NstarMax) log10Nstari = np.log10(get_Nstar_estimate( nsegs_i, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem)) + detector_names)) def f(nsegs_ip1): if nsegs_ip1[0] > nsegs_i: @@ -83,8 +82,7 @@ def _get_nsegs_ip1(nsegs_i, NstarMax, tref, minStartTime, maxStartTime, prior, if nsegs_ip1 == 0: nsegs_ip1 = 1 Nstarip1 = get_Nstar_estimate( - nsegs_ip1, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem) + nsegs_ip1, tref, minStartTime, maxStartTime, prior, detector_names) if Nstarip1 is None: return 1e6 else: @@ -99,7 +97,7 @@ def _get_nsegs_ip1(nsegs_i, NstarMax, tref, minStartTime, maxStartTime, prior, if res.success: return nsegs_ip1, get_Nstar_estimate( nsegs_ip1, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem) + detector_names) else: raise ValueError('Optimisation unsuccesful') @@ -160,8 +158,7 @@ def _extract_data_from_prior(prior): def get_Nstar_estimate( - nsegs, tref, minStartTime, maxStartTime, prior, - detector_names, earth_ephem, sun_ephem): + nsegs, tref, minStartTime, maxStartTime, prior, detector_names): """ Returns N* estimated from the super-sky metric Parameters @@ -176,8 +173,6 @@ def get_Nstar_estimate( The prior dictionary detector_names : array Array of detectors to average over - earth_ephem, sun_ephem : str - Paths to the ephemeris files Returns ------- @@ -187,6 +182,7 @@ def get_Nstar_estimate( thickness is unity. """ + earth_ephem, sun_ephem = helper_functions.get_ephemeris_files() in_phys, spindowns, sky, fiducial_freq = _extract_data_from_prior(prior) out_rssky = np.zeros(in_phys.shape)