def __init__(self, psrs, params=None, psrTerm=True, bayesephem=True, pta=None): if pta is None: # initialize standard model with fixed white noise # and powerlaw red noise # uses the implementation of ECORR in gp_signals print('Initializing the model...') tmin = np.min([p.toas.min() for p in psrs]) tmax = np.max([p.toas.max() for p in psrs]) Tspan = tmax - tmin s = deterministic.cw_block_circ(amp_prior='log-uniform', psrTerm=psrTerm, tref=tmin, name='cw') s += gp_signals.TimingModel() s += blocks.red_noise_block(prior='log-uniform', psd='powerlaw', Tspan=Tspan, components=30) if bayesephem: s += deterministic_signals.PhysicalEphemerisSignal(use_epoch_toas=True) # adding white-noise, and acting on psr objects models = [] for p in psrs: if 'NANOGrav' in p.flags['pta']: s2 = s + blocks.white_noise_block(vary=False, inc_ecorr=True, gp_ecorr=True) models.append(s2(p)) else: s3 = s + blocks.white_noise_block(vary=False, inc_ecorr=False) models.append(s3(p)) pta = signal_base.PTA(models) # set white noise parameters if params is None: print('No noise dictionary provided!') else: pta.set_default_params(params) self.pta = pta else: # user can specify their own pta object # if ECORR is included, use the implementation in gp_signals self.pta = pta self.psrs = psrs self.params = params self.Nmats = self.get_Nmats()
def pta_pshift(dmx_psrs, caplog): Tspan = model_utils.get_tspan(dmx_psrs) tm = gp_signals.TimingModel() wn = blocks.white_noise_block(inc_ecorr=True, tnequad=True) rn = blocks.red_noise_block(Tspan=Tspan) pseed = parameter.Uniform(0, 10000)('gw_pseed') gw_log10_A = parameter.Uniform(-18, -14)('gw_log10_A') gw_gamma = parameter.Constant(13. / 3)('gw_gamma') gw_pl = utils.powerlaw(log10_A=gw_log10_A, gamma=gw_gamma) gw_pshift = gp_signals.FourierBasisGP(spectrum=gw_pl, components=5, Tspan=Tspan, name='gw', pshift=True, pseed=pseed) model = tm + wn + rn + gw_pshift pta_pshift = signal_base.PTA([model(p) for p in dmx_psrs]) pta_pshift.set_default_params(noise_dict) return pta_pshift
with open(args.noisepath, 'r') as fin: noise = json.load(fin) # Set Tspan for RN Tspan_PTA = model_utils.get_tspan(pkl_psrs) # common red noise block fmin = 10.0 modes, wgts = model_utils.linBinning(Tspan_PTA, 1, 1.0 / fmin / Tspan_PTA, 14, 5) # wgts = wgts**2.0 # timing model s = gp_signals.MarginalizingTimingModel() s += blocks.white_noise_block(vary=False, inc_ecorr=True, select='backend') s += blocks.red_noise_block( psd='powerlaw', prior='log-uniform', Tspan=Tspan_PTA, modes=modes, wgts=wgts, ) gamma_gw = parameter.Uniform(0, 7)('gw_gamma') log10_Agw = parameter.Uniform(-18, -11)('gw_log10_A') cpl = gpp.powerlaw_genmodes(log10_A=log10_Agw, gamma=gamma_gw, wgts=wgts) s += gp_signals.FourierBasisGP(cpl, modes=modes, name='gw_crn') # gw = blocks.common_red_noise_block(psd='powerlaw', prior='log-uniform', Tspan=Tspan_PTA,
noise_fs.update(json.load(fin)) if args.tspan is None: Tspan = model_utils.get_tspan(psrs) else: Tspan = args.tspan if args.wideband: inc_ecorr = False else: inc_ecorr = True ### Timing Model ### tm = gp_signals.TimingModel() ### White Noise ### wn = blocks.white_noise_block(vary=False, inc_ecorr=inc_ecorr) ### Red Noise ### rn_plaw = blocks.red_noise_block(psd='powerlaw', prior='log-uniform', Tspan=Tspan, components=30, gamma_val=None) rn_fs = blocks.red_noise_block(psd='spectrum', prior='log-uniform', Tspan=Tspan, components=30, gamma_val=None) ### GWB ### gw = blocks.common_red_noise_block(psd='powerlaw',
psrs = pickle.load(fin) psr = psrs[args.process] print(f'Starting {psr.name}.') with open(args.noisepath, 'r') as fin: noise = json.load(fin) if args.tspan is None: Tspan = model_utils.get_tspan([psr]) else: Tspan = args.tspan tm = gp_signals.TimingModel() log10_rho = parameter.Uniform(-10, -4, size=30) fs = gp_priors.free_spectrum(log10_rho=log10_rho) wn = blocks.white_noise_block(inc_ecorr=True) log10_A = parameter.Constant() gamma = parameter.Constant() plaw_pr = gp_priors.powerlaw(log10_A=log10_A, gamma=gamma) plaw = gp_signals.FourierBasisGP(plaw_pr, components=30, Tspan=Tspan) rn = gp_signals.FourierBasisGP(fs, components=30, Tspan=Tspan, name='excess_noise') m = tm + wn + plaw + rn if args.gwb_on: gw_log10_A = parameter.Constant('gw_log10_A') gw_gamma = parameter.Constant(4.3333)('gw_gamma') gw_pr = gp_priors.powerlaw(log10_A=gw_log10_A, gamma=gw_gamma)
base_model = tm if args.bayes_ephem: base_model += deterministic_signals.PhysicalEphemerisSignal(use_epoch_toas=True) if args.rn_psrs[0]=='all': rn_psrs='all' else: rn_psrs=args.rn_psrs model1_psrs = [] model2a_psrs = [] if rn_psrs=='all': model_1 = base_model + rn_plaw model_2a = model_1 + gw model_1_ec = model_1 + blocks.white_noise_block(vary=False, inc_ecorr=True) model_1 += blocks.white_noise_block(vary=False, inc_ecorr=False) model_2a_ec = model_2a + blocks.white_noise_block(vary=False, inc_ecorr=True) model_2a += blocks.white_noise_block(vary=False, inc_ecorr=False) for p in psrs: if 'NANOGrav' in p.flags['pta'] and not args.wideband: model1_psrs.append(model_1_ec(p)) model2a_psrs.append(model_2a_ec(p)) else: model1_psrs.append(model_1(p)) model2a_psrs.append(model_2a(p)) elif isinstance(rn_psrs,list): model1_psrs = [] model2a_psrs = []