82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
import os
|
|
|
|
from spack.package import *
|
|
|
|
|
|
class Lhapdfsets(BundlePackage):
|
|
"""A set of disretised data files of parton density functions ,
|
|
to be used with the LHAPDF library"""
|
|
|
|
homepage = "https://lhapdf.hepforge.org/pdfsets.html"
|
|
|
|
tags = ["hep"]
|
|
|
|
maintainers("vvolkl", "wdconinc")
|
|
|
|
version("6.3.0")
|
|
|
|
depends_on("lhapdf", type="build")
|
|
depends_on("tar", type="build")
|
|
depends_on("curl", type="build")
|
|
|
|
phases = ["install"]
|
|
|
|
# use a dummy executables for spack external support
|
|
executables = [r"^lhapdf$"]
|
|
|
|
variant(
|
|
"sets",
|
|
description="Individiual lhapdf sets to install",
|
|
values=("all", "default"),
|
|
default="default",
|
|
)
|
|
|
|
def install(self, spec, prefix):
|
|
mkdirp(self.prefix.share.lhapdfsets)
|
|
tar = which("tar")
|
|
curl = which("curl")
|
|
sets = self.spec.variants["sets"].value
|
|
if sets == "all":
|
|
# parse set names from index file
|
|
all_sets = [
|
|
_line.split()[1]
|
|
for _line in open(
|
|
join_path(os.path.dirname(__file__), "pdfsets.index")
|
|
).readlines()
|
|
]
|
|
sets = all_sets
|
|
elif sets == "default":
|
|
default_sets = ["MMHT2014lo68cl", "MMHT2014nlo68cl", "CT14lo", "CT14nlo"]
|
|
sets = default_sets
|
|
with working_dir(self.prefix.share.lhapdfsets):
|
|
for s in sets:
|
|
_filename = "%s.tar.gz" % s
|
|
curl(
|
|
"-L",
|
|
"-o",
|
|
_filename,
|
|
"http://lhapdfsets.web.cern.ch/lhapdfsets/current/%s" % _filename,
|
|
)
|
|
tar("xfz", _filename)
|
|
os.remove(_filename)
|
|
|
|
def setup_dependent_build_environment(self, env, dependent_spec):
|
|
env.set("LHAPDF_DATA_PATH", self.prefix.share.lhapdfsets)
|
|
|
|
def setup_run_environment(self, env):
|
|
env.set("LHAPDF_DATA_PATH", self.prefix.share.lhapdfsets)
|
|
|
|
@classmethod
|
|
def determine_spec_details(cls, prefix, exes_in_prefix):
|
|
path = os.environ.get("LHAPDF_DATA_PATH", None)
|
|
# unfortunately the sets are not versioned -
|
|
# just hardcode the current version and hope it is fine
|
|
s = Spec.from_detection("lhapdfsets@6.3.0")
|
|
s.external_path = path
|
|
return s if path else None
|