diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index e12b15d9d2..e1263e3145 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -12,7 +12,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
- python-version: [3.8, 3.9]
+ python-version: [3.9]
include:
- os: ubuntu-latest
CONDA_OS: linux-64
diff --git a/Playground for the new commondata format.ipynb b/Playground for the new commondata format.ipynb
new file mode 100644
index 0000000000..69ec538ad8
--- /dev/null
+++ b/Playground for the new commondata format.ipynb
@@ -0,0 +1,1076 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "cc3f217c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " data | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.9815 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1.0030 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.9675 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 1.0330 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.9912 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.6717 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.7194 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.6959 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.7020 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.7724 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " data\n",
+ "index \n",
+ "1 0.9815\n",
+ "2 1.0030\n",
+ "3 0.9675\n",
+ "4 1.0330\n",
+ "5 0.9912\n",
+ "... ...\n",
+ "256 0.6717\n",
+ "257 0.7194\n",
+ "258 0.6959\n",
+ "259 0.7020\n",
+ "260 0.7724\n",
+ "\n",
+ "[260 rows x 1 columns]"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "%load_ext autoreload\n",
+ "%autoreload 2\n",
+ "\n",
+ "from pathlib import Path\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "\n",
+ "from reportengine.compat import yaml\n",
+ "import validphys\n",
+ "from validphys.commondataparser import parse_commondata_folder\n",
+ "\n",
+ "# Path to your buildmaster, here I'm guessing vp as installed in edit mode\n",
+ "BUILDMASTER_PATH = Path(validphys.__file__).parent / \"../../../buildmaster\"\n",
+ "DATASET = \"NMCPD\"\n",
+ "\n",
+ "#from validphys.core import CommonDataSpec\n",
+ "#import pandas as pd\n",
+ "#import numpy as np\n",
+ "#from collections import defaultdict\n",
+ "\n",
+ "dataset_path = BUILDMASTER_PATH / DATASET\n",
+ "metadata_file = dataset_path / \"metadata.yaml\"\n",
+ "metadata = yaml.safe_load(metadata_file.read_text())\n",
+ "ndata = metadata[\"ndata\"]\n",
+ "\n",
+ "ret = parse_commondata_folder(DATASET, variants=[\"shifted\"])\n",
+ "ret.data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "ad7f6092",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | name | \n",
+ " stat_1 | \n",
+ " syst_1 | \n",
+ " nuclear | \n",
+ "
\n",
+ " \n",
+ " | treatment | \n",
+ " ADD | \n",
+ " ADD | \n",
+ " ADD | \n",
+ "
\n",
+ " \n",
+ " | type | \n",
+ " UNCORR | \n",
+ " CORR | \n",
+ " NUC_SH | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.0203 | \n",
+ " 0.0109 | \n",
+ " 0.0203 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.0212 | \n",
+ " 0.0134 | \n",
+ " 0.0212 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.0205 | \n",
+ " 0.0112 | \n",
+ " 0.0205 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.0258 | \n",
+ " 0.0195 | \n",
+ " 0.0258 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.0176 | \n",
+ " 0.0121 | \n",
+ " 0.0176 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.0235 | \n",
+ " 0.0034 | \n",
+ " 0.0235 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.0330 | \n",
+ " 0.0033 | \n",
+ " 0.0330 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.0373 | \n",
+ " 0.0026 | \n",
+ " 0.0373 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.0513 | \n",
+ " 0.0029 | \n",
+ " 0.0513 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.0645 | \n",
+ " 0.0034 | \n",
+ " 0.0645 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "name stat_1 syst_1 nuclear\n",
+ "treatment ADD ADD ADD\n",
+ "type UNCORR CORR NUC_SH\n",
+ "index \n",
+ "1 0.0203 0.0109 0.0203\n",
+ "2 0.0212 0.0134 0.0212\n",
+ "3 0.0205 0.0112 0.0205\n",
+ "4 0.0258 0.0195 0.0258\n",
+ "5 0.0176 0.0121 0.0176\n",
+ "... ... ... ...\n",
+ "256 0.0235 0.0034 0.0235\n",
+ "257 0.0330 0.0033 0.0330\n",
+ "258 0.0373 0.0026 0.0373\n",
+ "259 0.0513 0.0029 0.0513\n",
+ "260 0.0645 0.0034 0.0645\n",
+ "\n",
+ "[260 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ret.uncertainties"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "34e3fc68",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | name | \n",
+ " stat_1 | \n",
+ " syst_1 | \n",
+ "
\n",
+ " \n",
+ " | treatment | \n",
+ " ADD | \n",
+ " ADD | \n",
+ "
\n",
+ " \n",
+ " | type | \n",
+ " UNCORR | \n",
+ " CORR | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.0203 | \n",
+ " 0.0109 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.0212 | \n",
+ " 0.0134 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.0205 | \n",
+ " 0.0112 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.0258 | \n",
+ " 0.0195 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.0176 | \n",
+ " 0.0121 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.0235 | \n",
+ " 0.0034 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.0330 | \n",
+ " 0.0033 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.0373 | \n",
+ " 0.0026 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.0513 | \n",
+ " 0.0029 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.0645 | \n",
+ " 0.0034 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "name stat_1 syst_1\n",
+ "treatment ADD ADD\n",
+ "type UNCORR CORR\n",
+ "index \n",
+ "1 0.0203 0.0109\n",
+ "2 0.0212 0.0134\n",
+ "3 0.0205 0.0112\n",
+ "4 0.0258 0.0195\n",
+ "5 0.0176 0.0121\n",
+ "... ... ...\n",
+ "256 0.0235 0.0034\n",
+ "257 0.0330 0.0033\n",
+ "258 0.0373 0.0026\n",
+ "259 0.0513 0.0029\n",
+ "260 0.0645 0.0034\n",
+ "\n",
+ "[260 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ret.enable_variant(None)\n",
+ "ret.uncertainties"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "95d7dd50",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " x | \n",
+ " q2 | \n",
+ " y | \n",
+ "
\n",
+ " \n",
+ " | \n",
+ " mid | \n",
+ " mid | \n",
+ " mid | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.0015 | \n",
+ " 0.16 | \n",
+ " 0.120852 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.0015 | \n",
+ " 0.25 | \n",
+ " 0.188831 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.0015 | \n",
+ " 0.35 | \n",
+ " 0.264363 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.0015 | \n",
+ " 0.45 | \n",
+ " 0.339895 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.0015 | \n",
+ " 0.60 | \n",
+ " 0.453194 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.6750 | \n",
+ " 26.49 | \n",
+ " 0.044463 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.6750 | \n",
+ " 35.40 | \n",
+ " 0.059419 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.6750 | \n",
+ " 47.03 | \n",
+ " 0.078940 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.6750 | \n",
+ " 63.53 | \n",
+ " 0.106635 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.6750 | \n",
+ " 99.03 | \n",
+ " 0.166221 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " x q2 y\n",
+ " mid mid mid\n",
+ "index \n",
+ "1 0.0015 0.16 0.120852\n",
+ "2 0.0015 0.25 0.188831\n",
+ "3 0.0015 0.35 0.264363\n",
+ "4 0.0015 0.45 0.339895\n",
+ "5 0.0015 0.60 0.453194\n",
+ "... ... ... ...\n",
+ "256 0.6750 26.49 0.044463\n",
+ "257 0.6750 35.40 0.059419\n",
+ "258 0.6750 47.03 0.078940\n",
+ "259 0.6750 63.53 0.106635\n",
+ "260 0.6750 99.03 0.166221\n",
+ "\n",
+ "[260 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ret.kinematics"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "b3c5ed78",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " x | \n",
+ " q2 | \n",
+ " y | \n",
+ "
\n",
+ " \n",
+ " | \n",
+ " mid | \n",
+ " mid | \n",
+ " mid | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.0015 | \n",
+ " 0.16 | \n",
+ " 0.120852 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.0015 | \n",
+ " 0.25 | \n",
+ " 0.188831 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.0015 | \n",
+ " 0.35 | \n",
+ " 0.264363 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.0015 | \n",
+ " 0.45 | \n",
+ " 0.339895 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.0015 | \n",
+ " 0.60 | \n",
+ " 0.453194 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.6750 | \n",
+ " 26.49 | \n",
+ " 0.044463 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.6750 | \n",
+ " 35.40 | \n",
+ " 0.059419 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.6750 | \n",
+ " 47.03 | \n",
+ " 0.078940 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.6750 | \n",
+ " 63.53 | \n",
+ " 0.106635 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.6750 | \n",
+ " 99.03 | \n",
+ " 0.166221 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " x q2 y\n",
+ " mid mid mid\n",
+ "index \n",
+ "1 0.0015 0.16 0.120852\n",
+ "2 0.0015 0.25 0.188831\n",
+ "3 0.0015 0.35 0.264363\n",
+ "4 0.0015 0.45 0.339895\n",
+ "5 0.0015 0.60 0.453194\n",
+ "... ... ... ...\n",
+ "256 0.6750 26.49 0.044463\n",
+ "257 0.6750 35.40 0.059419\n",
+ "258 0.6750 47.03 0.078940\n",
+ "259 0.6750 63.53 0.106635\n",
+ "260 0.6750 99.03 0.166221\n",
+ "\n",
+ "[260 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Read the kinematics dataframe\n",
+ "kin_df = None\n",
+ "if True:\n",
+ " kin_file = dataset_path / \"kinematics.yaml\"\n",
+ " kinyaml = yaml.safe_load(kin_file.read_text())\n",
+ " \n",
+ " kin_dict = {i+1: pd.DataFrame(d).stack() for i, d in enumerate(kinyaml[\"bins\"])}\n",
+ " kin_df = pd.concat(kin_dict, axis=1, names=[\"index\"]).swaplevel(0,1).T\n",
+ "kin_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "365489c7",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | name | \n",
+ " stat_1 | \n",
+ " syst_1 | \n",
+ " nuclear | \n",
+ "
\n",
+ " \n",
+ " | treatment | \n",
+ " ADD | \n",
+ " ADD | \n",
+ " ADD | \n",
+ "
\n",
+ " \n",
+ " | type | \n",
+ " UNCORR | \n",
+ " CORR | \n",
+ " NUC_DW | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.0203 | \n",
+ " 0.0109 | \n",
+ " 0.0203 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.0212 | \n",
+ " 0.0134 | \n",
+ " 0.0212 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.0205 | \n",
+ " 0.0112 | \n",
+ " 0.0205 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.0258 | \n",
+ " 0.0195 | \n",
+ " 0.0258 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.0176 | \n",
+ " 0.0121 | \n",
+ " 0.0176 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.0235 | \n",
+ " 0.0034 | \n",
+ " 0.0235 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.0330 | \n",
+ " 0.0033 | \n",
+ " 0.0330 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.0373 | \n",
+ " 0.0026 | \n",
+ " 0.0373 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.0513 | \n",
+ " 0.0029 | \n",
+ " 0.0513 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.0645 | \n",
+ " 0.0034 | \n",
+ " 0.0645 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "name stat_1 syst_1 nuclear\n",
+ "treatment ADD ADD ADD\n",
+ "type UNCORR CORR NUC_DW\n",
+ "index \n",
+ "1 0.0203 0.0109 0.0203\n",
+ "2 0.0212 0.0134 0.0212\n",
+ "3 0.0205 0.0112 0.0205\n",
+ "4 0.0258 0.0195 0.0258\n",
+ "5 0.0176 0.0121 0.0176\n",
+ "... ... ... ...\n",
+ "256 0.0235 0.0034 0.0235\n",
+ "257 0.0330 0.0033 0.0330\n",
+ "258 0.0373 0.0026 0.0373\n",
+ "259 0.0513 0.0029 0.0513\n",
+ "260 0.0645 0.0034 0.0645\n",
+ "\n",
+ "[260 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Read the kinematics dataframe\n",
+ "variant = True\n",
+ "unc_df = None\n",
+ "\n",
+ "def read_uncertainties(unc_file):\n",
+ " uncyaml = yaml.safe_load(unc_file.read_text())\n",
+ " \n",
+ " mindex = pd.MultiIndex.from_tuples([(k, v[\"treatment\"], v[\"type\"]) for k,v in uncyaml[\"definition\"].items()], names=[\"name\", \"treatment\", \"type\"])\n",
+ " # I'm guessing there will be a better way of doing this than calling dataframe twice for the same thing\n",
+ " final_df = pd.DataFrame(pd.DataFrame(uncyaml[\"bins\"]).values, columns=mindex, index=range(1,ndata+1))\n",
+ " final_df.index.name = \"index\"\n",
+ " return final_df \n",
+ "\n",
+ "if True:\n",
+ " unc_df = read_uncertainties(dataset_path / \"uncertainties.yaml\")\n",
+ " \n",
+ " if variant:\n",
+ " # With a variant\n",
+ " var_df = read_uncertainties(dataset_path / \"uncertainties_dw.yaml\")\n",
+ " \n",
+ " unc_df = pd.concat([unc_df, var_df], axis=1)\n",
+ " \n",
+ "unc_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "d3c39164",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " data | \n",
+ "
\n",
+ " \n",
+ " | index | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 1 | \n",
+ " 0.9815 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1.0030 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.9675 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 1.0330 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.9912 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 256 | \n",
+ " 0.6717 | \n",
+ "
\n",
+ " \n",
+ " | 257 | \n",
+ " 0.7194 | \n",
+ "
\n",
+ " \n",
+ " | 258 | \n",
+ " 0.6959 | \n",
+ "
\n",
+ " \n",
+ " | 259 | \n",
+ " 0.7020 | \n",
+ "
\n",
+ " \n",
+ " | 260 | \n",
+ " 0.7724 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
260 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " data\n",
+ "index \n",
+ "1 0.9815\n",
+ "2 1.0030\n",
+ "3 0.9675\n",
+ "4 1.0330\n",
+ "5 0.9912\n",
+ "... ...\n",
+ "256 0.6717\n",
+ "257 0.7194\n",
+ "258 0.6959\n",
+ "259 0.7020\n",
+ "260 0.7724\n",
+ "\n",
+ "[260 rows x 1 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data_df = None\n",
+ " \n",
+ "if True:\n",
+ " data_file = dataset_path / \"data.yaml\"\n",
+ " datayaml = yaml.safe_load(data_file.read_text(encoding=\"utf-8\"))\n",
+ " \n",
+ " data_df = pd.DataFrame(datayaml[\"data_central\"], index=range(1, ndata+1), columns=[\"data\"])\n",
+ " data_df.index.name = \"index\"\n",
+ " \n",
+ "data_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4e0e4ab3",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "5b32b815",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/buildmaster/NMCPD/data.yaml b/buildmaster/NMCPD/data.yaml
new file mode 100644
index 0000000000..4831d2f4e6
--- /dev/null
+++ b/buildmaster/NMCPD/data.yaml
@@ -0,0 +1,261 @@
+data_central:
+- 0.9815
+- 1.003
+- 0.9675
+- 1.033
+- 0.9912
+- 1.008
+- 0.9824
+- 0.9825
+- 0.9736
+- 0.9704
+- 0.9921
+- 0.9959
+- 1.005
+- 1.0
+- 1.014
+- 0.9945
+- 0.9795
+- 0.9966
+- 0.9893
+- 0.9959
+- 0.9842
+- 0.9817
+- 1.011
+- 0.9993
+- 1.02
+- 0.9618
+- 0.9775
+- 0.9642
+- 0.9714
+- 0.9891
+- 0.975
+- 0.9837
+- 0.9924
+- 0.9683
+- 1.008
+- 0.953
+- 0.969
+- 0.9872
+- 0.968
+- 0.9624
+- 0.9797
+- 0.9747
+- 0.9738
+- 0.9813
+- 0.9844
+- 0.9734
+- 0.9821
+- 0.9573
+- 0.9747
+- 1.007
+- 0.9939
+- 0.9645
+- 0.9685
+- 0.9834
+- 0.9925
+- 0.9763
+- 0.968
+- 0.9761
+- 0.9716
+- 0.9817
+- 0.9942
+- 0.9493
+- 0.9601
+- 0.9408
+- 0.962
+- 0.9585
+- 0.9631
+- 0.9849
+- 0.9802
+- 0.9677
+- 0.9581
+- 0.979
+- 0.9764
+- 0.9592
+- 0.9893
+- 0.9738
+- 0.9557
+- 0.9264
+- 0.9308
+- 0.9618
+- 0.9723
+- 0.9633
+- 0.9554
+- 0.9572
+- 0.9766
+- 0.9565
+- 0.9611
+- 0.9669
+- 0.9817
+- 0.9686
+- 0.9572
+- 0.9439
+- 0.9101
+- 0.9539
+- 0.9204
+- 0.9738
+- 0.94
+- 0.9532
+- 0.9526
+- 0.9642
+- 0.9597
+- 0.9551
+- 0.9577
+- 0.9682
+- 0.9578
+- 0.9532
+- 0.9698
+- 0.9635
+- 0.9488
+- 0.9595
+- 1.001
+- 0.981
+- 0.971
+- 0.9477
+- 0.9449
+- 0.9486
+- 0.937
+- 0.945
+- 0.9367
+- 0.9394
+- 0.9328
+- 0.9432
+- 0.9371
+- 0.9592
+- 0.9678
+- 0.9351
+- 0.9385
+- 0.9413
+- 0.9313
+- 0.9445
+- 0.936
+- 0.9397
+- 0.942
+- 0.9245
+- 0.9218
+- 0.9254
+- 0.9291
+- 0.9319
+- 0.9554
+- 0.9233
+- 0.9264
+- 0.9005
+- 0.9227
+- 0.915
+- 0.9292
+- 0.9205
+- 0.9114
+- 0.9409
+- 0.9291
+- 0.9266
+- 0.9263
+- 0.9272
+- 0.9123
+- 0.9272
+- 0.905
+- 0.9039
+- 0.914
+- 0.9427
+- 0.9056
+- 0.9223
+- 0.8966
+- 0.9132
+- 0.9242
+- 0.9212
+- 0.9147
+- 0.8981
+- 0.9068
+- 0.9018
+- 0.8924
+- 0.905
+- 0.8453
+- 0.8859
+- 0.8781
+- 0.9173
+- 0.8983
+- 0.8811
+- 0.9134
+- 0.8869
+- 0.8622
+- 0.8676
+- 0.8787
+- 0.862
+- 0.8684
+- 0.8641
+- 0.8715
+- 0.897
+- 0.8552
+- 0.8761
+- 0.8714
+- 0.8702
+- 0.8445
+- 0.8607
+- 0.8464
+- 0.8534
+- 0.8549
+- 0.8617
+- 0.8651
+- 0.867
+- 0.8343
+- 0.8218
+- 0.8219
+- 0.8637
+- 0.8542
+- 0.8505
+- 0.8302
+- 0.8377
+- 0.8202
+- 0.8459
+- 0.8269
+- 0.8334
+- 0.832
+- 0.8444
+- 0.8104
+- 0.8027
+- 0.8205
+- 0.7953
+- 0.8332
+- 0.7939
+- 0.8222
+- 0.8188
+- 0.7828
+- 0.792
+- 0.8055
+- 0.8197
+- 0.762
+- 0.7732
+- 0.7614
+- 0.7771
+- 0.7608
+- 0.7698
+- 0.7793
+- 0.7754
+- 0.7626
+- 0.7529
+- 0.7705
+- 0.7474
+- 0.7575
+- 0.7632
+- 0.7254
+- 0.7209
+- 0.7323
+- 0.7442
+- 0.728
+- 0.7345
+- 0.7419
+- 0.7263
+- 0.7281
+- 0.7641
+- 0.6626
+- 0.7622
+- 0.6989
+- 0.7365
+- 0.7418
+- 0.7988
+- 0.7357
+- 0.6717
+- 0.7194
+- 0.6959
+- 0.702
+- 0.7724
diff --git a/buildmaster/NMCPD/filter.py b/buildmaster/NMCPD/filter.py
new file mode 100644
index 0000000000..87293497bb
--- /dev/null
+++ b/buildmaster/NMCPD/filter.py
@@ -0,0 +1,69 @@
+#Filter for NMCPD
+
+import sys
+import yaml
+
+def filter_NMCPD():
+ with open('metadata.yaml', 'r') as file:
+ metadata = yaml.safe_load(file)
+
+ version = metadata['hepdata']['version']
+ tables = metadata['hepdata']['tables']
+
+ data_central = []
+ kin = []
+ error = []
+ error_nuc = []
+
+ for i in tables:
+ hepdata_tables="rawdata/HEPData-ins426595-v"+str(version)+"-Table_"+str(i)+".yaml"
+ with open(hepdata_tables, 'r') as file:
+ input = yaml.safe_load(file)
+
+ values = input['dependent_variables'][0]['values']
+ x = float(input['dependent_variables'][0]['qualifiers'][4]['value'])
+ sqrts = float(input['dependent_variables'][0]['qualifiers'][3]['value'])
+
+ for j in range(len(values)):
+
+ data_central_value = input['dependent_variables'][0]['values'][j]['value']
+ data_central.append(data_central_value)
+ Q2 = input['independent_variables'][0]['values'][j]['value']
+ y = Q2 / ( sqrts * sqrts * x )
+ kin_value = {'x' : {'min': None, 'mid': x , 'max': None}, 'q2' : {'min': None, 'mid': Q2 , 'max': None} , 'y' : {'min': None, 'mid': y , 'max': None}}
+ kin.append(kin_value)
+
+ error_value = {'stat_1': input['dependent_variables'][0]['values'][j]['errors'][0]['symerror'], 'syst_1': input['dependent_variables'][0]['values'][j]['errors'][1]['symerror']}
+ error.append(error_value)
+
+ error_value_nuc = {'nuclear': input['dependent_variables'][0]['values'][j]['errors'][0]['symerror']}
+ error_nuc.append(error_value_nuc)
+
+ error_definition = {'stat_1': {'description': "total statistical uncertainty", 'treatment': "ADD", 'type': "UNCORR"},
+ 'syst_1': {'description': "total systematic uncertainty", 'treatment': "ADD", 'type': "CORR"}}
+
+ error_definition_dw = {'nuclear': {'description': "nuclear uncertainty (deweighted)", 'treatment': "ADD", 'type': "NUC_DW"}}
+ error_definition_sh = {'nuclear': {'description': "nuclear uncertainty (shifted)", 'treatment': "ADD", 'type': "NUC_SH"}}
+
+ data_central_yaml = { 'data_central' : data_central }
+ kinematics_yaml = { 'bins' : kin }
+ uncertainties_yaml = { 'definition': error_definition, 'bins' : error }
+ uncertainties_dw_yaml = { 'definition': error_definition_dw, 'bins' : error_nuc }
+ uncertainties_sh_yaml = { 'definition': error_definition_sh, 'bins' : error_nuc }
+
+ with open('data.yaml', 'w') as file:
+ yaml.dump(data_central_yaml, file, sort_keys=False)
+
+ with open('kinematics.yaml', 'w') as file:
+ yaml.dump(kinematics_yaml, file, sort_keys=False)
+
+ with open('uncertainties.yaml', 'w') as file:
+ yaml.dump(uncertainties_yaml, file, sort_keys=False)
+
+ with open('uncertainties_dw.yaml', 'w') as file:
+ yaml.dump(uncertainties_dw_yaml, file, sort_keys=False)
+
+ with open('uncertainties_sh.yaml', 'w') as file:
+ yaml.dump(uncertainties_sh_yaml, file, sort_keys=False)
+
+filter_NMCPD()
diff --git a/buildmaster/NMCPD/kinematics.yaml b/buildmaster/NMCPD/kinematics.yaml
new file mode 100644
index 0000000000..fbb8b2c22e
--- /dev/null
+++ b/buildmaster/NMCPD/kinematics.yaml
@@ -0,0 +1,3121 @@
+bins:
+- x:
+ min: null
+ mid: 0.0015
+ max: null
+ q2:
+ min: null
+ mid: 0.16
+ max: null
+ y:
+ min: null
+ mid: 0.12085166998255134
+ max: null
+- x:
+ min: null
+ mid: 0.0015
+ max: null
+ q2:
+ min: null
+ mid: 0.25
+ max: null
+ y:
+ min: null
+ mid: 0.18883073434773648
+ max: null
+- x:
+ min: null
+ mid: 0.0015
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.26436302808683104
+ max: null
+- x:
+ min: null
+ mid: 0.0015
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.3398953218259257
+ max: null
+- x:
+ min: null
+ mid: 0.0015
+ max: null
+ q2:
+ min: null
+ mid: 0.6
+ max: null
+ y:
+ min: null
+ mid: 0.45319376243456755
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 0.17
+ max: null
+ y:
+ min: null
+ mid: 0.06420244967823041
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 0.25
+ max: null
+ y:
+ min: null
+ mid: 0.09441536717386824
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.13218151404341552
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.16994766091296284
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 0.63
+ max: null
+ y:
+ min: null
+ mid: 0.23792672527814795
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 0.88
+ max: null
+ y:
+ min: null
+ mid: 0.3323420924520162
+ max: null
+- x:
+ min: null
+ mid: 0.003
+ max: null
+ q2:
+ min: null
+ mid: 1.12
+ max: null
+ y:
+ min: null
+ mid: 0.42298084493892973
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 0.16
+ max: null
+ y:
+ min: null
+ mid: 0.036255500994765405
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 0.25
+ max: null
+ y:
+ min: null
+ mid: 0.056649220304320944
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.07930890842604932
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.1019685965477777
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 0.61
+ max: null
+ y:
+ min: null
+ mid: 0.1382240975425431
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 0.88
+ max: null
+ y:
+ min: null
+ mid: 0.1994052554712097
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 1.13
+ max: null
+ y:
+ min: null
+ mid: 0.25605447577553064
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 1.38
+ max: null
+ y:
+ min: null
+ mid: 0.3127036960798516
+ max: null
+- x:
+ min: null
+ mid: 0.005
+ max: null
+ q2:
+ min: null
+ mid: 1.71
+ max: null
+ y:
+ min: null
+ mid: 0.38748066688155525
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 0.16
+ max: null
+ y:
+ min: null
+ mid: 0.022659688121728378
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 0.25
+ max: null
+ y:
+ min: null
+ mid: 0.03540576269020059
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.049568067766280824
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.06373037284236106
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 0.64
+ max: null
+ y:
+ min: null
+ mid: 0.09063875248691351
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 0.86
+ max: null
+ y:
+ min: null
+ mid: 0.12179582365429004
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 1.12
+ max: null
+ y:
+ min: null
+ mid: 0.15861781685209866
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 1.37
+ max: null
+ y:
+ min: null
+ mid: 0.19402357954229926
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 1.75
+ max: null
+ y:
+ min: null
+ mid: 0.24784033883140413
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.31723563370419733
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 2.73
+ max: null
+ y:
+ min: null
+ mid: 0.38663092857699044
+ max: null
+- x:
+ min: null
+ mid: 0.008
+ max: null
+ q2:
+ min: null
+ mid: 3.46
+ max: null
+ y:
+ min: null
+ mid: 0.4900157556323762
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 0.16
+ max: null
+ y:
+ min: null
+ mid: 0.014502200397906163
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 0.26
+ max: null
+ y:
+ min: null
+ mid: 0.023566075646597514
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.031723563370419726
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.040787438619111084
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 0.62
+ max: null
+ y:
+ min: null
+ mid: 0.05619602654188638
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 0.88
+ max: null
+ y:
+ min: null
+ mid: 0.0797621021884839
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 1.12
+ max: null
+ y:
+ min: null
+ mid: 0.10151540278534314
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 1.37
+ max: null
+ y:
+ min: null
+ mid: 0.12417509090707152
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 1.74
+ max: null
+ y:
+ min: null
+ mid: 0.1577114293272295
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 2.23
+ max: null
+ y:
+ min: null
+ mid: 0.20212441804581713
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.24835018181414303
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 3.46
+ max: null
+ y:
+ min: null
+ mid: 0.31361008360472076
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.40515522361650336
+ max: null
+- x:
+ min: null
+ mid: 0.0125
+ max: null
+ q2:
+ min: null
+ mid: 5.41
+ max: null
+ y:
+ min: null
+ mid: 0.4903556509542021
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 0.25
+ max: null
+ y:
+ min: null
+ mid: 0.01618549151552027
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.022659688121728375
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.029133884727936488
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 0.62
+ max: null
+ y:
+ min: null
+ mid: 0.040140018958490266
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 0.88
+ max: null
+ y:
+ min: null
+ mid: 0.05697293013463135
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 1.12
+ max: null
+ y:
+ min: null
+ mid: 0.07251100198953081
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 1.37
+ max: null
+ y:
+ min: null
+ mid: 0.08869649350505109
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 1.75
+ max: null
+ y:
+ min: null
+ mid: 0.11329844060864189
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.14502200397906162
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 2.73
+ max: null
+ y:
+ min: null
+ mid: 0.17674556734948135
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 3.48
+ max: null
+ y:
+ min: null
+ mid: 0.22530204189604217
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.2893965882975024
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 5.49
+ max: null
+ y:
+ min: null
+ mid: 0.35543339368082516
+ max: null
+- x:
+ min: null
+ mid: 0.0175
+ max: null
+ q2:
+ min: null
+ mid: 6.83
+ max: null
+ y:
+ min: null
+ mid: 0.44218762820401375
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 0.26
+ max: null
+ y:
+ min: null
+ mid: 0.011783037823298757
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 0.35
+ max: null
+ y:
+ min: null
+ mid: 0.015861781685209863
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.020393719309555542
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 0.62
+ max: null
+ y:
+ min: null
+ mid: 0.02809801327094319
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 0.86
+ max: null
+ y:
+ min: null
+ mid: 0.038974663569372806
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 1.13
+ max: null
+ y:
+ min: null
+ mid: 0.05121089515510613
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 1.37
+ max: null
+ y:
+ min: null
+ mid: 0.06208754545353576
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 1.74
+ max: null
+ y:
+ min: null
+ mid: 0.07885571466361475
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.10151540278534314
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.12417509090707152
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 3.45
+ max: null
+ y:
+ min: null
+ mid: 0.1563518480399258
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.20257761180825168
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 5.48
+ max: null
+ y:
+ min: null
+ mid: 0.24835018181414303
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 6.92
+ max: null
+ y:
+ min: null
+ mid: 0.31361008360472076
+ max: null
+- x:
+ min: null
+ mid: 0.025
+ max: null
+ q2:
+ min: null
+ mid: 8.92
+ max: null
+ y:
+ min: null
+ mid: 0.40424883609163426
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 0.36
+ max: null
+ y:
+ min: null
+ mid: 0.011653553891174593
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 0.45
+ max: null
+ y:
+ min: null
+ mid: 0.014566942363968244
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 0.64
+ max: null
+ y:
+ min: null
+ mid: 0.020717429139865944
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 0.86
+ max: null
+ y:
+ min: null
+ mid: 0.027839045406694865
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 1.13
+ max: null
+ y:
+ min: null
+ mid: 0.03657921082507581
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 1.38
+ max: null
+ y:
+ min: null
+ mid: 0.04467195658283594
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 1.74
+ max: null
+ y:
+ min: null
+ mid: 0.05632551047401054
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.07251100198953081
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.08869649350505109
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 3.46
+ max: null
+ y:
+ min: null
+ mid: 0.11200360128740026
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 4.45
+ max: null
+ y:
+ min: null
+ mid: 0.14405087448813042
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 5.47
+ max: null
+ y:
+ min: null
+ mid: 0.17706927717979173
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 6.92
+ max: null
+ y:
+ min: null
+ mid: 0.22400720257480053
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 8.96
+ max: null
+ y:
+ min: null
+ mid: 0.29004400795812324
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 11.45
+ max: null
+ y:
+ min: null
+ mid: 0.37064775570541414
+ max: null
+- x:
+ min: null
+ mid: 0.035
+ max: null
+ q2:
+ min: null
+ mid: 14.36
+ max: null
+ y:
+ min: null
+ mid: 0.4648473163257421
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 0.46
+ max: null
+ y:
+ min: null
+ mid: 0.010423456535995055
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 0.61
+ max: null
+ y:
+ min: null
+ mid: 0.01382240975425431
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 0.88
+ max: null
+ y:
+ min: null
+ mid: 0.019940525547120974
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 1.13
+ max: null
+ y:
+ min: null
+ mid: 0.025605447577553064
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 1.37
+ max: null
+ y:
+ min: null
+ mid: 0.03104377272676788
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 1.74
+ max: null
+ y:
+ min: null
+ mid: 0.03942785733180738
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 2.25
+ max: null
+ y:
+ min: null
+ mid: 0.050984298273888846
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.06208754545353576
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 3.46
+ max: null
+ y:
+ min: null
+ mid: 0.07840252090118019
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 4.46
+ max: null
+ y:
+ min: null
+ mid: 0.10106220902290856
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 5.46
+ max: null
+ y:
+ min: null
+ mid: 0.12372189714463694
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 6.9
+ max: null
+ y:
+ min: null
+ mid: 0.1563518480399258
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 8.93
+ max: null
+ y:
+ min: null
+ mid: 0.20235101492703442
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 11.44
+ max: null
+ y:
+ min: null
+ mid: 0.25922683211257264
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 14.82
+ max: null
+ y:
+ min: null
+ mid: 0.33581657796401454
+ max: null
+- x:
+ min: null
+ mid: 0.05
+ max: null
+ q2:
+ min: null
+ mid: 19.19
+ max: null
+ y:
+ min: null
+ mid: 0.43483941505596757
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 0.68
+ max: null
+ y:
+ min: null
+ mid: 0.011006134230553783
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 0.86
+ max: null
+ y:
+ min: null
+ mid: 0.013919522703347433
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 1.11
+ max: null
+ y:
+ min: null
+ mid: 0.0179658955822275
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 1.38
+ max: null
+ y:
+ min: null
+ mid: 0.02233597829141797
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 1.74
+ max: null
+ y:
+ min: null
+ mid: 0.02816275523700527
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.036255500994765405
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 2.75
+ max: null
+ y:
+ min: null
+ mid: 0.04451010166768074
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 3.47
+ max: null
+ y:
+ min: null
+ mid: 0.05616365555885534
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.0723491470743756
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 5.47
+ max: null
+ y:
+ min: null
+ mid: 0.08853463858989587
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 6.91
+ max: null
+ y:
+ min: null
+ mid: 0.11184174637224506
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 8.91
+ max: null
+ y:
+ min: null
+ mid: 0.1442127294032856
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 11.4
+ max: null
+ y:
+ min: null
+ mid: 0.1845146032769311
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 14.89
+ max: null
+ y:
+ min: null
+ mid: 0.24100196866609683
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 19.63
+ max: null
+ y:
+ min: null
+ mid: 0.3177211984496629
+ max: null
+- x:
+ min: null
+ mid: 0.07
+ max: null
+ q2:
+ min: null
+ mid: 26.07
+ max: null
+ y:
+ min: null
+ mid: 0.4219557638096134
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 0.9
+ max: null
+ y:
+ min: null
+ mid: 0.01132984406086419
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 1.11
+ max: null
+ y:
+ min: null
+ mid: 0.013973474341732503
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 1.38
+ max: null
+ y:
+ min: null
+ mid: 0.017372427559991757
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 1.76
+ max: null
+ y:
+ min: null
+ mid: 0.022156139496801085
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.028198722995928655
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 2.75
+ max: null
+ y:
+ min: null
+ mid: 0.0346189679637517
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 3.49
+ max: null
+ y:
+ min: null
+ mid: 0.0439346175249067
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.05627155883562548
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 5.46
+ max: null
+ y:
+ min: null
+ mid: 0.0687343873025761
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 6.91
+ max: null
+ y:
+ min: null
+ mid: 0.08698802495619062
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 8.92
+ max: null
+ y:
+ min: null
+ mid: 0.11229134335878731
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 11.37
+ max: null
+ y:
+ min: null
+ mid: 0.14313369663558426
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 14.87
+ max: null
+ y:
+ min: null
+ mid: 0.1871942013167228
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 19.74
+ max: null
+ y:
+ min: null
+ mid: 0.24850124640162125
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 26.36
+ max: null
+ y:
+ min: null
+ mid: 0.33183854382708894
+ max: null
+- x:
+ min: null
+ mid: 0.09
+ max: null
+ q2:
+ min: null
+ mid: 34.74
+ max: null
+ y:
+ min: null
+ mid: 0.4373319807493578
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 1.13
+ max: null
+ y:
+ min: null
+ mid: 0.011638839807978666
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 1.38
+ max: null
+ y:
+ min: null
+ mid: 0.014213804367265982
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 1.75
+ max: null
+ y:
+ min: null
+ mid: 0.01802475191501121
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.02307168245121435
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.02822161156978898
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 3.49
+ max: null
+ y:
+ min: null
+ mid: 0.03594650524765093
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.0460403663200572
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 5.46
+ max: null
+ y:
+ min: null
+ mid: 0.05623722597483497
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 6.9
+ max: null
+ y:
+ min: null
+ mid: 0.07106902183632992
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 8.92
+ max: null
+ y:
+ min: null
+ mid: 0.09187473547537142
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 11.37
+ max: null
+ y:
+ min: null
+ mid: 0.1171093881563871
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 14.85
+ max: null
+ y:
+ min: null
+ mid: 0.15295289482166655
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 19.74
+ max: null
+ y:
+ min: null
+ mid: 0.20331920160132644
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 26.52
+ max: null
+ y:
+ min: null
+ mid: 0.27315224044919845
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 35.32
+ max: null
+ y:
+ min: null
+ mid: 0.36379099293611195
+ max: null
+- x:
+ min: null
+ mid: 0.11
+ max: null
+ q2:
+ min: null
+ mid: 44.94
+ max: null
+ y:
+ min: null
+ mid: 0.4628756291774878
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 1.4
+ max: null
+ y:
+ min: null
+ mid: 0.011329844060864187
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 1.75
+ max: null
+ y:
+ min: null
+ mid: 0.014162305076080236
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.018127750497382702
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.02217412337626277
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 3.47
+ max: null
+ y:
+ min: null
+ mid: 0.02808182777942767
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 4.48
+ max: null
+ y:
+ min: null
+ mid: 0.036255500994765405
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 5.47
+ max: null
+ y:
+ min: null
+ mid: 0.044267319294947934
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 6.9
+ max: null
+ y:
+ min: null
+ mid: 0.055839945728544935
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 8.92
+ max: null
+ y:
+ min: null
+ mid: 0.0721872921592204
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 11.37
+ max: null
+ y:
+ min: null
+ mid: 0.09201451926573273
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 14.84
+ max: null
+ y:
+ min: null
+ mid: 0.1200963470451604
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 19.76
+ max: null
+ y:
+ min: null
+ mid: 0.15991265617334027
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 26.55
+ max: null
+ y:
+ min: null
+ mid: 0.2148623998685316
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 35.28
+ max: null
+ y:
+ min: null
+ mid: 0.28551207033377757
+ max: null
+- x:
+ min: null
+ mid: 0.14
+ max: null
+ q2:
+ min: null
+ mid: 46.95
+ max: null
+ y:
+ min: null
+ mid: 0.3799544133268384
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 1.82
+ max: null
+ y:
+ min: null
+ mid: 0.011455731217096015
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 2.24
+ max: null
+ y:
+ min: null
+ mid: 0.014099361497964327
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 2.75
+ max: null
+ y:
+ min: null
+ mid: 0.01730948398187585
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 3.47
+ max: null
+ y:
+ min: null
+ mid: 0.021841421606221524
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.02813577941781274
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 5.49
+ max: null
+ y:
+ min: null
+ mid: 0.034556024385635785
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 6.92
+ max: null
+ y:
+ min: null
+ mid: 0.043556956056211224
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 8.93
+ max: null
+ y:
+ min: null
+ mid: 0.056208615257509566
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 11.37
+ max: null
+ y:
+ min: null
+ mid: 0.07156684831779213
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 14.85
+ max: null
+ y:
+ min: null
+ mid: 0.09347121350212957
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 19.75
+ max: null
+ y:
+ min: null
+ mid: 0.12431356677892653
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 26.61
+ max: null
+ y:
+ min: null
+ mid: 0.16749286136644229
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 35.37
+ max: null
+ y:
+ min: null
+ mid: 0.22263143579598133
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 47.01
+ max: null
+ y:
+ min: null
+ mid: 0.2958977607229031
+ max: null
+- x:
+ min: null
+ mid: 0.18
+ max: null
+ q2:
+ min: null
+ mid: 63.04
+ max: null
+ y:
+ min: null
+ mid: 0.39679631644271035
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 2.28
+ max: null
+ y:
+ min: null
+ mid: 0.011480908648342378
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 2.74
+ max: null
+ y:
+ min: null
+ mid: 0.013797232323007946
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 3.48
+ max: null
+ y:
+ min: null
+ mid: 0.017523492147469948
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.022508623534250188
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 5.47
+ max: null
+ y:
+ min: null
+ mid: 0.02754410978352316
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 6.97
+ max: null
+ y:
+ min: null
+ mid: 0.03509733915743262
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 8.93
+ max: null
+ y:
+ min: null
+ mid: 0.04496689220600765
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 11.38
+ max: null
+ y:
+ min: null
+ mid: 0.05730383351672644
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 14.85
+ max: null
+ y:
+ min: null
+ mid: 0.07477697080170365
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 19.74
+ max: null
+ y:
+ min: null
+ mid: 0.09940049856064848
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 26.64
+ max: null
+ y:
+ min: null
+ mid: 0.134145353680632
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 35.42
+ max: null
+ y:
+ min: null
+ mid: 0.1783569229492487
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 46.95
+ max: null
+ y:
+ min: null
+ mid: 0.2364160794033661
+ max: null
+- x:
+ min: null
+ mid: 0.225
+ max: null
+ q2:
+ min: null
+ mid: 63.23
+ max: null
+ y:
+ min: null
+ mid: 0.3183937955415301
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 2.78
+ max: null
+ y:
+ min: null
+ mid: 0.011453442359709978
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 3.46
+ max: null
+ y:
+ min: null
+ mid: 0.014255003800214579
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 4.47
+ max: null
+ y:
+ min: null
+ mid: 0.01841614652802288
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 5.47
+ max: null
+ y:
+ min: null
+ mid: 0.022536089822882584
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 6.89
+ max: null
+ y:
+ min: null
+ mid: 0.028386409301583364
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 8.94
+ max: null
+ y:
+ min: null
+ mid: 0.03683229305604576
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 11.37
+ max: null
+ y:
+ min: null
+ mid: 0.04684375526255484
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 14.87
+ max: null
+ y:
+ min: null
+ mid: 0.06126355679456381
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 19.74
+ max: null
+ y:
+ min: null
+ mid: 0.08132768064053057
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 26.6
+ max: null
+ y:
+ min: null
+ mid: 0.10959049164326816
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 35.43
+ max: null
+ y:
+ min: null
+ mid: 0.14596959093687933
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 46.98
+ max: null
+ y:
+ min: null
+ mid: 0.19355493599250892
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 63.48
+ max: null
+ y:
+ min: null
+ mid: 0.26153400035769403
+ max: null
+- x:
+ min: null
+ mid: 0.275
+ max: null
+ q2:
+ min: null
+ mid: 90.68
+ max: null
+ y:
+ min: null
+ mid: 0.37359645797787805
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 3.57
+ max: null
+ y:
+ min: null
+ mid: 0.011556440942081473
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 4.51
+ max: null
+ y:
+ min: null
+ mid: 0.014599313346999284
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 5.48
+ max: null
+ y:
+ min: null
+ mid: 0.01773929870101022
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 6.9
+ max: null
+ y:
+ min: null
+ mid: 0.022335978291417976
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 8.91
+ max: null
+ y:
+ min: null
+ mid: 0.028842545880657124
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 11.43
+ max: null
+ y:
+ min: null
+ mid: 0.03700003360447934
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 14.85
+ max: null
+ y:
+ min: null
+ mid: 0.048070909801095206
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 19.74
+ max: null
+ y:
+ min: null
+ mid: 0.06390032050327403
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 26.63
+ max: null
+ y:
+ min: null
+ mid: 0.08620392781166096
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 35.45
+ max: null
+ y:
+ min: null
+ mid: 0.11475513484503874
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 47.12
+ max: null
+ y:
+ min: null
+ mid: 0.15253207204226304
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 63.52
+ max: null
+ y:
+ min: null
+ mid: 0.20562048421316956
+ max: null
+- x:
+ min: null
+ mid: 0.35
+ max: null
+ q2:
+ min: null
+ mid: 96.35
+ max: null
+ y:
+ min: null
+ mid: 0.31189442150407565
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 4.54
+ max: null
+ y:
+ min: null
+ mid: 0.011430553785849649
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 5.47
+ max: null
+ y:
+ min: null
+ mid: 0.01377205489176158
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 6.93
+ max: null
+ y:
+ min: null
+ mid: 0.017447959853730852
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 8.92
+ max: null
+ y:
+ min: null
+ mid: 0.02245826867175746
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 11.34
+ max: null
+ y:
+ min: null
+ mid: 0.028551207033377757
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 14.89
+ max: null
+ y:
+ min: null
+ mid: 0.03748919512583729
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 19.77
+ max: null
+ y:
+ min: null
+ mid: 0.04977578157406334
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 26.64
+ max: null
+ y:
+ min: null
+ mid: 0.067072676840316
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 35.5
+ max: null
+ y:
+ min: null
+ mid: 0.08937988092459527
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 47.26
+ max: null
+ y:
+ min: null
+ mid: 0.11898854007032035
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 63.65
+ max: null
+ y:
+ min: null
+ mid: 0.16025434988311235
+ max: null
+- x:
+ min: null
+ mid: 0.45
+ max: null
+ q2:
+ min: null
+ mid: 98.05
+ max: null
+ y:
+ min: null
+ mid: 0.2468647133706075
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 5.53
+ max: null
+ y:
+ min: null
+ mid: 0.011391643210287085
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 6.88
+ max: null
+ y:
+ min: null
+ mid: 0.014172604934317384
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 8.91
+ max: null
+ y:
+ min: null
+ mid: 0.018354347378599985
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 11.34
+ max: null
+ y:
+ min: null
+ mid: 0.023360078481854528
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 14.85
+ max: null
+ y:
+ min: null
+ mid: 0.030590578964333308
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 19.74
+ max: null
+ y:
+ min: null
+ mid: 0.040663840320265286
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 26.64
+ max: null
+ y:
+ min: null
+ mid: 0.05487764468753127
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 35.57
+ max: null
+ y:
+ min: null
+ mid: 0.07327319149907985
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 47.16
+ max: null
+ y:
+ min: null
+ mid: 0.09714826289279184
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 63.56
+ max: null
+ y:
+ min: null
+ mid: 0.13093179791064144
+ max: null
+- x:
+ min: null
+ mid: 0.55
+ max: null
+ q2:
+ min: null
+ mid: 98.82
+ max: null
+ y:
+ min: null
+ mid: 0.203566398199018
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 7.04
+ max: null
+ y:
+ min: null
+ mid: 0.011816607731627243
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 8.88
+ max: null
+ y:
+ min: null
+ mid: 0.014905039297848002
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 11.36
+ max: null
+ y:
+ min: null
+ mid: 0.019067707930580324
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 14.85
+ max: null
+ y:
+ min: null
+ mid: 0.024925656933901214
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 19.79
+ max: null
+ y:
+ min: null
+ mid: 0.03321742429103738
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 26.49
+ max: null
+ y:
+ min: null
+ mid: 0.044463343581080346
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 35.4
+ max: null
+ y:
+ min: null
+ mid: 0.05941873774142108
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 47.03
+ max: null
+ y:
+ min: null
+ mid: 0.07893963943443598
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 63.53
+ max: null
+ y:
+ min: null
+ mid: 0.10663481380543732
+ max: null
+- x:
+ min: null
+ mid: 0.675
+ max: null
+ q2:
+ min: null
+ mid: 99.03
+ max: null
+ y:
+ min: null
+ mid: 0.16622140108850084
+ max: null
diff --git a/buildmaster/NMCPD/metadata.yaml b/buildmaster/NMCPD/metadata.yaml
new file mode 100644
index 0000000000..5a39e97d12
--- /dev/null
+++ b/buildmaster/NMCPD/metadata.yaml
@@ -0,0 +1,63 @@
+# Generalia
+setname: "NMCPD"
+ndata: 260
+observable: {description: "Ratio of deuterium to proton structure function F2", label:"$F_2^d/F_2^p(x,Q^2)$", units: "" }
+kinematics:
+ variables:
+ q2: {description: "Parton momentum transfer", label: "$Q^2$", units: "GeV²"}
+ x: {description: "Bjorken x", label: '$x$', units: ""}
+ y: {description: "Inelasticity", units: ""}
+ file: kinematics.yaml
+
+version: 0
+version_comment: "Initial implementation"
+
+# References
+arXiv:
+ url: "https://arxiv.org/abs/hep-ex/9611022"
+iNSPIRE:
+ url: "https://inspirehep.net/literature/424154"
+hepdata:
+ url: "https://www.hepdata.net/record/ins426595"
+ version: 1
+ tables: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
+
+# Data
+data_central: data.yaml
+data_uncertainties:
+ - uncertainties.yaml
+
+# Data (variants)
+variants:
+ deweighted:
+ data_uncertainties:
+ - uncertainties.yaml
+ - uncertainties_dw.yaml
+ shifted:
+ data_uncertainties:
+ - uncertainties.yaml
+ - uncertainties_sh.yaml
+
+# Plotting
+kinematic_coverage:
+ x: x
+ q2: q2
+dataset_label: "NMC $d/p$"
+plot_x: x
+figure_by:
+ - q2
+
+# Theory
+theory:
+ apfelcomb:
+ repetition_flag:
+ - NMCPD_P
+ FK_tables:
+ - - NMCPD_D1
+ - NMCPD_D2
+ - - NMCPD_P
+ operation: "RATIO"
+
+nnpdf_metadata:
+ nnpdf31_process: "DIS NC"
+ experiment: "NMC"
diff --git a/buildmaster/NMCPD/uncertainties.yaml b/buildmaster/NMCPD/uncertainties.yaml
new file mode 100644
index 0000000000..9e23417c8b
--- /dev/null
+++ b/buildmaster/NMCPD/uncertainties.yaml
@@ -0,0 +1,530 @@
+definition:
+ stat_1:
+ description: total statistical uncertainty
+ treatment: ADD
+ type: UNCORR
+ syst_1:
+ description: total systematic uncertainty
+ treatment: ADD
+ type: CORR
+bins:
+- stat_1: 0.0203
+ syst_1: 0.0109
+- stat_1: 0.0212
+ syst_1: 0.0134
+- stat_1: 0.0205
+ syst_1: 0.0112
+- stat_1: 0.0258
+ syst_1: 0.0195
+- stat_1: 0.0176
+ syst_1: 0.0121
+- stat_1: 0.0277
+ syst_1: 0.007
+- stat_1: 0.0171
+ syst_1: 0.0047
+- stat_1: 0.0137
+ syst_1: 0.0113
+- stat_1: 0.0129
+ syst_1: 0.0099
+- stat_1: 0.0118
+ syst_1: 0.0057
+- stat_1: 0.0108
+ syst_1: 0.0073
+- stat_1: 0.0116
+ syst_1: 0.0078
+- stat_1: 0.0615
+ syst_1: 0.003
+- stat_1: 0.025
+ syst_1: 0.0037
+- stat_1: 0.0208
+ syst_1: 0.0043
+- stat_1: 0.0172
+ syst_1: 0.0046
+- stat_1: 0.0092
+ syst_1: 0.0094
+- stat_1: 0.0157
+ syst_1: 0.0032
+- stat_1: 0.0137
+ syst_1: 0.0033
+- stat_1: 0.0128
+ syst_1: 0.0032
+- stat_1: 0.0098
+ syst_1: 0.0048
+- stat_1: 0.0547
+ syst_1: 0.0041
+- stat_1: 0.025
+ syst_1: 0.003
+- stat_1: 0.0213
+ syst_1: 0.0028
+- stat_1: 0.018
+ syst_1: 0.0035
+- stat_1: 0.0091
+ syst_1: 0.0036
+- stat_1: 0.0083
+ syst_1: 0.0051
+- stat_1: 0.0088
+ syst_1: 0.0054
+- stat_1: 0.01
+ syst_1: 0.0045
+- stat_1: 0.0083
+ syst_1: 0.002
+- stat_1: 0.0086
+ syst_1: 0.0023
+- stat_1: 0.0097
+ syst_1: 0.0042
+- stat_1: 0.0122
+ syst_1: 0.0084
+- stat_1: 0.0543
+ syst_1: 0.0065
+- stat_1: 0.032
+ syst_1: 0.0034
+- stat_1: 0.0233
+ syst_1: 0.0026
+- stat_1: 0.0205
+ syst_1: 0.0022
+- stat_1: 0.0127
+ syst_1: 0.0023
+- stat_1: 0.0108
+ syst_1: 0.0025
+- stat_1: 0.0092
+ syst_1: 0.0035
+- stat_1: 0.0098
+ syst_1: 0.0035
+- stat_1: 0.0072
+ syst_1: 0.003
+- stat_1: 0.0085
+ syst_1: 0.0041
+- stat_1: 0.0103
+ syst_1: 0.0016
+- stat_1: 0.0087
+ syst_1: 0.0022
+- stat_1: 0.0095
+ syst_1: 0.0043
+- stat_1: 0.0134
+ syst_1: 0.0058
+- stat_1: 0.0402
+ syst_1: 0.0064
+- stat_1: 0.0301
+ syst_1: 0.0033
+- stat_1: 0.0268
+ syst_1: 0.0028
+- stat_1: 0.0161
+ syst_1: 0.0025
+- stat_1: 0.0155
+ syst_1: 0.0021
+- stat_1: 0.0129
+ syst_1: 0.0026
+- stat_1: 0.0119
+ syst_1: 0.0026
+- stat_1: 0.0084
+ syst_1: 0.0025
+- stat_1: 0.0087
+ syst_1: 0.0022
+- stat_1: 0.0098
+ syst_1: 0.002
+- stat_1: 0.0092
+ syst_1: 0.0018
+- stat_1: 0.01
+ syst_1: 0.0028
+- stat_1: 0.0143
+ syst_1: 0.0027
+- stat_1: 0.0107
+ syst_1: 0.004
+- stat_1: 0.0375
+ syst_1: 0.0063
+- stat_1: 0.0287
+ syst_1: 0.0064
+- stat_1: 0.0313
+ syst_1: 0.0037
+- stat_1: 0.0131
+ syst_1: 0.0022
+- stat_1: 0.0154
+ syst_1: 0.002
+- stat_1: 0.0124
+ syst_1: 0.0023
+- stat_1: 0.0107
+ syst_1: 0.0027
+- stat_1: 0.0076
+ syst_1: 0.0023
+- stat_1: 0.0071
+ syst_1: 0.002
+- stat_1: 0.0074
+ syst_1: 0.0018
+- stat_1: 0.0065
+ syst_1: 0.0023
+- stat_1: 0.0085
+ syst_1: 0.0017
+- stat_1: 0.0097
+ syst_1: 0.0017
+- stat_1: 0.0085
+ syst_1: 0.0032
+- stat_1: 0.01
+ syst_1: 0.0043
+- stat_1: 0.0375
+ syst_1: 0.0064
+- stat_1: 0.034
+ syst_1: 0.0061
+- stat_1: 0.0207
+ syst_1: 0.003
+- stat_1: 0.0179
+ syst_1: 0.0023
+- stat_1: 0.0183
+ syst_1: 0.0023
+- stat_1: 0.0138
+ syst_1: 0.0025
+- stat_1: 0.0089
+ syst_1: 0.0024
+- stat_1: 0.0087
+ syst_1: 0.0022
+- stat_1: 0.009
+ syst_1: 0.0019
+- stat_1: 0.0069
+ syst_1: 0.0021
+- stat_1: 0.0088
+ syst_1: 0.0016
+- stat_1: 0.0111
+ syst_1: 0.0018
+- stat_1: 0.0101
+ syst_1: 0.0018
+- stat_1: 0.0115
+ syst_1: 0.0021
+- stat_1: 0.0107
+ syst_1: 0.0015
+- stat_1: 0.0144
+ syst_1: 0.0031
+- stat_1: 0.0412
+ syst_1: 0.006
+- stat_1: 0.0214
+ syst_1: 0.0063
+- stat_1: 0.0213
+ syst_1: 0.0029
+- stat_1: 0.0167
+ syst_1: 0.0025
+- stat_1: 0.0138
+ syst_1: 0.0025
+- stat_1: 0.0092
+ syst_1: 0.0025
+- stat_1: 0.0077
+ syst_1: 0.0023
+- stat_1: 0.0077
+ syst_1: 0.002
+- stat_1: 0.0058
+ syst_1: 0.0017
+- stat_1: 0.0069
+ syst_1: 0.0015
+- stat_1: 0.0085
+ syst_1: 0.0015
+- stat_1: 0.0076
+ syst_1: 0.0015
+- stat_1: 0.0097
+ syst_1: 0.0018
+- stat_1: 0.0087
+ syst_1: 0.0014
+- stat_1: 0.009
+ syst_1: 0.0015
+- stat_1: 0.0119
+ syst_1: 0.0022
+- stat_1: 0.0438
+ syst_1: 0.0063
+- stat_1: 0.0344
+ syst_1: 0.0063
+- stat_1: 0.0542
+ syst_1: 0.0068
+- stat_1: 0.0197
+ syst_1: 0.0028
+- stat_1: 0.0117
+ syst_1: 0.0027
+- stat_1: 0.0111
+ syst_1: 0.0023
+- stat_1: 0.0096
+ syst_1: 0.0023
+- stat_1: 0.0069
+ syst_1: 0.0019
+- stat_1: 0.0079
+ syst_1: 0.0016
+- stat_1: 0.0095
+ syst_1: 0.0014
+- stat_1: 0.0082
+ syst_1: 0.0015
+- stat_1: 0.0105
+ syst_1: 0.0015
+- stat_1: 0.0105
+ syst_1: 0.0018
+- stat_1: 0.0103
+ syst_1: 0.0014
+- stat_1: 0.0103
+ syst_1: 0.0013
+- stat_1: 0.0157
+ syst_1: 0.0018
+- stat_1: 0.054
+ syst_1: 0.0065
+- stat_1: 0.0537
+ syst_1: 0.0062
+- stat_1: 0.0281
+ syst_1: 0.0032
+- stat_1: 0.014
+ syst_1: 0.0028
+- stat_1: 0.0136
+ syst_1: 0.0025
+- stat_1: 0.0124
+ syst_1: 0.0024
+- stat_1: 0.0082
+ syst_1: 0.0021
+- stat_1: 0.0089
+ syst_1: 0.0018
+- stat_1: 0.0106
+ syst_1: 0.0016
+- stat_1: 0.0092
+ syst_1: 0.0016
+- stat_1: 0.0114
+ syst_1: 0.0014
+- stat_1: 0.0115
+ syst_1: 0.0017
+- stat_1: 0.0116
+ syst_1: 0.0014
+- stat_1: 0.0114
+ syst_1: 0.0013
+- stat_1: 0.0147
+ syst_1: 0.0012
+- stat_1: 0.0222
+ syst_1: 0.0017
+- stat_1: 0.068
+ syst_1: 0.0063
+- stat_1: 0.0306
+ syst_1: 0.0031
+- stat_1: 0.0169
+ syst_1: 0.0031
+- stat_1: 0.0151
+ syst_1: 0.0026
+- stat_1: 0.0153
+ syst_1: 0.0027
+- stat_1: 0.0097
+ syst_1: 0.0022
+- stat_1: 0.0098
+ syst_1: 0.002
+- stat_1: 0.0117
+ syst_1: 0.0018
+- stat_1: 0.0102
+ syst_1: 0.0017
+- stat_1: 0.0127
+ syst_1: 0.0014
+- stat_1: 0.0126
+ syst_1: 0.0017
+- stat_1: 0.013
+ syst_1: 0.0015
+- stat_1: 0.0124
+ syst_1: 0.0012
+- stat_1: 0.0147
+ syst_1: 0.0011
+- stat_1: 0.0209
+ syst_1: 0.0011
+- stat_1: 0.0345
+ syst_1: 0.0019
+- stat_1: 0.031
+ syst_1: 0.0037
+- stat_1: 0.0143
+ syst_1: 0.0036
+- stat_1: 0.0127
+ syst_1: 0.003
+- stat_1: 0.0125
+ syst_1: 0.0028
+- stat_1: 0.009
+ syst_1: 0.0023
+- stat_1: 0.0087
+ syst_1: 0.0022
+- stat_1: 0.0095
+ syst_1: 0.002
+- stat_1: 0.0081
+ syst_1: 0.0019
+- stat_1: 0.01
+ syst_1: 0.0016
+- stat_1: 0.0097
+ syst_1: 0.0016
+- stat_1: 0.0101
+ syst_1: 0.0017
+- stat_1: 0.0098
+ syst_1: 0.0013
+- stat_1: 0.011
+ syst_1: 0.0011
+- stat_1: 0.0149
+ syst_1: 0.0011
+- stat_1: 0.0191
+ syst_1: 0.001
+- stat_1: 0.0193
+ syst_1: 0.0047
+- stat_1: 0.0146
+ syst_1: 0.0037
+- stat_1: 0.015
+ syst_1: 0.0033
+- stat_1: 0.0106
+ syst_1: 0.0027
+- stat_1: 0.0117
+ syst_1: 0.0022
+- stat_1: 0.012
+ syst_1: 0.0025
+- stat_1: 0.0093
+ syst_1: 0.0022
+- stat_1: 0.0108
+ syst_1: 0.0018
+- stat_1: 0.0109
+ syst_1: 0.0017
+- stat_1: 0.0114
+ syst_1: 0.0018
+- stat_1: 0.0108
+ syst_1: 0.0014
+- stat_1: 0.0122
+ syst_1: 0.0013
+- stat_1: 0.0153
+ syst_1: 0.0011
+- stat_1: 0.0202
+ syst_1: 0.001
+- stat_1: 0.0297
+ syst_1: 0.0011
+- stat_1: 0.0172
+ syst_1: 0.0055
+- stat_1: 0.0161
+ syst_1: 0.0044
+- stat_1: 0.0109
+ syst_1: 0.0032
+- stat_1: 0.0121
+ syst_1: 0.0027
+- stat_1: 0.0137
+ syst_1: 0.0023
+- stat_1: 0.0101
+ syst_1: 0.0024
+- stat_1: 0.0112
+ syst_1: 0.0021
+- stat_1: 0.0112
+ syst_1: 0.0018
+- stat_1: 0.0116
+ syst_1: 0.0019
+- stat_1: 0.0112
+ syst_1: 0.0017
+- stat_1: 0.0126
+ syst_1: 0.0015
+- stat_1: 0.0155
+ syst_1: 0.0013
+- stat_1: 0.0186
+ syst_1: 0.0011
+- stat_1: 0.0248
+ syst_1: 0.001
+- stat_1: 0.0203
+ syst_1: 0.0068
+- stat_1: 0.0155
+ syst_1: 0.0051
+- stat_1: 0.0141
+ syst_1: 0.0033
+- stat_1: 0.0163
+ syst_1: 0.003
+- stat_1: 0.0142
+ syst_1: 0.0023
+- stat_1: 0.0134
+ syst_1: 0.0025
+- stat_1: 0.0128
+ syst_1: 0.002
+- stat_1: 0.0135
+ syst_1: 0.0022
+- stat_1: 0.0127
+ syst_1: 0.0019
+- stat_1: 0.014
+ syst_1: 0.0017
+- stat_1: 0.0169
+ syst_1: 0.0014
+- stat_1: 0.0214
+ syst_1: 0.0013
+- stat_1: 0.0265
+ syst_1: 0.001
+- stat_1: 0.0349
+ syst_1: 0.001
+- stat_1: 0.0158
+ syst_1: 0.008
+- stat_1: 0.0134
+ syst_1: 0.0045
+- stat_1: 0.0143
+ syst_1: 0.0041
+- stat_1: 0.012
+ syst_1: 0.0031
+- stat_1: 0.0165
+ syst_1: 0.0026
+- stat_1: 0.0118
+ syst_1: 0.0028
+- stat_1: 0.0113
+ syst_1: 0.0025
+- stat_1: 0.0109
+ syst_1: 0.0023
+- stat_1: 0.012
+ syst_1: 0.002
+- stat_1: 0.0147
+ syst_1: 0.0018
+- stat_1: 0.0162
+ syst_1: 0.0013
+- stat_1: 0.0213
+ syst_1: 0.0011
+- stat_1: 0.0253
+ syst_1: 0.001
+- stat_1: 0.0242
+ syst_1: 0.0092
+- stat_1: 0.0245
+ syst_1: 0.0066
+- stat_1: 0.0161
+ syst_1: 0.0044
+- stat_1: 0.0211
+ syst_1: 0.0035
+- stat_1: 0.0227
+ syst_1: 0.0026
+- stat_1: 0.0158
+ syst_1: 0.0036
+- stat_1: 0.0146
+ syst_1: 0.0027
+- stat_1: 0.016
+ syst_1: 0.0025
+- stat_1: 0.0187
+ syst_1: 0.002
+- stat_1: 0.0222
+ syst_1: 0.0015
+- stat_1: 0.0281
+ syst_1: 0.0012
+- stat_1: 0.0296
+ syst_1: 0.001
+- stat_1: 0.0356
+ syst_1: 0.0072
+- stat_1: 0.0296
+ syst_1: 0.0055
+- stat_1: 0.028
+ syst_1: 0.0042
+- stat_1: 0.03
+ syst_1: 0.0032
+- stat_1: 0.0282
+ syst_1: 0.0037
+- stat_1: 0.0205
+ syst_1: 0.0037
+- stat_1: 0.0216
+ syst_1: 0.0029
+- stat_1: 0.0267
+ syst_1: 0.0023
+- stat_1: 0.0331
+ syst_1: 0.0021
+- stat_1: 0.0345
+ syst_1: 0.001
+- stat_1: 0.0458
+ syst_1: 0.0012
+- stat_1: 0.0361
+ syst_1: 0.0067
+- stat_1: 0.0465
+ syst_1: 0.0053
+- stat_1: 0.0353
+ syst_1: 0.0046
+- stat_1: 0.0395
+ syst_1: 0.0051
+- stat_1: 0.0281
+ syst_1: 0.0049
+- stat_1: 0.0235
+ syst_1: 0.0034
+- stat_1: 0.033
+ syst_1: 0.0033
+- stat_1: 0.0373
+ syst_1: 0.0026
+- stat_1: 0.0513
+ syst_1: 0.0029
+- stat_1: 0.0645
+ syst_1: 0.0034
diff --git a/buildmaster/NMCPD/uncertainties_dw.yaml b/buildmaster/NMCPD/uncertainties_dw.yaml
new file mode 100644
index 0000000000..0a4fcdf5ab
--- /dev/null
+++ b/buildmaster/NMCPD/uncertainties_dw.yaml
@@ -0,0 +1,266 @@
+definition:
+ nuclear:
+ description: nuclear uncertainty (deweighted)
+ treatment: ADD
+ type: NUC_DW
+bins:
+- nuclear: 0.0203
+- nuclear: 0.0212
+- nuclear: 0.0205
+- nuclear: 0.0258
+- nuclear: 0.0176
+- nuclear: 0.0277
+- nuclear: 0.0171
+- nuclear: 0.0137
+- nuclear: 0.0129
+- nuclear: 0.0118
+- nuclear: 0.0108
+- nuclear: 0.0116
+- nuclear: 0.0615
+- nuclear: 0.025
+- nuclear: 0.0208
+- nuclear: 0.0172
+- nuclear: 0.0092
+- nuclear: 0.0157
+- nuclear: 0.0137
+- nuclear: 0.0128
+- nuclear: 0.0098
+- nuclear: 0.0547
+- nuclear: 0.025
+- nuclear: 0.0213
+- nuclear: 0.018
+- nuclear: 0.0091
+- nuclear: 0.0083
+- nuclear: 0.0088
+- nuclear: 0.01
+- nuclear: 0.0083
+- nuclear: 0.0086
+- nuclear: 0.0097
+- nuclear: 0.0122
+- nuclear: 0.0543
+- nuclear: 0.032
+- nuclear: 0.0233
+- nuclear: 0.0205
+- nuclear: 0.0127
+- nuclear: 0.0108
+- nuclear: 0.0092
+- nuclear: 0.0098
+- nuclear: 0.0072
+- nuclear: 0.0085
+- nuclear: 0.0103
+- nuclear: 0.0087
+- nuclear: 0.0095
+- nuclear: 0.0134
+- nuclear: 0.0402
+- nuclear: 0.0301
+- nuclear: 0.0268
+- nuclear: 0.0161
+- nuclear: 0.0155
+- nuclear: 0.0129
+- nuclear: 0.0119
+- nuclear: 0.0084
+- nuclear: 0.0087
+- nuclear: 0.0098
+- nuclear: 0.0092
+- nuclear: 0.01
+- nuclear: 0.0143
+- nuclear: 0.0107
+- nuclear: 0.0375
+- nuclear: 0.0287
+- nuclear: 0.0313
+- nuclear: 0.0131
+- nuclear: 0.0154
+- nuclear: 0.0124
+- nuclear: 0.0107
+- nuclear: 0.0076
+- nuclear: 0.0071
+- nuclear: 0.0074
+- nuclear: 0.0065
+- nuclear: 0.0085
+- nuclear: 0.0097
+- nuclear: 0.0085
+- nuclear: 0.01
+- nuclear: 0.0375
+- nuclear: 0.034
+- nuclear: 0.0207
+- nuclear: 0.0179
+- nuclear: 0.0183
+- nuclear: 0.0138
+- nuclear: 0.0089
+- nuclear: 0.0087
+- nuclear: 0.009
+- nuclear: 0.0069
+- nuclear: 0.0088
+- nuclear: 0.0111
+- nuclear: 0.0101
+- nuclear: 0.0115
+- nuclear: 0.0107
+- nuclear: 0.0144
+- nuclear: 0.0412
+- nuclear: 0.0214
+- nuclear: 0.0213
+- nuclear: 0.0167
+- nuclear: 0.0138
+- nuclear: 0.0092
+- nuclear: 0.0077
+- nuclear: 0.0077
+- nuclear: 0.0058
+- nuclear: 0.0069
+- nuclear: 0.0085
+- nuclear: 0.0076
+- nuclear: 0.0097
+- nuclear: 0.0087
+- nuclear: 0.009
+- nuclear: 0.0119
+- nuclear: 0.0438
+- nuclear: 0.0344
+- nuclear: 0.0542
+- nuclear: 0.0197
+- nuclear: 0.0117
+- nuclear: 0.0111
+- nuclear: 0.0096
+- nuclear: 0.0069
+- nuclear: 0.0079
+- nuclear: 0.0095
+- nuclear: 0.0082
+- nuclear: 0.0105
+- nuclear: 0.0105
+- nuclear: 0.0103
+- nuclear: 0.0103
+- nuclear: 0.0157
+- nuclear: 0.054
+- nuclear: 0.0537
+- nuclear: 0.0281
+- nuclear: 0.014
+- nuclear: 0.0136
+- nuclear: 0.0124
+- nuclear: 0.0082
+- nuclear: 0.0089
+- nuclear: 0.0106
+- nuclear: 0.0092
+- nuclear: 0.0114
+- nuclear: 0.0115
+- nuclear: 0.0116
+- nuclear: 0.0114
+- nuclear: 0.0147
+- nuclear: 0.0222
+- nuclear: 0.068
+- nuclear: 0.0306
+- nuclear: 0.0169
+- nuclear: 0.0151
+- nuclear: 0.0153
+- nuclear: 0.0097
+- nuclear: 0.0098
+- nuclear: 0.0117
+- nuclear: 0.0102
+- nuclear: 0.0127
+- nuclear: 0.0126
+- nuclear: 0.013
+- nuclear: 0.0124
+- nuclear: 0.0147
+- nuclear: 0.0209
+- nuclear: 0.0345
+- nuclear: 0.031
+- nuclear: 0.0143
+- nuclear: 0.0127
+- nuclear: 0.0125
+- nuclear: 0.009
+- nuclear: 0.0087
+- nuclear: 0.0095
+- nuclear: 0.0081
+- nuclear: 0.01
+- nuclear: 0.0097
+- nuclear: 0.0101
+- nuclear: 0.0098
+- nuclear: 0.011
+- nuclear: 0.0149
+- nuclear: 0.0191
+- nuclear: 0.0193
+- nuclear: 0.0146
+- nuclear: 0.015
+- nuclear: 0.0106
+- nuclear: 0.0117
+- nuclear: 0.012
+- nuclear: 0.0093
+- nuclear: 0.0108
+- nuclear: 0.0109
+- nuclear: 0.0114
+- nuclear: 0.0108
+- nuclear: 0.0122
+- nuclear: 0.0153
+- nuclear: 0.0202
+- nuclear: 0.0297
+- nuclear: 0.0172
+- nuclear: 0.0161
+- nuclear: 0.0109
+- nuclear: 0.0121
+- nuclear: 0.0137
+- nuclear: 0.0101
+- nuclear: 0.0112
+- nuclear: 0.0112
+- nuclear: 0.0116
+- nuclear: 0.0112
+- nuclear: 0.0126
+- nuclear: 0.0155
+- nuclear: 0.0186
+- nuclear: 0.0248
+- nuclear: 0.0203
+- nuclear: 0.0155
+- nuclear: 0.0141
+- nuclear: 0.0163
+- nuclear: 0.0142
+- nuclear: 0.0134
+- nuclear: 0.0128
+- nuclear: 0.0135
+- nuclear: 0.0127
+- nuclear: 0.014
+- nuclear: 0.0169
+- nuclear: 0.0214
+- nuclear: 0.0265
+- nuclear: 0.0349
+- nuclear: 0.0158
+- nuclear: 0.0134
+- nuclear: 0.0143
+- nuclear: 0.012
+- nuclear: 0.0165
+- nuclear: 0.0118
+- nuclear: 0.0113
+- nuclear: 0.0109
+- nuclear: 0.012
+- nuclear: 0.0147
+- nuclear: 0.0162
+- nuclear: 0.0213
+- nuclear: 0.0253
+- nuclear: 0.0242
+- nuclear: 0.0245
+- nuclear: 0.0161
+- nuclear: 0.0211
+- nuclear: 0.0227
+- nuclear: 0.0158
+- nuclear: 0.0146
+- nuclear: 0.016
+- nuclear: 0.0187
+- nuclear: 0.0222
+- nuclear: 0.0281
+- nuclear: 0.0296
+- nuclear: 0.0356
+- nuclear: 0.0296
+- nuclear: 0.028
+- nuclear: 0.03
+- nuclear: 0.0282
+- nuclear: 0.0205
+- nuclear: 0.0216
+- nuclear: 0.0267
+- nuclear: 0.0331
+- nuclear: 0.0345
+- nuclear: 0.0458
+- nuclear: 0.0361
+- nuclear: 0.0465
+- nuclear: 0.0353
+- nuclear: 0.0395
+- nuclear: 0.0281
+- nuclear: 0.0235
+- nuclear: 0.033
+- nuclear: 0.0373
+- nuclear: 0.0513
+- nuclear: 0.0645
diff --git a/buildmaster/NMCPD/uncertainties_sh.yaml b/buildmaster/NMCPD/uncertainties_sh.yaml
new file mode 100644
index 0000000000..d88571f56b
--- /dev/null
+++ b/buildmaster/NMCPD/uncertainties_sh.yaml
@@ -0,0 +1,266 @@
+definition:
+ nuclear:
+ description: nuclear uncertainty (shifted)
+ treatment: ADD
+ type: NUC_SH
+bins:
+- nuclear: 0.0203
+- nuclear: 0.0212
+- nuclear: 0.0205
+- nuclear: 0.0258
+- nuclear: 0.0176
+- nuclear: 0.0277
+- nuclear: 0.0171
+- nuclear: 0.0137
+- nuclear: 0.0129
+- nuclear: 0.0118
+- nuclear: 0.0108
+- nuclear: 0.0116
+- nuclear: 0.0615
+- nuclear: 0.025
+- nuclear: 0.0208
+- nuclear: 0.0172
+- nuclear: 0.0092
+- nuclear: 0.0157
+- nuclear: 0.0137
+- nuclear: 0.0128
+- nuclear: 0.0098
+- nuclear: 0.0547
+- nuclear: 0.025
+- nuclear: 0.0213
+- nuclear: 0.018
+- nuclear: 0.0091
+- nuclear: 0.0083
+- nuclear: 0.0088
+- nuclear: 0.01
+- nuclear: 0.0083
+- nuclear: 0.0086
+- nuclear: 0.0097
+- nuclear: 0.0122
+- nuclear: 0.0543
+- nuclear: 0.032
+- nuclear: 0.0233
+- nuclear: 0.0205
+- nuclear: 0.0127
+- nuclear: 0.0108
+- nuclear: 0.0092
+- nuclear: 0.0098
+- nuclear: 0.0072
+- nuclear: 0.0085
+- nuclear: 0.0103
+- nuclear: 0.0087
+- nuclear: 0.0095
+- nuclear: 0.0134
+- nuclear: 0.0402
+- nuclear: 0.0301
+- nuclear: 0.0268
+- nuclear: 0.0161
+- nuclear: 0.0155
+- nuclear: 0.0129
+- nuclear: 0.0119
+- nuclear: 0.0084
+- nuclear: 0.0087
+- nuclear: 0.0098
+- nuclear: 0.0092
+- nuclear: 0.01
+- nuclear: 0.0143
+- nuclear: 0.0107
+- nuclear: 0.0375
+- nuclear: 0.0287
+- nuclear: 0.0313
+- nuclear: 0.0131
+- nuclear: 0.0154
+- nuclear: 0.0124
+- nuclear: 0.0107
+- nuclear: 0.0076
+- nuclear: 0.0071
+- nuclear: 0.0074
+- nuclear: 0.0065
+- nuclear: 0.0085
+- nuclear: 0.0097
+- nuclear: 0.0085
+- nuclear: 0.01
+- nuclear: 0.0375
+- nuclear: 0.034
+- nuclear: 0.0207
+- nuclear: 0.0179
+- nuclear: 0.0183
+- nuclear: 0.0138
+- nuclear: 0.0089
+- nuclear: 0.0087
+- nuclear: 0.009
+- nuclear: 0.0069
+- nuclear: 0.0088
+- nuclear: 0.0111
+- nuclear: 0.0101
+- nuclear: 0.0115
+- nuclear: 0.0107
+- nuclear: 0.0144
+- nuclear: 0.0412
+- nuclear: 0.0214
+- nuclear: 0.0213
+- nuclear: 0.0167
+- nuclear: 0.0138
+- nuclear: 0.0092
+- nuclear: 0.0077
+- nuclear: 0.0077
+- nuclear: 0.0058
+- nuclear: 0.0069
+- nuclear: 0.0085
+- nuclear: 0.0076
+- nuclear: 0.0097
+- nuclear: 0.0087
+- nuclear: 0.009
+- nuclear: 0.0119
+- nuclear: 0.0438
+- nuclear: 0.0344
+- nuclear: 0.0542
+- nuclear: 0.0197
+- nuclear: 0.0117
+- nuclear: 0.0111
+- nuclear: 0.0096
+- nuclear: 0.0069
+- nuclear: 0.0079
+- nuclear: 0.0095
+- nuclear: 0.0082
+- nuclear: 0.0105
+- nuclear: 0.0105
+- nuclear: 0.0103
+- nuclear: 0.0103
+- nuclear: 0.0157
+- nuclear: 0.054
+- nuclear: 0.0537
+- nuclear: 0.0281
+- nuclear: 0.014
+- nuclear: 0.0136
+- nuclear: 0.0124
+- nuclear: 0.0082
+- nuclear: 0.0089
+- nuclear: 0.0106
+- nuclear: 0.0092
+- nuclear: 0.0114
+- nuclear: 0.0115
+- nuclear: 0.0116
+- nuclear: 0.0114
+- nuclear: 0.0147
+- nuclear: 0.0222
+- nuclear: 0.068
+- nuclear: 0.0306
+- nuclear: 0.0169
+- nuclear: 0.0151
+- nuclear: 0.0153
+- nuclear: 0.0097
+- nuclear: 0.0098
+- nuclear: 0.0117
+- nuclear: 0.0102
+- nuclear: 0.0127
+- nuclear: 0.0126
+- nuclear: 0.013
+- nuclear: 0.0124
+- nuclear: 0.0147
+- nuclear: 0.0209
+- nuclear: 0.0345
+- nuclear: 0.031
+- nuclear: 0.0143
+- nuclear: 0.0127
+- nuclear: 0.0125
+- nuclear: 0.009
+- nuclear: 0.0087
+- nuclear: 0.0095
+- nuclear: 0.0081
+- nuclear: 0.01
+- nuclear: 0.0097
+- nuclear: 0.0101
+- nuclear: 0.0098
+- nuclear: 0.011
+- nuclear: 0.0149
+- nuclear: 0.0191
+- nuclear: 0.0193
+- nuclear: 0.0146
+- nuclear: 0.015
+- nuclear: 0.0106
+- nuclear: 0.0117
+- nuclear: 0.012
+- nuclear: 0.0093
+- nuclear: 0.0108
+- nuclear: 0.0109
+- nuclear: 0.0114
+- nuclear: 0.0108
+- nuclear: 0.0122
+- nuclear: 0.0153
+- nuclear: 0.0202
+- nuclear: 0.0297
+- nuclear: 0.0172
+- nuclear: 0.0161
+- nuclear: 0.0109
+- nuclear: 0.0121
+- nuclear: 0.0137
+- nuclear: 0.0101
+- nuclear: 0.0112
+- nuclear: 0.0112
+- nuclear: 0.0116
+- nuclear: 0.0112
+- nuclear: 0.0126
+- nuclear: 0.0155
+- nuclear: 0.0186
+- nuclear: 0.0248
+- nuclear: 0.0203
+- nuclear: 0.0155
+- nuclear: 0.0141
+- nuclear: 0.0163
+- nuclear: 0.0142
+- nuclear: 0.0134
+- nuclear: 0.0128
+- nuclear: 0.0135
+- nuclear: 0.0127
+- nuclear: 0.014
+- nuclear: 0.0169
+- nuclear: 0.0214
+- nuclear: 0.0265
+- nuclear: 0.0349
+- nuclear: 0.0158
+- nuclear: 0.0134
+- nuclear: 0.0143
+- nuclear: 0.012
+- nuclear: 0.0165
+- nuclear: 0.0118
+- nuclear: 0.0113
+- nuclear: 0.0109
+- nuclear: 0.012
+- nuclear: 0.0147
+- nuclear: 0.0162
+- nuclear: 0.0213
+- nuclear: 0.0253
+- nuclear: 0.0242
+- nuclear: 0.0245
+- nuclear: 0.0161
+- nuclear: 0.0211
+- nuclear: 0.0227
+- nuclear: 0.0158
+- nuclear: 0.0146
+- nuclear: 0.016
+- nuclear: 0.0187
+- nuclear: 0.0222
+- nuclear: 0.0281
+- nuclear: 0.0296
+- nuclear: 0.0356
+- nuclear: 0.0296
+- nuclear: 0.028
+- nuclear: 0.03
+- nuclear: 0.0282
+- nuclear: 0.0205
+- nuclear: 0.0216
+- nuclear: 0.0267
+- nuclear: 0.0331
+- nuclear: 0.0345
+- nuclear: 0.0458
+- nuclear: 0.0361
+- nuclear: 0.0465
+- nuclear: 0.0353
+- nuclear: 0.0395
+- nuclear: 0.0281
+- nuclear: 0.0235
+- nuclear: 0.033
+- nuclear: 0.0373
+- nuclear: 0.0513
+- nuclear: 0.0645
diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py
index ab2cbaf8c5..a23b991f4e 100644
--- a/validphys2/src/validphys/commondataparser.py
+++ b/validphys2/src/validphys/commondataparser.py
@@ -1,18 +1,310 @@
"""
-This module implements parsers for commondata and systype files into useful
-datastructures, contained in the :py:mod:`validphys.coredata` module, which are
-not backed by C++ managed memory, and so they can be easily pickled and
-interfaces with common Python libraries. The integration of these objects into
-the codebase is currently work in progress, and at the moment this module
-serves as a proof of concept.
+This module implements parsers for commondata and its associated metadata and uncertainties files
+into useful structures that can be fed to the main :py:class:`validphys.coredata.CommonData` class.
+
+A CommonData file is completely defined by a name (which defines the folder in which the information is)
+and a variant (which defines which files inside of the folder will be read).
+
+
+In this module a few auxiliary dataclasses that hold special information:
+ - TheoryMeta: contains the necessary information to read the (new style) fktables
+ - KinematicsMeta: containins metadata about the kinematics
+ - ReferenceMeta: literature references for the dataset
+
+The CommonMetaData defines how the CommonData file is to be loaded,
+by modifying the CommonMetaData using one of the loaded Variants one can change the resulting
+:py:class:`validphys.coredata.CommonData` object.
"""
-from operator import attrgetter
+from pathlib import Path
+from typing import Optional, Dict
+import dataclasses
import pandas as pd
+from reportengine.compat import yaml
+from validobj.custom import Parser
+from validobj import ValidationError, parse_input
-from validphys.core import peek_commondata_metadata
+from validphys.utils import parse_yaml_inp
from validphys.coredata import CommonData
+EXT = "pineappl.lz4"
+
+
+# Auxiliary parser for common types or sanity checks
+@Parser
+def ValidPath(path_str: str) -> Path:
+ """Parse strings into paths"""
+ return Path(path_str)
+
+
+@Parser
+def ValidOperation(op_str: str) -> str:
+ """Ensures that the operation defined in the commondata file is implemented in validphys"""
+ ret = op_str.upper()
+ # TODO: move accepted operations to this module so that the convolution receives an operation to apply
+ # instead of an operation to understand
+ from validphys.convolution import OP
+
+ if ret not in OP:
+ raise ValidationError(f"The operation '{op_str}' is not implemented in validphys")
+ return ret
+
+
+# Auxiliary objects
+
+
+@dataclasses.dataclass
+class ValidApfelComb:
+ """Some of the grids might have been converted from apfelcomb and introduce hacks.
+ These are the allowed hacks:
+ - repetition_flag:
+ list of fktables which might need to be repeated
+ necessary to apply c-factors in compound observables
+ - normalization:
+ mapping with the single fktables which need to be normalized and the factor
+ note that when they are global factors they are promoted to conversion_factor
+ - shifts:
+ mapping with the single fktables and their respective shifts
+ necessary to create "gaps" that some cfactors or datasets might expect
+ """
+
+ repetition_flag: Optional[list[str]] = None
+ normalization: Optional[dict] = None
+ shifts: Optional[dict] = None
+
+
+@dataclasses.dataclass
+class TheoryMeta:
+ """Contains the necessary information to load the associated fktables"""
+
+ FK_tables: list[list]
+ operation: ValidOperation
+ conversion_factor: float = 1.0
+ comment: Optional[str] = None
+ apfelcomb: Optional[ValidApfelComb] = None
+ # The following options are transitional so that the yamldb can be used from the theory
+ appl: Optional[bool] = False
+ target_dataset: Optional[str] = None
+
+ def fktables_to_paths(self, grids_folder):
+ """Given a source for pineappl grids, constructs the lists of fktables
+ to be loaded"""
+ ret = []
+ for operand in self.FK_tables:
+ ret.append([grids_folder / f"{m}.{EXT}" for m in operand])
+ return ret
+
+ @classmethod
+ def parser(cls, meta: dict):
+ """The yaml databases in the server use "operands" instead of "FK_tables" """
+ if "operands" in meta:
+ meta["FK_tables"] = meta.pop("operands")
+ return parse_input(meta, cls)
+
+
+ValidTheory = Parser(TheoryMeta.parser)
+
+
+@dataclasses.dataclass
+class ValidKinematics:
+ """Contains all metadata for the kinematics of the dataset"""
+
+ file: ValidPath
+ variables: dict
+
+
+@dataclasses.dataclass
+class ValidReference:
+ """Holds literature information for the dataset"""
+
+ url: str
+ version: int = 0
+ tables: list[int] = dataclasses.field(default_factory=list)
+
+
+@dataclasses.dataclass
+class Variant:
+ """Defines the keys of the CommonMetaData that can be overwritten"""
+
+ data_uncertainties: list[ValidPath]
+
+
+@Parser
+def ValidVariants(variant_dict: dict) -> Dict[str, Variant]:
+ """Variants of a dataset are allowed to overwrite a subset of the keys of a dataset
+ (those defined in the Variant dataclass).
+ This wrapper class runs over the dictionary of variant and parses them into valid Variants
+ """
+ return {k: parse_input(v, Variant) for k, v in variant_dict.items()}
+
+
+@dataclasses.dataclass
+class CommonMetaData:
+ setname: str
+ ndata: int
+ observable: dict
+ kinematics: ValidKinematics
+ kinematic_coverage: dict
+ data_central: ValidPath
+ data_uncertainties: list[ValidPath]
+ dataset_label: str
+ plot_x: str
+ figure_by: list[str]
+ theory: ValidTheory
+ nnpdf_metadata: dict
+ version: int
+ version_comment: str = ""
+ arXiv: Optional[ValidReference] = None
+ iNSPIRE: Optional[ValidReference] = None
+ hepdata: Optional[ValidReference] = None
+ variants: Optional[ValidVariants] = dataclasses.field(default_factory=dict)
+
+ def apply_variant(self, variant_name):
+ """Return a new instance of this class with the variant applied
+
+ This class also defines how the variant is applied to the commondata
+ """
+ try:
+ variant = self.variants[variant_name]
+ except KeyError as e:
+ raise ValueError(f"The requested variant does not exist in {ret.name}") from e
+
+ return dataclasses.replace(self, data_uncertainties=variant.data_uncertainties)
+
+
+# TODO: will be moved to coredata.py and will substitute CommonData.py
+# and obviously the folder here is only for development purposes
+_folder_data = Path(__file__).parent / "../../../buildmaster"
+
+
+@dataclasses.dataclass
+class _CommonData:
+ """
+ Data, kinematics and uncertainties contained in Commondata files.
+ A CommonData is only defined by its name and the enabled variant(s).
+
+ The information from CommonData is provided by the following properties
+ - metadata: all metadata information for the dataset
+ - data: central data for the dataset
+ - uncertainties: uncertainties of the dataset
+ - kinematics: kinematic information
+ """
+
+ name: str
+ variants: list[str] = dataclasses.field(default_factory=list)
+
+ _metadata: Optional[CommonMetaData] = None
+
+ def enable_variant(self, new_variant):
+ """Function to enable a new variant for the CommonData
+ This function checks whether the variant is accepted and, if it is,
+ it gets added to the ``variants`` property of this class so that
+ when the metadata is accessed it contains the variant information.
+
+ The attribute ``metadata`` gets then replace with a new instance of ``CommonMetaData``
+ """
+ if new_variant is None:
+ # Reset the metadata to the unvaried state
+ self.variants = []
+ self._metadata = None
+ return
+
+ if new_variant not in self.metadata.variants:
+ raise ValueError(f"The requested variant does not exist in {self.name}")
+
+ self.variants.append(new_variant)
+ self._metadata = None
+
+ # The files where the CommonData information is retreived from as defined by the metadata
+ @property
+ def metadata_file(self):
+ return _folder_data / self.name / "metadata.yaml"
+
+ @property
+ def data_file(self):
+ return _folder_data / self.name / self.metadata.data_central
+
+ @property
+ def uncertainity_files(self):
+ return [_folder_data / self.name / i for i in self.metadata.data_uncertainties]
+
+ @property
+ def kinematics_file(self):
+ return _folder_data / self.name / self.metadata.kinematics.file
+
+ @property
+ def ndata(self):
+ return self.metadata.ndata
+
+ @property
+ def metadata(self):
+ if self._metadata is None:
+ # Read the metadata for the first time
+ ret = parse_yaml_inp(self.metadata_file, CommonMetaData)
+
+ # Iterate over variants to update the information in the original metadata
+ for variant_name in self.variants:
+ ret = ret.apply_variant(variant_name)
+
+ self._metadata = ret
+ return self._metadata
+
+ @property
+ def data(self):
+ """Pandas DataFrame containing the central data"""
+ datayaml = yaml.safe_load(self.data_file.read_text(encoding="utf-8"))
+ data_df = pd.DataFrame(
+ datayaml["data_central"], index=range(1, self.ndata + 1), columns=["data"]
+ )
+ data_df.index.name = "index"
+ return data_df
+
+ @property
+ def uncertainties(self):
+ """Pandas DataFrame containing all uncertainties"""
+ # TODO: uncertainties are complicated enough that they _might_ need their own class
+ all_df = []
+ for ufile in self.uncertainity_files:
+ uncyaml = yaml.safe_load(ufile.read_text())
+
+ mindex = pd.MultiIndex.from_tuples(
+ [(k, v["treatment"], v["type"]) for k, v in uncyaml["definition"].items()],
+ names=["name", "treatment", "type"],
+ )
+ # I'm guessing there will be a better way of doing this than calling dataframe twice for the same thing?
+ final_df = pd.DataFrame(
+ pd.DataFrame(uncyaml["bins"]).values,
+ columns=mindex,
+ index=range(1, self.ndata + 1),
+ )
+ final_df.index.name = "index"
+ all_df.append(final_df)
+ return pd.concat(all_df, axis=1)
+
+ @property
+ def kinematics(self):
+ """Pandas DataFrame containing kinematic information"""
+ kinyaml = yaml.safe_load(self.kinematics_file.read_text())
+
+ kin_dict = {i + 1: pd.DataFrame(d).stack() for i, d in enumerate(kinyaml["bins"])}
+ kin_df = pd.concat(kin_dict, axis=1, names=["index"]).swaplevel(0, 1).T
+ return kin_df
+
+
+def parse_commondata_folder(commondata, variants=[]):
+ """Given a commondata folder, parse the entire content into the appropiate objects
+ A list of variants can be also given
+ """
+ cmdata = _CommonData(commondata, variants=variants)
+ return cmdata
+
+
+def parse_commondata_metadata(metadata_file):
+ """Transitional function, it will be part of the load_commondata function below"""
+ return parse_yaml_inp(metadata_file, CommonMetaData)
+
+
+##### TODO: the functions below have not been touched yet so they are targetting old commondata
def load_commondata(spec):
"""
Load the data corresponding to a CommonDataSpec object.
@@ -42,12 +334,12 @@ def parse_commondata(commondatafile, systypefile, setname):
and systype files.
"""
# First parse commondata file
- commondatatable = pd.read_csv(commondatafile, sep=r'\s+', skiprows=1, header=None)
+ commondatatable = pd.read_csv(commondatafile, sep=r"\s+", skiprows=1, header=None)
# Remove NaNs
# TODO: replace commondata files with bad formatting
# Build header
- commondataheader = ['entry', 'process', 'kin1', 'kin2', 'kin3', 'data', 'stat']
- nsys = (commondatatable.shape[1] - len(commondataheader)) // 2
+ commondataheader = ["entry", "process", "kin1", "kin2", "kin3", "data", "stat"]
+ nsys = (commondatatable.shape[1] - len(commondataheader)) // 2
commondataheader += ["ADD", "MULT"] * nsys
commondatatable.columns = commondataheader
@@ -55,8 +347,13 @@ def parse_commondata(commondatafile, systypefile, setname):
ndata = len(commondatatable)
commondataproc = commondatatable["process"][1]
# Check for consistency with commondata metadata
- cdmetadata = peek_commondata_metadata(commondatafile)
- if (setname, nsys, ndata) != attrgetter('name', 'nsys', 'ndata')(cdmetadata):
+ # TODO: the check for consistency would introduce a circular import
+ # this entire function is to be removed _anyway_
+ from validphys.core import peek_commondata_metadata
+ from operator import attrgetter
+
+ cdmetadata = peek_commondata_metadata(commondatafile)
+ if (setname, nsys, ndata) != attrgetter("name", "nsys", "ndata")(cdmetadata):
raise ValueError("Commondata table information does not match metadata")
# Now parse the systype file
@@ -70,18 +367,18 @@ def parse_commondata(commondatafile, systypefile, setname):
nkin=3,
nsys=nsys,
commondata_table=commondatatable,
- systype_table=systypetable
+ systype_table=systypetable,
)
+
def parse_systypes(systypefile):
- """Parses a systype file and returns a pandas dataframe.
- """
+ """Parses a systype file and returns a pandas dataframe."""
systypeheader = ["sys_index", "type", "name"]
try:
systypetable = pd.read_csv(
systypefile, sep=r"\s+", names=systypeheader, skiprows=1, header=None
)
- systypetable.dropna(axis='columns', inplace=True)
+ systypetable.dropna(axis="columns", inplace=True)
# Some datasets e.g. CMSWCHARMRAT have no systematics
except pd.errors.EmptyDataError:
systypetable = pd.DataFrame(columns=systypeheader)
diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py
index 694135e3ae..2214866c4a 100644
--- a/validphys2/src/validphys/core.py
+++ b/validphys2/src/validphys/core.py
@@ -558,8 +558,8 @@ def __init__(self, fkpath, cfactors, metadata=None):
# If this is a yaml file that loads an applgrid-converted pineappl,
# keep also the name of the target
# this is needed since we can now easily reutilize grids
- if not self.legacy and self.metadata.get("appl"):
- super().__init__(fkpath, cfactors, self.metadata.get("target_dataset"))
+ if not self.legacy and self.metadata.appl:
+ super().__init__(fkpath, cfactors, self.metadata.target_dataset)
else:
super().__init__(fkpath, cfactors)
diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py
index d9a86bb092..678775958e 100644
--- a/validphys2/src/validphys/loader.py
+++ b/validphys2/src/validphys/loader.py
@@ -365,15 +365,13 @@ def check_fkyaml(self, name, theoryID, cfac):
Receives a yaml file describing the fktables necessary for a given observable
the theory ID and the corresponding cfactors
"""
- theory = self.check_theoryID(theoryID)
- fkpath = (theory.yamldb_path / name).with_suffix(".yaml")
- metadata, fklist = pineparser.get_yaml_information(fkpath, theory.path)
- op = metadata["operation"]
+ _, theopath = self.check_theoryID(theoryID)
+ metadata, fklist = pineparser.get_yaml_information(fkpath, theopath)
# TODO:
# at the moment there are no pineappl specific c-factors
# so they need to be loaded from the NNPDF names / compounds files
- cfac_name = metadata["target_dataset"]
+ cfac_name = metadata.target_dataset
# check whether there is a compound file
cpath = theory.path / "compound" / f"FK_{cfac_name}-COMPOUND.dat"
if cpath.exists():
@@ -385,7 +383,7 @@ def check_fkyaml(self, name, theoryID, cfac):
###
fkspecs = [FKTableSpec(i, c, metadata) for i, c in zip(fklist, cfactors)]
- return fkspecs, op
+ return fkspecs, metadata.operation
def check_compound(self, theoryID, setname, cfac):
thid, theopath = self.check_theoryID(theoryID)
diff --git a/validphys2/src/validphys/pineparser.py b/validphys2/src/validphys/pineparser.py
index a0c696ec56..eaa076292c 100644
--- a/validphys2/src/validphys/pineparser.py
+++ b/validphys2/src/validphys/pineparser.py
@@ -10,9 +10,7 @@
from reportengine.compat import yaml
from validphys.coredata import FKTableData
-
-########### This part might eventually be part of whatever commondata reader
-EXT = "pineappl.lz4"
+from validphys.commondataparser import TheoryMeta, EXT
class YamlFileNotFound(FileNotFoundError):
@@ -44,7 +42,7 @@ def _load_yaml(yaml_file):
return ret
-def pineko_yaml(yaml_file, grids_folder, check_grid_existence=True):
+def pineko_yaml(yaml_file, grids_folder):
"""Given a yaml_file, returns the corresponding dictionary and grids.
The dictionary contains all information and we return an extra field
@@ -56,8 +54,6 @@ def pineko_yaml(yaml_file, grids_folder, check_grid_existence=True):
path of the yaml file for the given dataset
grids_folder : pathlib.Path
path of the grids folder
- check_grid_existence: bool
- if True (default) checks whether the grid exists
Returns
-------
@@ -68,18 +64,13 @@ def pineko_yaml(yaml_file, grids_folder, check_grid_existence=True):
"""
yaml_content = _load_yaml(yaml_file)
- # Turn the operands and the members into paths (and check all of them exist)
- ret = []
- for operand in yaml_content["operands"]:
- tmp = []
- for member in operand:
- p = grids_folder / f"{member}.{EXT}"
- if not p.exists() and check_grid_existence:
- raise GridFileNotFound(f"Failed to find {p}")
- tmp.append(p)
- ret.append(tmp)
-
- return yaml_content, ret
+ # TODO: the theory metadata can be found inside the commondata metadata
+ # however, for the time being, pineappl tables contain this information in the `yamldb` database
+ # they should be 100% compatible (and if they are not there is something wrong somewhere)
+ # so already at this stage, use TheoryMeta parser to get the metadata for pineappl theories
+ theory_meta = TheoryMeta.parser(yaml_content) # TODO: why ValidTheory is not usable here?
+ member_paths = theory_meta.fktables_to_paths(grids_folder)
+ return theory_meta, member_paths
def pineko_apfelcomb_compatibility_flags(gridpaths, metadata):
@@ -120,7 +111,8 @@ def pineko_apfelcomb_compatibility_flags(gridpaths, metadata):
shift: list(int)
Shift in the data index for each grid that forms the fktable
"""
- if metadata.get("apfelcomb") is None:
+ apfelcomb = metadata.apfelcomb
+ if apfelcomb is None:
return None
# Can't pathlib understand double suffixes?
@@ -128,24 +120,24 @@ def pineko_apfelcomb_compatibility_flags(gridpaths, metadata):
ret = {}
# Check whether we have a normalization active and whether it affects any of the grids
- if metadata["apfelcomb"].get("normalization") is not None:
- norm_info = metadata["apfelcomb"]["normalization"]
+ if apfelcomb.normalization is not None:
+ norm_info = apfelcomb.normalization
# Now fill the operands that need normalization
ret["normalization"] = [norm_info.get(op, 1.0) for op in operands]
# Check whether the repetition flag is active
- if metadata["apfelcomb"].get("repetition_flag") is not None:
+ if apfelcomb.repetition_flag is not None:
if len(operands) == 1:
- ret["repetition_flag"] = operands[0] in metadata["apfelcomb"]["repetition_flag"]
+ ret["repetition_flag"] = operands[0] in apfelcomb.repetition_flag
else:
# Just for the sake of it, let's check whether we did something stupid
- if any(op in metadata["apfelcomb"]["repetition_flag"] for op in operands):
+ if any(op in apfelcomb.repetition_flag for op in operands):
raise ValueError(f"The yaml info for {metadata['target_dataset']} is broken")
# Check whether the dataset has shifts
# NOTE: this only happens for ATLASZPT8TEVMDIST, if that gets fixed we might as well remove it
- if metadata["apfelcomb"].get("shifts") is not None:
- shift_info = metadata["apfelcomb"]["shifts"]
+ if apfelcomb.shifts is not None:
+ shift_info = apfelcomb.shifts
ret["shifts"] = [shift_info.get(op, 0) for op in operands]
return ret
@@ -283,7 +275,7 @@ def pineappl_reader(fkspec):
ndata += apfelcomb["shifts"][i]
# Check conversion factors and remove the x* from the fktable
- raw_fktable *= fkspec.metadata.get("conversion_factor", 1.0) / xdivision
+ raw_fktable *= fkspec.metadata.conversion_factor / xdivision
# Create the multi-index for the dataframe
# for optimized pineappls different grids can potentially have different indices
diff --git a/validphys2/src/validphys/plotoptions/core.py b/validphys2/src/validphys/plotoptions/core.py
index d96aef7290..652165f58d 100644
--- a/validphys2/src/validphys/plotoptions/core.py
+++ b/validphys2/src/validphys/plotoptions/core.py
@@ -159,10 +159,8 @@ def from_commondata(cls, commondata, cuts=None, normalize=False):
plot_params = ChainMap()
if commondata.plotfiles:
for file in commondata.plotfiles:
- with open(file) as f:
- processed_input = yaml.round_trip_load(f)
- pf = parse_yaml_inp(processed_input, PlottingFile, file)
- config_params = dataclasses.asdict(pf, dict_factory=dict_factory)
+ pf = parse_yaml_inp(file, PlottingFile)
+ config_params = dataclasses.asdict(pf, dict_factory=dict_factory)
plot_params = plot_params.new_child(config_params)
if normalize and 'normalize' in plot_params:
plot_params = plot_params.new_child(config_params['normalize'])
diff --git a/validphys2/src/validphys/utils.py b/validphys2/src/validphys/utils.py
index 0c2956daaa..01583cee2a 100644
--- a/validphys2/src/validphys/utils.py
+++ b/validphys2/src/validphys/utils.py
@@ -12,14 +12,18 @@
import numpy as np
from validobj import parse_input, ValidationError
+from reportengine.compat import yaml
-def parse_yaml_inp(inp, spec, path):
- """Helper function to parse yaml using the `validobj` library and print
+def parse_yaml_inp(input_yaml, spec):
+ """
+ Helper function to parse yaml using the `validobj` library and print
useful error messages in case of a parsing error.
https://validobj.readthedocs.io/en/latest/examples.html#yaml-line-numbers
"""
+ input_yaml = pathlib.Path(input_yaml)
+ inp = yaml.round_trip_load(input_yaml.open("r", encoding="utf-8"))
try:
return parse_input(inp, spec)
except ValidationError as e:
@@ -34,7 +38,7 @@ def parse_yaml_inp(inp, spec, path):
# ``(line_number, column)`` for a given item in
# the mapping.
line = current_inp.lc.item(wrong_field)[0]
- error_text_lines.append(f"Problem processing key at line {line} in {path}:")
+ error_text_lines.append(f"Problem processing key at line {line} in {input_yaml}:")
current_inp = current_inp[wrong_field]
elif hasattr(current_exc, 'wrong_index'):
wrong_index = current_exc.wrong_index
@@ -42,7 +46,7 @@ def parse_yaml_inp(inp, spec, path):
# a given item.
line = current_inp.lc.item(wrong_index)[0]
current_inp = current_inp[wrong_index]
- error_text_lines.append(f"Problem processing list item at line {line} in {path}:")
+ error_text_lines.append(f"Problem processing list item at line {line} in {input_yaml}:")
elif hasattr(current_exc, 'unknown'):
unknown_lines = []
for u in current_exc.unknown:
@@ -50,7 +54,7 @@ def parse_yaml_inp(inp, spec, path):
unknown_lines.sort()
for line, key in unknown_lines:
error_text_lines.append(
- f"Unknown key {key!r} defined at line {line} in {path}:"
+ f"Unknown key {key!r} defined at line {line} in {input_yaml}:"
)
error_text_lines.append(str(current_exc))
current_exc = current_exc.__cause__