diff --git a/pyfstat.py b/pyfstat.py index 234f22a954db0098e9b35532fbfc3fc68259fc93..c72cd6dae3872b163c11733eab1627a045193f7a 100755 --- a/pyfstat.py +++ b/pyfstat.py @@ -26,7 +26,7 @@ import lalpulsar try: from tqdm import tqdm except ImportError: - def tqdm(x): + def tqdm(x, *args, **kwargs): return x plt.rcParams['text.usetex'] = True @@ -61,6 +61,10 @@ parser.add_argument('unittest_args', nargs='*') args, unknown = parser.parse_known_args() sys.argv[1:] = args.unittest_args +if args.quite: + def tqdm(x, *args, **kwargs): + return x + logger = logging.getLogger() logger.setLevel(logging.DEBUG) stream_handler = logging.StreamHandler() @@ -422,12 +426,13 @@ class ComputeFstat(object): detector_names = list(set([d.header.name for d in SFTCatalog.data])) self.detector_names = detector_names SFT_timestamps = [d.header.epoch for d in SFTCatalog.data] - try: - from bashplotlib.histogram import plot_hist - print('Data timestamps histogram:') - plot_hist(SFT_timestamps, height=5, bincount=50) - except IOError: - pass + if args.quite is False: + try: + from bashplotlib.histogram import plot_hist + print('Data timestamps histogram:') + plot_hist(SFT_timestamps, height=5, bincount=50) + except IOError: + pass if len(detector_names) == 0: raise ValueError('No data loaded.') logging.info('Loaded {} data files from detectors {}'.format( @@ -2210,6 +2215,12 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): with open(run_setup_input_file, 'w+') as f: pickle.dump(d, f) + def check_old_run_setup(self, old_setup, **kwargs): + try: + return all([val == old_setup[key] for key, val in kwargs.iteritems()]) + except KeyError: + return False + def init_run_setup(self, run_setup, log_table=True, gen_tex_table=True, R0=10, Vmin=100): fiducial_freq, DeltaOmega, DeltaFs = self.init_V_estimate_parameters() @@ -2223,7 +2234,9 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): logging.info('Checking old setup input file {}'.format( run_setup_input_file)) old_setup = self.read_setup_input_file(run_setup_input_file) - if old_setup['R0'] == R0 and old_setup['Vmin'] == Vmin: + if self.check_old_run_setup(old_setup, R0=R0, Vmin=Vmin, + DeltaOmega=DeltaOmega, + DeltaFs=DeltaFs): logging.info('Using old setup with R0={}, Vmin={}'.format( R0, Vmin)) nsegs_vals = old_setup['nsegs_vals'] @@ -2260,7 +2273,9 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): rs[0] = (rs[0], 0) run_setup[i] = rs - if len(V_vals) > 0: + if args.no_template_counting: + V_vals.append([1, 1, 1]) + else: V, Vsky, Vpe = get_V_estimate( rs[1], self.tref, self.minStartTime, self.maxStartTime, DeltaOmega, DeltaFs, fiducial_freq, @@ -2341,7 +2356,8 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): return run_setup def run(self, run_setup=None, proposal_scale_factor=2, R0=10, - Vmin=100, **kwargs): + Vmin=100, create_plots=True, log_table=True, gen_tex_table=True, + **kwargs): """ Run the follow-up with the given run_setup Parameters @@ -2352,7 +2368,9 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): self.nsegs = 1 self.inititate_search_object() - run_setup = self.init_run_setup(run_setup, R0=R0, Vmin=Vmin) + run_setup = self.init_run_setup( + run_setup, R0=R0, Vmin=Vmin, log_table=log_table, + gen_tex_table=gen_tex_table) self.run_setup = run_setup self.old_data_is_okay_to_use = self.check_old_data_is_okay_to_use() @@ -2405,19 +2423,21 @@ class MCMCFollowUpSearch(MCMCSemiCoherentSearch): logging.info('Max detection statistic of run was {}'.format( np.max(sampler.lnlikelihood))) - fig, axes = self.plot_walkers(sampler, symbols=self.theta_symbols, - fig=fig, axes=axes, burnin_idx=nburn, - xoffset=nsteps_total, **kwargs) - for ax in axes[:-1]: - ax.axvline(nsteps_total, color='k', ls='--') + if create_plots: + fig, axes = self.plot_walkers( + sampler, symbols=self.theta_symbols, fig=fig, axes=axes, + burnin_idx=nburn, xoffset=nsteps_total, **kwargs) + for ax in axes[:-1]: + ax.axvline(nsteps_total, color='k', ls='--') nsteps_total += nburn+nprod - try: - fig.tight_layout() - except ValueError as e: - logging.warning('Tight layout encountered {}'.format(e)) - fig.savefig('{}/{}_walkers.png'.format( - self.outdir, self.label), dpi=200) + if create_plots: + try: + fig.tight_layout() + except ValueError as e: + logging.warning('Tight layout encountered {}'.format(e)) + fig.savefig('{}/{}_walkers.png'.format( + self.outdir, self.label), dpi=200) samples = sampler.chain[0, :, nburn:, :].reshape((-1, self.ndim)) lnprobs = sampler.lnprobability[0, :, nburn:].reshape((-1)) @@ -2776,12 +2796,11 @@ class Writer(BaseSearchClass): """ Instance object for generating SFTs containing glitch signals """ @initializer def __init__(self, label='Test', tstart=700000000, duration=100*86400, - dtglitch=None, - delta_phi=0, delta_F0=0, delta_F1=0, delta_F2=0, - tref=None, phi=0, F0=30, F1=1e-10, F2=0, Alpha=5e-3, - Delta=6e-2, h0=0.1, cosi=0.0, psi=0.0, Tsft=1800, outdir=".", - sqrtSX=1, Band=4, detector='H1', minStartTime=None, - maxStartTime=None): + dtglitch=None, delta_phi=0, delta_F0=0, delta_F1=0, + delta_F2=0, tref=None, F0=30, F1=1e-10, F2=0, Alpha=5e-3, + Delta=6e-2, h0=0.1, cosi=0.0, psi=0.0, phi=0, Tsft=1800, + outdir=".", sqrtSX=1, Band=4, detector='H1', + minStartTime=None, maxStartTime=None): """ Parameters ---------- @@ -2797,8 +2816,8 @@ class Writer(BaseSearchClass): tref: float or None reference time (default is None, which sets the reference time to tstart) - phil, F0, F1, F2, Alpha, Delta, h0, cosi, psi: float - pre-glitch phase, frequency, sky-position, and signal properties + F0, F1, F2, Alpha, Delta, h0, cosi, psi, phi: float + frequency, sky-position, and amplitude parameters Tsft: float the sft duration minStartTime, maxStartTime: float