Exemplo n.º 1
0
def update_idis_tabs(wdir, tabs, tar):

    load_config('%s/input.py' % wdir)
    istep = core.get_istep()
    data = load('%s/data/predictions-%d-sim.dat' % (wdir, istep))

    blist = []
    blist.append('thy')
    blist.append('shift')
    blist.append('residuals')
    blist.append('prediction')
    blist.append('N')
    blist.append('Shift')
    blist.append('W2')
    blist.append('alpha')
    blist.append('residuals-rep')
    blist.append('r-residuals')

    for _ in data['reactions']:
        for idx in data['reactions'][_]:
            print('update %s %d%s...' % (_, idx, tar))
            tab = data['reactions'][_][idx]
            for k in blist:
                try:
                    del tab[k]
                except:
                    continue

            tab['value'] = np.mean(tab['prediction-rep'], axis=0)
            for i in range(len(tab['prediction-rep'])):
                tab['value%s' % (i + 1)] = tab['prediction-rep'][i]
            del tab['prediction-rep']
            df = pd.DataFrame(tab)
            df.to_excel('%s/sim/%s%s.xlsx' % (wdir, idx, tar), index=False)
Exemplo n.º 2
0
def get_norm(wdir, kc):
    istep = core.get_istep()
    replicas = core.get_replicas(wdir)
    core.mod_conf(istep, replicas[0])  #--set conf as specified in istep

    tab = {}
    for replica in replicas:
        order = replica['order'][istep]
        #for _ in order: print(_,istep)
        #sys.exit()
        params = replica['params'][istep]
        for i in range(len(order)):
            if order[i][0] == 2:
                reaction = order[i][1]
                idx = order[i][2]
                if reaction not in tab: tab[reaction] = {}
                if idx not in tab[reaction]: tab[reaction][idx] = []
                tab[reaction][idx].append(params[i])

    for reaction in tab:
        for idx in tab[reaction]:
            norm = tab[reaction][idx][:]
            tab[reaction][idx] = {}
            tab[reaction][idx]['mean'] = np.mean(norm)
            tab[reaction][idx]['std'] = np.std(norm)

    return tab
Exemplo n.º 3
0
    def line_figure(self, wdir, Q2, dpi):
        ## this block may contain something not useful
        load_config('%s/input.py' % wdir)
        istep = core.get_istep()
        # jar = load('%s/data/jar-%d.dat' % (wdir, istep))
        labels = load('%s/data/labels-%d.dat' % (wdir, istep))
        self.cluster = labels['cluster']
        self.cluster_average_chi2 = labels['cluster_average_chi2']
        self.best_cluster = np.argmin(self.cluster_average_chi2)

        nrows, ncols = 1, 1
        fig = py.figure(figsize=(ncols * 5.0, nrows * 3.0))
        ax = py.subplot(nrows, ncols, 1)

        ## polarized PDF
        if Q2 == None: Q2 = conf['Q20']
        if Q2 == conf['Q20']:
            self.xf_data = load('%s/data/ppdf-%d.dat' % (wdir, istep))
        else:
            self.xf_data = load('%s/data/ppdf-%d-%f.dat' % (wdir, istep, Q2))

        print '\nplotting polarized PDF line figure from %s at Q2 = %.2f' % (
            wdir, Q2)
        self.plot_lines(ax, 'g', 'r', all_cluster=2)

        ax.set_ylim(-0.11, 0.3)
        ax.set_yticks([-0.1, 0.0, 0.1, 0.2])
        ax.set_yticklabels([r'$-0.1$', r'$0.0$', r'$0.1$', r'$0.2$'])
        # ax.text(0.7, 0.8, r'\boldmath$x\Delta g$', color = 'k', transform = axs[3].transAxes, size = 28)
        ax.title.set_text(
            r'\boldmath$x\Delta g~\mathrm{at}~Q^2 = %.2f~\mathrm{GeV}^2$' % Q2)

        legends = ax.legend(frameon=0, loc='best')
        for line in legends.get_lines():
            line.set_linewidth(1.0)

        ax.semilogx()
        ax.set_xlim(8e-3, 9e-1)
        ax.set_xticks([1e-2, 1e-1])
        ax.tick_params(axis='both',
                       which='both',
                       right=True,
                       top=True,
                       direction='in',
                       labelsize=20)
        ax.set_xticklabels([r'', r''])

        ax.axhline(0.0, color='k', linestyle='dashdot', linewidth=0.5)
        ax.set_xticks([0.01, 0.1, 0.5, 0.8])
        ax.set_xticklabels([r'$0.01$', r'$0.1$', r'$0.5$', r'$0.8$'])

        # py.subplots_adjust(left = 0.12, bottom = 0.08, right = 0.99, top = 0.97, wspace = None, hspace = 0.2)
        py.tight_layout()
        if Q2 == conf['Q20']:
            py.savefig('%s/gallery/ppdf-lines-pjet-%d.png' % (wdir, istep),
                       dpi=dpi)
        else:
            py.savefig('%s/gallery/ppdf-lines-pjet-%d-%f.png' %
                       (wdir, istep, Q2),
                       dpi=dpi)
Exemplo n.º 4
0
def get_chi2(wdir, kc):

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

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

    tab = {}
    for reaction in data:
        for idx in data[reaction]:
            if reaction not in tab: tab[reaction] = {}
            if idx not in tab[reaction]: tab[reaction][idx] = {}

            value = data[reaction][idx]['value']
            alpha = data[reaction][idx]['alpha']
            thy = np.mean(data[reaction][idx]['prediction-rep'], axis=0)
            col = data[reaction][idx]['col'][0]
            res = (value - thy) / alpha
            chi2 = np.sum(res**2)
            npts = res.size
            chi2_npts = chi2 / npts

            tab[reaction][idx]['col'] = col
            tab[reaction][idx]['chi2'] = chi2
            tab[reaction][idx]['npts'] = npts
            tab[reaction][idx]['chi2_npts'] = chi2_npts
    return tab
Exemplo n.º 5
0
    def histogram_figure(self, wdir, Q2, dpi):
        ## plot histogram for parameters of all flavors
        load_config('%s/input.py' % wdir)
        istep = core.get_istep()
        # jar = load('%s/data/jar-%d.dat' % (wdir, istep))
        labels = load('%s/data/labels-%d.dat' % (wdir, istep))
        self.cluster = labels['cluster']
        self.best_cluster = np.argmin(labels['cluster_average_chi2'])

        if Q2 == None: Q2 = conf['Q20']
        if Q2 == conf['Q20']:
            self.ppdf_parameter_data = load('%s/data/ppdf-parameters-%d.dat' % (wdir, istep))
        else:
            self.ppdf_parameter_data = load('%s/data/ppdf-parameters-%d-%f.dat' % (wdir, istep, Q2))

        shapes = self.ppdf_parameter_data.keys()
        flavors = self.ppdf_parameter_data[shapes[0]].keys()

        for _ in sorted(self.ppdf_parameter_data[shapes[0]][flavors[0]]):
            print '\nplotting PPDF parameter %s histograms from %s' % (_, wdir)
            if len(flavors) == 8:
                n_rows, n_columns = 4, 2
                figure = py.figure(figsize = (n_columns * 5.0, n_rows * 3.0))
                axs = [py.subplot(n_rows, n_columns, count + 1) for count in range(8)]
                sys.exit('please make a subplot configuration for your flavors')
            elif len(flavors) == 7:
                n_rows, n_columns = 4, 2
                figure = py.figure(figsize = (n_columns * 5.0, n_rows * 3.0))
                axs = [py.subplot(n_rows, n_columns, count + 1) for count in range(8) if count != 7]
            else:
                sys.exit('please make a subplot configuration for your flavors')

            if sorted(flavors) == sorted(['g', 'up', 'ub', 'dp', 'db', 'sp', 'sb']):
                self.ppdf_histogram(axs[0], 'up', _, r'\boldmath$u_+$')
                self.ppdf_histogram(axs[1], 'ub', _, r'\boldmath$\overline{u}$')
                self.ppdf_histogram(axs[2], 'dp', _, r'\boldmath$d_+$')
                self.ppdf_histogram(axs[3], 'db', _, r'\boldmath$\overline{d}$')
                self.ppdf_histogram(axs[4], 'sp', _, r'\boldmath$s_+$')
                self.ppdf_histogram(axs[5], 'sb', _, r'\boldmath$\overline{s}$')
                self.ppdf_histogram(axs[6], 'g', _, r'\boldmath$g$')

            for ax in axs:
                # ax.semilogx()
                # ax.tick_params(axis = 'both', which = 'both', right = True, top = True, direction = 'in', labelsize = 20)
                # ax.set_xticklabels([r'', r''])
                ax.legend(frameon = 0, loc = 'best', fontsize = 17)

            axs[0].title.set_text(r'$\mathrm{parameter}~%s~\mathrm{at}~Q^2 = %.2f~\mathrm{GeV^2}$' % (_, Q2))
            axs[1].title.set_text(r'$\mathrm{parameter}~%s~\mathrm{at}~Q^2 = %.2f~\mathrm{GeV^2}$' % (_, Q2))

            py.tight_layout()
            if Q2 == conf['Q20']:
                py.savefig('%s/gallery/ppdf-histogram-pjet-%s-%d.png' % (wdir, _, istep), dpi = dpi)
            else:
                py.savefig('%s/gallery/ppdf-histogram-pjet-%s-%d-%f.png' % (wdir, _, istep, Q2), dpi = dpi)
Exemplo n.º 6
0
def make_figure(wdir,
                task,
                plot_with_factor=True,
                only_best_cluster=True,
                dpi=200):
    ## attribute 'plot_with_factor' is inherited from jet and not yet used
    ## it is kept there because someday it might be useful

    if task == 1:
        print('\nplotting PJET data from %s' % (wdir))
    elif task == 2:
        print('\nplotting PJET data over theory from %s' % (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

    predictions = load('%s/data/predictions-%d.dat' % (wdir, istep))
    if 'pjet' not in predictions['reactions']:
        print('PJET is not in data file')
        return
    labels = load('%s/data/labels-%d.dat' % (wdir, istep))
    cluster = labels['cluster']
    cluster_average_chi2 = labels['cluster_average_chi2']
    best_cluster = np.argmin(cluster_average_chi2)

    data = predictions['reactions']['pjet']

    for idx in data:
        predictions = copy.copy(data[idx]['prediction-rep'])
        del data[idx]['prediction-rep']
        del data[idx]['residuals-rep']
        if only_best_cluster:
            best_predictions = [
                predictions[i] for i in range(len(predictions))
                if cluster[i] == best_cluster
            ]
            data[idx]['thy'] = np.mean(best_predictions, axis=0)
            data[idx]['dthy'] = np.std(best_predictions, axis=0)**0.5
        else:
            all_predictions = [predictions[i] for i in range(len(predictions))]
            data[idx]['thy'] = np.mean(all_predictions, axis=0)
            data[idx]['dthy'] = np.std(all_predictions, axis=0)**0.5

    if task == 1:
        plot_data(wdir, data, istep, dpi, plot_with_factor)
        # for idx in data:
        #     plot_data_separate(wdir, data[idx], istep, idx, dpi, plot_with_factor)
    elif task == 2:
        ## this is copied from jet plot and not yet ready
        plot_data_on_theory(wdir, data, istep, dpi)

    return
Exemplo n.º 7
0
def plot_obs(wdir, kc):

    print('\nplotting ln data from %s' % (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

    predictions = load('%s/data/predictions-%d.dat' % (wdir, istep))
    data = predictions['reactions']['ln']
    plot_H1(wdir, istep, data[1000])
    plot_ZEUS(wdir, istep, data[2000])
Exemplo n.º 8
0
def plot_obs(wdir, only_best_cluster=True, dpi=200):

    print('\nplotting dy data from %s' % (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

    predictions = load('%s/data/predictions-%d.dat' % (wdir, istep))
    if 'dy' not in predictions['reactions']:
        print('DY is not in data file')
        return
    labels = load('%s/data/labels-%d.dat' % (wdir, istep))
    cluster = labels['cluster']
    cluster_average_chi2 = labels['cluster_average_chi2']
    best_cluster = np.argmin(cluster_average_chi2)

    data = predictions['reactions']['dy']

    for idx in data:
        predictions = copy.copy(data[idx]['prediction-rep'])
        del data[idx]['prediction-rep']
        del data[idx]['residuals-rep']
        if only_best_cluster:
            best_predictions = [
                predictions[i] for i in range(len(predictions))
                if cluster[i] == best_cluster
            ]
            data[idx]['thy'] = np.mean(best_predictions, axis=0)
            data[idx]['dthy'] = np.std(best_predictions, axis=0)**0.5
        else:
            all_predictions = [predictions[i] for i in range(len(predictions))]
            data[idx]['thy'] = np.mean(all_predictions, axis=0)
            data[idx]['dthy'] = np.std(all_predictions, axis=0)**0.5

    Q2_bins = []
    # Q2_bins.append([30, 40])
    Q2_bins.append([35, 45])  ## label pp:  37 < Q2 < 42   pd: idem
    Q2_bins.append([45, 52])  ## label pp:  47 < Q2 < 49   pd: idem
    Q2_bins.append([52, 60])  ## label pp:  54 < Q2 < 58   pd:  55 < Q2 < 57
    Q2_bins.append([60, 68])  ## label pp:  63 < Q2 < 66   pd:  62 < Q2 < 65
    Q2_bins.append([68, 75])  ## label pp:  70 < Q2 < 73   pd:  70 < Q2 < 72
    Q2_bins.append([100, 140])  ## label pp: 118 < Q2 < 131  pd: 124 < Q2 < 129
    Q2_bins.append([140, 160])  ## label pp: 148 < Q2 < 156  pd: 145 < Q2 < 154
    Q2_bins.append([160, 280])  ## label pp: 173 < Q2 < 222  pd:  73 < Q2 < 280

    plot_ratio(wdir, data, istep, Q2_bins, dpi)

    return
Exemplo n.º 9
0
def gen_conf_idis(wdir, idxs, tar, option=1, fn=None):

    load_config('%s/input.py' % wdir)
    istep = core.get_istep()
    conf['steps'][istep]['datasets']['idis'] = []
    conf['datasets']['idis']['filters'] = []

    for idx in idxs:
        conf['datasets']['idis']['xlsx'][idx] = './%s/sim/%d%s.xlsx' % (
            wdir, idx, tar)
        conf['steps'][istep]['datasets']['idis'].append(idx)

    if option == 1: conf['idis grid'] = 'prediction'
    elif option == 2: conf['idis grid'] = fn
    return conf
Exemplo n.º 10
0
def plot_obs(wdir, kc):

    print('\nplotting dy-pion data from %s' % (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

    predictions = load('%s/data/predictions-%d.dat' % (wdir, istep))
    if 'dy-pion' not in predictions['reactions']: return

    data = predictions['reactions']['dy-pion']
    plot_E615(wdir, istep, data[10001])
    plot_NA10(wdir, istep, data[10002], data[10003])

    return
Exemplo n.º 11
0
def plot_obs(wdir, kc):

    print('\nplotting DY-pion (qT) from %s' % (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

    predictions = load('%s/data/predictions-%d.dat' % (wdir, istep))
    #print(predictions['reactions'].keys())
    if 'pion_qT' not in predictions['reactions']: return

    data = predictions['reactions']['pion_qT']
    plot_E615_Q(wdir, istep, data[1001])
    plot_E615_xF(wdir, istep, data[1002])

    return
Exemplo n.º 12
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
Exemplo n.º 13
0
def plot_params(wdir,dist,kc):
    load_config('%s/input.py'%wdir)
    istep=core.get_istep()
    replicas = core.get_replicas(wdir) 
    core.mod_conf(istep,replicas[0])

    clusters,colors,nc,cluster_order = classifier.get_clusters(wdir,istep,kc)

    _order = replicas[0]['order'][istep]

    #--get correct order from dist
    order  = []
    idx    = []
    for i in range(len(_order)):
        if _order[i][1] != dist: continue
        order.append(_order[i][2])
        idx.append(i)

    #--get correct params from dist
    params = np.zeros((len(order),len(replicas)))
    for i in range(len(order)):
        for j in range(len(replicas)):
            params[i][j] = replicas[j]['params'][istep][idx[i]]

    #--create plot with enough space for # of parameters
    nrows, ncols = np.ceil(len(order)/5.0), 5
    fig = py.figure(figsize=(ncols*7,nrows*4))
    X = np.linspace(1,len(replicas),len(replicas))

    #--create plot
    for i in range(len(order)):
        ax = py.subplot(nrows,ncols, i+1)
        ax.set_title('%s'%(order[i]), size=20)
        #params = [replicas[j]['params'][istep][i] for j in range(len(replicas))]
        color  = [colors[clusters[j]] for j in range(len(replicas))]
        ax.scatter(X,params[i],color=color) 
        ax.plot(X,np.ones(len(X))*np.average(params[i]),'k--',alpha=0.5)

    filename='%s/gallery/%s-params.png'%(wdir,dist)
    checkdir('%s/gallery'%wdir)
    py.savefig(filename)
    print 'Saving figure to %s'%filename
Exemplo n.º 14
0
def print_individual_parameters(working_directory,
                                distribution,
                                norm,
                                index=0):
    load_config('%s/input.py' % working_directory)
    istep = core.get_istep()
    jar = load('%s/data/jar-%d.dat' % (working_directory, istep))

    if norm:
        for i in range(len(jar['order'])):
            if jar['order'][i][0] == 2:
                print jar['order'][i][1].ljust(8), '%s' % str(
                    jar['order'][i][2]).ljust(
                        10), ':', jar['replicas'][index][i]
    else:
        for i in range(len(jar['order'])):
            if (jar['order'][i][0] == 1) and (jar['order'][i][1]
                                              == distribution):
                print jar['order'][i][2].ljust(
                    13), ':', jar['replicas'][index][i]
Exemplo n.º 15
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)
Exemplo n.º 16
0
    def steps_comparison_figure(self, wdirs, Q2, dpi):
        step_keys = sorted(wdirs.keys())
        load_config('%s/input.py' % wdirs[step_keys[-1]])
        istep = core.get_istep()

        nrows, ncols = 1, 1
        fig = py.figure(figsize=(ncols * 5.0, nrows * 3.0))
        ax = py.subplot(nrows, ncols, 1)
        colors = ['y', 'r', 'b', 'g', 'm']

        ## PPDF
        self.xf_data = {}
        self.cluster = {}
        self.best_cluster = {}
        labels = {}
        if Q2 == None: Q2 = conf['Q20']
        if Q2 == conf['Q20']:
            for step_key in step_keys:
                self.xf_data[step_key] = load('%s/data/ppdf-%d.dat' %
                                              (wdirs[step_key], step_key))
                labels[step_key] = load('%s/data/labels-%d.dat' %
                                        (wdirs[step_key], step_key))
                self.cluster[step_key] = labels[step_key]['cluster']
                self.best_cluster[step_key] = np.argmin(
                    labels[step_key]['cluster_average_chi2'])
        else:
            for step_key in step_keys:
                self.xf_data[step_key] = load('%s/data/ppdf-%d-%f.dat' %
                                              (wdirs[step_key], step_key, Q2))
                labels[step_key] = load('%s/data/labels-%d.dat' %
                                        (wdirs[step_key], step_key))
                self.cluster[step_key] = labels[step_key]['cluster']
                self.best_cluster[step_key] = np.argmin(
                    labels[step_key]['cluster_average_chi2'])

        print '\nplotting PPDF band figure with following steps at Q2 = %.2f' % Q2
        print[wdirs[_] for _ in wdirs]

        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            label = r'$\mathrm{step~%02d}$' % step
            self.plot_band_steps(ax, step, 'g', color, alpha, label)
        ax.set_ylim(-0.11, 0.3)
        ax.set_yticks([-0.1, 0.0, 0.1, 0.2])
        ax.set_yticklabels([r'$-0.1$', r'$0.0$', r'$0.1$', r'$0.2$'])
        # ax.text(0.1, 0.1, r'\boldmath$x\Delta g$', color = 'k', transform = ax.transAxes, size = 28)
        ax.legend(frameon=0, loc='lower left', fontsize=7)

        ax.semilogx()
        ax.set_xlim(8e-3, 9e-1)
        ax.set_xticks([1e-2, 1e-1])
        ax.tick_params(axis='both',
                       which='both',
                       right=True,
                       top=True,
                       direction='in',
                       labelsize=20)
        ax.set_xticklabels([r'', r''])

        ax.axhline(0.0, color='k', linestyle='dashdot', linewidth=0.5)
        ax.set_xticks([0.01, 0.1, 0.5])
        ax.set_xticklabels([r'$0.01$', r'$0.1$', r'$0.5$'])
        ax.set_ylabel(r'$x \Delta g$', size=15)
        ax.set_xlabel(r'\boldmath$x$', size=15)
        ax.xaxis.set_label_coords(1.05, 0.0)

        py.tight_layout()
        # py.subplots_adjust(left=0.05, bottom=0.04, right=0.99, top=0.99, wspace=0.17, hspace=0.04)
        if Q2 == conf['Q20']:
            py.savefig('%s/gallery/ppdf-steps-pjet-%d.png' %
                       (wdirs[step_keys[-1]], istep),
                       dpi=dpi)
        else:
            py.savefig('%s/gallery/ppdf-steps-pjet-%d-%f.png' %
                       (wdirs[step_keys[-1]], istep, Q2),
                       dpi=dpi)
Exemplo n.º 17
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'])
Exemplo n.º 18
0
    def steps_comparison_figure(self, wdirs, Q2, dpi):
        step_keys = sorted(wdirs.keys())
        load_config('%s/input.py' % wdirs[step_keys[-1]])
        istep = core.get_istep()

        nrows, ncols = 2, 2
        fig = py.figure(figsize=(ncols * 5.0, nrows * 3.0))
        axs = [py.subplot(nrows, ncols, cnt + 1) for cnt in range(4)]
        colors = ['k', 'r', 'g', 'Yellow', 'b']

        ## PPDF
        self.xf_data = {}
        self.cluster = {}
        self.best_cluster = {}
        labels = {}
        if Q2 == None: Q2 = conf['Q20']
        if Q2 == conf['Q20']:
            for step_key in step_keys:
                self.xf_data[step_key] = load('%s/data/ppdf-%d.dat' %
                                              (wdirs[step_key], step_key))
                labels[step_key] = load('%s/data/labels-%d.dat' %
                                        (wdirs[step_key], step_key))
                self.cluster[step_key] = labels[step_key]['cluster']
                self.best_cluster[step_key] = np.argmin(
                    labels[step_key]['cluster_average_chi2'])
        else:
            for step_key in step_keys:
                self.xf_data[step_key] = load('%s/data/ppdf-%d-%f.dat' %
                                              (wdirs[step_key], step_key, Q2))
                labels[step_key] = load('%s/data/labels-%d.dat' %
                                        (wdirs[step_key], step_key))
                self.cluster[step_key] = labels[step_key]['cluster']
                self.best_cluster[step_key] = np.argmin(
                    labels[step_key]['cluster_average_chi2'])

        print '\nplotting PPDF band figure with following steps at Q2 = %.2f' % Q2
        print[wdirs[_] for _ in wdirs]

        ax = axs[0]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            self.plot_band_steps(ax, step, 'uv', color, alpha)
            self.plot_band_steps(ax, step, 'dv', color, alpha)
        ax.set_ylim(0.0, 0.5)
        ax.set_yticks([0.0, 0.1, 0.2, 0.3, 0.4, 0.5])
        ax.set_yticklabels([r'$0.1$', r'$0.2$', r'$0.3$', r'$0.4$', r'$0.5$'])
        ax.text(0.6,
                0.3,
                r'\boldmath$x\Delta u^+$',
                color='k',
                transform=axs[0].transAxes,
                size=28)

        ax = axs[1]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            self.plot_band_steps(ax, step, 'd/u', color, alpha)
        ax.set_ylim(-0.2, 0.0)
        ax.set_yticks([-0.05, -0.1, -0.15])
        ax.set_yticklabels([r'$-0.05$', r'$-0.10$', r'$-0.15$'])
        ax.text(0.05,
                0.15,
                r'\boldmath$x\Delta d^+$',
                color='k',
                transform=axs[1].transAxes,
                size=28)

        ax = axs[2]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            self.plot_band_steps(ax, step, 'db+ub', color, alpha)
        ax.set_ylim(-0.1, 0.05)
        ax.set_yticks([-0.08, -0.04, 0.0, 0.04])
        ax.set_yticklabels([r'$-0.08$', r'$-0.04$', r'$0.00$', r'$0.04$'])
        ax.text(0.1,
                0.7,
                r'\boldmath$x\Delta s^+$',
                color='k',
                transform=axs[2].transAxes,
                size=28)

        ax = axs[3]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            self.plot_band_steps(ax, step, 'db-ub', color, alpha)
        ax.set_ylim(-0.11, 0.3)
        ax.set_yticks([-0.1, 0.0, 0.1, 0.2])
        ax.set_yticklabels([r'$-0.1$', r'$0.0$', r'$0.1$', r'$0.2$'])
        ax.text(0.7,
                0.8,
                r'\boldmath$x\Delta g$',
                color='k',
                transform=axs[3].transAxes,
                size=28)

        ax = axs[4]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            self.plot_band_steps(ax, step, 's+sb', color, alpha)
        ax.text(0.6,
                0.8,
                r'\boldmath$x(s\!+\!\overline{s})$',
                color='k',
                transform=ax.transAxes,
                size=28)
        ax.set_ylim(0.0, 0.48)
        ax.set_yticks([0.0, 0.1, 0.2, 0.3, 0.4])
        ax.set_yticklabels([r'$0$', r'', r'$0.2$', r'', r'$0.4$'])

        ax = axs[5]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            self.plot_band_steps(ax, step, 'rs', color, alpha)
        ax.text(0.05,
                0.78,
                r'\boldmath$R_s$',
                color='k',
                transform=ax.transAxes,
                size=30)
        ax.set_ylim(0.0, 1.6)
        ax.set_yticks([0.0, 0.5, 1.0, 1.5])
        ax.set_yticklabels([r'$0$', r'$0.5$', r'$1$', r'$1.5$'])

        ax = axs[6]
        for i in range(len(step_keys)):
            step = step_keys[i]
            # alpha = (1.0 / len(step_keys)) * (len(step_keys) - i)
            alpha = 0.5
            color = colors[i]
            label = r'$\mathrm{step~%02d}$' % step
            self.plot_band_steps(ax, step, 'g', color, alpha, label)
        ax.text(0.8,
                0.8,
                r'\boldmath$xg$',
                color='k',
                transform=ax.transAxes,
                size=31)
        ax.set_ylim(0.0, 2.5)
        ax.set_yticks([0.0, 0.5, 1.0, 1.5, 2.0])
        ax.legend(frameon=0,
                  loc='best',
                  bbox_to_anchor=[1.87, 0.9],
                  fontsize=20)

        for ax in axs:
            ax.semilogx()
            ax.set_xlim(8e-3, 9e-1)
            ax.set_xticks([1e-2, 1e-1])
            # ax.xaxis.set_label_coords(0.95, -0.05)
            ax.tick_params(axis='both',
                           which='both',
                           right=True,
                           top=True,
                           direction='in',
                           labelsize=20)
            ax.set_xticklabels([r'', r''])
            ax.xaxis.set_label_coords(0.7, -0.05)
            ax.legend(frameon=0, loc='best')

        axs[2].axhline(0.0, color='k', linestyle='dashdot', linewidth=0.5)
        axs[3].axhline(0.0, color='k', linestyle='dashdot', linewidth=0.5)
        for i in range(len(axs) - 1, len(axs) - 1 - ncols, -1):
            axs[i].set_xlabel(r'\boldmath$x$', size=30)
            # axs[i].text(0.84, -0.095, r'$0.5$', color = 'k', transform = ax.transAxes, size = 20)
            axs[i].set_xticks([0.01, 0.1, 0.5, 0.8])
            axs[i].set_xticklabels([r'$0.01$', r'$0.1$', r'$0.5$', r'$0.8$'])

        py.tight_layout()
        py.subplots_adjust(left=0.05,
                           bottom=0.04,
                           right=0.99,
                           top=0.99,
                           wspace=0.17,
                           hspace=0.04)
        if Q2 == conf['Q20']:
            py.savefig('%s/gallery/ppdf-steps-%d.png' %
                       (wdirs[step_keys[-1]], istep),
                       dpi=dpi)
        else:
            py.savefig('%s/gallery/ppdf-steps-%d-%f.png' %
                       (wdirs[step_keys[-1]], istep, Q2),
                       dpi=dpi)
Exemplo n.º 19
0
    def line_figure(self, wdir, Q2, dpi):
        ## this block may contain something not useful
        load_config('%s/input.py' % wdir)
        istep = core.get_istep()
        # jar = load('%s/data/jar-%d.dat' % (wdir, istep))
        labels = load('%s/data/labels-%d.dat' % (wdir, istep))
        self.cluster = labels['cluster']
        self.cluster_average_chi2 = labels['cluster_average_chi2']
        self.best_cluster = np.argmin(self.cluster_average_chi2)

        nrows, ncols = 2, 2
        fig = py.figure(figsize=(ncols * 5.0, nrows * 3.0))
        axs = [py.subplot(nrows, ncols, cnt + 1) for cnt in range(4)]

        ## polarized PDF
        if Q2 == None: Q2 = conf['Q20']
        if Q2 == conf['Q20']:
            self.xf_data = load('%s/data/ppdf-%d.dat' % (wdir, istep))
        else:
            self.xf_data = load('%s/data/ppdf-%d-%f.dat' % (wdir, istep, Q2))

        print '\nplotting polarized PDF line figure from %s at Q2 = %.2f' % (
            wdir, Q2)
        self.plot_lines(axs[0], 'up', 'r', all_cluster=2)
        self.plot_lines(axs[1], 'dp', 'r', all_cluster=2)
        self.plot_lines(axs[2], 'sp', 'r', all_cluster=2)
        self.plot_lines(axs[3], 'g', 'r', all_cluster=2)

        axs[0].set_ylim(0.0, 0.5)
        axs[0].set_yticks([0.0, 0.1, 0.2, 0.3, 0.4, 0.5])
        axs[0].set_yticklabels(
            [r'$0.1$', r'$0.2$', r'$0.3$', r'$0.4$', r'$0.5$'])
        # axs[0].text(0.6, 0.3, r'\boldmath$x\Delta u^+$', color = 'k', transform = axs[0].transAxes, size = 28)
        axs[0].title.set_text(
            r'\boldmath$x\Delta u^+~\mathrm{at}~Q^2 = %.2f~\mathrm{GeV}^2$' %
            Q2)
        axs[1].set_ylim(-0.2, 0.0)
        axs[1].set_yticks([-0.05, -0.1, -0.15])
        axs[1].set_yticklabels([r'$-0.05$', r'$-0.10$', r'$-0.15$'])
        # axs[1].text(0.05, 0.15, r'\boldmath$x\Delta d^+$', color = 'k', transform = axs[1].transAxes, size = 28)
        axs[1].title.set_text(
            r'\boldmath$x\Delta d^+~\mathrm{at}~Q^2 = %.2f~\mathrm{GeV}^2$' %
            Q2)
        axs[2].set_ylim(-0.1, 0.05)
        axs[2].set_yticks([-0.08, -0.04, 0.0, 0.04])
        axs[2].set_yticklabels([r'$-0.08$', r'$-0.04$', r'$0.00$', r'$0.04$'])
        # axs[2].text(0.1, 0.7, r'\boldmath$x\Delta s^+$', color = 'k', transform = axs[2].transAxes, size = 28)
        axs[2].title.set_text(r'\boldmath$x\Delta s^+$')
        axs[3].set_ylim(-0.11, 0.3)
        axs[3].set_yticks([-0.1, 0.0, 0.1, 0.2])
        axs[3].set_yticklabels([r'$-0.1$', r'$0.0$', r'$0.1$', r'$0.2$'])
        # axs[3].text(0.7, 0.8, r'\boldmath$x\Delta g$', color = 'k', transform = axs[3].transAxes, size = 28)
        axs[3].title.set_text(r'\boldmath$x\Delta g$')

        for ax in axs:
            ax.semilogx()
            ax.set_xlim(8e-3, 9e-1)
            ax.set_xticks([1e-2, 1e-1])
            # ax.xaxis.set_label_coords(0.95, -0.05)
            ax.tick_params(axis='both',
                           which='both',
                           right=True,
                           top=True,
                           direction='in',
                           labelsize=20)
            ax.set_xticklabels([r'', r''])

        axs[2].axhline(0.0, color='k', linestyle='dashdot', linewidth=0.5)
        axs[3].axhline(0.0, color='k', linestyle='dashdot', linewidth=0.5)
        # for i in range(len(axs)):
        #     if (i % ncols) == 0: axs[i].set_ylabel(r'$xf(x)$', size = 20)
        for i in range(len(axs) - 1, len(axs) - 1 - ncols, -1):
            axs[i].set_xlabel(r'\boldmath$x$', size=30)
            # axs[i].text(0.84, -0.095, r'$0.5$', color = 'k', transform = ax.transAxes, size = 20)
            axs[i].set_xticks([0.01, 0.1, 0.5, 0.8])
            axs[i].set_xticklabels([r'$0.01$', r'$0.1$', r'$0.5$', r'$0.8$'])

        legends = axs[0].legend(frameon=0, loc='best')
        for line in legends.get_lines():
            line.set_linewidth(1.0)

        py.subplots_adjust(left=0.12,
                           bottom=0.08,
                           right=0.99,
                           top=0.97,
                           wspace=None,
                           hspace=0.2)
        py.tight_layout()
        if Q2 == conf['Q20']:
            py.savefig('%s/gallery/ppdf-lines-%d.png' % (wdir, istep), dpi=dpi)
        else:
            py.savefig('%s/gallery/ppdf-lines-%d-%f.png' % (wdir, istep, Q2),
                       dpi=dpi)
Exemplo n.º 20
0
    def line_figure1(self, wdir, had):
        # self.cluster, colors, nc, order = self.get_clusters(wdir, istep)

        print 'Generating ff plot'

        load_config('%s/input.py' % wdir)
        istep = core.get_istep()
        jar = load('%s/data/jar-%d.dat' % (wdir, istep))
        labels = load('%s/data/labels-%d.dat' % (wdir, istep))
        self.cluster = labels['cluster']
        n_replicas = len(self.cluster)
        self.best_cluster = 0

        nrows, ncols = 2, 3
        fig = py.figure(figsize=(ncols * 5.0, nrows * 3.0))
        # AX = [py.subplot(nrows, ncols, cnt) for cnt in range(1, 9)]
        AX = [py.subplot(nrows, ncols, cnt + 1) for cnt in range(6)]

        ## FF
        for i in had:
            self.data = load('%s/data/ff%s-%d.dat' % (wdir, i, istep))

            if i == 'pion':
                c = 'r'
                lab = r'$\pi$'
            elif i == 'kaon':
                c = 'b'
                lab = r'$K$'
            elif i == 'hadron':
                c = 'k'
                lab = r'$h$'

            self.plot_lines(AX[0], 'u+ub', c, n_replicas, lab)
            self.plot_lines(AX[1], 'd+db', c, n_replicas)
            self.plot_lines(AX[2], 's+sb', c, n_replicas)
            self.plot_lines(AX[3], 'c+cb', c, n_replicas)
            self.plot_lines(AX[4], 'b+bb', c, n_replicas)
            self.plot_lines(AX[5], 'g', c, n_replicas)

        AX[0].text(0.9, 0.55, r'$u^+$', color='k', size=20)
        AX[0].set_ylabel(r'$zD(z)$', size=20)
        AX[0].legend(loc='upper center')
        AX[1].text(0.9, 0.55, r'$d^+$', color='k', size=20)
        AX[2].text(0.9, 0.55, r'$s^+$', color='k', size=20)
        AX[3].text(0.9, 0.55, r'$c^+$', color='k', size=20)
        AX[3].set_ylabel(r'$zD(z)$', size=20)
        AX[3].set_xlabel(r'$z$', size=20, x=0.9, va='baseline')
        AX[4].text(0.9, 0.55, r'$b^+$', color='k', size=20)
        AX[4].set_xlabel(r'$z$', size=20, x=0.9, va='baseline')
        AX[5].text(0.9, 0.55, r'$g$', color='k', size=20)
        AX[5].set_xlabel(r'$z$', size=20, x=0.9, va='baseline')

        for ax in AX:
            ax.set_ylim(0.0, 0.6)
            # ax.set_yticks([0.2,0.6,1.0,1.4])
            ax.set_xlim(0.1, 1.0)
            ax.set_xticks([0.2, 0.4, 0.6, 0.8])

        py.subplots_adjust(left=0.12,
                           bottom=0.08,
                           right=0.99,
                           top=0.97,
                           wspace=None,
                           hspace=0.2)
        py.tight_layout()
        py.savefig('%s/gallery/ff-line-plots1-%d.png' % (wdir, istep),
                   dpi=1000)
Exemplo n.º 21
0
def chi2_histogram(wdir, reaction, dataset, dpi):
    conf['datasets'] = {}
    if reaction.lower() == 'jet':
        from obslib.jets.reader import READER
        conf['datasets']['jet'] = {}
        conf['datasets']['jet']['xlsx'] = {}
        conf['datasets']['jet']['xlsx'][
            dataset] = 'jets/expdata/%s.xlsx' % dataset
        ## please notice the inconsistence of names, 'jet' and 'jets'
        ## so please do not remove this part
    elif reaction.lower() == 'pjet':
        from obslib.pjets.reader import READER
        conf['datasets']['pjet'] = {}
        conf['datasets']['pjet']['xlsx'] = {}
        conf['datasets']['pjet']['xlsx'][
            dataset] = 'pjets/expdata/%s.xlsx' % dataset
        ## please notice the inconsistence of names, 'pjet' and 'pjets'
        ## so please do not remove this part
    elif reaction.lower() == 'idis':
        from obslib.idis.reader import READER
    elif reaction.lower() == 'sidis':
        from obslib.sidis.reader import READER
    elif reaction.lower() == 'pidis':
        from obslib.pidis.reader import READER
    elif reaction.lower() == 'psidis':
        from obslib.psidis.reader import READER
    elif reaction.lower() == 'dy':
        from obslib.dy.reader import READER
    elif reaction.lower() == 'sia':
        from obslib.sia.reader import READER

    conf['aux'] = AUX()
    if reaction not in conf['datasets']:
        conf['datasets'][reaction] = {}
        conf['datasets'][reaction]['xlsx'] = {}
        conf['datasets'][reaction]['xlsx'][dataset] = '%s/expdata/%s.xlsx' % (
            reaction, dataset)
    data_table = READER().load_data_sets(reaction)

    ## plot histogram of relative 'chi2' for 'dataset' in 'reaction'
    load_config('%s/input.py' % wdir)
    istep = core.get_istep()
    collaboration = data_table[dataset]['col'][0]
    print('\nplotting relative chi2 histogram for %d in %s from %s' %
          (dataset, reaction, wdir))
    replicas = core.get_replicas(wdir)
    relative_chi2 = []
    for replica in replicas:
        # print replica['chi2'][reaction][dataset]
        relative_chi2.append(replica['chi2'][reaction][dataset]['chi2'] /
                             float(replica['chi2'][reaction][dataset]['npts']))

    n_rows, n_columns = 1, 1
    figure, ax = py.subplots(n_rows, n_columns)

    ax.hist(relative_chi2,
            len(relative_chi2),
            histtype='bar',
            color='b',
            label=r'$\mathrm{%s,~%s}$' %
            (reaction.upper(), collaboration.upper()))
    ax.legend(fontsize=20, loc='upper right')
    # ax.set_ylabel(r'\boldmath$\mathrm{n}$', size = 24)
    # ax.yaxis.set_label_coords(-0.17, 2.0)

    ax.set_xlabel(r'\boldmath$\chi^2/\mathrm{n}$', size=24)
    # ax.xaxis.set_label_coords(0.90, -0.12)

    py.tight_layout()
    py.savefig('%s/gallery/chi2-histogram-%s-%s-%d.png' %
               (wdir, reaction, collaboration, istep),
               dpi=dpi)
Exemplo n.º 22
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)))
Exemplo n.º 23
0
def make_figure(wdir, task, only_best_cluster=True, dpi=200):

    if task == 1:
        print('\nplotting PIDIS data from %s' % (wdir))
    elif task == 2:
        print('\nplotting PIDIS data over theory from %s' % (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

    predictions = load('%s/data/predictions-%d.dat' % (wdir, istep))
    if 'pidis' not in predictions['reactions']:
        print('PIDIS is not in data file')
        return
    labels = load('%s/data/labels-%d.dat' % (wdir, istep))
    cluster = labels['cluster']
    cluster_average_chi2 = labels['cluster_average_chi2']
    best_cluster = np.argmin(cluster_average_chi2)

    data = predictions['reactions']['pidis']

    for idx in data:
        predictions = copy.copy(data[idx]['prediction-rep'])
        del data[idx]['prediction-rep']
        del data[idx]['residuals-rep']
        if only_best_cluster:
            best_predictions = [
                predictions[i] for i in range(len(predictions))
                if cluster[i] == best_cluster
            ]
            data[idx]['thy'] = np.mean(best_predictions, axis=0)
            data[idx]['dthy'] = np.std(best_predictions, axis=0)
        else:
            all_predictions = [predictions[i] for i in range(len(predictions))]
            data[idx]['thy'] = np.mean(all_predictions, axis=0)
            data[idx]['dthy'] = np.std(all_predictions, axis=0)

    maps = generate_maps()
    subset_bins = pick_subsets(data)
    # log_list = []

    if task == 1:
        indices = {}
        for idx in data:
            observable = data[idx]['obs'][0]
            target = data[idx]['target'][0]
            collaboration = data[idx]['col'][0]
            if (observable == 'A1') or (observable == 'Apa'):
                if target == 'p':
                    if collaboration.startswith('JLab') != True:
                        if 'Apa_proton' not in indices:
                            indices['Apa_proton'] = []
                        indices['Apa_proton'].append(idx)
                    elif collaboration.startswith('JLabHB(EG1DVCS)') == True:
                        if 'Apa_proton_DVCS' not in indices:
                            indices['Apa_proton_DVCS'] = []
                        indices['Apa_proton_DVCS'].append(idx)
                    elif collaboration.startswith('JLabHB(EG1b)') == True:
                        if 'Apa_proton_EG1b' not in indices:
                            indices['Apa_proton_EG1b'] = []
                        indices['Apa_proton_EG1b'].append(idx)
                elif target == 'd':
                    if collaboration.startswith('JLab') != True:
                        if 'Apa_deuteron' not in indices:
                            indices['Apa_deuteron'] = []
                        indices['Apa_deuteron'].append(idx)
                    elif collaboration.startswith('JLabHB(EG1DVCS)') == True:
                        if 'Apa_deuteron_DVCS' not in indices:
                            indices['Apa_deuteron_DVCS'] = []
                        indices['Apa_deuteron_DVCS'].append(idx)
                    elif collaboration.startswith('JLabHB(EG1b)') == True:
                        if 'Apa_deuteron_EG1b' not in indices:
                            indices['Apa_deuteron_EG1b'] = []
                        indices['Apa_deuteron_EG1b'].append(idx)
            elif (observable == 'A2') or (observable == 'Ape') or (observable
                                                                   == 'Atpe'):
                if target == 'p':
                    if collaboration.startswith('JLab') != True:
                        if 'Ape_proton' not in indices:
                            indices['Ape_proton'] = []
                        indices['Ape_proton'].append(idx)
                elif target == 'd':
                    if collaboration.startswith('JLab') != True:
                        if 'Ape_deuteron' not in indices:
                            indices['Ape_deuteron'] = []
                        indices['Ape_deuteron'].append(idx)

            if target == 'h':
                if 'helium' not in indices:
                    indices['helium'] = []
                indices['helium'].append(idx)

        for key in indices:
            print(key)
            if key == 'Apa_proton':
                data_Apa_proton(wdir, data, indices[key], subset_bins, maps,
                                istep, dpi)
            elif key == 'Apa_proton_DVCS':
                data_Apa_proton_DVCS(wdir, data, indices[key], subset_bins,
                                     maps, istep, dpi)
            elif key == 'Apa_proton_EG1b':
                data_Apa_proton_EG1b(wdir, data, indices[key], subset_bins,
                                     maps, istep, dpi)
            elif key == 'Apa_deuteron':
                data_Apa_deuteron(wdir, data, indices[key], subset_bins, maps,
                                  istep, dpi)
            elif key == 'Apa_deuteron_DVCS':
                data_Apa_deuteron_DVCS(wdir, data, indices[key], subset_bins,
                                       maps, istep, dpi)
            elif key == 'Apa_deuteron_EG1b':
                data_Apa_deuteron_EG1b(wdir, data, indices[key], subset_bins,
                                       maps, istep, dpi)
            elif key == 'Ape_proton':
                data_Ape_proton(wdir, data, indices[key], subset_bins, maps,
                                istep, dpi)
            elif key == 'Ape_deuteron':
                data_Ape_deuteron(wdir, data, indices[key], subset_bins, maps,
                                  istep, dpi)
            elif key == 'helium':
                data_helium(wdir, data, indices[key], subset_bins, maps, istep,
                            dpi)

    elif task == 2:
        plot_data_on_theory(wdir, data, istep, dpi)

    return
Exemplo n.º 24
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))
Exemplo n.º 25
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))
Exemplo n.º 26
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))