diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/openloops/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/openloops/package.py | 378 |
1 files changed, 273 insertions, 105 deletions
diff --git a/var/spack/repos/builtin/packages/openloops/package.py b/var/spack/repos/builtin/packages/openloops/package.py index e7800536f0..466058eb19 100644 --- a/var/spack/repos/builtin/packages/openloops/package.py +++ b/var/spack/repos/builtin/packages/openloops/package.py @@ -10,135 +10,303 @@ from spack.package import * class Openloops(Package): """The OpenLoops 2 program is a fully automated implementation of the - Open Loops algorithm combined with on-the-fly reduction methods, - which allows for the fast and stable numerical evaluation of tree - and one-loop matrix elements for any Standard Model process - at NLO QCD and NLO EW. """ + Open Loops algorithm combined with on-the-fly reduction methods, + which allows for the fast and stable numerical evaluation of tree + and one-loop matrix elements for any Standard Model process + at NLO QCD and NLO EW.""" homepage = "https://openloops.hepforge.org/" url = "https://openloops.hepforge.org/downloads?f=OpenLoops-2.1.1.tar.gz" - tags = ['hep'] - - version('2.1.2', sha256='f52575cae3d70b6b51a5d423e9cd0e076ed5961afcc015eec00987e64529a6ae') - version('2.1.1', sha256='f1c47ece812227eab584e2c695fef74423d2f212873f762b8658f728685bcb91') - - all_processes = ['tbln', 'tbln_ew', 'tbqq', 'tbw', 'pptttt', 'pptttt_ew', - 'pptt', 'pptt_ew', 'ppttbb', 'ppttj', 'ppttj_ew', 'ppttjj', - 'pptaj', 'pptajj', 'pptllj', 'pptlljj', 'pptln', 'pptw', - 'pptwj', 'pptzj', 'pptzjj', 'ppthj', 'ppthjj', 'pptj', - 'pptjj', 'ppjj', 'ppjj_ew', 'ppjjj', 'ppjjj_ew', 'ppjjj_nf5', - 'ppjjjj', 'pplllvvv_ew', 'ppatt', 'ppatt_ew', 'ppattj', - 'pplltt', 'pplltt_ew', 'ppllttj', 'ppllttj_ew', 'pplntt', - 'pplnttj', 'ppwtt', 'ppwtt_ew', 'ppwttj', 'ppwttj_ew', - 'ppztt', 'ppztt_ew', 'ppzttj', 'ppaatt', 'ppwwtt', 'ppzatt', - 'ppzztt', 'ppvvvv', 'ppaaaj2', 'ppllaa', 'ppllaaj', - 'pplllla', 'ppvvv', 'ppvvv2', 'ppvvv_ew', 'ppvvvj', - 'ppaajj', 'ppaajj2', 'ppaajjj', 'pplla', 'pplla2', - 'pplla_ew', 'ppllaj', 'ppllaj2', 'ppllaj_ew', 'ppllaj_nf5', - 'ppllajj', 'ppllll', 'ppllll2', 'ppllll2_nf5', - 'ppllll2_onlyh', 'ppllll_ew', 'ppllllbb', 'ppllllj', - 'ppllllj2', 'ppllllj2_nf5', 'ppllllj2_nf5_notridr', - 'ppllllj2_nf5_sr', 'ppllllj2_onlyh', 'ppllnnjj_ew', - 'ppllnnjj_vbs', 'pplnaj_ckm', 'pplnajj', 'pplnajj_ckm', - 'ppvv', 'ppvv2', 'ppvv_ew', 'ppvvj', 'ppvvj2', 'ppvvj_ew', - 'ppwajj', 'ppwwjj', 'ppzajj', 'ppzwj_ew', 'ppzwjj', 'ppzzjj', - 'ppajj', 'ppajj2', 'ppajj_ew', 'ppajjj', 'ppllj', 'ppllj2', - 'ppllj_ew', 'ppllj_nf5', 'pplljj', 'pplljj_ew', 'pplljjj', - 'pplnj_ckm', 'pplnjj', 'pplnjj_ckm', 'pplnjj_ew', 'pplnjjj', - 'ppnnjj_ew', 'ppnnjjj', 'ppvj', 'ppvj2', 'ppvj_ew', - 'ppwj_ckm', 'ppwjj', 'ppwjj_ckm', 'ppwjj_ew', 'ppwjjj', - 'ppzjj', 'ppzjj_ew', 'ppzjjj', 'pphtt', 'pphtt_ew', 'pphttj', - 'pphlltt', 'pphll', 'pphll2', 'pphll_ew', 'pphllj', - 'pphllj2', 'pphllj_ew', 'pphlljj', 'pphlljj_top', - 'pphlnj_ckm', 'pphlnjj', 'pphv', 'pphv_ew', 'pphwjj', - 'pphz2', 'pphzj2', 'pphzjj', 'pphhtt', 'pphhv', 'pphhh2', - 'heftpphh', 'heftpphhj', 'heftpphhjj', 'pphh2', 'pphhj2', - 'pphhjj2', 'pphhjj_vbf', 'bbhj', 'heftpphj', 'heftpphjj', - 'heftpphjjj', 'pphbb', 'pphbbj', 'pphj2', 'pphjj2', - 'pphjj_vbf', 'pphjj_vbf_ew', 'pphjjj2', 'eetttt', 'eettttj', - 'eellllbb', 'eett', 'eett_ew', 'eettj', 'eettjj', 'eevtt', - 'eevttj', 'eevttjj', 'eevvtt', 'eevvttj', 'eellll_ew', - 'eevv_ew', 'eevvjj', 'eell_ew', 'eevjj', 'eehtt', 'eehttj', - 'eehll_ew', 'eehvtt', 'eehhtt', 'heftppllj', 'heftpplljj', - 'heftpplljjj'] - - variant('compile_extra', default=False, - description='Compile real radiation tree amplitudes') - variant('processes', description='Processes to install. See https://' + - 'openloops.hepforge.org/process_' + - 'library.php?repo=public for details', - values=disjoint_sets(('all.coll',), ('lhc.coll',), ('lcg.coll',), - all_processes).with_default('lhc.coll')) - - variant('num_jobs', description='Number of parallel jobs to run. ' + - 'Set to 1 if compiling a large number' + - 'of processes (e.g. lcg.coll)', default=0) - depends_on('python', type=("build", "run")) - - phases = ['configure', 'build', 'build_processes', 'install'] + tags = ["hep"] + + version("2.1.2", sha256="f52575cae3d70b6b51a5d423e9cd0e076ed5961afcc015eec00987e64529a6ae") + version("2.1.1", sha256="f1c47ece812227eab584e2c695fef74423d2f212873f762b8658f728685bcb91") + + all_processes = [ + "tbln", + "tbln_ew", + "tbqq", + "tbw", + "pptttt", + "pptttt_ew", + "pptt", + "pptt_ew", + "ppttbb", + "ppttj", + "ppttj_ew", + "ppttjj", + "pptaj", + "pptajj", + "pptllj", + "pptlljj", + "pptln", + "pptw", + "pptwj", + "pptzj", + "pptzjj", + "ppthj", + "ppthjj", + "pptj", + "pptjj", + "ppjj", + "ppjj_ew", + "ppjjj", + "ppjjj_ew", + "ppjjj_nf5", + "ppjjjj", + "pplllvvv_ew", + "ppatt", + "ppatt_ew", + "ppattj", + "pplltt", + "pplltt_ew", + "ppllttj", + "ppllttj_ew", + "pplntt", + "pplnttj", + "ppwtt", + "ppwtt_ew", + "ppwttj", + "ppwttj_ew", + "ppztt", + "ppztt_ew", + "ppzttj", + "ppaatt", + "ppwwtt", + "ppzatt", + "ppzztt", + "ppvvvv", + "ppaaaj2", + "ppllaa", + "ppllaaj", + "pplllla", + "ppvvv", + "ppvvv2", + "ppvvv_ew", + "ppvvvj", + "ppaajj", + "ppaajj2", + "ppaajjj", + "pplla", + "pplla2", + "pplla_ew", + "ppllaj", + "ppllaj2", + "ppllaj_ew", + "ppllaj_nf5", + "ppllajj", + "ppllll", + "ppllll2", + "ppllll2_nf5", + "ppllll2_onlyh", + "ppllll_ew", + "ppllllbb", + "ppllllj", + "ppllllj2", + "ppllllj2_nf5", + "ppllllj2_nf5_notridr", + "ppllllj2_nf5_sr", + "ppllllj2_onlyh", + "ppllnnjj_ew", + "ppllnnjj_vbs", + "pplnaj_ckm", + "pplnajj", + "pplnajj_ckm", + "ppvv", + "ppvv2", + "ppvv_ew", + "ppvvj", + "ppvvj2", + "ppvvj_ew", + "ppwajj", + "ppwwjj", + "ppzajj", + "ppzwj_ew", + "ppzwjj", + "ppzzjj", + "ppajj", + "ppajj2", + "ppajj_ew", + "ppajjj", + "ppllj", + "ppllj2", + "ppllj_ew", + "ppllj_nf5", + "pplljj", + "pplljj_ew", + "pplljjj", + "pplnj_ckm", + "pplnjj", + "pplnjj_ckm", + "pplnjj_ew", + "pplnjjj", + "ppnnjj_ew", + "ppnnjjj", + "ppvj", + "ppvj2", + "ppvj_ew", + "ppwj_ckm", + "ppwjj", + "ppwjj_ckm", + "ppwjj_ew", + "ppwjjj", + "ppzjj", + "ppzjj_ew", + "ppzjjj", + "pphtt", + "pphtt_ew", + "pphttj", + "pphlltt", + "pphll", + "pphll2", + "pphll_ew", + "pphllj", + "pphllj2", + "pphllj_ew", + "pphlljj", + "pphlljj_top", + "pphlnj_ckm", + "pphlnjj", + "pphv", + "pphv_ew", + "pphwjj", + "pphz2", + "pphzj2", + "pphzjj", + "pphhtt", + "pphhv", + "pphhh2", + "heftpphh", + "heftpphhj", + "heftpphhjj", + "pphh2", + "pphhj2", + "pphhjj2", + "pphhjj_vbf", + "bbhj", + "heftpphj", + "heftpphjj", + "heftpphjjj", + "pphbb", + "pphbbj", + "pphj2", + "pphjj2", + "pphjj_vbf", + "pphjj_vbf_ew", + "pphjjj2", + "eetttt", + "eettttj", + "eellllbb", + "eett", + "eett_ew", + "eettj", + "eettjj", + "eevtt", + "eevttj", + "eevttjj", + "eevvtt", + "eevvttj", + "eellll_ew", + "eevv_ew", + "eevvjj", + "eell_ew", + "eevjj", + "eehtt", + "eehttj", + "eehll_ew", + "eehvtt", + "eehhtt", + "heftppllj", + "heftpplljj", + "heftpplljjj", + ] + + variant("compile_extra", default=False, description="Compile real radiation tree amplitudes") + variant( + "processes", + description="Processes to install. See https://" + + "openloops.hepforge.org/process_" + + "library.php?repo=public for details", + values=disjoint_sets( + ("all.coll",), ("lhc.coll",), ("lcg.coll",), all_processes + ).with_default("lhc.coll"), + ) + + variant( + "num_jobs", + description="Number of parallel jobs to run. " + + "Set to 1 if compiling a large number" + + "of processes (e.g. lcg.coll)", + default=0, + ) + depends_on("python", type=("build", "run")) + + phases = ["configure", "build", "build_processes", "install"] def configure(self, spec, prefix): - spack_env = ('PATH LD_LIBRARY_PATH CPATH C_INCLUDE_PATH' + - 'CPLUS_INCLUDE_PATH INTEL_LICENSE_FILE').split() + spack_env = ( + "PATH LD_LIBRARY_PATH CPATH C_INCLUDE_PATH" + "CPLUS_INCLUDE_PATH INTEL_LICENSE_FILE" + ).split() for k in env.keys(): - if k.startswith('SPACK_'): + if k.startswith("SPACK_"): spack_env.append(k) - spack_env = ' '.join(spack_env) - is_intel = self.spec.satisfies('%intel') - njobs = self.spec.variants['num_jobs'].value - - with open('openloops.cfg', 'w') as f: - f.write('[OpenLoops]\n') - f.write('import_env={0}\n'.format(spack_env)) - f.write('num_jobs = {0}\n'.format(njobs)) - f.write('process_lib_dir = {0}\n'.format(self.spec.prefix.proclib)) - f.write('cc = {0}\n'.format(env['SPACK_CC'])) - f.write('cxx = {0}\n'.format(env['SPACK_CXX'])) - f.write('fortran_compiler = {0}\n'.format(env['SPACK_FC'])) - if self.spec.satisfies('@1.3.1') and not is_intel: - f.write('gfortran_f_flags = -ffree-line-length-none\n') - if self.spec.satisfies('@2.1.1:') and not is_intel: - f.write('gfortran_f_flags = -ffree-line-length-none ' + - '-fdollar-ok ') - if self.spec.target.family == 'aarch64': - f.write('-mcmodel=small\n') + spack_env = " ".join(spack_env) + is_intel = self.spec.satisfies("%intel") + njobs = self.spec.variants["num_jobs"].value + + with open("openloops.cfg", "w") as f: + f.write("[OpenLoops]\n") + f.write("import_env={0}\n".format(spack_env)) + f.write("num_jobs = {0}\n".format(njobs)) + f.write("process_lib_dir = {0}\n".format(self.spec.prefix.proclib)) + f.write("cc = {0}\n".format(env["SPACK_CC"])) + f.write("cxx = {0}\n".format(env["SPACK_CXX"])) + f.write("fortran_compiler = {0}\n".format(env["SPACK_FC"])) + if self.spec.satisfies("@1.3.1") and not is_intel: + f.write("gfortran_f_flags = -ffree-line-length-none\n") + if self.spec.satisfies("@2.1.1:") and not is_intel: + f.write("gfortran_f_flags = -ffree-line-length-none " + "-fdollar-ok ") + if self.spec.target.family == "aarch64": + f.write("-mcmodel=small\n") else: - f.write('-mcmodel=medium\n') + f.write("-mcmodel=medium\n") - if self.spec.satisfies('@:1 processes=lcg.coll'): - copy(join_path(os.path.dirname(__file__), 'sft1.coll'), 'lcg.coll') - elif self.spec.satisfies('@2:2.1.2 processes=lcg.coll'): - copy(join_path(os.path.dirname(__file__), 'sft2.coll'), 'lcg.coll') - elif self.spec.satisfies('@2.1.2:2 processes=lcg.coll'): - copy(join_path(os.path.dirname(__file__), 'sft3.coll'), 'lcg.coll') + if self.spec.satisfies("@:1 processes=lcg.coll"): + copy(join_path(os.path.dirname(__file__), "sft1.coll"), "lcg.coll") + elif self.spec.satisfies("@2:2.1.2 processes=lcg.coll"): + copy(join_path(os.path.dirname(__file__), "sft2.coll"), "lcg.coll") + elif self.spec.satisfies("@2.1.2:2 processes=lcg.coll"): + copy(join_path(os.path.dirname(__file__), "sft3.coll"), "lcg.coll") def setup_build_environment(self, env): # Make sure that calling openloops picks up the scons that is shipped # instead of falling back to a potentially unsuitable system version - env.set('OLPYTHON', self.spec['python'].prefix.bin.python) + env.set("OLPYTHON", self.spec["python"].prefix.bin.python) def setup_run_environment(self, env): # Make sure that calling openloops picks up the scons that is shipped # instead of falling back to a potentially unsuitable system version - env.set('OLPYTHON', self.spec['python'].prefix.bin.python) + env.set("OLPYTHON", self.spec["python"].prefix.bin.python) def build(self, spec, prefix): - scons = Executable('./scons') - scons('generator=1', 'compile=2') + scons = Executable("./scons") + scons("generator=1", "compile=2") def build_processes(self, spec, prefix): - ol = Executable('./openloops') - processes = self.spec.variants['processes'].value - if '+compile_extra' in self.spec: - ce = 'compile_extra=1' + ol = Executable("./openloops") + processes = self.spec.variants["processes"].value + if "+compile_extra" in self.spec: + ce = "compile_extra=1" else: - ce = '' + ce = "" - ol('libinstall', ce, *processes) + ol("libinstall", ce, *processes) def install(self, spec, prefix): - install_tree(join_path(self.stage.path, 'spack-src'), - self.prefix, - ignore=lambda x: x in ('process_obj', 'process_src', 'README')) + install_tree( + join_path(self.stage.path, "spack-src"), + self.prefix, + ignore=lambda x: x in ("process_obj", "process_src", "README"), + ) |