Exemplo n.º 1
0
def main(args):

    user_input = read_input(args.input)

    if user_input['path_to_obs'] == 'None':
        raise IOError('It is not possible to continue a process without determining a static data set.')    

    m1 = imp.load_source(args.functions[:-3], args.functions)

    user_input['simulation_func'] = getattr(m1, user_input['simulation_func'][0])

    if isinstance(user_input['distance_func'][0], str):
        user_input['distance_func'] = getattr(m1, user_input['distance_func'][0])

    #check dimension of distance output
    dtemp = user_input['distance_func'](user_input['dataset1'], user_input)
    user_input['dist_dim'] = len(dtemp)
    
    for l1 in range(user_input['npar']):
        par = user_input['param_to_fit'][l1]
        if isinstance(user_input['prior'][par]['func'], str):            
            user_input['prior'][par]['func'] = getattr(m1, user_input['prior_func'][l1])
            
    #initiate ABC construct
    sampler_ABC = ABC(params=user_input) 

    #define finished particle system index
    sampler_ABC.T = int(args.PS)
    
    #continue from previous run
    sampler_ABC.ContinueStoppedRun(sampler_ABC.T, nruns=int(user_input['nruns'][0]))
Exemplo n.º 2
0
def main(args):

    user_input = read_input(args.input)

    if args.functions != None:
        m1 = imp.load_source(args.functions[:-3], args.functions)

        if isinstance(user_input['distance_func'][0], str):
            user_input['distance_func'] = getattr(
                m1, user_input['distance_func'][0])

    for l1 in range(user_input['npar']):
        par = user_input['param_to_fit'][l1]
        if isinstance(user_input['prior'][par]['func'], str):
            user_input['prior'][par]['func'] = getattr(
                m1, user_input['prior_func'][l1])

    #initiate ABC construct
    sampler_ABC = ABC(params=user_input)

    #build first particle system
    sys1 = sampler_ABC.BuildFirstPSystem()

    #update particle system until convergence
    sampler_ABC.fullABC(nruns=int(user_input['nruns'][0]))
Exemplo n.º 3
0
def main( args ):

    user_input = read_input(args.input)
    m1 = imp.load_source(args.functions[:-3], args.functions)

    user_input['simulation_func'] = getattr(m1, user_input['simulation_func'][0])


    if  isinstance(user_input['distance_func'], list):
        user_input['distance_func'] = getattr(m1, user_input['distance_func'][0])

    for element in user_input['param_to_fit']:
        if isinstance(user_input['prior'][element]['func'], str):            
            user_input['prior'][element]['func'] = getattr(m1, user_input['prior'][element]['func'])
            for pvar in user_input[element + '_prior_par_name'][:user_input[element + '_prior_par_name'].index('#')]:
                indx = user_input[element + '_prior_par_name'].index(pvar)
                user_input['prior'][element][pvar] = float(user_input[element + '_prior_par_val'][indx])
            
    #check if observed data exist, simulate in case negative
    if user_input['path_to_obs'] == 'None':
        user_input['dataset1'] = user_input['simulation_func'](user_input['simulation_input'])

        #save data to file 
        op1 = open('synthetic_data.dat', 'w')
        for line in user_input['dataset1']:
            for item in line:
                op1.write(str(item) + '    ')
            op1.write('\n')
        op1.close()

    dist_try = user_input['distance_func'](user_input['dataset1'], user_input)
    if 'dist_dim' not in user_input.keys():    
        user_input['dist_dim'] = len(dist_try)


    #initiate ABC construct
    sampler_ABC = ABC(params=user_input) 

    #build first particle system
    sys1 = sampler_ABC.BuildFirstPSystem()

    #update particle system until convergence
    
    sampler_ABC.fullABC(nruns=int(user_input['nruns'][0]))

    #plot results
    if len(user_input['param_to_fit'] ) == 1 :
        plot_1p(sampler_ABC.T, 'results.pdf', user_input)

    elif len(user_input['param_to_fit'] ) == 2 :
        plot_2p(sampler_ABC.T, 'results.pdf', user_input)      

    elif len(user_input['param_to_fit'] ) == 3 :
        plot_3p(sampler_ABC.T, 'results.pdf', user_input)

    else:
        raise ValueError('Only 1, 2, and 3 dimensional plots are implemented so far!')
Exemplo n.º 4
0
def main(args):

    user_input = read_input(args.input)

    if args.functions:
        m1 = imp.load_source(args.functions[:-3], args.functions)

        for l1 in range(user_input['npar']):
            par = user_input['param_to_fit'][l1]
            if isinstance(user_input['prior'][par]['func'], str):
                user_input['prior'][par]['func'] = getattr(
                    m1, user_input['prior_func'][l1])

        if isinstance(user_input['simulation_func'][0], str):
            user_input['simulation_func'] = getattr(
                m1, user_input['simulation_func'][0])

        if isinstance(user_input['distance_func'][0], str):
            user_input['distance_func'] = getattr(
                m1, user_input['distance_func'][0])

    #check if observed data exist, simulate in case negative
    if user_input['path_to_obs'] == 'None':
        user_input['dataset1'] = user_input['simulation_func'](
            user_input['simulation_input'])

    if 'dist_dim' not in user_input.keys():
        user_input['dist_dim'] = len(user_input['distance_func'](
            user_input['dataset1'], user_input))

    #plot results
    if len(user_input['param_to_fit']) == 1:
        plot_1p(int(args.PS), 'results.pdf', user_input)

    elif len(user_input['param_to_fit']) == 2:
        plot_2p(int(args.PS), 'results.pdf', user_input)

    elif len(user_input['param_to_fit']) == 3:
        plot_3p(int(args.PS), 'results.pdf', user_input)

    else:
        raise ValueError(
            'Only 1, 2 and 3 dimensional plots are implemented so far!')
Exemplo n.º 5
0
def main(args):

    user_input = read_input(args.input)
    user_input['simulation_func'] = numcosmo_sim_cluster

    if user_input['path_to_obs'] == 'None':
        raise IOError(
            'It is not possible to continue a process without determining a static data set.'
        )

    #initiate NumCosmo object necessary for simulation
    Cosmo = ChooseParamsInput()
    Cosmo.params = user_input['simulation_input']
    Cosmo.params["OL"] = 1. - Cosmo.params['Om'] - Cosmo.params['Ob']

    #assign input for simulation
    user_input['simulation_params'] = Cosmo.params

    if args.functions != None:
        m1 = imp.load_source(args.functions[:-3], args.functions)

        if isinstance(user_input['distance_func'][0], str):
            user_input['distance_func'] = getattr(
                m1, user_input['distance_func'][0])
            dtemp = user_input['distance_func'](user_input['dataset1'],
                                                user_input)
            user_input['dist_dim'] = len(dtemp)

    for par in user_input['param_to_fit']:
        l1 = user_input['param_to_fit'].index(par)
        if isinstance(user_input['prior'][par]['func'], str):
            user_input['prior'][par]['func'] = getattr(
                m1, user_input['prior_func'][l1])

    #initiate ABC construct
    sampler_ABC = ABC(params=user_input)

    #define finished particle system index
    sampler_ABC.T = int(args.PS)

    #continue from previous run
    sampler_ABC.ContinueStoppedRun(int(args.PS),
                                   nruns=int(user_input['nruns'][0]))
Exemplo n.º 6
0
def main( args ):

    user_input = read_input( args.input )

    if args.functions:
        m1 = imp.load_source( args.functions[:-3], args.functions )

        for l1 in range( user_input['npar'] ):
            par = user_input['param_to_fit'][l1]
            if isinstance( user_input['prior'][par]['func'], str): 
                user_input['prior'][par]['func'] = getattr(m1, user_input['prior_func'][l1])

        if isinstance(user_input['simulation_func'][0], str): 
            user_input['simulation_func'] = getattr(m1, user_input['simulation_func'][0])

        if  isinstance(user_input['distance_func'][0], str):
            user_input['distance_func'] = getattr(m1, user_input['distance_func'][0])

    #check if observed data exist, simulate in case negative
    if user_input['path_to_obs'] == 'None':
        user_input['dataset1'] = user_input['simulation_func'](user_input['simulation_input'])

     
    if 'dist_dim' not in user_input.keys():    
        user_input['dist_dim'] = len(user_input['distance_func'](user_input['dataset1'], user_input))
  
            

    #plot results
    if len( user_input['param_to_fit'] ) == 1 :
        plot_1p( int( args.PS ), 'results.pdf', user_input)

    elif len( user_input['param_to_fit'] ) == 2 :
        plot_2p( int( args.PS ), 'results.pdf', user_input )    

    elif len( user_input['param_to_fit'] ) == 3 :
        plot_3p( int( args.PS ), 'results.pdf', user_input )        

    else:
        raise ValueError('Only 1, 2 and 3 dimensional plots are implemented so far!')
Exemplo n.º 7
0
def main( args ):

    user_input = read_input( args.input )
    user_input['simulation_func'] = numcosmo_sim_cluster

    if user_input['path_to_obs'] == 'None':
        raise IOError('It is not possible to continue a process without determining a static data set.') 

    #initiate NumCosmo object necessary for simulation
    Cosmo=ChooseParamsInput()
    Cosmo.params = user_input['simulation_input']
    Cosmo.params["OL"]  = 1.- Cosmo.params['Om']-Cosmo.params['Ob']

    #assign input for simulation
    user_input['simulation_params'] = Cosmo.params

    if args.functions != None:
        m1 = imp.load_source( args.functions[:-3], args.functions )

        if isinstance(user_input['distance_func'][0], str):
            user_input['distance_func'] = getattr(m1, user_input['distance_func'][0])
            dtemp = user_input['distance_func'](user_input['dataset1'], user_input)
            user_input['dist_dim'] = len(dtemp)
    
    for par in user_input['param_to_fit']:
        l1 = user_input['param_to_fit'].index(par)
        if isinstance( user_input['prior'][par]['func'], str):            
            user_input['prior'][par]['func'] = getattr(m1, user_input['prior_func'][l1])


    #initiate ABC construct
    sampler_ABC = ABC(params = user_input) 

    #define finished particle system index
    sampler_ABC.T = int(args.PS)

    #continue from previous run
    sampler_ABC.ContinueStoppedRun(int(args.PS), nruns=int(user_input['nruns'][0]))
Exemplo n.º 8
0
def main( args ):

    user_input = read_input(args.input)

    if args.functions != None:
        m1 = imp.load_source( args.functions[:-3], args.functions )

        if isinstance(user_input['distance_func'][0], str):
            user_input['distance_func'] = getattr(m1, user_input['distance_func'][0])
    
    for l1 in range(user_input['npar']):
        par = user_input['param_to_fit'][l1]
        if isinstance(user_input['prior'][par]['func'], str):            
            user_input['prior'][par]['func'] = getattr(m1, user_input['prior_func'][l1])

    #initiate ABC construct
    sampler_ABC = ABC(params=user_input) 

    #build first particle system
    sys1 = sampler_ABC.BuildFirstPSystem()

    #update particle system until convergence
    sampler_ABC.fullABC(nruns=int(user_input['nruns'][0]))
Exemplo n.º 9
0
def main(args):

    params = read_input( args.input )
   
    if args.functions != None:
        m1 = imp.load_source( args.functions[:-3], args.functions )

        if isinstance(params['distance_func'], list):
            params['distance_func'] = getattr(m1, params['distance_func'][0])

        if isinstance(params['simulation_func'], list):
            params['simulation_func'] = getattr(m1, params['simulation_func'][0])

        for par in params['param_to_fit']:
            if isinstance(params['prior'][par]['func'], str):
                params['prior'][par]['func'] = getattr(m1, params['prior_func'][params['param_to_fit'].index(par)])

    if not args.output:
        output_file = raw_input('Enter root for output files (no extension):  ')
    else:
        output_file = args.output

    if 'dataset1' not in params:
        params['dataset1'] = params['simulation_func'](params['simulation_input'])

    if 'cov' in params['simulation_input']:
        try:
            fname_cov = args.covariance
            params['simulation_input']['cov'] = np.loadtxt(fname_cov)
            params['cov'] = np.loadtxt(fname_cov)
        except IOError:
            print 'Provide name of file containing covariance matrix!'

    #test distance between identical cataloges
    distance_equal = np.atleast_1d(params['distance_func'](params['dataset1'], params))

    if distance_equal.any() != 0.0:
        raise ValueError('Distance for 2 identical cataloges = ' + str(distance_equal))
    else:
        print 'Distance between identical cataloges = ' + str(distance_equal)

    #test a single distance calculation
    new_sim_input = DrawAllParams(params['prior'])

    for j in xrange(params['npar']):
        params['simulation_input'][params['param_to_fit'][j]] = new_sim_input[j]
 
    data_simul = params['simulation_func'](params['simulation_input'])   

    try:
        distance_single = params['distance_func'](data_simul, params)
        print 'New parameter value = ' + str(new_sim_input)
        print 'Distance between observed and simulated data = ' + str(distance_single) 
    except ValueError:
        print 'Error in calculating single distance with parameters:'
        for item in params['param_to_fit']:
            print item + '=' + str(params['simulation_input'][item])

    if str(distance_single) is 'nan':
        print 'NaN found!'
    
    #generate grid for distance behaviour inspection
    ngrid = int(raw_input('Enter number of draws in parameter grid: '))    
    param_grid = [DrawAllParams(params['prior']) for j1 in xrange(ngrid)]

    #open output data file
    op = open(output_file + '.dat', 'w')
    for par in params['param_to_fit']:
        op.write(par + '    ')
    for i1 in xrange(len(distance_equal)):
        op.write('dist' + str(i1 + 1) + '    ')
    op.write('\n')

    grid = []
    for pars in param_grid:

        if params['screen']:         
            print 'Particle index: ' + str(len(grid)+1)
 
        grid_element = list(pars)
 
        for j1 in xrange(params['npar']):
            params['simulation_input'][params['param_to_fit'][j1]] = pars[j1]
         
        data_simul_grid = params['simulation_func'](params['simulation_input']) 
        distance_grid = np.atleast_1d(params['distance_func'](data_simul_grid, params))
             
        if sum(distance_grid) < 9**9:
            for item in grid_element:
                op.write(str(item) + '   ')
 
            for elem in distance_grid:
                grid_element.append(elem)
                op.write(str(elem) + '    ')
            op.write('\n')
  
            grid.append(grid_element)                   

    op.close()

    grid = np.array(grid)

    #plot distance behaviour
    plt.figure()
    plt.subplots_adjust(top = 0.95, right=0.985, left=0.075, bottom=0.075, 
                        wspace=0.25, hspace=0.25)
    
    n=0
    for par_indx in xrange(params['npar']):
        p1 = params['param_to_fit'][par_indx]
        for dist_indx in xrange(len(distance_single)):

            n = n + 1
            ylim = np.std( grid[:,params['npar'] + dist_indx])
            plt.subplot(params['npar'], len(distance_single), n)
            plt.scatter(grid[:,par_indx], grid[:,params['npar'] + dist_indx])
            plt.xlabel(params['param_to_fit'][par_indx], fontsize=14)
            plt.ylabel('distance' + str(dist_indx + 1), fontsize=14)
            #plt.xticks(range(int(params['prior'][p1]['min']) - 1, 
            #           int(params['prior'][p1]['max']) + 1, int(params['prior'][p1]['max'] - params['prior'][p1]['min'] +2)/5), fontsize=8)
            plt.yticks(fontsize = 8)
            plt.ylim(-0.25*ylim, ylim)
   
    plt.savefig(output_file + '.pdf')
    plt.close()
  
    print '\n Figure containing distance results is stored in ' + output_file + '.pdf'
Exemplo n.º 10
0
10 - 16 December 2107, Passo del Tonale - Italy
"""

from cosmoabc.priors import flat_prior
from cosmoabc.ABC_sampler import ABC
from cosmoabc.ABC_functions import read_input
from cosmoabc.plots import plot_2p
import numpy as np

from my_functions import my_distance, my_simulation, my_prior

#user input file
filename = 'user.input'

#read  user input
Parameters = read_input(filename)

# update dictionary of user input parameters
# with customized functions
Parameters['distance_func'] = my_distance
Parameters['simulation_func'] = my_simulation
Parameters['prior']['mean']['func'] = my_prior

# in case you want to generate a pseudo-observed data set
Parameters['dataset1'] = my_simulation(Parameters['simulation_input'])

#calculate distance between 2 catalogues
dtemp = my_distance(Parameters['dataset1'], Parameters)

#determine dimension of distance output
Parameters['dist_dim'] = len(dtemp)
Exemplo n.º 11
0
def main(args):

    user_input = read_input(args.input)
    m1 = imp.load_source(args.functions[:-3], args.functions)

    user_input['simulation_func'] = getattr(m1,
                                            user_input['simulation_func'][0])

    if isinstance(user_input['distance_func'], list):
        user_input['distance_func'] = getattr(m1,
                                              user_input['distance_func'][0])

    for element in user_input['param_to_fit']:
        if isinstance(user_input['prior'][element]['func'], str):
            user_input['prior'][element]['func'] = getattr(
                m1, user_input['prior'][element]['func'])
            for pvar in user_input[element + '_prior_par_name'][:user_input[
                    element + '_prior_par_name'].index('#')]:
                indx = user_input[element + '_prior_par_name'].index(pvar)
                user_input['prior'][element][pvar] = float(
                    user_input[element + '_prior_par_val'][indx])

    #check if observed data exist, simulate in case negative
    if user_input['path_to_obs'] == 'None':
        user_input['dataset1'] = user_input['simulation_func'](
            user_input['simulation_input'])

        #save data to file
        op1 = open('synthetic_data.dat', 'w')
        for line in user_input['dataset1']:
            for item in line:
                op1.write(str(item) + '    ')
            op1.write('\n')
        op1.close()

    dist_try = user_input['distance_func'](user_input['dataset1'], user_input)
    if 'dist_dim' not in user_input.keys():
        user_input['dist_dim'] = len(dist_try)

    #initiate ABC construct
    sampler_ABC = ABC(params=user_input)

    #build first particle system
    sys1 = sampler_ABC.BuildFirstPSystem()

    #update particle system until convergence

    sampler_ABC.fullABC(nruns=int(user_input['nruns'][0]))

    #plot results
    if len(user_input['param_to_fit']) == 1:
        plot_1p(sampler_ABC.T, 'results.pdf', user_input)

    elif len(user_input['param_to_fit']) == 2:
        plot_2p(sampler_ABC.T, 'results.pdf', user_input)

    elif len(user_input['param_to_fit']) == 3:
        plot_3p(sampler_ABC.T, 'results.pdf', user_input)

    else:
        raise ValueError(
            'Only 1, 2, and 3 dimensional plots are implemented so far!')
Exemplo n.º 12
0
def main(args):

    params = read_input(args.input)

    if args.functions != None:
        m1 = imp.load_source(args.functions[:-3], args.functions)

        if isinstance(params['distance_func'], list):
            params['distance_func'] = getattr(m1, params['distance_func'][0])

        if isinstance(params['simulation_func'], list):
            params['simulation_func'] = getattr(m1,
                                                params['simulation_func'][0])

        for par in params['param_to_fit']:
            if isinstance(params['prior'][par]['func'], str):
                params['prior'][par]['func'] = getattr(
                    m1,
                    params['prior_func'][params['param_to_fit'].index(par)])

    if not args.output:
        output_file = raw_input(
            'Enter root for output files (no extension):  ')
    else:
        output_file = args.output

    if 'dataset1' not in params:
        params['dataset1'] = params['simulation_func'](
            params['simulation_input'])

    if 'cov' in params['simulation_input']:
        try:
            fname_cov = args.covariance
            params['simulation_input']['cov'] = np.loadtxt(fname_cov)
            params['cov'] = np.loadtxt(fname_cov)
        except IOError:
            print 'Provide name of file containing covariance matrix!'

    #test distance between identical cataloges
    distance_equal = np.atleast_1d(params['distance_func'](params['dataset1'],
                                                           params))

    if distance_equal.any() != 0.0:
        raise ValueError('Distance for 2 identical cataloges = ' +
                         str(distance_equal))
    else:
        print 'Distance between identical cataloges = ' + str(distance_equal)

    #test a single distance calculation
    new_sim_input = DrawAllParams(params['prior'])

    for j in xrange(params['npar']):
        params['simulation_input'][params['param_to_fit']
                                   [j]] = new_sim_input[j]

    data_simul = params['simulation_func'](params['simulation_input'])

    try:
        distance_single = params['distance_func'](data_simul, params)
        print 'New parameter value = ' + str(new_sim_input)
        print 'Distance between observed and simulated data = ' + str(
            distance_single)
    except ValueError:
        print 'Error in calculating single distance with parameters:'
        for item in params['param_to_fit']:
            print item + '=' + str(params['simulation_input'][item])

    if str(distance_single) is 'nan':
        print 'NaN found!'

    #generate grid for distance behaviour inspection
    ngrid = int(raw_input('Enter number of draws in parameter grid: '))
    param_grid = [DrawAllParams(params['prior']) for j1 in xrange(ngrid)]

    #open output data file
    op = open(output_file + '.dat', 'w')
    for par in params['param_to_fit']:
        op.write(par + '    ')
    for i1 in xrange(len(distance_equal)):
        op.write('dist' + str(i1 + 1) + '    ')
    op.write('\n')

    grid = []
    for pars in param_grid:

        if params['screen']:
            print 'Particle index: ' + str(len(grid) + 1)

        grid_element = list(pars)

        for j1 in xrange(params['npar']):
            params['simulation_input'][params['param_to_fit'][j1]] = pars[j1]

        data_simul_grid = params['simulation_func'](params['simulation_input'])
        distance_grid = np.atleast_1d(params['distance_func'](data_simul_grid,
                                                              params))

        if sum(distance_grid) < 9**9:
            for item in grid_element:
                op.write(str(item) + '   ')

            for elem in distance_grid:
                grid_element.append(elem)
                op.write(str(elem) + '    ')
            op.write('\n')

            grid.append(grid_element)

    op.close()

    grid = np.array(grid)

    #plot distance behaviour
    plt.figure()
    plt.subplots_adjust(top=0.95,
                        right=0.985,
                        left=0.075,
                        bottom=0.075,
                        wspace=0.25,
                        hspace=0.25)

    n = 0
    for par_indx in xrange(params['npar']):
        p1 = params['param_to_fit'][par_indx]
        for dist_indx in xrange(len(distance_single)):

            n = n + 1
            ylim = np.std(grid[:, params['npar'] + dist_indx])
            plt.subplot(params['npar'], len(distance_single), n)
            plt.scatter(grid[:, par_indx], grid[:, params['npar'] + dist_indx])
            plt.xlabel(params['param_to_fit'][par_indx], fontsize=14)
            plt.ylabel('distance' + str(dist_indx + 1), fontsize=14)
            #plt.xticks(range(int(params['prior'][p1]['min']) - 1,
            #           int(params['prior'][p1]['max']) + 1, int(params['prior'][p1]['max'] - params['prior'][p1]['min'] +2)/5), fontsize=8)
            plt.yticks(fontsize=8)
            plt.ylim(-0.25 * ylim, ylim)

    plt.savefig(output_file + '.pdf')
    plt.close()

    print '\n Figure containing distance results is stored in ' + output_file + '.pdf'