def evolve(name, g, order, xval_lo, xval_nlo, fac=1): yval_lo = [] for f in xval_lo: xsec_lo = ROOT.vconvolute(g, 0, f*fac, f*fac) yval_lo.append(list(xsec_lo)) print 'LO', f, yval_lo[-1] yval_lo = np.array(yval_lo) np.savetxt(name % 'lo', np.column_stack((xval_lo,yval_lo))) if order > 0: yval_nlo = [] for f in xval_nlo: xsec_nlo = ROOT.vconvolute(g, 1, f*fac, f*fac) yval_nlo.append(list(xsec_nlo)) print 'NLO', f, yval_nlo[-1] yval_nlo = np.array(yval_nlo) np.savetxt(name % 'nlo', np.column_stack((xval_nlo,yval_nlo))) return yval_lo, yval_nlo
def process(params): # we want to handle Ctrl+C #sh = ROOT.TSignalHandler(ROOT.kSigInterrupt, False) #sh.Add() #sh.Connect("Notified()", "TROOT", ROOT.gROOT, "SetInterrupt()") # add hammer.py directory to macro path hammer_path = os.path.dirname(__file__) ROOT.gROOT.SetMacroPath(ROOT.gROOT.GetMacroPath().rstrip(':') + ':' + hammer_path) # load libraries ROOT.gSystem.Load("libfastjet.so") ROOT.gSystem.Load("libLHAPDF.so") ROOT.gSystem.Load("libAPPLgrid.so") #AddDynamicPath # load macros # gSystem->AddIncludePath(" -I$HOME/mypackage/include ") # gSystem->AddLinkedLibs("-L/my/path -lanylib"); ROOT.gROOT.LoadMacro("LHAPDF.h+") ROOT.gROOT.LoadMacro("SherpaAlphaS.C+") ROOT.gROOT.LoadMacro("SelectorCommon.C+") ROOT.gROOT.LoadMacro("appl_grid.h+") ROOT.gROOT.LoadMacro("appl_helper.h+") ROOT.gROOT.LoadMacro("ntuple_pdf.h+") pdf_functions = ["ntupleall", "ntuplephjets", "ntuplejets"] pdf_objects = [getattr(ROOT, "%s_pdf" % p)() for p in pdf_functions] if params.pdf == 'CT10': pdfabbr, pdfname = ('ct10', 'CT10') elif params.pdf == 'NNPDF23': pdfabbr, pdfname = ('nnpdf', 'NNPDF23_nlo_FFN_NF5_as_0118') elif params.pdf == 'MSTW08': pdfabbr, pdfname = ('mstw08', 'MSTW2008nlo68cl') else: pdfabbr, pdfname = params.pdf, params.pdf pdf, m = get_pdfname(pdfname) ROOT.LHAPDF.initPDFSet(pdf, ROOT.LHAPDF.LHGRID, int(m)) grids = [ROOT.appl.grid(name) for name in params.inputs] for g in grids: g.trim() order = g.nloops() firstname = params.inputs[0].replace('.root', '') firstname += pdfabbr print "Order ", order, " Name ", firstname if True: for g,n in zip(grids, params.inputs): print n print list(ROOT.vconvolute(g, 0, 1, 1)) if order > 0: print list(ROOT.vconvolute(g, 1, 1, 1)) # sum grids g = grids[0] for i in range(1, len(grids)): g += grids[i] grids[i] = None if True: xsec = ROOT.vconvolute(g, order, 1, 1) print 1, list(xsec) xsec = ROOT.vconvolute(g, order, 2, 2) print 2, list(xsec) xsec = ROOT.vconvolute(g, order, 0.5, 0.5) print 0.5, list(xsec) try: tmp = np.loadtxt(firstname + '-lo.txt') xval_lo = tmp[...,0] yval_lo = tmp[...,1:] if order > 0: tmp = np.loadtxt(firstname + '-nlo.txt') xval_nlo = tmp[...,0] yval_nlo = tmp[...,1:] except IOError: xval_lo = np.sort(np.append(np.logspace(-1.5, 1, 50), [0.5, 1, 2])) fac = 1 if firstname.find('0.025') > 0: print "0.025 detected" fac = 1./0.025 if firstname.find('0.1') > 0: print "0.1 detected" fac = 1./0.1 xval_nlo = xval_lo yval_lo, yval_nlo = evolve(firstname + '-%s.txt', g, order, xval_lo, xval_nlo, fac) # pick total XS yval_lo = yval_lo[...,0] yval_nlo = yval_nlo[...,0] if True: import matplotlib.pyplot as plt fig = plt.figure() axs = plt.subplot(111) axs.grid(True) def vline(x, *args, **kwargs): axs.plot([x, x], [min(yval_lo), max(yval_lo)], *args, **kwargs) vline(x=1, color='k', ls='--', lw=1.5) vline(x=0.5, color='gray', ls='--', lw=1.5) vline(x=2, color='gray', ls='--', lw=1.5) #axs.set_xscale('log') #axs.set_ylim(0, 6) #axs.set_xlim(0.1, 8) axs.plot(xval_lo, yval_lo, lw=2, c='b') #, marker='x') if order > 0: axs.plot(xval_nlo, yval_nlo, lw=2, c='r') #, marker='x') #axs.plot(xval_lo2, yval_lo2, lw=1, c='c') #, marker='x') #if order > 0: # axs.plot(xval_nlo2, yval_nlo2, lw=1, c='k') #, marker='x') #axs.plot(xval, np.array(yval)+np.array(yerr), c='r') #axs.plot(xval, np.array(yval)-np.array(yerr), c='b') #plt.xticks([0.2,1.,4.], ['0.2', '1', '4']) plt.show()