Exemplo n.º 1
0
def mcmc(Chain, runtime, mixingtime=1000):
    #mixingtime = 1000
    #runtime = 50000
    pb = progressBar(maxValue=runtime)
    cwd = os.getcwd()
    tmpdir = cwd + '/' + uniquename()
    if not tmpdir == None:
        if os.path.exists(tmpdir):
            os.chdir(tmpdir)
        else:
            os.mkdir(tmpdir)
            os.chdir(tmpdir)
    os.system('cp %s/%s %s/%s' % (cwd, parfile, tmpdir, parfile))
    motifile(toafile, cwd, tmpdir)
    dict = pickle.load(open('%s/bestpar.p' % cwd, 'r'))
    Omega, cosi, m2 = dict['BEST']
    MarkovChain = Chain
    pf = PARfile(parfile)
    pf.thawall()
    pf.write()
    pf.matrix(toafile)
    pf.freezeall()
    pf.write()
    p0 = probcal(Omega, cosi, m2, pf)
    p = p0
    best = (Omega, cosi, m2)
    #dict = {'BEST':best}
    #pickle.dump(dict, open('bestpar.p', 'w'))
    n = count()
    m = count()
    while n.next() < mixingtime + runtime:
        npf = pf.randomnew()
        Ncosi = cosi + uniform(-0.05, 0.05)
        #Nm2 = m2 + normal(0, 0.02)
        NOmega = (Omega + normal(0, 5))
        #Nsini = float(str(npf.SINI[0]))
        #Ncosi = -1. * sqrt(1 - Nsini**2)
        Nm2 = float(str(npf.M2[0]))
        #print Ncosi, cosi,  Ncosi - cosi, Nm2 - m2
        p1 = probcal(NOmega, Ncosi, Nm2, npf)
        c = m.next()
        if p1 > p0:
            if c > mixingtime:
                MarkovChain.append((NOmega, Ncosi, Nm2))
                pb(c - mixingtime)
            pf = npf
            p0 = p1
            cosi, m2, Omega = Ncosi, Nm2, NOmega
            if p1 > p:
                best = (NOmega, Ncosi, Nm2)
                p = p1
                dict['BEST'] = best
                pickle.dump(dict, open('%s/bestpar.p' % cwd, 'w'))
        else:
            t = uniform(0, 1, 1)[0]
            if t < p1 / p0:
                if c > mixingtime:
                    MarkovChain.append((NOmega, Ncosi, Nm2))
                    pb(c - mixingtime)
                pf = npf
                p0 = p1
                cosi, m2, Omega = Ncosi, Nm2, NOmega
            else:
                if c > mixingtime:
                    MarkovChain.append((Omega, cosi, m2))
    #print  MarkovChain
    print best
    print '%d new points generated.' % len(MarkovChain)
    #OldChain = pickle.load(open('MChain.p','r'))['Chain']
    #dict['Chain'] = OldChain + MarkovChain
    #dict['Chain'] = MarkovChain
    #os.rmdir(tmpdir)
    os.chdir(cwd)
Exemplo n.º 2
0
def mcmc(Chain, runtime, mixingtime=1000, stepsize=1):
    #mixingtime = 1000
    #runtime = 50000
    pb = progressBar(maxValue = runtime + mixingtime)
    cwd=os.getcwd()
    tmpdir = cwd+'/.'+uniquename()
    if not tmpdir == None:
        if os.path.exists(tmpdir):
            os.chdir(tmpdir)
        else:
            os.mkdir(tmpdir)
            os.chdir(tmpdir)
    os.system('cp %s/%s %s/%s' % (cwd, parfile, tmpdir, parfile))
    os.system('cp %s/%s %s/%s' % (cwd, pulsefile, tmpdir, pulsefile))
    motifile(toafile, cwd, tmpdir)
    MarkovChain = Chain
    pf = PARfile(parfile)
    #pf = model(parfile)
    #pf.thawall()
    pf.freezeall('DMX_0')
    #pf.parameters['SINI'] = '0'
    #pf.parameters['M2'] = '0'
    #pf.parameters['XDOT'] = '0'

    pf.write()
    chisq, dof = tempofit(parfile, toafile = toafile, pulsefile = pulsefile)
    #pf.tempofit(toafile, pulsefile = pulsefile)
    chisq, dof = chisq, dof
    pf.matrix(toafile)
    #pf.freezeall()
    #pf.thawall('JUMP_')
    pf.write()

    #if 'PAASCNODE'in pf.__dict__:
        #plist = [x for x in pf.manifest if x in pf.parameters.keys()] + ['PAASCNODE']
        #dict = {'BEST':[pf.__dict__[p][0] for p in plist[:-1]] + [pf.__dict__[p] for p in plist[-1:]], 'parfile':pf.parfile, 'parameters':plist + ['chisq']}
    #else:
    plist = [x for x in pf.manifest if x in pf.parameters.keys()]

    dict = {'BEST':[pf.__dict__[p][0] for p in plist] + [pf.PAASCNODE, chisq], 'parfile':pf.parfile, 'parameters':plist + ['PAASCNODE', 'chisq']}
    pickle.dump(dict, open('%s/bestpar.p' % cwd, 'w'), protocol=2)
    p0 = probcal(pf)
    p = p0
    #print 'P0', p0
    #try:
        #MChain = pickle.load(open('MChain.p', 'r'))
    #except:
        #MChain = {'Chain':[]}
    #MChain['parameters'] = plist
    #pickle.dump(MChain, open('MChain.p', 'w'))
    n = count()
    m = count()
    while n.next() <= mixingtime + runtime:
        npf = pf.randomnew(stepsize=stepsize)
        randomnew(npf, stepsize)
        p1 = probcal(npf)
        c = m.next()
        if c % 30 == 0:pb(c)
        if p1 > p0:
            if c > mixingtime:
                MarkovChain.append([npf.__dict__[p][0] for p in plist] + [npf.PAASCNODE, npf.chisq])
            pf = npf
            p0 = p1
            if p1 > p:
                p = p1
                #if 'PAASCNODE' in plist:
                    #dict['BEST'] = [pf.__dict__[p][0] for p in plist[:-1]] + [pf.__dict__[p] for p in plist[-1:]] + [npf.chisq]
                #else:
                dict['BEST'] = [npf.__dict__[p][0] for p in plist] + [npf.PAASCNODE,  npf.chisq]
                pickle.dump(dict, open('%s/bestpar.p' % cwd, 'w'), protocol=2)
        else:
            t = uniform(0,1,1)[0]
            if t < p1/p0:
                if c > mixingtime:
                    MarkovChain.append([npf.__dict__[p][0] for p in plist] + [npf.PAASCNODE, npf.chisq])
                pf = npf
                p0 = p1
            else:
                if c > mixingtime:
                    MarkovChain.append([pf.__dict__[p][0] for p in plist] + [npf.PAASCNODE, npf.chisq])
    #print  MarkovChain
    #print best
    print '%d points added to the Chain.' % len(MarkovChain)
    #OldChain = pickle.load(open('MChain.p','r'))['Chain']
    #dict['Chain'] = OldChain + MarkovChain
    #dict['Chain'] = MarkovChain
    os.chdir(cwd)
Exemplo n.º 3
0
def mcmc(Chain, runtime, MarkovChain, mixingtime=1000, stepsize=1, seed=0 ):
    pb = progressBar(maxValue = runtime + mixingtime)
    cwd=os.getcwd()
    tmpdir = cwd+'/.'+uniquename()
    if not tmpdir == None:
        if os.path.exists(tmpdir):
            os.chdir(tmpdir)
        else:
            os.mkdir(tmpdir)
            os.chdir(tmpdir)
    os.system('cp %s/%s %s/%s' % (cwd, parfile, tmpdir, parfile))
    os.system('cp %s/%s %s/%s' % (cwd, pulsefile, tmpdir, pulsefile))
    motifile(toafile, cwd, tmpdir)
    touchparfile(parfile, NITS=1)
    pf = PARfile(parfile)
    #chisq, dof = tempofit(parfile, toafile = toafile, pulsefile = pulsefile)
    pf.matrix(toafile)
    pf.freezeall()
    pf.thawall('JUMP')
    p0 = probcal(pf)
    pmax = p0
    ThisChain = []
    c = 0
    randomlist = uniform(0,1,stepsize)
    while c <= mixingtime + runtime:
        c+=1
        npf = pf.randomnew(stepsize=stepsize)
        #randomnew(npf, stepsize) #only use this for 1713
        p1 = probcal(npf)
        if c % 30 == 0:pb(c)
        if c > mixingtime:
            t = randomlist[c-mixingtime-1]
            if t < exp(p1-p0):
                Chain.Chain.append([npf.__dict__[p][0] for p in plist] + [ npf.chisq])
                pf = npf
                p0 = p1
                if p1 > pmax:
                    pmax = p1
                    bestpar['BEST'] = [npf.__dict__[p][0] for p in plist] + [ npf.chisq]
                    pickle.dump(bestpar, open('%s/bestpar.p' % cwd, 'wb', 0), protocol=2)
            else:
                Chain.Chain.append([pf.__dict__[p][0] for p in plist] + [ npf.chisq])

            if c % (100+(seed%100)) == 0:
                MarkovChain.extend(Chain.Chain)
                ThisChain.extend(Chain.Chain)
                Chain.Chain = [] #empty the list
                #try:
                TC = np.array(ThisChain)
                dit = {'Chain':TC}
                pid = str(os.getpid())
                try: 
                    os.remove(cwd+'/MChain.p'+pid)
                except:pass
                f = open(cwd+'/MChain.p'+pid, 'wb', 0)
                pickle.dump(dit, f, protocol=2)
                f.flush()
                f.close()
                del dit
                del TC


    MarkovChain.extend(Chain.Chain)
    os.chdir(cwd)
Exemplo n.º 4
0
def mcmc(Chain, runtime, mixingtime=1000):
    #mixingtime = 1000
    #runtime = 50000
    pb = progressBar(maxValue = runtime)
    cwd=os.getcwd()
    tmpdir = cwd+'/'+uniquename()
    if not tmpdir == None:
        if os.path.exists(tmpdir):
            os.chdir(tmpdir)
        else:
            os.mkdir(tmpdir)
            os.chdir(tmpdir)
    os.system('cp %s/%s %s/%s' % (cwd, parfile, tmpdir, parfile))
    motifile(toafile, cwd, tmpdir)
    dict = pickle.load(open('%s/bestpar.p' % cwd, 'r'))
    Omega, cosi, m2 = dict['BEST']
    MarkovChain = Chain
    pf = PARfile(parfile)
    pf.thawall()
    pf.write()
    pf.matrix(toafile)
    pf.freezeall()
    pf.write()
    p0 = probcal(Omega, cosi, m2, pf)
    p = p0
    best = (Omega, cosi, m2 )
    #dict = {'BEST':best}
    #pickle.dump(dict, open('bestpar.p', 'w'))
    n = count()
    m = count()
    while n.next() < mixingtime + runtime:
        npf = pf.randomnew()
        Ncosi = cosi + uniform(-0.05, 0.05)
        #Nm2 = m2 + normal(0, 0.02)
        NOmega = (Omega + normal(0, 5)) 
        #Nsini = float(str(npf.SINI[0]))
        #Ncosi = -1. * sqrt(1 - Nsini**2)
        Nm2 = float(str(npf.M2[0]))
        #print Ncosi, cosi,  Ncosi - cosi, Nm2 - m2
        p1 = probcal(NOmega, Ncosi, Nm2, npf)
        c = m.next()
        if p1 > p0:
            if c > mixingtime:
                MarkovChain.append((NOmega, Ncosi, Nm2 ))
                pb(c - mixingtime)
            pf = npf
            p0 = p1
            cosi, m2, Omega = Ncosi, Nm2, NOmega
            if p1 > p:
                best = (NOmega, Ncosi, Nm2)
                p = p1
                dict['BEST'] = best
                pickle.dump(dict, open('%s/bestpar.p' % cwd, 'w'))
        else:
            t = uniform(0,1,1)[0]
            if t < p1/p0:
                if c > mixingtime:
                    MarkovChain.append((NOmega, Ncosi, Nm2 ))
                    pb(c - mixingtime)
                pf = npf
                p0 = p1
                cosi, m2, Omega = Ncosi, Nm2, NOmega
            else:
                if c > mixingtime:
                    MarkovChain.append((Omega, cosi, m2))
    #print  MarkovChain
    print best
    print '%d new points generated.' %len(MarkovChain)
    #OldChain = pickle.load(open('MChain.p','r'))['Chain']
    #dict['Chain'] = OldChain + MarkovChain
    #dict['Chain'] = MarkovChain
    #os.rmdir(tmpdir)
    os.chdir(cwd)