コード例 #1
0
def analysis_array(array, headers, cutoff, zp, noise, x, param_template):
	names = ['BD_ratio', 'BT_ratio', 'delta_params', 'params_ratio', 'cut_redchi', 'cut_diff']
	output = []
	for row in array:
		P_truth, P_guess, P_fit = get_originals(row, param_template)
		BD = BD_ratio(P_truth, zp)
		BT = 1. / (1 + ((1./BD)))
		deltas = {}
		for i in ['MeB', 'ReB', 'nB', 'MeD', 'ReD']:
			deltas['delta_'+i] = P_truth[i] - P_fit[i]
		Me_ratio = P_truth['MeB']/P_truth['MeD']
		Re_ratio = P_truth['ReB']/P_truth['ReD']
		total_t, bulge_t, disc_t = S.sersic2(P_truth, x, zp, True)
		total_f, bulge_f, disc_f = S.sersic2(P_fit, x, zp, True) 
		residual_excl =  total_t - total_f
		cutoff_ind = SD.translate_x(x, cutoff)
		redchi_excl = np.sum(residual_excl[:cutoff_ind]**2.) / (cutoff_ind - 5)
		cut_points_fit = len(np.where(np.diff(np.sign(bulge_f - disc_f)))[0]) - len(np.where((bulge_f - disc_f) == 0)[0])
		cut_points_initial = len(np.where(np.diff(np.sign(bulge_t - disc_t)))[0]) - len(np.where((bulge_t - disc_t) == 0)[0])

		d = {'BD_ratio':BD, 'BT_ratio':BT, 'Me_ratio':Me_ratio, 'Re_ratio':Re_ratio, 'redchi2_cut': redchi_excl, 'cross_initial': cut_points_initial,
		'cross_final': cut_points_fit}
		d.update(deltas)
		output.append(d)
	return output
コード例 #2
0
def rate_fit(data_array_row, param_template, noise, cutoff, x):
	"""returns redchi2 for region before cutoff, truth-model, delta_params"""
	P_truth, P_guess, P_fit = get_originals(data_array_row, param_template)
	truth = S.sersic2(P_truth, R, 30., False)
	fitted = S.sersic2(P_fit, R, 30., False)
	noisy = truth + noise

	chi = redchi2(fitted, noisy, x, cutoff)
	diff = compare_residuals(truth, fitted, cutoff, x)

	delta_params = 0
	for p in P_truth.values():
		delta_params += (p.value - P_fit[p.name].value)
	return chi, diff, delta_params
コード例 #3
0
def start_routine(filename, P, Me_range, Re_range, n_range, noise_level, R, zp):
	noise = make_noise(R, noise_level)

	with open(filename, 'wb') as csvfile:
		writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
		header = ['%s = %.2f' % (P[i].name, P[i].value) for i in ['MeD', 'ReD', 'nD']]
		writer.writerow(header + ['range= [%.1f, %.1f]' % (R[0], R[-1])] + ['noise level = %.1f' % noise_level])
		writer.writerow(['MeB_initial', 'ReB_initial', 'nB_initial', 'MeD_final', 'ReD_final', 'nD_final', 'MeB_final', 'ReB_final', 'nB_final',\
		 'redchi2_all', 'redchi2_excl', 'KS', 'KS_excl'])
		for nB in n_range:
			for ReB in Re_range:
				for MeB in Me_range:
					pars = S.copy_params(P, False)
					pars.add_many(('MeB', float(MeB), True, 1.), ('ReB', float(ReB), True, 0.01), ('nB', float(nB), True, 0.1))
					pars['nD'].vary = False
					test_gal = S.sersic2(pars, R, zp, False) + noise

					new_pars = S.copy_params(pars, False)
					
					fit_data, res_excl = S.fit(new_pars, S.sersic2, R, zp, test_gal, weights=None, fit_range=None, redchi_marker=30.)

					initials = [pars[i].value for i in ['MeB', 'ReB', 'nB']]
					if fit_data is None:
						writer.writerow(['N/A'] * 13) 
					else:
						finals = [new_pars[i].value for i in ['MeB', 'ReB', 'nB', 'MeD', 'ReD', 'nD']]
						redchi_excl = np.sum(res_excl) / fit_data.nfree
						KS, KS_excl = stats.kstest(fit_data.residual, 'norm')[1], stats.kstest(res_excl, 'norm')[1]
						writer.writerow(initials+finals+['%r' % (res_excl)])
コード例 #4
0
def preview(fit_data, fitted_profile, x, zp):
	"""shows a graph of fitting"""
	model_x = np.linspace(x[0], x[-1], 500)
	model, bulge, disc = S.sersic2(fit_data.params, model_x, zp, True)
	fig = plt.figure()
	gs = gridspec.GridSpec(6,1)
	ax = fig.add_subplot(gs[:4,0])
	res = fig.add_subplot(gs[4:,0])
	ax.plot(x, S.convert_I(fitted_profile, zp), 'b.')
	ax.plot(model_x, S.convert_I(model, zp), 'k-')
	ax.plot(model_x, S.convert_I(bulge, zp), 'g:')
	ax.plot(model_x, S.convert_I(disc, zp), 'r--')
	ax.set_ylim([35, 15])
	res_model = S.convert_I(S.sersic2(fit_data.params, x, zp, False), zp)
	res.plot(x, S.convert_I(fitted_profile, zp) - res_model, 'b.')
	plt.show()
コード例 #5
0
def tester(param_template, bulge_params, R, zp, noise, weights, fit_range):
	"""returns fit_data and the initial guesses"""
	P = copy_params(param_template, False)
	P['MeB'].value = bulge_params['MeB'] # ready parameter set
	P['ReB'].value = bulge_params['ReB']
	P['nB'].value = bulge_params['nB']
	test_gal = S.sersic2(P, R, zp, False)
	test_gal += noise
	guesses = guess_params(P, 0.1)
	return S.fit(copy_params(guesses, True), S.sersic2, R, zp, test_gal, weights, fit_range, redchi_marker=None), guesses, test_gal