Source code for hepi.run.spheno.run

import os
import subprocess
import warnings
from typing import List

from hepi.input import Input, update_slha
from hepi.run import Runner


[docs] class SPhenoRunner(Runner):
[docs] def _check_path(self) -> bool: if os.path.exists(os.path.expanduser(self.get_path() + "/bin/SPheno")): self.set_path(self.get_path() + "/bin/SPheno") return True if self.get_path().endswith("SPheno"): return True return False
[docs] def run(self, slhas: List[Input], **kwargs) -> List[Input]: """ Run the passed list of parameters for SPheno. Args: slhas (:obj:`list` of :class:`Input`): Input parameters with a SLHA file that can be processed by SPheno. Returns: :obj:`list` of :class:`Input` """ if not self._check_path(): warnings.warn("The path is not valid for " + self.get_name()) if os.path.exists("Messages.out"): os.remove("Messages.out") for s in slhas: # Remove Creation time for hash-/caching comm = ( "cp " + self.get_output_dir() + s.slha + " spheno_tmp.in && " + get_path() + " spheno_tmp.in && mv " + "SPheno.spc " + self.get_output_dir() + s.slha + " && sed -i '/Created/d' " + self.get_output_dir() + s.slha ) with subprocess.Popen( comm, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) as proc: proc.wait() if proc.returncode != 0: warnings.warn("spheno failed") update_slha(s) if os.path.exists("Messages.out"): with open("Messages.out", "r") as r: t = r.read() if t != "": warnings.warn("Spheno error in Messages.out" + r.read()) return slhas
# Backward compatibility
[docs] spheno_default_runner = SPhenoRunner("~/git/SPheno-3.3.8/")
"""Default SPheno Runner to provide backward compatibility"""
[docs] run = spheno_default_runner.run
[docs] set_path = spheno_default_runner.set_path
[docs] get_path = spheno_default_runner.get_path