def __call__(self): for filenames in self.get_filenames: dir_base, base_names = io.split_dir_base(filenames) print '======================================================' print 'directory base:', dir_base data = io.load_data(filenames) if self.n_merge_bins is not None: data = tr.merge_bins(data, self.n_merge_bins) print 'angles range:', data[:, 0].min(), data[:, 0].max() data = tr.fix_increasing(tr.fix_range(tr.transform_2pi(data))) print 'transformed angles range:', data[0, 0], data[-1, 0] print 'data range:', data[:, 1].min(), data[:, 1].max() # Simulate the "random process" the histogram was done from. counts = tr.get_counts_from_lengths(data[:, 1]) fdata = tr.spread_by_counts(data[:, 0], counts, trivial=self.spread_data == False) print 'simulated counts range:', counts.min(), counts.max() ddata = np.sort(tr.transform_pi_deg(data[:, 0], neg_shift=self.neg_shift)) dd = ddata[1] - ddata[0] all_bins = np.r_[ddata - 1e-8, ddata[-1] + dd] bins = all_bins[::self.plot_bins_step] self.current = Struct(filenames=filenames, dir_base=dir_base, base_names=base_names) self.source_data = Struct(counts=counts, data=data, fdata=fdata, bins=bins) yield self.source_data
def get_pars(pset, area_angles): """ Get starting parameters given the area angles of two systems. """ x0, xm, x1, area1, area2 = area_angles mu0 = 0.5 * (x0 + xm) mu1 = 0.5 * (xm + x1) print mu0, mu1 mu0, mu1 = tr.fix_range(tr.transform_2pi([mu0, mu1])) pars = np.r_[[2.0, mu0, 2.0, mu1] + [0.1, 0.0] * (pset.n_components - 2)] return pars
def __call__(self): for filenames in self.get_filenames: dir_base, base_names = io.split_dir_base(filenames) print '======================================================' print 'directory base:', dir_base data = io.load_data(filenames) if self.n_merge_bins is not None: data = tr.merge_bins(data, self.n_merge_bins) print 'angles range:', data[:, 0].min(), data[:, 0].max() data = tr.fix_increasing(tr.fix_range(tr.transform_2pi(data))) print 'transformed angles range:', data[0, 0], data[-1, 0] print 'data range:', data[:, 1].min(), data[:, 1].max() # Simulate the "random process" the histogram was done from. counts = tr.get_counts_from_lengths(data[:, 1]) fdata = tr.spread_by_counts(data[:, 0], counts, trivial=self.spread_data == False) print 'simulated counts range:', counts.min(), counts.max() ddata = np.sort( tr.transform_pi_deg(data[:, 0], neg_shift=self.neg_shift)) dd = ddata[1] - ddata[0] all_bins = np.r_[ddata - 1e-8, ddata[-1] + dd] bins = all_bins[::self.plot_bins_step] self.current = Struct(filenames=filenames, dir_base=dir_base, base_names=base_names) self.source_data = Struct(counts=counts, data=data, fdata=fdata, bins=bins) yield self.source_data
def plot_estimated_dist(output_dir, result, source, pset_id=None): data, fdata, bins = source.get_source_data() xtr = lambda x: transform_pi_deg(x, neg_shift=source.neg_shift) rbins = transform_2pi(bins) - np.pi * (source.neg_shift == True) fig = result.model.plot_dist(result.full_params, xtransform=xtr, bins=rbins, data=fdata) fig.axes[0].set_title('estimated distribution') fig.axes[0].set_xlabel('angle', fontsize='large') fig.axes[0].set_ylabel('probability density function', fontsize='large') if pset_id is None: name = source.current.dir_base + '-fit.png' else: name = source.current.dir_base + '-fit-%d.png' % pset_id figname = os.path.join(output_dir, name) plt.tight_layout(pad=0.5) fig.savefig(figname) plt.close(fig)
#options.show = True #options.params = '0, 5' start_params = np.zeros(options.n_components * 3 - 1) n2 = 2 * options.n_components if options.params is None: # Zeros for mu, twos for kappa. start_params[:n2:2] = 2.0 + np.random.uniform(-0.1, 0.1, options.n_components) start_params[:n2:2] = 5.0 + np.random.uniform(-0.5, 0.5, options.n_components) else: aux = np.array([float(ii) for ii in options.params.split(',')]) start_params[:n2:2] = aux[1::2] # kappa. start_params[1:n2:2] = tr.transform_2pi(aux[0::2]) # mu. start_params[n2:] = np.random.uniform(-0.1, 0.1, options.n_components - 1) print 'starting parameters:', start_params io.ensure_path(output_dir) neg_shift = True log_name = os.path.join(output_dir, 'log.csv') log = CSVLog(log_name, options.n_components) log.write_header() get_data = io.locate_files(pattern, data_dir,