Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
    #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,