Esempio n. 1
0
    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()
Esempio n. 2
0
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
Esempio n. 3
0
    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,
Esempio n. 4
0
    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',
Esempio n. 5
0
    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)
Esempio n. 6
0
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 = []