예제 #1
0
def init_os_common(dataset, h5file, psrlist, nf, noisedir=None, noVaryNoise=False,
            incJitterEquad=True, incEquad=True, outputfile=None):

    model = PALmodels.PTAmodels(h5file, pulsars=psrlist)

    # make model dictionary, can play with number of frequencies here
    # Note: Tmax=0 means it will use the largest time span in the array to set the frequency bin size
    fullmodel = model.makeModelDict(incRedNoise=True, incEquad=incEquad, incJitterEquad=incJitterEquad,
                                    likfunc='mark9', incGWB=True, incEphemMixture=False, nfreqs=nf, Tmax=0)

    # loop through pulsars and fix white noise parameters to values in file
    if noisedir is not None:
        for ct, p in enumerate(model.psr):
            d = np.genfromtxt(noisedir + p.name + '_noise.txt', dtype='S42')
            pars = d[:,0]
            vals = np.array([float(d[ii,2]) for ii in range(d.shape[0])])
            sigs = [psig for psig in fullmodel['signals'] if psig['pulsarind'] == ct]
            sigs = PALutils.fixNoiseValues(sigs, vals, pars, bvary=False, verbose=False)
            
            # turn back on red-noise parameters (will use later when drawing from posteriors)
            for sig in fullmodel['signals']:
                if sig['corr'] == 'single' and sig['stype'] == 'powerlaw':
                    sig['bvary'][1] = True
                    sig['bvary'][0] = True

    if noVaryNoise:
        nflags = ['efac', 'equad', 'jitter', 'jitter_equad']
        for sig in fullmodel['signals']:
            if sig['stype'] in nflags:
                sig['bvary'][0] = False

    # intialize mdoel
    model.initModel(fullmodel, memsave=True, write='no')
    
    # start parameters off at initial values (i.e the fixed values red in above)
    p0 = model.initParameters(fixpstart=True)
    
    # essentially turn off GWB component (again we will do something different when drawing from full PTA posterior)
    p0[-2] = -19
    
    # call once to fix white noise
    xi, rho, sig, Opt, Sig = model.opt_stat_mark9(p0)

    if outputfile is not None:
        f = open(outputfile, 'w')
        f.write('Opt  {0}\n'.format(Opt))
        f.write('Sig  {0}\n'.format(Sig))
        f.write('SNR  {0}\n'.format(Opt/Sig))
        f.close()

    return model
예제 #2
0
                                                     sig['pstart']))

    #for sig in fullmodel['signals']:
    #    if sig['stype'] == 'jitter_equad':
    #        if sig['flagvalue'] == 'J1741+1351-430_ASP':
    #            sig['bvary'][0] = False


    if args.fixNoise:
        noisedir = args.noisedir
        for ct, p in enumerate(model.psr):
            d = np.genfromtxt(noisedir + p.name + '_noise.txt', dtype='S42')
            pars = d[:,0]
            vals = np.array([float(d[ii,1]) for ii in range(d.shape[0])])
            sigs = [psig for psig in fullmodel['signals'] if psig['pulsarind'] == ct]
            sigs = PALutils.fixNoiseValues(sigs, vals, pars, bvary=False, verbose=True)

    # turn red noise back on
    if args.fixNoise and args.fixWhite:
        print('Turning on red noise and only fixing white noise')
        for sig in fullmodel['signals']:
            if sig['corr'] == 'single' and sig['stype'] == 'powerlaw':
                sig['bvary'][1] = True
                sig['bvary'][0] = True

    # write JSON file
    if not args.incTimingModel:
        model.writeModelToFile(fullmodel, args.outDir + '/model.json')


# check for single efacs
                    separateJitter=False, separateJitterEquadByFreq=True,
                    incEquad=incEquad, incJitter=False, incJitterEquad=incJitterEquad,
                    incGWB=False, nfreqs=50, ndmfreqs=50, Tmax=0,
                    incBWM=incBWM, compression='None', likfunc=likfunc)

if args.noisedir is None:
    noisedir = outdir + '/noisefiles/'
else:
    noisedir = args.noisedir + '/'

for ct, p in enumerate(model.psr):
    d = np.genfromtxt(noisedir + p.name + '_noise.txt', dtype='S42')
    pars = d[:,0]
    vals = np.array([float(d[ii,1]) for ii in range(d.shape[0])])
    sigs = [psig for psig in fullmodel['signals'] if psig['pulsarind'] == ct]
    sigs = PALutils.fixNoiseValues(sigs, vals, pars, bvary=False, verbose=False)

# turn red noise back on
if args.pipeline == 'BWM':
    print 'Turning on red noise and only fixing white noise'
    for sig in fullmodel['signals']:
        if sig['corr'] == 'single' and sig['stype'] == 'powerlaw':
            sig['bvary'][1] = True
            sig['bvary'][0] = True
    
model.initModel(fullmodel, memsave=True, fromFile=False, verbose=False, write='no')

# set initial parameters
p0 = model.initParameters(fixpstart=True, startEfacAtOne=False)

if args.pta in ['nanograv5', 'nanograv9']: