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)
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)
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)
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)