LHAPDF 6 update Andy Buckley University of Glasgow / CERN PH-ADP + - - PowerPoint PPT Presentation

lhapdf 6 update
SMART_READER_LITE
LIVE PREVIEW

LHAPDF 6 update Andy Buckley University of Glasgow / CERN PH-ADP + - - PowerPoint PPT Presentation

LHAPDF 6 update Andy Buckley University of Glasgow / CERN PH-ADP + James Ferrando, David Hall, Steve Lloyd, Martin Ruefenacht, Karl Nordstrom, Graeme Watt PDF4LHC, CERN, 13 Dec 2013 1/11 The problem(s) with LHAPDF 5 (recap) Fortran


slide-1
SLIDE 1

LHAPDF 6 update

Andy Buckley

University of Glasgow / CERN PH-ADP

+ James Ferrando, David Hall, Steve Lloyd, Martin Ruefenacht, Karl Nordstrom, Graeme Watt PDF4LHC, CERN, 13 Dec 2013

1/11

slide-2
SLIDE 2

The problem(s) with LHAPDF 5 (recap)

◮ Fortran codebase with static memory. Most sets’ common block

workspace arrays are not really common. ⇒ huge memory requirements O(2 − 10 GB) ⇒ Grid/batch issues

◮ Multiset, low-memory, etc. modes are hacks on top of

fundamental situation. Speed, VMEM, flexibility, and correct operation all suffer depending on build-time configuration.

NMXSET determined at build-time: too restrictive for e.g. error set reweighting Re-init very slow. Esp. later PDF members at end of file. Some functions don’t (can’t) respect multi-set indexing: alphaS,

xMin, etc. ◮ Many different grid formats, and single-file sets add big parsing

  • verhead (esp. for NNPDF and HERAPDF).

2/11

slide-3
SLIDE 3

LHAPDF 6

◮ Ground-up rewrite (in C++, with Python wrapper) attempting

to learn from and solve all these problems

AB, Martin Ruefenacht, Karl Nordstrom, James Ferrando, others

◮ Key feature: dynamic allocation: allocate only what you use —

and no concurrency limitation

PDF member (1 PDF for each of several flavours) is fundamental

  • bject; PDFSet is mostly for convenience

User takes control of memory No more multi-set woes with alphaS, etc.

◮ Uniform data format and powerful “cascading” metadata

Fixes e.g. Lam4/5 passing issues with LHAPDF5. Be careful with backward compatibility, e.g. tunes!

3/11

slide-4
SLIDE 4

More LHAPDF 6 features (2)

◮ Maintainability: single PDF grid format and standard

interpolators/extrapolators

ipol/xpol specified at runtime via configuration metadata: flexible. Default is log-bicubic spline

  • ne data file-per member data, dir per set: zero-overhead random

member access, tarball distribution arbitrary set of flavours supported, accessed by PDG ID code (so gluon is 21 or 0, a photon flavour is trivial!) distinct ipol grid blocks allow subgrids in Q. releasing a new PDF no longer needs a new LHAPDF code release!

◮ Speed: Single-flavour loading and interpolation are faster than

  • LHAPDF5. Working on even faster full-set initialisation and

performance-optimised ipol (variable caching, CPU cache alignment, vectorization, . . . )

◮ Backward compatibility Fortran and C++ interfaces. PYTHIA6,

Pythia8, Herwig++, Sherpa, POWHEG, TOP++ tested so far.

◮ αs system with analytic, ODE, and interpolation implementations,

from metadata

◮ ForcePositive option (allow-neg, pos and pos-def behaviours)

4/11

slide-5
SLIDE 5

Examples: data files

Set info file:

SetDesc: PDF fits using the standard CTEQ PDF evolution [...] Authors: H.-L.Lai, M.Guzzi, J. Huston, Z.Li, P.M.Nadolsky, [...] Reference: arXiv:1007.2241 NumMembers: 53 Flavors: [-5,-4,-3,-2,-1,1,2,3,4,5,21] OrderQCD: 1

Member data file:

PdfType: central Format: lhagrid1

  • 1.000000e-08 1.214290e-08 1.474520e-08 1.790520e-08 ... [xs]

1.690000e+00 2.254442e+00 3.079814e+00 4.317128e+00 ... [Q2s]

  • 5 -4 -3 -2 -1 1 2 3 4 5 21

[flavs] 0.000000e+00 0.000000e+00 5.253407e+00 6.215917e+00 ... [xfs] 0.000000e+00 1.868643e-01 5.367774e+00 6.316984e+00 ... [xfs...] ...

5/11

slide-6
SLIDE 6

Examples: usage from C++

Single member:

#include "LHAPDF/LHAPDF.h" ... LHAPDF::PDF* pdf = LHAPDF::mkPDF("CT10nlo", 0); size_t num_mems = pdf->numMembers(); // One value: double xf_g = pdf->xfxQ(21, 1e-3, 126.0); // Quark and gluon values: vector<double> xfs; pdf->xfxQ(1e-3, 126.0, xfs); // All values (partons, photon, gluino, ...): map<int, double> xfs = pdf->xfxQ(1e-3, 126.0); delete pdf;

PDF set:

vector<unique_ptr<LHAPDF::PDF>> pdfs; LHAPDF::mkPDFs("CT10nlo", pdfs); for (const auto& p : pdfs) double xf_g = p->xfxQ(21, 1e-3, 126.0);

6/11

slide-7
SLIDE 7

Examples: usage from Python

Single member:

>>> import lhapdf >>> pdf0 = lhapdf.mkPDF("CT10nlo", 0) >>> pdf0.xfxQ(21, 1e-3, 126) 31.199466144272378

PDF set:

>>> pdfs = lhapdf.mkPDFs("CT10nlo") >>> len(pdfs) 52 >>> [pdf.xfxQ(21, 1e-3, 126) for pdf in pdfs] [31.199466144272378, 31.10261967456719, ... ...

7/11

slide-8
SLIDE 8

Examples: C++ LHAPDF 5/6 compatibility

Use the LHAPDF_MAJOR_VERSION macro to handle C++ API differences:

#if defined LHAPDF_MAJOR_VERSION && LHAPDF_MAJOR_VERSION == 6 LHAPDF::PDF* pdf = LHAPDF::mkPDF("CT10nlo", 0); cout << "xf_g = " << pdf->xfxQ(21, 1e-3, 126.) << endl; delete pdf; #else LHAPDF::initPDFSet("CT10nlo", LHAPDF::LHGRID, 0); cout << "xf_g = " << LHAPDF::xfx(x, 1e-3, 126.) << endl; #endif

8/11

slide-9
SLIDE 9

Memory

Numbers from 6.0.0beta1 but still relevant

LHAPDF 5

$ size -B -d ~/heplocal/lib/libLHAPDF.so text data bss dec 1509082 142048 2039405376 2041056506

⇒ 1.5 MB functions, 140 kB data, 2 GB uninitialised data!

LHAPDF 6

$ size -B -d ~/heplocal/lib/libLHAPDF.so text data bss dec 265310 8504 1552 275366

⇒ 2.6 kB functions, 8 kB data, 280 kB uninitialised data!

WIN!

9/11

slide-10
SLIDE 10

Set migration and validation

◮ We set a nominal LHA5 → 6 reproduction accuracy target of

per-mille (1/1000)

◮ Regularised deviation measure ∆ = |f6 − f5|/(|f5| + ǫ) ◮ Get sets from http://www.hepforge.org/archive/lhapdf/pdfsets/6.0/

xf vs. x

10

  • 10

10

  • 9

10

  • 8

10

  • 7

10

  • 6

10

  • 5

10

  • 4

10

  • 3

10

  • 2

10

  • 1

10 x 10

  • 5

10

  • 4

10

  • 3

|f6−f5 |/(|f5| +ǫ)

xfacc, flav = g, q =10 xfacc, flav = g, q =50 xfacc, flav = g, q =1 ×102 xfacc, flav = g, q =2 ×102 xfacc, flav = g, q =5 ×102 xfacc, flav = g, q =1 ×103 xfacc, flav = g, q =2 ×103 xfacc, flav = g, q =5 ×103

“Final” round of migrations upcoming to further improve/fix metadata

10/11

slide-11
SLIDE 11

Set migration and validation

◮ We set a nominal LHA5 → 6 reproduction accuracy target of

per-mille (1/1000)

◮ Regularised deviation measure ∆ = |f6 − f5|/(|f5| + ǫ) ◮ Get sets from http://www.hepforge.org/archive/lhapdf/pdfsets/6.0/

xf vs. Q

10 10

1

10

2

10

3

10

4

Q 10

  • 5

10

  • 4

10

  • 3

10

  • 2

10

  • 1

10 |f6−f5 |/(|f5| +ǫ)

xfacc, flav = g, x =1 ×10−8 xfacc, flav = g, x =1 ×10−6 xfacc, flav = g, x =0.0001 xfacc, flav = g, x =0.01 xfacc, flav = g, x =0.1 xfacc, flav = g, x =0.2 xfacc, flav = g, x =0.5 xfacc, flav = g, x =0.8

“Final” round of migrations upcoming to further improve/fix metadata

10/11

slide-12
SLIDE 12

Set migration and validation

◮ We set a nominal LHA5 → 6 reproduction accuracy target of

per-mille (1/1000)

◮ Regularised deviation measure ∆ = |f6 − f5|/(|f5| + ǫ) ◮ Get sets from http://www.hepforge.org/archive/lhapdf/pdfsets/6.0/

αs vs. Q

10 10

1

10

2

10

3

10

4

Q 10

  • 5

10

  • 4

10

  • 3

10

  • 2

10

  • 1

|α6−α5|/(|α5| +ǫ)

asacc

“Final” round of migrations upcoming to further improve/fix metadata

10/11

slide-13
SLIDE 13

Summary, limitations and to-dos

Version 6.0.4 available to download now; 6.0.5 soon! PDF data update imminent: metadata improvements, MSTW and extra NNPDF validations Limitations:

◮ No photon or nuclear PDFs (at least not yet) ◮ All PDFs so far are interpolation grids ◮ Slightly larger files (CT10nlo is 28 MB vs. 21). ◮ Build requires ext libs: recent Boost and yaml-cpp libs. ◮ Not all PDFs will be migrated, not all approved by groups so far

TODOs:

◮ Maybe add flavour aliasing and zipped reading. ◮ Speed-ups in both ipol and init (fast istream, vectorisation, etc.) ◮ Reduce Boost dependency and bundle yaml-cpp ⇒ 6.0.5 ◮ Generalized αs thresholds and other minor αs details ◮ Manager script to replace/upgrade lhapdf-getdata ◮ Zipped data files (for speed and space) ◮ Write-up!

11/11