def write_parnames(par_keys, latexpars=None): basename = output_dir + 'mcmc_chain' + output_tag + '.txt' basename = basename[0:-6] info_message('writing paramnames file...') parnames = open(basename + '.paramnames', 'w') if latexpars == None: latexpars = {} for key in par_keys: latexpars[key] = key for key in par_keys: parnames.write(key + '\t' + latexpars[key] + '\n') parnames.close()
def write_parnames( par_keys, latexpars=None ): basename = output_dir+'mcmc_chain'+output_tag+'.txt' basename = basename[0:-6] info_message( 'writing paramnames file...' ) parnames = open( basename+'.paramnames', 'w') if latexpars == None: latexpars = {} for key in par_keys: latexpars[key] = key for key in par_keys: parnames.write( key + '\t' + latexpars[key] + '\n' ) parnames.close()
def write_chain( chain ): info_message( ' Saving chains...' ) ofile = output_dir+'mcmc_chain'+output_tag+'.txt' #print ofile ch = [] for c in chains: a = [ c['weight'], c['chi2'] ] a.extend( c['parameters'].values() ) #print a ch.append( a ) ch = np.array( ch ) #print ch[0:2,:] #print ch.shape np.savetxt( ofile, ch, fmt='%-16.7E' ) info_message( ' Done.\n' )
def write_chain(chain): info_message(' Saving chains...') ofile = output_dir + 'mcmc_chain' + output_tag + '.txt' #print ofile ch = [] for c in chains: a = [c['weight'], c['chi2']] a.extend(c['parameters'].values()) #print a ch.append(a) ch = np.array(ch) #print ch[0:2,:] #print ch.shape np.savetxt(ofile, ch, fmt='%-16.7E') info_message(' Done.\n')
def marginalize(self, chains, nbins=21, skiplines=0.3, thin=1): # ------------------------------ def extract_parameter(chains, par_key): w = [] v = [] clen = len(chains) for i in range(clen): w.append(chains[i]['weight']) v.append(chains[i]['parameters'][par_key]) v = np.array(v) w = np.array(w) return v, w # ------------------------------ def compute_histogram(value, weight, nbins=21): minv = np.min(value) maxv = np.max(value) deltav = (maxv - minv) / (nbins) intervals = np.array(range(nbins + 1)) * deltav + minv #print intervals v = [] m = [] for ibin in range(nbins): v.append((intervals[ibin] + intervals[ibin + 1]) / 2.) select = np.array((value >= intervals[ibin])) * np.array( (value < intervals[ibin + 1])) m.append(np.sum(weight[select])) v = np.array(v) m = np.array(m, dtype=np.float) / np.sum(m) return v, m chlen = len(chains) if isinstance(skiplines, float): chlen = int(chlen * skiplines) elif isinstance(skiplines, int): chlen = skiplines chains = chains[chlen::thin] info_message('marginalize: Processing ' + str(len(chains)) + ' samples') npars = len(chains[0]['parameters']) par_keys = chains[0]['parameters'].keys() marginals = {} for key in par_keys: v, w = extract_parameter(chains, key) v, m = compute_histogram(v, w, nbins=nbins) marginals[key] = (v, m) return marginals
def marginalize( self, chains, nbins=21, skiplines=0.3, thin=1): # ------------------------------ def extract_parameter( chains, par_key): w = [] v = [] clen = len( chains ) for i in range(clen): w.append( chains[i]['weight']) v.append( chains[i]['parameters'][par_key]) v = np.array(v) w = np.array(w) return v,w # ------------------------------ def compute_histogram( value, weight, nbins=21): minv = np.min( value ) maxv = np.max( value ) deltav = (maxv-minv)/(nbins) intervals = np.array(range(nbins+1)) * deltav + minv #print intervals v = [] m = [] for ibin in range(nbins): v.append( (intervals[ibin]+intervals[ibin+1])/2. ) select = np.array( (value >= intervals[ibin]) ) * np.array( (value < intervals[ibin+1]) ) m.append( np.sum(weight[select]) ) v = np.array(v) m = np.array(m, dtype=np.float) / np.sum(m) return v, m chlen = len( chains ) if isinstance(skiplines,float): chlen = int( chlen * skiplines ) elif isinstance(skiplines, int): chlen = skiplines chains = chains[chlen::thin] info_message( 'marginalize: Processing '+str(len(chains))+' samples' ) npars = len( chains[0]['parameters'] ) par_keys = chains[0]['parameters'].keys() marginals = {} for key in par_keys: v,w = extract_parameter( chains, key ) v,m = compute_histogram( v, w, nbins=nbins ) marginals[key] = (v,m) return marginals
def get_covmat(self, chains, skiplines=0.3, thin=1, print_key=False): chlen = len(chains) if isinstance(skiplines, float): chlen = int(chlen * skiplines) elif isinstance(skiplines, int): chlen = skiplines chains = chains[chlen::thin] chlen = len(chains) info_message('get_covmat: Processing ' + str(chlen) + ' samples') npars = len(chains[0]['parameters']) par_keys = chains[0]['parameters'].keys() covmat = np.zeros((npars, npars), dtype=np.float64) meanpars = np.zeros(npars, dtype=np.float64) # Compute mean parameter values and reshaping parameter chains pchains = [] # print_key = False for ch in chains: prow = [] for ikey, key in enumerate(par_keys): if print_key: print key prow.append(ch['parameters'][key]) meanpars[ikey] += ch['parameters'][key] pchains.append(prow) if print_key: print_key = False meanpars /= chlen pchains = np.array(pchains) pchains.shape for ich in range(chlen): for ipar in range(npars): covmat[ipar, :] += (pchains[ich, ipar] - meanpars[ipar]) * ( pchains[ich, :] - meanpars[:]) covmat /= chlen return covmat
def get_covmat( self, chains, skiplines=0.3, thin=1, print_key=False ): chlen = len( chains ) if isinstance(skiplines,float): chlen = int( chlen * skiplines ) elif isinstance(skiplines, int): chlen = skiplines chains = chains[chlen::thin] chlen = len( chains ) info_message( 'get_covmat: Processing '+str(chlen)+' samples' ) npars = len( chains[0]['parameters'] ) par_keys = chains[0]['parameters'].keys() covmat = np.zeros( (npars,npars), dtype=np.float64 ) meanpars = np.zeros( npars, dtype=np.float64 ) # Compute mean parameter values and reshaping parameter chains pchains = [] # print_key = False for ch in chains: prow = [] for ikey,key in enumerate(par_keys): if print_key: print key prow.append( ch['parameters'][key] ) meanpars[ikey] += ch['parameters'][key] pchains.append( prow ) if print_key: print_key = False meanpars /= chlen pchains = np.array( pchains ) pchains.shape for ich in range(chlen): for ipar in range(npars): covmat[ipar,:] += (pchains[ich,ipar]-meanpars[ipar]) * (pchains[ich,:]-meanpars[:]) covmat /= chlen return covmat
basename = output_dir+'mcmc_chain'+output_tag+'.txt' basename = basename[0:-6] info_message( 'writing paramnames file...' ) parnames = open( basename+'.paramnames', 'w') if latexpars == None: latexpars = {} for key in par_keys: latexpars[key] = key for key in par_keys: parnames.write( key + '\t' + latexpars[key] + '\n' ) parnames.close() # ------ code = 'sampler' info_message( 'Starting MCMC...' ) info_message( '\t output_tag: '+output_tag ) if len(output_tag) != 0 and output_tag[0] != '_': output_tag = '_'+output_tag if check_point != None: if check_point[0] != '_': check_point = '_'+check_point loginf = 1.e2 zero_like = np.exp( -0.5*loginf ) npars = len( parameters ) if Verbosity: info_message( 'INFO - Number of parameters: '+str(npars), code=code )
basename = basename[0:-6] info_message('writing paramnames file...') parnames = open(basename + '.paramnames', 'w') if latexpars == None: latexpars = {} for key in par_keys: latexpars[key] = key for key in par_keys: parnames.write(key + '\t' + latexpars[key] + '\n') parnames.close() # ------ code = 'sampler' info_message('Starting MCMC...') info_message('\t output_tag: ' + output_tag) if len(output_tag) != 0 and output_tag[0] != '_': output_tag = '_' + output_tag if check_point != None: if check_point[0] != '_': check_point = '_' + check_point loginf = 1.e2 zero_like = np.exp(-0.5 * loginf) npars = len(parameters) if Verbosity: info_message('INFO - Number of parameters: ' + str(npars), code=code)