Skip to content
Snippets Groups Projects
Commit 159590d2 authored by Johannes Schumann's avatar Johannes Schumann
Browse files

Merge branch 'container' into 'master'

Restructure

See merge request !12
parents 161cbdef 051beaad
No related branches found
No related tags found
1 merge request!12Restructure
Pipeline #22413 passed
[submodule "externals/km3net-dataformat"]
path = externals/km3net-dataformat
url = git@git.km3net.de:common/km3net-dataformat.git
FROM debian:stretch
FROM docker.km3net.de/base/centos7-bundle:2021.03.01
RUN apt-get update -qq && \
apt-get upgrade -qq -y
RUN apt-get install -qq -y gfortran make cmake libbz2-dev wget g++ git && \
apt-get install -qq -y python3-dev python3-pip python3-tk python3-lxml python3-six
RUN yum install -y -e 0 devtoolset-10
RUN cd /opt && \
mkdir -p cmake-3.18 && wget -qO- "https://cmake.org/files/v3.18/cmake-3.18.2-Linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C cmake-3.18
RUN cd /opt && \
wget https://root.cern.ch/download/root_v6.20.04.source.tar.gz && \
tar xvzf root_v6.20.04.source.tar.gz
RUN export PATH=/opt/cmake-3.18/bin:$PATH && \
cd /opt/root-6.20.04 && \
mkdir -p obj && \
cd obj && \
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -Dpyroot=OFF -Dpyroot_experimental=OFF -Dx11=OFF -Dxft=OFF .. && \
make -j4; make install && \
rm -rf /opt/root-6.20.04*
RUN cd /opt && \
RUN source /opt/rh/devtoolset-10/enable && \
cd /opt && \
wget http://www.hepforge.org/archive/roottuple/RootTuple-1.0.0.tar.gz && \
tar -xzvf RootTuple-1.0.0.tar.gz && \
cd RootTuple-1.0.0 && \
......@@ -31,7 +13,8 @@ RUN cd /opt && \
cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
make; make install
RUN cd /opt && \
RUN source /opt/rh/devtoolset-10/enable && \
cd /opt && \
wget https://gibuu.hepforge.org/downloads?f=buuinput2021.tar.gz && \
tar xvzf downloads?f=buuinput2021.tar.gz && \
wget https://gibuu.hepforge.org/downloads?f=release2021.tar.gz && \
......@@ -43,5 +26,15 @@ RUN cd /opt && \
make -j withROOT=1 && \
rm -rf /opt/*.tar.gz
ADD . /km3buu
RUN cd /km3buu && \
pip3 install setuptools-scm && \
pip3 install pytest-runner && \
pip3 install -e .
RUN cd /km3buu/externals/km3net-dataformat/ && \
make
ENV KM3NET_LIB=/km3buu/externals/km3net-dataformat/lib
ENV CONTAINER_GIBUU_EXEC=/opt/release2021/objects/GiBUU.x
ENV LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"
<?xml version="1.0" encoding="ISO-8859-1"?>
<media_comp>
<!--
Definition of the interaction media composition
-->
<!--
// media composition: SeaWater, Rock, Mantle, Core
-->
<param_set media="SeaWater" density="1.03975">
<param name="O"> 0.8584 </param>
<param name="H"> 0.1082 </param>
<param name="Cl"> 1.94E-2 </param>
<param name="Na"> 1.08E-2 </param>
<param name="Mg"> 0.1292E-2 </param>
<param name="S"> 0.091E-2 </param>
<param name="Ca"> 0.04E-2 </param>
<param name="K"> 0.04E-2 </param>
<param name="Br"> 0.0067E-2 </param>
<param name="C"> 0.0028E-2 </param>
</param_set>
<param_set media="Rock" density="2.65">
<param name="O"> 0.463 </param>
<param name="Si"> 0.282 </param>
<param name="Al"> 0.0823 </param>
<param name="Fe"> 0.0563 </param>
<param name="Ca"> 0.0415 </param>
<param name="Na"> 0.0236 </param>
<param name="Mg"> 0.0233 </param>
<param name="K"> 0.0209 </param>
<param name="Ti"> 0.0057 </param>
<param name="H"> 0.0014 </param>
</param_set>
<param_set media="Mantle">
<param name="O"> 0.4522 </param>
<param name="Mg"> 0.2283 </param>
<param name="Si"> 0.2149 </param>
<param name="Fe"> 0.0597 </param>
<param name="Al"> 0.0225 </param>
<param name="Ca"> 0.0224 </param>
</param_set>
<param_set media="Core">
<param name="Fe"> 0.9 </param>
<param name="Ni"> 0.1 </param>
</param_set>
</media_comp>
Subproject commit 59d2e2bc4de69fb5497cdf09a0146d0090913933
......@@ -159,5 +159,10 @@ def read_media_compositions(filename):
def read_default_media_compositions():
cfg = Config()
fpath = join(cfg.gseagen_path, "dat", GSEAGEN_MEDIA_COMPOSITION_FILE)
try:
fpath = join(cfg.gseagen_path, "dat", GSEAGEN_MEDIA_COMPOSITION_FILE)
except:
fpath = abspath(
join(dirname(__file__), "../config/",
GSEAGEN_MEDIA_COMPOSITION_FILE))
return read_media_compositions(fpath)
......@@ -13,7 +13,9 @@ __email__ = "jschumann@km3net.de"
__status__ = "Development"
from shutil import copy
import subprocess
from spython.main import Client
import os
from os.path import join, abspath, basename, isdir, isfile
from tempfile import NamedTemporaryFile, TemporaryDirectory
from thepipe.logger import get_logger
......@@ -21,15 +23,10 @@ from thepipe.logger import get_logger
from . import IMAGE_NAME
from .config import Config
from .jobcard import Jobcard, read_jobcard
from .environment import is_singularity_version_greater, MIN_SINGULARITY_VERSION
from .environment import check_singularity_version
log = get_logger(basename(__file__))
if not is_singularity_version_greater(
MIN_SINGULARITY_VERSION): # pragma: no cover
log.error("Singularity version lower than %s" % MIN_SINGULARITY_VERSION)
raise OSError("Singularity version below %s" % MIN_SINGULARITY_VERSION)
GIBUU_SHELL = """
#!/bin/bash
......@@ -47,7 +44,7 @@ $CONTAINER_GIBUU_EXEC < {1};
"""
def run_jobcard(jobcard, outdir):
def run_jobcard(jobcard, outdir, container=False):
"""
Method for run
......@@ -58,6 +55,8 @@ def run_jobcard(jobcard, outdir):
of a jobcard object or a path to a jobcard
outdir: str
The path to the directory the output should be written to.
container: boolean
Call GiBUU inside container environment
"""
input_dir = TemporaryDirectory()
outdir = abspath(outdir)
......@@ -80,23 +79,31 @@ def run_jobcard(jobcard, outdir):
jobcard["neutrino_induced"]["FileNameflux"] = tmp_fluxfile
with open(jobcard_fpath, "w") as f:
f.write(str(jobcard))
log.info("Create temporary file for associated runscript")
script_fpath = join(input_dir.name, "run.sh")
with open(script_fpath, "w") as f:
ctnt = GIBUU_SHELL.format(outdir, jobcard_fpath)
f.write(ctnt)
output = Client.execute(
Config().gibuu_image_path,
["/bin/sh", script_fpath],
bind=[outdir, input_dir.name],
return_result=True,
)
with open(join(outdir, jobcard.filename), "w") as f:
f.write(str(jobcard))
msg = output["message"]
if isinstance(msg, str):
log.info("GiBUU output:\n %s" % msg)
if container:
check_singularity_version()
log.info("Create temporary file for associated runscript")
script_fpath = join(input_dir.name, "run.sh")
with open(script_fpath, "w") as f:
ctnt = GIBUU_SHELL.format(outdir, jobcard_fpath)
f.write(ctnt)
output = Client.execute(
Config().gibuu_image_path,
["/bin/sh", script_fpath],
bind=[outdir, input_dir.name],
return_result=True,
)
msg = output["message"]
if isinstance(msg, str):
log.info("GiBUU output:\n %s" % msg)
else:
log.info("GiBUU output:\n %s" % msg[0])
log.error("GiBUU stacktrace:\n%s" % msg[1])
return output["return_code"]
else:
log.info("GiBUU output:\n %s" % msg[0])
log.error("GiBUU stacktrace:\n%s" % msg[1])
return output["return_code"]
p = subprocess.Popen(
"%s < %s" % (os.environ["CONTAINER_GIBUU_EXEC"], jobcard_fpath),
shell=True,
cwd=outdir)
return p.wait()
......@@ -26,6 +26,13 @@ log = get_logger(basename(__file__))
MIN_SINGULARITY_VERSION = "3.3"
def check_singularity_version(): # pragma: no cover
if not is_singularity_version_greater(MIN_SINGULARITY_VERSION):
log.error("Singularity version lower than %s" %
MIN_SINGULARITY_VERSION)
raise OSError("Singularity version below %s" % MIN_SINGULARITY_VERSION)
def is_singularity_version_greater(min_version): # pragma: no cover
singularity_version = LooseVersion(get_singularity_version().split()[-1])
retval = singularity_version > LooseVersion(MIN_SINGULARITY_VERSION)
......
......@@ -89,6 +89,11 @@ def read_jobcard(filepath):
return Jobcard(f90nml.read(filepath), filename=basename(filepath))
def write_jobcard(jobcard, filepath):
with open(filepath, 'w') as nml_file:
f90nml.write(jobcard, nml_file)
def generate_neutrino_jobcard(events,
process,
flavour,
......
......@@ -35,7 +35,7 @@ class TestCTRLbyJobcardFile(unittest.TestCase):
writer.writerows(zip(ene, np.power(ene, -1)))
jc = read_jobcard(self.filename)
jc["neutrino_induced"]["FileNameFlux"] = self.flux_file.name
self.retval = run_jobcard(jc, self.output_dir.name)
self.retval = run_jobcard(jc, self.output_dir.name, container=True)
log = get_logger("ctrl.py")
log.setLevel("INFO")
......@@ -78,7 +78,9 @@ class TestCTRLbyJobcardObject(unittest.TestCase):
self.test_jobcard["neutrinoAnalysis"]["outputEvents"] = True
self.test_jobcard["pythia"]["PARP(91)"] = 0.44
self.output_dir = TemporaryDirectory()
self.retval = run_jobcard(self.test_jobcard, self.output_dir.name)
self.retval = run_jobcard(self.test_jobcard,
self.output_dir.name,
container=True)
# raise Exception(self.test_jobcard)
def test_output(self):
......
#!/usr/bin/python3
from km3buu.jobcard import generate_neutrino_jobcard
from km3buu.jobcard import write_jobcard
from km3buu.jobcard import XSECTIONMODE_LOOKUP, PROCESS_LOOKUP, FLAVOR_LOOKUP
events = 1000
energy_min = 0.1
energy_max = 50
interaction = "cc"
flavor = "electron"
target_z = 8
target_a = 16
fluxfile = None
jc = generate_neutrino_jobcard(events, interaction, flavor, (energy_min,energy_max), (target_z,target_a),fluxfile=fluxfile)
write_jobcard(jc,"./job.job")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment