diff --git a/km3buu/config.py b/km3buu/config.py index 37834491dabe8e1306b8b5fdc87a1130a70affbf..c0d600ad90faae5b4ade85b88f58f6416a31c172 100644 --- a/km3buu/config.py +++ b/km3buu/config.py @@ -28,9 +28,18 @@ CONFIG_PATH = os.path.expanduser("~/.km3buu/config") log = get_logger(__name__) +GENERAL_SECTION = "General" +KM3NET_LIB_PATH_KEY = "km3net_lib_path" + GIBUU_SECTION = "GiBUU" +GIBUU_IMAGE_PATH_KEY = "image_path" + PROPOSAL_SECTION = "PROPOSAL" +PROPOSAL_ITP_PATH_KEY = "itp_table_path" + GSEAGEN_SECTION = "gSeagen" +GSEAGEN_PATH_KEY = "path" + GSEAGEN_MEDIA_COMPOSITION_FILE = "MediaComposition.xml" @@ -62,8 +71,7 @@ class Config(object): @property def gibuu_image_path(self): - key = "image_path" - image_path = self.get(GIBUU_SECTION, key) + image_path = self.get(GIBUU_SECTION, GIBUU_IMAGE_PATH_KEY) if image_path is None or not isfile(image_path): dev_path = abspath(join(dirname(__file__), os.pardir, IMAGE_NAME)) if isfile(dev_path): @@ -86,26 +94,34 @@ class Config(object): @gibuu_image_path.setter def gibuu_image_path(self, value): - section = "GiBUU" - key = "image_path" + section = GIBUU_SECTION + key = GIBUU_IMAGE_PATH_KEY self.set(section, key, value) @property def proposal_itp_tables(self): default_path = abspath(join(dirname(__file__), "../.tables")) - return self.get(PROPOSAL_SECTION, "itp_table_path", default_path) + return self.get(PROPOSAL_SECTION, PROPOSAL_ITP_PATH_KEY, default_path) @proposal_itp_tables.setter def proposal_itp_tables(self, value): - self.set(PROPOSAL_SECTION, "itp_table_path", value) + self.set(PROPOSAL_SECTION, PROPOSAL_ITP_PATH_KEY, value) @property def gseagen_path(self): - return self.get(GSEAGEN_SECTION, "path") + return self.get(GSEAGEN_SECTION, GSEAGEN_PATH_KEY) @gseagen_path.setter def gseagen_path(self, value): - self.set(GIBUU_SECTION, "path", value) + self.set(GIBUU_SECTION, GSEAGEN_PATH_KEY, value) + + @property + def km3net_lib_path(self): + return self.set(GENERAL_SECTION, KM3NET_LIB_PATH_KEY, None) + + @km3net_lib_path.setter + def km3net_lib_path(self, value): + return self.get(GENERAL_SECTION, KM3NET_LIB_PATH_KEY, value) def read_media_compositions(filename): diff --git a/km3buu/output.py b/km3buu/output.py index d8f1e8a69be1e8e3dde530bfe4e7dc5bcc3134a8..1526195d76761f8bdf940947d724afe46f7a98f3 100644 --- a/km3buu/output.py +++ b/km3buu/output.py @@ -26,13 +26,17 @@ import scipy.constants as constants import mendeleev from .jobcard import Jobcard, read_jobcard, PDGID_LOOKUP -from .config import read_default_media_compositions +from .config import Config, read_default_media_compositions try: import ROOT - ROOT.gSystem.Load(join(environ("KM3NET_LIB", "libKM3NeTROOT.so"))) + libpath = environ.get("KM3NET_LIB") + if libpath: + libpath = Config().km3net_lib_path + ROOT.gSystem.Load(join(libpath, "libKM3NeTROOT.so")) except: - pass + import warnings + warnings.warn("KM3NeT dataformat library was not loaded.", ImportWarning) EVENT_FILENAME = "FinalEvents.dat" ROOT_PERT_FILENAME = "EventOutput.Pert.[0-9]{8}.root" diff --git a/km3buu/tests/test_output.py b/km3buu/tests/test_output.py index dc90b173f54b335819b32a874f0683f98c46dbb3..2932dc8742693ebdc87a326f0d8aec265dab37f4 100644 --- a/km3buu/tests/test_output.py +++ b/km3buu/tests/test_output.py @@ -15,19 +15,25 @@ from unittest.mock import patch import numpy as np import pytest import km3io -from km3buu.output import * -from os import listdir +from os import listdir, environ from os.path import abspath, join, dirname from km3net_testdata import data_path from tempfile import NamedTemporaryFile, TemporaryDirectory +from km3buu.output import * +from km3buu.config import Config + TESTDATA_DIR = data_path("gibuu") try: - import aa, ROOT - AANET_AVAILABLE = True + import ROOT + libpath = environ.get("KM3NET_LIB") + if libpath is None: + libpath = Config().km3net_lib_path + KM3NET_LIB_AVAILABLE = (ROOT.gSystem.Load(join(libpath, + "libKM3NeTROOT.so")) == 0) except ImportError: - AANET_AVAILABLE = False + KM3NET_LIB_AVAILABLE = False class TestXSection(unittest.TestCase): @@ -73,7 +79,8 @@ class TestGiBUUOutput(unittest.TestCase): w2[:3], [7.63360911e+01, 3.60997502e-01, 1.13273189e+03]) -@pytest.mark.skipif(not AANET_AVAILABLE, reason="aanet required") +@pytest.mark.skipif(not KM3NET_LIB_AVAILABLE, + reason="KM3NeT dataformat required") class TestAANET(unittest.TestCase): def setUp(self): output = GiBUUOutput(TESTDATA_DIR)