Example #1
0
def collect_exp_data(wdir):

    load_config('%s/input.py'%wdir)
    conf['bootstrap']=False
    istep=core.get_istep()
    core.mod_conf(istep) #--set conf as specified in istep   

    resman=RESMAN(nworkers=1,parallel=False,datasets=True)

    obsres={}
    if 'idis'   in conf['datasets'] : obsres['idis']   = resman.idisres
    if 'pidis'  in conf['datasets'] : obsres['pidis']  = resman.pidisres
    if 'sidis'  in conf['datasets'] : obsres['sidis']  = resman.sidisres
    if 'psidis' in conf['datasets'] : obsres['psidis'] = resman.psidisres
    if 'dy'     in conf['datasets'] : obsres['dy']     = resman.dyres
    if 'sia'    in conf['datasets'] : obsres['sia']    = resman.siares
   

    print('\ncollecting exp data using the setup as in %s\n'%wdir)

    data={} 
    for reaction in obsres:
        tabs={}
        for idx in obsres[reaction].tabs:
            tabs[idx]={}
            tabs[idx]['value']=obsres[reaction].tabs[idx]['value']
            tabs[idx]['alpha']=obsres[reaction].tabs[idx]['alpha']
        data[reaction]=tabs

    save(data,'%s/expdata.dat'%(wdir))

    #--close resman
    resman.shutdown()
Example #2
0
    def get_par(self, step, dep=[]):

        #--current value must be within min and max
        self.checklimits()

        #--initialize resman
        self.resman = RESMAN(self.nworkers)
        self.parman = self.resman.parman

        #--setups
        guess = self.get_guess(dep)
        bounds = self.get_bounds()
        self.set_counters()
        self.parman.set_new_params(guess, initial=True)

        #--run fit
        fit = least_squares(self.get_residuals,
                            guess,
                            bounds=bounds,
                            method='trf',
                            ftol=conf['ftol'])

        #--generate summary. It will update system with the final results
        self.gen_summary(step, fit.x)

        #--close resman
        self.resman.shutdown()

        return fit.x
Example #3
0
    def __init__(self, tag):

        load_config('data/input-%s.py' % tag)
        resman = RESMAN(nworkers=1, parallel=False, datasets=False)
        self.parman = resman.parman
        self.jar = np.load('data/jar-%s.npy' % tag,
                           allow_pickle=True,
                           encoding='latin1').item()
        self.parman.order = self.jar['order']
        self.par = self.jar['par']
        self.nrep = len(self.par)
Example #4
0
def gen_samples(wdir,nsamples=100,nsize=10):

    load_config('%s/input.py'%wdir)
    conf['bootstrap']=False
    istep=core.get_istep()
    core.mod_conf(istep) #--set conf as specified in istep   

    resman=RESMAN(nworkers=5,parallel=True,datasets=True)
    parman=resman.parman
    order=parman.order

    obsres={}
    if 'idis'   in conf['datasets'] : obsres['idis']   = resman.idisres
    if 'pidis'  in conf['datasets'] : obsres['pidis']  = resman.pidisres
    if 'sidis'  in conf['datasets'] : obsres['sidis']  = resman.sidisres
    if 'psidis' in conf['datasets'] : obsres['psidis'] = resman.psidisres
    if 'dy'     in conf['datasets'] : obsres['dy']     = resman.dyres
    if 'sia'    in conf['datasets'] : obsres['sia']    = resman.siares
   

    print('\ngen ml samples using the setup as in %s\n'%wdir)

    checkdir('%s/mlsamples'%wdir)

    data=gen_dataframe(parman.order,obsres,nsize)

    for _ in range(nsamples):
        lprint('progress: %d/%d'%(_,nsamples))
        par=parman.gen_flat(setup=True)
        res,rres,nres=resman.get_residuals(par)

        #--fill dataframe
        i=data['size']
        data['params'][i]=par
        for reaction in obsres:
            for idx in data['reactions'][reaction]:
                prediction=copy.copy(obsres[reaction].tabs[idx]['prediction'])
                data['reactions'][reaction][idx][i]=prediction
        data['size']+=1

        if data['size']==nsize:
            save(data,'%s/mlsamples/%s'%(wdir,id_generator(12)))
            data=gen_dataframe(parman.order,obsres,nsize)

    print     

    #--close resman
    resman.shutdown()
Example #5
0
def gen_dist_from_fitpack(wdir,dist):

    print('\ngenerating  %s tables for benchmark using %s'%(dist,wdir))

    load_config('%s/input.py'%wdir)
    istep=core.get_istep()
    core.mod_conf(istep) #--set conf as specified in istep   

    resman=RESMAN(nworkers=1,parallel=False,datasets=False)
    parman=resman.parman

    jar=load('%s/data/jar-%d.dat'%(wdir,istep))
    replicas=jar['replicas']

    X,Q2=gen_grid(dist)
    qpd=conf[dist]


    nx=len(X)
    nQ2=len(Q2)

    flavs=[-5,-4,-3,-2,-1,1,2,3,4,5,21]
    fmap={-5:'bb',-4:'cb',-3:'sb',-2:'ub',-1:'db'}
    fmap.update({5:'b',4:'c',3:'s',2:'u',1:'d'})
    fmap.update({21:'g'})


    #--gen qpd data per replica
    checkdir('%s/benchmark'%wdir)
    cnt=0
    for par in replicas:
        lprint('progress: %d/%d'%(cnt+1,len(replicas)))
        parman.set_new_params(par)

        data={}
        for _ in Q2:
            data[_]={}
            for flav in flavs:
                data[_][flav]=np.array([qpd.get_xF(x,_,fmap[flav]) for  x in X])
        save(data,'%s/benchmark/%s-%d.dat'%(wdir,dist,cnt))
        cnt+=1
    print
Example #6
0
def gen_tables(wdir, dist, file_name, info, info_only=False):

    print('\ngenerating LHAPDF tables for %s using %s' % (dist, wdir))

    load_config('%s/input.py' % wdir)
    istep = core.get_istep()
    core.mod_conf(istep)  #--set conf as specified in istep

    resman = RESMAN(nworkers=1, parallel=False, datasets=False)
    parman = resman.parman

    jar = load('%s/data/jar-%d.dat' % (wdir, istep))
    replicas = jar['replicas']

    #--check order consistency
    order = jar['order']
    parman.order = order

    #--create output dir
    checkdir(wdir + '/data/')
    checkdir(wdir + '/data/%s/' % file_name)

    #--gen lhapdf_data_files
    if info_only == False:
        cnt = 0
        for par in replicas:
            lprint('progress: %d/%d' % (cnt + 1, len(replicas)))
            parman.set_new_params(par)
            X, Q2, table = _gen_table(dist)
            gen_lhapdf_dat_file(X, Q2, table, wdir, file_name, cnt)
            cnt += 1
        print

    #--gen_lhapdf_info_file
    X, Q2 = gen_grid(dist)
    nrep = len(replicas)
    gen_lhapdf_info_file(X, Q2, nrep, wdir, file_name, info)
Example #7
0
def gen_lhapdf_info_file(wdir, idxs, tar, info, dirname='JAMSIM'):

    #--get tables
    X, Q2, table, replicas = get_tables(wdir, idxs, tar)

    #--get flav string
    flavs = ''
    for idx in idxs:
        flavs += '%d, ' % idx
    flavs = flavs.rstrip(',')

    #--kinematic limits
    xmin = X[0]
    xmax = X[-1]
    Qmin = Q2[0]**0.5
    Qmax = Q2[-1]**0.5

    #--qcd params
    load_config('%s/input.py' % wdir)
    RESMAN(nworkers=1, parallel=False, datasets=False)
    aS = [conf['alphaS'].get_alphaS(_) for _ in Q2]
    mZ = conf['aux'].mZ
    mb = conf['aux'].mb
    mc = conf['aux'].mc
    alphaSMZ = conf['aux'].alphaSMZ

    #--begin lhapdf info file
    lines = []
    lines.append('SetDesc:         "<description>"')
    lines.append('SetIndex:        <index>')
    lines.append('Authors:         <authors>')
    lines.append('Reference:       <reference>')
    lines.append('Format:          lhagrid1')
    lines.append('DataVersion:     1')
    lines.append('NumMembers:      1')
    lines.append('Particle:        <particle>')
    lines.append('Flavors:         [%s]' % flavs)
    lines.append('OrderQCD:        1')
    lines.append('FlavorScheme:    <flav scheme>')
    lines.append('NumFlavors:      %d' % len(idxs))
    lines.append('ErrorType:       no error')
    lines.append('XMin:            %0.2e' % xmin)
    lines.append('XMax:            %0.2e' % xmax)
    lines.append('QMin:            %0.2e' % Qmin)
    lines.append('QMax:            %0.2e' % Qmax)
    lines.append('MZ:              %f' % mZ)
    lines.append('MUp:             0.0')
    lines.append('MDown:           0.0')
    lines.append('MStrange:        0.0')
    lines.append('MCharm:          %f' % mc)
    lines.append('MBottom:         %f' % mb)
    lines.append('MTop:            180.0')
    lines.append('AlphaS_MZ:       %f' % alphaSMZ)
    lines.append('AlphaS_OrderQCD: 1')
    lines.append('AlphaS_Type:     ipol')
    line = 'AlphaS_Qs: ['
    for _ in Q2:
        line += ('%10.5e, ' % _**0.5).upper()
    line = line.rstrip(',') + ']'
    lines.append(line)
    line = 'AlphaS_Vals: ['
    for _ in aS:
        line += ('%10.5e, ' % _).upper()
    line = line.rstrip(',') + ']'
    lines.append(line)
    lines.append('AlphaS_Lambda4: 0')
    lines.append('AlphaS_Lambda5: 0')

    for i in range(len(lines)):
        for _ in info:
            lines[i] = lines[i].replace(_, info[_])

    lines = [l + '\n' for l in lines]
    checkdir('%s/lhapdf/%s' % (wdir, dirname))
    tab = open('%s/lhapdf/%s/%s.info' % (wdir, dirname, dirname), 'w')
    tab.writelines(lines)
    tab.close()
Example #8
0
############################################################################
# define datasets (kinematics) to perform the simulation

conf['datasets']={}
conf['datasets']['sidis']={}
conf['datasets']['sidis']['xlsx']={}
conf['datasets']['sidis']['xlsx'][1000]='./template.xlsx'  # |  proton   | pi+
conf['datasets']['sidis']['norm']={}
for idx in conf['datasets']['sidis']['xlsx']: conf['datasets']['sidis']['norm'][idx]={'value':1,'fixed':True,'min':0,'max':1}
conf['datasets']['sidis']['filters']={}


############################################################################
# run simulation
resman = RESMAN()
parman = conf['parman']
resman.get_residuals(parman.par)
print


############################################################################
# prepare the new pseudo data set and save it as xlsx file
simdata=pd.DataFrame(conf['sidis tabs'][1000])
simdata['value']=simdata['thy']
simdata['stat_u']=pd.Series(simdata['thy']*simdata['%stat']/100,index=simdata.index)
simdata['syst_u']=pd.Series(simdata['thy']*simdata['%syst']/100,index=simdata.index)
simdata=simdata.drop(['r-residuals','shift','alpha','residuals','yp','yh','W2','Shift','N','thy','%stat','%syst'],axis=1)
print simdata[:10]

writer = pd.ExcelWriter('simulation.xlsx')
Example #9
0
def get_parameters(wdir, Q2=None):
    load_config('%s/input.py' % wdir)
    istep = core.get_istep()

    replicas = core.get_replicas(wdir)
    ## 'conf' will be modified for each replica individually later in the loop over 'replicas'
    ## the reason for doing this is that 'fix parameters' has to be set correctly for each replica

    if 'ppdf' not in conf['steps'][istep]['active distributions']:
        print('ppdf-proton not in active distribution')
        return

    resman = RESMAN(nworkers=1, parallel=False, datasets=False)
    parman = resman.parman
    parman.order = replicas[0]['order'][
        istep]  ## make sure 'parman' uses the same order as all the replicas do
    # print parman.order

    ppdf = conf['ppdf']

    ## setup kinematics
    if Q2 == None: Q2 = conf['Q20']
    ## get parameters for all flavors of PDF
    print('\ngetting ppdf-parameters from %s at Q2 = %.2f' % (wdir, Q2))

    ## check if any of the shapes are fixed
    shape_1 = []
    shape_2 = []
    shape_3 = []
    for parameter in conf['params']['ppdf']:
        if '1' in parameter:
            shape_1.append(conf['params']['ppdf'][parameter]['fixed'])
        elif '2' in parameter:
            shape_2.append(conf['params']['ppdf'][parameter]['fixed'])
        elif '3' in parameter:
            shape_3.append(conf['params']['ppdf'][parameter]['fixed'])
        else:
            print('there seems to be more than three shapes')
            print(parameter)
            sys.exit('please update script %s' % __file__)

    fixed_shape_1 = False
    fixed_shape_2 = False
    fixed_shape_3 = False
    if (len(shape_1) != 0) and all([_ == True for _ in shape_1]):
        fixed_shape_1 = True
    elif len(shape_1) == 0:
        fixed_shape_1 = True
    if (len(shape_2) != 0) and all([_ == True for _ in shape_2]):
        fixed_shape_2 = True
    elif len(shape_2) == 0:
        fixed_shape_2 = True
    if (len(shape_3) != 0) and all([_ == True for _ in shape_3]):
        fixed_shape_3 = True
    elif len(shape_3) == 0:
        fixed_shape_3 = True

    parameters = {}
    if not fixed_shape_1: parameters[1] = {}
    if not fixed_shape_2: parameters[2] = {}
    if not fixed_shape_3: parameters[3] = {}

    n_replicas = len(replicas)
    for i in range(n_replicas):
        lprint('%d/%d' % (i + 1, n_replicas))

        parman.order = copy.copy(replicas[i]['order'][istep])
        core.mod_conf(istep, replicas[i])
        parman.set_new_params(replicas[i]['params'][istep], initial=True)

        for flavor, value in ppdf.params.iteritems():
            for j in parameters:
                if str(j) in flavor:
                    flavor_key = flavor.replace(str(j), '')
                    if flavor_key not in parameters[j]:
                        parameters[j][flavor_key] = {
                            'n': [],
                            'a': [],
                            'b': [],
                            'c': [],
                            'd': []
                        }

                    parameters[j][flavor_key]['n'].append(value[0])
                    parameters[j][flavor_key]['a'].append(value[1])
                    parameters[j][flavor_key]['b'].append(value[2])
                    parameters[j][flavor_key]['c'].append(value[3])
                    parameters[j][flavor_key]['d'].append(value[4])
                else:
                    pass

    ## remove c or d parameters if fixed in all flavors and shapes
    ## this is to avoid producing empty figures
    shapes_fixed_c = []
    shapes_fixed_d = []
    for shape in parameters:
        flavors_fixed_c = []
        flavors_fixed_d = []
        for flavor in parameters[shape]:
            cs = parameters[shape][flavor]['c']
            ds = parameters[shape][flavor]['d']
            if all([_ == cs[0] for _ in cs]):
                flavors_fixed_c.append(True)
            else:
                flavors_fixed_c.append(False)
            if all([_ == ds[0] for _ in ds]):
                flavors_fixed_d.append(True)
            else:
                flavors_fixed_d.append(False)

        if all(flavors_fixed_c):
            shapes_fixed_c.append(True)
        else:
            shapes_fixed_c.append(False)
        if all(flavors_fixed_d):
            shapes_fixed_d.append(True)
        else:
            shapes_fixed_d.append(False)

    if all(shapes_fixed_c):
        for shape in parameters:
            for flavor in parameters[shape]:
                del parameters[shape][flavor]['c']
        print('parameter c is fixed for shape %s' % shape)
    if all(shapes_fixed_d):
        for shape in parameters:
            for flavor in parameters[shape]:
                del parameters[shape][flavor]['d']
        print('parameter d is fixed for shape %s' % shape)

    print
    checkdir('%s/data' % wdir)
    if Q2 == conf['Q20']:
        save(parameters, '%s/data/ppdf-parameters-%d.dat' % (wdir, istep))
    else:
        save(parameters,
             '%s/data/ppdf-parameters-%d-%f.dat' % (wdir, istep, Q2))
Example #10
0
def get_moments(wdir, flavors, x_1, x_2, Q2=None):
    load_config('%s/input.py' % wdir)
    istep = core.get_istep()

    replicas = core.get_replicas(wdir)
    ## 'conf' will be modified for each replica individually later in the loop over 'replicas'
    ## the reason for doing this is that 'fix parameters' has to be set correctly for each replica

    if 'ppdf' not in conf['steps'][istep]['active distributions']:
        print('ppdf-proton not in active distribution')
        return

    resman = RESMAN(nworkers=1, parallel=False, datasets=False)
    parman = resman.parman
    parman.order = replicas[0]['order'][istep]
    ## make sure 'parman' uses the same order for active distributions as all the replicas do
    # print parman.order

    ppdf = conf['ppdf']

    ## setup kinematics
    # X = 10.0 ** np.linspace(-3, -1, 100)
    # X = np.append(X, np.linspace(0.1, 0.99, 100))
    if Q2 == None: Q2 = conf['Q20']
    print('\ngenerating momentus for polarized pdf-proton from %s at Q2 = %f' %
          (wdir, Q2))

    ## compute moments for all replicas
    moments = {}
    statistics = {}
    n_replicas = len(replicas)
    for i in range(n_replicas):
        lprint('%d/%d' % (i + 1, n_replicas))

        parman.order = copy.copy(replicas[i]['order'][istep])
        core.mod_conf(istep, replicas[i])
        parman.set_new_params(replicas[i]['params'][istep], initial=True)

        for flavor in flavors:
            if flavor not in moments: moments[flavor] = []
            if flavor not in statistics: statistics[flavor] = {}
            if flavor == 'up':
                func = lambda x: (ppdf.get_xF(x, Q2, 'u') + ppdf.get_xF(
                    x, Q2, 'ub')) / x
            elif flavor == 'dp':
                func = lambda x: (ppdf.get_xF(x, Q2, 'd') + ppdf.get_xF(
                    x, Q2, 'sb')) / x
            elif flavor == 'sp':
                func = lambda x: (ppdf.get_xF(x, Q2, 's') + ppdf.get_xF(
                    x, Q2, 'sb')) / x
            else:
                func = lambda x: ppdf.get_xF(x, Q2, flavor) / x

            moments[flavor].append(quad(func, x_1, x_2)[0])

    for flavor in flavors:
        statistics[flavor]['mean'] = np.mean(moments[flavor])
        statistics[flavor]['standard_deviation'] = np.std(moments[flavor])

    print
    for flavor in flavors:
        print flavor, ': ', statistics[flavor]

    checkdir('%s/data' % wdir)
    if Q2 == conf['Q20']:
        save({
            'Q2': Q2,
            'moments': moments,
            'statistics': statistics
        }, '%s/data/ppdf-moments-%s-to-%s-%d.dat' % (wdir, x_1, x_2, istep))
    else:
        save({
            'Q2': Q2,
            'moments': moments,
            'statistics': statistics
        }, '%s/data/ppdf-moments-%s-to-%s-%d-%f.dat' %
             (wdir, x_1, x_2, istep, Q2))
Example #11
0
def gen_xf(wdir, flavors, Q2=None):
    load_config('%s/input.py' % wdir)
    istep = core.get_istep()

    replicas = core.get_replicas(wdir)
    ## 'conf' will be modified for each replica individually later in the loop over 'replicas'
    ## the reason for doing this is that 'fix parameters' has to be set correctly for each replica

    if 'ppdf' not in conf['steps'][istep]['active distributions']:
        print('ppdf-proton not in active distribution')
        return

    resman = RESMAN(nworkers=1, parallel=False, datasets=False)
    parman = resman.parman
    parman.order = replicas[0]['order'][istep]
    ## make sure 'parman' uses the same order for active distributions as all the replicas do
    # print parman.order

    ppdf = conf['ppdf']

    ## setup kinematics
    xs = 10.0**np.linspace(-3, -1, 100)
    xs = np.append(xs, np.linspace(0.1, 0.99, 100))
    if Q2 == None: Q2 = conf['Q20']
    print('\ngenerating polarized pdf-proton from %s at Q2 = %f' % (wdir, Q2))

    ## compute xf for all replicas
    xfs = {}
    n_replicas = len(replicas)
    for i in range(n_replicas):
        lprint('%d/%d' % (i + 1, n_replicas))

        ## filter
        #flag=False
        #params=replica['params'][istep]
        #order=replica['order'][istep]
        #for i in range(len(order)):
        #    if order[i][0]!=1:continue
        #    if order[i][1]!='ppdf':continue
        #    #if order[i][2]=='s1 a':
        #    #   if params[i]<-0.9: flag=True
        #if flag: continue

        parman.order = copy.copy(replicas[i]['order'][istep])
        core.mod_conf(istep, replicas[i])
        parman.set_new_params(replicas[i]['params'][istep], initial=True)

        for flavor in flavors:
            if flavor not in xfs: xfs[flavor] = []
            if flavor == 'up':
                func = lambda x: ppdf.get_xF(x, Q2, 'u') + ppdf.get_xF(
                    x, Q2, 'ub')
            elif flavor == 'dp':
                func = lambda x: ppdf.get_xF(x, Q2, 'd') + ppdf.get_xF(
                    x, Q2, 'sb')
            elif flavor == 'sp':
                func = lambda x: ppdf.get_xF(x, Q2, 's') + ppdf.get_xF(
                    x, Q2, 'sb')
            else:
                func = lambda x: ppdf.get_xF(x, Q2, flavor)

            xfs[flavor].append([func(x) for x in xs])
    print
    checkdir('%s/data' % wdir)
    if Q2 == conf['Q20']:
        save({
            'X': xs,
            'Q2': Q2,
            'XF': xfs
        }, '%s/data/ppdf-%d.dat' % (wdir, istep))
    else:
        save({
            'X': xs,
            'Q2': Q2,
            'XF': xfs
        }, '%s/data/ppdf-%d-%f.dat' % (wdir, istep, Q2))
Example #12
0
def gen_xf(wdir, had, flavors=['g', 'u', 'ub', 'd', 'db', 's', 'sb'], Q2=None):

    fflabel = 'ff%s' % had
    print('\ngenerating ff-%s from %s' % (had, wdir))

    load_config('%s/input.py' % wdir)
    istep = core.get_istep()

    replicas = core.get_replicas(wdir)
    core.mod_conf(istep, replicas[0])  ## set conf as specified in istep

    if fflabel not in conf['steps'][istep]['active distributions']:
        print('ff-%s not in active distribution' % had)
        return

    resman = RESMAN(nworkers=1, parallel=False, datasets=False)
    parman = resman.parman

    jar = load('%s/data/jar-%d.dat' % (wdir, istep))
    ## 'jar' contains parameters and their orders
    replicas = jar['replicas']
    ## 'jar['replicas']' is a list, in which each element is a list of parameters obeying 'jar['order']'

    ff = conf[fflabel]

    ## setup kinematics
    X = np.linspace(0.01, 0.99, 100)
    if Q2 == None: Q2 = conf['Q20']

    ## compute XF for all replicas
    XF = {}
    cnt = 0
    for par in replicas:
        cnt += 1
        lprint('%d/%d' % (cnt, len(replicas)))

        ## filter
        #flag=False
        #params=replica['params'][istep]
        #order=replica['order'][istep]
        #for i in range(len(order)):
        #    if order[i][0]!=1:continue
        #    if order[i][1]!='pdf':continue
        #    #if order[i][2]=='s1 a':
        #    #   if params[i]<-0.9: flag=True
        #if flag: continue

        parman.set_new_params(par, initial=True)

        #print
        #print conf['ffpion'].get_xF(0.5,10.0,'u')
        #print conf['ffkaon'].get_xF(0.5,10.0,'u')
        #print ff.get_xF(0.5,10.0,'u')

        for flavor in flavors:
            if flavor not in XF: XF[flavor] = []
            if flavor == 'c' or flavor == 'cb' or flavor == 'c+cb':
                _Q2 = conf['aux'].mc2 + 1
            elif flavor == 'b' or flavor == 'bb' or flavor == 'b+bb':
                _Q2 = conf['aux'].mb2 + 1
            else:
                _Q2 = Q2
            if flavor == 'u+ub':
                func = lambda x: ff.get_xF(x, _Q2, 'u') + ff.get_xF(
                    x, _Q2, 'ub')
            elif flavor == 'd+db':
                func = lambda x: ff.get_xF(x, _Q2, 'd') + ff.get_xF(
                    x, _Q2, 'db')
            elif flavor == 's+sb':
                func = lambda x: ff.get_xF(x, _Q2, 's') + ff.get_xF(
                    x, _Q2, 'cb')
            elif flavor == 'c+cb':
                func = lambda x: ff.get_xF(x, _Q2, 'c') + ff.get_xF(
                    x, _Q2, 'cb')
            elif flavor == 'b+bb':
                func = lambda x: ff.get_xF(x, _Q2, 'b') + ff.get_xF(
                    x, _Q2, 'bb')
            else:
                func = lambda x: ff.get_xF(x, _Q2, flavor)

            XF[flavor].append([func(x) for x in X])
    #print func(0.5)
    print
    checkdir('%s/data' % wdir)
    if Q2 == conf['Q20']:
        save({
            'X': X,
            'Q2': Q2,
            'XF': XF
        }, '%s/data/ff%s-%d.dat' % (wdir, had, istep))
    else:
        save({
            'X': X,
            'Q2': Q2,
            'XF': XF
        }, '%s/data/ff%s-%d-%d.dat' % (wdir, had, istep, int(Q2)))
Example #13
0
def print_grouped_parameters(working_directory,
                             distribution_name,
                             i_replica=1):
    ## print parameters from replicas and PDF class to compare
    load_config('%s/input.py' % working_directory)
    istep = core.get_istep()

    replicas = core.get_replicas(working_directory)
    core.mod_conf(istep, replicas[0])  ## set conf as specified in istep

    if distribution_name not in conf['steps'][istep]['active distributions']:
        print('%s-proton is not an active distribution' % distribution_name)
        return

    resman = RESMAN(nworkers=1, parallel=False, datasets=False)
    parman = resman.parman
    parman.order = replicas[0]['order'][
        istep]  ## make sure 'parman' uses the same order as all the replicas do
    # print parman.order

    distribution = conf[distribution_name]

    print('%s parameters in class' % distribution_name)
    core.mod_conf(istep, replicas[i_replica - 1])
    parman.set_new_params(replicas[i_replica - 1]['params'][istep],
                          initial=True)
    for name, value in distribution.params.iteritems():
        if value[0] != 0.0:
            print '%7s: %.5e, %.5e, %.5e, %.5e, %.5e' % (
                name, value[0], value[1], value[2], value[3], value[4])

    print('%s parameters in replicas' % distribution_name)
    orders = []
    unique_orders = []
    values = []
    for i in range(len(replicas[i_replica - 1]['order'][istep])):
        order = replicas[i_replica - 1]['order'][istep][i]
        value = replicas[i_replica - 1]['params'][istep][i]
        if (order[0] == 1) and (order[1] == distribution_name):
            orders.append(order[2])
            unique_orders.append(order[2].split(' ')[0])
            values.append(value)

    unique_orders = list(set(unique_orders))
    for unique_order in unique_orders:
        parameters = []
        all_parameters = {'N': None, 'a': 0.0, 'b': 0.0, 'c': 0.0, 'd': 0.0}
        for i in range(len(orders)):
            if orders[i].split(' ')[0] == unique_order:
                all_parameters[orders[i].split(' ')[1]] = values[i]
        if all_parameters == {
                'N': None,
                'a': 0.0,
                'b': 0.0,
                'c': 0.0,
                'd': 0.0
        }:
            continue
        if all_parameters['N'] == None:
            print '%7s: None, %.5e, %.5e, %.5e, %.5e' % (
                unique_order, all_parameters['a'], all_parameters['b'],
                all_parameters['c'], all_parameters['d'])
        else:
            print '%7s: %.5e, %.5e, %.5e, %.5e, %.5e' % (
                unique_order, all_parameters['N'], all_parameters['a'],
                all_parameters['b'], all_parameters['c'], all_parameters['d'])