def readrun(LogLikelihood,Prior,n_dims,n_params,inpar,bin_num,n_print,outputfiles_basename,outputfiles_filename):
    #print "readrun() in scanmanner.py 01llllllll"
    #print outputfiles_basename,outputfiles_filename
    f_out = open(os.path.join(outputfiles_basename,outputfiles_filename),'w')
    import manfun as mf 
    Ploter = mf.plot() 
    Ploter.setPlotPar(outputfiles_basename)

    for i,name in enumerate(inpar):
      try:
        Ploter._data[name]
      except:
        sf.ErrorStop('Input parameter "%s" could not found in ScanInf.txt.'%name)
 
    for i,name in enumerate(inpar):
      ntotal = len(Ploter._data[name])
      break

    cube = []
    for i in range(n_params): cube.append(0)

    sf.Info('Begin read scan ...')
    
    Naccept = 0

    for Nrun in range(ntotal):
        iner = Nrun
        for i,name in enumerate(inpar):
            cube[i] = Ploter._data[name][iner]
        
        loglike = LogLikelihood(cube, n_dims, n_params)
        #if loglike > sf.log_zero:
        if True:
            Naccept += 1
            f_out.write('\t'.join([str(x) for x in cube])+'\t'+str(loglike)+'\n')
            f_out.flush()

        if (Nrun+1)%n_print == 0:
            print '------------ Num: %i ------------'%(Nrun+1)
            print 'Input    par   = '+str(cube[0:n_dims])
            print 'Output   par   = '+str(cube[n_dims:n_params])
            print '     loglike   = '+str(loglike)
            print 'Accepted Num   = '+str(Naccept)
            print 'Total    Num   = '+str(Nrun+1)
print 'rank=', rank

# # common_object=dict()
# common_object['ES']       = mf.EasyScanInput()
# common_object['Programs'] ={}
# common_object['CS']       = mf.constraint()
# common_object['Ploter']   = mf.plot()
# common_object['ProgID']   = readin.ReadIn(sys.argv[1],common_object['ES'],common_object['Programs'],common_object['CS'],common_object['Ploter'])
# print 'Broad Casting ...'
# comm.bcast(common_object,root=0)

# define basic class object
ES = mf.EasyScanInput()
Programs = {}
CS = mf.constraint()
Ploter = mf.plot()
ProgID = readin.ReadIn(sys.argv[1], ES, Programs, CS, Ploter)
log_zero = -1e+100
print 'main: programs=', Programs
print 'main:ProgID=', ProgID


def LogLikelihood(cube, ndim, nparams):
    for i, name in enumerate(ES.InPar):
        ES.InPar[name] = cube[i]
        ES.AllPar[name] = cube[i]
        # Run each programs

    for ii in ProgID:
        if Programs[ii].getRunFlag(ES.AllPar):
            Programs[ii].WriteInputFile(ES.AllPar)
import PyPolyChord
from scanmanner import PolyChordrun
from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
common_object = dict()

my_root = rank - 1
# read in ini file
if rank == my_root:
    # common_object=dict()
    common_object['ES'] = mf.EasyScanInput()
    common_object['Programs'] = {}
    common_object['CS'] = mf.constraint()
    common_object['Ploter'] = mf.plot()
    common_object['ProgID'] = readin.ReadIn(sys.argv[1], common_object['ES'],
                                            common_object['Programs'],
                                            common_object['CS'],
                                            common_object['Ploter'])
    print 'Broad Casting ...'
    comm.bcast(common_object, root=my_rank)
elif rank != 0:

    def LogLikelihood(cube, ndim, nparams):
        for i, name in enumerate(ES.InPar):
            ES.InPar[name] = cube[i]
            ES.AllPar[name] = cube[i]
        # Run each programs

        for ii in ProgID: