From c7a8739e41cf80af84c1003ed3a024581b399da4 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Thu, 23 Feb 2023 14:25:53 +0100 Subject: [PATCH 01/52] Groups of commit with the first on-development version of the commondata reader new commondata reader improve the notebook remove duplicated functions make theory optional remove old style data that was included with this pr updated reader to the new (new) format some parser updates update the reader: definition->definitions, add a columns of 0s when no stat, return multiplicative uncertainties as a % for compatibility reorder in the parser handle nonstr applied suggestion for ValidOperation add check for -1 factors when they are just eigenvectors fill the mid kinematic value with the average of min and max update notebook ; allow for hepdata version to be None update notebook ignore kinematic variables beyond the 3rd one fix tests minimal set of modifications so that one can actually use the new cd in validphys actions first movements towards the deprecation of the yaml database; take the commondata as source of truth when one in the new format is read add a specific error for datasets without TheoryMetaData update commondataparser to "fake" PlotOptions separate plotting options so that they are compatible with the old-commondata plotting options, more testing needed import plotoptions use kinematic coverage to select the kinematics document a bit better each class inside the parser read kinematic_coverage as a list ; add a few checks add the transitional identity tranformation remove todo and add extra info about the self.legacy use the kinematic coverage variables for the filter --- ...ground for the new commondata format.ipynb | 1723 +++++++++++++++++ .../examples/data_theory_comparison.yaml | 15 +- validphys2/src/validphys/commondataparser.py | 627 +++++- validphys2/src/validphys/config.py | 21 +- validphys2/src/validphys/convolution.py | 3 +- validphys2/src/validphys/core.py | 43 +- validphys2/src/validphys/coredata.py | 29 +- validphys2/src/validphys/filters.py | 56 +- validphys2/src/validphys/fitdata.py | 2 +- validphys2/src/validphys/kinematics.py | 24 +- validphys2/src/validphys/loader.py | 123 +- validphys2/src/validphys/pineparser.py | 73 +- .../src/validphys/plotoptions/__init__.py | 13 - validphys2/src/validphys/plotoptions/core.py | 121 +- .../validphys/plotoptions/kintransforms.py | 25 + .../validphys/plotoptions/plottingoptions.py | 97 + validphys2/src/validphys/results.py | 2 +- validphys2/src/validphys/tests/test_loader.py | 3 +- .../theorycovariance/theorycovarianceutils.py | 2 +- validphys2/src/validphys/utils.py | 14 +- 20 files changed, 2753 insertions(+), 263 deletions(-) create mode 100644 Playground for the new commondata format.ipynb create mode 100644 validphys2/src/validphys/plotoptions/plottingoptions.py diff --git a/Playground for the new commondata format.ipynb b/Playground for the new commondata format.ipynb new file mode 100644 index 0000000000..144b9c1aac --- /dev/null +++ b/Playground for the new commondata format.ipynb @@ -0,0 +1,1723 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "cc3f217c", + "metadata": {}, + "outputs": [], + "source": [ + "from inspect import ismethod\n", + "from IPython.display import HTML as html_print\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "\n", + "from validphys.api import API\n", + "from validphys.commondataparser import parse_commondata_new\n", + "from validphys.loader import TheoryMetadataNotFound, Loader\n", + "l = Loader()\n", + "fig = None" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3c46df40-f8ed-48a0-853d-a6be2095d105", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LHAPDF 6.5.3 loading all 101 PDFs in set NNPDF40_nnlo_as_01180\n", + "NNPDF40_nnlo_as_01180, version 1; 101 PDF members\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jumax9/Academic_Workspace/NNPDF/src/nnpdf/validphys2/src/validphys/utils.py:209: FutureWarning: In a future version of pandas, a length 1 tuple will be returned when iterating over a groupby with a grouper equal to a list of length 1. Don't supply a list with a single grouper to avoid this warning.\n", + " for same_vals, table in gb:\n" + ] + }, + { + "data": { + "image/png": "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lNOHRCu5ugOgsbGx0xu6PVcdA465Cq5aHzAxMZE9e/YAsGjRIm1/bGwsv/nNb/jJT37Cn//8Z0wmE76+viiKovX0tbj33nu1f8fFxfHaa69x0UUXUVNTowV9QgghXENRFMYFejIusLWX7WR5HesPltDY7KjUEORlJiPGDw+T80e/v78/V155ZevjTp5k7dq1WK2OEisJCQkkJCR0Obd6qKcPCQcJ6Lox2GVLhgtVVbUh1LVr1/L8889z8OBBqqqqaG5upqGhgbq6um6LKWdlZfH000+ze/duysvLsdvtABQWFpKUlDQor0MIIcaySIsHkZbW9+mSqgY2552joclR7NjPw7GahY/ZudRJZGSklkChqip5eXmsWLECVVW1AsjR0dGyMtIwIwFdNxYuXMjChQu11OHecnNzc9k3kZiYmEH/VnPgwAHGjRvH8ePHufbaa3nwwQf57W9/i7+/P19//TX33XcfVqu1y4CutraWefPmMW/ePN59912CgoIoLCxk3rx52jc+IYQQgyvYx8z8lNbRlPJaKzuOlVHd2ASAl5uRzBgL/p6tQ62Komg9dOCYTpObm0tOTg7gWKlFVq8YHiSgE07Wr19Pbm4ujzzyCFlZWdjtdl555RWtq/2DDz5wOt5kMnXowTx48CClpaW88MILREVFAWjZVUIIIYYHi6eJuUkh2nZ1QxNZBeWU11lRUDAbdUyJthDi01rb0Wg0kpGRQUZGBgD19fV89tlnHc6tKjpUr9YkuPzyRtTiaqdjxgd5YtD3fZUXqXfXOQnoxrDGxkaKi4udypY8//zzXHvttfzgBz9g7969NDU18frrr3PdddexZcsW3njjDadzxMbGUlNTw7p160hPT8fDw4Po6GhMJhOvv/46P/nJT9i7dy/PPffcEL1KIYQQveFtNjInoTUIq7fayCksZ+vRUgCMekex40iLuzbc6u7urgV3balewTTNfVzb/vEnhUCh0zGrF80iIdS73+2VenfOJKAbQnFxcSxfvlzb7uzmjIuLG7DnX7VqFWFhYRgMBiwWC+np6bz22mvcfffd6HQ60tPTefXVV3nxxRd58sknmTVrFs8//zw/+MEPtHPMnDmTn/zkJ9x6662UlpZqZUuWLVvGr371K1577TUyMjJ4+eWXuf766wfstQghhHAtd5OemfGB2nZjs43ck5VkFZwvdqxTSA73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qJsyZMb6NRjrrx/kGoBcA5BrAHINQK7BYL1+SYoQQgghhBjhpIdOCCGEEGKEk4BOCCGEEGKEk4BOCCGEEGKEk4CuD2JjY1EUpcPPwoULu3zMhx9+SGJiImazmdTUVFauXDmILXa9vl6DZcuWdTjWbDYPcqtdx2az8etf/5px48bh7u7O+PHjee6553pcmmXjxo1kZGTg5uZGfHw8y5YtG5wGD4D+XIONGzd2et8UFxcPYstdq7q6mkWLFhETE4O7uzszZ87k22+/7fYxo+k+gL5fg5F+H2zevJnrrruO8PBwFEXh008/dfq9qqo89dRThIWF4e7uzty5czl8+HCP5126dCmxsbGYzWamT5/Ojh07BugVXLiBuAZPP/10h3siMTFxAF/FhenpGnz88cdcddVVBAQEoCgKu3bt6tV5LzRekICuD7799luKioq0nzVr1gBw8803d3r8N998w+233859991HTk4ON9xwAzfccAN79+4dzGa7VF+vATiKKbZ9TEFBwWA11+VefPFF/vKXv/CnP/2JAwcO8OKLL/LSSy/x+uuvd/mY/Px8rrnmGi677DJ27drFokWLuP/++1m9evUgttx1+nMNWhw6dMjpXggODh6EFg+M+++/nzVr1vD3v/+d3NxcrrrqKubOncupU6c6PX603QfQ92vQYqTeB7W1taSnp7N06dJOf//SSy/x2muv8cYbb7B9+3Y8PT2ZN28eDQ0NXZ7z/fff59FHH2Xx4sVkZ2eTnp7OvHnzKCkpGaiXcUEG4hoAJCcnO90TX3/99UA03yV6uga1tbVccsklvPjii70+p0viBVX0289//nN1/Pjxqt1u7/T3t9xyi3rNNdc47Zs+fbr64x//eDCaNyh6ugZvv/226uvrO7iNGkDXXHONeu+99zrt+973vqfeeeedXT7m8ccfV5OTk5323Xrrreq8efMGpI0DrT/XYMOGDSqglpeXD3DrBkddXZ2q1+vVFStWOO3PyMhQ/+u//qvTx4y2+6A/12A03QeA+sknn2jbdrtdDQ0NVX//+99r+yoqKlQ3Nzf1vffe6/I806ZNUxcuXKht22w2NTw8XH3++ecHpN2u5KprsHjxYjU9PX0AWzpw2l+DtvLz81VAzcnJ6fE8rogXpIeun6xWK//4xz+49957u1zfdevWrcydO9dp37x589i6detgNHHA9eYaANTU1BATE0NUVBQLFixg3759g9hK15o5cybr1q0jLy8PgN27d/P1119z9dVXd/mY0XYf9OcatJg8eTJhYWFceeWVbNmyZaCbOmCam5ux2Wwdpg+4u7t32bMw2u6D/lyDFqPlPmgrPz+f4uJip/9jX19fpk+f3uX/sdVqJSsry+kxOp2OuXPnjsj7oj/XoMXhw4cJDw8nLi6OO++8k8LCwoFu7rDiivcHCej66dNPP6WiooJ77rmny2OKi4sJCQlx2hcSEjJi5ov0pDfXICEhgbfeeovPPvuMf/zjH9jtdmbOnMnJkycHr6Eu9Mtf/pLbbruNxMREjEYjU6ZMYdGiRdx5551dPqar+6Cqqor6+vqBbrLL9ecahIWF8cYbb/DRRx/x0UcfERUVxZw5c8jOzh7ElruOt7c3M2bM4LnnnuP06dPYbDb+8Y9/sHXrVoqKijp9zGi7D/pzDUbbfdBWy/t6X97zz507h81mGzWfE/25BgDTp09n2bJlrFq1ir/85S/k5+dz6aWXUl1dPaDtHU5cES8YXN2oseJvf/sbV199NeHh4UPdlCHTm2swY8YMZsyYoW3PnDmTSZMm8eabb/Lcc88NRjNd6oMPPuDdd9/ln//8J8nJydpcqPDwcO6+++6hbt6g6M81SEhIICEhQdueOXMmR48e5Q9/+AN///vfB6vpLvX3v/+de++9l4iICPR6PRkZGdx+++1kZWUNddMGTV+vwWi8D8SFa9u7n5aWxvTp04mJieGDDz7gvvvuG8KWjSzSQ9cPBQUFrF27lvvvv7/b40JDQzlz5ozTvjNnzhAaGjqQzRsUvb0G7bX06Bw5cmSAWjawHnvsMa2HKjU1lbvuuotHHnmE559/vsvHdHUf+Pj44O7uPtBNdrn+XIPOTJs2bcTeBwDjx49n06ZN1NTUcOLECXbs2EFTUxNxcXGdHj/a7gPo+zXozEi/D1q0vK/35T0/MDAQvV4/aj4n+nMNOuPn58fEiRNHxX3RW66IFySg64e3336b4OBgrrnmmm6PmzFjBuvWrXPat2bNGqceq5Gqt9egPZvNRm5uLmFhYQPUsoFVV1eHTuf8Z6PX67Hb7V0+ZrTdB/25Bp3ZtWvXiL0P2vL09CQsLIzy8nJWr17NggULOj1utN0HbfX2GnRmtNwH48aNIzQ01On/uKqqiu3bt3f5f2wymcjMzHR6jN1uZ926dSPyvujPNehMTU0NR48eHRX3RW+55P2h1+kTQlVVRwZSdHS0+sQTT3T43V133aX+8pe/1La3bNmiGgwG9eWXX1YPHDigLl68WDUajWpubu5gNtnl+nINnnnmGXX16tXq0aNH1aysLPW2225TzWazum/fvsFsssvcfffdakREhLpixQo1Pz9f/fjjj9XAwED18ccf14755S9/qd51113a9rFjx1QPDw/1scceUw8cOKAuXbpU1ev16qpVq4biJVyw/lyDP/zhD+qnn36qHj58WM3NzVV//vOfqzqdTl27du1QvASXWLVqlfqf//xHPXbsmPrll1+q6enp6vTp01Wr1aqq6ui/D1S179dgpN8H1dXVak5OjpqTk6MC6quvvqrm5OSoBQUFqqqq6gsvvKD6+fmpn332mbpnzx51wYIF6rhx49T6+nrtHJdffrn6+uuva9v/+te/VDc3N3XZsmXq/v371R/96Eeqn5+fWlxcPOivrzcG4hr8v//3/9SNGzeq+fn56pYtW9S5c+eqgYGBaklJyaC/vt7o6RqUlpaqOTk56hdffKEC6r/+9S81JydHLSoq0s4xEPGCBHR9tHr1ahVQDx061OF3s2fPVu+++26nfR988IE6ceJE1WQyqcnJyeoXX3wxSC0dOH25BosWLVKjo6NVk8mkhoSEqN/97nfV7OzsQWyta1VVVak///nP1ejoaNVsNqtxcXHqf/3Xf6mNjY3aMXfffbc6e/Zsp8dt2LBBnTx5smoymdS4uDj17bffHtyGu1B/rsGLL76ojh8/XjWbzaq/v786Z84cdf369UPQetd5//331bi4ONVkMqmhoaHqwoUL1YqKCu33o/0+UNW+X4ORfh+0lF1p/9Pynme329Vf//rXakhIiOrm5qZeccUVHd4nY2Ji1MWLFzvte/3117X3yWnTpqnbtm0bpFfUdwNxDW699VY1LCxMNZlMakREhHrrrbeqR44cGcRX1Tc9XYO3336709+3fc0DES8oqtpDiXshhBBCCDGsyRw6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYQQQogRTgI6IYTog9LSUoKDgzl+/PiQtuO2227jlVdeGdI2CCGGDwno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\n", + "text/plain": [ + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "if True:\n", + " cpred = API.plot_fancy(\n", + " dataset_input={\"dataset\": \"E605_DY_38P8GEV_PXSEC\"},\n", + " use_cuts=\"internal\", \n", + " theoryid=400,\n", + " pdf=\"NNPDF40_nnlo_as_01180\",\n", + " fit=\"230718-jcmwfaser-001\"\n", + " )\n", + " fig = next(cpred)\n", + " plt.show()\n", + "fig" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3d42c5bd-11bc-4b6a-8f6b-3f74a16590f9", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jumax9/Academic_Workspace/NNPDF/src/nnpdf/validphys2/src/validphys/utils.py:209: FutureWarning: In a future version of pandas, a length 1 tuple will be returned when iterating over a groupby with a grouper equal to a list of length 1. Don't supply a list with a single grouper to avoid this warning.\n", + " for same_vals, table in gb:\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "if True:\n", + " cpred = API.plot_fancy(\n", + " dataset_input={\"dataset\": \"DYE605_dw_ite\"},\n", + " use_cuts=\"internal\", \n", + " datacuts={\"q2min\": 3.49, \"w2min\": 12.5},\n", + " theoryid=400,\n", + " pdf=\"NNPDF40_nnlo_as_01180\"\n", + " )\n", + " fig = next(cpred)\n", + " plt.show()\n", + "fig" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d6e4a6e5-cf8e-43f1-baa1-b49ca8f48316", + "metadata": {}, + "outputs": [], + "source": [ + "if False:\n", + " aa = API.dataset(\n", + " dataset_input={\"dataset\": 'H1_1JET_319GEV_290PB-1_DIF_PTQ2'},\n", + " use_cuts=\"internal\",\n", + " theoryid=400,\n", + " pdf=\"NNPDF40_nnlo_as_01180\").load_commondata()\n", + " aa.central_values" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b6ae0de1-ed61-4e8c-b428-dd73dc51ebf2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LHAPDF 6.5.3 loading /opt/homebrew/Cellar/lhapdf/6.5.3/share/LHAPDF/NNPDF40_nnlo_as_01180/NNPDF40_nnlo_as_01180_0000.dat\n", + "NNPDF40_nnlo_as_01180 PDF set, member #0, version 1; LHAPDF ID = 331100\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
data
01158.076387
1390.349916
288.867318
315.699019
42.657003
50.466801
61165.829661
7418.877986
896.751173
917.463828
102.994658
110.535526
12840.683389
13314.891903
1476.428244
1514.016267
162.425003
170.439531
18687.805860
19270.418050
2069.530812
2112.987857
222.251394
230.416488
24594.147248
25253.720781
2668.207374
2713.279612
282.347004
290.436889
30481.831795
31224.462957
3265.477119
3313.122646
342.374359
350.444835
36303.689276
37147.969914
3846.772040
399.774865
401.835099
410.346541
42303.689276
43147.969914
4446.772040
459.774865
461.835099
470.346541
\n", + "
" + ], + "text/plain": [ + " 0\n", + "data \n", + "0 1158.076387\n", + "1 390.349916\n", + "2 88.867318\n", + "3 15.699019\n", + "4 2.657003\n", + "5 0.466801\n", + "6 1165.829661\n", + "7 418.877986\n", + "8 96.751173\n", + "9 17.463828\n", + "10 2.994658\n", + "11 0.535526\n", + "12 840.683389\n", + "13 314.891903\n", + "14 76.428244\n", + "15 14.016267\n", + "16 2.425003\n", + "17 0.439531\n", + "18 687.805860\n", + "19 270.418050\n", + "20 69.530812\n", + "21 12.987857\n", + "22 2.251394\n", + "23 0.416488\n", + "24 594.147248\n", + "25 253.720781\n", + "26 68.207374\n", + "27 13.279612\n", + "28 2.347004\n", + "29 0.436889\n", + "30 481.831795\n", + "31 224.462957\n", + "32 65.477119\n", + "33 13.122646\n", + "34 2.374359\n", + "35 0.444835\n", + "36 303.689276\n", + "37 147.969914\n", + "38 46.772040\n", + "39 9.774865\n", + "40 1.835099\n", + "41 0.346541\n", + "42 303.689276\n", + "43 147.969914\n", + "44 46.772040\n", + "45 9.774865\n", + "46 1.835099\n", + "47 0.346541" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "API.central_predictions(\n", + " dataset_input={\"dataset\": 'H1_1JET_319GEV_290PB-1_DIF_PTQ2'},\n", + " use_cuts=\"internal\",\n", + " theoryid=400,\n", + " pdf=\"NNPDF40_nnlo_as_01180\")" + ] + }, + { + "cell_type": "markdown", + "id": "9de23dc5", + "metadata": {}, + "source": [ + "## Old-New comparison\n", + "\n", + "The next cells use `parse_commondata` and `pase_commondata_new` to compare the `CommonData` objects returned by parsing common data files in the old and new styles.\n", + "\n", + "At the moment the \"new commondatas\" are in a hard-coded folder called `new_data` (it is hardcoded in `commondataparser.py` while the old ones are taken from whatever was installed in `share/NNPDF/data`. Eventually the new commondata will also live there.\n", + "\n", + "The comparison checks that the data, uncertainties and kinematics are the same (or as close as they can be). The format of the dataframes is slightly different at the moment, but this is at the moment a desired result." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9872e34d", + "metadata": {}, + "outputs": [], + "source": [ + "# Helper functions\n", + "def load_new(new_name, theoryid=400):\n", + " try:\n", + " new_cd = API.dataset(dataset_input={\"dataset\": new_name}, use_cuts=\"nocuts\", theoryid=theoryid).load_commondata()\n", + " except Exception as e:\n", + " # NNPDF datasets by definition also have a theory available, datasets without a theory will fail with AttributeError\n", + " if not isinstance(e.args[0],TheoryMetadataNotFound):\n", + " raise e\n", + " new_cd = l.check_commondata(new_name).load()\n", + " return new_cd\n", + "\n", + "def load_old_and_new(old_name, new_name, theoryid=400):\n", + " \"\"\"Load the old and new commondata. The theory id is needed by the validphys API when using .dataset\n", + " but it is never used. \n", + " Putting 400 as default since I guess everyone has that theory installed already and the new format\n", + " works only with the pineappl theories\n", + " \"\"\"\n", + " \n", + " # If this doesn't find your data, change the path inside `loader.py` to wherever your data is\n", + " # the variable is `_folder_data` is inside the `check_commondata` function\n", + "\n", + " # Currently validphys understand a dataset is in the \"new\" format if no .dat file is found\n", + " old_cd = API.dataset(dataset_input={\"dataset\": old_name}, use_cuts=\"nocuts\", theoryid=theoryid).load_commondata()\n", + " new_cd = load_new(new_name, theoryid=theoryid)\n", + " \n", + " if new_cd.legacy:\n", + " print(\"Oh no!\")\n", + " raise FileNotFoundError(\"The new cd was loaded as an old one, something bad happened\")\n", + " if not old_cd.legacy:\n", + " print(\"Oh no!\")\n", + " raise FileNotFoundError(\"The old cd was loaded as a new one, something bad happened\")\n", + "\n", + " return old_cd, new_cd\n", + "\n", + "def print_check(msg, res):\n", + " color = \"green\" if res else \"red\"\n", + " display(html_print(f\"equal={res} {msg}\"))\n", + "\n", + "def check_this(cds, method, naming=None, unc=False):\n", + " \"\"\"Check whether the results of `method` for two different commondata agree\"\"\"\n", + " if len(cds) != 2:\n", + " raise ValueError(f\"Can only check two commondata, not {len(cds)}\")\n", + " \n", + " test = None\n", + " check_result = True\n", + " if naming is None:\n", + " naming = method\n", + " \n", + " values = []\n", + " for cd in cds:\n", + " res = getattr(cd, method)\n", + " if ismethod(res): # since sometimes we have methods, sometimes they are attributes\n", + " res = res()\n", + " values.append(res)\n", + " \n", + " check_result = np.allclose(*values)\n", + " \n", + " print_check(f\"Testing {naming} ({method})\", check_result)\n", + " \n", + " if not check_result:\n", + " nnn = (values[0]+values[1]) + 1e-7\n", + " val = np.max( (values[0]-values[1])/nnn*100)\n", + " if val == val:\n", + " print(f\" Max % diff: {np.abs(val)}\")\n", + "\n", + "def check_systematics(cds):\n", + " additive_attr = \"additive_errors\"\n", + " multipli_attr = \"multiplicative_errors\"\n", + " \n", + " add = []\n", + " mult = []\n", + " covmats = []\n", + " syserr = []\n", + " \n", + " nsys = cds[0].nsys\n", + "\n", + " for cd in cds:\n", + " if cd.nsys != nsys:\n", + " print_check(f\"The number of systematic uncertainites is different!!\", False)\n", + " # it doesn't make sense to continue here\n", + " return\n", + " \n", + " res_add = getattr(cd, additive_attr)\n", + " res_mult = getattr(cd, multipli_attr)\n", + " res_sys = cd.systematic_errors()\n", + " \n", + " add.append(res_add)\n", + " mult.append(res_mult)\n", + " syserr.append(res_sys)\n", + " covmats.append(res_add @ res_add.T)\n", + " \n", + " # Even if the number of systematics is the same, it is not a given that they are\n", + " # distributed in the same way between multiplicative and additive, check that\n", + " all_nmul = [i.shape[-1] for i in mult] \n", + " if not len(np.unique(all_nmul)) == 1:\n", + " print(f\" > The combination of multiplicative and additive is different!\")\n", + " check_sys = np.allclose(*syserr)\n", + " print_check(f\"Testing the raw table of systematics: systematic_errors()\", check_sys)\n", + " return\n", + "\n", + " check_multiplicative = np.allclose(*mult)\n", + " print_check(f\"Testing multiplicative errors ({multipli_attr})\", check_multiplicative)\n", + " \n", + " check_additive = np.allclose(*add)\n", + " print_check(f\"Testing additive errors ({additive_attr})\", check_additive)\n", + " \n", + " # When checking additive uncertainties, check also the covmat obtained from res @ res.T\n", + " # since there might -1 signs in the eigenvectors\n", + " if not check_additive:\n", + " check_again = np.allclose(*covmats)\n", + " print(\" > > The resulting covmat instead agrees? \", check_again)\n", + " \n", + "\n", + "def run_checks(old_cd, new_cd):\n", + " \"\"\"Run through a number of checks to ensure they contain the same information\"\"\"\n", + " cds = [old_cd, new_cd]\n", + " \n", + " check_this(cds, \"get_cv\", naming=\"central_values\")\n", + " check_this(cds, \"get_kintable\", naming=\"kinematics\")\n", + " check_this(cds, \"stat_errors\")\n", + " check_systematics(cds)\n", + " \n", + " \n", + "def parsedat(dat_str):\n", + " \"\"\"Parse info from https://github.com/NNPDF/nnpdf/issues/1709\"\"\"\n", + " ret = \"datasets = {\"\n", + " for i in dat_str.split(\"\\n\"):\n", + " sp = i.strip().split(\"|\")\n", + " new = f'\"{sp[1].strip()}\"'\n", + " old = sp[2].strip()\n", + " if old == \"NA\":\n", + " old = \"None\"\n", + " else:\n", + " old = f'\"{old}\"'\n", + " ret += f\"\\n {new} : {old},\"\n", + " ret += \"\\n}\"\n", + " print(ret)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "bf73a19b", + "metadata": {}, + "outputs": [], + "source": [ + "def test_group(datasets, nofail=False, only_reader=False, skip = None):\n", + " all_cds = []\n", + " for i, (new_name, old_name) in enumerate(datasets.items()):\n", + " if skip is not None:\n", + " if i < skip:\n", + " continue\n", + " print(f\"\\nChecking {i} {new_name} (old name: {old_name})\")\n", + " try:\n", + " old_cd, new_cd = load_old_and_new(old_name, new_name)\n", + " all_cds.append((old_cd, new_cd))\n", + " \n", + " if old_cd is not None and not only_reader:\n", + " print(\" > Comparing values...\")\n", + " run_checks(old_cd, new_cd)\n", + " else:\n", + " print(\" > New commondata read ok\")\n", + " \n", + " except FileNotFoundError:\n", + " print(f\"Files for {new_name} not found\")\n", + " continue\n", + " except Exception as e:\n", + " if nofail:\n", + " print(f\"### FAILED for {new_name}\\n\")\n", + " continue\n", + " raise e\n", + " return all_cds" + ] + }, + { + "cell_type": "markdown", + "id": "f77d6102", + "metadata": {}, + "source": [ + "## FT Drell-yan\n", + "\n", + "These datasets can be found in the `E605` branch [#1679](https://github.com/NNPDF/nnpdf/pull/1679)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a1c03485", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 0 E605_DY_38P8GEV_PXSEC (old name: DYE605_dw_ite)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 2.1972405622258293\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False The number of systematic uncertainites is different!!" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 1 E866_DY_800GEV_PXSEC (old name: DYE886P)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.980564514698334\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 59.707706745413326\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.9805644629707937\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing multiplicative errors (multiplicative_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False Testing additive errors (additive_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " > > The resulting covmat instead agrees? False\n", + "\n", + "Checking 2 E866_DY_800GEV_RATIO_PDXSECRATIO (old name: DYE886R_dw_ite)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 1.4597762371233123\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False The number of systematic uncertainites is different!!" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 3 E906_DY_120GEV_PDXSECRATIO (old name: DYE906R_dw_ite)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False The number of systematic uncertainites is different!!" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "datasets = {\n", + " \"E605_DY_38P8GEV_PXSEC\":\"DYE605_dw_ite\",\n", + " \"E866_DY_800GEV_PXSEC\":\"DYE886P\",\n", + " \"E866_DY_800GEV_RATIO_PDXSECRATIO\":\"DYE886R_dw_ite\",\n", + " \"E906_DY_120GEV_PDXSECRATIO\":\"DYE906R_dw_ite\",\n", + "}\n", + "\n", + "res_ft = test_group(datasets, nofail=False)\n", + "\n", + "\n", + "#old_cd, new_cd = load_old_and_new(\"DYE906R_dw_ite\", \"E906_DY_120GEV_PDXSECRATIO\")\n", + "#run_checks(old_cd, new_cd)" + ] + }, + { + "cell_type": "markdown", + "id": "140e48f3", + "metadata": {}, + "source": [ + "## Atlas datasets\n", + "\n", + "These datasets can be found in the `gluon_pdf_ncd` branch" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "09a38520", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "datasets = {\n", + " \"ATLAS_1JET_13TEV_DIF_PT-Y\" : None,\n", + " \"ATLAS_1JET_13TEV_DIF_PT-Y_ALTCORR1\" : None,\n", + " \"ATLAS_2JET_13TEV_DIF_MJJ-Y\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_MTTBAR\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_MTTBAR-NORM\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_PTT\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_PTT-NORM\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_YT\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_YT-NORM\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_YTTBAR\" : None,\n", + " \"ATLAS_TTBAR_13TEV_LJ_DIF_YTTBAR-NORM\" : None,\n", + " \"ATLAS_TTBAR_13TEV_TOT_X-SEC\" : \"ATLASTTBARTOT13TEV\",\n", + " \"ATLAS_TTBAR_7TEV_TOT_X-SEC\" : \"ATLASTTBARTOT7TEV\",\n", + " \"ATLAS_TTBAR_8TEV_2L_DIF_MTTBAR\" : \"ATLAS_TOPDIFF_DILEPT_8TEV_TTM\",\n", + " \"ATLAS_TTBAR_8TEV_2L_DIF_MTTBAR-NORM\" : \"ATLAS_TOPDIFF_DILEPT_8TEV_TTMNORM\",\n", + " \"ATLAS_TTBAR_8TEV_2L_DIF_YTTBAR\" : \"ATLAS_TOPDIFF_DILEPT_8TEV_TTRAP\",\n", + " \"ATLAS_TTBAR_8TEV_2L_DIF_YTTBAR-NORM\" : \"ATLAS_TOPDIFF_DILEPT_8TEV_TTRAPNORM\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_MTTBAR\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TTM\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_MTTBAR-NORM\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TTMNORM\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_PTT\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TPT\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_PTT-NORM\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TPTNORM\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_YT\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TRAP\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_YT-NORM\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TRAPNORM\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_YTTBAR\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TTRAP\",\n", + " \"ATLAS_TTBAR_8TEV_LJ_DIF_YTTBAR-NORM\" : \"ATLAS_TTB_DIFF_8TEV_LJ_TTRAPNORM\",\n", + " \"ATLAS_TTBAR_8TEV_TOT_X-SEC\" : \"ATLASTTBARTOT8TEV\",\n", + "}\n", + " \n", + "#res = test_group(datasets, nofail=True, only_reader=True, skip=None)\n", + "\n", + "\n", + "if False:\n", + " new_name = list(datasets)[10]\n", + " old_name = datasets[new_name]\n", + " print(f\"old: {old_name}, new: {new_name}\")\n", + "\n", + " old_cd, new_cd = load_old_and_new(old_name, new_name)\n", + " run_checks(old_cd, new_cd)" + ] + }, + { + "cell_type": "markdown", + "id": "64d4242e", + "metadata": {}, + "source": [ + "## CMS datasets\n", + "\n", + "These datasets can be found in the `gluon_pdf_ncd` branch" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4d29357d", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 18 CMS_TTBAR_13TEV_LJ_DIF_MTTBAR-YTTBAR (old name: None)\n", + " > New commondata read ok\n", + "\n", + "Checking 19 CMS_TTBAR_13TEV_LJ_DIF_MTTBAR-YTTBAR-NORM (old name: None)\n", + " > New commondata read ok\n", + "\n", + "Checking 20 CMS_TTBAR_13TEV_TOT_X-SEC (old name: CMSTTBARTOT13TEV)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 2.9908972689862874\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.3120838497055149\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 75.75757564279156\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing multiplicative errors (multiplicative_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing additive errors (additive_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 21 CMS_TTBAR_5TEV_TOT_X-SEC (old name: CMSTTBARTOT5TEV)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.0\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing multiplicative errors (multiplicative_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing additive errors (additive_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 22 CMS_TTBAR_7TEV_TOT_X-SEC (old name: CMSTTBARTOT7TEV)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.3120838497055149\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing multiplicative errors (multiplicative_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=True Testing additive errors (additive_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 23 CMS_TTBAR_8TEV_2L_DIF_PTT-YT-NORM (old name: CMS_TTBAR_2D_DIFF_PT_TRAP_NORM)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.9814028622220792\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 99.99980622850609\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False The number of systematic uncertainites is different!!" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 24 CMS_TTBAR_8TEV_2L_DIF_MTTBAR-YT-NORM (old name: CMS_TTBAR_2D_DIFF_MTT_TRAP_NORM)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 1.4970067401729883\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 99.9999697133545\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False The number of systematic uncertainites is different!!" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 25 CMS_TTBAR_8TEV_2L_DIF_MTTBAR-YTTBAR-NORM (old name: CMS_TTBAR_2D_DIFF_MTT_TTRAP_NORM)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.8061789013783482\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 99.9999697133545\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False The number of systematic uncertainites is different!!" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 26 CMS_TTBAR_8TEV_LJ_DIF_MTTBAR-NORM (old name: CMSTOPDIFF8TEVTTMNORM)\n", + " > Comparing values...\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing central_values (get_cv)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "equal=False Testing kinematics (get_kintable)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Max % diff: 0.3120838497055149\n" + ] + }, + { + "data": { + "text/html": [ + "equal=True Testing stat_errors (stat_errors)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " > The combination of multiplicative and additive is different!\n" + ] + }, + { + "data": { + "text/html": [ + "equal=False Testing the raw table of systematics: systematic_errors()" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Checking 27 CMS_TTBAR_8TEV_LJ_DIF_PTT-NORM (old name: CMSTOPDIFF8TEVTPTNORM)\n" + ] + }, + { + "ename": "ConfigError", + "evalue": "Could not find Commondata set: 'CMSTOPDIFF8TEVTPTNORM'. File '/Users/jumax9/Academic_Workspace/NNPDF/nnvortex/share/NNPDF/data/commondata/DATA_CMSTOPDIFF8TEVTPTNORM.dat' does not exist.\nInstead of 'CMSTOPDIFF8TEVTPTNORM', did you mean one of the following?\n - CMSTOPDIFF8TEVTTMNORM\n - CMSTOPDIFF8TEVTRAPNORM\n - CMSTOPDIFF8TEVTTRAPNORM", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mDataNotFoundError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/src/nnpdf/validphys2/src/validphys/config.py:463\u001b[0m, in \u001b[0;36mCoreConfig.produce_commondata\u001b[0;34m(self, dataset_input, use_fitcommondata, fit)\u001b[0m\n\u001b[1;32m 462\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 463\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloader\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcheck_commondata\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 464\u001b[0m \u001b[43m \u001b[49m\u001b[43msetname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 465\u001b[0m \u001b[43m \u001b[49m\u001b[43msysnum\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msysnum\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 466\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_fitcommondata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43muse_fitcommondata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 467\u001b[0m \u001b[43m \u001b[49m\u001b[43mfit\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 468\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 469\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m DataNotFoundError \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/src/nnpdf/validphys2/src/validphys/loader.py:291\u001b[0m, in \u001b[0;36mLoader.check_commondata\u001b[0;34m(self, setname, sysnum, use_fitcommondata, fit)\u001b[0m\n\u001b[1;32m 290\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m datafile\u001b[38;5;241m.\u001b[39mexists():\n\u001b[0;32m--> 291\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m DataNotFoundError((\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCould not find Commondata set: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 292\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFile \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m does not exist.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 293\u001b[0m \u001b[38;5;241m%\u001b[39m (setname, datafile))\n\u001b[1;32m 294\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m sysnum \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[0;31mDataNotFoundError\u001b[0m: Could not find Commondata set: 'CMSTOPDIFF8TEVTPTNORM'. File '/Users/jumax9/Academic_Workspace/NNPDF/nnvortex/share/NNPDF/data/commondata/DATA_CMSTOPDIFF8TEVTPTNORM.dat' does not exist.", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mConfigError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [6], line 35\u001b[0m\n\u001b[1;32m 1\u001b[0m datasets \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 2\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCMS_1JET_13TEV_DIF_R04\u001b[39m\u001b[38;5;124m\"\u001b[39m : \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 3\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCMS_1JET_13TEV_DIF_R07\u001b[39m\u001b[38;5;124m\"\u001b[39m : \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCMS_TTBAR_8TEV_TOT_X-SEC\u001b[39m\u001b[38;5;124m\"\u001b[39m : \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCMSTTBARTOT8TEV\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 33\u001b[0m }\n\u001b[0;32m---> 35\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mtest_group\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdatasets\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnofail\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43monly_reader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mskip\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m18\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn [3], line 25\u001b[0m, in \u001b[0;36mtest_group\u001b[0;34m(datasets, nofail, only_reader, skip)\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m### FAILED for \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnew_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[0;32m---> 25\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 26\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m all_cds\n", + "Cell \u001b[0;32mIn [3], line 9\u001b[0m, in \u001b[0;36mtest_group\u001b[0;34m(datasets, nofail, only_reader, skip)\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mChecking \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnew_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m (old name: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mold_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m----> 9\u001b[0m old_cd, new_cd \u001b[38;5;241m=\u001b[39m \u001b[43mload_old_and_new\u001b[49m\u001b[43m(\u001b[49m\u001b[43mold_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnew_name\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 10\u001b[0m all_cds\u001b[38;5;241m.\u001b[39mappend((old_cd, new_cd))\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m old_cd \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m only_reader:\n", + "Cell \u001b[0;32mIn [2], line 15\u001b[0m, in \u001b[0;36mload_old_and_new\u001b[0;34m(old_name, new_name, theoryid)\u001b[0m\n\u001b[1;32m 13\u001b[0m old_cd \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m---> 15\u001b[0m old_cd \u001b[38;5;241m=\u001b[39m \u001b[43mAPI\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdataset_input\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdataset\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mold_name\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43muse_cuts\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mnocuts\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtheoryid\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtheoryid\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mload_commondata()\n\u001b[1;32m 17\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m old_cd, new_cd\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/api.py:44\u001b[0m, in \u001b[0;36mAPI.__getattr__..closure\u001b[0;34m(**kwargs)\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mclosure\u001b[39m(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m---> 44\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__call__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/api.py:37\u001b[0m, in \u001b[0;36mAPI.__call__\u001b[0;34m(self, actions, **kwargs)\u001b[0m\n\u001b[1;32m 35\u001b[0m builder \u001b[38;5;241m=\u001b[39m ResourceBuilder(c, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprovider_loaded, fuzzytarg, perform_final\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m 36\u001b[0m builder\u001b[38;5;241m.\u001b[39mrootns\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mloadedenv\u001b[38;5;241m.\u001b[39mns_dump())\n\u001b[0;32m---> 37\u001b[0m \u001b[43mbuilder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_fuzzytargets\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 38\u001b[0m builder\u001b[38;5;241m.\u001b[39mexecute_sequential()\n\u001b[1;32m 39\u001b[0m res \u001b[38;5;241m=\u001b[39m builder\u001b[38;5;241m.\u001b[39mrootns[actions]\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/resourcebuilder.py:370\u001b[0m, in \u001b[0;36mResourceBuilder.resolve_fuzzytargets\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mresolve_fuzzytargets\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 369\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m target \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfuzzytargets:\n\u001b[0;32m--> 370\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_fuzzytarget\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtarget\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/resourcebuilder.py:379\u001b[0m, in \u001b[0;36mResourceBuilder.resolve_fuzzytarget\u001b[0;34m(self, fuzzytarget)\u001b[0m\n\u001b[1;32m 376\u001b[0m specs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexpand_fuzzytarget_spec(fuzzytarget)\n\u001b[1;32m 378\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m spec \u001b[38;5;129;01min\u001b[39;00m specs:\n\u001b[0;32m--> 379\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprocess_targetspec\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfuzzytarget\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mspec\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfuzzytarget\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mextraargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/resourcebuilder.py:388\u001b[0m, in \u001b[0;36mResourceBuilder.process_targetspec\u001b[0;34m(self, name, nsspec, extraargs, default)\u001b[0m\n\u001b[1;32m 384\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mProcessing target \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m name)\n\u001b[1;32m 386\u001b[0m gen \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_requirement(name, nsspec, extraargs\u001b[38;5;241m=\u001b[39mextraargs,\n\u001b[1;32m 387\u001b[0m default\u001b[38;5;241m=\u001b[39mdefault, parents\u001b[38;5;241m=\u001b[39m[])\n\u001b[0;32m--> 388\u001b[0m \u001b[43mgen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 389\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 390\u001b[0m gen\u001b[38;5;241m.\u001b[39msend(\u001b[38;5;28;01mNone\u001b[39;00m)\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/resourcebuilder.py:417\u001b[0m, in \u001b[0;36mResourceBuilder._process_requirement\u001b[0;34m(self, name, nsspec, extraargs, default, parents)\u001b[0m\n\u001b[1;32m 415\u001b[0m \u001b[38;5;66;03m#First try to find the name in the namespace\u001b[39;00m\n\u001b[1;32m 416\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 417\u001b[0m put_index, val \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minput_parser\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrspec\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnsspec\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 418\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFound \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m for spec \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m at \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m%\u001b[39m(name, nsspec, put_index))\n\u001b[1;32m 420\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m InputNotFoundError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 421\u001b[0m \u001b[38;5;66;03m#See https://www.python.org/dev/peps/pep-3110/\u001b[39;00m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:429\u001b[0m, in \u001b[0;36mConfig.resolve_key\u001b[0;34m(self, key, ns, input_params, parents, max_index, write, currspec)\u001b[0m\n\u001b[1;32m 427\u001b[0m input_params \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minput_params\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_context(key, ns, input_params, parents, currspec):\n\u001b[0;32m--> 429\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_resolve_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 430\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwrite\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:477\u001b[0m, in \u001b[0;36mConfig._resolve_key\u001b[0;34m(self, key, ns, input_params, parents, max_index, write)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m produce_func:\n\u001b[1;32m 476\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 477\u001b[0m put_index, kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_signature_params\u001b[49m\u001b[43m(\u001b[49m\u001b[43mproduce_func\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 478\u001b[0m \u001b[43m \u001b[49m\u001b[43mstart_from\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m,\u001b[49m\u001b[43mns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 479\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnewparents\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 480\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 481\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 482\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m InputNotFoundError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 483\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCan\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt satisfy production rule for \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkey\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:358\u001b[0m, in \u001b[0;36mConfig.resolve_signature_params\u001b[0;34m(self, f, start_from, ns, input_params, max_index, parents)\u001b[0m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m pname, param \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mlist\u001b[39m(sig\u001b[38;5;241m.\u001b[39mparameters\u001b[38;5;241m.\u001b[39mitems())[start_from:]:\n\u001b[1;32m 357\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 358\u001b[0m index, pval \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 359\u001b[0m \u001b[43m \u001b[49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 360\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 361\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 362\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparents\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 363\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 364\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m param\u001b[38;5;241m.\u001b[39mdefault \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m sig\u001b[38;5;241m.\u001b[39mempty:\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:429\u001b[0m, in \u001b[0;36mConfig.resolve_key\u001b[0;34m(self, key, ns, input_params, parents, max_index, write, currspec)\u001b[0m\n\u001b[1;32m 427\u001b[0m input_params \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minput_params\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_context(key, ns, input_params, parents, currspec):\n\u001b[0;32m--> 429\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_resolve_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 430\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwrite\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:477\u001b[0m, in \u001b[0;36mConfig._resolve_key\u001b[0;34m(self, key, ns, input_params, parents, max_index, write)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m produce_func:\n\u001b[1;32m 476\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 477\u001b[0m put_index, kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_signature_params\u001b[49m\u001b[43m(\u001b[49m\u001b[43mproduce_func\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 478\u001b[0m \u001b[43m \u001b[49m\u001b[43mstart_from\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m,\u001b[49m\u001b[43mns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 479\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnewparents\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 480\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 481\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 482\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m InputNotFoundError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 483\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCan\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt satisfy production rule for \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mkey\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:358\u001b[0m, in \u001b[0;36mConfig.resolve_signature_params\u001b[0;34m(self, f, start_from, ns, input_params, max_index, parents)\u001b[0m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m pname, param \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mlist\u001b[39m(sig\u001b[38;5;241m.\u001b[39mparameters\u001b[38;5;241m.\u001b[39mitems())[start_from:]:\n\u001b[1;32m 357\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 358\u001b[0m index, pval \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 359\u001b[0m \u001b[43m \u001b[49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 360\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 361\u001b[0m \u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 362\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparents\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 363\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n\u001b[1;32m 364\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m param\u001b[38;5;241m.\u001b[39mdefault \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m sig\u001b[38;5;241m.\u001b[39mempty:\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:429\u001b[0m, in \u001b[0;36mConfig.resolve_key\u001b[0;34m(self, key, ns, input_params, parents, max_index, write, currspec)\u001b[0m\n\u001b[1;32m 427\u001b[0m input_params \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minput_params\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_context(key, ns, input_params, parents, currspec):\n\u001b[0;32m--> 429\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_resolve_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mns\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mns\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 430\u001b[0m \u001b[43m \u001b[49m\u001b[43mparents\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparents\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmax_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mwrite\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/nnvortex/lib/python3.10/site-packages/reportengine/configparser.py:491\u001b[0m, in \u001b[0;36mConfig._resolve_key\u001b[0;34m(self, key, ns, input_params, parents, max_index, write)\u001b[0m\n\u001b[1;32m 488\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m nsindex, nsval\n\u001b[1;32m 490\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tainted \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m--> 491\u001b[0m val \u001b[38;5;241m=\u001b[39m \u001b[43mproduce_func\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 492\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tainted:\n\u001b[1;32m 493\u001b[0m put_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[0;32m~/Academic_Workspace/NNPDF/src/nnpdf/validphys2/src/validphys/config.py:470\u001b[0m, in \u001b[0;36mCoreConfig.produce_commondata\u001b[0;34m(self, dataset_input, use_fitcommondata, fit)\u001b[0m\n\u001b[1;32m 463\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mloader\u001b[38;5;241m.\u001b[39mcheck_commondata(\n\u001b[1;32m 464\u001b[0m setname\u001b[38;5;241m=\u001b[39mname,\n\u001b[1;32m 465\u001b[0m sysnum\u001b[38;5;241m=\u001b[39msysnum,\n\u001b[1;32m 466\u001b[0m use_fitcommondata\u001b[38;5;241m=\u001b[39muse_fitcommondata,\n\u001b[1;32m 467\u001b[0m fit\u001b[38;5;241m=\u001b[39mfit,\n\u001b[1;32m 468\u001b[0m )\n\u001b[1;32m 469\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m DataNotFoundError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 470\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ConfigError(\u001b[38;5;28mstr\u001b[39m(e), name, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mloader\u001b[38;5;241m.\u001b[39mavailable_datasets) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 471\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m LoadFailedError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 472\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ConfigError(e) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n", + "\u001b[0;31mConfigError\u001b[0m: Could not find Commondata set: 'CMSTOPDIFF8TEVTPTNORM'. File '/Users/jumax9/Academic_Workspace/NNPDF/nnvortex/share/NNPDF/data/commondata/DATA_CMSTOPDIFF8TEVTPTNORM.dat' does not exist.\nInstead of 'CMSTOPDIFF8TEVTPTNORM', did you mean one of the following?\n - CMSTOPDIFF8TEVTTMNORM\n - CMSTOPDIFF8TEVTRAPNORM\n - CMSTOPDIFF8TEVTTRAPNORM" + ] + } + ], + "source": [ + "datasets = {\n", + " \"CMS_1JET_13TEV_DIF_R04\" : None,\n", + " \"CMS_1JET_13TEV_DIF_R07\" : None,\n", + " \"CMS_TTBAR_13TEV_2L_DIF_MTTBAR\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TTM\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_MTTBAR-NORM\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TTMNORM\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_PTT\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TPT\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_PTT-NORM\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TPTNORM\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_YT\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TRAP\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_YT-NORM\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TRAPNORM\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_YTTBAR\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TTRAP\",\n", + " \"CMS_TTBAR_13TEV_2L_DIF_YTTBAR-NORM\" : \"CMS_TTB_DIFF_13TEV_2016_2L_TTRAPNORM\",\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_MTTBAR\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_MTTBAR-NORM\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_YTTBAR\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_YTTBAR-NORM\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_PTT\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_PTT-NORM\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_YT\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_YT-NORM\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_MTTBAR-YTTBAR\" : None,\n", + " \"CMS_TTBAR_13TEV_LJ_DIF_MTTBAR-YTTBAR-NORM\" : None,\n", + " \"CMS_TTBAR_13TEV_TOT_X-SEC\" : \"CMSTTBARTOT13TEV\",\n", + " \"CMS_TTBAR_5TEV_TOT_X-SEC\" : \"CMSTTBARTOT5TEV\",\n", + " \"CMS_TTBAR_7TEV_TOT_X-SEC\" : \"CMSTTBARTOT7TEV\",\n", + " \"CMS_TTBAR_8TEV_2L_DIF_PTT-YT-NORM\" : \"CMS_TTBAR_2D_DIFF_PT_TRAP_NORM\",\n", + " \"CMS_TTBAR_8TEV_2L_DIF_MTTBAR-YT-NORM\" : \"CMS_TTBAR_2D_DIFF_MTT_TRAP_NORM\",\n", + " \"CMS_TTBAR_8TEV_2L_DIF_MTTBAR-YTTBAR-NORM\" : \"CMS_TTBAR_2D_DIFF_MTT_TTRAP_NORM\",\n", + " \"CMS_TTBAR_8TEV_LJ_DIF_MTTBAR-NORM\" : \"CMSTOPDIFF8TEVTTMNORM\",\n", + " \"CMS_TTBAR_8TEV_LJ_DIF_PTT-NORM\" : \"CMSTOPDIFF8TEVTPTNORM\",\n", + " \"CMS_TTBAR_8TEV_LJ_DIF_YT-NORM\" : \"CMSTOPDIFF8TEVTRAPNORM\",\n", + " \"CMS_TTBAR_8TEV_LJ_DIF_YTTBAR-NORM\" : \"CMSTOPDIFF8TEVTTRAPNORM\",\n", + " \"CMS_TTBAR_8TEV_TOT_X-SEC\" : \"CMSTTBARTOT8TEV\",\n", + "}\n", + "\n", + "res = test_group(datasets, nofail=False, only_reader=False, skip=18)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac586aa7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "7525067a", + "metadata": {}, + "source": [ + "# DIS data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a363cdfd", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "datasets = {\n", + " \"H1_1JET_319GEV_290PB-1_DIF_Q2PT\" : None,\n", + " \"H1_1JET_319GEV_290PB-1_DIF_Q2PT-NORM\" : None,\n", + " \"H1_1JET_319GEV_290PB-1_DIF_HIGH-Q2PT\" : None,\n", + " \"H1_1JET_319GEV_290PB-1_DIF_HIGH-Q2PT-NORM\" : None,\n", + " \"H1_1JET_319GEV_351PB-1_DIF_Q2PT\" : None,\n", + " \"H1_1JET_319GEV_351PB-1_DIF_Q2PT-NORM\" : None,\n", + " \"H1_2JET_319GEV_290PB-1_DIF_Q2PT\" : None,\n", + " \"H1_2JET_319GEV_290PB-1_DIF_Q2PT-NORM\" : None,\n", + " \"H1_2JET_319GEV_351PB-1_DIF_Q2PT\" : None,\n", + " \"H1_2JET_319GEV_351PB-1_DIF_Q2PT-NORM\" : None,\n", + " \"ZEUS_1JET_300GEV_38P6PB-1_DIF_Q2ET\" : None,\n", + " \"ZEUS_1JET_319GEV_82PB-1_DIF_Q2ET\" : None,\n", + " \"ZEUS_2JET_319GEV_374PB-1_DIF_Q2ET\" : None,\n", + "}\n", + "\n", + "res = test_group(datasets, nofail=True, only_reader=False, skip=None)" + ] + }, + { + "cell_type": "markdown", + "id": "18beecf0", + "metadata": {}, + "source": [ + "## CMS ttbar\n", + "\n", + "These datasets can be found in the `more_efficient_metadata_for_new_commondata` branch [#1684](https://github.com/NNPDF/nnpdf/pull/1684)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d2852f43", + "metadata": {}, + "outputs": [], + "source": [ + "datasets = {\n", + " \"CMSTOPDIFF8TEVTTRAPNORM\": \"CMS_TTBAR_8TEV_LJ_DIF_YTTBAR-NORM\",\n", + "}\n", + "\n", + "#res = test_group(datasets, nofail=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05081095", + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/validphys2/examples/data_theory_comparison.yaml b/validphys2/examples/data_theory_comparison.yaml index 3c7787c5c3..71a579abc1 100644 --- a/validphys2/examples/data_theory_comparison.yaml +++ b/validphys2/examples/data_theory_comparison.yaml @@ -1,20 +1,19 @@ meta: - title: BCDMSP data/theory comparison + title: Test keywords: [example] - author: Rosalyn Pearson + author: juacrumar pdfs: - - id: NNPDF40_nnlo_lowprecision - label: NNPDF40_nnlo_lowprecision + - id: NNPDF40_nnlo_as_01180 -theoryid: 162 +theoryid: 400 use_cuts: "internal" + dataset_inputs: - - { dataset: BCDMSP} - - { dataset: H1HERAF2B} - - { dataset: ZEUSHERAF2B} + - { dataset: E605_DY_38P8GEV_PXSEC} + #- { dataset: DYE605_dw_ite} template: dthcomparison.md diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 03191a4e99..d4d5777eae 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -1,16 +1,58 @@ """ -This module implements parsers for commondata and systype files into useful -datastructures, contained in the :py:mod:`validphys.coredata` module. +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. -The validphys commondata structure is an instance of :py:class:`validphys.coredata.CommonData` +A CommonData file is completely defined by a dataset name +(which defines the folder in which the information is) +and observable name (which defines the specific data, fktables and plotting settings to read). + +__{_}_ + +Where the folder name is ``__{_}`` + +The definition of all information for a given dataset (and all its observable) is in the +``metadata.yaml`` file and its ``implemented_observables``. + + +This module defines a number of parsers using the ``validobj`` library. + +The full ``metadata.yaml`` is read as a ``SetMetaData`` object +which contains a list of ``ObservableMetaData``. +These ``ObservableMetaData`` are the "datasets" of NNPDF for all intents and purposes. +The parent ``SetMetaData`` collects some shared variables such as the version of the dataset, +arxiv, inspire or hepdata ids, the folder in which the data is, etc. + +The main class in this module is thus ``ObservableMetaData`` which holds _all_ information +about the particular dataset-observable that we are interested in (and a reference to its parent). + +Inside the ``ObservableMetaData`` we can find: + - ``TheoryMeta``: contains the necessary information to read the (new style) fktables + - ``KinematicsMeta``: containins metadata about the kinematics + - ``PlottingOptions``: plotting style and information for validphys + - ``Variant``: variant to be used + +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. """ import dataclasses +from functools import cached_property import logging from operator import attrgetter +from pathlib import Path +from typing import Any, Dict, Optional import pandas as pd +from validobj import ValidationError, parse_input +from validobj.custom import Parser + +from reportengine.compat import yaml +from validphys.coredata import KIN_NAMES, CommonData +from validphys.plotoptions.plottingoptions import PlottingOptions +from validphys.utils import parse_yaml_inp -from validphys.coredata import CommonData +EXT = "pineappl.lz4" +_INDEX_NAME = "entry" log = logging.getLogger(__name__) @@ -41,20 +83,585 @@ } +@Parser +def ValidPath(path_str: str) -> Path: + """Parse strings into paths""" + return Path(path_str) + + +@dataclasses.dataclass +class Variant: + """The new commondata format allow the usage of variants + A variant can overwrite a number of keys, as defined by this dataclass + """ + + data_uncertainties: list[ValidPath] + + +ValidVariants = Dict[str, Variant] + + +### Theory metadata +@Parser +def ValidOperation(op_str: Optional[str]) -> str: + """Ensures that the operation defined in the commondata file is implemented in validphys""" + if op_str is None: + op_str = "NONE" + 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 str(ret) + + +@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 + + The theory metadata must always contain a key ``FK_tables`` which defines + the fktables to be loaded. + + Example + ------- + >>> from validphys.commondataparser import TheoryMeta + ... from validobj import parse_input + ... from reportengine.compat import yaml + ... theory_raw = ''' + ... FK_tables: + ... - - fk1 + ... - - fk2 + ... - fk3 + ... operation: ratio + ... apfelcomb: + ... repetition_flag: + ... - fk3 + ... ''' + ... theory = yaml.safe_load(theory_raw) + ... parse_input(theory, TheoryMeta) + TheoryMeta(FK_tables=[['fk1'], ['fk2', 'fk3']], operation='RATIO', conversion_factor=1.0, comment=None, apfelcomb=ValidApfelComb(repetition_flag=['fk3'], normalization=None, shifts=None)) + + """ + + FK_tables: list[list] + operation: ValidOperation = "NULL" + 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, yaml_file): + """The yaml databases in the server use "operands" instead of "FK_tables" """ + if not yaml_file.exists(): + raise FileNotFoundError(yaml_file) + meta = yaml.safe_load(yaml_file.read_text()) + # Make sure the operations are upper-cased for compound-compatibility + meta["operation"] = "NULL" if meta["operation"] is None else meta["operation"].upper() + if "operands" in meta: + meta["FK_tables"] = meta.pop("operands") + return parse_input(meta, cls) + + +### + + +### Kinematic data +@dataclasses.dataclass +class ValidVariable: + """Defines the variables""" + + label: str + description: str = "" + units: str = "" + + def full_label(self): + if self.units: + return f"{self.label} ({self.units})" + return self.label + + +@dataclasses.dataclass +class ValidKinematics: + """Contains the metadata necessary to load the kinematics of the dataset. + The variables should be a dictionary with the key naming the variable + and the content complying with the ``ValidVariable`` spec. + + Only the kinematics defined by the key ``kinematic_coverage`` will be loaded, + which must be three. + + Three shall be the number of the counting and the number of the counting shall be three. + Four shalt thou not count, neither shalt thou count two, + excepting that thou then proceedeth to three. + Once the number three, being the number of the counting, be reached, + then the kinematics be loaded in the direction of thine validobject. + """ + + file: ValidPath + variables: Dict[str, ValidVariable] + + def get_label(self, var): + """For the given variable, return the label as + label (unit) + """ + return self.variables[var].full_label() + + +### + + +### Observable and dataset definitions +@dataclasses.dataclass +class ObservableMetaData: + observable_name: str + observable: dict + ndata: int + # Data itself + kinematics: ValidKinematics + data_central: ValidPath + data_uncertainties: list[ValidPath] + # Plotting options + plotting: PlottingOptions + process_type: str + kinematic_coverage: list[str] + # Optional data + theory: Optional[TheoryMeta] = None + tables: Optional[list] = dataclasses.field(default_factory=list) + npoints: Optional[list] = dataclasses.field(default_factory=list) + variants: Optional[ValidVariants] = dataclasses.field(default_factory=dict) + _parent: Optional[ + Any + ] = None # Note that an observable without a parent will fail in many different ways + + def __post_init__(self): + """Checks to be run after reading the metadata file""" + # Check that plotting.plot_x is being filled + if self.plotting.plot_x is None: + ermsg = "No variable selected as x-axis in the plot for {self.name}. Please add plotting::plot_x." + if self.plotting.x is not None: + ermsg += "If you are using `plotting:x` please change it to `plotting::plot_x`" + raise ValidationError(ermsg) + + # Ensure that all variables in the kinematic coverage exist + for var in self.kinematic_coverage: + if var not in self.kinematics.variables: + raise ValidationError( + f"Variable {var} is in `kinematic_coverage` but not included in `kinematics` for {self.name}" + ) + + if len(self.kinematic_coverage) > 3: + raise ValidationError( + "Only a maximum of 3 variables can be used for `kinematic_coverage`" + ) + + # Since vp will rely on the kinematics being 3 variables, + # fill the extra with whatever can be found in the kinematics dictionary + if len(self.kinematic_coverage) < 3: + unused = list(set(self.kinematics.variables) - set(self.kinematic_coverage)) + self.kinematic_coverage += unused[3 - len(self.kinematic_coverage) :] + + self.process_type = self.process_type.upper() + + 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 {self.observable_name}") from e + + return dataclasses.replace(self, data_uncertainties=variant.data_uncertainties) + + @property + def path_data_central(self): + return self._parent.folder / self.data_central + + @property + def paths_uncertainties(self): + return [self._parent.folder / i for i in self.data_uncertainties] + + @property + def path_kinematics(self): + return self._parent.folder / self.kinematics.file + + # Properties inherited from parent + @property + def nnpdf_metadata(self): + return self._parent.nnpdf_metadata + + @property + def setname(self): + return self._parent.setname + + @property + def experiment(self): + return self.setname.split("_")[0] + + @property + def process(self): + return self.setname.split("_")[1] + + @property + def cm_energy(self): + return self.setname.split("_")[2] + + @property + def name(self): + return f"{self.setname}_{self.observable_name}" + + @property + def kinlabels(self): + """Return the kinematic labels in the same order as they are set + in ``kinematic_coverage`` (which in turns follow the key kinematic_coverage + """ + return [self.kinematics.get_label(i) for i in self.kinematic_coverage] + + @cached_property + def plotting_options(self): + """Return the PlottingOptions metadata + + Fill in missing information that can be learnt from the other variables (xlabel/ylabel) + or that is shared by the whole dataset. + """ + if self.plotting.nnpdf31_process is None: + self.plotting.nnpdf31_process = self.nnpdf_metadata["nnpdf31_process"] + + if self.plotting.experiment is None: + self.plotting.experiment = self.nnpdf_metadata["experiment"] + + ## Swap variables by the k_idx + # Internally validphys takes the x/y to be "k1" "k2" or "k3" + # Therefore, for the time being, swap the actual keys by k1/k2/k3 + used_idx = [] + x_idx = self.kinematic_coverage.index(self.plotting.plot_x) + used_idx.append(x_idx) + self.plotting.x = f"k{x_idx + 1}" + if self.plotting.x_label is None: + self.plotting.x_label = self.kinematics.get_label(self.plotting.plot_x) + + # Swap the `figure_by` and `line_by` variables by k1/k2/k3 + if self.plotting.figure_by is not None: + new_fig_by = [] + for var in self.plotting.figure_by: + fig_idx = self.kinematic_coverage.index(var) + used_idx.append(fig_idx) + new_fig_by.append(f"k{fig_idx + 1}") + self.plotting.figure_by = new_fig_by + + if self.plotting.line_by is not None: + new_line_by = [] + for var in self.plotting.figure_by: + line_idx = self.kinematic_coverage.index(var) + used_idx.append(line_idx) + new_line_by.append(f"k{line_idx + 1}") + self.plotting.line_by = new_line_by + + return self.plotting + + +@dataclasses.dataclass +class ValidReference: + """Holds literature information for the dataset""" + + url: str + version: Optional[int] = None + tables: list[int] = dataclasses.field(default_factory=list) + + +@dataclasses.dataclass +class SetMetaData: + """Metadata of the whole set""" + + setname: str + version: int + version_comment: str + nnpdf_metadata: dict + implemented_observables: list[ObservableMetaData] + arXiv: Optional[ValidReference] = None + iNSPIRE: Optional[ValidReference] = None + hepdata: Optional[ValidReference] = None + _folder: Optional[Path] = None + + @property + def folder(self): + # TODO: at the moment the folder is set manually by the parser of the metadata + # since the new commondata is still not installed (or declared in the profile) + return self._folder + # return _folder_data / self.setname + + def select_observable(self, obs_name_raw): + """Check whether the observable is implemented and return said observable""" + # TODO: should we check that we don't have two observables with the same name? + obs_name = obs_name_raw.lower().strip() + for observable in self.implemented_observables: + if observable.observable_name.lower().strip() == obs_name: + observable._parent = ( + self # Not very happy with this but not sure how to do in a better way? + ) + return observable + return ValueError(f"The selected observable {obs_name} does not exist in {self.setname}") + + +### + + +### Parsers +def _parse_data(metadata): + """Given the metadata defining the commondata, + returns a dataframe with the right central data loaded + + Parameters + ---------- + metadata: ObservableMetaData + instance of ObservableMetaData defining the data to be loaded + + Returns + ------- + pd.DataFrame + a dataframe containing the data + """ + data_file = metadata.path_data_central + datayaml = yaml.safe_load(data_file.read_text(encoding="utf-8")) + data_df = pd.DataFrame( + datayaml["data_central"], index=range(1, metadata.ndata + 1), columns=["data"] + ) + data_df.index.name = _INDEX_NAME + return data_df + + +def _parse_uncertainties(metadata): + """Given the metadata defining the commondata, + returns a dataframe with all appropiate uncertainties + + Parameters + ---------- + metadata: ObservableMetaData + instance of ObservableMetaData defining the uncertainties to be loaded + + Returns + ------- + pd.DataFrame + a dataframe containing the uncertainties + """ + all_df = [] + for ufile in metadata.paths_uncertainties: + uncyaml = yaml.safe_load(ufile.read_text()) + + mindex = pd.MultiIndex.from_tuples( + [(k, v["treatment"], v["type"]) for k, v in uncyaml["definitions"].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, metadata.ndata + 1), + ) + final_df.index.name = _INDEX_NAME + all_df.append(final_df) + return pd.concat(all_df, axis=1) + + +def _parse_kinematics(metadata): + """Given the metadata defining the commondata, + returns a dataframe with the kinematic information + + Parameters + ---------- + metadata: ObservableMetaData + instance of ObservableMetaData defining the kinematics to be loaded + + Returns + ------- + pd.DataFrame + a dataframe containing the kinematics + """ + kinematics_file = metadata.path_kinematics + kinyaml = yaml.safe_load(kinematics_file.read_text()) + + kin_dict = {} + for i, dbin in enumerate(kinyaml["bins"]): + bin_index = i + 1 + # TODO: for now we are dropping min/max information since it didn't exist in the past + # unless the point doesn't have a mid value, in that case we need to generate it! + for d in dbin.values(): + if d["mid"] is None: + d["mid"] = 0.5 * (d["max"] + d["min"]) + d["min"] = None + d["max"] = None + kin_dict[bin_index] = pd.DataFrame(dbin).stack() + + return pd.concat(kin_dict, axis=1, names=[_INDEX_NAME]).swaplevel(0, 1).T + + +def parse_new_metadata(metadata_file, observable_name, variants=[]): + """Given a metadata file in the new format and the specific observable to be read + load and parse the metadata and select the observable. + If any variants are selected, apply them. + """ + # Note: we are re-loading many times the same yaml file, possibly a good target for lru_cache + set_metadata = parse_yaml_inp(metadata_file, SetMetaData) + set_metadata._folder = metadata_file.parent + + # Select one observable from the entire metadata + metadata = set_metadata.select_observable(observable_name) + + # And apply variants + for variant in variants: + metadata = metadata.apply_variant(variant) + + return metadata + + +def parse_commondata_new(metadata): + """ + + TODO: update this docstring since now the parse_commondata_new takes the information from + the metadata, and the name -> split is done outside + + In the current iteration of the commondata, each of the commondata + (i.e., an observable from a data publication) correspond to one single observable + inside a folder which is named as "___" + The observable is defined by a last suffix of the form "_" so that the full name + of the dataset is always: + + "__{_}_" + + where is optional. + + This function right now works under the assumotion that the folder/observable + is separated in the last _ so that: + folder_name = __{_} + but note that this convention is still not fully defined. + + This function returns a commondata object constructed by parsing the metadata. + + Once a variant is selected, it can no longer be changed + + Note that this function reproduces `parse_commondata` below, which parses the + _old_ file format + """ + # Now parse the data + data_df = _parse_data(metadata) + # the uncertainties + uncertainties_df = _parse_uncertainties(metadata) + # and the kinematics + kin_df = _parse_kinematics(metadata) + + # Once we have loaded all uncertainty files, let's check how many sys we have + nsys = len( + [i for i in uncertainties_df.columns.get_level_values(0) if not i.startswith("stat")] + ) + + # Backwards-compatibility + # Finally, create the commondata by merging the dataframes in the old commondata_table + + procname = metadata.process_type # nnpdf_metadata["nnpdf31_process"] + kin_df = kin_df[metadata.kinematic_coverage] + kin_df.columns = KIN_NAMES + kin_df["process"] = procname + + kin_df = kin_df[["process"] + KIN_NAMES] + + # For the uncertainties, create a simplified version to concatenate + # and save the systype information + new_columns = [] + systypes = {"type": [], "name": []} + for col in uncertainties_df.columns: + if col[0].startswith("stat"): + new_columns.append("stat") + else: + # if it is syst add the ADD/MULT information + new_columns.append(col[1]) + systypes["type"].append(col[1]) + systypes["name"].append(col[2]) + + uncertainties_df.columns = new_columns + + commondata_table = pd.concat([kin_df, data_df, uncertainties_df], axis=1) + systype_table = pd.DataFrame(systypes, index=range(1, nsys + 1)) + systype_table.index.name = "sys_index" + + # TODO: Legacy compatibility + # 1. Add a stat column if it doesn't exist + # 2. Transform multiplicatie uncertainties into % as it was done in the older version + + if "stat" not in commondata_table: + commondata_table["stat"] = 0.0 + + if "MULT" in commondata_table: + commondata_table["MULT"] = commondata_table["MULT"].multiply( + 100 / commondata_table["data"], axis="index" + ) + + return CommonData( + setname=metadata.name, + ndata=metadata.ndata, + commondataproc=procname, + nkin=3, + nsys=nsys, + commondata_table=commondata_table, + systype_table=systype_table, + legacy=False, + kin_variables=metadata.kinematic_coverage, + ) + + +### + + def load_commondata(spec): """ Load the data corresponding to a CommonDataSpec object. Returns an instance of CommonData """ - commondatafile = spec.datafile - setname = spec.name - systypefile = spec.sysfile + if spec.legacy: + commondatafile = spec.datafile + setname = spec.name + systypefile = spec.sysfile - commondata = parse_commondata(commondatafile, systypefile, setname) + commondata = parse_commondata(commondatafile, systypefile, setname) + else: + commondata = parse_commondata_new(spec.metadata) return commondata +### Old commondata: def parse_commondata(commondatafile, systypefile, setname): """Parse a commondata file and a systype file into a CommonData. @@ -99,6 +706,7 @@ def parse_commondata(commondatafile, systypefile, setname): nsys=nsys, commondata_table=commondatatable, systype_table=systypetable, + legacy=True, ) @@ -150,7 +758,8 @@ def get_plot_kinlabels(commondata): """Return the LaTex kinematic labels for a given Commondata""" key = commondata.process_type - return KINLABEL_LATEX[key] + # TODO: the keys in KINLABEL_LATEX need to be updated for the new commondata + return KINLABEL_LATEX.get(key, key) def get_kinlabel_key(process_label): diff --git a/validphys2/src/validphys/config.py b/validphys2/src/validphys/config.py index d59372c3a7..0d5ec89e92 100644 --- a/validphys2/src/validphys/config.py +++ b/validphys2/src/validphys/config.py @@ -38,7 +38,7 @@ PDFNotFound, ) from validphys.paramfits.config import ParamfitsConfig -from validphys.plotoptions import get_info +from validphys.plotoptions.core import get_info import validphys.scalevariations from validphys.utils import freeze_args @@ -366,7 +366,7 @@ def produce_fitpdfandbasis(self, fitpdf, basisfromfit): def parse_dataset_input(self, dataset: Mapping): """The mapping that corresponds to the dataset specifications in the fit files""" - known_keys = {"dataset", "sys", "cfac", "frac", "weight", "custom_group"} + known_keys = {"dataset", "sys", "cfac", "frac", "weight", "custom_group", "variants"} try: name = dataset["dataset"] if not isinstance(name, str): @@ -383,6 +383,7 @@ def parse_dataset_input(self, dataset: Mapping): sysnum = dataset.get("sys") cfac = dataset.get("cfac", tuple()) frac = dataset.get("frac", 1) + variants = tuple(dataset.get("variants", [])) if not isinstance(frac, numbers.Real): raise ConfigError(f"'frac' must be a number, not '{frac}'") if frac < 0 or frac > 1: @@ -398,7 +399,13 @@ def parse_dataset_input(self, dataset: Mapping): # Abuse ConfigError to get the suggestions. log.warning(ConfigError(f"Key '{k}' in dataset_input not known.", k, known_keys)) return DataSetInput( - name=name, sys=sysnum, cfac=cfac, frac=frac, weight=weight, custom_group=custom_group + name=name, + sys=sysnum, + cfac=cfac, + frac=frac, + weight=weight, + custom_group=custom_group, + variants=variants, ) def parse_use_fitcommondata(self, do_use: bool): @@ -413,7 +420,11 @@ def produce_commondata(self, *, dataset_input, use_fitcommondata=False, fit=None sysnum = dataset_input.sys try: return self.loader.check_commondata( - setname=name, sysnum=sysnum, use_fitcommondata=use_fitcommondata, fit=fit + setname=name, + sysnum=sysnum, + use_fitcommondata=use_fitcommondata, + fit=fit, + variants=dataset_input.variants, ) except DataNotFoundError as e: raise ConfigError(str(e), name, self.loader.available_datasets) from e @@ -561,6 +572,7 @@ def produce_dataset( cfac = dataset_input.cfac frac = dataset_input.frac weight = dataset_input.weight + variants = dataset_input.variants try: ds = self.loader.check_dataset( @@ -573,6 +585,7 @@ def produce_dataset( use_fitcommondata=use_fitcommondata, fit=fit, weight=weight, + variants=variants, ) except DataNotFoundError as e: raise ConfigError(str(e), name, self.loader.available_datasets) diff --git a/validphys2/src/validphys/convolution.py b/validphys2/src/validphys/convolution.py index 859b9fdeef..6b2d237f33 100644 --- a/validphys2/src/validphys/convolution.py +++ b/validphys2/src/validphys/convolution.py @@ -42,7 +42,6 @@ import numpy as np import pandas as pd -from validphys.fkparser import load_fktable from validphys.pdfbases import evolution FK_FLAVOURS = evolution.to_known_elements( @@ -119,7 +118,7 @@ def _predictions(dataset, pdf, fkfunc): cuts = dataset.cuts.load() all_predictions = [] for fk in dataset.fkspecs: - fk_w_cuts = load_fktable(fk).with_cuts(cuts) + fk_w_cuts = fk.load_with_cuts(cuts) all_predictions.append(fkfunc(fk_w_cuts, pdf)) # Old fktables repeated values to make DEN and NUM sizes match in RATIO operations # pineappl tables instead just contain the one value used diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index 2f4b3f3351..db23fa49e7 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -23,6 +23,7 @@ from validphys.commondataparser import ( get_plot_kinlabels, parse_commondata, + parse_commondata_new, peek_commondata_metadata, ) from validphys.fkparser import load_fktable, parse_cfactor @@ -211,13 +212,17 @@ def get_members(self): class CommonDataSpec(TupleComp): - def __init__(self, datafile, sysfile, plotfiles, name=None, metadata=None): + def __init__(self, datafile, sysfile, plotfiles, name=None, metadata=None, legacy=True): + self.legacy = legacy + self._metadata = metadata self.datafile = datafile self.sysfile = sysfile - self.plotfiles = tuple(plotfiles) - self._name = name - self._metadata = metadata - super().__init__(datafile, sysfile, self.plotfiles) + if legacy: + self.plotfiles = tuple(plotfiles) + super().__init__(datafile, sysfile, self.plotfiles) + else: + self.plotfiles = False + super().__init__(name) @property def name(self): @@ -225,11 +230,19 @@ def name(self): @property def nsys(self): - return self.metadata.nsys + if self.legacy: + return self.metadata.nsys + else: + cd = self.load() + return cd.nsys @property def ndata(self): - return self.metadata.ndata + if self.legacy: + return self.metadata.ndata + else: + cd = self.load() + return cd.nsys @property def process_type(self): @@ -247,9 +260,13 @@ def __str__(self): def __iter__(self): return iter((self.datafile, self.sysfile, self.plotfiles)) + # TODO: one of the two functions below needs to go @functools.lru_cache() def load(self): - return parse_commondata(self.datafile, self.sysfile, self.name) + if self.legacy: + return parse_commondata(self.datafile, self.sysfile, self.name) + else: + return parse_commondata_new(self.metadata) def load_commondata_instance(self): """ @@ -261,20 +278,24 @@ def load_commondata_instance(self): @property def plot_kinlabels(self): - return get_plot_kinlabels(self) + if self.legacy: + return get_plot_kinlabels(self) + else: + return self.metadata.kinlabels class DataSetInput(TupleComp): """Represents whatever the user enters in the YAML to specify a dataset.""" - def __init__(self, *, name, sys, cfac, frac, weight, custom_group): + def __init__(self, *, name, sys, cfac, frac, weight, custom_group, variants): self.name = name self.sys = sys self.cfac = cfac self.frac = frac self.weight = weight self.custom_group = custom_group + self.variants = variants super().__init__(name, sys, cfac, frac, weight, custom_group) def __str__(self): @@ -476,7 +497,7 @@ def __init__(self, fkpath, cfactors, metadata=None): # For new theories, add also the target_dataset so that we don't reuse fktables # Ideally this won't be necessary in the future and we will be able to reutilize fktables. if not self.legacy: - super().__init__(fkpath, cfactors, self.metadata.get("target_dataset")) + super().__init__(fkpath, cfactors, self.metadata.target_dataset) else: super().__init__(fkpath, cfactors) diff --git a/validphys2/src/validphys/coredata.py b/validphys2/src/validphys/coredata.py index 8f442a9a35..7d16f6278f 100644 --- a/validphys2/src/validphys/coredata.py +++ b/validphys2/src/validphys/coredata.py @@ -3,6 +3,7 @@ dataframes). """ import dataclasses +from typing import Optional import numpy as np import pandas as pd @@ -246,6 +247,8 @@ class CommonData: commondata_table: pd.DataFrame = dataclasses.field(repr=False) systype_table: pd.DataFrame = dataclasses.field(repr=False) systematics_table: pd.DataFrame = dataclasses.field(init=None, repr=False) + legacy: bool + kin_variables: Optional[list] = None def __post_init__(self): self.systematics_table = self.commondata_table.drop( @@ -315,12 +318,14 @@ def multiplicative_errors(self): """ mult_systype = self.systype_table[self.systype_table["type"] == "MULT"] - # NOTE: Index with list here so that return is always a DataFrame, even - # if N_sys = 1 (else a Series could be returned) - mult_table = self.systematics_table.loc[:, ["MULT"]] - # Minus 1 because iloc starts from 0, while the systype counting starts - # from 1. - mult_table = mult_table.iloc[:, mult_systype.index - 1] + mult_table = self.systematics_table.filter(like="MULT") + + if self.legacy: + # Needed in legacy because both every uncertainty appears as both mult and add + # so it is necessary to select the uncertainties that are to be consireded as MULT/ADD + # Minus 1 because iloc starts from 0, while the systype counting starts from 1 + mult_table = mult_table.iloc[:, mult_systype.index - 1] + mult_table.columns = mult_systype["name"].to_numpy() return mult_table.loc[:, mult_table.columns != "SKIP"] @@ -332,12 +337,12 @@ def additive_errors(self): """ add_systype = self.systype_table[self.systype_table["type"] == "ADD"] - # NOTE: Index with list here so that return is always a DataFrame, even - # if N_sys = 1 (else a Series could be returned) - add_table = self.systematics_table.loc[:, ["ADD"]] - # Minus 1 because iloc starts from 0, while the systype counting starts - # from 1. - add_table = add_table.iloc[:, add_systype.index - 1] + add_table = self.systematics_table.filter(like="ADD") + + if self.legacy: + # Minus 1 because iloc starts from 0, while the systype counting starts from 1 + add_table = add_table.iloc[:, add_systype.index - 1] + add_table.columns = add_systype["name"].to_numpy() return add_table.loc[:, add_table.columns != "SKIP"] diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index 566b372c6d..6257587398 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -45,6 +45,29 @@ } +# TODO: in the new commondata instead of having this, let's always use the same +# variables +def _variable_understanding(variables_raw, process_vars): + """Given a set of variable, check whether it might be a variation of existing + variables for a process type""" + variables = [i for i in variables_raw] + + def substitute(pr_v, cd_x): + if pr_v in process_vars and cd_x in variables: + variables[variables.index(cd_x)] = pr_v + + substitute("eta", "y") + substitute("eta", "eta") + substitute("etay", "eta") + substitute("etay", "y") + substitute("p_T2", "pT_sqr") + substitute("sqrts", "sqrt_s") + substitute("sqrt(s)", "sqrts") + substitute("sqrt(s)", "sqrt_s") + + return variables + + class RuleProcessingError(Exception): """Exception raised when we couldn't process a rule.""" @@ -368,6 +391,12 @@ class Rule: A rule object is created for each rule in ./cuts/filters.yaml + Old commondata relied on the order of the kinematical variables + to be the same as specified in the `KIN_LABEL` dictionary set in this module. + The new commondata specification instead defines explicitly the name of the + variables in the metadata. + Therefore, when using a new-format commondata, the KIN_LABEL dictionary + will not be used and the variables defined in it will be used instead. Parameters ---------- @@ -406,6 +435,10 @@ def __init__(self, initial_data: dict, *, defaults: dict, theory_parameters: dic if self.dataset is None and self.process_type is None: raise MissingRuleAttribute("Please define either a process type or dataset.") + # TODO: + # For the cuts to work in a generic way, it is important that the same kind of process share the same + # syntax for the variables (ie, all of them should use pt2 or pt_square) + if self.process_type is None: from validphys.loader import Loader, LoaderError @@ -415,10 +448,14 @@ def __init__(self, initial_data: dict, *, defaults: dict, theory_parameters: dic cd = loader.check_commondata(self.dataset) except LoaderError as e: raise RuleProcessingError(f"Could not find dataset {self.dataset}") from e - if cd.process_type[:3] == "DIS": - self.variables = KIN_LABEL["DIS"] + + if cd.legacy: + if cd.process_type[:3] == "DIS": + self.variables = KIN_LABEL["DIS"] + else: + self.variables = KIN_LABEL[cd.process_type] else: - self.variables = KIN_LABEL[cd.process_type] + self.variables = cd.metadata.kinematic_coverage else: if self.process_type[:3] == "DIS": self.variables = KIN_LABEL["DIS"] @@ -531,8 +568,19 @@ def __repr__(self): # pragma: no cover def _make_kinematics_dict(self, dataset, idat) -> dict: """Fill in a dictionary with the kinematics for each point""" + # TODO + # When applying a "process-type" rule the variables are as given + # at the top of the module. However, for new commondata is important + # that the variables come in the right order + # This "understanding" should not be necessary and the process-variable + # mapping in this module should only serve to check which variables are allowed kinematics = dataset.kinematics.values[idat] - return dict(zip(self.variables, kinematics)) + if dataset.legacy or self.process_type is None: + return dict(zip(self.variables, kinematics)) + + # Use the order of the commondata and the sintax of KIN_LABEL + new_vars = _variable_understanding(dataset.kin_variables, self.variables) + return dict(zip(new_vars, kinematics)) def _make_point_namespace(self, dataset, idat) -> dict: """Return a dictionary with kinematics and local diff --git a/validphys2/src/validphys/fitdata.py b/validphys2/src/validphys/fitdata.py index 40c8197a11..cbb62fa0d0 100644 --- a/validphys2/src/validphys/fitdata.py +++ b/validphys2/src/validphys/fitdata.py @@ -18,7 +18,7 @@ from reportengine.table import table from validphys import checks from validphys.core import PDF -from validphys.plotoptions import get_info +from validphys.plotoptions.core import get_info # TODO: Add more stuff here as needed for postfit LITERAL_FILES = ['chi2exps.log'] diff --git a/validphys2/src/validphys/kinematics.py b/validphys2/src/validphys/kinematics.py index 295bcd30fb..2b4b87a4cc 100644 --- a/validphys2/src/validphys/kinematics.py +++ b/validphys2/src/validphys/kinematics.py @@ -13,8 +13,8 @@ from reportengine import collect from reportengine.checks import check_positive from reportengine.table import table -from validphys import plotoptions from validphys.core import CutsPolicy +from validphys.plotoptions import core as plotoptions_core log = logging.getLogger(__name__) @@ -29,7 +29,7 @@ def describe_kinematics(commondata, titlelevel: int = 1): import inspect cd = commondata - info = plotoptions.get_info(cd) + info = plotoptions_core.get_info(cd) proc = cd.load_commondata().commondataproc src = inspect.getsource(info.kinematics_override.xq2map) titlespec = '#' * titlelevel @@ -72,9 +72,9 @@ def kinlimits(commondata, cuts, use_cuts, use_kinoverride: bool = True): be ignored and the kinematics will be interpred based on the process type only. If use_cuts is 'CutsPolicy.NOCUTS', the information on the total number of points will be displayed, instead of the fitted ones.""" - info = plotoptions.get_info(commondata, cuts=None, use_plotfiles=use_kinoverride) + info = plotoptions_core.get_info(commondata, cuts=None, use_plotfiles=use_kinoverride) - kintable = plotoptions.kitable(commondata, info) + kintable = plotoptions_core.kitable(commondata, info) ndata = len(kintable) if cuts: kintable = kintable.loc[cuts.load()] @@ -143,7 +143,7 @@ def all_commondata_grouping(all_commondata, metadata_group): records = [] for cd in all_commondata: records.append( - {'dataset': str(cd), metadata_group: getattr(plotoptions.get_info(cd), metadata_group)} + {'dataset': str(cd), metadata_group: getattr(plotoptions_core.get_info(cd), metadata_group)} ) df = pd.DataFrame.from_records(records, index='dataset') # sort first by grouping alphabetically and then dataset name @@ -163,18 +163,18 @@ def xq2map_with_cuts(commondata, cuts, group_name=None): """Return two (x,Q²) tuples: one for the fitted data and one for the cut data. If `display_cuts` is false or all data passes the cuts, the second tuple will be empty.""" - info = plotoptions.get_info(commondata) - kintable = plotoptions.kitable(commondata, info) + info = plotoptions_core.get_info(commondata) + kintable = plotoptions_core.kitable(commondata, info) if cuts: mask = cuts.load() boolmask = np.zeros(len(kintable), dtype=bool) boolmask[mask] = True fitted_kintable = kintable.loc[boolmask] masked_kitable = kintable.loc[~boolmask] - xq2fitted = plotoptions.get_xq2map(fitted_kintable, info) - xq2masked = plotoptions.get_xq2map(masked_kitable, info) + xq2fitted = plotoptions_core.get_xq2map(fitted_kintable, info) + xq2masked = plotoptions_core.get_xq2map(masked_kitable, info) return XQ2Map(info.experiment, commondata, xq2fitted, xq2masked, group_name) - fitted_kintable = plotoptions.get_xq2map(kintable, info) + fitted_kintable = plotoptions_core.get_xq2map(kintable, info) empty = (np.array([]), np.array([])) return XQ2Map(info.experiment, commondata, fitted_kintable, empty, group_name) @@ -199,8 +199,8 @@ def kinematics_table_notable(commondata, cuts, show_extra_labels: bool = False): PLOTTING files will be displayed. Otherwise only the original three kinematics will be shown. """ - info = plotoptions.get_info(commondata, cuts=cuts) - res = plotoptions.kitable(commondata, info, cuts=cuts) + info = plotoptions_core.get_info(commondata, cuts=cuts) + res = plotoptions_core.kitable(commondata, info, cuts=cuts) res.columns = [*info.kinlabels, *res.columns[3:]] if not show_extra_labels: res = res.iloc[:, :3] diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index bc8ccd155e..730eb8c534 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -23,6 +23,7 @@ from reportengine import filefinder from reportengine.compat import yaml from validphys import lhaindex, pineparser +from validphys.commondataparser import parse_new_metadata from validphys.core import ( PDF, CommonDataSpec, @@ -40,6 +41,7 @@ peek_commondata_metadata, ) from validphys.datafiles import path_vpdata +from validphys.commondataparser import parse_new_metadata from validphys.utils import tempfile_cleaner log = logging.getLogger(__name__) @@ -78,6 +80,10 @@ class TheoryNotFound(LoadFailedError): pass +class TheoryMetadataNotFound(LoadFailedError): + pass + + class TheoryDataBaseNotFound(LoadFailedError): pass @@ -344,7 +350,9 @@ def available_pdfs(self): def commondata_folder(self): return self.datapath / 'commondata' - def check_commondata(self, setname, sysnum=None, use_fitcommondata=False, fit=None): + def check_commondata( + self, setname, sysnum=None, use_fitcommondata=False, fit=None, variants=() + ): if use_fitcommondata: if not fit: raise LoadFailedError("Must specify a fit when setting use_fitcommondata") @@ -376,11 +384,35 @@ def check_commondata(self, setname, sysnum=None, use_fitcommondata=False, fit=No datafile = newpath else: datafile = self.commondata_folder / f'DATA_{setname}.dat' + if not datafile.exists(): - raise DataNotFoundError( - ("Could not find Commondata set: '%s'. " "File '%s' does not exist.") - % (setname, datafile) - ) + # TODO: + # Temporary branching between the old and new commondata + # Assuming new commondata if the datafile does not exist + + # TODO: obviously the folder here is only for development purposes once the + # whole thing is finished the data path will be given by the profile + _folder_data = pathlib.Path(__file__).parents[3] / "new_data" + + # Look at the folder & observable + setfolder, observable_name = setname.rsplit("_", 1) + commondata_folder = _folder_data / setfolder + + metadata_file = commondata_folder / "metadata.yaml" + + # If the metadata file doesn't exist either, then error out + if not metadata_file.exists(): + raise DataNotFoundError( + f"""The CommonData set {setname} could not be found +as old ({datafile}) +or new ({metadata_file})""" + ) + + # Get the instance of ObservableMetaData + metadata = parse_new_metadata(metadata_file, observable_name, variants=variants) + + return CommonDataSpec(None, None, None, name=setname, metadata=metadata, legacy=False) + if sysnum is None: sysnum = 'DEFAULT' sysfile = self.commondata_folder / 'systypes' / ('SYSTYPE_%s_%s.dat' % (setname, sysnum)) @@ -438,6 +470,8 @@ def theorydb_file(self): def get_commondata(self, setname, sysnum): """Get a Commondata from the set name and number.""" + # TODO: check where this is used + # as this might ignore cfactors or variants cd = self.check_commondata(setname, sysnum) return cd.load() @@ -453,34 +487,48 @@ def check_fktable(self, theoryID, setname, cfac): cfactors = self.check_cfactor(theoryID, setname, cfac) return FKTableSpec(fkpath, cfactors) - def check_fkyaml(self, name, theoryID, cfac): - """Load a pineappl fktable - Receives a yaml file describing the fktables necessary for a given observable + def check_fk_from_theory_metadata(self, theory_metadata, theoryID, cfac): + """Load a pineappl fktable in the new commondata forma + Receives a theory metadata describing the fktables necessary for a given observable the theory ID and the corresponding cfactors. The cfactors should correspond directly to the fktables, the "compound folder" is not supported for pineappl theories. As such, the name of the cfactor is expected to be CF_{cfactor_name}_{fktable_name} """ - theory = self.check_theoryID(theoryID) - if (theory.path / "compound").exists(): - raise LoadFailedError(f"New theories (id=${theoryID}) do not accept compound files") + if theory_metadata is None: + raise TheoryMetadataNotFound - fkpath = (theory.yamldb_path / name).with_suffix(".yaml") - metadata, fklist = pineparser.get_yaml_information(fkpath, theory.path) - op = metadata["operation"] + theory = self.check_theoryID(theoryID) + fklist = theory_metadata.fktables_to_paths(theory.path / "fastkernel") + op = theory_metadata.operation if not cfac: - fkspecs = [FKTableSpec(i, None, metadata) for i in fklist] + fkspecs = [FKTableSpec(i, None, theory_metadata) for i in fklist] return fkspecs, op - operands = metadata["operands"] cfactors = [] - for operand in operands: + for operand in theory_metadata.FK_tables: tmp = [self.check_cfactor(theoryID, fkname, cfac) for fkname in operand] cfactors.append(tuple(tmp)) - fkspecs = [FKTableSpec(i, c, metadata) for i, c in zip(fklist, cfactors)] - return fkspecs, op + fkspecs = [FKTableSpec(i, c, theory_metadata) for i, c in zip(fklist, cfactors)] + return fkspecs, theory_metadata.operation + + def check_fkyaml(self, name, theoryID, cfac): + """Load a pineappl fktable in the old commondata format + Receives a yaml file describing the fktables necessary for a given observable + the theory ID and the corresponding cfactors. + The cfactors should correspond directly to the fktables, the "compound folder" + is not supported for pineappl theories. As such, the name of the cfactor is expected to be + CF_{cfactor_name}_{fktable_name} + """ + theory = self.check_theoryID(theoryID) + if (theory.path / "compound").exists(): + raise LoadFailedError(f"New theories (id=${theoryID}) do not accept compound files") + + fkpath = (theory.yamldb_path / name).with_suffix(".yaml") + theory_metadata, _ = pineparser.get_yaml_information(fkpath, theory.path) + return self.check_fk_from_theory_metadata(theory_metadata, theoryID, cfac) def check_compound(self, theoryID, setname, cfac): thid, theopath = self.check_theoryID(theoryID) @@ -615,6 +663,7 @@ def check_dataset( use_fitcommondata=False, fit=None, weight=1, + variants=(), ): """Loads a given dataset If the dataset contains new-type fktables, use the @@ -625,19 +674,37 @@ def check_dataset( theoryno, _ = theoryid + # TODO: + # The dataset is checked twice, once here + # and once by config in produce_commondata + # once of the two __must__ be superfluous + # note that both use information from dataset_input commondata = self.check_commondata( - name, sysnum, use_fitcommondata=use_fitcommondata, fit=fit + name, + sysnum, + use_fitcommondata=use_fitcommondata, + fit=fit, + variants=variants, ) - if theoryid.is_pineappl(): - # If it is a pineappl theory, use the pineappl reader - fkspec, op = self.check_fkyaml(name, theoryno, cfac) + if commondata.legacy: + if theoryid.is_pineappl(): + # If it is a pineappl theory, use the pineappl reader + fkspec, op = self.check_fkyaml(name, theoryno, cfac) + else: + try: + fkspec, op = self.check_compound(theoryno, name, cfac) + except CompoundNotFound: + fkspec = self.check_fktable(theoryno, name, cfac) + op = None else: - try: - fkspec, op = self.check_compound(theoryno, name, cfac) - except CompoundNotFound: - fkspec = self.check_fktable(theoryno, name, cfac) - op = None + # New commondata files work _only_ with pineappl theory + if not theoryid.is_pineappl(): + raise ValueError( + f"New commondata files accept only pineappl theories (used:{theoryid.id})" + ) + thmeta = commondata.metadata.theory + fkspec, op = self.check_fk_from_theory_metadata(thmeta, theoryno, cfac) # Note this is simply for convenience when scripting. The config will # construct the actual Cuts object by itself diff --git a/validphys2/src/validphys/pineparser.py b/validphys2/src/validphys/pineparser.py index cfe1db6e1f..026ca3ae36 100644 --- a/validphys2/src/validphys/pineparser.py +++ b/validphys2/src/validphys/pineparser.py @@ -7,43 +7,15 @@ import numpy as np import pandas as pd -from reportengine.compat import yaml +from validphys.commondataparser import EXT, TheoryMeta from validphys.coredata import FKTableData -########### This part might eventually be part of whatever commondata reader -EXT = "pineappl.lz4" - - -class YamlFileNotFound(FileNotFoundError): - """ymldb file for dataset not found.""" - class GridFileNotFound(FileNotFoundError): """PineAPPL file for FK table not found.""" -def _load_yaml(yaml_file): - """Load a dataset.yaml file. - - Parameters - ---------- - yaml_file : Path - path of the yaml file for the given dataset - - Returns - ------- - dict : - noramlized parsed file content - """ - if not yaml_file.exists(): - raise YamlFileNotFound(yaml_file) - ret = yaml.safe_load(yaml_file.read_text()) - # Make sure the operations are upper-cased for compound-compatibility - ret["operation"] = "NULL" if ret["operation"] is None else ret["operation"].upper() - 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 @@ -65,20 +37,14 @@ def pineko_yaml(yaml_file, grids_folder, check_grid_existence=True): paths: list(list(path)) List (of lists) with all the grids that will need to be loaded """ - 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 + # Note also that we need to use this "parser" due to the usage of the name "operands" in the yamldb + theory_meta = TheoryMeta.parser(yaml_file) + member_paths = theory_meta.fktables_to_paths(grids_folder) + return theory_meta, member_paths def pineko_apfelcomb_compatibility_flags(gridpaths, metadata): @@ -119,7 +85,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? @@ -127,24 +94,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 @@ -300,7 +267,7 @@ def pineappl_reader(fkspec): if hadronic: raw_fktable = np.insert(raw_fktable, miss_index, 0.0, axis=3) # 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/__init__.py b/validphys2/src/validphys/plotoptions/__init__.py index ed3c59a2b7..e69de29bb2 100644 --- a/validphys2/src/validphys/plotoptions/__init__.py +++ b/validphys2/src/validphys/plotoptions/__init__.py @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Fri Mar 11 19:27:44 2016 - -@author: Zahari Kassabov -""" - -from validphys.plotoptions.core import ( # analysis:ignore - get_info, - get_xq2map, - kitable, - transform_result, -) diff --git a/validphys2/src/validphys/plotoptions/core.py b/validphys2/src/validphys/plotoptions/core.py index 941da091c8..9fdaed88c5 100644 --- a/validphys2/src/validphys/plotoptions/core.py +++ b/validphys2/src/validphys/plotoptions/core.py @@ -12,28 +12,17 @@ import numpy as np import pandas as pd -from validobj import ValidationError -from reportengine.compat import yaml from reportengine.floatformatting import format_number -from reportengine.utils import ChainMap, get_functions -from validphys.core import CommonDataSpec, Cuts, DataSetSpec, InternalCutsWrapper +from reportengine.utils import ChainMap +from validphys.core import CommonDataSpec, DataSetSpec from validphys.coredata import CommonData -from validphys.plotoptions import kintransforms, labelers, resulttransforms -from validphys.plotoptions.utils import apply_to_all_columns, get_subclasses +from validphys.plotoptions.plottingoptions import PlottingOptions, default_labels, labeler_functions +from validphys.plotoptions.utils import apply_to_all_columns from validphys.utils import parse_yaml_inp log = logging.getLogger(__name__) -default_labels = ('idat', 'k1', 'k2', 'k3') - -labeler_functions = get_functions(labelers) -transform_functions = get_subclasses(kintransforms, kintransforms.Kintransform) -result_functions = get_functions(resulttransforms) - -ResultTransformations = enum.Enum('ResultTransformations', list(result_functions.keys())) -TransformFunctions = enum.Enum('TransformFunctions', list(transform_functions.keys())) - def get_info(data, *, normalize=False, cuts=None, use_plotfiles=True): """Retrieve and process the plotting information for the input data (which could @@ -153,24 +142,30 @@ def group_label(self, same_vals, groupby): @classmethod 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) + kinlabels = commondata.plot_kinlabels + + if commondata.legacy: + if commondata.plotfiles: + for file in commondata.plotfiles: + 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']) - if 'dataset_label' not in plot_params: - log.warning(f"'dataset_label' key not found in {file}") - plot_params['dataset_label'] = commondata.name + plot_params = plot_params.new_child(config_params) + if normalize and 'normalize' in plot_params: + plot_params = plot_params.new_child(config_params['normalize']) + if 'dataset_label' not in plot_params: + log.warning(f"'dataset_label' key not found in {file}") + plot_params['dataset_label'] = commondata.name + + else: + plot_params = {'dataset_label': commondata.name} else: - plot_params = {'dataset_label': commondata.name} + pcd = commondata.metadata.plotting_options + config_params = dataclasses.asdict(pcd, dict_factory=dict_factory) + plot_params = plot_params.new_child(config_params) - kinlabels = commondata.plot_kinlabels kinlabels = plot_params['kinematics_override'].new_labels(*kinlabels) + if "extra_labels" in plot_params and cuts is not None: cut_extra_labels = { k: [v[i] for i in cuts] for k, v in plot_params["extra_labels"].items() @@ -202,76 +197,6 @@ class KinLabel(enum.Enum): k3 = enum.auto() -class Scale(enum.Enum): - linear = enum.auto() - log = enum.auto() - symlog = enum.auto() - - -@dataclasses.dataclass -class PlottingOptions: - func_labels: dict = dataclasses.field(default_factory=dict) - dataset_label: typing.Optional[str] = None - experiment: typing.Optional[str] = None - nnpdf31_process: typing.Optional[str] = None - data_reference: typing.Optional[str] = None - theory_reference: typing.Optional[str] = None - process_description: typing.Optional[str] = None - y_label: typing.Optional[str] = None - x_label: typing.Optional[str] = None - - kinematics_override: typing.Optional[TransformFunctions] = None - - result_transform: typing.Optional[ResultTransformations] = None - - # TODO: change this to x: typing.Optional[KinLabel] = None - # but this currently fails CI because some datasets have - # a kinlabel of $x_1$ or " "!! - x: typing.Optional[str] = None - - x_scale: typing.Optional[Scale] = None - y_scale: typing.Optional[Scale] = None - - line_by: typing.Optional[list] = None - figure_by: typing.Optional[list] = None - - extra_labels: typing.Optional[typing.Mapping[str, typing.List]] = None - - def parse_figure_by(self): - if self.figure_by is not None: - for el in self.figure_by: - if el in labeler_functions: - self.func_labels[el] = labeler_functions[el] - - def parse_line_by(self): - if self.line_by is not None: - for el in self.line_by: - if el in labeler_functions: - self.func_labels[el] = labeler_functions[el] - - def parse_x(self): - if self.x is not None and self.x not in self.all_labels: - raise ValidationError( - f"The label {self.x} is not in the set of known labels {self.all_labels}" - ) - - @property - def all_labels(self): - if self.extra_labels is None: - return set(default_labels) - return set(self.extra_labels.keys()).union(set(default_labels)) - - def __post_init__(self): - if self.kinematics_override is not None: - self.kinematics_override = transform_functions[self.kinematics_override.name]() - if self.result_transform is not None: - self.result_transform = result_functions[self.result_transform.name] - - self.parse_figure_by() - self.parse_line_by() - self.parse_x() - - @dataclasses.dataclass class PlottingFile(PlottingOptions): normalize: typing.Optional[PlottingOptions] = None diff --git a/validphys2/src/validphys/plotoptions/kintransforms.py b/validphys2/src/validphys/plotoptions/kintransforms.py index 5ba7878ea3..12d1f6f831 100644 --- a/validphys2/src/validphys/plotoptions/kintransforms.py +++ b/validphys2/src/validphys/plotoptions/kintransforms.py @@ -69,6 +69,31 @@ def xq2map(self, k1:np.array,k2:np.array,k3:np.array,**extra_labels) -> (np.arra import numpy as np +# TODO +class identity: + """The identity transformation is a transitional operation for the implementation + of the new commondata + + It takes the kinematics as they come and leave them unchanged. + The final version will either + 1. Remove the necessitity for the key in the PlotOptions + 2. Change all "identities" to utilize one of the transformations + The selection depends on the final decision on the x-q2 map and the possibilities are + either: + 1. Include the xq2 information as part of the kinematics when no override is provided + 2. Enforce that all datasets include an override to define how the x-q2 map should be computed. + """ + def __call__(self, k1, k2, k3): + return k1, k2, k3 + + def new_labels(self, k1, k2, k3): + return k1, k2, k3 + + def xq2map(self, k1, k2, k3, **extra_labels): + # This is going to be a problem + return k1, k2 + + class Kintransform(metaclass=abc.ABCMeta): @classmethod def __subclasshook__(cls, other): diff --git a/validphys2/src/validphys/plotoptions/plottingoptions.py b/validphys2/src/validphys/plotoptions/plottingoptions.py new file mode 100644 index 0000000000..6ffec6527a --- /dev/null +++ b/validphys2/src/validphys/plotoptions/plottingoptions.py @@ -0,0 +1,97 @@ +import dataclasses +import enum +import typing + +from validobj import ValidationError + +from reportengine.utils import get_functions +from validphys.plotoptions import kintransforms, labelers, resulttransforms +from validphys.plotoptions.utils import get_subclasses + +default_labels = ('idat', 'k1', 'k2', 'k3') + + +labeler_functions = get_functions(labelers) +transform_functions = get_subclasses(kintransforms, kintransforms.Kintransform) +result_functions = get_functions(resulttransforms) + + +ResultTransformations = enum.Enum('ResultTransformations', list(result_functions.keys())) +TransformFunctions = enum.Enum('TransformFunctions', list(transform_functions.keys())) + + +class Scale(enum.Enum): + linear = enum.auto() + log = enum.auto() + symlog = enum.auto() + + +@dataclasses.dataclass +class PlottingOptions: + func_labels: dict = dataclasses.field(default_factory=dict) + dataset_label: typing.Optional[str] = None + experiment: typing.Optional[str] = None + nnpdf31_process: typing.Optional[str] = None + data_reference: typing.Optional[str] = None + theory_reference: typing.Optional[str] = None + process_description: typing.Optional[str] = None + y_label: typing.Optional[str] = None + x_label: typing.Optional[str] = None + + kinematics_override: typing.Optional[TransformFunctions] = None + + result_transform: typing.Optional[ResultTransformations] = None + + # TODO: change this to x: typing.Optional[KinLabel] = None + # but this currently fails CI because some datasets have + # a kinlabel of $x_1$ or " "!! + x: typing.Optional[str] = None + + # TODO: the old commondata uses x, the new uses plot_x + # the old commondata only allowed the x to be k1, k2, k3 or idat + plot_x: typing.Optional[str] = None + + x_scale: typing.Optional[Scale] = None + y_scale: typing.Optional[Scale] = None + + line_by: typing.Optional[list] = None + figure_by: typing.Optional[list] = None + + extra_labels: typing.Optional[typing.Mapping[str, typing.List]] = None + + def parse_figure_by(self): + if self.figure_by is not None: + for el in self.figure_by: + if el in labeler_functions: + self.func_labels[el] = labeler_functions[el] + + def parse_line_by(self): + if self.line_by is not None: + for el in self.line_by: + if el in labeler_functions: + self.func_labels[el] = labeler_functions[el] + + def parse_x(self): + if self.x is not None and self.x not in self.all_labels: + raise ValidationError( + f"The label {self.x} is not in the set of known labels {self.all_labels}" + ) + + @property + def all_labels(self): + if self.extra_labels is None: + return set(default_labels) + return set(self.extra_labels.keys()).union(set(default_labels)) + + def __post_init__(self): + if self.kinematics_override is not None: + self.kinematics_override = transform_functions[self.kinematics_override.name]() + if self.result_transform is not None: + self.result_transform = result_functions[self.result_transform.name] + + # TODO: + # add a deprecation warning in case anyone start using `x` in the new commondata + + self.parse_figure_by() + self.parse_line_by() + self.parse_x() diff --git a/validphys2/src/validphys/results.py b/validphys2/src/validphys/results.py index db5642afd7..2abf07779a 100644 --- a/validphys2/src/validphys/results.py +++ b/validphys2/src/validphys/results.py @@ -25,7 +25,7 @@ ) from validphys.convolution import PredictionsRequireCutsError, central_predictions, predictions from validphys.core import PDF, DataGroupSpec, DataSetSpec, Stats -from validphys.plotoptions import get_info +from validphys.plotoptions.core import get_info log = logging.getLogger(__name__) diff --git a/validphys2/src/validphys/tests/test_loader.py b/validphys2/src/validphys/tests/test_loader.py index c2c9c34577..a4713a313d 100644 --- a/validphys2/src/validphys/tests/test_loader.py +++ b/validphys2/src/validphys/tests/test_loader.py @@ -13,9 +13,10 @@ import numpy as np import pytest -from validphys.core import CommonDataSpec, Cuts +from validphys.core import Cuts, CommonDataSpec from validphys.loader import FallbackLoader, FitNotFound, rebuild_commondata_without_cuts, NNPDF_DIR from validphys.plotoptions import get_info, kitable +from validphys.plotoptions.core import kitable, get_info from validphys.tests.conftest import FIT, FIT_3REPLICAS, THEORYID_NEW l = FallbackLoader() diff --git a/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py b/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py index 33d0f230a9..9e07712099 100644 --- a/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py +++ b/validphys2/src/validphys/theorycovariance/theorycovarianceutils.py @@ -7,7 +7,7 @@ from reportengine.checks import check, make_argcheck from validphys.loader import Loader -from validphys.plotoptions import get_info +from validphys.plotoptions.core import get_info log = logging.getLogger(__name__) diff --git a/validphys2/src/validphys/utils.py b/validphys2/src/validphys/utils.py index 3471cfb954..203acc977a 100644 --- a/validphys2/src/validphys/utils.py +++ b/validphys2/src/validphys/utils.py @@ -12,6 +12,7 @@ from typing import Any, Sequence, Mapping, Hashable import numpy as np +from reportengine.compat import yaml from validobj import ValidationError, parse_input from frozendict import frozendict @@ -42,12 +43,15 @@ def wrapped(*args, **kwargs): return wrapped -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: @@ -62,7 +66,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 @@ -70,7 +74,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: @@ -78,7 +82,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__ From 25a79ab9b0656b5e2878004a9899f834609b3a9e Mon Sep 17 00:00:00 2001 From: "Juan M. Cruz-Martinez" Date: Fri, 27 Oct 2023 12:04:50 +0200 Subject: [PATCH 02/52] Group of commits for the organization fo the cd reader and extra options Update validphys2/src/validphys/core.py Co-authored-by: Mark Nestor Costantini <85164495+comane@users.noreply.github.com> promote the shifts flag to a first class theory flag tell the user why a given dataset could not load when the theory is missing beautify a bit the grouping labels show a verbose error when not finding pineappl fktables add the option for extra_labels fallback until we have some more datasets merged --- validphys2/src/validphys/commondataparser.py | 70 +++++++++++++++++--- validphys2/src/validphys/core.py | 2 +- validphys2/src/validphys/coredata.py | 3 + validphys2/src/validphys/filters.py | 2 +- validphys2/src/validphys/loader.py | 8 +-- validphys2/src/validphys/pineparser.py | 38 +++++++---- validphys2/src/validphys/plotoptions/core.py | 20 ++++-- 7 files changed, 109 insertions(+), 34 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index d4d5777eae..58e21c7edd 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -128,8 +128,7 @@ class ValidApfelComb: 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 + this flag is left here for compatibility purposes but has been moved to TheoryMeta """ repetition_flag: Optional[list[str]] = None @@ -143,6 +142,19 @@ class TheoryMeta: The theory metadata must always contain a key ``FK_tables`` which defines the fktables to be loaded. + The ``FK_tables`` is organized as a double list such that: + + The inner list is concatenated + In practice these are different fktables that might refer to the same observable but + that are divided in subgrids for practical reasons. + The outer list instead are the operands for whatever operation needs to be computed + in order to match the experimental data. + + In addition there are other flags that can affect how the fktables are read or used: + - operation: defines the operation to apply to the outer list + - shifts: mapping with the single fktables and their respective shifts + useful to create "gaps" so that the fktables and the respective experimental data + are ordered in the same way (for instance, when some points are missing from a grid) Example ------- @@ -161,7 +173,7 @@ class TheoryMeta: ... ''' ... theory = yaml.safe_load(theory_raw) ... parse_input(theory, TheoryMeta) - TheoryMeta(FK_tables=[['fk1'], ['fk2', 'fk3']], operation='RATIO', conversion_factor=1.0, comment=None, apfelcomb=ValidApfelComb(repetition_flag=['fk3'], normalization=None, shifts=None)) + TheoryMeta(FK_tables=[['fk1'], ['fk2', 'fk3']], operation='RATIO', shifts = None, conversion_factor=1.0, comment=None, apfelcomb=ValidApfelComb(repetition_flag=['fk3'], normalization=None)) """ @@ -169,11 +181,19 @@ class TheoryMeta: operation: ValidOperation = "NULL" conversion_factor: float = 1.0 comment: Optional[str] = None + shifts: Optional[dict] = 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 __post_init__(self): + """If a ``shifts`` flag is found in the apfelcomb object, move it outside""" + if self.apfelcomb is not None: + if self.apfelcomb.shifts is not None and self.shifts is None: + self.shifts = self.apfelcomb.shifts + self.apfelcomb.shifts = None + def fktables_to_paths(self, grids_folder): """Given a source for pineappl grids, constructs the lists of fktables to be loaded""" @@ -212,6 +232,13 @@ def full_label(self): return f"{self.label} ({self.units})" return self.label + def apply_label(self, value): + """Return a string formatted as label = value (units)""" + tmp = f"{self.label} = {value}" + if self.units: + tmp += f" ({self.units})" + return tmp + @dataclasses.dataclass class ValidKinematics: @@ -238,6 +265,16 @@ def get_label(self, var): """ return self.variables[var].full_label() + def apply_label(self, var, value): + """For a given value for a given variable, return the labels + as label = value (unit) + If the variable is not include in the list of variables, returns None + as the variable could've been transformed by a kinematic transformation + """ + if var not in self.variables: + return None + return self.variables[var].apply_label(value) + ### @@ -374,12 +411,19 @@ def plotting_options(self): self.plotting.x_label = self.kinematics.get_label(self.plotting.plot_x) # Swap the `figure_by` and `line_by` variables by k1/k2/k3 + # unless this is something coming from the "extra labels" if self.plotting.figure_by is not None: new_fig_by = [] for var in self.plotting.figure_by: - fig_idx = self.kinematic_coverage.index(var) - used_idx.append(fig_idx) - new_fig_by.append(f"k{fig_idx + 1}") + if var in self.kinematic_coverage: + fig_idx = self.kinematic_coverage.index(var) + used_idx.append(fig_idx) + new_fig_by.append(f"k{fig_idx + 1}") + elif self.plotting.extra_labels is not None and var in self.plotting.extra_labels: + new_fig_by.append(var) + else: + raise ValueError(f"Cannot find {var} in the kinematic coverage or extra labels") + self.plotting.figure_by = new_fig_by if self.plotting.line_by is not None: @@ -487,9 +531,7 @@ def _parse_uncertainties(metadata): ) # 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, metadata.ndata + 1), + pd.DataFrame(uncyaml["bins"]).values, columns=mindex, index=range(1, metadata.ndata + 1) ) final_df.index.name = _INDEX_NAME all_df.append(final_df) @@ -628,6 +670,15 @@ def parse_commondata_new(metadata): 100 / commondata_table["data"], axis="index" ) + # TODO: this will be removed because the old ones will be loaded with the new names + # but during the implementation this is useful for the cuts (filters.py, __call__) + names_file = metadata.path_kinematics.parent.parent / "dataset_names.yml" + names_dict = yaml.YAML().load(names_file) + if names_dict is not None: + legacy_name = names_dict.get(metadata.name) + else: + legacy_name = metadata.name + return CommonData( setname=metadata.name, ndata=metadata.ndata, @@ -637,6 +688,7 @@ def parse_commondata_new(metadata): commondata_table=commondata_table, systype_table=systype_table, legacy=False, + legacy_name=legacy_name, kin_variables=metadata.kinematic_coverage, ) diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index db23fa49e7..3c1cc5c946 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -242,7 +242,7 @@ def ndata(self): return self.metadata.ndata else: cd = self.load() - return cd.nsys + return cd.ndata @property def process_type(self): diff --git a/validphys2/src/validphys/coredata.py b/validphys2/src/validphys/coredata.py index 7d16f6278f..e829e4256f 100644 --- a/validphys2/src/validphys/coredata.py +++ b/validphys2/src/validphys/coredata.py @@ -248,12 +248,15 @@ class CommonData: systype_table: pd.DataFrame = dataclasses.field(repr=False) systematics_table: pd.DataFrame = dataclasses.field(init=None, repr=False) legacy: bool + legacy_name: Optional[str] = None kin_variables: Optional[list] = None def __post_init__(self): self.systematics_table = self.commondata_table.drop( columns=["process", "data", "stat"] + KIN_NAMES ) + if self.legacy_name is None: + self.legacy_name = self.setname def with_cuts(self, cuts): """A method to return a CommonData object where diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index 6257587398..f6fca778ea 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -535,7 +535,7 @@ def __call__(self, dataset, idat): # is different to the case where the rule does apply, # but the point was cut out by the rule. if ( - dataset.setname != self.dataset + (dataset.setname != self.dataset and dataset.legacy_name != self.dataset) and process_name != self.process_type and self.process_type != "DIS_ALL" ): diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index 730eb8c534..ad88d445a0 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -495,9 +495,6 @@ def check_fk_from_theory_metadata(self, theory_metadata, theoryID, cfac): is not supported for pineappl theories. As such, the name of the cfactor is expected to be CF_{cfactor_name}_{fktable_name} """ - if theory_metadata is None: - raise TheoryMetadataNotFound - theory = self.check_theoryID(theoryID) fklist = theory_metadata.fktables_to_paths(theory.path / "fastkernel") op = theory_metadata.operation @@ -703,7 +700,10 @@ def check_dataset( raise ValueError( f"New commondata files accept only pineappl theories (used:{theoryid.id})" ) - thmeta = commondata.metadata.theory + + if (thmeta := commondata.metadata.theory) is None: + raise TheoryMetadataNotFound(f"No theory metadata found for {name}") + fkspec, op = self.check_fk_from_theory_metadata(thmeta, theoryno, cfac) # Note this is simply for convenience when scripting. The config will diff --git a/validphys2/src/validphys/pineparser.py b/validphys2/src/validphys/pineparser.py index 026ca3ae36..92ad6b8e87 100644 --- a/validphys2/src/validphys/pineparser.py +++ b/validphys2/src/validphys/pineparser.py @@ -4,12 +4,16 @@ The FKTables for pineappl have ``pineappl.lz4`` and can be utilized directly with the ``pineappl`` cli as well as read with ``pineappl.fk_table`` """ +import logging + import numpy as np import pandas as pd from validphys.commondataparser import EXT, TheoryMeta from validphys.coredata import FKTableData +log = logging.getLogger(__name__) + class GridFileNotFound(FileNotFoundError): """PineAPPL file for FK table not found.""" @@ -67,12 +71,7 @@ def pineko_apfelcomb_compatibility_flags(gridpaths, metadata): repetition_flag: grid_name - - shifts: - only for ATLASZPT8TEVMDIST - the points in this dataset are not contiguous so the index is shifted - shifts: - grid_name: shift_int Returns ------- @@ -108,12 +107,6 @@ def pineko_apfelcomb_compatibility_flags(gridpaths, metadata): 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 apfelcomb.shifts is not None: - shift_info = apfelcomb.shifts - ret["shifts"] = [shift_info.get(op, 0) for op in operands] - return ret @@ -206,7 +199,15 @@ def pineappl_reader(fkspec): """ from pineappl.fk_table import FkTable - pines = [FkTable.read(i) for i in fkspec.fkpath] + pines = [] + for fk_path in fkspec.fkpath: + try: + pines.append(FkTable.read(fk_path)) + except BaseException as e: + # Catch absolutely any error coming from pineappl, give some info and immediately raise + log.error(f"Fatal error reading {fk_path}") + raise e + cfactors = fkspec.load_cfactors() # Extract metadata from the first grid @@ -228,6 +229,14 @@ def pineappl_reader(fkspec): apfelcomb = pineko_apfelcomb_compatibility_flags(fkspec.fkpath, fkspec.metadata) + # Process the shifts (if any), shifts is a dictionary with {fktable_name: shift_value} + # since this parser doesn't know about operations, we need to convert it to a list + # then we just iterate over the fktables and apply the shift in the right order + shifts = None + if (shift_info := fkspec.metadata.shifts) is not None: + fknames = [i.name.replace(f".{EXT}", "") for i in fkspec.fkpath] + shifts = [shift_info.get(fname, 0) for fname in fknames] + # fktables in pineapplgrid are for obs = fk * f while previous fktables were obs = fk * xf # prepare the grid all tables will be divided by if hadronic: @@ -256,8 +265,9 @@ def pineappl_reader(fkspec): raw_fktable = raw_fktable[0:1] n = 1 protected = True - if apfelcomb.get("shifts") is not None: - ndata += apfelcomb["shifts"][i] + + if shifts is not None: + ndata += shifts[i] # Add empty points to ensure that all fktables share the same x-grid upon convolution missing_x_points = np.setdiff1d(xgrid, p.x_grid(), assume_unique=True) diff --git a/validphys2/src/validphys/plotoptions/core.py b/validphys2/src/validphys/plotoptions/core.py index 9fdaed88c5..b54247f470 100644 --- a/validphys2/src/validphys/plotoptions/core.py +++ b/validphys2/src/validphys/plotoptions/core.py @@ -78,6 +78,7 @@ def __init__( x_label=None, x_scale=None, y_scale=None, + ds_metadata=None, process_description='-', nnpdf31_process, **kwargs, @@ -102,6 +103,7 @@ def __init__( self.y_scale = y_scale self.dataset_label = dataset_label self.process_description = process_description + self.ds_metadata = ds_metadata # For new commondata format def name_to_label(self, name): if name in labeler_functions: @@ -133,10 +135,17 @@ def group_label(self, same_vals, groupby): return f'({same_vals[0]})' pieces = [] for column, val in zip(groupby, same_vals): - label = self.name_to_label(column) - if isinstance(val, numbers.Real): - val = format_number(val) - pieces.append('%s = %s' % (label, val)) + if self.ds_metadata is not None and column in ('k1', 'k2', 'k3'): + # new-style commondata, we can have a nicer label! + ix = ('k1', 'k2', 'k3').index(column) + var_key = self.ds_metadata.kinematic_coverage[ix] + pieces.append(self.ds_metadata.kinematics.apply_label(var_key, val)) + else: + label = self.name_to_label(column) + if isinstance(val, numbers.Real): + val = format_number(val) + pieces.append('%s = %s' % (label, val)) + return '%s' % ' '.join(pieces) @classmethod @@ -163,6 +172,8 @@ def from_commondata(cls, commondata, cuts=None, normalize=False): pcd = commondata.metadata.plotting_options config_params = dataclasses.asdict(pcd, dict_factory=dict_factory) plot_params = plot_params.new_child(config_params) + # Add a reference to the metadata to the plot_params so that it is stored in PlotInfo + plot_params["ds_metadata"] = commondata.metadata kinlabels = plot_params['kinematics_override'].new_labels(*kinlabels) @@ -255,7 +266,6 @@ def kitable(data, info, *, cuts=None): table[label] = value nreal_labels = len(table.columns) - for label, func in funcs: # Pass only the "real" labels and not the derived functions table[label] = apply_to_all_columns(table.iloc[:, :nreal_labels], func) From fa456973dcee2c31b75398fd4390007a4cba5626 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 14 Nov 2023 15:35:25 +0100 Subject: [PATCH 03/52] swap old and new in the mapping old:new --- validphys2/src/validphys/commondataparser.py | 25 ++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 58e21c7edd..98ff9f9ea2 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -298,6 +298,7 @@ class ObservableMetaData: tables: Optional[list] = dataclasses.field(default_factory=list) npoints: Optional[list] = dataclasses.field(default_factory=list) variants: Optional[ValidVariants] = dataclasses.field(default_factory=dict) + applied_variant: Optional[str] = None _parent: Optional[ Any ] = None # Note that an observable without a parent will fail in many different ways @@ -341,7 +342,9 @@ def apply_variant(self, variant_name): except KeyError as e: raise ValueError(f"The requested variant does not exist {self.observable_name}") from e - return dataclasses.replace(self, data_uncertainties=variant.data_uncertainties) + return dataclasses.replace( + self, data_uncertainties=variant.data_uncertainties, applied_variant=variant_name + ) @property def path_data_central(self): @@ -670,14 +673,22 @@ def parse_commondata_new(metadata): 100 / commondata_table["data"], axis="index" ) - # TODO: this will be removed because the old ones will be loaded with the new names - # but during the implementation this is useful for the cuts (filters.py, __call__) + # TODO: here we are reading the mapping in the reverse order sort to speak + # so that we only change the cuts at the end of the full implementation + # once we have the full implementation there won't be any old datasets + # and thus the filter.yaml will be updated (this is now used in filters.py, __call__) names_file = metadata.path_kinematics.parent.parent / "dataset_names.yml" names_dict = yaml.YAML().load(names_file) - if names_dict is not None: - legacy_name = names_dict.get(metadata.name) - else: - legacy_name = metadata.name + legacy_name = metadata.name + + for old_name, new_name in names_dict.items(): + var = None + if not isinstance(new_name, str): + var = new_name.get("variant") + new_name = new_name["dataset"] + if new_name == metadata.name and var == metadata.applied_variant: + legacy_name = old_name + break return CommonData( setname=metadata.name, From ac795529030342d0870dbc0ec1d4e4f5623bcb3a Mon Sep 17 00:00:00 2001 From: juacrumar Date: Mon, 4 Dec 2023 16:35:29 +0100 Subject: [PATCH 04/52] allow for a normalize dictionary --- validphys2/src/validphys/plotoptions/core.py | 3 +++ validphys2/src/validphys/plotoptions/plottingoptions.py | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/validphys2/src/validphys/plotoptions/core.py b/validphys2/src/validphys/plotoptions/core.py index b54247f470..5a1a41da9a 100644 --- a/validphys2/src/validphys/plotoptions/core.py +++ b/validphys2/src/validphys/plotoptions/core.py @@ -174,6 +174,9 @@ def from_commondata(cls, commondata, cuts=None, normalize=False): plot_params = plot_params.new_child(config_params) # Add a reference to the metadata to the plot_params so that it is stored in PlotInfo plot_params["ds_metadata"] = commondata.metadata + # If normalize, we need to update some of the parameters + if normalize and pcd.normalize is not None: + plot_params = plot_params.new_child(pcd.normalize) kinlabels = plot_params['kinematics_override'].new_labels(*kinlabels) diff --git a/validphys2/src/validphys/plotoptions/plottingoptions.py b/validphys2/src/validphys/plotoptions/plottingoptions.py index 6ffec6527a..19ce9b4eb5 100644 --- a/validphys2/src/validphys/plotoptions/plottingoptions.py +++ b/validphys2/src/validphys/plotoptions/plottingoptions.py @@ -59,6 +59,10 @@ class PlottingOptions: extra_labels: typing.Optional[typing.Mapping[str, typing.List]] = None + # TODO: the old commondata saved this normalize key in a different way + # need to check it is equivalent in all dataset it appears before merging + normalize: typing.Optional[dict] = None + def parse_figure_by(self): if self.figure_by is not None: for el in self.figure_by: From a2d9f157105c08747629398c91f900ce5ebc63c4 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Thu, 7 Dec 2023 15:27:53 +0100 Subject: [PATCH 05/52] update reader for cd with less than 3 variables allow saving the whole kin --- validphys2/src/validphys/commondataparser.py | 77 +++++++++++++------ .../validphys/plotoptions/plottingoptions.py | 2 +- 2 files changed, 55 insertions(+), 24 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 98ff9f9ea2..2c2bdd4cb6 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -260,9 +260,11 @@ class ValidKinematics: variables: Dict[str, ValidVariable] def get_label(self, var): - """For the given variable, return the label as - label (unit) + """For the given variable, return the label as label (unit) + If the label is an "extra" return the last one """ + if var.startswith("extra_"): + return list(self.variables.values())[-1] return self.variables[var].full_label() def apply_label(self, var, value): @@ -307,9 +309,9 @@ def __post_init__(self): """Checks to be run after reading the metadata file""" # Check that plotting.plot_x is being filled if self.plotting.plot_x is None: - ermsg = "No variable selected as x-axis in the plot for {self.name}. Please add plotting::plot_x." + ermsg = f"No variable selected as x-axis in the plot for {self.name}. Please add plotting::plot_x." if self.plotting.x is not None: - ermsg += "If you are using `plotting:x` please change it to `plotting::plot_x`" + ermsg += "If you are using `plotting::x` please change it to `plotting::plot_x`" raise ValidationError(ermsg) # Ensure that all variables in the kinematic coverage exist @@ -326,9 +328,14 @@ def __post_init__(self): # Since vp will rely on the kinematics being 3 variables, # fill the extra with whatever can be found in the kinematics dictionary + # otherwise just fill with extra_x if len(self.kinematic_coverage) < 3: unused = list(set(self.kinematics.variables) - set(self.kinematic_coverage)) - self.kinematic_coverage += unused[3 - len(self.kinematic_coverage) :] + diff_to_3 = 3 - len(self.kinematic_coverage) + if unused: + self.kinematic_coverage += unused[diff_to_3:] + else: + self.kinematic_coverage += [f"extra_{i}" for i in range(diff_to_3)] self.process_type = self.process_type.upper() @@ -407,11 +414,18 @@ def plotting_options(self): # Internally validphys takes the x/y to be "k1" "k2" or "k3" # Therefore, for the time being, swap the actual keys by k1/k2/k3 used_idx = [] - x_idx = self.kinematic_coverage.index(self.plotting.plot_x) - used_idx.append(x_idx) - self.plotting.x = f"k{x_idx + 1}" - if self.plotting.x_label is None: - self.plotting.x_label = self.kinematics.get_label(self.plotting.plot_x) + try: + x_idx = self.kinematic_coverage.index(self.plotting.plot_x) + used_idx.append(x_idx) + self.plotting.x = f"k{x_idx + 1}" + + if self.plotting.x_label is None: + self.plotting.x_label = self.kinematics.get_label(self.plotting.plot_x) + + except ValueError: + # it is possible that the x value is an "extra", if that's the case continue + self.plotting.x = self.plotting.plot_x + self.plotting.x_label = None # Swap the `figure_by` and `line_by` variables by k1/k2/k3 # unless this is something coming from the "extra labels" @@ -541,7 +555,7 @@ def _parse_uncertainties(metadata): return pd.concat(all_df, axis=1) -def _parse_kinematics(metadata): +def _parse_kinematics(metadata, fill_to_three=True, drop_minmax=True): """Given the metadata defining the commondata, returns a dataframe with the kinematic information @@ -550,6 +564,9 @@ def _parse_kinematics(metadata): metadata: ObservableMetaData instance of ObservableMetaData defining the kinematics to be loaded + fill_to_three: bool + ensure that there are always three columns (repeat the last one) in the kinematics + Returns ------- pd.DataFrame @@ -561,13 +578,26 @@ def _parse_kinematics(metadata): kin_dict = {} for i, dbin in enumerate(kinyaml["bins"]): bin_index = i + 1 - # TODO: for now we are dropping min/max information since it didn't exist in the past - # unless the point doesn't have a mid value, in that case we need to generate it! for d in dbin.values(): if d["mid"] is None: d["mid"] = 0.5 * (d["max"] + d["min"]) - d["min"] = None - d["max"] = None + + if drop_minmax: + # TODO: for now we are dropping min/max information since it didn't exist in the past + d["min"] = None + d["max"] = None + else: + # If we are not dropping it, ensure that it has something! + d["min"] = d["min"] if d.get("min") is not None else d["mid"] + d["max"] = d["max"] if d.get("max") is not None else d["mid"] + + # The old commondata always had 3 kinematic variables and the code sometimes + # relies on this fact + # Add a fake one at the end repeating the last one + if fill_to_three and (ncol := len(dbin)) < 3: + for i in range(3 - ncol): + dbin[f"extra_{i}"] = d + kin_dict[bin_index] = pd.DataFrame(dbin).stack() return pd.concat(kin_dict, axis=1, names=[_INDEX_NAME]).swaplevel(0, 1).T @@ -681,14 +711,15 @@ def parse_commondata_new(metadata): names_dict = yaml.YAML().load(names_file) legacy_name = metadata.name - for old_name, new_name in names_dict.items(): - var = None - if not isinstance(new_name, str): - var = new_name.get("variant") - new_name = new_name["dataset"] - if new_name == metadata.name and var == metadata.applied_variant: - legacy_name = old_name - break + if names_dict is not None: + for old_name, new_name in names_dict.items(): + var = None + if not isinstance(new_name, str): + var = new_name.get("variant") + new_name = new_name["dataset"] + if new_name == metadata.name and var == metadata.applied_variant: + legacy_name = old_name + break return CommonData( setname=metadata.name, diff --git a/validphys2/src/validphys/plotoptions/plottingoptions.py b/validphys2/src/validphys/plotoptions/plottingoptions.py index 19ce9b4eb5..40b06e5eb3 100644 --- a/validphys2/src/validphys/plotoptions/plottingoptions.py +++ b/validphys2/src/validphys/plotoptions/plottingoptions.py @@ -94,7 +94,7 @@ def __post_init__(self): self.result_transform = result_functions[self.result_transform.name] # TODO: - # add a deprecation warning in case anyone start using `x` in the new commondata + # add a deprecation warning in case anyone try to use `x` in the new commondata self.parse_figure_by() self.parse_line_by() From 8de1a501b04d16e2c91edb751b9bfda992ef3e04 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 8 Dec 2023 13:07:50 +0100 Subject: [PATCH 06/52] try to autoguess the total-cross section case --- validphys2/src/validphys/commondataparser.py | 4 +++- validphys2/src/validphys/pineparser.py | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 2c2bdd4cb6..27e17e70c3 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -548,7 +548,9 @@ def _parse_uncertainties(metadata): ) # 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, metadata.ndata + 1) + pd.DataFrame(uncyaml["bins"]).values.astype(float), + columns=mindex, + index=range(1, metadata.ndata + 1), ) final_df.index.name = _INDEX_NAME all_df.append(final_df) diff --git a/validphys2/src/validphys/pineparser.py b/validphys2/src/validphys/pineparser.py index 92ad6b8e87..206f04d6df 100644 --- a/validphys2/src/validphys/pineparser.py +++ b/validphys2/src/validphys/pineparser.py @@ -299,6 +299,13 @@ def pineappl_reader(fkspec): # Finallly concatenate all fktables, sort by flavours and fill any holes sigma = pd.concat(partial_fktables, sort=True, copy=False).fillna(0.0) + # Check whether this is a 1-point normalization fktable and, if that's the case, protect! + if fkspec.metadata.operation == "RATIO" and ndata == 1 and len(pines) == 1: + # it _might_ be, check whether it is the divisor fktable + divisor = fkspec.metadata.FK_tables[-1][0] + name = fkspec.fkpath[0].name.replace(".pineappl.lz4", "") + protected = divisor == name + return FKTableData( sigma=sigma, ndata=ndata, From bd56b741619d644201b950f94d80f226314cefcb Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 8 Dec 2023 13:31:55 +0100 Subject: [PATCH 07/52] change the order of the checks rebased on top of current master modify import --- validphys2/src/validphys/commondataparser.py | 36 ++++++++++--------- validphys2/src/validphys/config.py | 2 +- validphys2/src/validphys/loader.py | 16 +++------ validphys2/src/validphys/tests/test_loader.py | 1 - 4 files changed, 24 insertions(+), 31 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 27e17e70c3..0bb344043b 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -306,7 +306,22 @@ class ObservableMetaData: ] = None # Note that an observable without a parent will fail in many different ways def __post_init__(self): - """Checks to be run after reading the metadata file""" + """Small modifications for better compatibility with the rest of validphys""" + # Since vp will rely on the kinematics being 3 variables, + # fill the extra with whatever can be found in the kinematics dictionary + # otherwise just fill with extra_x + if len(self.kinematic_coverage) < 3: + unused = list(set(self.kinematics.variables) - set(self.kinematic_coverage)) + diff_to_3 = 3 - len(self.kinematic_coverage) + if unused: + self.kinematic_coverage += unused[diff_to_3:] + else: + self.kinematic_coverage += [f"extra_{i}" for i in range(diff_to_3)] + + self.process_type = self.process_type.upper() + + def check(self): + """Various check to apply to the observable before it is used anywhere""" # Check that plotting.plot_x is being filled if self.plotting.plot_x is None: ermsg = f"No variable selected as x-axis in the plot for {self.name}. Please add plotting::plot_x." @@ -326,19 +341,6 @@ def __post_init__(self): "Only a maximum of 3 variables can be used for `kinematic_coverage`" ) - # Since vp will rely on the kinematics being 3 variables, - # fill the extra with whatever can be found in the kinematics dictionary - # otherwise just fill with extra_x - if len(self.kinematic_coverage) < 3: - unused = list(set(self.kinematics.variables) - set(self.kinematic_coverage)) - diff_to_3 = 3 - len(self.kinematic_coverage) - if unused: - self.kinematic_coverage += unused[diff_to_3:] - else: - self.kinematic_coverage += [f"extra_{i}" for i in range(diff_to_3)] - - self.process_type = self.process_type.upper() - def apply_variant(self, variant_name): """Return a new instance of this class with the variant applied @@ -490,9 +492,9 @@ def select_observable(self, obs_name_raw): obs_name = obs_name_raw.lower().strip() for observable in self.implemented_observables: if observable.observable_name.lower().strip() == obs_name: - observable._parent = ( - self # Not very happy with this but not sure how to do in a better way? - ) + # Not very happy with this but not sure how to do in a better way? + observable._parent = self + observable.check() return observable return ValueError(f"The selected observable {obs_name} does not exist in {self.setname}") diff --git a/validphys2/src/validphys/config.py b/validphys2/src/validphys/config.py index 0d5ec89e92..589ca21bdf 100644 --- a/validphys2/src/validphys/config.py +++ b/validphys2/src/validphys/config.py @@ -594,7 +594,7 @@ def produce_dataset( raise ConfigError(e) if check_plotting: - from validphys.plotoptions import get_info + from validphys.plotoptions.core import get_info # normalize=True should check for more stuff get_info(ds, normalize=True) diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index ad88d445a0..cfb391f56f 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -386,19 +386,11 @@ def check_commondata( datafile = self.commondata_folder / f'DATA_{setname}.dat' if not datafile.exists(): - # TODO: - # Temporary branching between the old and new commondata - # Assuming new commondata if the datafile does not exist - - # TODO: obviously the folder here is only for development purposes once the - # whole thing is finished the data path will be given by the profile - _folder_data = pathlib.Path(__file__).parents[3] / "new_data" - - # Look at the folder & observable + # TODO: if not old data found, maybe thi sis a new data + # The new data goes into folder inside `self.commondata_folder` + # this usually corresponds to /datafiles/commondata setfolder, observable_name = setname.rsplit("_", 1) - commondata_folder = _folder_data / setfolder - - metadata_file = commondata_folder / "metadata.yaml" + metadata_file = self.commondata_folder / "new" / setfolder / "metadata.yaml" # If the metadata file doesn't exist either, then error out if not metadata_file.exists(): diff --git a/validphys2/src/validphys/tests/test_loader.py b/validphys2/src/validphys/tests/test_loader.py index a4713a313d..1ad02ad46a 100644 --- a/validphys2/src/validphys/tests/test_loader.py +++ b/validphys2/src/validphys/tests/test_loader.py @@ -15,7 +15,6 @@ from validphys.core import Cuts, CommonDataSpec from validphys.loader import FallbackLoader, FitNotFound, rebuild_commondata_without_cuts, NNPDF_DIR -from validphys.plotoptions import get_info, kitable from validphys.plotoptions.core import kitable, get_info from validphys.tests.conftest import FIT, FIT_3REPLICAS, THEORYID_NEW From 184fc7cf4d583f1586335570ba41f535538ba453 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Thu, 1 Feb 2024 15:35:56 +0100 Subject: [PATCH 08/52] change the name of the new data folder to new_commondata --- pyproject.toml | 7 +++++-- validphys2/examples/data_theory_comparison.yaml | 15 ++++++++------- validphys2/src/validphys/loader.py | 15 +++++++++------ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d681d1bfca..035efbfd18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,11 +27,14 @@ packages = [ ] # Data files include = [ - # The profile is included together with the validphys package + # The default profile is included together with the validphys package "validphys2/src/validphys/nnprofile_default.yaml", - # While commondata and theory.db are separated into the datafiles folder + # Same for commondata and theory.db "validphys2/src/validphys/datafiles/commondata/*", "validphys2/src/validphys/datafiles/theory.db", + # From the new commondata we are only interested on top-level yaml files + "validphys2/src/validphys/datafiles/new_commondata/*/*.yaml", + "validphys2/src/validphys/datafiles/new_commondata/dataset_names.yml", # The version file is ignored by git so it needs to be explicitly included "validphys2/src/validphys/_version.py" ] diff --git a/validphys2/examples/data_theory_comparison.yaml b/validphys2/examples/data_theory_comparison.yaml index 71a579abc1..3c7787c5c3 100644 --- a/validphys2/examples/data_theory_comparison.yaml +++ b/validphys2/examples/data_theory_comparison.yaml @@ -1,19 +1,20 @@ meta: - title: Test + title: BCDMSP data/theory comparison keywords: [example] - author: juacrumar + author: Rosalyn Pearson pdfs: - - id: NNPDF40_nnlo_as_01180 + - id: NNPDF40_nnlo_lowprecision + label: NNPDF40_nnlo_lowprecision -theoryid: 400 +theoryid: 162 use_cuts: "internal" - dataset_inputs: - - { dataset: E605_DY_38P8GEV_PXSEC} - #- { dataset: DYE605_dw_ite} + - { dataset: BCDMSP} + - { dataset: H1HERAF2B} + - { dataset: ZEUSHERAF2B} template: dthcomparison.md diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index cfb391f56f..d2c8a8171d 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -390,7 +390,14 @@ def check_commondata( # The new data goes into folder inside `self.commondata_folder` # this usually corresponds to /datafiles/commondata setfolder, observable_name = setname.rsplit("_", 1) - metadata_file = self.commondata_folder / "new" / setfolder / "metadata.yaml" + + # TODO + if not self.commondata_folder.with_name("new_commondata").exists(): + raise DataNotFoundError("new_commondata folder missing in this branch!") + + metadata_file = ( + self.commondata_folder.with_name("new_commondata") / setfolder / "metadata.yaml" + ) # If the metadata file doesn't exist either, then error out if not metadata_file.exists(): @@ -669,11 +676,7 @@ def check_dataset( # once of the two __must__ be superfluous # note that both use information from dataset_input commondata = self.check_commondata( - name, - sysnum, - use_fitcommondata=use_fitcommondata, - fit=fit, - variants=variants, + name, sysnum, use_fitcommondata=use_fitcommondata, fit=fit, variants=variants ) if commondata.legacy: From 9bcd4d782d8c51e31ef170727146a79feb99dafe Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 2 Feb 2024 18:24:53 +0100 Subject: [PATCH 09/52] various fixes related to the heracomb datasets ; change variants to variant --- validphys2/src/validphys/commondataparser.py | 29 +++++++++++++++----- validphys2/src/validphys/config.py | 14 ++++++---- validphys2/src/validphys/core.py | 4 +-- validphys2/src/validphys/coredata.py | 2 ++ validphys2/src/validphys/filters.py | 4 ++- validphys2/src/validphys/loader.py | 9 +++--- validphys2/src/validphys/plotoptions/core.py | 11 ++++++-- 7 files changed, 50 insertions(+), 23 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 0bb344043b..1b33f800eb 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -48,7 +48,7 @@ from reportengine.compat import yaml from validphys.coredata import KIN_NAMES, CommonData -from validphys.plotoptions.plottingoptions import PlottingOptions +from validphys.plotoptions.plottingoptions import PlottingOptions, labeler_functions from validphys.utils import parse_yaml_inp EXT = "pineappl.lz4" @@ -301,6 +301,7 @@ class ObservableMetaData: npoints: Optional[list] = dataclasses.field(default_factory=list) variants: Optional[ValidVariants] = dataclasses.field(default_factory=dict) applied_variant: Optional[str] = None + ported_from: Optional[str] = None _parent: Optional[ Any ] = None # Note that an observable without a parent will fail in many different ways @@ -392,11 +393,22 @@ def cm_energy(self): def name(self): return f"{self.setname}_{self.observable_name}" + @property + def is_ported_dataset(self): + """Return True if this is an automatically ported dataset that has not been updated""" + return self.ported_from is not None and self.applied_variant.startswith("legacy") + @property def kinlabels(self): """Return the kinematic labels in the same order as they are set - in ``kinematic_coverage`` (which in turns follow the key kinematic_coverage + in ``kinematic_coverage`` (which in turns follow the key kinematic_coverage) + If this is a ported dataset, rely on the process type using the legacy labels """ + if self.is_ported_dataset: + proc = self.process_type + if proc[:3] == "DIS": + proc = "DIS" + return KINLABEL_LATEX.get(proc, proc) return [self.kinematics.get_label(i) for i in self.kinematic_coverage] @cached_property @@ -421,7 +433,7 @@ def plotting_options(self): used_idx.append(x_idx) self.plotting.x = f"k{x_idx + 1}" - if self.plotting.x_label is None: + if self.plotting.x_label is None and not self.is_ported_dataset: self.plotting.x_label = self.kinematics.get_label(self.plotting.plot_x) except ValueError: @@ -440,6 +452,9 @@ def plotting_options(self): new_fig_by.append(f"k{fig_idx + 1}") elif self.plotting.extra_labels is not None and var in self.plotting.extra_labels: new_fig_by.append(var) + elif var in labeler_functions: + # Hopefully vp will know what to do with this later on in plotoptions.core + new_fig_by.append(var) else: raise ValueError(f"Cannot find {var} in the kinematic coverage or extra labels") @@ -447,7 +462,7 @@ def plotting_options(self): if self.plotting.line_by is not None: new_line_by = [] - for var in self.plotting.figure_by: + for var in self.plotting.line_by: line_idx = self.kinematic_coverage.index(var) used_idx.append(line_idx) new_line_by.append(f"k{line_idx + 1}") @@ -607,7 +622,7 @@ def _parse_kinematics(metadata, fill_to_three=True, drop_minmax=True): return pd.concat(kin_dict, axis=1, names=[_INDEX_NAME]).swaplevel(0, 1).T -def parse_new_metadata(metadata_file, observable_name, variants=[]): +def parse_new_metadata(metadata_file, observable_name, variant=None): """Given a metadata file in the new format and the specific observable to be read load and parse the metadata and select the observable. If any variants are selected, apply them. @@ -619,8 +634,8 @@ def parse_new_metadata(metadata_file, observable_name, variants=[]): # Select one observable from the entire metadata metadata = set_metadata.select_observable(observable_name) - # And apply variants - for variant in variants: + # And apply variant if given + if variant is not None: metadata = metadata.apply_variant(variant) return metadata diff --git a/validphys2/src/validphys/config.py b/validphys2/src/validphys/config.py index 589ca21bdf..61f17b84ef 100644 --- a/validphys2/src/validphys/config.py +++ b/validphys2/src/validphys/config.py @@ -366,7 +366,7 @@ def produce_fitpdfandbasis(self, fitpdf, basisfromfit): def parse_dataset_input(self, dataset: Mapping): """The mapping that corresponds to the dataset specifications in the fit files""" - known_keys = {"dataset", "sys", "cfac", "frac", "weight", "custom_group", "variants"} + known_keys = {"dataset", "sys", "cfac", "frac", "weight", "custom_group", "variant"} try: name = dataset["dataset"] if not isinstance(name, str): @@ -383,7 +383,9 @@ def parse_dataset_input(self, dataset: Mapping): sysnum = dataset.get("sys") cfac = dataset.get("cfac", tuple()) frac = dataset.get("frac", 1) - variants = tuple(dataset.get("variants", [])) + variant = dataset.get("variant", None) + if not variant: + variant = None if not isinstance(frac, numbers.Real): raise ConfigError(f"'frac' must be a number, not '{frac}'") if frac < 0 or frac > 1: @@ -405,7 +407,7 @@ def parse_dataset_input(self, dataset: Mapping): frac=frac, weight=weight, custom_group=custom_group, - variants=variants, + variant=variant, ) def parse_use_fitcommondata(self, do_use: bool): @@ -424,7 +426,7 @@ def produce_commondata(self, *, dataset_input, use_fitcommondata=False, fit=None sysnum=sysnum, use_fitcommondata=use_fitcommondata, fit=fit, - variants=dataset_input.variants, + variant=dataset_input.variant, ) except DataNotFoundError as e: raise ConfigError(str(e), name, self.loader.available_datasets) from e @@ -572,7 +574,7 @@ def produce_dataset( cfac = dataset_input.cfac frac = dataset_input.frac weight = dataset_input.weight - variants = dataset_input.variants + variant = dataset_input.variant try: ds = self.loader.check_dataset( @@ -585,7 +587,7 @@ def produce_dataset( use_fitcommondata=use_fitcommondata, fit=fit, weight=weight, - variants=variants, + variant=variant, ) except DataNotFoundError as e: raise ConfigError(str(e), name, self.loader.available_datasets) diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index 3c1cc5c946..f262dc21ec 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -288,14 +288,14 @@ class DataSetInput(TupleComp): """Represents whatever the user enters in the YAML to specify a dataset.""" - def __init__(self, *, name, sys, cfac, frac, weight, custom_group, variants): + def __init__(self, *, name, sys, cfac, frac, weight, custom_group, variant): self.name = name self.sys = sys self.cfac = cfac self.frac = frac self.weight = weight self.custom_group = custom_group - self.variants = variants + self.variant = variant super().__init__(name, sys, cfac, frac, weight, custom_group) def __str__(self): diff --git a/validphys2/src/validphys/coredata.py b/validphys2/src/validphys/coredata.py index e829e4256f..9bc333806e 100644 --- a/validphys2/src/validphys/coredata.py +++ b/validphys2/src/validphys/coredata.py @@ -255,6 +255,8 @@ def __post_init__(self): self.systematics_table = self.commondata_table.drop( columns=["process", "data", "stat"] + KIN_NAMES ) + # print(self.setname, self.legacy) + # import ipdb; ipdb.set_trace() if self.legacy_name is None: self.legacy_name = self.setname diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index f6fca778ea..684954c340 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -575,7 +575,9 @@ def _make_kinematics_dict(self, dataset, idat) -> dict: # This "understanding" should not be necessary and the process-variable # mapping in this module should only serve to check which variables are allowed kinematics = dataset.kinematics.values[idat] - if dataset.legacy or self.process_type is None: + if dataset.legacy or "k1" in dataset.kin_variables: + # For ported dataset, the naming is k1/k2/k3 and + # thus it needs to rely on the process return dict(zip(self.variables, kinematics)) # Use the order of the commondata and the sintax of KIN_LABEL diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index d2c8a8171d..85e7db82ac 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -41,7 +41,6 @@ peek_commondata_metadata, ) from validphys.datafiles import path_vpdata -from validphys.commondataparser import parse_new_metadata from validphys.utils import tempfile_cleaner log = logging.getLogger(__name__) @@ -351,7 +350,7 @@ def commondata_folder(self): return self.datapath / 'commondata' def check_commondata( - self, setname, sysnum=None, use_fitcommondata=False, fit=None, variants=() + self, setname, sysnum=None, use_fitcommondata=False, fit=None, variant=None ): if use_fitcommondata: if not fit: @@ -408,7 +407,7 @@ def check_commondata( ) # Get the instance of ObservableMetaData - metadata = parse_new_metadata(metadata_file, observable_name, variants=variants) + metadata = parse_new_metadata(metadata_file, observable_name, variant=variant) return CommonDataSpec(None, None, None, name=setname, metadata=metadata, legacy=False) @@ -659,7 +658,7 @@ def check_dataset( use_fitcommondata=False, fit=None, weight=1, - variants=(), + variant=None, ): """Loads a given dataset If the dataset contains new-type fktables, use the @@ -676,7 +675,7 @@ def check_dataset( # once of the two __must__ be superfluous # note that both use information from dataset_input commondata = self.check_commondata( - name, sysnum, use_fitcommondata=use_fitcommondata, fit=fit, variants=variants + name, sysnum, use_fitcommondata=use_fitcommondata, fit=fit, variant=variant ) if commondata.legacy: diff --git a/validphys2/src/validphys/plotoptions/core.py b/validphys2/src/validphys/plotoptions/core.py index 5a1a41da9a..a89b5bf57d 100644 --- a/validphys2/src/validphys/plotoptions/core.py +++ b/validphys2/src/validphys/plotoptions/core.py @@ -135,8 +135,15 @@ def group_label(self, same_vals, groupby): return f'({same_vals[0]})' pieces = [] for column, val in zip(groupby, same_vals): - if self.ds_metadata is not None and column in ('k1', 'k2', 'k3'): - # new-style commondata, we can have a nicer label! + if ( + self.ds_metadata is not None + and not self.ds_metadata.is_ported_dataset + and column in ('k1', 'k2', 'k3') + ): + # If this is a new-style commondata (it has metadata) + # _and_ it is not simply an automatic port of the old dataset + # _and_ we have the information on the requested column... + # then we can have a nicer label! ix = ('k1', 'k2', 'k3').index(column) var_key = self.ds_metadata.kinematic_coverage[ix] pieces.append(self.ds_metadata.kinematics.apply_label(var_key, val)) From 1c4be0bc560765587c54a5c9130edc32ae3e9282 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 6 Feb 2024 11:58:42 +0100 Subject: [PATCH 10/52] add necessary changes to read all 4.0 datasets ported to the new format --- validphys2/src/validphys/commondataparser.py | 64 ++++++++++++++------ validphys2/src/validphys/filters.py | 1 + 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 1b33f800eb..255b70e78f 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -70,6 +70,7 @@ "EWK_PT": ("$p_T$ (GeV)", "$M^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), "EWK_PTRAP": ("$\\eta/y$", "$p_T^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), "EWK_RAP": ("$\\eta/y$", "$M^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), + "EWK_RAP_ASY": ("$\\eta/y$", "$M^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), "HIG_RAP": ("$y$", "$M_H^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), "HQP_MQQ": ("$M^{QQ} (GeV)$", "$\\mu^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), "HQP_PTQ": ("$p_T^Q (GeV)$", "$\\mu^2 (GeV^2)$", "$\\sqrt{s} (GeV)$"), @@ -408,12 +409,37 @@ def kinlabels(self): proc = self.process_type if proc[:3] == "DIS": proc = "DIS" + if proc[:3] == "DYP": + proc = "DYP" return KINLABEL_LATEX.get(proc, proc) return [self.kinematics.get_label(i) for i in self.kinematic_coverage] - @cached_property - def plotting_options(self): - """Return the PlottingOptions metadata + def digest_plotting_variable(self, variable): + """Digest plotting variables in the ``line_by`` or ``figure_by`` fields + and return the appropiate ``kX`` or other label such that the plotting functions + of validphys can understand it. + + These might be variables included as part of the kinematics or extra labels + defined in the plotting dictionary. + """ + # If it is part of the coverage, just return the relevant KN + if variable in self.kinematic_coverage: + fig_idx = self.kinematic_coverage.index(variable) + return f"k{fig_idx + 1}" + + # If it is not in the coverage, it might be a _known_ extra label + if self.plotting.extra_labels is not None and variable in self.plotting.extra_labels: + # In that case return it raw + return variable + + # Or, it might be a variable that VP knows how to deal with automagically + if variable in labeler_functions: + return variable + + raise ValueError(f"Don't know what to do with plotting variable {variable} for {self.name}") + + def _plotting_options_set(self): + """Set and return the PlottingOptions metadata Fill in missing information that can be learnt from the other variables (xlabel/ylabel) or that is shared by the whole dataset. @@ -427,10 +453,8 @@ def plotting_options(self): ## Swap variables by the k_idx # Internally validphys takes the x/y to be "k1" "k2" or "k3" # Therefore, for the time being, swap the actual keys by k1/k2/k3 - used_idx = [] try: x_idx = self.kinematic_coverage.index(self.plotting.plot_x) - used_idx.append(x_idx) self.plotting.x = f"k{x_idx + 1}" if self.plotting.x_label is None and not self.is_ported_dataset: @@ -446,30 +470,26 @@ def plotting_options(self): if self.plotting.figure_by is not None: new_fig_by = [] for var in self.plotting.figure_by: - if var in self.kinematic_coverage: - fig_idx = self.kinematic_coverage.index(var) - used_idx.append(fig_idx) - new_fig_by.append(f"k{fig_idx + 1}") - elif self.plotting.extra_labels is not None and var in self.plotting.extra_labels: - new_fig_by.append(var) - elif var in labeler_functions: - # Hopefully vp will know what to do with this later on in plotoptions.core - new_fig_by.append(var) - else: - raise ValueError(f"Cannot find {var} in the kinematic coverage or extra labels") - + new_fig_by.append(self.digest_plotting_variable(var)) self.plotting.figure_by = new_fig_by if self.plotting.line_by is not None: new_line_by = [] for var in self.plotting.line_by: - line_idx = self.kinematic_coverage.index(var) - used_idx.append(line_idx) - new_line_by.append(f"k{line_idx + 1}") + new_line_by.append(self.digest_plotting_variable(var)) self.plotting.line_by = new_line_by return self.plotting + @cached_property + def plotting_options(self): + try: + return self._plotting_options_set() + except Exception as e: + # There are many chances for failure here + log.error(f"Failure for: {self.name}") + raise e + @dataclasses.dataclass class ValidReference: @@ -477,6 +497,7 @@ class ValidReference: url: str version: Optional[int] = None + journal: Optional[str] = None tables: list[int] = dataclasses.field(default_factory=list) @@ -882,6 +903,9 @@ def get_kinlabel_key(process_label): """ l = process_label try: + if process_label == "EWK_RAP_ASY": + # TODO this function is disappearing in this PR + l = "EWK_RAP" return next(k for k in sorted(KINLABEL_LATEX, key=len, reverse=True) if l.startswith(k)) except StopIteration as e: raise ValueError( diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index 684954c340..12ee162fcd 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -26,6 +26,7 @@ "PHT": ("eta_gamma", "E_{T,gamma)2", "sqrts"), "INC": ("0", "mu2", "sqrts"), "EWK_RAP": ("etay", "M2", "sqrts"), + "EWK_RAP_ASY": ("etay", "M2", "sqrts"), "EWK_PT": ("p_T", "M2", "sqrts"), "EWK_PTRAP": ("etay", "p_T2", "sqrts"), "EWK_MLL": ("M_ll", "M_ll2", "sqrts"), From ab513e2f69c13c6839220f94fc4576fcd3bb6057 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 6 Feb 2024 15:39:35 +0100 Subject: [PATCH 11/52] implement positivity --- validphys2/src/validphys/commondataparser.py | 234 ++++++++++--------- validphys2/src/validphys/loader.py | 13 +- 2 files changed, 128 insertions(+), 119 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 255b70e78f..734c7db69a 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -43,6 +43,7 @@ from typing import Any, Dict, Optional import pandas as pd +import numpy as np from validobj import ValidationError, parse_input from validobj.custom import Parser @@ -288,14 +289,19 @@ class ObservableMetaData: observable_name: str observable: dict ndata: int - # Data itself - kinematics: ValidKinematics - data_central: ValidPath - data_uncertainties: list[ValidPath] # Plotting options plotting: PlottingOptions process_type: str kinematic_coverage: list[str] + + # Data itself + kinematics: ValidKinematics + data_uncertainties: list[ValidPath] + + # The central data is optional _only_ for + # positivity datasets, and will be checked as soon as the class is instantiated + data_central: Optional[ValidPath] = None + # Optional data theory: Optional[TheoryMeta] = None tables: Optional[list] = dataclasses.field(default_factory=list) @@ -308,7 +314,9 @@ class ObservableMetaData: ] = None # Note that an observable without a parent will fail in many different ways def __post_init__(self): - """Small modifications for better compatibility with the rest of validphys""" + """ + Small modifications for better compatibility with the rest of validphys + """ # Since vp will rely on the kinematics being 3 variables, # fill the extra with whatever can be found in the kinematics dictionary # otherwise just fill with extra_x @@ -323,7 +331,14 @@ def __post_init__(self): self.process_type = self.process_type.upper() def check(self): - """Various check to apply to the observable before it is used anywhere""" + """Various checks to apply manually to the observable before it is used anywhere + These are not part of the __post_init__ call since they can only happen after the metadata + has been read and the observable selected. + """ + # Check that the data_central is empty if and only if the dataset is a positivity set + if self.data_central is None and not self.is_positivity: + raise ValidationError(f"Missing `data_central` field for {self.name}") + # Check that plotting.plot_x is being filled if self.plotting.plot_x is None: ermsg = f"No variable selected as x-axis in the plot for {self.name}. Please add plotting::plot_x." @@ -357,18 +372,114 @@ def apply_variant(self, variant_name): self, data_uncertainties=variant.data_uncertainties, applied_variant=variant_name ) + @property + def is_positivity(self): + return self.setname.startswith("NNPDF_POS") + @property def path_data_central(self): return self._parent.folder / self.data_central + def load_data_central(self): + """Loads the data for this commondata returns a dataframe + + Returns + ------- + pd.DataFrame + a dataframe containing the data + """ + if self.is_positivity: + data = np.zeros(self.ndata) + else: + datayaml = yaml.safe_load(self.path_data_central.read_text(encoding="utf-8")) + data = datayaml["data_central"] + data_df = pd.DataFrame(data, index=range(1, self.ndata + 1), columns=["data"]) + data_df.index.name = _INDEX_NAME + return data_df + @property def paths_uncertainties(self): return [self._parent.folder / i for i in self.data_uncertainties] + def load_uncertainties(self): + """Returns a dataframe with all appropiate uncertainties + + Returns + ------- + pd.DataFrame + a dataframe containing the uncertainties + """ + if self.is_positivity: + return pd.DataFrame([{}] * self.ndata, index=range(1, self.ndata + 1)) + + all_df = [] + for ufile in self.paths_uncertainties: + uncyaml = yaml.safe_load(ufile.read_text()) + + mindex = pd.MultiIndex.from_tuples( + [(k, v["treatment"], v["type"]) for k, v in uncyaml["definitions"].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.astype(float), + columns=mindex, + index=range(1, self.ndata + 1), + ) + final_df.index.name = _INDEX_NAME + all_df.append(final_df) + return pd.concat(all_df, axis=1) + @property def path_kinematics(self): return self._parent.folder / self.kinematics.file + def load_kinematics(self, fill_to_three=True, drop_minmax=True): + """Returns a dataframe with the kinematic information + + Parameters + ---------- + fill_to_three: bool + ensure that there are always three columns (repeat the last one) in the kinematics + + drop_minmax: bool + Drop the min and max value, necessary for legacy comparisons + + Returns + ------- + pd.DataFrame + a dataframe containing the kinematics + """ + kinematics_file = self.path_kinematics + kinyaml = yaml.safe_load(kinematics_file.read_text()) + + kin_dict = {} + for i, dbin in enumerate(kinyaml["bins"]): + bin_index = i + 1 + for d in dbin.values(): + if d["mid"] is None: + d["mid"] = 0.5 * (d["max"] + d["min"]) + + if drop_minmax: + # TODO: for now we are dropping min/max information since it didn't exist in the past + d["min"] = None + d["max"] = None + else: + # If we are not dropping it, ensure that it has something! + d["min"] = d["min"] if d.get("min") is not None else d["mid"] + d["max"] = d["max"] if d.get("max") is not None else d["mid"] + + # The old commondata always had 3 kinematic variables and the code sometimes + # relies on this fact + # Add a fake one at the end repeating the last one + if fill_to_three and (ncol := len(dbin)) < 3: + for i in range(3 - ncol): + dbin[f"extra_{i}"] = d + + kin_dict[bin_index] = pd.DataFrame(dbin).stack() + + return pd.concat(kin_dict, axis=1, names=[_INDEX_NAME]).swaplevel(0, 1).T + # Properties inherited from parent @property def nnpdf_metadata(self): @@ -538,111 +649,6 @@ def select_observable(self, obs_name_raw): ### -### Parsers -def _parse_data(metadata): - """Given the metadata defining the commondata, - returns a dataframe with the right central data loaded - - Parameters - ---------- - metadata: ObservableMetaData - instance of ObservableMetaData defining the data to be loaded - - Returns - ------- - pd.DataFrame - a dataframe containing the data - """ - data_file = metadata.path_data_central - datayaml = yaml.safe_load(data_file.read_text(encoding="utf-8")) - data_df = pd.DataFrame( - datayaml["data_central"], index=range(1, metadata.ndata + 1), columns=["data"] - ) - data_df.index.name = _INDEX_NAME - return data_df - - -def _parse_uncertainties(metadata): - """Given the metadata defining the commondata, - returns a dataframe with all appropiate uncertainties - - Parameters - ---------- - metadata: ObservableMetaData - instance of ObservableMetaData defining the uncertainties to be loaded - - Returns - ------- - pd.DataFrame - a dataframe containing the uncertainties - """ - all_df = [] - for ufile in metadata.paths_uncertainties: - uncyaml = yaml.safe_load(ufile.read_text()) - - mindex = pd.MultiIndex.from_tuples( - [(k, v["treatment"], v["type"]) for k, v in uncyaml["definitions"].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.astype(float), - columns=mindex, - index=range(1, metadata.ndata + 1), - ) - final_df.index.name = _INDEX_NAME - all_df.append(final_df) - return pd.concat(all_df, axis=1) - - -def _parse_kinematics(metadata, fill_to_three=True, drop_minmax=True): - """Given the metadata defining the commondata, - returns a dataframe with the kinematic information - - Parameters - ---------- - metadata: ObservableMetaData - instance of ObservableMetaData defining the kinematics to be loaded - - fill_to_three: bool - ensure that there are always three columns (repeat the last one) in the kinematics - - Returns - ------- - pd.DataFrame - a dataframe containing the kinematics - """ - kinematics_file = metadata.path_kinematics - kinyaml = yaml.safe_load(kinematics_file.read_text()) - - kin_dict = {} - for i, dbin in enumerate(kinyaml["bins"]): - bin_index = i + 1 - for d in dbin.values(): - if d["mid"] is None: - d["mid"] = 0.5 * (d["max"] + d["min"]) - - if drop_minmax: - # TODO: for now we are dropping min/max information since it didn't exist in the past - d["min"] = None - d["max"] = None - else: - # If we are not dropping it, ensure that it has something! - d["min"] = d["min"] if d.get("min") is not None else d["mid"] - d["max"] = d["max"] if d.get("max") is not None else d["mid"] - - # The old commondata always had 3 kinematic variables and the code sometimes - # relies on this fact - # Add a fake one at the end repeating the last one - if fill_to_three and (ncol := len(dbin)) < 3: - for i in range(3 - ncol): - dbin[f"extra_{i}"] = d - - kin_dict[bin_index] = pd.DataFrame(dbin).stack() - - return pd.concat(kin_dict, axis=1, names=[_INDEX_NAME]).swaplevel(0, 1).T - - def parse_new_metadata(metadata_file, observable_name, variant=None): """Given a metadata file in the new format and the specific observable to be read load and parse the metadata and select the observable. @@ -691,11 +697,11 @@ def parse_commondata_new(metadata): _old_ file format """ # Now parse the data - data_df = _parse_data(metadata) + data_df = metadata.load_data_central() # the uncertainties - uncertainties_df = _parse_uncertainties(metadata) + uncertainties_df = metadata.load_uncertainties() # and the kinematics - kin_df = _parse_kinematics(metadata) + kin_df = metadata.load_kinematics() # Once we have loaded all uncertainty files, let's check how many sys we have nsys = len( diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index 85e7db82ac..311969c764 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -485,7 +485,7 @@ def check_fktable(self, theoryID, setname, cfac): cfactors = self.check_cfactor(theoryID, setname, cfac) return FKTableSpec(fkpath, cfactors) - def check_fk_from_theory_metadata(self, theory_metadata, theoryID, cfac): + def check_fk_from_theory_metadata(self, theory_metadata, theoryID, cfac=None): """Load a pineappl fktable in the new commondata forma Receives a theory metadata describing the fktables necessary for a given observable the theory ID and the corresponding cfactors. @@ -497,7 +497,7 @@ def check_fk_from_theory_metadata(self, theory_metadata, theoryID, cfac): fklist = theory_metadata.fktables_to_paths(theory.path / "fastkernel") op = theory_metadata.operation - if not cfac: + if not cfac or cfac is None: fkspecs = [FKTableSpec(i, None, theory_metadata) for i in fklist] return fkspecs, op @@ -574,10 +574,13 @@ def check_posset(self, theoryID, setname, postlambda): """Load a positivity dataset""" cd = self.check_commondata(setname, 'DEFAULT') th = self.check_theoryID(theoryID) - if th.is_pineappl(): - fk, _ = self.check_fkyaml(setname, theoryID, []) + if cd.legacy: + if th.is_pineappl(): + fk, _ = self.check_fkyaml(setname, theoryID, []) + else: + fk = self.check_fktable(theoryID, setname, []) else: - fk = self.check_fktable(theoryID, setname, []) + fk, _ = self.check_fk_from_theory_metadata(cd.metadata.theory, theoryID) return PositivitySetSpec(setname, cd, fk, postlambda, th) def check_integset(self, theoryID, setname, postlambda): From 7967b539b22ae0bc2ea738071cbafeee2593ead6 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 6 Feb 2024 17:17:07 +0100 Subject: [PATCH 12/52] now the variant can also change the theory allow data_central in the variants... add the possibility to read integrability datasets --- validphys2/src/validphys/commondataparser.py | 56 +++++++++++++------- validphys2/src/validphys/filters.py | 1 + validphys2/src/validphys/loader.py | 16 +++--- 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 734c7db69a..341ad6e12e 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -91,18 +91,6 @@ def ValidPath(path_str: str) -> Path: return Path(path_str) -@dataclasses.dataclass -class Variant: - """The new commondata format allow the usage of variants - A variant can overwrite a number of keys, as defined by this dataclass - """ - - data_uncertainties: list[ValidPath] - - -ValidVariants = Dict[str, Variant] - - ### Theory metadata @Parser def ValidOperation(op_str: Optional[str]) -> str: @@ -217,7 +205,21 @@ def parser(cls, yaml_file): return parse_input(meta, cls) -### +## Theory end + + +@dataclasses.dataclass +class Variant: + """The new commondata format allow the usage of variants + A variant can overwrite a number of keys, as defined by this dataclass + """ + + data_uncertainties: Optional[list[ValidPath]] = None + theory: Optional[TheoryMeta] = None + data_central: Optional[ValidPath] = None + + +ValidVariants = Dict[str, Variant] ### Kinematic data @@ -336,7 +338,7 @@ def check(self): has been read and the observable selected. """ # Check that the data_central is empty if and only if the dataset is a positivity set - if self.data_central is None and not self.is_positivity: + if self.data_central is None and not self.is_lagrange_multiplier: raise ValidationError(f"Missing `data_central` field for {self.name}") # Check that plotting.plot_x is being filled @@ -366,16 +368,30 @@ def apply_variant(self, variant_name): try: variant = self.variants[variant_name] except KeyError as e: - raise ValueError(f"The requested variant does not exist {self.observable_name}") from e + raise ValueError(f"The requested variant does not exist {self.variant_name}") from e - return dataclasses.replace( - self, data_uncertainties=variant.data_uncertainties, applied_variant=variant_name - ) + variant_replacement = {} + if variant.data_uncertainties is not None: + variant_replacement["data_uncertainties"] = variant.data_uncertainties + if variant.theory is not None: + variant_replacement["theory"] = variant.theory + if variant.data_central is not None: + variant_replacement["data_central"] = variant.data_central + + return dataclasses.replace(self, applied_variant=variant_name, **variant_replacement) @property def is_positivity(self): return self.setname.startswith("NNPDF_POS") + @property + def is_integrability(self): + return self.setname.startswith("NNPDF_INTEG") + + @property + def is_lagrange_multiplier(self): + return self.is_positivity or self.is_integrability + @property def path_data_central(self): return self._parent.folder / self.data_central @@ -388,7 +404,7 @@ def load_data_central(self): pd.DataFrame a dataframe containing the data """ - if self.is_positivity: + if self.is_lagrange_multiplier: data = np.zeros(self.ndata) else: datayaml = yaml.safe_load(self.path_data_central.read_text(encoding="utf-8")) @@ -409,7 +425,7 @@ def load_uncertainties(self): pd.DataFrame a dataframe containing the uncertainties """ - if self.is_positivity: + if self.is_lagrange_multiplier: return pd.DataFrame([{}] * self.ndata, index=range(1, self.ndata + 1)) all_df = [] diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index 12ee162fcd..ff8d251381 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -65,6 +65,7 @@ def substitute(pr_v, cd_x): substitute("sqrts", "sqrt_s") substitute("sqrt(s)", "sqrts") substitute("sqrt(s)", "sqrt_s") + substitute("yQQ", "y_ttBar") return variables diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index 311969c764..81cbb36441 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -570,8 +570,8 @@ def check_cfactor(self, theoryID, setname, cfactors): return tuple(cf) - def check_posset(self, theoryID, setname, postlambda): - """Load a positivity dataset""" + def _check_lagrange_multiplier_set(self, theoryID, setname): + """Check an integrability or positivity dataset""" cd = self.check_commondata(setname, 'DEFAULT') th = self.check_theoryID(theoryID) if cd.legacy: @@ -581,16 +581,16 @@ def check_posset(self, theoryID, setname, postlambda): fk = self.check_fktable(theoryID, setname, []) else: fk, _ = self.check_fk_from_theory_metadata(cd.metadata.theory, theoryID) + return cd, fk, th + + def check_posset(self, theoryID, setname, postlambda): + """Load a positivity dataset""" + cd, fk, th = self._check_lagrange_multiplier_set(theoryID, setname) return PositivitySetSpec(setname, cd, fk, postlambda, th) def check_integset(self, theoryID, setname, postlambda): """Load an integrability dataset""" - cd = self.check_commondata(setname, 'DEFAULT') - th = self.check_theoryID(theoryID) - if th.is_pineappl(): - fk, _ = self.check_fkyaml(setname, theoryID, []) - else: - fk = self.check_fktable(theoryID, setname, []) + cd, fk, th = self._check_lagrange_multiplier_set(theoryID, setname) return IntegrabilitySetSpec(setname, cd, fk, postlambda, th) def get_posset(self, theoryID, setname, postlambda): From ed628498cdb22343beff239e03ce91cfd305bc65 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Thu, 8 Feb 2024 14:10:27 +0100 Subject: [PATCH 13/52] update treatment of legacy-new mapping --- validphys2/src/validphys/commondataparser.py | 28 ++++++++----------- validphys2/src/validphys/coredata.py | 9 +++++- .../src/validphys/datafiles/__init__.py | 18 ++++++++++++ validphys2/src/validphys/filters.py | 1 + 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 341ad6e12e..2fc4ef6452 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -42,13 +42,14 @@ from pathlib import Path from typing import Any, Dict, Optional -import pandas as pd import numpy as np +import pandas as pd from validobj import ValidationError, parse_input from validobj.custom import Parser from reportengine.compat import yaml from validphys.coredata import KIN_NAMES, CommonData +from validphys.datafiles import new_to_legacy_mapping from validphys.plotoptions.plottingoptions import PlottingOptions, labeler_functions from validphys.utils import parse_yaml_inp @@ -765,23 +766,18 @@ def parse_commondata_new(metadata): 100 / commondata_table["data"], axis="index" ) - # TODO: here we are reading the mapping in the reverse order sort to speak - # so that we only change the cuts at the end of the full implementation - # once we have the full implementation there won't be any old datasets - # and thus the filter.yaml will be updated (this is now used in filters.py, __call__) - names_file = metadata.path_kinematics.parent.parent / "dataset_names.yml" - names_dict = yaml.YAML().load(names_file) + # TODO: For the time being, fill `legacy_name` with the new name if not found legacy_name = metadata.name - if names_dict is not None: - for old_name, new_name in names_dict.items(): - var = None - if not isinstance(new_name, str): - var = new_name.get("variant") - new_name = new_name["dataset"] - if new_name == metadata.name and var == metadata.applied_variant: - legacy_name = old_name - break + if (old_info := new_to_legacy_mapping.get(metadata.name)) is not None: + # There is a mapping for this dataset, now check whether the variant matches + if metadata.applied_variant == old_info.get("variant"): + legacy_name = old_info["dataset"] + elif metadata.applied_variant is not None: + # The variants don't match, but could it be due to a "sys" choice? + # legacy systematic variants are all prefixed as ``legacy_XX`` + if metadata.applied_variant.startswith("legacy"): + legacy_name = old_info["dataset"] return CommonData( setname=metadata.name, diff --git a/validphys2/src/validphys/coredata.py b/validphys2/src/validphys/coredata.py index 9bc333806e..4b70039aa2 100644 --- a/validphys2/src/validphys/coredata.py +++ b/validphys2/src/validphys/coredata.py @@ -3,6 +3,7 @@ dataframes). """ import dataclasses +import logging from typing import Optional import numpy as np @@ -11,6 +12,7 @@ from validphys.commondatawriter import write_commondata_to_file, write_systype_to_file KIN_NAMES = ["kin1", "kin2", "kin3"] +log = logging.getLogger(__name__) @dataclasses.dataclass(eq=False) @@ -116,7 +118,12 @@ def with_cuts(self, cuts): if cuts is None or self.protected: return self newndata = len(cuts) - newsigma = self.sigma.loc[cuts] + try: + newsigma = self.sigma.loc[cuts] + except KeyError as e: + # This will be an ugly erorr msg, but it should be scary anyway + log.error(f"Problem applying cuts to {self.metadata}") + raise e return dataclasses.replace(self, ndata=newndata, sigma=newsigma) @property diff --git a/validphys2/src/validphys/datafiles/__init__.py b/validphys2/src/validphys/datafiles/__init__.py index f80600b6cb..3a0e7dae70 100644 --- a/validphys2/src/validphys/datafiles/__init__.py +++ b/validphys2/src/validphys/datafiles/__init__.py @@ -1,5 +1,23 @@ import pathlib +from reportengine.compat import yaml path_vpdata = pathlib.Path(__file__).parent path_commondata = pathlib.Path(__file__).with_name('commondata') +path_new_commondata = pathlib.Path(__file__).with_name('new_commondata') path_theorydb = pathlib.Path(__file__).with_name('theory.db') + +# VP should not have access to this file, only to the products +_path_legacy_mapping = path_new_commondata / "dataset_names.yml" +legacy_to_new_mapping = yaml.YAML().load(_path_legacy_mapping) +new_to_legacy_mapping = {} + +for k, v in legacy_to_new_mapping.items(): + # Sanitize + if isinstance(v, str): + v = {"dataset": v} + + new_dsname = v["dataset"] + # And fill in the reverse + new_to_legacy_mapping[new_dsname] = {"dataset": k} + if "variant" in v: + new_to_legacy_mapping[new_dsname]["mapping"] = v["variant"] diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index ff8d251381..752aae69e7 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -66,6 +66,7 @@ def substitute(pr_v, cd_x): substitute("sqrt(s)", "sqrts") substitute("sqrt(s)", "sqrt_s") substitute("yQQ", "y_ttBar") + substitute("yQ", "y_t") return variables From 2a68b9b2b8175353ca081e1c40707a4171673e59 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Thu, 8 Feb 2024 16:15:32 +0100 Subject: [PATCH 14/52] add the process description to the parser --- validphys2/src/validphys/commondataparser.py | 61 ++++++++++++++++++-- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 2fc4ef6452..061b5d2018 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -85,6 +85,57 @@ "SIA": ("$z$", "$Q^2 (GeV^2)$", "$y$"), } +PROCESS_DESCRIPTION_LABEL = { + "EWJ_JRAP": "Jet Rapidity Distribution", + "EWK_RAP": "Drell-Yan Rapidity Distribution", + "EWJ_RAP": "Jet Rapidity Distribution", + "HQP_PTQ": "Heavy Quarks Production Single Quark Transverse Momentum Distribution", + "JET": "Jets Rapidity Distribution", + "HIG_RAP": "Higgs Rapidity Distribution", + "HQP_YQ": "Heavy Quarks Production Single Quark Rapidity Distribution", + "EWJ_JPT": "Jet Transverse Momentum Distribution", + "DIS": "Deep Inelastic Scattering", + "HQP_PTQQ": "Heavy Quarks Production Transverse Momentum Distribution", + "EWK_PT": "Drell-Yan Transverse Momentum Distribution", + "EWJ_PT": "Jet Transverse Momentum Distribution", + "PHT": "Photon Production", + "HQP_MQQ": "Heavy Quarks Production Mass Distribution", + "EWK_PTRAP": "Drell-Yan Transverse Momentum Distribution", + "HQP_YQQ": "Heavy Quarks Production Rapidity Distribution", + "INC": "Heavy Quarks Total Cross Section", + "EWJ_MLL": "Jet Mass Distribution", + "EWK_MLL": "Drell-Yan Mass Distribution", + "DIJET": "Dijets Invariant Mass and Rapidity Distribution", + "DYP": "Fixed-Target Drell-Yan", +} + + +def _get_ported_kinlabel(process_type): + """Get the kinematic label for ported datasets + In principle there is a one to one correspondance between the process label in the kinematic and + ``KINLABEL_LATEX``, however, there were some special cases that need to be taken into account + """ + if process_type in KINLABEL_LATEX: + return KINLABEL_LATEX[process_type] + if process_type[:3] in ("DIS", "DYP"): + return _get_ported_kinlabel(process_type[:3]) + raise KeyError(f"Label {process_type} not recognized in KINLABEL_LATEX") + + +def _get_process_description(process_type): + """Get the process description string for a given process type + Similarly to kinlabel, some special cases are taken into account. + """ + if process_type in PROCESS_DESCRIPTION_LABEL: + return PROCESS_DESCRIPTION_LABEL[process_type] + # If not, is this a DYP or DIS dataset? + if process_type[:3] in ("DIS", "DYP"): + return _get_process_description(process_type[:3]) + # Remove pieces of "_" until it is found + if len(process_type.split("_")) > 1: + return _get_process_description(process_type.rsplit("_", 1)[0]) + raise KeyError(f"Label {process_type} not found in PROCESS_DESCRIPTION_LABEL") + @Parser def ValidPath(path_str: str) -> Path: @@ -534,12 +585,7 @@ def kinlabels(self): If this is a ported dataset, rely on the process type using the legacy labels """ if self.is_ported_dataset: - proc = self.process_type - if proc[:3] == "DIS": - proc = "DIS" - if proc[:3] == "DYP": - proc = "DYP" - return KINLABEL_LATEX.get(proc, proc) + return _get_ported_kinlabel(self.process_type) return [self.kinematics.get_label(i) for i in self.kinematic_coverage] def digest_plotting_variable(self, variable): @@ -578,6 +624,9 @@ def _plotting_options_set(self): if self.plotting.experiment is None: self.plotting.experiment = self.nnpdf_metadata["experiment"] + if self.plotting.process_description is None: + self.plotting.process_description = _get_process_description(self.process_type) + ## Swap variables by the k_idx # Internally validphys takes the x/y to be "k1" "k2" or "k3" # Therefore, for the time being, swap the actual keys by k1/k2/k3 From e604c14ad36d992bc593b32491590132437140b2 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 9 Feb 2024 12:50:15 +0100 Subject: [PATCH 15/52] allow the usage of use_cuts:fromfit with new data and an old fit --- validphys2/src/validphys/commondataparser.py | 13 ++---- .../src/validphys/datafiles/__init__.py | 40 +++++++++++++------ validphys2/src/validphys/kinematics.py | 20 +++++----- validphys2/src/validphys/loader.py | 37 ++++++++++++++--- 4 files changed, 72 insertions(+), 38 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 061b5d2018..1c44124e5a 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -49,7 +49,7 @@ from reportengine.compat import yaml from validphys.coredata import KIN_NAMES, CommonData -from validphys.datafiles import new_to_legacy_mapping +from validphys.datafiles import new_to_legacy_map from validphys.plotoptions.plottingoptions import PlottingOptions, labeler_functions from validphys.utils import parse_yaml_inp @@ -818,15 +818,8 @@ def parse_commondata_new(metadata): # TODO: For the time being, fill `legacy_name` with the new name if not found legacy_name = metadata.name - if (old_info := new_to_legacy_mapping.get(metadata.name)) is not None: - # There is a mapping for this dataset, now check whether the variant matches - if metadata.applied_variant == old_info.get("variant"): - legacy_name = old_info["dataset"] - elif metadata.applied_variant is not None: - # The variants don't match, but could it be due to a "sys" choice? - # legacy systematic variants are all prefixed as ``legacy_XX`` - if metadata.applied_variant.startswith("legacy"): - legacy_name = old_info["dataset"] + if (old_name := new_to_legacy_map(metadata.name, metadata.applied_variant)) is not None: + legacy_name = old_name return CommonData( setname=metadata.name, diff --git a/validphys2/src/validphys/datafiles/__init__.py b/validphys2/src/validphys/datafiles/__init__.py index 3a0e7dae70..0dcc30bc9b 100644 --- a/validphys2/src/validphys/datafiles/__init__.py +++ b/validphys2/src/validphys/datafiles/__init__.py @@ -1,4 +1,6 @@ +from functools import lru_cache import pathlib + from reportengine.compat import yaml path_vpdata = pathlib.Path(__file__).parent @@ -9,15 +11,29 @@ # VP should not have access to this file, only to the products _path_legacy_mapping = path_new_commondata / "dataset_names.yml" legacy_to_new_mapping = yaml.YAML().load(_path_legacy_mapping) -new_to_legacy_mapping = {} - -for k, v in legacy_to_new_mapping.items(): - # Sanitize - if isinstance(v, str): - v = {"dataset": v} - - new_dsname = v["dataset"] - # And fill in the reverse - new_to_legacy_mapping[new_dsname] = {"dataset": k} - if "variant" in v: - new_to_legacy_mapping[new_dsname]["mapping"] = v["variant"] + + +@lru_cache +def new_to_legacy_map(dataset_name, variant_used): + """Loop over the dictionary and fing the right dataset""" + # It is not possible to reverse the dictionary because + # we can have 2 old dataset mapped to the same new one + + possible_match = None + for old_name, new_name in legacy_to_new_mapping.items(): + variant = None + if not isinstance(new_name, str): + variant = new_name.get("variant") + new_name = new_name["dataset"] + + if new_name == dataset_name: + if variant_used == variant: + return old_name + # Now, for legacy variants we might want to match (sys,) + # so accept anything that starts with `legacy_` + # so variant `legacy_10` will match `legacy` in the dictionary + # but if an exact match if found before, the search ends + if variant_used is not None and variant_used.startswith("legacy_"): + possible_match = old_name + + return possible_match diff --git a/validphys2/src/validphys/kinematics.py b/validphys2/src/validphys/kinematics.py index 2b4b87a4cc..f849117ce3 100644 --- a/validphys2/src/validphys/kinematics.py +++ b/validphys2/src/validphys/kinematics.py @@ -143,7 +143,10 @@ def all_commondata_grouping(all_commondata, metadata_group): records = [] for cd in all_commondata: records.append( - {'dataset': str(cd), metadata_group: getattr(plotoptions_core.get_info(cd), metadata_group)} + { + 'dataset': str(cd), + metadata_group: getattr(plotoptions_core.get_info(cd), metadata_group), + } ) df = pd.DataFrame.from_records(records, index='dataset') # sort first by grouping alphabetically and then dataset name @@ -173,18 +176,15 @@ def xq2map_with_cuts(commondata, cuts, group_name=None): masked_kitable = kintable.loc[~boolmask] xq2fitted = plotoptions_core.get_xq2map(fitted_kintable, info) xq2masked = plotoptions_core.get_xq2map(masked_kitable, info) - return XQ2Map(info.experiment, commondata, xq2fitted, xq2masked, group_name) - fitted_kintable = plotoptions_core.get_xq2map(kintable, info) - empty = (np.array([]), np.array([])) - return XQ2Map(info.experiment, commondata, fitted_kintable, empty, group_name) + else: + xq2fitted = plotoptions_core.get_xq2map(kintable, info) + xq2masked = (np.array([]), np.array([])) + + return XQ2Map(info.experiment, commondata, xq2fitted, xq2masked, group_name) dataset_inputs_by_groups_xq2map = collect( - xq2map_with_cuts, - ( - 'group_dataset_inputs_by_metadata', - 'data_input', - ), + xq2map_with_cuts, ('group_dataset_inputs_by_metadata', 'data_input') ) diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index 81cbb36441..108b136cee 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -773,12 +773,37 @@ def check_fit_cuts(self, commondata, fit): if not isinstance(fit, FitSpec): fit = self.check_fit(fit) _, fitpath = fit - p = (fitpath / 'filter') / setname / ('FKMASK_' + setname + '.dat') - if not p.parent.exists(): - raise CutsNotFound(f"Bad filter configuration. Could not find {p.parent}") - if not p.exists(): - p = None - return Cuts(commondata, p) + + cuts_path = (fitpath / 'filter') / setname / ('FKMASK_' + setname + '.dat') + + # From 4.0.8 we changed to a new commondata format + # In order to utilize cuts from old fits in new fits it is necessary to translate the names + # There are two translation that might be necessary: + # 1. New names in the runcard, old cuts in the 'fromfit' fit + # 2. Old names in the runcard, new cuts in the 'fromfit' fit + # In order to enforce the usage of the new names, only (1.) will be implemented + + if not cuts_path.parent.exists(): + if commondata.legacy: + raise CutsNotFound(f"Bad filter configuration. Could not find {cuts_path.parent}") + + # Else, this is a new dataset, is there a "legacy_name" different from the new name? + old_name = commondata.load().legacy_name + if old_name == setname: + raise CutsNotFound(f"Bad filter configuration. Could not find {cuts_path.parent}") + + # Then, check whether there are cuts with the corresponding old name + old_dir = cuts_path.parent.with_name(old_name) + if old_dir.exists(): + cuts_path = old_dir / f"FKMASK_{old_name}.dat" + else: + raise CutsNotFound( + f"Bad filter configuration. Could not find {cuts_path.parent} or {old_dir}" + ) + + if not cuts_path.exists(): + cuts_path = None + return Cuts(commondata, cuts_path) def check_internal_cuts(self, commondata, rules): return InternalCutsWrapper(commondata, rules) From ed65895d52e328c085dce7050f3093afa205fd1a Mon Sep 17 00:00:00 2001 From: juacrumar Date: Mon, 12 Feb 2024 09:46:20 +0100 Subject: [PATCH 16/52] had a __hash__ to theory metadata ; keep the operation coming from the metadata --- validphys2/src/validphys/commondataparser.py | 22 +++++++++++++++---- validphys2/src/validphys/core.py | 23 +++++++++++++++----- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index 1c44124e5a..cc7ba951a5 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -198,6 +198,8 @@ class TheoryMeta: useful to create "gaps" so that the fktables and the respective experimental data are ordered in the same way (for instance, when some points are missing from a grid) + This class is inmutable, what is read from the commondata metadata should be considered final + Example ------- >>> from validphys.commondataparser import TheoryMeta @@ -219,13 +221,15 @@ class TheoryMeta: """ - FK_tables: list[list] + FK_tables: list[tuple] operation: ValidOperation = "NULL" conversion_factor: float = 1.0 - comment: Optional[str] = None shifts: Optional[dict] = None + + comment: Optional[str] = None + + # The following options are transitional so that the old yamldb files can be used 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 @@ -256,6 +260,16 @@ def parser(cls, yaml_file): meta["FK_tables"] = meta.pop("operands") return parse_input(meta, cls) + def __hash__(self): + """Included in the hash any piece of information that can change the + definition of the theory for a given dataset for functions using a cache""" + to_be_hashed = [self.operation, self.conversion_factor] + to_be_hashed.append(tuple([tuple(i) for i in self.FK_tables])) + if self.shifts is not None: + to_be_hashed.append(tuple(self.shifts.keys())) + to_be_hashed.append(tuple(self.shifts.values())) + return hash(tuple(to_be_hashed)) + ## Theory end @@ -709,7 +723,7 @@ def select_observable(self, obs_name_raw): observable._parent = self observable.check() return observable - return ValueError(f"The selected observable {obs_name} does not exist in {self.setname}") + raise ValueError(f"The selected observable {obs_name} does not exist in {self.setname}") ### diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index f262dc21ec..9307d57141 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -254,6 +254,12 @@ def metadata(self): self._metadata = peek_commondata_metadata(self.datafile) return self._metadata + @property + def theory_metadata(self): + if self.legacy: + return None + return self.metadata.theory + def __str__(self): return self.name @@ -426,10 +432,15 @@ def __init__(self, *, name, commondata, fkspecs, thspec, cuts, frac=1, op=None, self.cuts = cuts self.frac = frac - # Do this way (instead of setting op='NULL' in the signature) - # so we don't have to know the default everywhere + # If OP is None, check whether the commondata is setting an operation + # TODO: eventually the operation will _always_ be set from the commondata, but for legacy + # compatibility it will be also controllable as an input argument if op is None: - op = 'NULL' + if commondata.theory_metadata is None: + op = 'NULL' + else: + op = commondata.theory_metadata.operation + self.op = op self.weight = weight @@ -494,10 +505,10 @@ def __init__(self, fkpath, cfactors, metadata=None): self.fkpath = fkpath self.metadata = metadata - # For new theories, add also the target_dataset so that we don't reuse fktables - # Ideally this won't be necessary in the future and we will be able to reutilize fktables. + # For non-legacy theory, add the metadata since it defines how the theory is to be loaded + # and thus, it should also define the hash of the class if not self.legacy: - super().__init__(fkpath, cfactors, self.metadata.target_dataset) + super().__init__(fkpath, cfactors, self.metadata) else: super().__init__(fkpath, cfactors) From 7a686505f3bf0ff75224a32a023ce8d24b02170b Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 13 Feb 2024 12:20:55 +0100 Subject: [PATCH 17/52] update regression tests to use new commondata ; make sure pseudodata generation is reproducible typo, - -> _ --- extra_tests/regression_fits/central.yml | 14 +++++++------- extra_tests/regression_fits/diagonal.yml | 12 ++++++------ .../regression_fits/feature_scaling.yml | 12 ++++++------ extra_tests/regression_fits/flavour.yml | 10 +++++----- extra_tests/regression_fits/no_lagrange.yml | 8 ++++---- extra_tests/regression_fits/no_msr.yml | 14 +++++++------- extra_tests/regression_fits/no_sumrules.yml | 14 +++++++------- extra_tests/regression_fits/no_vsr.yml | 14 +++++++------- extra_tests/regression_fits/normal_fit.yml | 10 +++++----- .../regression_fits/trainable_prepro.yml | 14 +++++++------- validphys2/src/validphys/pseudodata.py | 19 +++++++++++++++---- 11 files changed, 76 insertions(+), 65 deletions(-) diff --git a/extra_tests/regression_fits/central.yml b/extra_tests/regression_fits/central.yml index c24c5eb442..f077a53187 100644 --- a/extra_tests/regression_fits/central.yml +++ b/extra_tests/regression_fits/central.yml @@ -12,10 +12,10 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: @@ -69,12 +69,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/diagonal.yml b/extra_tests/regression_fits/diagonal.yml index 84d8e17770..e6780c2ebf 100644 --- a/extra_tests/regression_fits/diagonal.yml +++ b/extra_tests/regression_fits/diagonal.yml @@ -12,9 +12,9 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} ############################################################ datacuts: @@ -69,12 +69,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/feature_scaling.yml b/extra_tests/regression_fits/feature_scaling.yml index ac8b404cd3..225a4c9034 100644 --- a/extra_tests/regression_fits/feature_scaling.yml +++ b/extra_tests/regression_fits/feature_scaling.yml @@ -12,9 +12,9 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: @@ -68,12 +68,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/flavour.yml b/extra_tests/regression_fits/flavour.yml index 1f38ba2c8f..d08c5a76a8 100644 --- a/extra_tests/regression_fits/flavour.yml +++ b/extra_tests/regression_fits/flavour.yml @@ -12,8 +12,8 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} ############################################################ datacuts: @@ -67,12 +67,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/no_lagrange.yml b/extra_tests/regression_fits/no_lagrange.yml index e081869777..eee1ee2b2b 100644 --- a/extra_tests/regression_fits/no_lagrange.yml +++ b/extra_tests/regression_fits/no_lagrange.yml @@ -12,10 +12,10 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: diff --git a/extra_tests/regression_fits/no_msr.yml b/extra_tests/regression_fits/no_msr.yml index 0ca126c5c5..206df8ea20 100644 --- a/extra_tests/regression_fits/no_msr.yml +++ b/extra_tests/regression_fits/no_msr.yml @@ -12,10 +12,10 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: @@ -70,12 +70,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/no_sumrules.yml b/extra_tests/regression_fits/no_sumrules.yml index 25ef4868e4..2d872e617b 100644 --- a/extra_tests/regression_fits/no_sumrules.yml +++ b/extra_tests/regression_fits/no_sumrules.yml @@ -12,10 +12,10 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: @@ -70,12 +70,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/no_vsr.yml b/extra_tests/regression_fits/no_vsr.yml index 2aa16e5994..4f2d05b468 100644 --- a/extra_tests/regression_fits/no_vsr.yml +++ b/extra_tests/regression_fits/no_vsr.yml @@ -12,10 +12,10 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: @@ -70,12 +70,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/normal_fit.yml b/extra_tests/regression_fits/normal_fit.yml index e8978fb876..0f02248fc8 100644 --- a/extra_tests/regression_fits/normal_fit.yml +++ b/extra_tests/regression_fits/normal_fit.yml @@ -6,8 +6,8 @@ description: n3fit regression test, normal fit without initial weights # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} ############################################################ datacuts: @@ -60,12 +60,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/extra_tests/regression_fits/trainable_prepro.yml b/extra_tests/regression_fits/trainable_prepro.yml index 155d6f5a98..2ac0aec2fb 100644 --- a/extra_tests/regression_fits/trainable_prepro.yml +++ b/extra_tests/regression_fits/trainable_prepro.yml @@ -12,10 +12,10 @@ description: n3fit regression test # ewk: apply ewk k-factors # sys: systematics treatment (see systypes) dataset_inputs: -- { dataset: NMC, frac: 0.5 } -- { dataset: SLACP, frac: 0.5} -- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } -- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + - {dataset: NMC_NC_NOTFIXED_P_EM-SIGMARED, frac: 0.5, variant: legacy} + - {dataset: SLAC_NC_NOTFIXED_P_EM-F2, frac: 0.5, variant: legacy} + - {dataset: CMS_Z0_8TEV_PT-Y, frac: 0.5, cfac: [QCD], variant: legacy_10} + - {dataset: ATLAS_TTBAR_8TEV_TOT_X-SEC, frac: 1.0, cfac: [QCD], variant: legacy} ############################################################ datacuts: @@ -69,12 +69,12 @@ fitting: ############################################################ positivity: posdatasets: - - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier - - { dataset: POSDYS, maxlambda: 1e5 } + - {dataset: NNPDF_POS_5GEV_F2U, maxlambda: 1e6} + - {dataset: NNPDF_POS_5GEV_DYS, maxlambda: 1e5} integrability: integdatasets: - - {dataset: INTEGXT8, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_3GEV_XT8, maxlambda: 1e2} ############################################################ debug: true diff --git a/validphys2/src/validphys/pseudodata.py b/validphys2/src/validphys/pseudodata.py index 9c7d21244a..c79dc0409a 100644 --- a/validphys2/src/validphys/pseudodata.py +++ b/validphys2/src/validphys/pseudodata.py @@ -16,6 +16,7 @@ dataset_inputs_covmat_from_systematics, sqrt_covmat, ) +from validphys.datafiles import new_to_legacy_map FILE_PREFIX = "datacuts_theory_fitting_" @@ -177,9 +178,19 @@ def make_replica( return np.concatenate( [cd.central_values for cd in groups_dataset_inputs_loaded_cd_with_cuts] ) - # Seed the numpy RNG with the seed and the name of the datasets in this run - name_salt = "-".join(i.setname for i in groups_dataset_inputs_loaded_cd_with_cuts) + + # TODO: to be simplified after the reader is merged, together with an update of the regression tests + # this is necessary to reproduce exactly the results due to the replicas being generated with a hash + # Only when the sets are legacy (or coming from a legacy runcard) this shall be used + names_for_salt = [] + for loaded_cd in groups_dataset_inputs_loaded_cd_with_cuts: + if loaded_cd.legacy: + names_for_salt.append(loaded_cd.setname) + else: + names_for_salt.append(loaded_cd.legacy_name) + name_salt = "-".join(names_for_salt) + name_seed = int(hashlib.sha256(name_salt.encode()).hexdigest(), 16) % 10**8 rng = np.random.default_rng(seed=replica_mcseed + name_seed) # construct covmat @@ -381,7 +392,7 @@ def make_level1_data(data, level0_commondata_wc, filterseed, data_index, sep_mul indexed_level1_data = indexed_make_replica(data_index, level1_data) - dataset_order = {cd.setname: i for i, cd in enumerate(level0_commondata_wc)} + dataset_order = {cd.setname: i for i, cd in enumerate(level0_commondata_wc)} # ===== create commondata instances with central values given by pseudo_data =====# level1_commondata_dict = {c.setname: c for c in level0_commondata_wc} @@ -393,7 +404,7 @@ def make_level1_data(data, level0_commondata_wc, filterseed, data_index, sep_mul ) # sort back so as to mantain same order as in level0_commondata_wc level1_commondata_instances_wc.sort(key=lambda x: dataset_order[x.setname]) - + return level1_commondata_instances_wc From 13a4155d1967293507d09427e0365d3ee097f1cd Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 13 Feb 2024 16:29:54 +0100 Subject: [PATCH 18/52] load new data when available even if old name used miscelaneous update for oldcommondata compatibility --- validphys2/src/validphys/commondataparser.py | 5 +- validphys2/src/validphys/config.py | 68 ++++++-- validphys2/src/validphys/core.py | 37 +++- .../src/validphys/datafiles/__init__.py | 27 +++ validphys2/src/validphys/loader.py | 158 ++++++++++-------- validphys2/src/validphys/tests/test_loader.py | 7 +- 6 files changed, 208 insertions(+), 94 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index cc7ba951a5..fe1f48ae77 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -590,7 +590,8 @@ def name(self): @property def is_ported_dataset(self): """Return True if this is an automatically ported dataset that has not been updated""" - return self.ported_from is not None and self.applied_variant.startswith("legacy") + is_legacy = self.applied_variant is not None and self.applied_variant.startswith("legacy") + return self.ported_from is not None and is_legacy @property def kinlabels(self): @@ -849,7 +850,7 @@ def parse_commondata_new(metadata): ) -### +########################################### def load_commondata(spec): diff --git a/validphys2/src/validphys/config.py b/validphys2/src/validphys/config.py index 61f17b84ef..50326dad7a 100644 --- a/validphys2/src/validphys/config.py +++ b/validphys2/src/validphys/config.py @@ -26,6 +26,7 @@ SimilarCuts, ThCovMatSpec, ) +from validphys.datafiles import legacy_to_new_map from validphys.fitdata import fitted_replica_indexes, num_fitted_replicas from validphys.gridvalues import LUMI_CHANNELS from validphys.loader import ( @@ -364,14 +365,32 @@ def produce_fitpdfandbasis(self, fitpdf, basisfromfit): @element_of("dataset_inputs") def parse_dataset_input(self, dataset: Mapping): - """The mapping that corresponds to the dataset specifications in the - fit files""" - known_keys = {"dataset", "sys", "cfac", "frac", "weight", "custom_group", "variant"} + """The mapping that corresponds to the dataset specifications in the fit files + + This mapping is such that + dataset: str + name of the dataset to load + variant: str + variant of the dataset to load + cfac: list + list of cfactors to apply + frac: float + fraction of the data to consider for training purposes + weight: float + extra weight to give to the dataset + custom_group: str + custom group to apply to the dataset + + Note that the `sys` key is deprecated and allowed only for old-format dataset. + + Old-format commondata will be translated to the new version in this function. + """ + accepted_keys = {"dataset", "sys", "cfac", "frac", "weight", "custom_group", "variant"} try: name = dataset["dataset"] if not isinstance(name, str): raise ConfigError(f"'dataset' must be a string, not {type(name)}") - # Check whether this is an integrability or positivity dataset (in the only way we know?) + #! Check whether this is an integrability or positivity dataset (in the only way we know?) if name.startswith(("INTEG", "POS")): if name.startswith("INTEG"): raise ConfigError("Please, use `integdataset` for integrability") @@ -380,26 +399,39 @@ def parse_dataset_input(self, dataset: Mapping): except KeyError: raise ConfigError("'dataset' must be a mapping with " "'dataset' and 'sysnum'") - sysnum = dataset.get("sys") + # Ensure that we can actually read the `dataset_input` before failure + kdiff = dataset.keys() - accepted_keys + for k in kdiff: + # Abuse ConfigError to get the suggestions. + log.warning( + ConfigError(f"Key '{k}' in dataset_input not known ({name}).", k, accepted_keys) + ) + cfac = dataset.get("cfac", tuple()) + custom_group = str(dataset.get("custom_group", "unset")) + frac = dataset.get("frac", 1) - variant = dataset.get("variant", None) - if not variant: - variant = None if not isinstance(frac, numbers.Real): - raise ConfigError(f"'frac' must be a number, not '{frac}'") + raise ConfigError(f"'frac' must be a number, not '{frac}' ({name})") if frac < 0 or frac > 1: - raise ConfigError(f"'frac' must be between 0 and 1 not '{frac}'") + raise ConfigError(f"'frac' must be between 0 and 1 not '{frac}' ({name})") + weight = dataset.get("weight", 1) if not isinstance(weight, numbers.Real): - raise ConfigError(f"'weight' must be a number, not '{weight}'") + raise ConfigError(f"'weight' must be a number, not '{weight}' ({name})") if weight < 0: - raise ConfigError(f"'weight' must be greater than zero not '{weight}'") - custom_group = str(dataset.get("custom_group", "unset")) - kdiff = dataset.keys() - known_keys - for k in kdiff: - # Abuse ConfigError to get the suggestions. - log.warning(ConfigError(f"Key '{k}' in dataset_input not known.", k, known_keys)) + raise ConfigError(f"'weight' must be greater than zero not '{weight}' ({name})") + + variant = dataset.get("variant") + sysnum = dataset.get("sys") + + if variant is not None and sysnum is not None: + raise ConfigError(f"The 'variant' and 'sys' keys cannot be used together ({name})") + + if variant is None: + # If a variant is not given this could be an old commondata, try to translate it! + name, variant = legacy_to_new_map(name, sysnum) + return DataSetInput( name=name, sys=sysnum, @@ -977,6 +1009,8 @@ def _parse_lagrange_multiplier(self, kind, theoryid, setdict): lambda_key = "poslambda" try: name = setdict["dataset"] + # Swap a possibly old name with the new one + name, _ = legacy_to_new_map(name, None) maxlambda = float(setdict[lambda_key]) except KeyError as e: raise ConfigError(bad_msg, setdict.keys(), e.args[0]) from e diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index 9307d57141..41581cc17c 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -212,9 +212,38 @@ def get_members(self): class CommonDataSpec(TupleComp): - def __init__(self, datafile, sysfile, plotfiles, name=None, metadata=None, legacy=True): + """Holds all the information necessary to load a commondata file and provides + methods to easily access them + + Arguments + --------- + name: str + name of the commondata + metadata: ObservableMetaData + instance of ObservableMetaData holding all information about the dataset + legacy: bool + whether this is an old or new format metadata file + + The ``datafile``, ``sysfile`` and `plotfiles`` arguments are deprecated + and only to be used with ``legacy=True`` + """ + + def __init__(self, name, metadata, legacy=False, datafile=None, sysfile=None, plotfiles=None): self.legacy = legacy self._metadata = metadata + + # Some checks + if legacy: + if datafile is None or sysfile is None or plotfiles is None: + raise ValueError( + "Legacy CommonDataSpec need datafile, sysfile and plotfiles arguments" + ) + else: + if sysfile is not None: + raise ValueError("New CommonDataSpec don't need sysfile input") + if plotfiles is not None: + raise ValueError("New CommonDataSpec don't need plotfile input") + self.datafile = datafile self.sysfile = sysfile if legacy: @@ -238,11 +267,7 @@ def nsys(self): @property def ndata(self): - if self.legacy: - return self.metadata.ndata - else: - cd = self.load() - return cd.ndata + return self.metadata.ndata @property def process_type(self): diff --git a/validphys2/src/validphys/datafiles/__init__.py b/validphys2/src/validphys/datafiles/__init__.py index 0dcc30bc9b..f17938f1b4 100644 --- a/validphys2/src/validphys/datafiles/__init__.py +++ b/validphys2/src/validphys/datafiles/__init__.py @@ -13,6 +13,33 @@ legacy_to_new_mapping = yaml.YAML().load(_path_legacy_mapping) +@lru_cache +def legacy_to_new_map(dataset_name, sys=None): + """Find the new dataset name and variant corresponding to an old dataset + and systematics choice""" + if dataset_name not in legacy_to_new_mapping: + return dataset_name, None + + new_name = legacy_to_new_mapping[dataset_name] + if isinstance(new_name, str): + if sys is not None: + raise KeyError( + f"I can not translate the combination of {dataset_name} and sys: {sys}. Please report this." + ) + return new_name, None + + variant = new_name.get("variant") + new_name = new_name["dataset"] + if sys is not None: + if variant is None: + raise KeyError( + f"I can not translate the combination of {dataset_name} and sys: {sys}. Please report this." + ) + variant += f"_{sys}" + + return new_name, variant + + @lru_cache def new_to_legacy_map(dataset_name, variant_used): """Loop over the dictionary and fing the right dataset""" diff --git a/validphys2/src/validphys/loader.py b/validphys2/src/validphys/loader.py index 108b136cee..020c178296 100644 --- a/validphys2/src/validphys/loader.py +++ b/validphys2/src/validphys/loader.py @@ -40,7 +40,7 @@ TheoryIDSpec, peek_commondata_metadata, ) -from validphys.datafiles import path_vpdata +from validphys.datafiles import path_vpdata, legacy_to_new_mapping from validphys.utils import tempfile_cleaner log = logging.getLogger(__name__) @@ -331,15 +331,29 @@ def available_theories(self): @property @functools.lru_cache() - def available_datasets(self): + def _available_old_datasets(self): + """Provide all available datasets + At the moment this means cominbing the new and olf format datasets + """ data_str = "DATA_" + old_commondata_folder = self.commondata_folder.with_name("commondata") # We filter out the positivity sets here return { file.stem[len(data_str) :] - for file in self.commondata_folder.glob(f'{data_str}*.dat') + for file in old_commondata_folder.glob(f'{data_str}*.dat') if not file.stem.startswith((f"{data_str}POS", f"{data_str}INTEG")) } + @property + @functools.lru_cache() + def available_datasets(self): + """Provide all available datasets. + At the moment this only returns old datasets for which we have a translation available + """ + skip = ("POS", "INTEG") + old_datasets = [i for i in legacy_to_new_mapping.keys() if not i.startswith(skip)] + return set(old_datasets) + @property @functools.lru_cache() def available_pdfs(self): @@ -347,12 +361,28 @@ def available_pdfs(self): @property def commondata_folder(self): - return self.datapath / 'commondata' + return self.datapath / 'new_commondata' def check_commondata( - self, setname, sysnum=None, use_fitcommondata=False, fit=None, variant=None + self, setname, sysnum=None, use_fitcommondata=False, fit=None, variant=None, force_old_format=False ): + """Prepare the commondata files to be loaded. + A commondata is defined by its name (``setname``) and the variant (``variant``) + + At the moment both old-format and new-format commondata can be utilized and loaded + however old-format commondata are deprecated and will be removed in future relases. + + The function ``parse_dataset_input`` in ``config.py`` translates all known old commondata + into their new names (and variants), + therefore this function should only receive requestes for new format. + + Any actions trying to requests an old-format commondata from this function will log + an error message. This error message will eventually become an actual error. + """ + force_old_format = False + datafile = None if use_fitcommondata: + # TODO: this now depends on how old is the fit... if not fit: raise LoadFailedError("Must specify a fit when setting use_fitcommondata") datafilefolder = (fit.path / 'filter') / setname @@ -381,39 +411,41 @@ def check_commondata( log.info(f"Upgrading filtered commondata. Writing {newpath}") rebuild_commondata_without_cuts(oldpath, cuts, basedata_path, newpath) datafile = newpath - else: - datafile = self.commondata_folder / f'DATA_{setname}.dat' + force_old_format = True - if not datafile.exists(): - # TODO: if not old data found, maybe thi sis a new data - # The new data goes into folder inside `self.commondata_folder` - # this usually corresponds to /datafiles/commondata + # Get data folder and observable name and check for existence + try: setfolder, observable_name = setname.rsplit("_", 1) + metadata_path = self.commondata_folder / setfolder / "metadata.yaml" + force_old_format = not metadata_path.exists() + except ValueError: + force_old_format = True + metadata_path = None - # TODO - if not self.commondata_folder.with_name("new_commondata").exists(): - raise DataNotFoundError("new_commondata folder missing in this branch!") - - metadata_file = ( - self.commondata_folder.with_name("new_commondata") / setfolder / "metadata.yaml" - ) + if not force_old_format: + # Get the instance of ObservableMetaData + metadata = parse_new_metadata(metadata_path, observable_name, variant=variant) + return CommonDataSpec(setname, metadata) - # If the metadata file doesn't exist either, then error out - if not metadata_file.exists(): - raise DataNotFoundError( - f"""The CommonData set {setname} could not be found -as old ({datafile}) -or new ({metadata_file})""" - ) + # Eventually the error log will be replaced by the commented execption + log.error( + f"Trying to read {setname} in the old format. Note that this is deprecated and will be removed in future releases" + ) + # raise DataNotFoundError(f"No metadata found for {setname}: {metadata_path}") - # Get the instance of ObservableMetaData - metadata = parse_new_metadata(metadata_file, observable_name, variant=variant) + # Everything below is deprecated and will be removed in future releases + old_commondata_folder = self.commondata_folder.with_name("commondata") + if datafile is None: + datafile = old_commondata_folder / f"DATA_{setname}.dat" - return CommonDataSpec(None, None, None, name=setname, metadata=metadata, legacy=False) + if not datafile.exists(): + raise DataNotFoundError( + f"No .dat file found for {setname} and not new data translation found" + ) if sysnum is None: sysnum = 'DEFAULT' - sysfile = self.commondata_folder / 'systypes' / ('SYSTYPE_%s_%s.dat' % (setname, sysnum)) + sysfile = old_commondata_folder / "systypes" / f"SYSTYPE_{setname}_{sysnum}.dat" if not sysfile.exists(): raise SysNotFoundError( @@ -424,13 +456,13 @@ def check_commondata( plotfiles = [] metadata = peek_commondata_metadata(datafile) - process_plotting_root = self.commondata_folder / f'PLOTTINGTYPE_{metadata.process_type}' + process_plotting_root = old_commondata_folder / f'PLOTTINGTYPE_{metadata.process_type}' type_plotting = ( process_plotting_root.with_suffix('.yml'), process_plotting_root.with_suffix('.yaml'), ) - data_plotting_root = self.commondata_folder / f'PLOTTING_{setname}' + data_plotting_root = old_commondata_folder / f'PLOTTING_{setname}' data_plotting = ( data_plotting_root.with_suffix('.yml'), @@ -446,7 +478,10 @@ def check_commondata( f"The name found in the CommonData file, {metadata.name}, did " f"not match the dataset name, {setname}." ) - return CommonDataSpec(datafile, sysfile, plotfiles, name=setname, metadata=metadata) + + return CommonDataSpec( + setname, metadata, legacy=True, datafile=datafile, sysfile=sysfile, plotfiles=plotfiles + ) @functools.lru_cache() def check_theoryID(self, theoryID): @@ -509,22 +544,6 @@ def check_fk_from_theory_metadata(self, theory_metadata, theoryID, cfac=None): fkspecs = [FKTableSpec(i, c, theory_metadata) for i, c in zip(fklist, cfactors)] return fkspecs, theory_metadata.operation - def check_fkyaml(self, name, theoryID, cfac): - """Load a pineappl fktable in the old commondata format - Receives a yaml file describing the fktables necessary for a given observable - the theory ID and the corresponding cfactors. - The cfactors should correspond directly to the fktables, the "compound folder" - is not supported for pineappl theories. As such, the name of the cfactor is expected to be - CF_{cfactor_name}_{fktable_name} - """ - theory = self.check_theoryID(theoryID) - if (theory.path / "compound").exists(): - raise LoadFailedError(f"New theories (id=${theoryID}) do not accept compound files") - - fkpath = (theory.yamldb_path / name).with_suffix(".yaml") - theory_metadata, _ = pineparser.get_yaml_information(fkpath, theory.path) - return self.check_fk_from_theory_metadata(theory_metadata, theoryID, cfac) - def check_compound(self, theoryID, setname, cfac): thid, theopath = self.check_theoryID(theoryID) compound_spec_path = theopath / 'compound' / ('FK_%s-COMPOUND.dat' % setname) @@ -575,10 +594,7 @@ def _check_lagrange_multiplier_set(self, theoryID, setname): cd = self.check_commondata(setname, 'DEFAULT') th = self.check_theoryID(theoryID) if cd.legacy: - if th.is_pineappl(): - fk, _ = self.check_fkyaml(setname, theoryID, []) - else: - fk = self.check_fktable(theoryID, setname, []) + fk = self.check_fktable(theoryID, setname, []) else: fk, _ = self.check_fk_from_theory_metadata(cd.metadata.theory, theoryID) return cd, fk, th @@ -683,25 +699,33 @@ def check_dataset( if commondata.legacy: if theoryid.is_pineappl(): - # If it is a pineappl theory, use the pineappl reader - fkspec, op = self.check_fkyaml(name, theoryno, cfac) + raise LoaderError( + f"Trying to use a new theory with an old commondata format, surely it must be a mistake: {name}" + ) + + # Old-format commondata that we haven't been able to translate + # allows only for the usage of only old-format theories + try: + fkspec, op = self.check_compound(theoryno, name, cfac) + except CompoundNotFound: + fkspec = self.check_fktable(theoryno, name, cfac) + op = None + else: + if theoryid.is_pineappl(): + if (thmeta := commondata.metadata.theory) is None: + # Regardless of the type of theory, request the existence of the field + raise TheoryMetadataNotFound(f"No theory metadata found for {name}") + fkspec, op = self.check_fk_from_theory_metadata(thmeta, theoryno, cfac) else: + # Old theories can only be used with datasets that have a corresponding + # old name to map to, and so we need to be able to load the cd at this point + legacy_name = commondata.load().legacy_name + # This might be slow, if it becomes a problem, the map function can be used instead try: - fkspec, op = self.check_compound(theoryno, name, cfac) + fkspec, op = self.check_compound(theoryno, legacy_name, cfac) except CompoundNotFound: - fkspec = self.check_fktable(theoryno, name, cfac) + fkspec = self.check_fktable(theoryno, legacy_name, cfac) op = None - else: - # New commondata files work _only_ with pineappl theory - if not theoryid.is_pineappl(): - raise ValueError( - f"New commondata files accept only pineappl theories (used:{theoryid.id})" - ) - - if (thmeta := commondata.metadata.theory) is None: - raise TheoryMetadataNotFound(f"No theory metadata found for {name}") - - fkspec, op = self.check_fk_from_theory_metadata(thmeta, theoryno, cfac) # Note this is simply for convenience when scripting. The config will # construct the actual Cuts object by itself diff --git a/validphys2/src/validphys/tests/test_loader.py b/validphys2/src/validphys/tests/test_loader.py index 1ad02ad46a..5979c3336a 100644 --- a/validphys2/src/validphys/tests/test_loader.py +++ b/validphys2/src/validphys/tests/test_loader.py @@ -14,6 +14,7 @@ import pytest from validphys.core import Cuts, CommonDataSpec +from validphys.datafiles import legacy_to_new_map from validphys.loader import FallbackLoader, FitNotFound, rebuild_commondata_without_cuts, NNPDF_DIR from validphys.plotoptions.core import kitable, get_info from validphys.tests.conftest import FIT, FIT_3REPLICAS, THEORYID_NEW @@ -33,7 +34,9 @@ def load(self): @composite def commondata_and_cuts(draw): - cd = l.check_commondata(draw(sampled_from(dss))) + old_name = draw(sampled_from(dss)) + # Now translate such dataset to the new format + cd = l.check_commondata(old_name, force_old_format=True) ndata = cd.metadata.ndata # Get a cut mask with at least one selected datapoint masks = sets(sampled_from(range(ndata)), min_size=1) @@ -61,7 +64,7 @@ def test_rebuild_commondata_without_cuts(tmp_path_factory, arg): with_cuts = tmp / f"DATA_{cd.name}.dat" newpath = tmp / "commondata.dat" rebuild_commondata_without_cuts(with_cuts, cutspec, cd.datafile, newpath) - newcd = CommonDataSpec(newpath, cd.sysfile, cd.plotfiles) + newcd = CommonDataSpec(cd.name, None, legacy=True, datafile=newpath, sysfile=cd.sysfile, plotfiles=cd.plotfiles) # Note this one is without cuts t1 = kitable(cd, get_info(cd)) t2 = kitable(newcd, get_info(newcd)) From 4cc602c476c43c5e5b9a1e9e5d69e905adea07b3 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Tue, 13 Feb 2024 20:28:39 +0100 Subject: [PATCH 19/52] allow using pseudodata generated with old fits skip the names in the comparison of frames ; only vp-rebuild-data and loading fit commondata missing --- validphys2/src/validphys/commondataparser.py | 3 ++- validphys2/src/validphys/core.py | 2 +- validphys2/src/validphys/pseudodata.py | 17 ++++++++++++-- .../tests/baseline/test_dataspecschi2.png | Bin 23215 -> 38558 bytes .../tests/baseline/test_plot_obscorrs.png | Bin 272184 -> 284105 bytes validphys2/src/validphys/tests/conftest.py | 2 +- .../src/validphys/tests/test_pseudodata.py | 18 ++++---------- .../src/validphys/tests/test_pyfkdata.py | 20 ++++++++++------ .../src/validphys/tests/test_regressions.py | 22 +++++++++++++++++- 9 files changed, 58 insertions(+), 26 deletions(-) diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index fe1f48ae77..e53567920f 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -36,7 +36,7 @@ :py:class:`validphys.coredata.CommonData` object. """ import dataclasses -from functools import cached_property +from functools import cached_property, lru_cache import logging from operator import attrgetter from pathlib import Path @@ -853,6 +853,7 @@ def parse_commondata_new(metadata): ########################################### +@lru_cache def load_commondata(spec): """ Load the data corresponding to a CommonDataSpec object. diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index 41581cc17c..88f88026f0 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -251,7 +251,7 @@ def __init__(self, name, metadata, legacy=False, datafile=None, sysfile=None, pl super().__init__(datafile, sysfile, self.plotfiles) else: self.plotfiles = False - super().__init__(name) + super().__init__(name, self.metadata.applied_variant) @property def name(self): diff --git a/validphys2/src/validphys/pseudodata.py b/validphys2/src/validphys/pseudodata.py index c79dc0409a..22ed5e253d 100644 --- a/validphys2/src/validphys/pseudodata.py +++ b/validphys2/src/validphys/pseudodata.py @@ -16,7 +16,7 @@ dataset_inputs_covmat_from_systematics, sqrt_covmat, ) -from validphys.datafiles import new_to_legacy_map +from validphys.datafiles import legacy_to_new_map FILE_PREFIX = "datacuts_theory_fitting_" @@ -102,8 +102,21 @@ def read_replica_pseudodata(fit, context_index, replica): tr["type"], val["type"] = "training", "validation" pseudodata = pd.concat((tr, val)) - pseudodata.sort_index(level=range(1, 3), inplace=True) + # In order for this function to work also with old fit, it is necessary to remap the names + # being read (since the names in the context have already been remapped) + # The following checks whether a given name is in both the context and the fit, and if not + # tries to get it from the old_to_new mapping. + mapping = {} + context_datasets = context_index.get_level_values("dataset").unique() + for dsname in pseudodata.index.get_level_values("dataset").unique(): + if dsname not in context_datasets: + new_name, _ = legacy_to_new_map(dsname) + mapping[dsname] = new_name + + pseudodata.rename(mapping, level=1, inplace=True) + + pseudodata.sort_index(level=range(1, 3), inplace=True) pseudodata.index = sorted_index tr = pseudodata[pseudodata["type"] == "training"] diff --git a/validphys2/src/validphys/tests/baseline/test_dataspecschi2.png b/validphys2/src/validphys/tests/baseline/test_dataspecschi2.png index 103835fd4ddd8938a0b4be7bac5ed91b1936dd14..fe8421341e360ce77b69018dca7e5cb0cec3b3fd 100644 GIT binary patch literal 38558 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 literal 23215 zcmeHvXHb<{wB?7G6Kxw%R4{-_5ZYE0kYvOQEjb7h%nC@(NK#vEBYG83i7H42MUV_; zR0ISrAd*3Z3j&gq%&blKyqX{Hy{Vb0nqS@3U3RJ5`+eu^v-jF-uXQeJs;kVIDKL{^ zm^rLHJGB{xcLn}iJbfyDXQScSDEuPpxND!Ij?FPgmxK04nY{-cZBN=bo-{wS!uhDZ zgSn0MMoDSO4H7F(I6B%o$Vo|A{l{OBw6Q-f_32O9W`$I{G7(dyDMZ@1pajow{NRG4bV9 z!FS(D1nURp_^Fj1s#ARuUHtn`6CJx`AT(xQyC;OC(Rb7tB_@6D=IS0e5H?pxF)n_8>iZ-Kt51)fr*~Xgva#>u4!(E!`D(etHC+pS{q=rL zrb~NfSB}n;V+G019Y*KQpVv1poK-2s)Eh`J&z5{G3bnbqd~3Pto;{BQy+`a~@855{ zVs&l#)?*4I-(UJ4HPpATh-q$bw`9fi6?He|#byj;}Ubtw{F+ASe zL03b=J5Id?TlTZ#3{2f#54yU$XE==G&C;&hR2ijM_=&u;D2ws)3k+=c$cl=3oALFo zWst+j=MaTcg|5MkjfY}gx@!G1Gc!|c>T*WMs>f4$IPqd)eXG$lz|{q7a4VPOq0tchG3>Y+Vj#*B>N&P=Bor;6xPKRYc-!dVfChEI-N4cCc09dDL9 zcEwXr(PQ7-3p+Ahy2c7hIg&?m8K3vle_>?!GHVhVUS4RA2r$)FRlRiR(4oGe_C(8P zK0FpxPvdVaxhA9}$+D=;8Z->$!}&ON>>+-~R8+Yz#Z&J`8CHE`h=YTJPScyK;tKx$ z{tsglGF0=fE!V*dl;wJROP~CtX>DyyN9|a_-3T_DJ?n16b~A@>pB~SgJ)4tkUfNf_ z--g@eJ)U`Tb0F5}L4}#ONwAy~Te$h_S5>yD_h^4_XKq+nn5u)m(?1VAFo#e6yN{_m zSEL|#tHHc^^Ll>%G#DQnz1op`@a1`SI8J*=KPQ}yE^hSA7&oi=kS%>upDdP^ZqC__I+A& zbF+DWTiM;ME(s4cLK7&qMMYVA?{2d5vdQxmO7z!hipelzl#d$oPGWLb%F7#LKZfeh z@+CX8s9#+sThcnV)%n{xE+=}&xE0pr{rmUYJ9qAkcp${z-WT~J-+%qqru2p4`iRVt zE2C;9!7jCKZ+;vreZ0@5W2$~Zoy5zUw9=jd2lC+NrRTgjR@ zvUMtYBjrJQHBwC2?~^7oG4)>qZS)ajf^J{tH4O`HIP|A5*U!MT_{M6LAYTJr-PY*H z5cbQ4k7xN5_pKk6^L*8i=sg;HO;DlDBP%U!9}zuzweRqj`OpNkzU;1D0+B$I`x+sSPu3y3&=S}-GA@^q4ki?v_(Zi&6M1)H7<4Q zrKF_#TZ?xzG&CehsEO;xeLO#BDJNQItqB5<9bO*4-x9$ofQ9_^*Iyk=_ihngvu5|v zqetI=_`tceP@EIan&0s`CH9{n9dCSpis60c*ZJk$&2nBo`2+YuqpM4|Je|rX=u!E@ zDZxoueYo+mR9t6G=Kh?V9RJA3$b~{eHrYMz#r3tcv?4lUk_z7p$}F4Pj$n9flxl6| z=IXj{+qP}xc;UFLEO~JWiEme&l=b6{j`nj)^DH<~H>e&sb=B5ToTeOk_p2JaA72sj z*cZiSKdM*k!e4$lP&{ zs^EQ5k<#J1{i)U|g0A&E;+r;cdcJ>ugw2ot^UukaNL=OjcU_K=Z#mb=&)8lnNZL1J zIaBzi!S+O7Yq9&+JI5C+TJ&(5kcVcd=Z`ycm&vT~_VzaLoyI6%eI>nuv7JjvdiS+u z(T^Ve#)>TWTqi18%x~t=(D;sFqS9q1O=6CB7jErZCoH@Zr8l#8Lw?e&>(^HxRiUnm zNlWYP+O-RN7d&h26ejFg!}RIQNI-vkMSfD8YWK=uBZDSXkej}~zMbhUg4yF^!^cem zco`;WsfscX60`W_ykF?oH@~c)U#_fFre7BC@S$IRJJ0aomjknTCgGQ7i*cG5#%IIi z>G*{?jEsqY{_`JvQ&Wa7VZw%v96Khqc5PnS;jpPQX3y3=aU$yR=)4v9qm-RUpN)-; zy8HIEwrOde9T*tEo4?!l=fs1g>;(9jIcruw4uzPcWMNrT*wj6$swE%q?eM#KbK>dh z8(+PC9jz0oo*>98BQCjp8b0*De^Oh12|T{s7ge*UkA3%DfAgici(38r#*GV?E{$w# z6nD9|T}nzwWNqO71&JB`oi+QBj&2?`Y^i=26}9K)n!P38Dxdh>xUo`6Ns0b+{#y08 z`R%C_5A1{oF7$3}(qS1iN@cLbBsXWS3o#cF5y@yczZ5lB%!ymF%U9vY?H?Ugk%>7& zs!Ai@&n}WOjf+jp`CN9`RG$`AIe7lsi|1yV9Bku66Cl9}iId75(RLn=R!i#2XqP0Y zwR-oJk58?tf_y7>r~KTCRaOpu;?iY`U`F2l0~N0fM>zi3Gi5h7w`hl!!lBO0uEHUw z*RNl@O?NRrZ7IBMJfB#Pk&)Uf1r#eA$It?n`;d& zU8%Cp+)IDAFnDWMD&?Pmo5K=wf6 z<-4*D4}bst_dc9gxzJgBd;!7{4kO7nR`>1*#;xh5exMQ*g$&h;7=WyL9u(sJ?+dZYgTRrlao{9QW9x4Q$&t(p$7O zHC-1~GC&wm;CozAsF%EyR2TcFlgMgie3oXrW9!FlKnTa>Ym<(u0aSh%Y(bE%!y$kE z{Q0Ge7g0jm6LU@3fC>-uw|w&s%5h38IF|Ws*j{AfY^D^ZU;7aYG?1) zf}#x13G5bg_@P6#zL%F*M2Cg=#NT!*=bHWC6O?x?Z{b@eqiLS0HgD-tac*^m>$lqM z{p><_;fI?i@`2`Y=@TE7XcKHjt>1G?bHv2N3SATQV)bXv znWG2XR8m@6^C z;hw`kg1dtXj+F|H52&z8((IbVf@f|2q?3-o3SnID8Qkv65(%pR=YzvIhAsMCF z-UG&tDN-6Y?#k-D2CQ6`<9RB3@M~a3OUS915u?>A*QkX%RumGClM@SUjW)}E>R%{m zUSosD0g_mu-ec)wV?T5AasJLuom2Aa;(XLP@ARAk@$&_8p1D#KQYQj8TWPlx2B%uy?Y~P_yS^T4ASV&?bm9A=nntr=tri= za9*hmVgAzLc!9O<^YXOod9$Q>VB~moJ$pyq9%z zJ0vTfMR|)&@M%mZz-@UUl_wnd?w^mF-!m)BJ_E2q>TSjl; zRv_ev%+3ro9v+^FHfe2$>-Jdv_!7igbKAV4ixWl1a*{}jZT~L@3E~~C`QC_zinljb z6B0w-iBSuXWQS8Xh*MF979hUz$?~M6J7LBhi7ABe{9l7ZKv(v=Ish_B;k*5yGk!DrU3J9nZ#eL@(URYr0- z(!hBcZ85RQ)-`eq7c6*NQDMNQ1dV2s#a^`DNLN%DwNZlAR*_gIYv%GXY#TcqEnKug zqN(4R)$;OLB~Q_tW>W^h@ox3?9(my0Ssm>?K3wV1yCgyAYy z2KQlL;lNOPLZ-T+qM{MHK~+`NFI=u$?P&03WZk;zuiGWxD+y6vte@2U<;%!gMMb{_ zEp2vQBCHad@l}R_C^iPPk3G%##3HE4EnME&+1Xb7-~t}_OLaN$9_kM|bs(BgvSto= zXhNdY=^<`If4=x`lRK)fG&XQJBJ9p@2hZRE!?~rAmSA~Wf^)@&Rn^t~g?Fi_gmwp^ zn+Ktjd^m4zL_~zBWWuF!&#`i+ZDp>HCLl}N2|IR7OY#C;U&?dM0cM0h#iqQaN?c`= zYeFzXTU&d<{P_=Fz1oSWYP+_zGwSJRokNkr@nw6LNL$>ZF9%%E%~$-pr~UM(!7x;5 z)Ya6~w9JfC@3c)~C-8`m(F35~o*zG)LyVmITD7bylXi^`^*fw@&V8^VGL>7EYLn72 zUQux*s2uf*Rr2_7UW}Dei^GtvXkfvyBi{U%DA<+bQ6lf5yq*Bgz_BSt8}-FjhLdQf zBqA&v<<|SPkTFa?apUCX{V7x5R$fz0%M6v{M%}-E-{_~^(4Mz+Jd|1_3?}_u;#BK$ zJi)4ATk+P5-XXQuWH>n}rUDQ6-MV$+^`(ViiZnqVn8on_D^x zQ*&o$0?a38_)ZarBpxkD+X;+G97 zw63UCR&ZBup0!9qrYXHSKY(xy`U5M!E}x?Ue}7s802l50*AI6deEIT4^@iP$ckWPI zEIY<)R0WAngoQjC`_){^!;EM+5M)#>%)ACcN7>muCPIf*(pvmLYB-4ha^?Z7UYP#l zst%;700jHm=pF$f6f&Zzv~_eSUw|Re<4PYse0brqWpT(8vG@&?VLz18Q5^l+{R5^~ z>OKdAhK4GReBUugP<|gEUO6E|A0Gyki3`H6y#D!FrwS7nz4kxK{z*>>aZ{?tb1i~m z=}2#}2|+?B!|rYjQQNy$52Y#A` zmO;7Pia=qf@;6tPmPMD|aRAlxPd+d3)!$`WYpPo77x(d_rh%{aTAA_vf)Txmyh&zB ziU&j-QGSel@JAwDs`~1Me(uwEf>;q&w2-CH37b1(&YWg`kF*6Y&r#q0H_gI--VdFd zjxDjcGm(0I1YRs0kN>+}*&X)HS!m93IZoNxu&IwveQN%0x424Zq8?fP`MzNf`&Lui zHpvIxYVM{PJG8@Mk4GtX7cVs%>)}taC{x8T zwy4X=UL>*4c1iB#yBB^gXDkGP*_EYbP#r#}+9VRqg|0HLq+&Mc0(811R2rh9))Ct~ zH*Z{N+E4Jy71&%2&w+*u7Bv|uUL)NqHD1FVM%nHua?ame({ua;&P{wWvD~p27@yCt zjy*B&tWHNG{ZTg6@X>+OooHGjA|u6Dtf-Hxnmlb<`<>$<#V`4kzIlAZx8F)lO;sH2 zD{T|ZeADE4f%OmW5wW_(c~{oN*$~PS5WD(oJWW=`}Sf&gaD!T);h+<5>ir$s%9-69r37!cLh_+>piD26$CnLPbVjDiZ@Qz#_HVN zc>Ed)*d~zG%N5)?ZVE51ZmEqzH`$iao}hy?PaI>xosB9B7cP_x$@$ti@geA~(|lew zT*u)$9_l$k?;)_C5P6I0B&&4QyFEU2!Sdztph)sxzT5$7p%~cY%h#`88@ZN}wJwaU z0wU3P1z30hdW%nw?)5$%7;u$cHW%~>i%m>F6$!#)0FubzoUm=YXnWEuz6tnZsf{WB z^S9P!Xa4A_O9akpIV>tFnpD*R9yK~SJ|G|fq>rAdX@ac7*Vd<1)*BV9&G(EVTM&lh2Fxm?vh{?J7aE^Pkd&ly86g~sZu$7)Y?=^;x=dkoliRHy3@ zZYk{OFt6Sd*L zpeF1l*y(8W`QQ$KLED1Z>|fo$2)bX9Tl?E@nt;RL5Ex11@UY$az?~;g23@*53kbXB z@Xc3OtFQL<{Lt=6II?Q8@>RXqNk_n)xsUc&0G{ur(}I*=hFn)TERA-5DBo=CzJ}7M z?le9@aOT%dT^pucUA$pCd(-j4WuqN7-lZ5P=mMLyww_QJ{Bo0ek~tnK($l&Wj78S2 zZBgp(jt-YG@YT66vOg&#p!52I);7bo>&v2D)gL2Z0j8w&<7ZyKxmF_v=ukk>Bds&5 zw@}Qp;QGoPz%eU5N4oPaUAk0qns*v%Y*5j($&)9Ng|TrEib!Nv?zrj83w#FXM>)CP zhE)`%w8ZU zXlfn^Ok*(Ad)QauAwu6ARd?jq5%H{_*o>%4a-RHg|K%x_YySbzUwnTTDvv%G;5i!m zGr!mJq7T`d(l-6=IaM{a()WJi1fvnf>(;JSp<`71KtUBH@;IF?Ve|L5LuM_pa`Jz1Rg

78k4RFHBzc;*00e!w6 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 diff --git a/validphys2/src/validphys/tests/baseline/test_plot_obscorrs.png b/validphys2/src/validphys/tests/baseline/test_plot_obscorrs.png index 2e7ccf86583ab79bf117112bbd4d4b8548cb7250..ac4ce93b40d257cb9ed27deae3ee993c9aaba49c 100644 GIT binary patch delta 277409 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�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
Nf_~Q!#T|)MvE^xj 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