diff --git a/.github/workflows/fitbot.yml b/.github/workflows/fitbot.yml index 6315701e60..9d904cc348 100644 --- a/.github/workflows/fitbot.yml +++ b/.github/workflows/fitbot.yml @@ -10,7 +10,7 @@ on: env: N3FIT_MAXNREP: 20 # total number of replicas to fit POSTFIT_NREP: 16 # requested replicas for postfit - REFERENCE_SET: NNBOT-9fded1f04-2024-03-29 # reference set for exact results + REFERENCE_SET: NNBOT-489c196ac-2024-04-18 # reference set for exact results STABLE_REFERENCE_SET: NNBOT-c0f99b7b3-2024-02-28 # reference set for last tag CONDA_PY: 312 PYTHONHASHSEED: "0" diff --git a/doc/sphinx/source/tutorials/index.rst b/doc/sphinx/source/tutorials/index.rst index e680997309..0fd9b49a98 100644 --- a/doc/sphinx/source/tutorials/index.rst +++ b/doc/sphinx/source/tutorials/index.rst @@ -14,6 +14,7 @@ Running fits ./run-fit.md ./run-iterated-fit.rst ./run-qed-fit.rst + ./polarized_fits.rst ./general_th_covmat.rst ./thcov_tutorial.rst diff --git a/doc/sphinx/source/tutorials/polarized_fits.rst b/doc/sphinx/source/tutorials/polarized_fits.rst new file mode 100644 index 0000000000..4f1e698a87 --- /dev/null +++ b/doc/sphinx/source/tutorials/polarized_fits.rst @@ -0,0 +1,123 @@ +.. _polarized: + +How to run a Polarized fit +========================== + +The user should first refer to the :ref:`detailed guide ` on how to run +a standard unpolarized PDF fit. Most of the steps in that guide still apply here and +in the following section we only highlight the differences. + + +Preparing a runcard and running a fit +------------------------------------- + +The writing of a polarized fit runcard follows exactly the guideline described +in :ref:`Preparing a fit runcard `. The user only needs to modify +and adjusts various entries. + +In polarized fits, the positivity of the polarized PDFs are enforced using as +a boundary condition an unpolarized PDF set. The information on how such a +constraint is enforced is defined under the key ``positivity_bound`` as follows: + +.. code-block:: yaml + + # Define the unpolarized PDF set to be used as BC for positivity + ... + positivity_bound: + unpolarized_bc: NNPDF40_nnlo_pch_as_01180 + n_std: 1.00 # Standard Deviation to be added as Shift + ... + +where ``unpolarized_bc`` specifies the name of the unpolarized PDF set to be used +as a boundary condition while ``n_std`` specifies the shift in terms of the standard +deviation to be applied to the PDF central values. If ``n_std=0.0`` then the +PDF central values will be used to constrain their polarized counterparts. + +Given that polarized fits require different fitting bases and different theory +constraints, the fields under the ``fitting`` key require some adjustments. +Specifically: + +.. code-block:: yaml + + ... + fitting: + fitbasis: POLARIZED_EVOL + sum_rules: TSR + basis: + - {fl: sng, trainable: false, smallx: [1.094, 1.118], largex: [1.46, 3.003]} + - {fl: g, trainable: false, smallx: [0.8189, 1.844], largex: [2.591, 5.697]} + - {fl: t3, trainable: false, smallx: [-0.4401, 0.9163], largex: [1.773, 3.333]} + - {fl: t8, trainable: false, smallx: [0.5852, 0.8537], largex: [1.533, 3.436]} + ... + +where ``TSR`` specifies that only sum rules on the :math:`T_3` and :math:`T_8` +distributions are applied. If any of these values are specified differently the program will +raise an error. Note that for polarized fits, the basis name has to start with ``POLARIZED_`` +and then followed by the basis type (for example ``EVOL`` or ``FLAVOUR``). + +.. note:: + + While the treatment of integrability follows exactly the same concept as in the + default unpolarized fits, the treatment of positivity in the polarized case + requires specific treatment. Similar to the unpolarized fits, the cost function + used to enforce the positivity is defined by the following quantity: + + .. math:: + \chi_{\mathrm{tot}}^2 \rightarrow \chi_{\mathrm{tot}}^2+ \Lambda_{\rm POS} \sum_{k=1}^8 \sum_{i=1}^{n_x} \operatorname{ReLU}\left(-\mathcal{C}_k\left(x_i, Q^2\right)\right) + + where: + + .. math:: + \mathrm{ReLU}(t)= \begin{cases}t & \text { if } t>0 \\ 0 & \text { if } t \leq 0\end{cases} + + with :math:`n_i=20` and :math:`Q^2=5~\mathrm{GeV}^2` chosen to be the same as in the unpolarized + case. In the polarized case, omitting the :math:`Q^2`-dependence, the expression of :math:`\mathcal{C}_k` + is rather given by: + + .. math:: + \mathcal{C}_k(x_i) = \mathcal{F}_k(x_i) + \Sigma_k(x_i) - | \Delta \mathcal{F}_k(x_i) | + + where :math:`\Sigma_k(x_i)` represents the one standard deviation error computed at + :math:`x_i` for the flavour :math:`k`. :math:`(\Delta) \mathcal{F}_k` can be a (p)PDF of + flavour :math:`k` or the longitudinally (polarized) structure functions :math:`(k=1)`. + The way in which the unpolarized prediction uncertainties are accounted for during + the fit is by sampling according to a normal distribution and ought to enforce the + following inequality: + + .. math:: + \mathcal{N}_r \left( \mathcal{F}_k, \Sigma_k^2 \right) - | \Delta \mathcal{F}_k | \geq 0 + + where the subscript :math:`r` indicates that the random seed per replica is always + different. In practice, when imposing the positivity at the level of PDFs, we enforce + the constraints on the flavor combination :math:`\left( \Delta f_i + \Delta \bar{f}_i \right)`, + that is :math:`(\Delta) \mathcal{F}_k \equiv (\Delta) f_k + (\Delta) \bar{f}_k`. + +Once the runcard is ready, the user can follow the guidelines :ref:`here ` +to set up and run fits. + + +Evolving the fit +---------------- + +In order to evolve the fitted replicas, we have to use the polarized DGLAP evolution. This +can simply be done by supplementing a flag to the ``evolven3fit``: + +.. code-block:: bash + + evolven3fit evolve $runcard_folder --use_polarized + +Alternatively, the user can explicitly specify the path to the EKO using the flag ``--load``. + + +Comparing polarized fits +------------------------ + +Additionally, a specific report template should be used when comparing two polarized +fits. This can be done by simply using the ``--use_polarized`` when calling ``vp-comparefits``: + +.. code-block:: bash + + vp-comparefits -i --use_polarized + +To read in details on how to compare two fits, head to the :ref:`following ` +documentation. diff --git a/doc/sphinx/source/tutorials/run-fit.md b/doc/sphinx/source/tutorials/run-fit.md index a2dc0b4961..0c6b0ef4b4 100644 --- a/doc/sphinx/source/tutorials/run-fit.md +++ b/doc/sphinx/source/tutorials/run-fit.md @@ -15,6 +15,10 @@ The fitting methodology is detailed in the [Methodology](methodology) page. - [Upload and analyse the fit](#upload-and-analyse-the-fit) +```eval_rst +.. _prepare-fits: +``` + Preparing a fit runcard ----------------------- diff --git a/extra_tests/regression_checks.py b/extra_tests/regression_checks.py index cd68179941..c5679bf4f9 100644 --- a/extra_tests/regression_checks.py +++ b/extra_tests/regression_checks.py @@ -26,6 +26,7 @@ "trainable_prepro": 61, "no_lagrange": 27, "no_csr": 613, + "polarized_evol": 34, "single_dense": 316, } diff --git a/extra_tests/regression_fits/central_16.json b/extra_tests/regression_fits/central_16.json index 456fc26110..39aa4f3cb3 100644 --- a/extra_tests/regression_fits/central_16.json +++ b/extra_tests/regression_fits/central_16.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 29.638298988342285, + "Total": 32.32825946807861, "start": 0.0, - "replica_set": 0.2522115707397461, - "replica_fitted": 29.6381618976593, - "replica_set_to_replica_fitted": 29.385950326919556 + "replica_set": 0.23800349235534668, + "replica_fitted": 32.32805871963501, + "replica_set_to_replica_fitted": 32.09005522727966 }, "cputime": { - "Total": 31.201514887000002, + "Total": 33.586156003, "start": 0.0, - "replica_set": 0.5735468639999999, - "replica_fitted": 31.201376138, - "replica_set_to_replica_fitted": 30.627829274 + "replica_set": 0.23583456399999925, + "replica_fitted": 33.585950811000004, + "replica_set_to_replica_fitted": 33.350116247 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/diagonal_45.json b/extra_tests/regression_fits/diagonal_45.json index c239440ae3..4fcf18d09c 100644 --- a/extra_tests/regression_fits/diagonal_45.json +++ b/extra_tests/regression_fits/diagonal_45.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 29.0417582988739, + "Total": 31.026511907577515, "start": 0.0, - "replica_set": 0.24686527252197266, - "replica_fitted": 29.04159164428711, - "replica_set_to_replica_fitted": 28.794726371765137 + "replica_set": 0.22557783126831055, + "replica_fitted": 31.026363611221313, + "replica_set_to_replica_fitted": 30.800785779953003 }, "cputime": { - "Total": 30.396234212999996, + "Total": 32.27932530699999, "start": 0.0, - "replica_set": 0.5666455580000003, - "replica_fitted": 30.396064907, - "replica_set_to_replica_fitted": 29.829419349 + "replica_set": 0.2244609740000003, + "replica_fitted": 32.279174556, + "replica_set_to_replica_fitted": 32.054713582 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/feature_scaling_81.json b/extra_tests/regression_fits/feature_scaling_81.json index 3b6d59e0f1..e33cf64c38 100644 --- a/extra_tests/regression_fits/feature_scaling_81.json +++ b/extra_tests/regression_fits/feature_scaling_81.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 29.385473251342773, + "Total": 33.15795373916626, "start": 0.0, - "replica_set": 0.2618255615234375, - "replica_fitted": 29.38529133796692, - "replica_set_to_replica_fitted": 29.12346577644348 + "replica_set": 0.24506402015686035, + "replica_fitted": 33.15779399871826, + "replica_set_to_replica_fitted": 32.9127299785614 }, "cputime": { - "Total": 30.624417034000004, + "Total": 32.71397760399999, "start": 0.0, - "replica_set": 0.5652710770000002, - "replica_fitted": 30.62423277, - "replica_set_to_replica_fitted": 30.058961692999997 + "replica_set": 0.2428332590000002, + "replica_fitted": 32.71381593300001, + "replica_set_to_replica_fitted": 32.470982674000005 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/flavour_29.json b/extra_tests/regression_fits/flavour_29.json index c5ae2dc291..045396ff1e 100644 --- a/extra_tests/regression_fits/flavour_29.json +++ b/extra_tests/regression_fits/flavour_29.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 7.07843017578125, + "Total": 7.731718301773071, "start": 0.0, - "replica_set": 0.2522542476654053, - "replica_fitted": 7.078283309936523, - "replica_set_to_replica_fitted": 6.826029062271118 + "replica_set": 0.2266373634338379, + "replica_fitted": 7.731366872787476, + "replica_set_to_replica_fitted": 7.504729509353638 }, "cputime": { - "Total": 7.514604531, + "Total": 7.901237213, "start": 0.0, - "replica_set": 0.5747256410000006, - "replica_fitted": 7.514455934000001, - "replica_set_to_replica_fitted": 6.939730293 + "replica_set": 0.22565210800000024, + "replica_fitted": 7.900883664, + "replica_set_to_replica_fitted": 7.675231556 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/no_csr_613.json b/extra_tests/regression_fits/no_csr_613.json index cc65f0829f..29319b0842 100644 --- a/extra_tests/regression_fits/no_csr_613.json +++ b/extra_tests/regression_fits/no_csr_613.json @@ -77,24 +77,24 @@ ], "timing": { "walltime": { - "Total": 27.847703218460083, + "Total": 31.898317337036133, "start": 0.0, - "replica_set": 0.2785060405731201, - "replica_fitted": 27.847578287124634, - "replica_set_to_replica_fitted": 27.569072246551514 + "replica_set": 0.2562828063964844, + "replica_fitted": 31.898224592208862, + "replica_set_to_replica_fitted": 31.641941785812378 }, "cputime": { - "Total": 28.899172986, + "Total": 32.496953049, "start": 0.0, - "replica_set": 0.5995310260000002, - "replica_fitted": 28.899045308, - "replica_set_to_replica_fitted": 28.299514282 + "replica_set": 0.25330967699999984, + "replica_fitted": 32.496857621, + "replica_set_to_replica_fitted": 32.243547944 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/no_lagrange_27.json b/extra_tests/regression_fits/no_lagrange_27.json index 513cdee089..720997b4b6 100644 --- a/extra_tests/regression_fits/no_lagrange_27.json +++ b/extra_tests/regression_fits/no_lagrange_27.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 33.39091753959656, + "Total": 37.980634450912476, "start": 0.0, - "replica_set": 0.2545652389526367, - "replica_fitted": 33.390822649002075, - "replica_set_to_replica_fitted": 33.13625741004944 + "replica_set": 0.22922587394714355, + "replica_fitted": 37.98039174079895, + "replica_set_to_replica_fitted": 37.75116586685181 }, "cputime": { - "Total": 34.736605786000005, + "Total": 39.138274702000004, "start": 0.0, - "replica_set": 0.566752718, - "replica_fitted": 34.736509046, - "replica_set_to_replica_fitted": 34.169756328 + "replica_set": 0.22799105100000006, + "replica_fitted": 39.138029595, + "replica_set_to_replica_fitted": 38.910038543999995 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/no_msr_92.json b/extra_tests/regression_fits/no_msr_92.json index c464443992..bd743bd266 100644 --- a/extra_tests/regression_fits/no_msr_92.json +++ b/extra_tests/regression_fits/no_msr_92.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 41.017494440078735, + "Total": 46.0448694229126, "start": 0.0, - "replica_set": 0.2511754035949707, - "replica_fitted": 41.01731038093567, - "replica_set_to_replica_fitted": 40.7661349773407 + "replica_set": 0.23608732223510742, + "replica_fitted": 46.04460954666138, + "replica_set_to_replica_fitted": 45.80852222442627 }, "cputime": { - "Total": 42.594483392, + "Total": 47.628624913, "start": 0.0, - "replica_set": 0.5723506120000001, - "replica_fitted": 42.594297225, - "replica_set_to_replica_fitted": 42.021946613 + "replica_set": 0.2344786430000001, + "replica_fitted": 47.628361752, + "replica_set_to_replica_fitted": 47.393883109 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/no_sumrules_18.json b/extra_tests/regression_fits/no_sumrules_18.json index 6af8e57862..92081e8302 100644 --- a/extra_tests/regression_fits/no_sumrules_18.json +++ b/extra_tests/regression_fits/no_sumrules_18.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 36.68100190162659, + "Total": 41.40428566932678, "start": 0.0, - "replica_set": 0.41010546684265137, - "replica_fitted": 36.6807975769043, - "replica_set_to_replica_fitted": 36.270692110061646 + "replica_set": 0.2421131134033203, + "replica_fitted": 41.40400695800781, + "replica_set_to_replica_fitted": 41.16189384460449 }, "cputime": { - "Total": 37.817408023, + "Total": 42.813383816, "start": 0.0, - "replica_set": 0.7309529969999993, - "replica_fitted": 37.817202128999995, - "replica_set_to_replica_fitted": 37.086249132 + "replica_set": 0.24098446600000045, + "replica_fitted": 42.813101980999996, + "replica_set_to_replica_fitted": 42.572117514999995 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/no_vsr_54.json b/extra_tests/regression_fits/no_vsr_54.json index 1451179f58..acb7939d0c 100644 --- a/extra_tests/regression_fits/no_vsr_54.json +++ b/extra_tests/regression_fits/no_vsr_54.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 30.62160563468933, + "Total": 33.98991370201111, "start": 0.0, - "replica_set": 0.25388574600219727, - "replica_fitted": 30.621519565582275, - "replica_set_to_replica_fitted": 30.367633819580078 + "replica_set": 0.2610938549041748, + "replica_fitted": 33.98975157737732, + "replica_set_to_replica_fitted": 33.728657722473145 }, "cputime": { - "Total": 31.731461988999996, + "Total": 35.629525277, "start": 0.0, - "replica_set": 0.5682404839999995, - "replica_fitted": 31.731373433, - "replica_set_to_replica_fitted": 31.163132949 + "replica_set": 0.25395271799999986, + "replica_fitted": 35.629360870999996, + "replica_set_to_replica_fitted": 35.375408152999995 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/normal_fit_72.json b/extra_tests/regression_fits/normal_fit_72.json index 720e3acdc3..adb403c767 100644 --- a/extra_tests/regression_fits/normal_fit_72.json +++ b/extra_tests/regression_fits/normal_fit_72.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 37.61420464515686, + "Total": 41.181039333343506, "start": 0.0, - "replica_set": 0.2624022960662842, - "replica_fitted": 37.61404800415039, - "replica_set_to_replica_fitted": 37.351645708084106 + "replica_set": 0.22890329360961914, + "replica_fitted": 41.180768728256226, + "replica_set_to_replica_fitted": 40.951865434646606 }, "cputime": { - "Total": 39.01239065, + "Total": 41.631527645, "start": 0.0, - "replica_set": 0.581023987, - "replica_fitted": 39.012231764, - "replica_set_to_replica_fitted": 38.431207777 + "replica_set": 0.227995653999999, + "replica_fitted": 41.631252642, + "replica_set_to_replica_fitted": 41.403256988 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/polarized_evol.yml b/extra_tests/regression_fits/polarized_evol.yml new file mode 100644 index 0000000000..cea9ccd333 --- /dev/null +++ b/extra_tests/regression_fits/polarized_evol.yml @@ -0,0 +1,82 @@ +############################################################ +# Configuration file for N3FIT regression Test +############################################################ +description: N3FIT regression test for polarised fits + +############################################################ +dataset_inputs: +- {dataset: E143_NC_NOTFIXED_EP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E143_NC_NOTFIXED_ED_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E154_NC_9GEV_EN_G1, frac: 0.60, cfac: [NRM]} + +############################################################ +datacuts: + t0pdfset: NNPDFpol10_100 # PDF set to generate t0 covmat + q2min: 1.00 # Q2 minimum + w2min: 4.00 # W2 minimum + +############################################################ +# Define the unpolarized PDF set to be used as BC for POS +positivity_bound: + unpolarized_bc: NNPDF40_nnlo_pch_as_01180 + n_std: 1.00 # Standard Deviation to be added as Error + +############################################################ +theory: + theoryid: 822 + +############################################################ +trvlseed: 14613416 +nnseed: 1865683875 +mcseed: 746898422 +genrep: true + +load: "weights_polevol.weights.h5" + +parameters: + nodes_per_layer: [25, 20, 4] + activation_per_layer: [tanh, tanh, linear] + initializer: glorot_normal + optimizer: + clipnorm: 6.073e-6 + learning_rate: 2.621e-4 + optimizer_name: Nadam + epochs: 1100 + positivity: + initial: 1 + multiplier: + threshold: 1e-7 + integrability: + initial: 1 + multiplier: + threshold: 1e-2 + stopping_patience: 0.1 + layer_type: dense + dropout: 0.0 + threshold_chi2: 3.5 + +fitting: + fitbasis: POLARIZED_EVOL + sum_rules: TSR + basis: + - {fl: sng, trainable: false, smallx: [1.094, 1.118], largex: [1.46, 3.003]} + - {fl: g, trainable: false, smallx: [0.8189, 1.844], largex: [2.591, 5.697]} + - {fl: t3, trainable: false, smallx: [-0.4401, 0.9163], largex: [1.773, 3.333]} + - {fl: t8, trainable: false, smallx: [0.5852, 0.8537], largex: [1.533, 3.436]} + +########################################################### +positivity: + posdatasets: + - {dataset: NNPDF_POS_2P24GEV_XGL-POLARIZED, maxlambda: 1e8} + - {dataset: NNPDF_POS_2P24GEV_XDQ-POLARIZED, maxlambda: 1e8} + - {dataset: NNPDF_POS_2P24GEV_XSQ-POLARIZED, maxlambda: 1e8} + - {dataset: NNPDF_POS_2P24GEV_XUQ-POLARIZED, maxlambda: 1e8} + +############################################################ +integrability: + integdatasets: + - {dataset: NNPDF_INTEG_1GEV_XGL-POLARIZED, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_1GEV_XSIGMA-POLARIZED, maxlambda: 1e2} + +############################################################ +debug: true diff --git a/extra_tests/regression_fits/polarized_evol_34.exportgrid b/extra_tests/regression_fits/polarized_evol_34.exportgrid new file mode 100644 index 0000000000..b0228e9f06 --- /dev/null +++ b/extra_tests/regression_fits/polarized_evol_34.exportgrid @@ -0,0 +1,627 @@ +labels: [TBAR, BBAR, CBAR, SBAR, UBAR, DBAR, GLUON, D, U, S, C, B, T, PHT] +pdfgrid: +- [0.0, 0.0, 0.0, -0.10375979542732239, -0.10418701171875, -0.10418701171875, -0.6372790932655334, + -0.10418701171875, -0.10418701171875, -0.10375979542732239, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.096921905875206, -0.09737326204776764, -0.09737326204776764, + -0.6048541069030762, -0.09737326204776764, -0.09737326204776764, -0.096921905875206, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0903250128030777, -0.09080172330141068, -0.09080172330141068, + -0.5734948515892029, -0.09080172330141068, -0.09080172330141068, -0.0903250128030777, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0839621052145958, -0.08446542173624039, -0.08446542173624039, + -0.5431776642799377, -0.08446542173624039, -0.08446542173624039, -0.0839621052145958, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.07782688736915588, -0.07835809141397476, -0.07835809141397476, + -0.5138790607452393, -0.07835809141397476, -0.07835809141397476, -0.07782688736915588, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.07191212475299835, -0.07247252762317657, -0.07247252762317657, + -0.4855802357196808, -0.07247252762317657, -0.07247252762317657, -0.07191212475299835, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.06621130555868149, -0.06680227071046829, -0.06680227071046829, + -0.458252876996994, -0.06680227071046829, -0.06680227071046829, -0.06621130555868149, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.060719095170497894, -0.0613420195877552, -0.0613420195877552, + -0.4318808615207672, -0.0613420195877552, -0.0613420195877552, -0.060719095170497894, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.05542910099029541, -0.056085411459207535, -0.056085411459207535, + -0.40644094347953796, -0.056085411459207535, -0.056085411459207535, -0.05542910099029541, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.05033574253320694, -0.05102689191699028, -0.05102689191699028, + -0.3819136917591095, -0.05102689191699028, -0.05102689191699028, -0.05033574253320694, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.045433539897203445, -0.04616100713610649, -0.04616100713610649, + -0.35827943682670593, -0.04616100713610649, -0.04616100713610649, -0.045433539897203445, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.04071761667728424, -0.04148290306329727, -0.04148290306329727, + -0.33552372455596924, -0.04148290306329727, -0.04148290306329727, -0.04071761667728424, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.03618211671710014, -0.03698672354221344, -0.03698672726750374, + -0.31362223625183105, -0.03698672726750374, -0.03698672354221344, -0.03618211671710014, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.031823206692934036, -0.03266865760087967, -0.03266866132616997, + -0.29256224632263184, -0.03266866132616997, -0.03266865760087967, -0.031823206692934036, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02763521671295166, -0.028523024171590805, -0.028523029759526253, + -0.27232521772384644, -0.028523029759526253, -0.028523024171590805, -0.02763521671295166, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02361489087343216, -0.024546554312109947, -0.024546561762690544, + -0.25289884209632874, -0.024546561762690544, -0.024546554312109947, -0.02361489087343216, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01975749246776104, -0.020734485238790512, -0.02073449268937111, + -0.2342669665813446, -0.02073449268937111, -0.020734485238790512, -0.01975749246776104, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.016059311106801033, -0.01708306558430195, -0.017083078622817993, + -0.21641294658184052, -0.017083078622817993, -0.01708306558430195, -0.016059311106801033, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.012516364455223083, -0.013588260859251022, -0.013588279485702515, + -0.19932542741298676, -0.013588279485702515, -0.013588260859251022, -0.012516364455223083, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.009124751202762127, -0.010246098041534424, -0.010246125049889088, + -0.1829906553030014, -0.010246125049889088, -0.010246098041534424, -0.009124751202762127, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005881877616047859, -0.0070538888685405254, -0.007053925655782223, + -0.16739733517169952, -0.007053925655782223, -0.0070538888685405254, -0.005881877616047859, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0027842039708048105, -0.004007978364825249, -0.00400803005322814, + -0.15253297984600067, -0.00400803005322814, -0.004007978364825249, -0.0027842039708048105, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0001711293589323759, -0.0011053619673475623, -0.0011054336791858077, + -0.1383870542049408, -0.0011054336791858077, -0.0011053619673475623, 0.0001711293589323759, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0029868308920413256, 0.001656841952353716, 0.0016567419515922666, + -0.12494892627000809, 0.0016567419515922666, 0.001656841952353716, 0.0029868308920413256, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.005665475968271494, 0.004281420726329088, 0.004281281027942896, + -0.11221034079790115, 0.004281281027942896, 0.004281420726329088, 0.005665475968271494, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008209841325879097, 0.00677139637991786, 0.00677120266482234, + -0.1001615971326828, 0.00677120266482234, 0.00677139637991786, 0.008209841325879097, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.010621135123074055, 0.00912826880812645, 0.009127998724579811, + -0.0887947827577591, 0.009127998724579811, 0.00912826880812645, 0.010621135123074055, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012901833280920982, 0.011354862712323666, 0.011354485526680946, + -0.07810387015342712, 0.011354485526680946, 0.011354862712323666, 0.012901833280920982, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.015053688548505306, 0.013453330844640732, 0.013452804647386074, + -0.06808353215456009, 0.013452804647386074, 0.013453330844640732, 0.015053688548505306, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01707744039595127, 0.015424881130456924, 0.015424148179590702, + -0.058726415038108826, 0.015424148179590702, 0.015424881130456924, 0.01707744039595127, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01897505111992359, 0.017272023484110832, 0.017271004617214203, + -0.05002922564744949, 0.017271004617214203, 0.017272023484110832, 0.01897505111992359, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020747380331158638, 0.018996238708496094, 0.01899481937289238, + -0.041989292949438095, 0.01899481937289238, 0.018996238708496094, 0.020747380331158638, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02239452674984932, 0.02059836871922016, 0.020596392452716827, + -0.034605395048856735, 0.020596392452716827, 0.02059836871922016, 0.02239452674984932, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02391759492456913, 0.02208034135401249, 0.022077592089772224, + -0.02787439525127411, 0.022077592089772224, 0.02208034135401249, 0.02391759492456913, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.025316495448350906, 0.02344304509460926, 0.02343921922147274, + -0.02179856039583683, 0.02343921922147274, 0.02344304509460926, 0.025316495448350906, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02659093216061592, 0.02468729577958584, 0.024681972339749336, + -0.016379397362470627, 0.024681972339749336, 0.02468729577958584, 0.02659093216061592, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.027740539982914925, 0.025814032182097435, 0.025806628167629242, + -0.011622032150626183, 0.025806628167629242, 0.025814032182097435, 0.027740539982914925, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.028764573857188225, 0.026823975145816803, 0.026813680306077003, + -0.007530342787504196, 0.026813680306077003, 0.026823975145816803, 0.028764573857188225, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0296618714928627, 0.027717702090740204, 0.02770339697599411, -0.004111277870833874, + 0.02770339697599411, 0.027717702090740204, 0.0296618714928627, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.030430741608142853, 0.028495511040091515, 0.02847563475370407, + -0.0013755697291344404, 0.02847563475370407, 0.028495511040091515, 0.030430741608142853, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.031069450080394745, 0.029157985001802444, 0.02913038805127144, + 0.0006664833053946495, 0.02913038805127144, 0.029157985001802444, 0.031069450080394745, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03157532215118408, 0.029705163091421127, 0.02966686524450779, + 0.001997932093217969, 0.02966686524450779, 0.029705163091421127, 0.03157532215118408, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03194599226117134, 0.030137833207845688, 0.030084721744060516, + 0.002604324370622635, 0.030084721744060516, 0.030137833207845688, 0.03194599226117134, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03217750042676926, 0.030455775558948517, 0.030382176861166954, + 0.0024648176040500402, 0.030382176861166954, 0.030455775558948517, 0.03217750042676926, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03226650506258011, 0.030660029500722885, 0.030558116734027863, + 0.0015550374519079924, 0.030558116734027863, 0.030660029500722885, 0.03226650506258011, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03220854327082634, 0.03075135499238968, 0.030610384419560432, + -0.00015183525101747364, 0.030610384419560432, 0.03075135499238968, 0.03220854327082634, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03199838474392891, 0.03073074482381344, 0.030535968020558357, + -0.0026864996179938316, 0.030535968020558357, 0.03073074482381344, 0.03199838474392891, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03163103014230728, 0.03060067817568779, 0.030331917107105255, + -0.006083811167627573, 0.030331917107105255, 0.03060067817568779, 0.03163103014230728, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.031100386753678322, 0.030364014208316803, 0.02999374270439148, + -0.010384649969637394, 0.02999374270439148, 0.030364014208316803, 0.031100386753678322, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03039969876408577, 0.030024876818060875, 0.029515696689486504, + -0.01562993787229061, 0.029515696689486504, 0.030024876818060875, 0.03039969876408577, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.029522454366087914, 0.029589824378490448, 0.028891149908304214, + -0.0218691173940897, 0.028891149908304214, 0.029589824378490448, 0.029522454366087914, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02846188098192215, 0.02906799502670765, 0.028111783787608147, + -0.029151620343327522, 0.028111783787608147, 0.02906799502670765, 0.02846188098192215, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.027211030945181847, 0.028471549972891808, 0.027166882529854774, + -0.03752927482128143, 0.027166882529854774, 0.028471549972891808, 0.027211030945181847, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.025763772428035736, 0.02781735733151436, 0.02604377083480358, + -0.04705319181084633, 0.02604377083480358, 0.02781735733151436, 0.025763772428035736, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.024115031585097313, 0.027127612382173538, 0.024727050215005875, + -0.057774752378463745, 0.024727050215005875, 0.027127612382173538, 0.024115031585097313, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022261351346969604, 0.02643069252371788, 0.023198304697871208, + -0.06973371654748917, 0.023198304697871208, 0.02643069252371788, 0.022261351346969604, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020202429965138435, 0.02576277405023575, 0.021436922252178192, + -0.08296183496713638, 0.021436922252178192, 0.02576277405023575, 0.020202429965138435, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017941463738679886, 0.025167422369122505, 0.019419824704527855, + -0.09747046232223511, 0.019419824704527855, 0.025167422369122505, 0.017941463738679886, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.015487046912312508, 0.02469601482152939, 0.017123393714427948, + -0.11324452608823776, 0.017123393714427948, 0.02469601482152939, 0.015487046912312508, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01285362895578146, 0.024405676871538162, 0.014524893835186958, + -0.1302356868982315, 0.014524893835186958, 0.024405676871538162, 0.01285362895578146, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.010062990710139275, 0.02435687929391861, 0.011605928651988506, + -0.14835351705551147, 0.011605928651988506, 0.02435687929391861, 0.010062990710139275, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.007144372444599867, 0.024608802050352097, 0.00835577491670847, + -0.1674633026123047, 0.00835577491670847, 0.024608802050352097, 0.007144372444599867, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004134096670895815, 0.02521377056837082, 0.004775300156325102, + -0.18738074600696564, 0.004775300156325102, 0.02521377056837082, 0.004134096670895815, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0010741715086624026, 0.026211122050881386, 0.0008800841169431806, + -0.2078811377286911, 0.0008800841169431806, 0.026211122050881386, 0.0010741715086624026, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0019894589204341173, 0.02762243151664734, -0.003297338029369712, + -0.22870506346225739, -0.003297338029369712, 0.02762243151664734, -0.0019894589204341173, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00500993337482214, 0.029448099434375763, -0.007708034943789244, + -0.24957537651062012, -0.007708034943789244, 0.029448099434375763, -0.00500993337482214, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007942031137645245, 0.03166728839278221, -0.012289105914533138, + -0.27021029591560364, -0.012289105914533138, 0.03166728839278221, -0.007942031137645245, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01074510719627142, 0.03424028679728508, -0.01696861907839775, + -0.29034262895584106, -0.01696861907839775, 0.03424028679728508, -0.01074510719627142, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.013384586200118065, 0.03711386024951935, -0.021671146154403687, + -0.30973127484321594, -0.021671146154403687, 0.03711386024951935, -0.013384586200118065, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01583346351981163, 0.04022687301039696, -0.026324084028601646, + -0.32817012071609497, -0.026324084028601646, 0.04022687301039696, -0.01583346351981163, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.018072176724672318, 0.04351692646741867, -0.030862431973218918, + -0.34549447894096375, -0.030862431973218918, 0.04351692646741867, -0.018072176724672318, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.020088477060198784, 0.04692547023296356, -0.03523257002234459, + -0.36158040165901184, -0.03523257002234459, 0.04692547023296356, -0.020088477060198784, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.021876536309719086, 0.050401706248521805, -0.03939443826675415, + -0.37634143233299255, -0.03939443826675415, 0.050401706248521805, -0.021876536309719086, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02343592420220375, 0.05390471965074539, -0.043322041630744934, + -0.3897273540496826, -0.043322041630744934, 0.05390471965074539, -0.02343592420220375, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.024770516902208328, 0.05740457773208618, -0.04700283706188202, + -0.4017161726951599, -0.04700283706188202, 0.05740457773208618, -0.024770516902208328, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02588764764368534, 0.06088201329112053, -0.05043633654713631, + -0.4123096466064453, -0.05043633654713631, 0.06088201329112053, -0.02588764764368534, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02679682895541191, 0.06432761996984482, -0.05363181605935097, + -0.42152929306030273, -0.05363181605935097, 0.06432761996984482, -0.02679682895541191, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.027509327977895737, 0.0677402913570404, -0.056606847792863846, + -0.4294101297855377, -0.056606847792863846, 0.0677402913570404, -0.027509327977895737, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.028037408366799355, 0.07112563401460648, -0.0593842975795269, + -0.43599721789360046, -0.0593842975795269, 0.07112563401460648, -0.028037408366799355, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.028394155204296112, 0.07449421286582947, -0.06199130788445473, + -0.44134441018104553, -0.06199130788445473, 0.07449421286582947, -0.028394155204296112, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02859228104352951, 0.07786048203706741, -0.06445637345314026, + -0.44550958275794983, -0.06445637345314026, 0.07786048203706741, -0.02859228104352951, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.028645014390349388, 0.08124062418937683, -0.06680897623300552, + -0.44855356216430664, -0.06680897623300552, 0.08124062418937683, -0.028645014390349388, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.028565073385834694, 0.08465170115232468, -0.06907741725444794, + -0.45053771138191223, -0.06907741725444794, 0.08465170115232468, -0.028565073385834694, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02836475521326065, 0.0881107747554779, -0.0712883397936821, -0.45152440667152405, + -0.0712883397936821, 0.0881107747554779, -0.02836475521326065, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.028055965900421143, 0.09163371473550797, -0.07346545904874802, + -0.4515746533870697, -0.07346545904874802, 0.09163371473550797, -0.028055965900421143, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.027650030329823494, 0.09523473680019379, -0.07562922686338425, + -0.4507474899291992, -0.07562922686338425, 0.09523473680019379, -0.027650030329823494, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.027157779783010483, 0.09892591834068298, -0.0777965635061264, + -0.4491013288497925, -0.0777965635061264, 0.09892591834068298, -0.027157779783010483, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.026589322835206985, 0.1027168408036232, -0.07998006790876389, + -0.44669103622436523, -0.07998006790876389, 0.1027168408036232, -0.026589322835206985, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.025954334065318108, 0.10661372542381287, -0.08218786865472794, + -0.44356945157051086, -0.08218786865472794, 0.10661372542381287, -0.025954334065318108, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.025261957198381424, 0.11062012612819672, -0.08442433178424835, + -0.4397867023944855, -0.08442433178424835, 0.11062012612819672, -0.025261957198381424, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.024520523846149445, 0.11473678052425385, -0.08668889850378036, + -0.4353906810283661, -0.08668889850378036, 0.11473678052425385, -0.024520523846149445, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02373819425702095, 0.11896038055419922, -0.08897679299116135, + -0.43042629957199097, -0.08897679299116135, 0.11896038055419922, -0.02373819425702095, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.022922333329916, 0.12328525632619858, -0.09127941727638245, -0.4249361753463745, + -0.09127941727638245, 0.12328525632619858, -0.022922333329916, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.022079985588788986, 0.127702534198761, -0.0935840904712677, -0.4189605116844177, + -0.0935840904712677, 0.127702534198761, -0.022079985588788986, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02121748961508274, 0.1321999728679657, -0.09587381035089493, + -0.4125367999076843, -0.09587381035089493, 0.1321999728679657, -0.02121748961508274, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.02034100890159607, 0.1367630809545517, -0.09812913089990616, + -0.405701220035553, -0.09812913089990616, 0.1367630809545517, -0.02034100890159607, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.019456034526228905, 0.1413743644952774, -0.10032672435045242, + -0.398487389087677, -0.10032672435045242, 0.1413743644952774, -0.019456034526228905, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.018567770719528198, 0.14601396024227142, -0.10244099050760269, + -0.39092665910720825, -0.10244099050760269, 0.14601396024227142, -0.018567770719528198, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01768084429204464, 0.15065990388393402, -0.10444410890340805, + -0.38305002450942993, -0.10444410890340805, 0.15065990388393402, -0.01768084429204464, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01679963991045952, 0.15528815984725952, -0.10630634427070618, + -0.37488579750061035, -0.10630634427070618, 0.15528815984725952, -0.01679963991045952, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.015928013250231743, 0.15987275540828705, -0.10799697041511536, + -0.36646148562431335, -0.10799697041511536, 0.15987275540828705, -0.015928013250231743, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.015069420449435711, 0.1643866002559662, -0.10948475450277328, + -0.3578035831451416, -0.10948475450277328, 0.1643866002559662, -0.015069420449435711, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.014226973056793213, 0.16880139708518982, -0.11073878407478333, + -0.34893739223480225, -0.11073878407478333, 0.16880139708518982, -0.014226973056793213, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.013403373770415783, 0.1730879694223404, -0.1117289736866951, + -0.3398880064487457, -0.1117289736866951, 0.1730879694223404, -0.013403373770415783, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.012600874528288841, 0.17721682786941528, -0.11242719739675522, + -0.330679327249527, -0.11242719739675522, 0.17721682786941528, -0.012600874528288841, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.011821364983916283, 0.18115857243537903, -0.11280807107686996, + -0.3213352560997009, -0.11280807107686996, 0.18115857243537903, -0.011821364983916283, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.011066386476159096, 0.18488405644893646, -0.11284933239221573, + -0.3118794560432434, -0.11284933239221573, 0.18488405644893646, -0.011066386476159096, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01033704075962305, 0.18836508691310883, -0.11253362149000168, + -0.30233556032180786, -0.11253362149000168, 0.18836508691310883, -0.01033704075962305, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00963413342833519, 0.19157497584819794, -0.11184865981340408, + -0.2927268445491791, -0.11184865981340408, 0.19157497584819794, -0.00963413342833519, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.008958141319453716, 0.19448859989643097, -0.11078806221485138, + -0.2830767035484314, -0.11078806221485138, 0.19448859989643097, -0.008958141319453716, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.008309177123010159, 0.1970834732055664, -0.10935229808092117, + -0.27340880036354065, -0.10935229808092117, 0.1970834732055664, -0.008309177123010159, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007687107659876347, 0.1993395835161209, -0.10754868388175964, + -0.2637467086315155, -0.10754868388175964, 0.1993395835161209, -0.007687107659876347, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007091577630490065, 0.20123997330665588, -0.10539182275533676, + -0.2541135549545288, -0.10539182275533676, 0.20123997330665588, -0.007091577630490065, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.006522083189338446, 0.20277148485183716, -0.10290395468473434, + -0.24453258514404297, -0.10290395468473434, 0.20277148485183716, -0.006522083189338446, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0059779635630548, 0.2039242386817932, -0.10011380165815353, -0.2350267618894577, + -0.10011380165815353, 0.2039242386817932, -0.0059779635630548, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005458514206111431, 0.2046925276517868, -0.09705696254968643, + -0.22561779618263245, -0.09705696254968643, 0.2046925276517868, -0.005458514206111431, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0049630203284323215, 0.20507413148880005, -0.09377375990152359, + -0.2163269966840744, -0.09377375990152359, 0.20507413148880005, -0.0049630203284323215, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0044908723793923855, 0.20507092773914337, -0.09030934423208237, + -0.20717431604862213, -0.09030934423208237, 0.20507092773914337, -0.0044908723793923855, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0040415250696241856, 0.20468801259994507, -0.08671103417873383, + -0.1981782466173172, -0.08671103417873383, 0.20468801259994507, -0.0040415250696241856, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.003614600747823715, 0.20393367111682892, -0.08302763849496841, + -0.18935580551624298, -0.08302763849496841, 0.20393367111682892, -0.003614600747823715, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.003209988819435239, 0.20281891524791718, -0.07930722832679749, + -0.18072181940078735, -0.07930722832679749, 0.20281891524791718, -0.003209988819435239, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.002827652730047703, 0.20135723054409027, -0.07559610158205032, + -0.172289177775383, -0.07559610158205032, 0.20135723054409027, -0.002827652730047703, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.002467875136062503, 0.19956329464912415, -0.07193643599748611, + -0.16406872868537903, -0.07193643599748611, 0.19956329464912415, -0.002467875136062503, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.002131084678694606, 0.1974533200263977, -0.06836587935686111, + -0.15606904029846191, -0.06836587935686111, 0.1974533200263977, -0.002131084678694606, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0018179182661697268, 0.19504395127296448, -0.06491625308990479, + -0.14829668402671814, -0.06491625308990479, 0.19504395127296448, -0.0018179182661697268, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0015290811425074935, 0.19235187768936157, -0.06161249056458473, + -0.14075618982315063, -0.06161249056458473, 0.19235187768936157, -0.0015290811425074935, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001265446888282895, 0.1893940567970276, -0.058473143726587296, + -0.1334502398967743, -0.058473143726587296, 0.1893940567970276, -0.001265446888282895, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0010277990950271487, 0.1861863136291504, -0.0555095337331295, + -0.12637995183467865, -0.0555095337331295, 0.1861863136291504, -0.0010277990950271487, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0008169457432813942, 0.1827445775270462, -0.05272701010107994, + -0.11954526603221893, -0.05272701010107994, 0.1827445775270462, -0.0008169457432813942, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0006335571524687111, 0.1790834367275238, -0.05012459307909012, + -0.11294465512037277, -0.05012459307909012, 0.1790834367275238, -0.0006335571524687111, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00047817229642532766, 0.17521724104881287, -0.04769640415906906, + -0.10657608509063721, -0.04769640415906906, 0.17521724104881287, -0.00047817229642532766, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00035108724841848016, 0.17115943133831024, -0.04543240740895271, + -0.10043668001890182, -0.04543240740895271, 0.17115943133831024, -0.00035108724841848016, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0002523305593058467, 0.1669231802225113, -0.04331935942173004, + -0.09452326595783234, -0.04331935942173004, 0.1669231802225113, -0.0002523305593058467, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0001816786825656891, 0.16252149641513824, -0.04134185239672661, + -0.0888325646519661, -0.04134185239672661, 0.16252149641513824, -0.0001816786825656891, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0001385415525874123, 0.15796709060668945, -0.039483070373535156, + -0.08336105197668076, -0.039483070373535156, 0.15796709060668945, -0.0001385415525874123, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00012201418576296419, 0.15327294170856476, -0.03772589936852455, + -0.07810530811548233, -0.03772589936852455, 0.15327294170856476, -0.00012201418576296419, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00013087218394502997, 0.14845246076583862, -0.03605359420180321, + -0.07306210696697235, -0.03605359420180321, 0.14845246076583862, -0.00013087218394502997, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00016355092520825565, 0.143519327044487, -0.034450314939022064, + -0.0682283341884613, -0.034450314939022064, 0.143519327044487, -0.00016355092520825565, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0002181683958042413, 0.13848808407783508, -0.03290175646543503, + -0.06360108405351639, -0.03290175646543503, 0.13848808407783508, -0.0002181683958042413, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00029255897970870137, 0.13337376713752747, -0.03139543905854225, + -0.05917758494615555, -0.03139543905854225, 0.13337376713752747, -0.00029255897970870137, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00038428528932854533, 0.12819220125675201, -0.029920967295765877, + -0.05495520681142807, -0.029920967295765877, 0.12819220125675201, -0.00038428528932854533, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0004907248076051474, 0.12295985966920853, -0.028470167890191078, + -0.050931416451931, -0.028470167890191078, 0.12295985966920853, -0.0004907248076051474, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0006090461974963546, 0.11769392341375351, -0.02703707292675972, + -0.04710366204380989, -0.02703707292675972, 0.11769392341375351, -0.0006090461974963546, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0007363302283920348, 0.11241200566291809, -0.025617923587560654, + -0.0434693805873394, -0.025617923587560654, 0.11241200566291809, -0.0007363302283920348, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0008695641881786287, 0.10713217407464981, -0.024211009964346886, + -0.04002586379647255, -0.024211009964346886, 0.10713217407464981, -0.0008695641881786287, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001005734782665968, 0.10187261551618576, -0.022816350683569908, + -0.036770232021808624, -0.022816350683569908, 0.10187261551618576, -0.001005734782665968, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001141848391853273, 0.096651591360569, -0.021435631439089775, + -0.0336993969976902, -0.021435631439089775, 0.096651591360569, -0.001141848391853273, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0012750305468216538, 0.09148705750703812, -0.020071836188435555, + -0.030809881165623665, -0.020071836188435555, 0.09148705750703812, -0.0012750305468216538, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0014025489799678326, 0.08639659732580185, -0.018728945404291153, + -0.028097957372665405, -0.018728945404291153, 0.08639659732580185, -0.0014025489799678326, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001521859667263925, 0.08139698952436447, -0.01741165667772293, + -0.025559425354003906, -0.01741165667772293, 0.08139698952436447, -0.001521859667263925, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0016306756297126412, 0.07650411874055862, -0.016125129535794258, + -0.02318974770605564, -0.016125129535794258, 0.07650411874055862, -0.0016306756297126412, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0017270110547542572, 0.07173284888267517, -0.014874676242470741, + -0.020983939990401268, -0.014874676242470741, 0.07173284888267517, -0.0017270110547542572, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0018091596430167556, 0.06709672510623932, -0.013665584847331047, + -0.01893666945397854, -0.013665584847331047, 0.06709672510623932, -0.0018091596430167556, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0018757858779281378, 0.06260771304368973, -0.012502717785537243, + -0.01704215444624424, -0.012502717785537243, 0.06260771304368973, -0.0018757858779281378, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0019258895190432668, 0.05827636644244194, -0.011390605010092258, + -0.015294313430786133, -0.011390605010092258, 0.05827636644244194, -0.0019258895190432668, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0019588610157370567, 0.05411139503121376, -0.010333019308745861, + -0.013686691410839558, -0.010333019308745861, 0.05411139503121376, -0.0019588610157370567, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0019744287710636854, 0.0501200333237648, -0.009333113208413124, + -0.01221264898777008, -0.009333113208413124, 0.0501200333237648, -0.0019744287710636854, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00197267415933311, 0.046307578682899475, -0.008393150754272938, + -0.010865277610719204, -0.008393150754272938, 0.046307578682899475, -0.00197267415933311, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001954026287421584, 0.04267780855298042, -0.007514640688896179, + -0.00963754951953888, -0.007514640688896179, 0.04267780855298042, -0.001954026287421584, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0019192189211025834, 0.039232783019542694, -0.0066981990821659565, + -0.008522359654307365, -0.0066981990821659565, 0.039232783019542694, -0.0019192189211025834, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0018692405428737402, 0.03597303852438927, -0.005943672731518745, + -0.007512576878070831, -0.005943672731518745, 0.03597303852438927, -0.0018692405428737402, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0018053501844406128, 0.03289775550365448, -0.005250186659395695, + -0.0066011156886816025, -0.005250186659395695, 0.03289775550365448, -0.0018053501844406128, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0017289796378463507, 0.030004793778061867, -0.004616191145032644, + -0.005780999548733234, -0.004616191145032644, 0.030004793778061867, -0.0017289796378463507, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0016417385777458549, 0.02729089744389057, -0.004039556719362736, + -0.005045406986027956, -0.004039556719362736, 0.02729089744389057, -0.0016417385777458549, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001545333070680499, 0.024751821532845497, -0.0035176826640963554, + -0.0043877181597054005, -0.0035176826640963554, 0.024751821532845497, -0.001545333070680499, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001441558008082211, 0.02238256111741066, -0.0030476280953735113, + -0.003801563521847129, -0.0030476280953735113, 0.02238256111741066, -0.001441558008082211, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0013322342419996858, 0.020177418366074562, -0.0026261622551828623, + -0.0032808473333716393, -0.0026261622551828623, 0.020177418366074562, -0.0013322342419996858, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001219173544086516, 0.018130214884877205, -0.0022498806938529015, + -0.0028197888750582933, -0.0022498806938529015, 0.018130214884877205, -0.001219173544086516, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0011041491525247693, 0.016234444454312325, -0.0019153583562001586, + -0.00241292268037796, -0.0019153583562001586, 0.016234444454312325, -0.0011041491525247693, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.000988862244412303, 0.014483320526778698, -0.0016191245522350073, + -0.0020551246125251055, -0.0016191245522350073, 0.014483320526778698, -0.000988862244412303, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0008749112603254616, 0.012869988568127155, -0.0013578138314187527, + -0.0017416122136637568, -0.0013578138314187527, 0.012869988568127155, -0.0008749112603254616, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0007637704256922007, 0.011387553997337818, -0.0011281979968771338, + -0.0014679421437904239, -0.0011281979968771338, 0.011387553997337818, -0.0007637704256922007, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0006567739183083177, 0.010029202327132225, -0.0009272252791561186, + -0.0012300083180889487, -0.0009272252791561186, 0.010029202327132225, -0.0006567739183083177, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0005551002104766667, 0.008788234554231167, -0.0007520646322518587, + -0.001024032710120082, -0.0007520646322518587, 0.008788234554231167, -0.0005551002104766667, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00045975667308084667, 0.007658129092305899, -0.0006001081201247871, + -0.0008465482969768345, -0.0006001081201247871, 0.007658129092305899, -0.00045975667308084667, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00037157683982513845, 0.0066325790248811245, -0.0004690028727054596, + -0.0006943886983208358, -0.0004690028727054596, 0.0066325790248811245, -0.00037157683982513845, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00029121898114681244, 0.0057054986245930195, -0.00035662937443703413, + -0.0005646670470014215, -0.00035662937443703413, 0.0057054986245930195, -0.00029121898114681244, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00021916035620961338, 0.00487104058265686, -0.0002611011441331357, + -0.0004547596618067473, -0.0002611011441331357, 0.00487104058265686, -0.00021916035620961338, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00015570360119454563, 0.004123591352254152, -0.00018074382387567312, + -0.0003622868680395186, -0.00018074382387567312, 0.004123591352254152, -0.00015570360119454563, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00010097896301886067, 0.003457761136814952, -0.00011407534475438297, + -0.000285094982245937, -0.00011407534475438297, 0.003457761136814952, -0.00010097896301886067, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -5.4951367928879336e-05, 0.0028683540876954794, -5.9777670685434714e-05, + -0.00022123436792753637, -5.9777670685434714e-05, 0.0028683540876954794, -5.4951367928879336e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -1.7429461877327412e-05, 0.0023503636475652456, -1.666152456891723e-05, + -0.00016894661530386657, -1.666152456891723e-05, 0.0023503636475652456, -1.7429461877327412e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 1.1927386367460713e-05, 0.0018989337841048837, 1.636104025237728e-05, + -0.00012664461974054575, 1.636104025237728e-05, 0.0018989337841048837, 1.1927386367460713e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 3.359601032570936e-05, 0.0015093344263732433, 4.030536729260348e-05, + -9.289818990509957e-05, 4.030536729260348e-05, 0.0015093344263732433, 3.359601032570936e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 4.818113302462734e-05, 0.001176935387775302, 5.615298869088292e-05, + -6.642034713877365e-05, 5.615298869088292e-05, 0.001176935387775302, 4.818113302462734e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 5.640164090436883e-05, 0.0008971710922196507, 6.487464270321652e-05, + -4.605400681612082e-05, 6.487464270321652e-05, 0.0008971710922196507, 5.640164090436883e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 5.907891318202019e-05, 0.0006655191536992788, 6.745915743522346e-05, + -3.0761824746150523e-05, 6.745915743522346e-05, 0.0006655191536992788, 5.907891318202019e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 5.712369238608517e-05, 0.0004774775879923254, 6.493427645182237e-05, + -1.9616374629549682e-05, 6.493427645182237e-05, 0.0004774775879923254, 5.712369238608517e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 5.152165613253601e-05, 0.0003285413549747318, 5.838176002725959e-05, + -1.1792317309300415e-05, 5.838176002725959e-05, 0.0003285413549747318, 5.152165613253601e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 4.331897071097046e-05, 0.0002141948789358139, 4.8946971219265833e-05, + -6.56032307233545e-06, 4.8946971219265833e-05, 0.0002141948789358139, 4.331897071097046e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 3.360482878633775e-05, 0.00012989896640647203, 3.7837718991795555e-05, + -3.2820951219036942e-06, 3.7837718991795555e-05, 0.00012989896640647203, 3.360482878633775e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 2.3491662432206795e-05, 7.109759462764487e-05, 2.6312056434107944e-05, + -1.4074875025471556e-06, 2.6312056434107944e-05, 7.109759462764487e-05, 2.3491662432206795e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 1.4088440366322175e-05, 3.3226398954866454e-05, 1.5646359315724112e-05, + -4.728907185835851e-07, 1.5646359315724112e-05, 3.3226398954866454e-05, 1.4088440366322175e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 6.461486464104382e-06, 1.1738436114683282e-05, 7.074640961945988e-06, + -1.0173076248065627e-07, 7.074640961945988e-06, 1.1738436114683282e-05, 6.461486464104382e-06, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 1.5614931498930673e-06, 2.141876848327229e-06, 1.666849925641145e-06, + -7.360528631039642e-09, 1.666849925641145e-06, 2.141876848327229e-06, 1.5614931498930673e-06, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +q20: 1.0 +replica: 34 +xgrid: [1e-09, 1.29708482343957e-09, 1.68242903474257e-09, 2.18225315420583e-09, 2.83056741739819e-09, + 3.67148597892941e-09, 4.76222862935315e-09, 6.1770142737618e-09, 8.01211109898438e-09, + 1.03923870607245e-08, 1.34798064073805e-08, 1.74844503691778e-08, 2.26788118881103e-08, + 2.94163370300835e-08, 3.81554746595878e-08, 4.94908707232129e-08, 6.41938295708371e-08, + 8.32647951986859e-08, 1.08001422993829e-07, 1.4008687308113e-07, 1.81704331793772e-07, + 2.35685551545377e-07, 3.05703512595323e-07, 3.96522309841747e-07, 5.1432125723657e-07, + 6.67115245136676e-07, 8.65299922973143e-07, 1.12235875241487e-06, 1.45577995547683e-06, + 1.88824560514613e-06, 2.44917352454946e-06, 3.17671650028717e-06, 4.12035415232797e-06, + 5.3442526575209e-06, 6.93161897806315e-06, 8.99034258238145e-06, 1.16603030112258e-05, + 1.51228312288769e-05, 1.96129529349212e-05, 2.54352207134502e-05, 3.29841683435992e-05, + 4.27707053972016e-05, 5.54561248105849e-05, 7.18958313632514e-05, 9.31954227979614e-05, + 0.00012078236773133, 0.000156497209466554, 0.000202708936328495, 0.000262459799331951, + 0.000339645244168985, 0.000439234443000422, 0.000567535660104533, 0.000732507615725537, + 0.000944112105452451, 0.00121469317686978, 0.00155935306118224, 0.00199627451141338, + 0.00254691493736552, 0.00323597510213126, 0.00409103436509565, 0.00514175977083962, + 0.00641865096062317, 0.00795137940306351, 0.009766899996241, 0.0118876139251364, + 0.0143298947643919, 0.0171032279460271, 0.0202100733925079, 0.0236463971369542, + 0.0274026915728357, 0.0314652506132444, 0.0358174829282429, 0.0404411060163317, + 0.0453171343973807, 0.0504266347950069, 0.0557512610084339, 0.0612736019390519, + 0.0669773829498255, 0.0728475589986517, 0.0788703322292727, 0.0850331197801452, + 0.0913244910278679, 0.0977340879783772, 0.104252538208639, 0.110871366547237, 0.117582909372878, + 0.124380233801599, 0.131257062945031, 0.138207707707289, 0.145227005135651, 0.152310263065985, + 0.159453210652156, 0.166651954293987, 0.173902938455578, 0.181202910873333, 0.188548891679097, + 0.195938145999193, 0.203368159629765, 0.210836617429103, 0.218341384106561, 0.225880487124065, + 0.233452101459503, 0.241054536011681, 0.248686221452762, 0.256345699358723, 0.264031612468684, + 0.271742695942783, 0.279477769504149, 0.287235730364833, 0.295015546847664, 0.302816252626866, + 0.310636941519503, 0.318476762768082, 0.326334916761672, 0.334210651149156, 0.342103257303627, + 0.350012067101685, 0.357936449985571, 0.365875810279643, 0.373829584735962, 0.381797240286494, + 0.389778271981947, 0.397772201099286, 0.40577857340234, 0.413796957540671, 0.421826943574548, + 0.429868141614175, 0.437920180563205, 0.44598270695699, 0.454055383887562, 0.462137890007651, + 0.470229918607142, 0.478331176755675, 0.486441384506059, 0.494560274153348, 0.502687589545177, + 0.510823085439086, 0.518966526903235, 0.527117688756998, 0.535276355048428, 0.543442318565661, + 0.551615380379768, 0.559795349416641, 0.5679820420558, 0.576175281754088, 0.584374898692498, + 0.59258072944444, 0.60079261666395, 0.609010408792398, 0.61723395978245, 0.625463128838069, + 0.633697780169485, 0.641937782762089, 0.650183010158361, 0.658433340251944, 0.666688655093089, + 0.674948840704708, 0.683213786908386, 0.691483387159697, 0.699757538392251, 0.708036140869916, + 0.716319098046733, 0.724606316434025, 0.732897705474271, 0.741193177421404, 0.749492647227008, + 0.757796032432224, 0.766103253064927, 0.774414231541921, 0.782728892575836, 0.791047163086478, + 0.799368972116378, 0.807694250750291, 0.816022932038457, 0.824354950923382, 0.832690244169987, + 0.841028750298844, 0.8493704095226, 0.857715163684985, 0.866062956202683, 0.874413732009721, + 0.882767437504206, 0.891124020497459, 0.899483430165226, 0.907845617001021, 0.916210532771399, + 0.924578130473112, 0.932948364292029, 0.941321189563734, 0.949696562735755, 0.958074441331298, + 0.966454783914439, 0.974837550056705, 0.983222700304978, 0.991610196150662, 1.0] diff --git a/extra_tests/regression_fits/polarized_evol_34.json b/extra_tests/regression_fits/polarized_evol_34.json new file mode 100644 index 0000000000..c185258ef1 --- /dev/null +++ b/extra_tests/regression_fits/polarized_evol_34.json @@ -0,0 +1,70 @@ +{ + "preprocessing": [ + { + "fl": "sng", + "smallx": 1.1170960664749146, + "largex": 2.212820053100586, + "trainable": false + }, + { + "fl": "g", + "smallx": 1.1055147647857666, + "largex": 3.78946852684021, + "trainable": false + }, + { + "fl": "t3", + "smallx": -0.2786402702331543, + "largex": 3.328169822692871, + "trainable": false + }, + { + "fl": "t8", + "smallx": 0.7509292364120483, + "largex": 3.1066815853118896, + "trainable": false + } + ], + "stop_epoch": 435, + "best_epoch": 323, + "erf_tr": 1.2238341569900513, + "erf_vl": 3.0599794387817383, + "chi2": 1.109000325202942, + "pos_state": "POS_PASS", + "arc_lengths": [ + 1.0326780832672715, + 1.014154549694492, + 0.9899487587939698, + 0.9899487587939698, + 0.9899487587939698 + ], + "integrability": [ + 1.0061396160665481e-16, + 1.734723475976807e-17, + 3.122502256758253e-17, + 0.008682500803843137, + 7.979727989493313e-17 + ], + "timing": { + "walltime": { + "Total": 18.630010843276978, + "start": 0.0, + "replica_set": 0.249741792678833, + "replica_fitted": 18.62974452972412, + "replica_set_to_replica_fitted": 18.380002737045288 + }, + "cputime": { + "Total": 19.099821179000003, + "start": 0.0, + "replica_set": 0.24700718099999985, + "replica_fitted": 19.099551677, + "replica_set_to_replica_fitted": 18.852544496 + } + }, + "version": { + "tensorflow": "2.16.1, mkl=??", + "numpy": "1.26.4", + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" + } +} diff --git a/extra_tests/regression_fits/single_dense_316.json b/extra_tests/regression_fits/single_dense_316.json index f009047b54..97bad55b75 100644 --- a/extra_tests/regression_fits/single_dense_316.json +++ b/extra_tests/regression_fits/single_dense_316.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 30.499980926513672, + "Total": 34.44913601875305, "start": 0.0, - "replica_set": 0.24414348602294922, - "replica_fitted": 30.499889612197876, - "replica_set_to_replica_fitted": 30.255746126174927 + "replica_set": 0.25393104553222656, + "replica_fitted": 34.448877811431885, + "replica_set_to_replica_fitted": 34.19494676589966 }, "cputime": { - "Total": 31.149875994999995, + "Total": 35.914583166, "start": 0.0, - "replica_set": 0.5663533699999999, - "replica_fitted": 31.149782650999995, - "replica_set_to_replica_fitted": 30.583429280999997 + "replica_set": 0.24511515099999936, + "replica_fitted": 35.914323130999996, + "replica_set_to_replica_fitted": 35.669207979999996 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/trainable_prepro_61.json b/extra_tests/regression_fits/trainable_prepro_61.json index 85dd251a30..5c426e7b05 100644 --- a/extra_tests/regression_fits/trainable_prepro_61.json +++ b/extra_tests/regression_fits/trainable_prepro_61.json @@ -71,24 +71,24 @@ ], "timing": { "walltime": { - "Total": 31.86877465248108, + "Total": 34.79690074920654, "start": 0.0, - "replica_set": 0.26708412170410156, - "replica_fitted": 31.86863875389099, - "replica_set_to_replica_fitted": 31.60155463218689 + "replica_set": 0.24268245697021484, + "replica_fitted": 34.79669666290283, + "replica_set_to_replica_fitted": 34.55401420593262 }, "cputime": { - "Total": 32.985740084, + "Total": 36.326103099, "start": 0.0, - "replica_set": 0.5635142529999992, - "replica_fitted": 32.985602307, - "replica_set_to_replica_fitted": 32.422088054 + "replica_set": 0.24133399599999983, + "replica_fitted": 36.325896654, + "replica_set_to_replica_fitted": 36.084562657999996 } }, "version": { "tensorflow": "2.16.1, mkl=??", "numpy": "1.26.4", - "nnpdf": "4.0.9.post446.dev0+264ada234", - "validphys": "4.0.9.post446.dev0+264ada234" + "nnpdf": "4.0.9.post576.dev0+47a077fe1", + "validphys": "4.0.9.post576.dev0+47a077fe1" } } diff --git a/extra_tests/regression_fits/weights_polevol.weights.h5 b/extra_tests/regression_fits/weights_polevol.weights.h5 new file mode 100644 index 0000000000..351d53d501 Binary files /dev/null and b/extra_tests/regression_fits/weights_polevol.weights.h5 differ diff --git a/n3fit/runcards/examples/nnpdfpol20_dis_nnlo.yaml b/n3fit/runcards/examples/nnpdfpol20_dis_nnlo.yaml new file mode 100644 index 0000000000..06169ddc66 --- /dev/null +++ b/n3fit/runcards/examples/nnpdfpol20_dis_nnlo.yaml @@ -0,0 +1,102 @@ +############################################################ +# Configuration file for N3FIT +############################################################ +description: NNPDFpol2.0 NNLO DIS fit with ID822 (W2min=4) + +############################################################ +dataset_inputs: +- {dataset: COMPASS15_NC_NOTFIXED_MUP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: COMPASS15_NC_NOTFIXED_MUD_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E142_NC_NOTFIXED_EN_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E143_NC_NOTFIXED_EP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E143_NC_NOTFIXED_ED_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E154_NC_9GEV_EN_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E155_NC_9GEV_EN_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: E155_NC_9GEV_EP_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: EMC_NC_NOTFIXED_MUP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: HERMES_NC_7GEV_ED_G1, frac: 0.60, cfac: [NRM]} +- {dataset: HERMES_NC_7GEV_EP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: HERMES97_NC_7GEV_EN_G1, frac: 0.60, cfac: [NRM]} +- {dataset: JLABE06_NC_3GEV_EN_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: JLABEG1B_NC_NOTFIXED_EP_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: JLABEG1B_NC_NOTFIXED_ED_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: JLABE97_NC_NOTFIXED_EN_G1, frac: 0.60, cfac: [NRM]} +- {dataset: JLABE99_NC_3GEV_EN_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: JLABEG1DVCS_NC_5GEV_ED_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: JLABEG1DVCS_NC_3GEV_EP_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: SMC_NC_NOTFIXED_MUD_G1, frac: 0.60, cfac: [NRM]} +- {dataset: SMC_NC_NOTFIXED_MUP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: SMCSX_NC_24GEV_MUD_G1F1RATIO, frac: 0.60, cfac: [NRM]} +- {dataset: SMCSX_NC_17GEV_MUP_G1F1RATIO, frac: 0.60, cfac: [NRM]} + +############################################################ +datacuts: + t0pdfset: NNPDFpol10_100 # PDF set to generate t0 covmat + q2min: 1.00 # Q2 minimum + w2min: 4.00 # W2 minimum + +############################################################ +# Define the unpolarized PDF set to be used as BC for POS +positivity_bound: + unpolarized_bc: NNPDF40_nnlo_pch_as_01180 + n_std: 1.00 # Standard Deviation to be added as Error + +############################################################ +theory: + theoryid: 822 + +############################################################ +trvlseed: 14613416 +nnseed: 1865683875 +mcseed: 746898422 +save: false +genrep: true + +parameters: + nodes_per_layer: [25, 20, 4] + activation_per_layer: [tanh, tanh, linear] + initializer: glorot_normal + optimizer: + clipnorm: 6.073e-6 + learning_rate: 2.621e-3 + optimizer_name: Nadam + epochs: 20000 + positivity: + initial: 1 + multiplier: + threshold: 1e-7 + integrability: + initial: 1 + multiplier: + threshold: 1e-2 + stopping_patience: 0.1 + layer_type: dense + dropout: 0.0 + threshold_chi2: 3.5 + +fitting: + fitbasis: POLARIZED_EVOL + sum_rules: TSR + basis: + - {fl: sng, trainable: false, smallx: [1.094, 1.118], largex: [1.46, 3.003]} + - {fl: g, trainable: false, smallx: [0.8189, 1.844], largex: [2.591, 5.697]} + - {fl: t3, trainable: false, smallx: [-0.4401, 0.9163], largex: [1.773, 3.333]} + - {fl: t8, trainable: false, smallx: [0.5852, 0.8537], largex: [1.533, 3.436]} + +########################################################### +positivity: + posdatasets: + - {dataset: NNPDF_POS_2P24GEV_XGL-POLARIZED, maxlambda: 1e8} + - {dataset: NNPDF_POS_2P24GEV_XDQ-POLARIZED, maxlambda: 1e8} + - {dataset: NNPDF_POS_2P24GEV_XSQ-POLARIZED, maxlambda: 1e8} + - {dataset: NNPDF_POS_2P24GEV_XUQ-POLARIZED, maxlambda: 1e8} + +############################################################ +integrability: + integdatasets: + - {dataset: NNPDF_INTEG_1GEV_XGL-POLARIZED, maxlambda: 1e2} + - {dataset: NNPDF_INTEG_1GEV_XSIGMA-POLARIZED, maxlambda: 1e2} + +############################################################ +debug: false +maxcores: 4 diff --git a/n3fit/src/n3fit/checks.py b/n3fit/src/n3fit/checks.py index 70fec9bd44..cea5797550 100644 --- a/n3fit/src/n3fit/checks.py +++ b/n3fit/src/n3fit/checks.py @@ -6,13 +6,10 @@ import numbers import os -import numpy as np - from n3fit.hyper_optimization import penalties as penalties_module from n3fit.hyper_optimization import rewards as rewards_module from n3fit.hyper_optimization.rewards import IMPLEMENTED_LOSSES, IMPLEMENTED_STATS from reportengine.checks import CheckError, make_argcheck -from validphys.core import PDF from validphys.pdfbases import check_basis log = logging.getLogger(__name__) @@ -354,7 +351,7 @@ def check_sumrules(sum_rules): """Checks that the chosen option for the sum rules are sensible""" if isinstance(sum_rules, bool): return - accepted_options = ["ALL", "MSR", "VSR", "ALLBUTCSR"] + accepted_options = ["ALL", "MSR", "VSR", "TSR", "ALLBUTCSR"] if sum_rules.upper() in accepted_options: return raise CheckError(f"The only accepted options for the sum rules are: {accepted_options}") @@ -448,3 +445,18 @@ def check_multireplica_qed(replicas, fiatlux): if fiatlux is not None: if len(replicas) > 1: raise CheckError("At the moment, running a multireplica QED fits is not allowed.") + + +@make_argcheck +def check_polarized_configs(fitting, fitbasis, positivity_bound): + if fitbasis.startswith("POLARIZED_"): + if positivity_bound is None: + raise CheckError( + "For polarized fits, the 'positivity_bound' key has to be defined in the runcard." + ) + if positivity_bound.get("unpolarized_bc") is None: + raise CheckError( + "For polarized fits, the name of the PDF has to be defined in positivity_bound::unpolarized_bc." + ) + if fitting.get("sum_rules", True) and fitting.get("sum_rules") != "TSR": + raise CheckError("The 'sum_rules' key needs to be 'TSR' for polarised PDF fits.") diff --git a/n3fit/src/n3fit/layers/losses.py b/n3fit/src/n3fit/layers/losses.py index 1d330ef8f5..b33547a6ce 100644 --- a/n3fit/src/n3fit/layers/losses.py +++ b/n3fit/src/n3fit/layers/losses.py @@ -7,6 +7,7 @@ and the covmat. """ + import numpy as np from n3fit.backends import MetaLayer diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 7fa32c454c..7695d4f11f 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -6,12 +6,28 @@ to compute the normalization. Note that for a Nf=4 fit `v35=v24=v`. If the number of flavours were to be changed in the future, this would need to be updated accordingly. """ + import numpy as np from n3fit.backends import MetaLayer from n3fit.backends import operations as op -IDX = {'photon': 0, 'sigma': 1, 'g': 2, 'v': 3, 'v3': 4, 'v8': 5, 'v15': 6, 'v24': 7, 'v35': 8} +IDX = { + 'photon': 0, + 'sigma': 1, + 'g': 2, + 'v': 3, + 'v3': 4, + 'v8': 5, + 'v15': 6, + 'v24': 7, + 'v35': 8, + 't3': 9, + 't8': 10, + 't15': 11, + 't24': 12, + 't35': 13, +} MSR_COMPONENTS = ['g'] MSR_DENOMINATORS = {'g': 'g'} # The VSR normalization factor of component f is given by @@ -20,23 +36,60 @@ VSR_CONSTANTS = {'v': 3.0, 'v35': 3.0, 'v24': 3.0, 'v3': 1.0, 'v8': 3.0, 'v15': 3.0} VSR_DENOMINATORS = {'v': 'v', 'v35': 'v', 'v24': 'v', 'v3': 'v3', 'v8': 'v8', 'v15': 'v15'} -CSR_COMPONENTS = ['v','v35','v24'] +CSR_COMPONENTS = ['v', 'v35', 'v24'] CSR_DENOMINATORS = {'v': 'v', 'v35': 'v', 'v24': 'v'} NOV15_COMPONENTS = ['v3', 'v8'] NOV15_CONSTANTS = {'v3': 1.0, 'v8': 3.0} NOV15_DENOMINATORS = {'v3': 'v3', 'v8': 'v8'} +# The following lays out the SR for Polarised PDFs +TSR_COMPONENTS = ['t3', 't8'] +TSR_DENOMINATORS = {'t3': 't3', 't8': 't8'} +# Sum Rules defined as in PDG 2023 (cv, std) +TSR_CONSTANTS = {'t3': 1.2756, 't8': 0.5850} +TSR_CONSTANTS_UNC = {'t3': 0.0013, 't8': 0.025} + + +def sample_tsr(sampler, component) -> list: + """ + Sample the Triplets sum rules according to the PDG uncertainties. + + Parameters + ---------- + sampler: np.random.Generator + Numpy Generator from which to sample the TSR + c: str + Component for which to sample from according to TSR_CONSTANTS + + Returns + ------- + float: + value of the sum rule for this replica for this component + sampled according to a normal distribution + """ + cv = TSR_CONSTANTS[component] + std = TSR_CONSTANTS_UNC[component] + return sampler.normal(cv, std) + class MSR_Normalization(MetaLayer): """ Computes the normalisation factors for the sum rules of the PDFs. + + Parameters + ---------- + mode: str + The type of sum rule to apply, it can be one of ALL, MSR, VSR, TSR, ALLBUTCSR. + replica_seeds: List[int] + A list of seed-per-replica. Used to sample the polarized sum rules. """ _msr_enabled = False _vsr_enabled = False - _csr_enabled = False + _tsr_enabled = False + _csr_enabled = False - def __init__(self, mode: str = "ALL", replicas: int = 1, **kwargs): + def __init__(self, mode: str = "ALL", replica_seeds=None, **kwargs): if mode == True or mode.upper() == "ALL": self._msr_enabled = True self._vsr_enabled = True @@ -44,14 +97,19 @@ def __init__(self, mode: str = "ALL", replicas: int = 1, **kwargs): self._msr_enabled = True elif mode.upper() == "VSR": self._vsr_enabled = True - + elif mode.upper() == "TSR": + self._tsr_enabled = True elif mode.upper() == "ALLBUTCSR": self._msr_enabled = True self._csr_enabled = True else: raise ValueError(f"Mode {mode} not accepted for sum rules") - self.replicas = replicas + if replica_seeds is None: + self._replicas = 1 + else: + self._replicas = len(replica_seeds) + indices = [] self.divisor_indices = [] if self._msr_enabled: @@ -61,8 +119,21 @@ def __init__(self, mode: str = "ALL", replicas: int = 1, **kwargs): self.divisor_indices += [IDX[VSR_DENOMINATORS[c]] for c in VSR_COMPONENTS] indices += [IDX[c] for c in VSR_COMPONENTS] self.vsr_factors = op.numpy_to_tensor( - [np.repeat(VSR_CONSTANTS[c], replicas) for c in VSR_COMPONENTS] + [np.repeat(VSR_CONSTANTS[c], self._replicas) for c in VSR_COMPONENTS] ) + if self._tsr_enabled: + if replica_seeds is None: + raise ValueError("To use sum_rules=TSR a list of seeds must be provided") + + self.divisor_indices += [IDX[TSR_DENOMINATORS[c]] for c in TSR_COMPONENTS] + indices += [IDX[c] for c in TSR_COMPONENTS] + + tsr_factors_per_replica = [] + for seed in replica_seeds: + sampler = np.random.default_rng(seed) + tsr_factors_per_replica.append([sample_tsr(sampler, c) for c in TSR_COMPONENTS]) + self.tsr_factors = op.numpy_to_tensor(np.array(tsr_factors_per_replica).T) + if self._csr_enabled: # modified vsr for V, V24, V35 indices += [IDX[c] for c in CSR_COMPONENTS] @@ -71,7 +142,7 @@ def __init__(self, mode: str = "ALL", replicas: int = 1, **kwargs): self.divisor_indices += [IDX[NOV15_DENOMINATORS[c]] for c in NOV15_COMPONENTS] indices += [IDX[c] for c in NOV15_COMPONENTS] self.vsr_factors = op.numpy_to_tensor( - [np.repeat(NOV15_CONSTANTS[c], replicas) for c in NOV15_COMPONENTS] + [np.repeat(NOV15_CONSTANTS[c], self._replicas) for c in NOV15_COMPONENTS] ) # Need this extra dimension for the scatter_to_one operation self.indices = [[i] for i in indices] @@ -114,11 +185,13 @@ def call(self, pdf_integrated, photon_integral): ] if self._vsr_enabled: numerators += [self.vsr_factors] + if self._tsr_enabled: + numerators += [self.tsr_factors] if self._csr_enabled: - numerators += len(CSR_COMPONENTS)*[op.batchit(4.0 - 1./3. * y[IDX['v15']], batch_dimension=0)] + numerators += len(CSR_COMPONENTS) * [ + op.batchit(4.0 - 1.0 / 3.0 * y[IDX['v15']], batch_dimension=0) + ] numerators += [self.vsr_factors] - - numerators = op.concatenate(numerators, axis=0) divisors = op.gather(y, self.divisor_indices, axis=0) @@ -126,7 +199,7 @@ def call(self, pdf_integrated, photon_integral): # Fill in the rest of the flavours with 1 num_flavours = y.shape[0] norm_constants = op.scatter_to_one( - numerators / divisors, indices=self.indices, output_shape=(num_flavours, self.replicas) + numerators / divisors, indices=self.indices, output_shape=(num_flavours, self._replicas) ) return op.batchit(op.transpose(norm_constants), batch_dimension=1) diff --git a/n3fit/src/n3fit/layers/observable.py b/n3fit/src/n3fit/layers/observable.py index b1a2d701b3..b6e2d30b09 100644 --- a/n3fit/src/n3fit/layers/observable.py +++ b/n3fit/src/n3fit/layers/observable.py @@ -4,6 +4,7 @@ from n3fit.backends import MetaLayer from n3fit.backends import operations as op +from validphys.pdfgrids import xplotting_grid def is_unique(list_of_arrays): @@ -15,6 +16,46 @@ def is_unique(list_of_arrays): return True +def compute_pdf_boundary(pdf, q0_value, xgrid, n_std, n_replicas): + """ + Computes the boundary conditions using an input PDF set. This is for instance + applied to the polarized fits in which the boundary condition is computed from + an unpolarized PDF set. The result is a Tensor object that can be understood + by the convolution. + + Parameters + ---------- + pdf: validphys.core.PDF + a validphys PDF instance to be used as a boundary PDF set + q0_value: float + starting scale of the theory as defined in the FK tables + xgrid: np.ndarray + a grid containing the x-values to be given as input to the PDF + n_std: int + integer representing the shift to the CV w.r.t. the standard + deviation + n_replicas: int + number of replicas fitted simultaneously + + Returns + ------- + tf.tensor: + a tensor object that has the same shape of the output of the NN + """ + xpdf_obj = xplotting_grid(pdf, q0_value, xgrid, basis="FK_BASIS") + # Transpose: take the shape from (n_fl, n_x) -> (n_x, n_fl) + xpdf_cvs = xpdf_obj.grid_values.central_value().T + xpdf_std = xpdf_obj.grid_values.std_error().T + + # Computes the shifted Central Value as given by `n_std` + xpdf_bound = xpdf_cvs + n_std * xpdf_std + + # Expand dimensions for multi-replicas and convert into tensor + mult_resx = np.repeat([xpdf_bound], n_replicas, axis=0) + add_batch_resx = np.expand_dims(mult_resx, axis=0) + return op.numpy_to_tensor(add_batch_resx) + + class Observable(MetaLayer, ABC): """ This class is the parent of the DIS and DY convolutions. @@ -39,20 +80,43 @@ class Observable(MetaLayer, ABC): number of flavours in the pdf (default:14) """ - def __init__(self, fktable_data, fktable_arr, operation_name, nfl=14, **kwargs): + def __init__( + self, + fktable_data, + fktable_arr, + dataset_name, + boundary_condition=None, + operation_name="NULL", + nfl=14, + n_replicas=1, + **kwargs + ): super(MetaLayer, self).__init__(**kwargs) + self.dataname = dataset_name self.nfl = nfl - self.num_replicas = None # set in build + self.boundary_pdf = [None] * len(fktable_data) + self.num_replicas = n_replicas # TODO: Is there a reason this had to be in build? self.compute_observable = None # A function (pdf, padded_fk) -> observable set in build all_bases = [] xgrids = [] fktables = [] - for fkdata, fk in zip(fktable_data, fktable_arr): + for idx, (fkdata, fk) in enumerate(zip(fktable_data, fktable_arr)): xgrids.append(fkdata.xgrid.reshape(1, -1)) all_bases.append(fkdata.luminosity_mapping) fktables.append(op.numpy_to_tensor(fk)) + + if self.is_pos_polarized() and not fkdata.is_polarized: + if boundary_condition is None: + raise ValueError("Polarized FKTables require a boundary condition") + self.boundary_pdf[idx] = compute_pdf_boundary( + pdf=boundary_condition["unpolarized_bc"], + q0_value=fkdata.Q0, + xgrid=fkdata.xgrid, + n_std=boundary_condition.get("n_std", 0.0), + n_replicas=n_replicas, + ) self.fktables = fktables # check how many xgrids this dataset needs @@ -72,8 +136,6 @@ def __init__(self, fktable_data, fktable_arr, operation_name, nfl=14, **kwargs): self.masks = [compute_float_mask(bool_mask) for bool_mask in self.all_masks] def build(self, input_shape): - self.num_replicas = input_shape[1] - # repeat the masks if necessary for fktables (if not, the extra copies # will get lost in the zip) masks = self.masks * len(self.fktables) @@ -101,8 +163,9 @@ def call(self, pdf): pdfs = [pdf] * len(self.padded_fk_tables) observables = [] - for pdf, padded_fk in zip(pdfs, self.padded_fk_tables): - observable = self.compute_observable(pdf, padded_fk) + for idx, (pdf, padded_fk) in enumerate(zip(pdfs, self.padded_fk_tables)): + pdf_to_convolute = pdf if self.boundary_pdf[idx] is None else self.boundary_pdf[idx] + observable = self.compute_observable(pdf_to_convolute, padded_fk) observables.append(observable) observables = self.operation(observables) @@ -117,6 +180,10 @@ def gen_mask(self, basis): def pad_fk(self, fk, mask): pass + def is_pos_polarized(self): + """Check if the given Positivity dataset contains Polarized FK tables by checking name.""" + return self.dataname.startswith("NNPDF_POS_") and self.dataname.endswith("-POLARIZED") + def compute_float_mask(bool_mask): """ diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index a55b56d2ba..61ae1c899f 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -22,23 +22,34 @@ class xDivide(MetaLayer): Create tensor of either 1/x or ones depending on the flavour, to be used to divide some PDFs by x by multiplying with the result. - By default it utilizes the 14-flavour FK basis and divides [v, v3, v8, v15] - which corresponds to indices (3, 4, 5, 6) from + By default it utilizes the 14-flavour FK basis. In the unpolarized + case, one divides [v, v3, v8, v15] which corresponds to indices + (3, 4, 5, 6) from the FK basis: + (photon, sigma, g, v, v3, v8, v15, v24, v35, t3, t8, t15, t24, t35) + In the polarized case, only [T3, T8] are divided by `x` which + corresponds to the indices (9, 10). + Parameters: ----------- output_dim: int dimension of the pdf div_list: list - list of indices to be divided by X (by default [3, 4, 5, 6]; [v, v3, v8, v15] + list of indices to be divided by `x` (by default [3, 4, 5, 6]; [v, v3, v8, v15] """ def __init__( - self, output_dim: int = BASIS_SIZE, div_list: Optional[List[int]] = None, **kwargs + self, + output_dim: int = BASIS_SIZE, + fitbasis: str = "NN31IC", + div_list: Optional[List[int]] = None, + **kwargs ): - if div_list is None: + if div_list is None: # Default value if unspecified for Unpolarized Case div_list = [3, 4, 5, 6] + div_list = [9, 10] if fitbasis.startswith("POLARIZED_") else div_list + self.output_dim = output_dim self.div_list = div_list super().__init__(**kwargs) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index e7341766f0..f45a0f7205 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -129,6 +129,7 @@ def __call__(self, pdf_layer, mask=None): def observable_generator( spec_dict, + boundary_condition=None, mask_array=None, training_data=None, validation_data=None, @@ -136,6 +137,7 @@ def observable_generator( invcovmat_vl=None, positivity_initial=1.0, integrability=False, + n_replicas=1, ): # pylint: disable=too-many-locals """ This function generates the observable models for each experiment. @@ -168,8 +170,15 @@ def observable_generator( ---------- spec_dict: dict a dictionary-like object containing the information of the experiment + boundary_condition: dict + dictionary containing the instance of the a PDF set to be used as a + Boundary Condition. + n_replicas: int + number of replicas fitted simultaneously positivity_initial: float set the positivity lagrange multiplier for epoch 1 + integrability: bool + switch on/off the integrability constraints Returns ------ @@ -206,7 +215,13 @@ def observable_generator( # these will then be used to check how many different pdf inputs are needed # (and convolutions if given the case) obs_layer = Obs_Layer( - dataset.fktables_data, dataset.fktables(), operation_name, name=f"dat_{dataset_name}" + dataset.fktables_data, + dataset.fktables(), + dataset_name, + boundary_condition, + operation_name, + n_replicas=n_replicas, + name=f"dat_{dataset_name}", ) # If the observable layer found that all input grids are equal, the splitting will be None @@ -468,7 +483,7 @@ def pdfNN_layer_generator( dropout: float rate of dropout layer by layer impose_sumrule: str - whether to impose sumrules on the output pdf and which one to impose (All, MSR, VSR) + whether to impose sumrules on the output pdf and which one to impose (All, MSR, VSR, TSR) scaler: callable Function to apply to the input. If given the input to the model will be a (1, None, 2) tensor where dim [:,:,0] is scaled @@ -511,7 +526,6 @@ def pdfNN_layer_generator( if regularizer_args is None: regularizer_args = dict() - number_of_layers = len(nodes) # The number of nodes in the last layer is equal to the number of fitted flavours last_layer_nodes = nodes[-1] # (== len(flav_info)) @@ -571,7 +585,7 @@ def pdfNN_layer_generator( # Normalization and sum rules if impose_sumrule: sumrule_layer, integrator_input = generate_msr_model_and_grid( - mode=impose_sumrule, scaler=scaler, replicas=num_replicas + fitbasis=fitbasis, mode=impose_sumrule, scaler=scaler, replica_seeds=seed ) model_input["integrator_input"] = integrator_input else: diff --git a/n3fit/src/n3fit/model_trainer.py b/n3fit/src/n3fit/model_trainer.py index 00562f25a3..0074a5692f 100644 --- a/n3fit/src/n3fit/model_trainer.py +++ b/n3fit/src/n3fit/model_trainer.py @@ -8,6 +8,7 @@ This allows to use hyperscanning libraries, that need to change the parameters of the network between iterations while at the same time keeping the amount of redundant calls to a minimum """ + from collections import namedtuple from itertools import zip_longest import logging @@ -99,6 +100,7 @@ def __init__( flavinfo, fitbasis, nnseeds, + boundary_condition, debug=False, kfold_parameters=None, max_cores=None, @@ -139,7 +141,7 @@ def __init__( object contining info for generating the photon lux_params: dict dictionary containing the params needed from LuxQED - replica_idxs: list + replicas: list list with the replicas ids to be fitted """ # Save all input information @@ -147,6 +149,7 @@ def __init__( self.pos_info = [] if pos_info is None else pos_info self.integ_info = [] if integ_info is None else integ_info self.all_info = self.exp_info[0] + self.pos_info + self.integ_info + self.boundary_condition = boundary_condition self.flavinfo = flavinfo self.fitbasis = fitbasis self._nn_seeds = nnseeds @@ -551,11 +554,13 @@ def _generate_observables( # Stacked tr-vl mask array for all replicas for this dataset exp_layer = model_gen.observable_generator( exp_dict, + self.boundary_condition, mask_array=experiment_data["trmask"][i], training_data=experiment_data["expdata"][i], validation_data=experiment_data["expdata_vl"][i], invcovmat_tr=experiment_data["invcovmat"][i], invcovmat_vl=experiment_data["invcovmat_vl"][i], + n_replicas=len(self.replicas), ) # Save the input(s) corresponding to this experiment @@ -583,10 +588,12 @@ def _generate_observables( pos_layer = model_gen.observable_generator( pos_dict, + self.boundary_condition, positivity_initial=pos_initial, mask_array=replica_masks, training_data=training_data, validation_data=training_data, + n_replicas=len(self.replicas), ) # The input list is still common self.input_list.append(pos_layer["inputs"]) @@ -611,7 +618,11 @@ def _generate_observables( ) integ_layer = model_gen.observable_generator( - integ_dict, positivity_initial=integ_initial, integrability=True + integ_dict, + self.boundary_condition, + positivity_initial=integ_initial, + integrability=True, + n_replicas=len(self.replicas), ) # The input list is still common self.input_list.append(integ_layer["inputs"]) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index e781a672d2..a9a30190c2 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -1,6 +1,7 @@ """ The constraint module include functions to impose the momentum sum rules on the PDFs """ + import logging from typing import Callable, Optional @@ -15,10 +16,11 @@ def generate_msr_model_and_grid( output_dim: int = 14, + fitbasis: str = "NN31IC", mode: str = "ALL", nx: int = int(2e3), scaler: Optional[Callable] = None, - replicas: int = 1, + replica_seeds: Optional[list] = None, ) -> MetaModel: """ Generates a model that applies the sum rules to the PDF. @@ -52,6 +54,7 @@ def generate_msr_model_and_grid( - values: the integration grid - input: the input layer of the integration grid """ + replicas = len(replica_seeds) # 0. Prepare input layers to MSR model pdf_x = Input(shape=(replicas, None, output_dim), batch_size=1, name="pdf_x") pdf_xgrid_integration = Input( @@ -77,7 +80,7 @@ def generate_msr_model_and_grid( x_original = get_original(xgrid_integration) # 2. Divide the grid by x depending on the flavour - x_divided = xDivide()(x_original) + x_divided = xDivide(fitbasis=fitbasis)(x_original) # 3. Prepare the pdf for integration by dividing by x pdf_integrand = Lambda( @@ -91,7 +94,7 @@ def generate_msr_model_and_grid( photon_integral = Input(shape=(replicas, 1), batch_size=1, name='photon_integral') # 6. Compute the normalization factor - normalization_factor = MSR_Normalization(mode, replicas, name="msr_weights")( + normalization_factor = MSR_Normalization(mode, replica_seeds, name="msr_weights")( pdf_integrated, photon_integral ) diff --git a/n3fit/src/n3fit/performfit.py b/n3fit/src/n3fit/performfit.py index 9447ad9279..04703ef924 100644 --- a/n3fit/src/n3fit/performfit.py +++ b/n3fit/src/n3fit/performfit.py @@ -19,6 +19,7 @@ @n3fit.checks.can_run_multiple_replicas @n3fit.checks.check_multireplica_qed @n3fit.checks.check_fiatlux_pdfs_id +@n3fit.checks.check_polarized_configs def performfit( *, experiments_data, @@ -31,6 +32,7 @@ def performfit( fiatlux, basis, fitbasis, + positivity_bound, sum_rules=True, parameters, replica_path, @@ -100,8 +102,8 @@ def performfit( fitbasis: str Valid basis which the fit is to be ran in. Available bases can be found in :py:mod:`validphys.pdfbases`. - sum_rules: bool - Whether to impose sum rules in fit. By default set to True + sum_rules: str + Whether to impose sum rules in fit. By default set to True="ALL" parameters: dict Mapping containing parameters which define the network architecture/fitting methodology. @@ -191,6 +193,7 @@ def performfit( basis, fitbasis, nnseeds, + positivity_bound, debug=debug, kfold_parameters=kfold_parameters, max_cores=maxcores, diff --git a/n3fit/src/n3fit/scripts/evolven3fit.py b/n3fit/src/n3fit/scripts/evolven3fit.py index d0509bee5e..7bf102b0f1 100644 --- a/n3fit/src/n3fit/scripts/evolven3fit.py +++ b/n3fit/src/n3fit/scripts/evolven3fit.py @@ -105,6 +105,7 @@ def main(): eko-based version of evolven3fit. """, ) + parser.add_argument('--use_polarized', action='store_true', help="Use polarized evolution") parser.add_argument( "-q", "--q-fin", type=float, default=None, help="Final q-value of the evolution" ) @@ -132,7 +133,11 @@ def main(): args = parser.parse_args() op_card_info = { - "configs": {"n_integration_cores": args.n_cores, "ev_op_iterations": args.ev_op_iterations} + "configs": { + "n_integration_cores": args.n_cores, + "ev_op_iterations": args.ev_op_iterations, + "polarized": args.use_polarized, + } } theory_card_info = {} diff --git a/n3fit/src/n3fit/scripts/n3fit_exec.py b/n3fit/src/n3fit/scripts/n3fit_exec.py index 8364db1e3f..2a749fa846 100755 --- a/n3fit/src/n3fit/scripts/n3fit_exec.py +++ b/n3fit/src/n3fit/scripts/n3fit_exec.py @@ -149,6 +149,12 @@ def from_yaml(cls, o, *args, **kwargs): N3FIT_FIXED_CONFIG['fiatlux'] = thconfig else: N3FIT_FIXED_CONFIG['fiatlux'] = None + + if thconfig := file_content.get('positivity_bound'): + N3FIT_FIXED_CONFIG['positivity_bound'] = thconfig + else: + N3FIT_FIXED_CONFIG['positivity_bound'] = None + # Theorycovmat flags and defaults N3FIT_FIXED_CONFIG['theory_covmat_flag'] = False N3FIT_FIXED_CONFIG['use_thcovmat_in_fitting'] = False diff --git a/n3fit/src/n3fit/scripts/vp_setupfit.py b/n3fit/src/n3fit/scripts/vp_setupfit.py index c2ce728acf..fe844117bb 100644 --- a/n3fit/src/n3fit/scripts/vp_setupfit.py +++ b/n3fit/src/n3fit/scripts/vp_setupfit.py @@ -163,6 +163,8 @@ def from_yaml(cls, o, *args, **kwargs): SETUPFIT_FIXED_CONFIG['actions_'].append('fiatlux check_luxset') if file_content.get('fiatlux')["additional_errors"]: SETUPFIT_FIXED_CONFIG['actions_'].append('fiatlux check_additional_errors') + if file_content.get('positivity_bound') is not None: + SETUPFIT_FIXED_CONFIG['actions_'].append('positivity_bound check_unpolarized_bc') for k, v in SETUPFIT_DEFAULTS.items(): file_content.setdefault(k, v) file_content.update(SETUPFIT_FIXED_CONFIG) diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_pol.yml b/n3fit/src/n3fit/tests/regressions/quickcard_pol.yml new file mode 100644 index 0000000000..94bc90414f --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_pol.yml @@ -0,0 +1,79 @@ +############################################################ +# Regression file to test Polarized PDF fits +############################################################ +description: N3FIT regression test for polarised fits + +############################################################ +dataset_inputs: +- {dataset: E143_NC_NOTFIXED_EP_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E143_NC_NOTFIXED_ED_G1, frac: 0.60, cfac: [NRM]} +- {dataset: E154_NC_9GEV_EN_G1, frac: 0.60, cfac: [NRM]} + +############################################################ +datacuts: + t0pdfset: NNPDFpol10_100 # PDF set to generate t0 covmat + q2min: 1.00 # Q2 minimum + w2min: 4.00 # W2 minimum + +############################################################ +# Define the unpolarized PDF set to be used as BC for POS +positivity_bound: + unpolarized_bc: NNPDF40_nnlo_pch_as_01180 + n_std: 1.00 # Standard Deviation to be added as Error + +############################################################ +theory: + theoryid: 822 + +############################################################ +genrep: True # on = generate MC replicas, False = use real data +trvlseed: 3 +nnseed: 2 +mcseed: 1 + +load: "weights_pol.weights.h5" + +parameters: + nodes_per_layer: [25, 20, 4] + activation_per_layer: [tanh, tanh, linear] + initializer: glorot_normal + optimizer: + optimizer_name: 'RMSprop' + learning_rate: 0.00001 + clipnorm: 1e-4 + epochs: 600 + positivity: + multiplier: 1.05 + threshold: 1e-5 + integrability: + multiplier: 1.5 + threshold: 1e-2 + stopping_patience: 0.1 + layer_type: dense + dropout: 0.0 + threshold_chi2: 5.0 + + +fitting: + savepseudodata: false + fitbasis: POLARIZED_EVOL + sum_rules: TSR + basis: + - {fl: sng, trainable: false, smallx: [1.094, 1.118], largex: [1.46, 3.003]} + - {fl: g, trainable: false, smallx: [0.8189, 1.844], largex: [2.591, 5.697]} + - {fl: t3, trainable: false, smallx: [-0.4401, 0.9163], largex: [1.773, 3.333]} + - {fl: t8, trainable: false, smallx: [0.5852, 0.8537], largex: [1.533, 3.436]} + +########################################################### +positivity: + posdatasets: + - {dataset: NNPDF_POS_2P24GEV_XGL-POLARIZED, maxlambda: 1e5} + +############################################################ +integrability: + integdatasets: + - {dataset: NNPDF_INTEG_1GEV_XGL-POLARIZED, maxlambda: 1e2} + +############################################################ +debug: true +double_precision: true diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_pol_1.exportgrid b/n3fit/src/n3fit/tests/regressions/quickcard_pol_1.exportgrid new file mode 100644 index 0000000000..7f85331078 --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_pol_1.exportgrid @@ -0,0 +1,572 @@ +labels: [TBAR, BBAR, CBAR, SBAR, UBAR, DBAR, GLUON, D, U, S, C, B, T, PHT] +pdfgrid: +- [0.0, 0.0, 0.0, 0.2471094090648995, 0.2480376168913184, 0.24629285689533906, 0.016336163686469538, + 0.24629285689533906, 0.2480376168913184, 0.2471094090648995, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.24092324226225997, 0.24188513313047488, 0.24008352857731477, 0.016700575565345915, + 0.24008352857731477, 0.24188513313047488, 0.24092324226225997, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.23489118518838242, 0.23588807252258706, 0.23402798624371685, 0.0170732764527806, + 0.23402798624371685, 0.23588807252258706, 0.23489118518838242, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.22900923534841683, 0.23004249446540903, 0.22812225832680846, 0.0174543587870173, + 0.22812225832680846, 0.23004249446540903, 0.22900923534841683, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.22327347177415854, 0.2243445440634657, 0.22236245927024753, 0.017843894844682167, + 0.22236245927024753, 0.2243445440634657, 0.22327347177415854, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.21768005101641172, 0.21879044853955182, 0.2167447859054257, 0.018241932677370253, + 0.2167447859054257, 0.21879044853955182, 0.21768005101641172, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.21222520304554887, 0.21337651360835397, 0.21126551375575092, 0.018648491442921824, + 0.21126551375575092, 0.21337651360835397, 0.21222520304554887, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.20690522704479578, 0.2080991198045316, 0.20592099325227908, 0.01906355604926575, + 0.20592099325227908, 0.2080991198045316, 0.20690522704479578, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.20171648707965836, 0.20295471875766616, 0.2007076458423903, 0.019487071018188532, + 0.2007076458423903, 0.20295471875766616, 0.20171648707965836, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.19665540762571204, 0.1979398294066749, 0.1956219599712904, 0.01991893346461065, + 0.1956219599712904, 0.1979398294066749, 0.19665540762571204, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1917184689357342, 0.19305103414664115, 0.19066048691399848, 0.020358985073791344, + 0.19066048691399848, 0.19305103414664115, 0.1917184689357342, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.18690220222584977, 0.18828497490154378, 0.18581983643311, 0.020807002944193048, + 0.18581983643311, 0.18828497490154378, 0.18690220222584977, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.18220318465899166, 0.18363834911714078, 0.1810966722349854, 0.021262689147389147, + 0.1810966722349854, 0.18363834911714078, 0.18220318465899166, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.17761803410260832, 0.17910790566935572, 0.176487707194116, 0.021725658838224596, + 0.176487707194116, 0.17910790566935572, 0.17761803410260832, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.17314340363613417, 0.17469044068495682, 0.17198969831219174, 0.022195426728311273, + 0.17198969831219174, 0.17469044068495682, 0.17314340363613417, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1687759757823518, 0.1703827932732282, 0.1675994413748477, 0.022671391713691782, + 0.1675994413748477, 0.1703827932732282, 0.1687759757823518, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.16451245643544704, 0.16618184116981718, 0.1633137652651925, 0.023152819423021942, + 0.1633137652651925, 0.16618184116981718, 0.16451245643544704, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1603495684573205, 0.16208449629710076, 0.15912952588897805, 0.023638822425762818, + 0.15912952588897805, 0.16208449629710076, 0.1603495684573205, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.15628404491263648, 0.15808770024940977, 0.1550435996616562, 0.024128337810569753, + 0.1550435996616562, 0.15808770024940977, 0.15628404491263648, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.15231262191229683, 0.15418841971649877, 0.15105287650264254, 0.024620101812253194, + 0.15105287650264254, 0.15418841971649877, 0.15231262191229683, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.14843203103452324, 0.15038364186487901, 0.1471542522767778, 0.025112621131397755, + 0.1471542522767778, 0.15038364186487901, 0.14843203103452324, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1446389912927818, 0.1466703697044149, 0.14334462061741896, 0.025604140554048586, + 0.14334462061741896, 0.1466703697044149, 0.1446389912927818, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.14093020062045183, 0.14304561747712333, 0.13962086405975566, 0.026092606440051267, + 0.13962086405975566, 0.14304561747712333, 0.14093020062045183, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.13730232684371074, 0.13950640611683884, 0.1359798444070103, 0.026575625608021163, + 0.1359798444070103, 0.13950640611683884, 0.13730232684371074, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.13375199811683955, 0.13604975884272905, 0.1324183922462736, 0.027050419103135822, + 0.1324183922462736, 0.13604975884272905, 0.13375199811683955, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1302757927983987, 0.13267269696707074, 0.12893329552508287, 0.027513770291839015, + 0.12893329552508287, 0.13267269696707074, 0.1302757927983987, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.12687022875293305, 0.12937223601884223, 0.12552128709478108, 0.027961966686364383, + 0.12552128709478108, 0.12937223601884223, 0.12687022875293305, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.12353175207161629, 0.12614538231026962, 0.12217903112266085, 0.028390734863394655, + 0.12217903112266085, 0.12614538231026962, 0.12353175207161629, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1202567252172332, 0.12298913010430342, 0.11890310827246973, 0.02879516780746018, + 0.11890310827246973, 0.12298913010430342, 0.1202567252172332, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.11704141461506913, 0.11990045957811464, 0.1156899995528926, 0.029169643983875736, + 0.1156899995528926, 0.11990045957811464, 0.11704141461506913, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.11388197773274426, 0.11687633582218557, 0.11253606873717828, 0.029507737432096833, + 0.11253606873717828, 0.11687633582218557, 0.11388197773274426, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.11077444972031145, 0.11391370916781049, 0.10943754326566753, 0.02980211817353013, + 0.10943754326566753, 0.11391370916781049, 0.11077444972031145, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.1077147297188425, 0.11100951719927653, 0.10639049355849667, 0.030044442254793333, + 0.10639049355849667, 0.11100951719927653, 0.1077147297188425, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.10469856699371462, 0.10816068888248545, 0.10339081069087155, 0.030225230806805142, + 0.10339081069087155, 0.10816068888248545, 0.10469856699371462, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.10172154711065588, 0.10536415133100055, 0.10043418242120591, 0.0303337376029821, + 0.10043418242120591, 0.10536415133100055, 0.10172154711065588, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.09877907845286145, 0.10261683983624503, 0.09751606761829228, 0.030357804760297178, + 0.09751606761829228, 0.10261683983624503, 0.09877907845286145, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.09586637947961243, 0.09991571191171901, 0.0946316692120138, 0.030283706463005836, + 0.0946316692120138, 0.09991571191171901, 0.09586637947961243, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.09297846725891236, 0.09725776624566625, 0.09177590590251958, 0.030095980923069372, + 0.09177590590251958, 0.09725776624566625, 0.09297846725891236, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.09011014797472146, 0.09464006762287507, 0.08894338301352529, 0.029777251252455592, + 0.08894338301352529, 0.09464006762287507, 0.09011014797472146, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0872560103241995, 0.09205977906650274, 0.08612836308041932, 0.029308036546440756, + 0.08612836308041932, 0.09205977906650274, 0.0872560103241995, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.08441042299350313, 0.08951420266441536, 0.08332473703918843, 0.028666555308751982, + 0.08332473703918843, 0.08951420266441536, 0.08441042299350313, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0815675377466101, 0.08700083077886718, 0.0805259972485652, 0.027828524444310113, + 0.0805259972485652, 0.08700083077886718, 0.0815675377466101, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0787213000972198, 0.08451740958630677, 0.07772521406074412, 0.026766958471169534, + 0.07772521406074412, 0.08451740958630677, 0.0787213000972198, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.07586547007763102, 0.08206201714126775, 0.07491501828591716, 0.025451975440770568, + 0.07491501828591716, 0.08206201714126775, 0.07586547007763102, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0729936562894191, 0.07963315837868494, 0.07208759270737898, 0.023850618397951974, + 0.07208759270737898, 0.07963315837868494, 0.0729936562894191, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.07009936723399249, 0.07722987961845043, 0.06923467683324731, 0.02192670416095206, + 0.06923467683324731, 0.07722987961845043, 0.07009936723399249, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.06717608488146887, 0.07485190514305365, 0.0663475903496752, 0.01964071485669738, + 0.0663475903496752, 0.07485190514305365, 0.06717608488146887, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.06421736652559142, 0.07249979817194559, 0.0634172822841415, 0.016949752085245007, + 0.0634172822841415, 0.07249979817194559, 0.06421736652559142, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.06121698212845352, 0.07017514788625065, 0.06043441467322273, 0.013807578825549626, + 0.06043441467322273, 0.07017514788625065, 0.06121698212845352, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.058169095442142285, 0.06788078282027832, 0.05738949145961857, + 0.010164780122800067, 0.05738949145961857, 0.06788078282027832, 0.058169095442142285, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.055068497938479545, 0.06562100859491868, 0.05427304518782696, + 0.005969079877279126, 0.05427304518782696, 0.06562100859491868, 0.055068497938479545, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.051910904521347195, 0.06340186418879956, 0.051075895379235965, + 0.0011658569725092737, 0.051075895379235965, 0.06340186418879956, 0.051910904521347195, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.04869331840263118, 0.06123138522725471, 0.04778949247161725, -0.00430109173969847, + 0.04778949247161725, 0.06123138522725471, 0.04869331840263118, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.04541446831553153, 0.05911985465852765, 0.044406358691258745, + -0.010488493468620113, 0.044406358691258745, 0.05911985465852765, 0.04541446831553153, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.042075313007694855, 0.05708001050170294, 0.04092063047776718, + -0.017452204343545795, 0.04092063047776718, 0.05708001050170294, 0.042075313007694855, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03867959415956916, 0.05512716762586183, 0.037328694025242255, + -0.025245450976450343, 0.037328694025242255, 0.05512716762586183, 0.03867959415956916, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03523439841070976, 0.0532791976568046, 0.033629884229183324, -0.03391671226798469, + 0.033629884229183324, 0.0532791976568046, 0.03523439841070976, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03175066252976868, 0.051556302126423224, 0.02982718729768785, + -0.04350729008837148, 0.02982718729768785, 0.051556302126423224, 0.03175066252976868, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02824352669514394, 0.049980515417407424, 0.02592785131387425, + -0.05404867569496649, 0.02592785131387425, 0.049980515417407424, 0.02824352669514394, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.024732418126918943, 0.04857489414236424, 0.02194377560532517, + -0.06555988122012035, 0.02194377560532517, 0.04857489414236424, 0.024732418126918943, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02124074491756582, 0.04736239511610999, 0.017891534088160195, + -0.07804495619611423, 0.017891534088160195, 0.04736239511610999, 0.02124074491756582, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017795113517735266, 0.04636451461708678, 0.013791908833068724, + -0.09149092852267894, 0.013791908833068724, 0.04636451461708678, 0.017795113517735266, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.014424061555443395, 0.045599843340137274, 0.00966888173520406, + -0.10586638410416821, 0.00966888173520406, 0.045599843340137274, 0.014424061555443395, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011156410737546163, 0.045082755731306975, 0.005548149601004088, + -0.1211208324403597, 0.005548149601004088, 0.045082755731306975, 0.011156410737546163, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008019458856148088, 0.04482246538065511, 0.0014553591382398103, + -0.13718491837052993, 0.0014553591382398103, 0.04482246538065511, 0.008019458856148088, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00503729783925901, 0.04482262008002109, -0.0025856485447464253, + -0.15397146172201354, -0.0025856485447464253, 0.04482262008002109, 0.00503729783925901, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0022295302472702745, 0.045081492830276876, -0.006554284425029144, + -0.171377253436426, -0.006554284425029144, 0.045081492830276876, 0.0022295302472702745, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0003894403192558148, 0.04559269111652473, -0.010434131988896707, + -0.18928550371251437, -0.010434131988896707, 0.04559269111652473, -0.0003894403192558148, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.002810509554857463, 0.046346206976591406, -0.014213264227435593, + -0.20756880821581347, -0.014213264227435593, 0.046346206976591406, -0.002810509554857463, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005029456284494479, 0.04732959535906509, -0.017884018810331834, + -0.22609246398655858, -0.017884018810331834, 0.04732959535906509, -0.005029456284494479, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007046178458550851, 0.04852909557084494, -0.021442384360026455, + -0.2447179356973853, -0.021442384360026455, 0.04852909557084494, -0.007046178458550851, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.008863764481073953, 0.04993057398877145, -0.024887178849544524, + -0.26330626179851196, -0.024887178849544524, 0.04993057398877145, -0.008863764481073953, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0104875524296329, 0.05152023500457278, -0.028219179052798995, + -0.28172120866541006, -0.028219179052798995, 0.05152023500457278, -0.0104875524296329, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.011924279308273115, 0.05328510082291198, -0.03144031293814943, + -0.29983202563112393, -0.03144031293814943, 0.05328510082291198, -0.011924279308273115, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01318137298571723, 0.055213292313236684, -0.0345529772583465, + -0.31751571177025256, -0.0345529772583465, 0.055213292313236684, -0.01318137298571723, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.014266401817487338, 0.057294155318499976, -0.03755950309989755, + -0.3346587621419246, -0.03755950309989755, 0.057294155318499976, -0.014266401817487338, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.015186673568559914, 0.05951827618401588, -0.04046176655519238, + -0.3511584069643209, -0.04046176655519238, 0.05951827618401588, -0.015186673568559914, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01594896382979524, 0.061877423139304596, -0.04326092831903608, + -0.36692338797243457, -0.04326092831903608, 0.061877423139304596, -0.01594896382979524, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.016559350823270043, 0.06436444103091139, -0.04595728124761215, + -0.38187433272180715, -0.04595728124761215, 0.06436444103091139, -0.016559350823270043, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0170231347991718, 0.06697311827775523, -0.04855018518906935, + -0.39594379299563015, -0.04855018518906935, 0.06697311827775523, -0.0170231347991718, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01734482359089284, 0.06969803786839865, -0.05103807102729614, + -0.4090760114736768, -0.05103807102729614, 0.06969803786839865, -0.01734482359089284, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01752816974394725, 0.07253441896373067, -0.0534184991827834, + -0.4212264746990992, -0.0534184991827834, 0.07253441896373067, -0.01752816974394725, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.017576248134749967, 0.07547795203527334, -0.055688260867874165, + -0.432361302552577, -0.055688260867874165, 0.07547795203527334, -0.017576248134749967, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.017491565787814255, 0.07852462815919, -0.05784351279235622, -0.4424565164866378, + -0.05784351279235622, 0.07852462815919, -0.017491565787814255, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.017276197594301913, 0.08167056180729607, -0.059879937655077695, + -0.45149722158255884, -0.059879937655077695, 0.08167056180729607, -0.017276197594301913, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01693194287609043, 0.084911805995283, -0.06179292369318307, -0.4594767314879323, + -0.06179292369318307, 0.084911805995283, -0.01693194287609043, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.016460498331079845, 0.08824415879649704, -0.0635777569229608, + -0.46639566059051746, -0.0635777569229608, 0.08824415879649704, -0.016460498331079845, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01586364296090466, 0.09166296089035739, -0.06522981965542071, + -0.4722610043176048, -0.06522981965542071, 0.09166296089035739, -0.01586364296090466, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.01514343024940257, 0.0951628849039465, -0.06674478857466139, + -0.47708522605437237, -0.06674478857466139, 0.0951628849039465, -0.01514343024940257, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.014302382257300484, 0.098737718751954, -0.06811882529608317, + -0.48088536763028517, -0.06811882529608317, 0.098737718751954, -0.014302382257300484, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.013343679555405713, 0.10238014690528491, -0.06934875203623792, + -0.4836821993792466, -0.06934875203623792, 0.10238014690528491, -0.013343679555405713, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.012271340167515538, 0.10608153542544008, -0.07043220497854001, + -0.48549942517436906, -0.07043220497854001, 0.10608153542544008, -0.012271340167515538, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.011090380071209834, 0.10983172855907261, -0.07136775824134343, + -0.4863629572955456, -0.07136775824134343, 0.10983172855907261, -0.011090380071209834, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.009806947444212132, 0.11361886653238354, -0.07215501215249118, + -0.48630027523793684, -0.07215501215249118, 0.11361886653238354, -0.009806947444212132, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.008428422872973499, 0.11742923572035223, -0.07279464087019047, + -0.48533988135269907, -0.07279464087019047, 0.11742923572035223, -0.008428422872973499, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00696347826554798, 0.121247163372701, -0.07328839627196558, -0.48351086430364154, + -0.07328839627196558, 0.121247163372701, -0.00696347826554798, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005422088306309884, 0.12505496933372443, -0.07363906740096068, + -0.4808425785567529, -0.07363906740096068, 0.12505496933372443, -0.005422088306309884, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0038154899807007073, 0.12883298649602176, -0.0738503974759833, + -0.47736444440941966, -0.0738503974759833, 0.12883298649602176, -0.0038154899807007073, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0021560879479304252, 0.13255965993129298, -0.07392696332809073, + -0.4731058684375474, -0.07392696332809073, 0.13255965993129298, -0.0021560879479304252, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0004573062435183734, 0.1362117316837845, -0.0738740248516422, + -0.46809627884618926, -0.0738740248516422, 0.1362117316837845, -0.0004573062435183734, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0012666102212897023, 0.13976451414867794, -0.07369735434830371, + -0.462365264344753, -0.07369735434830371, 0.13976451414867794, 0.0012666102212897023, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0030008378601338536, 0.14319224997943128, -0.073403057202846, + -0.455942799252421, -0.073403057202846, 0.14319224997943128, 0.0030008378601338536, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004730250988142167, 0.14646855090510055, -0.07299739591933235, + -0.448859532092612, -0.07299739591933235, 0.14646855090510055, 0.004730250988142167, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006439721115525739, 0.1495669021429319, -0.07248662902739815, + -0.4411471105254664, -0.07248662902739815, 0.1495669021429319, 0.006439721115525739, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00811442569201296, 0.15246121379929148, -0.07187687474071747, + -0.4328385126373131, -0.07187687474071747, 0.15246121379929148, 0.00811442569201296, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.009740152333142167, 0.15512639631966116, -0.07117400666650653, + -0.42396835380064385, -0.07117400666650653, 0.15512639631966116, 0.009740152333142167, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011303584847712923, 0.15753893418404166, -0.07038358561934835, + -0.4145731397982689, -0.07038358561934835, 0.15753893418404166, 0.011303584847712923, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012792558645491725, 0.15967743102777746, -0.06951082807815198, + -0.40469144069664353, -0.06951082807815198, 0.15967743102777746, 0.012792558645491725, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.014196275212489232, 0.16152310039142795, -0.06856060847281942, + -0.3943639658120933, -0.06856060847281942, 0.16152310039142795, 0.014196275212489232, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01550546808699415, 0.1630601793302008, -0.06753748969530723, -0.3836335275444911, + -0.06753748969530723, 0.1630601793302008, 0.01550546808699415, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0167125158848659, 0.16427624687580364, -0.06644577429808297, -0.3725448901610276, + -0.06644577429808297, 0.16427624687580364, 0.0167125158848659, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017811501117598286, 0.16516243537436867, -0.06528956792885279, + -0.3611445079979073, -0.06528956792885279, 0.16516243537436867, 0.017811501117598286, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.018798216547551864, 0.16571352942304518, -0.064072846653206, -0.3494801652120484, + -0.064072846653206, 0.16571352942304518, 0.018798216547551864, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.019670123404559817, 0.16592795384561182, -0.06279952079337975, + -0.33760053547317287, -0.06279952079337975, 0.16592795384561182, 0.019670123404559817, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020426267788259074, 0.16580765827493626, -0.06147348951603825, + -0.32555468435221974, -0.06147348951603825, 0.16580765827493626, 0.020426267788259074, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0210671629196208, 0.16535791095452743, -0.060098682340233224, + -0.31339153939805625, -0.060098682340233224, 0.16535791095452743, 0.0210671629196208, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.021594645576586344, 0.164587018007912, -0.05867908571899141, -0.30115935302045543, + -0.05867908571899141, 0.164587018007912, 0.021594645576586344, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022011715108531955, 0.16350598651647524, -0.057218754633441164, + -0.28890518155698036, -0.057218754633441164, 0.16350598651647524, 0.022011715108531955, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02232236297362753, 0.162128150335183, -0.05572181056153909, -0.27667440070108534, + -0.05572181056153909, 0.162128150335183, 0.02232236297362753, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0225313999086354, 0.1604687768468547, -0.05419242816213235, -0.26451027330098975, + -0.05419242816213235, 0.1604687768468547, 0.0225313999086354, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022644286755902784, 0.15854467109125445, -0.05263481354294892, + -0.25245358090921877, -0.05263481354294892, 0.15854467109125445, 0.022644286755902784, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022666973762928658, 0.15637379123183132, -0.05105317710938406, + -0.2405423258264665, -0.05105317710938406, 0.15637379123183132, 0.022666973762928658, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022605751943302773, 0.1539748864659126, -0.049451703806338426, + -0.22881150610569914, -0.049451703806338426, 0.1539748864659126, 0.022605751943302773, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022467118927468263, 0.15136716553223242, -0.04783452316811127, + -0.21729296231542278, -0.04783452316811127, 0.15136716553223242, 0.022467118927468263, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02225766069561314, 0.1485700011541853, -0.04620568107886157, -0.20601529194911916, + -0.04620568107886157, 0.1485700011541853, 0.02225766069561314, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02198394970713308, 0.1456026732407271, -0.044569114599799446, + -0.19500382524828577, -0.044569114599799446, 0.1456026732407271, 0.02198394970713308, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.021652459235313816, 0.14248415154856592, -0.042928630701442934, + -0.1842806548507008, -0.042928630701442934, 0.14248415154856592, 0.021652459235313816, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02126949318015048, 0.13923291682883582, -0.04128788928913361, + -0.1738647109897259, -0.04128788928913361, 0.13923291682883582, 0.02126949318015048, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020841130253543956, 0.13586681823582727, -0.03965039054881741, + -0.16377187384115505, -0.03965039054881741, 0.13586681823582727, 0.020841130253543956, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020373181189572483, 0.13240296392829531, -0.038019466372679174, + -0.15401511490937872, -0.038019466372679174, 0.13240296392829531, 0.020373181189572483, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.019871157505130854, 0.12885764129193641, -0.0363982754456158, + -0.14460465994327443, -0.0363982754456158, 0.12885764129193641, 0.019871157505130854, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.019340250299251627, 0.12524626299113242, -0.03478980147136683, + -0.135548166660613, -0.03478980147136683, 0.12524626299113242, 0.019340250299251627, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.018785317610655845, 0.12158333505590657, -0.03319685397669541, + -0.12685091144746932, -0.03319685397669541, 0.12158333505590657, 0.018785317610655845, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.018210878932629196, 0.11788244336634918, -0.03162207113753717, + -0.11851598011200276, -0.03162207113753717, 0.11788244336634918, 0.018210878932629196, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017621115595516223, 0.11415625516051728, -0.030067924108493994, + -0.11054445865884763, -0.030067924108493994, 0.11415625516051728, 0.017621115595516223, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017019875856312462, 0.11041653251967351, -0.028536722393995573, + -0.10293562087385033, -0.028536722393995573, 0.11041653251967351, 0.017019875856312462, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.016410683671582396, 0.1066741551436133, -0.027030619866393397, + -0.09568711024880473, -0.027030619866393397, 0.1066741551436133, 0.016410683671582396, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.015796750266366025, 0.1029391500930567, -0.02555162110572127, + -0.08879511442059264, -0.02555162110572127, 0.1029391500930567, 0.015796750266366025, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01518098774248533, 0.09922072652836021, -0.024101587803001503, + -0.08225453084773411, -0.024101587803001503, 0.09922072652836021, 0.01518098774248533, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01456602409109305, 0.09552731380197191, -0.022682245030381406, + -0.07605912290239843, -0.022682245030381406, 0.09552731380197191, 0.01456602409109305, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.013954219084413133, 0.09186660155958638, -0.021295187235420808, + -0.07020166592540106, -0.021295187235420808, 0.09186660155958638, 0.013954219084413133, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.013347680619418172, 0.0882455807682606, -0.019941883862651277, + -0.06467408308418207, -0.019941883862651277, 0.0882455807682606, 0.013347680619418172, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012748281171602704, 0.08467058481851278, -0.018623684543245138, + -0.059467571099876874, -0.018623684543245138, 0.08467058481851278, 0.012748281171602704, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012157674090451497, 0.08114733004258355, -0.017341823823669042, + -0.05457271607896977, -0.017341823823669042, 0.08114733004258355, 0.012157674090451497, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011577309530502185, 0.07768095515509268, -0.016097425427409582, + -0.04997959980750111, -0.016097425427409582, 0.07768095515509268, 0.011577309530502185, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011008449864049438, 0.07427605925807866, -0.014891506061095754, + -0.045677896949788806, -0.014891506061095754, 0.07427605925807866, 0.011008449864049438, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.010452184464674202, 0.0709367381632986, -0.013724978788608093, + -0.0416569636470319, -0.013724978788608093, 0.0709367381632986, 0.010452184464674202, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.009909443785998692, 0.06766661887382255, -0.012598656004909125, + -0.037905918040371966, -0.012598656004909125, 0.06766661887382255, 0.009909443785998692, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.009381012688478265, 0.06446889213766421, -0.011513252046213241, + -0.034413713253721695, -0.011513252046213241, 0.06446889213766421, 0.009381012688478265, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008867542989627426, 0.061346343041235166, -0.010469385475421119, + -0.031169203368394047, -0.010469385475421119, 0.061346343041235166, 0.008867542989627426, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008369565230784588, 0.05830137965256028, -0.009467581082137754, + -0.028161202908204938, -0.009467581082137754, 0.05830137965256028, 0.008369565230784588, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.007887499667142946, 0.055336059755634166, -0.008508271635544474, + -0.02537854033315279, -0.008508271635544474, 0.055336059755634166, 0.007887499667142946, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00742166649804511, 0.052452115740141345, -0.00759179942635946, + -0.022810106014498593, -0.00759179942635946, 0.052452115740141345, 0.00742166649804511, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006972295362057942, 0.049650977726614046, -0.006718417631397359, + -0.020444895135836083, -0.006718417631397359, 0.049650977726614046, 0.006972295362057942, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006539534126654847, 0.04693379501751217, -0.005888291531124355, + -0.01827204593507896, -0.005888291531124355, 0.04693379501751217, 0.006539534126654847, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006123457005864358, 0.04430145597078448, -0.005101499607265814, + -0.01628087367217093, -0.005101499607265814, 0.04430145597078448, 0.006123457005864358, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.005724072041378612, 0.04175460639527111, -0.004358034544130393, + -0.014460900677591189, -0.004358034544130393, 0.04175460639527111, 0.005724072041378612, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.005341327983649354, 0.03929366656757966, -0.0036578041539524404, + -0.012801882807879783, -0.0036578041539524404, 0.03929366656757966, 0.005341327983649354, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004975120609697913, 0.03691884696853847, -0.003000632243315353, + -0.011293832606878258, -0.003000632243315353, 0.03691884696853847, 0.004975120609697913, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0046252985139198345, 0.0346301628344547, -0.002386259434626766, + -0.009927039445354228, -0.002386259434626766, 0.0346301628344547, 0.0046252985139198345, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00429166840725249, 0.03242744761465582, -0.0018143439537086576, + -0.008692086887331564, -0.0018143439537086576, 0.03242744761465582, 0.00429166840725249, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.003973999958818334, 0.03031036542246269, -0.0012844623918383774, + -0.007579867508810438, -0.0012844623918383774, 0.03031036542246269, 0.003973999958818334, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0036720302126698866, 0.028278422562127117, -0.0007961104480324935, + -0.006581595373661365, -0.0007961104480324935, 0.028278422562127117, 0.0036720302126698866, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0033854676106214714, 0.026330978209529936, -0.00034870365497225174, + -0.005688816352246153, -0.00034870365497225174, 0.026330978209529936, 0.0033854676106214714, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0031139956504218813, 0.024467254319749287, 5.842191029062175e-05, + -0.004893416450707452, 5.842191029062175e-05, 0.024467254319749287, 0.0031139956504218813, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0028572762067622195, 0.02268634483016684, 0.00042600893186399435, + -0.004187628302814932, 0.00042600893186399435, 0.02268634483016684, 0.0028572762067622195, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0026149525408321653, 0.02098722422349552, 0.0007548781799301392, + -0.003564035961582011, 0.0007548781799301392, 0.02098722422349552, 0.0026149525408321653, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0023866520224013663, 0.01936875551132928, 0.001045927860302558, + -0.0030155781145898733, 0.001045927860302558, 0.01936875551132928, 0.0023866520224013663, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.002171988586695179, 0.017829697695370902, 0.0013001329960873659, + -0.0025355498348608708, 0.0013001329960873659, 0.017829697695370902, 0.002171988586695179, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0019705649466905772, 0.01636871276061933, 0.0015185448512587427, + -0.0021176029681805437, 0.0015185448512587427, 0.01636871276061933, 0.0019705649466905772, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0017819745798758606, 0.014984372252491948, 0.001702290408569475, + -0.0017557452478396299, 0.001702290408569475, 0.014984372252491948, 0.0017819745798758606, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.001605803507006943, 0.013675163488263663, 0.00185257191721198, + -0.0014443382187767776, 0.00185257191721198, 0.013675163488263663, 0.001605803507006943, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0014416318789523958, 0.012439495452432081, 0.0019706665291962713, + -0.0011780940449495525, 0.0019706665291962713, 0.012439495452432081, 0.0014416318789523958, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0012890353863491953, 0.011275704425841021, 0.0020579260477411434, + -0.0009520712663604958, 0.0020579260477411434, 0.011275704425841021, 0.0012890353863491953, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.001147586505492553, 0.010182059399879352, 0.0021157768163811586, + -0.0007616695654405031, 0.0021157768163811586, 0.010182059399879352, 0.001147586505492553, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0010168555926501988, 0.00915676733012908, 0.002145719784393471, + -0.0006026235963576349, 0.002145719784393471, 0.00915676733012908, 0.0010168555926501988, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0008964118378304798, 0.008197978289014364, 0.0021493307931217116, + -0.0004709959252136919, 0.0021493307931217116, 0.008197978289014364, 0.0008964118378304798, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0007858240879347833, 0.007303790584938669, 0.002128261139651955, + -0.00036316912392765714, 0.002128261139651955, 0.007303790584938669, 0.0007858240879347833, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0006846615482215296, 0.006472255927362595, 0.0020842384902830754, + -0.00027583705584605903, 0.0020842384902830754, 0.006472255927362595, 0.0006846615482215296, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0005924943700797348, 0.005701384734576198, 0.0020190682381318104, + -0.00020599538665088006, 0.0020190682381318104, 0.005701384734576198, 0.0005924943700797348, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0005088941323416178, 0.004989151706423473, 0.0019346354297395932, + -0.00015093134994257536, 0.0019346354297395932, 0.004989151706423473, 0.0005088941323416178, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0004334342227963241, 0.004333501821571049, 0.0018329074289457725, + -0.00010821279284373419, 0.0018329074289457725, 0.004333501821571049, 0.0004334342227963241, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0003656901263610591, 0.0037323569744707355, 0.0017159375492991212, + -7.567652303904892e-05, 0.0017159375492991212, 0.0037323569744707355, 0.0003656901263610591, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00030523962680324934, 0.0031836235513570447, 0.001585869979971299, + -5.141597474839773e-05, 0.001585869979971299, 0.0031836235513570447, 0.00030523962680324934, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0002516629305097431, 0.0026852013750038686, 0.0014449464732313913, + -3.376820710427948e-05, 0.0014449464732313913, 0.0026852013750038686, 0.0002516629305097431, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00020454272463547586, 0.00223499465586195, 0.0012955154869523876, + -2.1300244142239505e-05, 0.0012955154869523876, 0.00223499465586195, 0.00020454272463547586, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00016346419017440638, 0.001830925930005081, 0.0011400448436012908, + -1.2794760921072028e-05, 0.0011400448436012908, 0.001830925930005081, 0.00016346419017440638, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00012801500765255945, 0.001470954553254338, 0.000981139593687231, + -7.235114910044178e-06, 0.000981139593687231, 0.001470954553254338, 0.00012801500765255945, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 9.778542947407864e-05, 0.0011531023838400804, 0.0008215678932752536, + -3.7897153249582535e-06, 0.0008215678932752536, 0.0011531023838400804, 9.778542947407864e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 7.236857294675635e-05, 0.0008754913244336351, 0.0006642998398486648, + -1.7957149615463915e-06, 0.0006642998398486648, 0.0008754913244336351, 7.236857294675635e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 5.136127549500203e-05, 0.0006364016120179343, 0.000512568596066279, + -7.419982697063732e-07, 0.000512568596066279, 0.0006364016120179343, 5.136127549500203e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 3.4366334322406906e-05, 0.00043436937184363535, 0.0003699730737812722, + -2.514241833508411e-07, 0.0003699730737812722, 0.00043436937184363535, 3.4366334322406906e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 2.0998355616304834e-05, 0.0002683670627534037, 0.00024066721607091107, + -6.225921261426889e-08, 0.00024066721607091107, 0.0002683670627534037, 2.0998355616304834e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 1.0900415162685148e-05, 0.00013818999540740233, 0.00012976203495853063, + -8.698341004839666e-09, 0.00012976203495853063, 0.00013818999540740233, 1.0900415162685148e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 3.8034629570953715e-06, 4.552129692939808e-05, 4.4420443585466934e-05, + -3.00320512793057e-10, 4.4420443585466934e-05, 4.552129692939808e-05, 3.8034629570953715e-06, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +q20: 1.0 +replica: 1 +xgrid: [1e-09, 1.29708482343957e-09, 1.68242903474257e-09, 2.18225315420583e-09, 2.83056741739819e-09, + 3.67148597892941e-09, 4.76222862935315e-09, 6.1770142737618e-09, 8.01211109898438e-09, + 1.03923870607245e-08, 1.34798064073805e-08, 1.74844503691778e-08, 2.26788118881103e-08, + 2.94163370300835e-08, 3.81554746595878e-08, 4.94908707232129e-08, 6.41938295708371e-08, + 8.32647951986859e-08, 1.08001422993829e-07, 1.4008687308113e-07, 1.81704331793772e-07, + 2.35685551545377e-07, 3.05703512595323e-07, 3.96522309841747e-07, 5.1432125723657e-07, + 6.67115245136676e-07, 8.65299922973143e-07, 1.12235875241487e-06, 1.45577995547683e-06, + 1.88824560514613e-06, 2.44917352454946e-06, 3.17671650028717e-06, 4.12035415232797e-06, + 5.3442526575209e-06, 6.93161897806315e-06, 8.99034258238145e-06, 1.16603030112258e-05, + 1.51228312288769e-05, 1.96129529349212e-05, 2.54352207134502e-05, 3.29841683435992e-05, + 4.27707053972016e-05, 5.54561248105849e-05, 7.18958313632514e-05, 9.31954227979614e-05, + 0.00012078236773133, 0.000156497209466554, 0.000202708936328495, 0.000262459799331951, + 0.000339645244168985, 0.000439234443000422, 0.000567535660104533, 0.000732507615725537, + 0.000944112105452451, 0.00121469317686978, 0.00155935306118224, 0.00199627451141338, + 0.00254691493736552, 0.00323597510213126, 0.00409103436509565, 0.00514175977083962, + 0.00641865096062317, 0.00795137940306351, 0.009766899996241, 0.0118876139251364, + 0.0143298947643919, 0.0171032279460271, 0.0202100733925079, 0.0236463971369542, + 0.0274026915728357, 0.0314652506132444, 0.0358174829282429, 0.0404411060163317, + 0.0453171343973807, 0.0504266347950069, 0.0557512610084339, 0.0612736019390519, + 0.0669773829498255, 0.0728475589986517, 0.0788703322292727, 0.0850331197801452, + 0.0913244910278679, 0.0977340879783772, 0.104252538208639, 0.110871366547237, 0.117582909372878, + 0.124380233801599, 0.131257062945031, 0.138207707707289, 0.145227005135651, 0.152310263065985, + 0.159453210652156, 0.166651954293987, 0.173902938455578, 0.181202910873333, 0.188548891679097, + 0.195938145999193, 0.203368159629765, 0.210836617429103, 0.218341384106561, 0.225880487124065, + 0.233452101459503, 0.241054536011681, 0.248686221452762, 0.256345699358723, 0.264031612468684, + 0.271742695942783, 0.279477769504149, 0.287235730364833, 0.295015546847664, 0.302816252626866, + 0.310636941519503, 0.318476762768082, 0.326334916761672, 0.334210651149156, 0.342103257303627, + 0.350012067101685, 0.357936449985571, 0.365875810279643, 0.373829584735962, 0.381797240286494, + 0.389778271981947, 0.397772201099286, 0.40577857340234, 0.413796957540671, 0.421826943574548, + 0.429868141614175, 0.437920180563205, 0.44598270695699, 0.454055383887562, 0.462137890007651, + 0.470229918607142, 0.478331176755675, 0.486441384506059, 0.494560274153348, 0.502687589545177, + 0.510823085439086, 0.518966526903235, 0.527117688756998, 0.535276355048428, 0.543442318565661, + 0.551615380379768, 0.559795349416641, 0.5679820420558, 0.576175281754088, 0.584374898692498, + 0.59258072944444, 0.60079261666395, 0.609010408792398, 0.61723395978245, 0.625463128838069, + 0.633697780169485, 0.641937782762089, 0.650183010158361, 0.658433340251944, 0.666688655093089, + 0.674948840704708, 0.683213786908386, 0.691483387159697, 0.699757538392251, 0.708036140869916, + 0.716319098046733, 0.724606316434025, 0.732897705474271, 0.741193177421404, 0.749492647227008, + 0.757796032432224, 0.766103253064927, 0.774414231541921, 0.782728892575836, 0.791047163086478, + 0.799368972116378, 0.807694250750291, 0.816022932038457, 0.824354950923382, 0.832690244169987, + 0.841028750298844, 0.8493704095226, 0.857715163684985, 0.866062956202683, 0.874413732009721, + 0.882767437504206, 0.891124020497459, 0.899483430165226, 0.907845617001021, 0.916210532771399, + 0.924578130473112, 0.932948364292029, 0.941321189563734, 0.949696562735755, 0.958074441331298, + 0.966454783914439, 0.974837550056705, 0.983222700304978, 0.991610196150662, 1.0] diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_pol_1.json b/n3fit/src/n3fit/tests/regressions/quickcard_pol_1.json new file mode 100644 index 0000000000..f683eac8d8 --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_pol_1.json @@ -0,0 +1,70 @@ +{ + "preprocessing": [ + { + "fl": "sng", + "smallx": 1.0974138975143433, + "largex": 1.5569062232971191, + "trainable": false + }, + { + "fl": "g", + "smallx": 0.9209417104721069, + "largex": 4.858912944793701, + "trainable": false + }, + { + "fl": "t3", + "smallx": 0.8678060173988342, + "largex": 2.9391303062438965, + "trainable": false + }, + { + "fl": "t8", + "smallx": 0.6528863310813904, + "largex": 1.580439567565918, + "trainable": false + } + ], + "stop_epoch": 600, + "best_epoch": 599, + "erf_tr": 2.5818292105708047, + "erf_vl": 1.9909996132247432, + "chi2": 1.319613746267476, + "pos_state": "POS_PASS", + "arc_lengths": [ + 1.0207390340368907, + 1.0307402955168719, + 0.9899487587939698, + 0.9899487587939698, + 0.9899487587939698 + ], + "integrability": [ + 1.5265566588595902e-16, + 4.163336342344337e-17, + 4.163336342344337e-17, + 0.0018155399912336834, + 1.6653345369377348e-16 + ], + "timing": { + "walltime": { + "Total": 37.31551122665405, + "start": 0.0, + "replica_set": 0.19750428199768066, + "replica_fitted": 37.315247535705566, + "replica_set_to_replica_fitted": 37.117743253707886 + }, + "cputime": { + "Total": 63.690608012, + "start": 0.0, + "replica_set": 0.19301056000000116, + "replica_fitted": 63.69031924000001, + "replica_set_to_replica_fitted": 63.49730868 + } + }, + "version": { + "tensorflow": "2.16.1, mkl=??", + "numpy": "1.24.0", + "nnpdf": "4.0.9.post574.dev0+412f8f857.dirty", + "validphys": "4.0.9.post574.dev0+412f8f857.dirty" + } +} diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_pol_3.exportgrid b/n3fit/src/n3fit/tests/regressions/quickcard_pol_3.exportgrid new file mode 100644 index 0000000000..352eb46c75 --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_pol_3.exportgrid @@ -0,0 +1,614 @@ +labels: [TBAR, BBAR, CBAR, SBAR, UBAR, DBAR, GLUON, D, U, S, C, B, T, PHT] +pdfgrid: +- [0.0, 0.0, 0.0, 0.0651490118889096, 0.06635473321646486, 0.06626323767595092, 7.002460545167927, + 0.06626323767595092, 0.06635473321646486, 0.0651490118889096, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.062755804774023, 0.06401338232460589, 0.06391198364998928, 6.69377352801909, + 0.06391198364998928, 0.06401338232460589, 0.062755804774023, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.06044732050285676, 0.06175910311610148, 0.06164674656967025, 6.39840274917371, + 0.06164674656967025, 0.06175910311610148, 0.06044732050285676, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.058220706120845275, 0.05958916512815283, 0.059464685264659166, + 6.11575820112944, 0.059464685264659166, 0.05958916512815283, 0.058220706120845275, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.05607318383623101, 0.057500921168710084, 0.057363030387374905, + 5.845275497301593, 0.057363030387374905, 0.057500921168710084, 0.05607318383623101, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.054002048577021, 0.05549180555192687, 0.05533908148454545, 5.586414779029464, + 0.05533908148454545, 0.05549180555192687, 0.054002048577021, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.052004665610107054, 0.05355933246065379, 0.0533902040798903, 5.338659669526936, + 0.0533902040798903, 0.05355933246065379, 0.052004665610107054, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.05007846822034854, 0.05170109444024114, 0.05151382676094964, 5.101516272820703, + 0.05151382676094964, 0.05170109444024114, 0.05007846822034854, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.048220955447319296, 0.049914761028461804, 0.04970743826256328, + 4.8745122158035255, 0.04970743826256328, 0.049914761028461804, 0.048220955447319296, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.04642968987730607, 0.04819807752694883, 0.04796858453893073, 4.657195731612534, + 0.04796858453893073, 0.04819807752694883, 0.04642968987730607, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.04470229548801879, 0.0465488639201768, 0.04629486581555945, 4.449134782620986, + 0.04629486581555945, 0.0465488639201768, 0.04470229548801879, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.043036455543303154, 0.04496501394867483, 0.04468393361169398, + 4.249916221408517, 0.04468393361169398, 0.04496501394867483, 0.043036455543303154, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.04142991053494898, 0.043444494343864576, 0.043133487723026456, + 4.059144988148237, 0.043133487723026456, 0.043444494343864576, 0.04142991053494898, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.039880456168451456, 0.04198534423265827, 0.04164127315359912, + 3.876443342920656, 0.04164127315359912, 0.04198534423265827, 0.039880456168451456, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03838594138932634, 0.040585674720754826, 0.04020507698483306, + 3.7014501315335755, 0.04020507698483306, 0.040585674720754826, 0.03838594138932634, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03694426644624525, 0.03924366866438003, 0.03882272516848713, 3.5338200834944615, + 0.03882272516848713, 0.03924366866438003, 0.03694426644624525, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0355533809869264, 0.03795758064111395, 0.03749207922913679, 3.373223140847603, + 0.03749207922913679, 0.03795758064111395, 0.0355533809869264, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.034211282182300615, 0.03672573713134864, 0.03621103286036261, + 3.219343816652721, 0.03621103286036261, 0.03672573713134864, 0.034211282182300615, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03291601287403773, 0.03554653692288435, 0.03497750839730054, 3.0718805819447987, + 0.03497750839730054, 0.03554653692288435, 0.03291601287403773, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.031665659740022375, 0.03441845175215766, 0.033789453146468924, + 2.9305452800774754, 0.033789453146468924, 0.03441845175215766, 0.031665659740022375, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.030458351471839024, 0.03334002719662137, 0.03264483555185386, + 2.7950625674138543, 0.03264483555185386, 0.03334002719662137, 0.030458351471839024, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.029292256957741736, 0.03230988383382679, 0.03154164117405349, + 2.6651693793902185, 0.03154164117405349, 0.03230988383382679, 0.029292256957741736, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.028165583463996908, 0.03132671868382961, 0.030477868456871362, + 2.5406144210396597, 0.030477868456871362, 0.03132671868382961, 0.028165583463996908, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02707657480683701, 0.030389306952562586, 0.02945152425300602, + 2.4211576811245097, 0.02945152425300602, 0.030389306952562586, 0.02707657480683701, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.026023509506651863, 0.029496504094852726, 0.028460619077462574, + 2.306569969089218, 0.028460619077462574, 0.029496504094852726, 0.026023509506651863, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02500469891541942, 0.028647248216705334, 0.027503162053902557, + 2.196632474109222, 0.027503162053902557, 0.028647248216705334, 0.02500469891541942, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.024018485307816417, 0.027840562837333292, 0.026577155515361797, + 2.0911363455768908, 0.026577155515361797, 0.027840562837333292, 0.024018485307816417, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02306323992599419, 0.027075560032125308, 0.02568058921657284, + 1.9898822944332772, 0.02568058921657284, 0.027075560032125308, 0.02306323992599419, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022137360967684296, 0.026351443978219324, 0.024811434110474036, + 1.8926802148249025, 0.024811434110474036, 0.026351443978219324, 0.022137360967684296, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.021239271507227243, 0.025667514924522055, 0.02396763563640399, + 1.799348825638431, 0.02396763563640399, 0.025667514924522055, 0.021239271507227243, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020367417339380862, 0.02502317360775207, 0.02314710646196574, + 1.7097153315438263, 0.02314710646196574, 0.02502317360775207, 0.020367417339380862, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01952026473649814, 0.024417926135221188, 0.0223477186146625, 1.62361510325949, + 0.0223477186146625, 0.024417926135221188, 0.01952026473649814, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.018696298111051037, 0.023851389353401236, 0.02156729493328632, + 1.5408913768412373, 0.02156729493328632, 0.023851389353401236, 0.018696298111051037, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017894017577753333, 0.023323296718571817, 0.020803599762917013, + 1.4613949718934802, 0.020803599762917013, 0.023323296718571817, 0.017894017577753333, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017111936412959338, 0.022833504681608316, 0.020054328811595527, + 1.38498402870153, 0.020054328811595527, 0.022833504681608316, 0.017111936412959338, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.016348578414141994, 0.022381999592852732, 0.01931709808203646, + 1.3115237644080813, 0.01931709808203646, 0.022381999592852732, 0.016348578414141994, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01560247516926042, 0.021968905124137093, 0.018589431788756938, + 1.2408862484694558, 0.018589431788756938, 0.021968905124137093, 0.01560247516926042, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.014872163255874832, 0.021594490192826856, 0.017868749171615562, + 1.1729501977815342, 0.017868749171615562, 0.021594490192826856, 0.014872163255874832, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.014156181403407039, 0.021259177355754555, 0.01715235012269978, + 1.1076007920167543, 0.01715235012269978, 0.021259177355754555, 0.014156181403407039, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01345306767045528, 0.020963551617744578, 0.016437399558220274, + 1.0447295098938483, 0.016437399558220274, 0.020963551617744578, 0.01345306767045528, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012761356714014346, 0.020708369567921426, 0.01572091049509127, + 0.9842339873010757, 0.01572091049509127, 0.020708369567921426, 0.012761356714014346, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012079577260961323, 0.020494568714414577, 0.014999725839932225, + 0.9260178984144166, 0.014999725839932225, 0.020494568714414577, 0.012079577260961323, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011406249937033715, 0.020323276830796846, 0.01427049897589547, + 0.8699908611900614, 0.01427049897589547, 0.020323276830796846, 0.011406249937033715, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.010739885668427053, 0.020195821050919844, 0.013529673353514663, + 0.8160683688538813, 0.013529673353514663, 0.020195821050919844, 0.010739885668427053, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.010078984950909852, 0.02011373634678748, 0.012773461474477865, + 0.7641717492339299, 0.012773461474477865, 0.02011373634678748, 0.010078984950909852, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.009422038387182656, 0.020078772889390892, 0.011997823927452377, + 0.714228153935643, 0.011997823927452377, 0.020078772889390892, 0.009422038387182656, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008767529032845443, 0.020092901616456934, 0.011198449526820132, + 0.666170579353697, 0.011198449526820132, 0.020092901616456934, 0.008767529032845443, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008113937273985536, 0.020158317104718184, 0.010370738161833553, + 0.6199379211955804, 0.010370738161833553, 0.020158317104718184, 0.008113937273985536, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0074597491950631235, 0.020277436559656383, 0.009509788737517717, + 0.5754750633068475, 0.009509788737517717, 0.020277436559656383, 0.0074597491950631235, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006803469693447376, 0.020452893389597503, 0.008610395636312133, + 0.5327329997379648, 0.008610395636312133, 0.020452893389597503, 0.006803469693447376, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006143641960578383, 0.02068752343206284, 0.007667058500050344, + 0.49166898557812316, 0.007667058500050344, 0.02068752343206284, 0.006143641960578383, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.005478875370483477, 0.020984341480376777, 0.0066740118411544305, + 0.4522467062520626, 0.0066740118411544305, 0.020984341480376777, 0.005478875370483477, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004807884259029099, 0.021346505391491615, 0.005625282973925764, + 0.41443644562333654, 0.005625282973925764, 0.021346505391491615, 0.004807884259029099, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004129540458843831, 0.021777264883397283, 0.004514788783669197, + 0.3782152191145427, 0.004514788783669197, 0.021777264883397283, 0.004129540458843831, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0034429426145585534, 0.02227989239116914, 0.003336483415989145, + 0.3435668180937246, 0.003336483415989145, 0.02227989239116914, 0.0034429426145585534, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.002747504969929898, 0.02285759440107723, 0.002084569146468626, + 0.3104816859531193, 0.002084569146468626, 0.02285759440107723, 0.002747504969929898, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0020430670930948786, 0.023513403976262358, 0.0007537800418937311, + 0.27895651700543755, 0.0007537800418937311, 0.023513403976262358, 0.0020430670930948786, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0013300233978251724, 0.02425005916377439, -0.0006602593192813662, + 0.2489934433761332, -0.0006602593192813662, 0.02425005916377439, 0.0013300233978251724, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0006094668967761897, 0.025069877785020827, -0.0021606116240655854, + 0.22059866563075867, -0.0021606116240655854, 0.025069877785020827, 0.0006094668967761897, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00011666465391296764, 0.025974646182921557, -0.003748573494967981, + 0.1937804094239719, -0.003748573494967981, 0.025974646182921557, -0.00011666465391296764, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0008454593602234275, 0.026965546032927657, -0.005423248790488361, + 0.1685461738143366, -0.005423248790488361, 0.026965546032927657, -0.0008454593602234275, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001572943895404734, 0.028043146171365822, -0.007181228955240745, + 0.14489938686801052, -0.007181228955240745, 0.028043146171365822, -0.001572943895404734, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0022940654990537723, 0.02920748185994422, -0.009016469388698923, + 0.12283578206412402, -0.009016469388698923, 0.02920748185994422, -0.0022940654990537723, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00300276471441861, 0.03045822980171661, -0.01092043364353897, + 0.10233999616296947, -0.01092043364353897, 0.03045822980171661, -0.00300276471441861, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.003692145913972822, 0.031794965372505486, -0.012882530444692149, + 0.08338297892549675, -0.012882530444692149, 0.031794965372505486, -0.003692145913972822, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.004354732613871124, 0.033217465690195604, -0.014890802370879537, + 0.06592072535658294, -0.014890802370879537, 0.033217465690195604, -0.004354732613871124, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.004982775590714796, 0.03472600752942319, -0.01693276294712641, + 0.04989458738259731, -0.01693276294712641, 0.03472600752942319, -0.004982775590714796, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005568571184498544, 0.03632160923726255, -0.018996245863815382, + 0.03523307673797453, -0.018996245863815382, 0.03632160923726255, -0.005568571184498544, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.006104748644672433, 0.038006180434778686, -0.021070138080610097, + 0.02185476514757488, -0.021070138080610097, 0.038006180434778686, -0.006104748644672433, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0065844971791521045, 0.03978256560217537, -0.023144910308595994, + 0.009671726889897437, -0.023144910308595994, 0.03978256560217537, -0.0065844971791521045, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0070017198039596775, 0.04165448872876592, -0.025212913395941314, + -0.0014070199005761451, -0.025212913395941314, 0.04165448872876592, -0.0070017198039596775, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0073511161009073645, 0.04362641985225314, -0.027268456903050707, + -0.011472480137915833, -0.027268456903050707, 0.04362641985225314, -0.0073511161009073645, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007628205907201676, 0.04570338900086894, -0.029307715241549927, + -0.02061327993924956, -0.029307715241549927, 0.04570338900086894, -0.007628205907201676, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007829310125812072, 0.047890770880774314, -0.03132851632460964, + -0.028913953606506497, -0.03132851632460964, 0.047890770880774314, -0.007829310125812072, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00795150459616851, 0.050194057999571176, -0.03333006333430008, + -0.036453863019214945, -0.03333006333430008, 0.050194057999571176, -0.00795150459616851, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007992560255214052, 0.05261863365547091, -0.035312629029533874, + -0.04330663412836323, -0.035312629029533874, 0.05261863365547091, -0.007992560255214052, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007950879296388476, 0.05516955102285026, -0.03727724949970585, + -0.04953997889021508, -0.03727724949970585, 0.05516955102285026, -0.007950879296388476, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007825433717835525, 0.05785132102200681, -0.03922543350780073, + -0.05521578053924055, -0.03922543350780073, 0.05785132102200681, -0.007825433717835525, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007615709994466205, 0.06066770969908027, -0.04115889568026052, + -0.060390341622160414, -0.04115889568026052, 0.06066770969908027, -0.007615709994466205, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.007321661697466038, 0.06362154510536878, -0.04307931673408293, + -0.06511471853080739, -0.04307931673408293, 0.06362154510536878, -0.007321661697466038, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.006943670622413348, 0.06671453375070652, -0.04498813111922031, + -0.06943508848425076, -0.04498813111922031, 0.06671453375070652, -0.006943670622413348, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.00648251621641775, 0.0699470872733194, -0.04688634122852125, + -0.07339311307731378, -0.04688634122852125, 0.0699470872733194, -0.00648251621641775, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005939352662782059, 0.07331816076701286, -0.048774357104504805, + -0.07702627637527419, -0.048774357104504805, 0.07331816076701286, -0.005939352662782059, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.005315692765082841, 0.0768251050619134, -0.05065186090835174, + -0.08036818562479804, -0.05065186090835174, 0.0768251050619134, -0.005315692765082841, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.004613397681367045, 0.0804635360494666, -0.052517695999947406, + -0.08344882975575724, -0.052517695999947406, 0.0804635360494666, -0.004613397681367045, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.003834671532620145, 0.08422722479415042, -0.05436978109974913, + -0.08629479573717788, -0.05436978109974913, 0.08422722479415042, -0.003834671532620145, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.0029820599093485366, 0.0881080126237232, -0.05620505052769172, + -0.08892944616354345, -0.05620505052769172, 0.0881080126237232, -0.0029820599093485366, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.002058451303684598, 0.09209575559101986, -0.058019421854276616, + -0.09137306366767357, -0.058019421854276616, 0.09209575559101986, -0.002058451303684598, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -0.001067080490684071, 0.09617830261905488, -0.05980779240118017, + -0.0936429692204131, -0.05980779240118017, 0.09617830261905488, -0.001067080490684071, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, -1.1532867873105766e-05, 0.1003415112555353, -0.06156406586489085, + -0.09575362230206037, -0.06156406586489085, 0.1003415112555353, -1.1532867873105766e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0011042512611682952, 0.10456930426398219, -0.06328120989908398, + -0.09771671143982051, -0.06328120989908398, 0.10456930426398219, 0.0011042512611682952, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0022759735000516903, 0.1088437692786436, -0.0649513447928777, + -0.09954124375967778, -0.0649513447928777, 0.1088437692786436, 0.0022759735000516903, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0034989763315786183, 0.11314530247782455, -0.06656586245405707, + -0.1012336420149525, -0.06656586245405707, 0.11314530247782455, 0.0034989763315786183, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004768245316330148, 0.11745279574025301, -0.06811557380175774, + -0.10279785702217675, -0.06811557380175774, 0.11745279574025301, 0.004768245316330148, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006078415565457305, 0.12174386511488595, -0.06959088146191911, + -0.10423550254467637, -0.06959088146191911, 0.12174386511488595, 0.006078415565457305, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.007423783478834411, 0.12599511674941538, -0.07098197342694786, + -0.10554601841151943, -0.07098197342694786, 0.12599511674941538, 0.007423783478834411, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00879832463829725, 0.13018244479102814, -0.07227903218360417, + -0.1067268660589771, -0.07227903218360417, 0.13018244479102814, 0.00879832463829725, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.010195718593351182, 0.13428135430360688, -0.07347245282778254, + -0.10777375877505808, -0.07347245282778254, 0.13428135430360688, 0.010195718593351182, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011609381071283177, 0.13826730104147508, -0.07455306296265943, + -0.10868092678699016, -0.07455306296265943, 0.13826730104147508, 0.011609381071283177, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.013032503887419241, 0.14211603906855, -0.07551233679313193, -0.10944141505826782, + -0.07551233679313193, 0.14211603906855, 0.013032503887419241, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.014458102531642598, 0.1458039667764642, -0.07634259583614766, + -0.11004740938216329, -0.07634259583614766, 0.1458039667764642, 0.014458102531642598, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01587907107645915, 0.1493084618681454, -0.07703718908475286, -0.11049058421385526, + -0.07703718908475286, 0.1493084618681454, 0.01587907107645915, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01728824370643819, 0.15260819633274073, -0.07759064628113224, + -0.11076246381852353, -0.07759064628113224, 0.15260819633274073, 0.01728824370643819, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.018678461828162428, 0.15568342330743803, -0.07799879912468151, + -0.11085478686247911, -0.07799879912468151, 0.15568342330743803, 0.018678461828162428, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.020042645405564764, 0.15851622893771244, -0.07825886669010941, + -0.1107598636499124, -0.07825886669010941, 0.15851622893771244, 0.020042645405564764, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.021373866898111882, 0.1610907438211087, -0.07836950295967421, + -0.11047091488469168, -0.07836950295967421, 0.1610907438211087, 0.021373866898111882, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022665425977985754, 0.1633933102517551, -0.07833080607254717, + -0.10998238114724962, -0.07833080607254717, 0.1633933102517551, 0.022665425977985754, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.023910923081764703, 0.16541260316925707, -0.07814429054995366, + -0.10929019320564098, -0.07814429054995366, 0.16541260316925707, 0.023910923081764703, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.025104329821861004, 0.16713970435974004, -0.07781282526261254, + -0.10839199476574081, -0.07781282526261254, 0.16713970435974004, 0.025104329821861004, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.026240054346310566, 0.16856813097492765, -0.07734054117962504, + -0.10728731120595109, -0.07734054117962504, 0.16856813097492765, 0.026240054346310566, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.027312999889376653, 0.1696938207629649, -0.07673271391171523, + -0.10597766010326852, -0.07673271391171523, 0.1696938207629649, 0.027312999889376653, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02831861499035883, 0.17051507749884312, -0.07599562670037417, + -0.10446660178799276, -0.07599562670037417, 0.17051507749884312, 0.02831861499035883, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02925293415941186, 0.17103248094080215, -0.07513641979965484, + -0.10275973060637106, -0.07513641979965484, 0.17103248094080215, 0.02925293415941186, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.030112608118392233, 0.171248766218837, -0.07416293216646516, -0.10086460987477273, + -0.07416293216646516, 0.171248766218837, 0.030112608118392233, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03089492312085416, 0.17116867789492565, -0.07308354105670907, + -0.09879065554581189, -0.07308354105670907, 0.17116867789492565, 0.03089492312085416, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03159780923671852, 0.17079880404560502, -0.07190700457237119, + -0.09654897527487084, -0.07190700457237119, 0.17079880404560502, 0.03159780923671852, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.032219837853337666, 0.17014739563705644, -0.07064231148129221, + -0.09415217080718365, -0.07064231148129221, 0.17014739563705644, 0.032219837853337666, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03276020897763042, 0.16922417622541044, -0.0692985418022022, -0.09161411236924119, + -0.0692985418022022, 0.16922417622541044, 0.03276020897763042, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03321872920920569, 0.16804014665554667, -0.06788474077489179, + -0.08894969404630065, -0.06788474077489179, 0.16804014665554667, 0.03321872920920569, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.033595781481742054, 0.16660738898358987, -0.06640980797430576, + -0.08617457899267833, -0.06640980797430576, 0.16660738898358987, 0.033595781481742054, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03389228783364473, 0.16493887334193016, -0.06488240252288952, + -0.08330494280970752, -0.06488240252288952, 0.16493887334193016, 0.03389228783364473, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03410966656788821, 0.1630482709274374, -0.06331086464107381, -0.08035722261043676, + -0.06331086464107381, 0.1630482709274374, 0.03410966656788821, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03424978519757542, 0.1609497757461919, -0.061703153173021795, + -0.07734787825205619, -0.061703153173021795, 0.1609497757461919, 0.03424978519757542, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0343149105539638, 0.15865793720984914, -0.0600667982440882, -0.07429317103963252, + -0.0600667982440882, 0.15865793720984914, 0.0343149105539638, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03430765736565891, 0.15618750516497132, -0.05840886784933117, + -0.0712089639676309, -0.05840886784933117, 0.15618750516497132, 0.03430765736565891, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03423093651109335, 0.15355328845778055, -0.05673594693168935, + -0.06811054633736092, -0.05673594693168935, 0.15355328845778055, 0.03423093651109335, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03408790401144248, 0.15077002770211081, -0.055054127372992846, + -0.06501248442809825, -0.055054127372992846, 0.15077002770211081, 0.03408790401144248, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03388191167797055, 0.14785228253234314, -0.053369007274666154, + -0.06192849884951968, -0.053369007274666154, 0.14785228253234314, 0.03388191167797055, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03361646016577402, 0.14481433328967158, -0.05168569793141678, + -0.058871368294180534, -0.05168569793141678, 0.14481433328967158, 0.03361646016577402, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0332951550231733, 0.14167009680928633, -0.050008836982727886, + -0.05585285865668988, -0.050008836982727886, 0.14167009680928633, 0.0332951550231733, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.032921666169369604, 0.13843305574788786, -0.048342606347936946, + -0.052883675896989425, -0.048342606347936946, 0.13843305574788786, 0.032921666169369604, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03249969108758619, 0.13511620071231362, -0.0466907536962747, -0.04997344059358528, + -0.0466907536962747, 0.13511620071231362, 0.03249969108758619, 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.032032921890455895, 0.1317319843180482, -0.045056616361607967, + -0.04713068184781201, -0.045056616361607967, 0.1317319843180482, 0.032032921890455895, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03152501630108383, 0.12829228621607214, -0.04344314677263471, + -0.04436284804524047, -0.04344314677263471, 0.12829228621607214, 0.03152501630108383, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.030979572498078808, 0.12480838807359028, -0.04185293862573871, + -0.0416763319364428, -0.04185293862573871, 0.12480838807359028, 0.030979572498078808, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.03040010769583014, 0.12129095747292831, -0.04028825317399129, + -0.03907650754557597, -0.04028825317399129, 0.12129095747292831, 0.03040010769583014, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.029790040271670946, 0.11775003969857455, -0.03875104513865144, + -0.03656777653191128, -0.03875104513865144, 0.11775003969857455, 0.029790040271670946, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.029152675207876143, 0.11419505640942304, -0.03724298786682266, + -0.03415362179725522, -0.03724298786682266, 0.11419505640942304, 0.029152675207876143, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.028491192587024695, 0.11063481023744969, -0.03576549746020129, + -0.031836666334645415, -0.03576549746020129, 0.11063481023744969, 0.028491192587024695, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.027808638862116892, 0.1070774944105696, -0.03431975568515159, + -0.029618735535888067, -0.03431975568515159, 0.1070774944105696, 0.027808638862116892, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.027107920616042915, 0.10353070656276242, -0.03290673154470715, + -0.027500921405645452, -0.03290673154470715, 0.10353070656276242, 0.027107920616042915, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.026391800526555913, 0.10000146596506253, -0.03152720144970407, + -0.025483647358080615, -0.03152720144970407, 0.10000146596506253, 0.026391800526555913, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.025662895261048736, 0.09649623348417699, -0.030181767970762673, + -0.02356673249146043, -0.030181767970762673, 0.09649623348417699, 0.025662895261048736, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02492367503849117, 0.09302093364879774, -0.028870877186791207, + -0.021749454441251034, -0.028870877186791207, 0.09302093364879774, 0.02492367503849117, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.024176464612450634, 0.08958097827547513, -0.027594834670770046, + -0.020030610099799326, -0.027594834670770046, 0.08958097827547513, 0.024176464612450634, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.023423445447939006, 0.08618129117467718, -0.0263538201712561, + -0.018408573658632545, -0.0263538201712561, 0.08618129117467718, 0.023423445447939006, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.022666658884928158, 0.08282633352254906, -0.02514790105977376, + -0.016881351577052353, -0.02514790105977376, 0.08282633352254906, 0.022666658884928158, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.021908010101905084, 0.07952012954409728, -0.023977044621219537, + -0.015446634208105875, -0.023977044621219537, 0.07952012954409728, 0.021908010101905084, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.021149272713191326, 0.07626629220877668, -0.022841129267700464, + -0.014101843921051706, -0.022841129267700464, 0.07626629220877668, 0.021149272713191326, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.02039209385341882, 0.0730680486894648, -0.021739954756716143, + -0.012844179649311192, -0.021739954756716143, 0.0730680486894648, 0.02039209385341882, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.019637999621226802, 0.06992826538070454, -0.02067325149307375, + -0.011670657866229473, -0.02067325149307375, 0.06992826538070454, 0.019637999621226802, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01888840077166184, 0.06684947231189879, -0.01964068899095258, + -0.010578150049425835, -0.01964068899095258, 0.06684947231189879, 0.01888840077166184, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.018144598562810855, 0.06383388682618449, -0.01864188356863349, + -0.009563416739903238, -0.01864188356863349, 0.06383388682618449, 0.018144598562810855, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.017407790676786276, 0.060883436426201455, -0.01767640534391698, + -0.008623138336115924, -0.01767640534391698, 0.060883436426201455, 0.017407790676786276, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01667907714833082, 0.05799978071435634, -0.016743784593497835, + -0.007753942787567138, -0.016743784593497835, 0.05799978071435634, 0.01667907714833082, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01595946624602693, 0.055184332377734346, -0.015843517534724745, + -0.006952430368734967, -0.015843517534724745, 0.055184332377734346, 0.01595946624602693, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01524988026146505, 0.052438277186979444, -0.014975071583430607, + -0.00621519572363722, -0.014975071583430607, 0.052438277186979444, 0.01524988026146505, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.014551161170813835, 0.049762592994548584, -0.014137890136957558, + -0.005538847375380562, -0.014137890136957558, 0.049762592994548584, 0.014551161170813835, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.013864076141161075, 0.04715806773118068, -0.01333139692721728, + -0.0049200248947248795, -0.01333139692721728, 0.04715806773118068, 0.013864076141161075, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.013189322860842418, 0.044625316410468165, -0.012554999984639917, + -0.004355413917965679, -0.012554999984639917, 0.044625316410468165, 0.013189322860842418, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.012527534678868054, 0.042164797160451246, -0.011808095250215507, + -0.0038417591981324585, -0.011808095250215507, 0.042164797160451246, 0.012527534678868054, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011879285543590048, 0.039776826308420526, -0.011090069869515272, + -0.003375875865298065, -0.011090069869515272, 0.039776826308420526, 0.011879285543590048, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.011245094735040172, 0.03746159255092288, -0.01040030519960741, + -0.002954659062279083, -0.01040030519960741, 0.03746159255092288, 0.011245094735040172, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01062543138899451, 0.0352191702455127, -0.009738179557130987, + -0.002575092111640429, -0.009738179557130987, 0.0352191702455127, 0.01062543138899451, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.01002071881388537, 0.033049531864316604, -0.009103070733456415, + -0.0022342533590865494, -0.009103070733456415, 0.033049531864316604, 0.01002071881388537, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.009431338604291527, 0.030952559652261118, -0.00849435830085321, + -0.001929321827340586, -0.00849435830085321, 0.030952559652261118, 0.009431338604291527, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00885763455691793, 0.02892805653482632, -0.007911425731832346, + -0.0016575818036823006, -0.007911425731832346, 0.02892805653482632, 0.00885763455691793, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.008299916396886261, 0.026975756321897703, -0.00735366235241049, + -0.0014164264736656444, -0.00735366235241049, 0.026975756321897703, 0.008299916396886261, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.007758463323796297, 0.02509533325559133, -0.006820465148876983, + -0.0012033607032524369, -0.006820465148876983, 0.02509533325559133, 0.007758463323796297, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00723352738850902, 0.02328641095115981, -0.006311240446785602, + -0.0010160030618025873, -0.006311240446785602, 0.02328641095115981, 0.00723352738850902, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006725336712992241, 0.02154857078132125, -0.005825405480329947, + -0.0008520871690983525, -0.005825405480329947, 0.02154857078132125, 0.006725336712992241, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.006234098566950442, 0.019881359755816487, -0.005362389870033064, + -0.0007094624408918906, -0.005362389870033064, 0.019881359755816487, 0.006234098566950442, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.005760002316411907, 0.01828429794987211, -0.004921637026823015, + -0.0005860942993613338, -0.004921637026823015, 0.01828429794987211, 0.005760002316411907, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.005303222261065987, 0.01675688553776423, -0.004502605501139747, + -0.00048006390733732954, -0.004502605501139747, 0.01675688553776423, 0.005303222261065987, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004863920379060894, 0.015298609491174531, -0.0041047702968251875, + -0.0003895674782050508, -0.0041047702968251875, 0.015298609491174531, 0.004863920379060894, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004442249000326775, 0.013908950006852043, -0.0037276241713101927, + -0.00031291520696436566, -0.0037276241713101927, 0.013908950006852043, 0.004442249000326775, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.004038353432502189, 0.012587386734843348, -0.0033706789462418277, + -0.0002485298620124213, -0.0033706789462418277, 0.012587386734843348, 0.004038353432502189, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0036523745674531217, 0.011333404887848644, -0.0030334668564421428, + -0.00019494507174784906, -0.0030334668564421428, 0.011333404887848644, 0.0036523745674531217, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.003284451501651596, 0.010146501325429194, -0.002715541970442476, + -0.00015080333504935921, -0.002715541970442476, 0.010146501325429194, 0.003284451501651596, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.002934724210754197, 0.009026190724948266, -0.002416481723293585, + -0.0001148537799755068, -0.002416481723293585, 0.009026190724948266, 0.002934724210754197, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.002603336328576407, 0.0079720119771072, -0.0021358886129830344, + -8.594969063164755e-05, -0.0021358886129830344, 0.0079720119771072, 0.002603336328576407, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0022904380944429475, 0.006983534980919593, -0.0018733921269303562, + -6.304581796301961e-05, -0.0018733921269303562, 0.006983534980919593, 0.0022904380944429475, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.001996189552622188, 0.0060603680666998835, -0.001628650986986718, + -4.519548618670388e-05, -0.001628650986986718, 0.0060603680666998835, 0.001996189552622188, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0017207641164043918, 0.005202166355252167, -0.0014013558338338205, + -3.154750257056882e-05, -0.0014013558338338205, 0.005202166355252167, 0.0017207641164043918, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0014643526525370313, 0.004408641481875831, -0.0011912325207556079, + -2.1342874174728143e-05, -0.0011912325207556079, 0.004408641481875831, 0.0014643526525370313, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0012271683082008273, 0.003679573301330307, -0.0009980462631226912, + -1.391133083026421e-05, -0.0009980462631226912, 0.003679573301330307, 0.0012271683082008273, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0010094524084547753, 0.0030148244913681863, -0.0008216070127058113, + -8.667648809555496e-06, -0.0008216070127058113, 0.0030148244913681863, 0.0010094524084547753, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.000811481927046611, 0.0024143594765466767, -0.000661776631342615, + -5.107764012090297e-06, -0.000661776631342615, 0.0024143594765466767, 0.000811481927046611, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0006335793368705041, 0.0018782699775990155, -0.0005184787988944042, + -2.8046565393486045e-06, -0.0005184787988944042, 0.0018782699775990155, 0.0006335793368705041, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00047612620344986633, 0.0014068111325110176, -0.00039171326078830753, + -1.4039794380477953e-06, -0.00039171326078830753, 0.0014068111325110176, 0.00047612620344986633, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0003395829838189614, 0.0010004554113491626, -0.00028157736160241086, + -6.19391733485424e-07, -0.00028157736160241086, 0.0010004554113491626, 0.0003395829838189614, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00022451987134643176, 0.0006599787278624588, -0.0001883007591939652, + -2.2753702842657522e-07, -0.0001883007591939652, 0.0006599787278624588, 0.00022451987134643176, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.00013166935841117517, 0.0003866110119695284, -0.00011230657311610516, + -6.257859506393342e-08, -0.00011230657311610516, 0.0003866110119695284, 0.00013166935841117517, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 6.202832896855668e-05, 0.00018233687413472344, -5.433431864813517e-05, + -1.0147908594594603e-08, -5.433431864813517e-05, 0.00018233687413472344, 6.202832896855668e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 1.7105492372389147e-05, 5.0648090511620985e-05, -1.5750128492374493e-05, + -4.528692991377619e-10, -1.5750128492374493e-05, 5.0648090511620985e-05, 1.7105492372389147e-05, + 0.0, 0.0, 0.0, 0.0] +- [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +q20: 1.0 +replica: 3 +xgrid: [1e-09, 1.29708482343957e-09, 1.68242903474257e-09, 2.18225315420583e-09, 2.83056741739819e-09, + 3.67148597892941e-09, 4.76222862935315e-09, 6.1770142737618e-09, 8.01211109898438e-09, + 1.03923870607245e-08, 1.34798064073805e-08, 1.74844503691778e-08, 2.26788118881103e-08, + 2.94163370300835e-08, 3.81554746595878e-08, 4.94908707232129e-08, 6.41938295708371e-08, + 8.32647951986859e-08, 1.08001422993829e-07, 1.4008687308113e-07, 1.81704331793772e-07, + 2.35685551545377e-07, 3.05703512595323e-07, 3.96522309841747e-07, 5.1432125723657e-07, + 6.67115245136676e-07, 8.65299922973143e-07, 1.12235875241487e-06, 1.45577995547683e-06, + 1.88824560514613e-06, 2.44917352454946e-06, 3.17671650028717e-06, 4.12035415232797e-06, + 5.3442526575209e-06, 6.93161897806315e-06, 8.99034258238145e-06, 1.16603030112258e-05, + 1.51228312288769e-05, 1.96129529349212e-05, 2.54352207134502e-05, 3.29841683435992e-05, + 4.27707053972016e-05, 5.54561248105849e-05, 7.18958313632514e-05, 9.31954227979614e-05, + 0.00012078236773133, 0.000156497209466554, 0.000202708936328495, 0.000262459799331951, + 0.000339645244168985, 0.000439234443000422, 0.000567535660104533, 0.000732507615725537, + 0.000944112105452451, 0.00121469317686978, 0.00155935306118224, 0.00199627451141338, + 0.00254691493736552, 0.00323597510213126, 0.00409103436509565, 0.00514175977083962, + 0.00641865096062317, 0.00795137940306351, 0.009766899996241, 0.0118876139251364, + 0.0143298947643919, 0.0171032279460271, 0.0202100733925079, 0.0236463971369542, + 0.0274026915728357, 0.0314652506132444, 0.0358174829282429, 0.0404411060163317, + 0.0453171343973807, 0.0504266347950069, 0.0557512610084339, 0.0612736019390519, + 0.0669773829498255, 0.0728475589986517, 0.0788703322292727, 0.0850331197801452, + 0.0913244910278679, 0.0977340879783772, 0.104252538208639, 0.110871366547237, 0.117582909372878, + 0.124380233801599, 0.131257062945031, 0.138207707707289, 0.145227005135651, 0.152310263065985, + 0.159453210652156, 0.166651954293987, 0.173902938455578, 0.181202910873333, 0.188548891679097, + 0.195938145999193, 0.203368159629765, 0.210836617429103, 0.218341384106561, 0.225880487124065, + 0.233452101459503, 0.241054536011681, 0.248686221452762, 0.256345699358723, 0.264031612468684, + 0.271742695942783, 0.279477769504149, 0.287235730364833, 0.295015546847664, 0.302816252626866, + 0.310636941519503, 0.318476762768082, 0.326334916761672, 0.334210651149156, 0.342103257303627, + 0.350012067101685, 0.357936449985571, 0.365875810279643, 0.373829584735962, 0.381797240286494, + 0.389778271981947, 0.397772201099286, 0.40577857340234, 0.413796957540671, 0.421826943574548, + 0.429868141614175, 0.437920180563205, 0.44598270695699, 0.454055383887562, 0.462137890007651, + 0.470229918607142, 0.478331176755675, 0.486441384506059, 0.494560274153348, 0.502687589545177, + 0.510823085439086, 0.518966526903235, 0.527117688756998, 0.535276355048428, 0.543442318565661, + 0.551615380379768, 0.559795349416641, 0.5679820420558, 0.576175281754088, 0.584374898692498, + 0.59258072944444, 0.60079261666395, 0.609010408792398, 0.61723395978245, 0.625463128838069, + 0.633697780169485, 0.641937782762089, 0.650183010158361, 0.658433340251944, 0.666688655093089, + 0.674948840704708, 0.683213786908386, 0.691483387159697, 0.699757538392251, 0.708036140869916, + 0.716319098046733, 0.724606316434025, 0.732897705474271, 0.741193177421404, 0.749492647227008, + 0.757796032432224, 0.766103253064927, 0.774414231541921, 0.782728892575836, 0.791047163086478, + 0.799368972116378, 0.807694250750291, 0.816022932038457, 0.824354950923382, 0.832690244169987, + 0.841028750298844, 0.8493704095226, 0.857715163684985, 0.866062956202683, 0.874413732009721, + 0.882767437504206, 0.891124020497459, 0.899483430165226, 0.907845617001021, 0.916210532771399, + 0.924578130473112, 0.932948364292029, 0.941321189563734, 0.949696562735755, 0.958074441331298, + 0.966454783914439, 0.974837550056705, 0.983222700304978, 0.991610196150662, 1.0] diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_pol_3.json b/n3fit/src/n3fit/tests/regressions/quickcard_pol_3.json new file mode 100644 index 0000000000..328e7f7cbf --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_pol_3.json @@ -0,0 +1,70 @@ +{ + "preprocessing": [ + { + "fl": "sng", + "smallx": 1.104804515838623, + "largex": 1.8659257888793945, + "trainable": false + }, + { + "fl": "g", + "smallx": 1.160773754119873, + "largex": 4.485008239746094, + "trainable": false + }, + { + "fl": "t3", + "smallx": 0.6826222538948059, + "largex": 1.825988531112671, + "trainable": false + }, + { + "fl": "t8", + "smallx": 0.853481650352478, + "largex": 2.523850202560425, + "trainable": false + } + ], + "stop_epoch": 62, + "best_epoch": 0, + "erf_tr": 2.236317604012866, + "erf_vl": 1.891036578607623, + "chi2": 1.5362983721971202, + "pos_state": "POS_PASS", + "arc_lengths": [ + 1.0232185373829865, + 0.9935004234019762, + 0.9899487587939698, + 0.9899487587939698, + 0.9899487587939698 + ], + "integrability": [ + 5.342948306008566e-16, + 1.1102230246251565e-16, + 1.942890293094024e-16, + 0.020493690636281092, + 1.942890293094024e-16 + ], + "timing": { + "walltime": { + "Total": 8.025956392288208, + "start": 0.0, + "replica_set": 0.2008500099182129, + "replica_fitted": 8.025688409805298, + "replica_set_to_replica_fitted": 7.824838399887085 + }, + "cputime": { + "Total": 10.633196927999997, + "start": 0.0, + "replica_set": 0.2002973319999981, + "replica_fitted": 10.632905010999998, + "replica_set_to_replica_fitted": 10.432607679 + } + }, + "version": { + "tensorflow": "2.16.1, mkl=??", + "numpy": "1.24.0", + "nnpdf": "4.0.9.post574.dev0+412f8f857.dirty", + "validphys": "4.0.9.post574.dev0+412f8f857.dirty" + } +} diff --git a/n3fit/src/n3fit/tests/regressions/weights_pol_1.weights.h5 b/n3fit/src/n3fit/tests/regressions/weights_pol_1.weights.h5 new file mode 100644 index 0000000000..5f7d2f80cb Binary files /dev/null and b/n3fit/src/n3fit/tests/regressions/weights_pol_1.weights.h5 differ diff --git a/n3fit/src/n3fit/tests/regressions/weights_pol_3.weights.h5 b/n3fit/src/n3fit/tests/regressions/weights_pol_3.weights.h5 new file mode 100644 index 0000000000..3912417844 Binary files /dev/null and b/n3fit/src/n3fit/tests/regressions/weights_pol_3.weights.h5 differ diff --git a/n3fit/src/n3fit/tests/test_backend.py b/n3fit/src/n3fit/tests/test_backend.py index a0c73c1d68..eaae5667c8 100644 --- a/n3fit/src/n3fit/tests/test_backend.py +++ b/n3fit/src/n3fit/tests/test_backend.py @@ -88,6 +88,14 @@ def test_c_to_py_fun(): op_smn = op.c_to_py_fun("SMN") reference = lambda x, y, z, d: (x + y) / (z + d) numpy_check(op_smn, reference, "four") + # x - abs(y) + op_addp = op.c_to_py_fun("SUBTRACT_ABS") + reference = lambda x, y: x - np.abs(y) + numpy_check(op_addp, reference, "same") + # x + y - abs(z+d) + op_smp = op.c_to_py_fun("SUBTRACT_ABSPAIR") + reference = lambda x, y, z, d: x + y - np.abs(z + d) + numpy_check(op_smp, reference, "four") # COM op_com = op.c_to_py_fun("COM") reference = lambda x, y, z, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t : (x + y + z + d + e + f + g + h + i + j) / (k + l + m + n + o + p + q + r + s + t) diff --git a/n3fit/src/n3fit/tests/test_fit.py b/n3fit/src/n3fit/tests/test_fit.py index 3de3158106..7b80065552 100644 --- a/n3fit/src/n3fit/tests/test_fit.py +++ b/n3fit/src/n3fit/tests/test_fit.py @@ -29,6 +29,7 @@ REGRESSION_FOLDER = pathlib.Path(__file__).with_name("regressions") QUICKNAME = "quickcard" QUICKNAME_QED = "quickcard_qed" +QUICKNAME_POL = "quickcard_pol" QUICKNAME_SEQUENTIAL = "quickcard-sequential" QUICKNAME_PARALLEL = "quickcard-parallel" WEIGHT_NAME = "weights.weights.h5" @@ -104,9 +105,9 @@ def check_fit_results( if key in equal_checks: assert_equal(value, reference, err_msg=err_msg) elif key in approx_checks: - assert_allclose(value, reference, err_msg=err_msg, rtol=rel_error) + assert_allclose(value, reference, err_msg=err_msg, rtol=rel_error, atol=1e-9) elif key in relaxed_checks: - assert_allclose(value, reference, err_msg=err_msg, rtol=rel_error * 10) + assert_allclose(value, reference, err_msg=err_msg, rtol=rel_error * 10, atol=1e-6) elif key == "preprocessing": for ref, cur in zip(reference, value): err_msg += f" - {ref['fl']}" @@ -141,12 +142,13 @@ def _auxiliary_performfit(tmp_path, runcard=QUICKNAME, replica=1, timing=True, r quickcard = f"{runcard}.yml" # Prepare the runcard quickpath = REGRESSION_FOLDER / quickcard - weightpath = REGRESSION_FOLDER / f"weights_{replica}.weights.h5" + weight_name = "weights_pol" if "_pol" in quickcard else "weights" + weightpath = REGRESSION_FOLDER / f"{weight_name}_{replica}.weights.h5" # read up the previous json file for the given replica old_json_file = REGRESSION_FOLDER / f"{runcard}_{replica}.json" # cp runcard and weights to tmp folder shutil.copy(quickpath, tmp_path) - shutil.copy(weightpath, tmp_path / WEIGHT_NAME) + shutil.copy(weightpath, tmp_path / f"{weight_name}.weights.h5") # run the fit sp.run(f"{EXE} {quickcard} {replica}".split(), cwd=tmp_path, check=True) @@ -155,14 +157,14 @@ def _auxiliary_performfit(tmp_path, runcard=QUICKNAME, replica=1, timing=True, r @pytest.mark.darwin -@pytest.mark.parametrize("runcard", [QUICKNAME, QUICKNAME_QED]) +@pytest.mark.parametrize("runcard", [QUICKNAME, QUICKNAME_QED, QUICKNAME_POL]) def test_performfit(tmp_path, runcard): _auxiliary_performfit(tmp_path, runcard=runcard, replica=3, timing=False, rel_error=1e-1) @pytest.mark.linux @pytest.mark.parametrize("replica", [1, 3]) -@pytest.mark.parametrize("runcard", [QUICKNAME, QUICKNAME_QED]) +@pytest.mark.parametrize("runcard", [QUICKNAME, QUICKNAME_QED, QUICKNAME_POL]) def test_performfit_and_timing(tmp_path, runcard, replica): _auxiliary_performfit(tmp_path, runcard=runcard, replica=replica, timing=True) diff --git a/n3fit/src/n3fit/tests/test_layers.py b/n3fit/src/n3fit/tests/test_layers.py index 6ff4887d64..340a99bf79 100644 --- a/n3fit/src/n3fit/tests/test_layers.py +++ b/n3fit/src/n3fit/tests/test_layers.py @@ -2,12 +2,14 @@ Tests for the layers of n3fit This module checks that the layers do what they would do with numpy """ + import dataclasses import numpy as np from n3fit.backends import operations as op import n3fit.layers as layers +from validphys.loader import Loader from validphys.pdfbases import fitbasis_to_NN31IC FLAVS = 3 @@ -15,6 +17,13 @@ NDATA = 3 THRESHOLD = 1e-6 +PARAMS = { + "dataset_name": "NULL", + "operation_name": "NULL", + "nfl": FLAVS, + "boundary_condition": None, +} + @dataclasses.dataclass class _fake_FKTableData: @@ -23,6 +32,7 @@ class _fake_FKTableData: fktable: np.array luminosity_mapping: np.array xgrid: np.array + is_polarized: bool = False # Helper functions @@ -112,7 +122,7 @@ def generate_had(nfk=1): def test_DIS_basis(): fktables = generate_DIS(2) fks = [i.fktable for i in fktables] - obs_layer = layers.DIS(fktables, fks, "NULL", nfl=FLAVS) + obs_layer = layers.DIS(fktables, fks, **PARAMS) # Get the masks from the layer all_masks = obs_layer.all_masks for result, fk in zip(all_masks, fktables): @@ -127,7 +137,7 @@ def test_DIS_basis(): def test_DY_basis(): fktables = generate_had(2) fks = [i.fktable for i in fktables] - obs_layer = layers.DY(fktables, fks, "NULL", nfl=FLAVS) + obs_layer = layers.DY(fktables, fks, **PARAMS) # Get the mask from the layer all_masks = obs_layer.all_masks for result, fk in zip(all_masks, fktables): @@ -142,9 +152,11 @@ def test_DIS(): tests = [(2, "ADD"), (1, "NULL")] for nfk, ope in tests: # Input values + kwargs = dict(PARAMS) + kwargs["operation_name"] = ope fktables = generate_DIS(nfk) fks = [i.fktable for i in fktables] - obs_layer = layers.DIS(fktables, fks, ope, nfl=FLAVS) + obs_layer = layers.DIS(fktables, fks, **kwargs) pdf = np.random.rand(XSIZE, FLAVS) kp = op.numpy_to_tensor([[pdf]]) # add batch and replica dimension # generate the n3fit results @@ -166,9 +178,11 @@ def test_DY(): tests = [(2, "ADD"), (1, "NULL")] for nfk, ope in tests: # Input values + kwargs = dict(PARAMS) + kwargs["operation_name"] = ope fktables = generate_had(nfk) fks = [i.fktable for i in fktables] - obs_layer = layers.DY(fktables, fks, ope, nfl=FLAVS) + obs_layer = layers.DY(fktables, fks, **kwargs) pdf = np.random.rand(XSIZE, FLAVS) kp = op.numpy_to_tensor([[pdf]]) # add batch and replica dimension # generate the n3fit results @@ -282,3 +296,15 @@ def test_compute_photon(): xgrid = np.geomspace(1e-4, 1.0, 10) addphoton.register_photon(xgrid) np.testing.assert_allclose(addphoton._pdf_ph, [np.exp(-xgrid)]) + + +def test_computation_bc(): + """Test the computation of the boundary conditions.""" + n_replicas = 25 + xgrid = np.geomspace(1e-4, 1.0, num=100) + pdf = Loader().check_pdf("NNPDF40_nnlo_as_01180") + respdf_bc = layers.observable.compute_pdf_boundary( + pdf=pdf, q0_value=10.0, xgrid=xgrid, n_std=0.0, n_replicas=n_replicas + ) + exp_shape = [1, n_replicas, xgrid.size, 14] # (batch, replicas, x, flavours) + np.testing.assert_allclose(respdf_bc.shape.as_list(), exp_shape) diff --git a/n3fit/src/n3fit/tests/test_msr.py b/n3fit/src/n3fit/tests/test_msr.py index 9f76d3f421..d376956b3f 100644 --- a/n3fit/src/n3fit/tests/test_msr.py +++ b/n3fit/src/n3fit/tests/test_msr.py @@ -1,4 +1,5 @@ import numpy as np +import pytest from n3fit.backends import operations as op from n3fit.layers import MSR_Normalization @@ -76,3 +77,18 @@ def test_vsr(): ] ) np.testing.assert_allclose(output, known_output, rtol=1e-5) + + +def test_tsr(): + """Test the sum rules used in polarized fits""" + with pytest.raises(ValueError): + # Check that seeds _are_ needed + layer = MSR_Normalization(mode='TSR') + + layer = MSR_Normalization(mode="TSR", replica_seeds=[3]) + output = apply_layer_to_fixed_input(layer) + # They should _all_ be 1.0 except for entries 9 and 10 + known_output = np.ones((1, 1, 14)) + known_output[0, 0, 9] = 1.1133982 + known_output[0, 0, 10] = -0.9901034 + np.testing.assert_allclose(output, known_output, rtol=1e-5) diff --git a/validphys2/src/validphys/comparefittemplates/__init__.py b/validphys2/src/validphys/comparefittemplates/__init__.py index 46c1a986b9..83d9340a9e 100644 --- a/validphys2/src/validphys/comparefittemplates/__init__.py +++ b/validphys2/src/validphys/comparefittemplates/__init__.py @@ -1,4 +1,5 @@ import pathlib template_path = pathlib.Path(__file__).with_name('comparecard.yaml') +template_pol_path = pathlib.Path(__file__).with_name('comparecard_polarized.yaml') template_lite_path = pathlib.Path(__file__).with_name('comparecard_lite.yaml') diff --git a/validphys2/src/validphys/comparefittemplates/comparecard_polarized.yaml b/validphys2/src/validphys/comparefittemplates/comparecard_polarized.yaml new file mode 100644 index 0000000000..351791e095 --- /dev/null +++ b/validphys2/src/validphys/comparefittemplates/comparecard_polarized.yaml @@ -0,0 +1,172 @@ +# This is the driver template for vp-comparefits. It consists on a validphys +# runcard where some settings are missing and are to be filled by the +# vp-comparefits script. The settings below are a sample of such settings, kept +# for reference +# +# meta: +# title: The title of the Report +# keywords: [report_template] +# author: NNPDF Collaboration +# +# current: +# fit: {id: id_of_the_base_fit} +# pdf: {id: id_of_the_base_fit, label: "Current Fit"} +# theory: +# from_: fit +# theoryid: +# from_: theory +# speclabel: "Current Fit" +# +# reference: +# fit: {id: id_of_the_reference_fit} +# pdf: {id: id_of_the_reference_fit, label: "Reference Fit" } +# theory: +# from_: fit +# theoryid: +# from_: theory +# speclabel: "Reference Fit" + +pdfs: + - from_: current + - from_: reference + +fits: + - from_: current + - from_: reference + +unpolarized_bcs: + - from_: current + - from_: reference + +use_cuts: "fromfit" +use_weights_in_covmat: False + +Q: 1.00 + +Scales: + - Q: 1.00 + Scaletitle: "Q = 1 GeV" + - Q: 100 + Scaletitle: "Q = 100 GeV" + +PositivityScales: + - Q: 1.00 + Scaletitle: "Q² = 1 GeV²" + - Q: 2.236 + Scaletitle: "Q² = 5 GeV²" + +PositivityBoundSpecs: +- basis: uplus + xmin: 0.001 + ymin: -0.10 + ymax: 0.400 +- basis: dplus + xmin: 0.001 + ymin: -0.20 + ymax: 0.100 +- basis: splus + xmin: 0.001 + ymin: -0.20 + ymax: 0.200 +- basis: giso + xmin: 0.001 + ymin: -0.30 + ymax: 0.300 + +PDFnormalize: + - Normtitle: Absolute + +Basespecs: + - basis: POLARIZED_EVOL + Basistitle: Evolution basis + +PDFscalespecs: + - xscale: log + Xscaletitle: Log + - xscale: linear + Xscaletitle: Linear + +Energies: + - sqrts: 13000 + Energytitle: "13 TeV" + +Distspecs: + - ymin: 0 + ymax: 20 + +PDFlimspecs: + - xmin: 0.001 + xmax: 1.000 + ymax: 0.600 + +SpinMoments: + - Q: 3.162 + +pos_use_kin: True + +dataset_report: + meta: Null + template: data.md + +pdf_report: + meta: Null + template: pdf_pol.md + +positivity_boundary_report: + meta: Null + template: pdf_positivity_bound.md + +exponents_report: + meta: Null + template: exponents.md + +template: report_pol.md + +description: + from_: fit + +dataset_inputs: + from_: fit + +dataspecs: + - theoryid: + from_: current + pdf: + from_: current + fit: + from_: current + speclabel: + from_: current + + - theoryid: + from_: reference + pdf: + from_: reference + fit: + from_: reference + speclabel: + from_: reference + +t0_info: + - use_t0: True + datacuts: + from_: fit + t0pdfset: + from_: datacuts + +Normalize: + normalize_to: 2 + +Datanorm: + normalize_to: data + +DataGroups: + - metadata_group: nnpdf31_process + - metadata_group: experiment + +ProcessGroup: + metadata_group: nnpdf31_process + +actions_: + - report(main=true) + diff --git a/validphys2/src/validphys/comparefittemplates/pdf_pol.md b/validphys2/src/validphys/comparefittemplates/pdf_pol.md new file mode 100644 index 0000000000..fcd7197780 --- /dev/null +++ b/validphys2/src/validphys/comparefittemplates/pdf_pol.md @@ -0,0 +1,28 @@ +%NNPDF report comparing {@ current fit @} and {@ reference fit @} + +# PDF plots + +## PDF comparison +{@with PDFnormalize@} +### {@Normtitle@} +{@with Basespecs@} +#### {@Basistitle@} +{@with PDFscalespecs@} +##### {@Xscaletitle@} +{@with PDFlimspecs@} +{@plot_pdfs@} +{@endwith@} +{@endwith@} +{@endwith@} +{@endwith@} + +## PDF replicas +{@with Basespecs@} +#### {@Basistitle@} +{@with PDFscalespecs@} +##### {@Xscaletitle@} +{@with PDFlimspecs@} +{@plot_pdfreplicas@} +{@endwith@} +{@endwith@} +{@endwith@} diff --git a/validphys2/src/validphys/comparefittemplates/pdf_positivity_bound.md b/validphys2/src/validphys/comparefittemplates/pdf_positivity_bound.md new file mode 100644 index 0000000000..c1be865075 --- /dev/null +++ b/validphys2/src/validphys/comparefittemplates/pdf_positivity_bound.md @@ -0,0 +1,8 @@ +%NNPDF report comparing {@ current fit @} and {@ reference fit @} + +{@with PDFscalespecs@} +##### {@Xscaletitle@} scale plots +{@with PositivityBoundSpecs@} +{@plot_polarized_boundaries@} +{@endwith@} +{@endwith@} diff --git a/validphys2/src/validphys/comparefittemplates/report_pol.md b/validphys2/src/validphys/comparefittemplates/report_pol.md new file mode 100644 index 0000000000..60b2745ce8 --- /dev/null +++ b/validphys2/src/validphys/comparefittemplates/report_pol.md @@ -0,0 +1,115 @@ +%NNPDF report comparing {@ current fit_id @} and {@ reference fit_id @} + +Summary +------- + +We are comparing: + + - {@ current fit @} (`{@ current fit_id @}`): {@ current description @} + - {@ reference fit @} (`{@ reference fit_id @}`): {@ reference description @} + + +{@ summarise_fits @} + + +t0 losses +--------- +{@ dataspecs::t0_info t0_chi2_info_table @} + +Theory covariance summary +------------------------- +{@summarise_theory_covmat_fits@} + +Dataset properties +------------------ +{@current fit_datasets_properties_table@} + +Distances +--------- +{@with Scales@} +### {@Scaletitle@} +{@with Normalize::Basespecs::PDFscalespecs::Distspecs@} +#### {@Basistitle@}, {@Xscaletitle@} +{@plot_pdfdistances@} +{@plot_pdfvardistances@} +{@endwith@} +{@endwith@} + +PDF arc-lengths +--------------- +{@Basespecs plot_arc_lengths@} + +Sum rules +--------- +{@with pdfs@} +### {@pdf@} + +{@polarized_sum_rules_table@} + +{@endwith@} + +PDF plots +--------- +{@with Scales@} +[Plots at {@Scaletitle@}]({@pdf_report report@}) +{@endwith@} + +Correlated Spin Moments +----------------------- +{@with SpinMoments@} +{@pdfs plot_polarized_momentum@} +{@endwith@} + +Positivity Boundary Conditions +------------------------------ +{@with PositivityScales@} +[Plots at {@Scaletitle@}]({@positivity_boundary_report report@}) +{@endwith@} + +Effective exponents +------------------- +[Detailed information]({@exponents_report report@}) + +Training lengths +---------------- +{@fits plot_training_length@} + +Training-validation +------------------- +{@fits plot_training_validation@} + +{@with DataGroups@} +$\chi^2$ by {@processed_metadata_group@} +---------------------------------------- +{@plot_fits_groups_data_chi2@} +{@endwith@} + + +$\chi^2$ by dataset +------------------- +### Plot +{@plot_fits_datasets_chi2@} +### Table +{@ProcessGroup fits_chi2_table(show_total=true)@} + + +{@with DataGroups@} +$\phi$ by {@processed_metadata_group@} +-------------------------------------- +{@plot_fits_groups_data_phi@} +{@endwith@} + +Dataset plots +------------- +{@with matched_datasets_from_dataspecs@} +[Plots for {@dataset_name@}]({@dataset_report report@}) +{@endwith@} + +Dataset differences and cuts +---------------------------- +{@print_dataset_differences@} +{@print_different_cuts@} + +Code versions +------------- +{@fits_version_table@} diff --git a/validphys2/src/validphys/config.py b/validphys2/src/validphys/config.py index 3c1430ba9a..083860071c 100644 --- a/validphys2/src/validphys/config.py +++ b/validphys2/src/validphys/config.py @@ -957,6 +957,12 @@ def parse_t0pdfset(self, name): """PDF set used to generate the t0 covmat.""" return self.parse_pdf(name) + @element_of("unpolarized_bcs") + @_id_with_label + def parse_unpolarized_bc(self, name): + """Unpolarised PDF used as a Boundary Condition to impose positivity of pPDFs.""" + return self.parse_pdf(name) + def parse_use_t0(self, do_use_t0: bool): """Whether to use the t0 PDF set to generate covariance matrices.""" return do_use_t0 diff --git a/validphys2/src/validphys/convolution.py b/validphys2/src/validphys/convolution.py index 6c6879c06b..753b4d9573 100644 --- a/validphys2/src/validphys/convolution.py +++ b/validphys2/src/validphys/convolution.py @@ -36,6 +36,7 @@ level interface which operates with :py:class:`validphys.coredata.FKTableData` objects is also available. """ + import functools import operator @@ -81,20 +82,22 @@ def _com(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t): def _smt(a, b, c, d, e, f, g, h, i, j): return a + b + c + d + e + f + g + h + i + j + def _id(a): return a def _subtract_abs(a, b): - """Compute positivity constraints for polarized gluon. The unpolarized - and polarized predictions have to follow a particular order: + """An operation that subtracts from an observable the absolute value of another + observable. An example of such an operation is the enforcing of the positivity + boundary conditions in polarized fits of gluon distributions. Parameters: ----------- a: np.ndarray - polarized tensor-like object + Array-like object. Ex., unpolarized result. b: np.ndarray - Unpolarized tensor-like object + Array-like object. Ex., polarized result. Returns: -------- @@ -105,20 +108,20 @@ def _subtract_abs(a, b): def _subtract_abspair(a, b, c, d): - """Compute the positivity boundary condition operations for quark PDFs in - Polarized fits. The unpolarized and poralized predictions have to follow a - particular order. + """An operation that subtracts from two observables the absolute value of another + two observables. An example of such an operation is the enforcing of the positivity + boundary conditions in polarized fits of quark distributions. Parameters: ----------- a: np.ndarray - polarized tensor-like object + Array-like object. Ex., unpolarized result. b: np.ndarray - polarized tensor-like object + Array-like object. Ex., unpolarized result. c: np.ndarray - Unpolarized tensor-like object + Array-like object. Ex., unpolarized result. d: np.ndarray - Unpolarized tensor-like object + Array-like object. Ex., unpolarized result. Returns: -------- diff --git a/validphys2/src/validphys/coredata.py b/validphys2/src/validphys/coredata.py index aac4e6fe2d..d74f197a77 100644 --- a/validphys2/src/validphys/coredata.py +++ b/validphys2/src/validphys/coredata.py @@ -63,6 +63,7 @@ class FKTableData: ndata: int xgrid: np.ndarray sigma: pd.DataFrame + is_polarized: bool = False metadata: dict = dataclasses.field(default_factory=dict, repr=False) protected: bool = False diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index 72f3be5bce..a9a45fffb7 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -1,6 +1,7 @@ """ Plots of relations between data PDFs and fits. """ + from __future__ import generator_stop from collections import defaultdict @@ -12,6 +13,7 @@ from matplotlib import cm from matplotlib import colors as mcolors from matplotlib import ticker as mticker +from matplotlib.patches import Ellipse import numpy as np import pandas as pd import scipy.stats as stats @@ -26,6 +28,7 @@ from validphys.coredata import KIN_NAMES from validphys.plotoptions.core import get_info, kitable, transform_result from validphys.results import chi2_stat_labels, chi2_stats +from validphys.sumrules import POL_LIMS, partial_polarized_sum_rules from validphys.utils import sane_groupby_iter, scale_from_grid, split_ranges log = logging.getLogger(__name__) @@ -921,6 +924,140 @@ def plot_replica_sum_rules(pdf, sum_rules, Q): return fig +def _compute_hists(preds, nbins=10): + """Given an 1D array of predictions, compute a binned histogram. The result + is a dictionary containing the bin edges, the bin weights, and the bin centers. + + Parameters + ---------- + preds : np.ndarray + A 1D array of predictions + nbins : int, optional + an integer specifying the number of bins to be used in the histogram. + + Returns + ------- + dict: + a dictionary containing the bin edges, the bin weights, and the bin centers. + """ + binning = np.linspace(preds.min(), preds.max(), num=nbins) + frequencies, bins = np.histogram(preds, bins=binning, density=True) + return {"x": bins[:-1], "bins": bins, "weights": frequencies} + + +def _compute_ellipse(preds_x, preds_y, nstd=3): + """Given two arrays of predictions, each with 1D of the same length, compute + the contour ellipse. The results is a matplotlib Ellipse instance. + + Parameters + ---------- + preds_x : np.ndarray + A 1D array of predictions + preds_y : np.ndarray + A 1D array of predictions + nstd : int, optional + number of standard deviation to draw the ellipse, by default 3 + + Returns + ------- + matplotlib.patches.Ellipse + a matplotlib Ellipse instance + """ + covmat = np.cov(preds_x, preds_y) + eigval, eigvec = np.linalg.eig(covmat) + sqrt_eigval = np.sqrt(eigval) + + kwargs = { + "xy": (preds_x.mean(), preds_y.mean()), + "width": 2.0 * nstd * sqrt_eigval[0], + "height": 2.0 * nstd * sqrt_eigval[1], + "angle": np.degrees(np.arctan2(*eigvec[:, 0][::-1])), + "fill": False, + "linewidth": 2.0, + "color": "C0", + } + return Ellipse(**kwargs) + + +@figure +def plot_polarized_momentum(pdf, Q, partial_polarized_sum_rules, angular_momentum=False): + """ + Plot the correlated uncertainties for the truncated integrals of the polarized + gluon and singlet distributions. + """ + ((xmina, xmaxa), (xminb, xmaxb)) = POL_LIMS + predictions = partial_polarized_sum_rules[-1] # large-x + + if not angular_momentum: + xpreds = np.array(predictions["g"]) + ypreds = np.array(predictions["singlet"]) / 2.0 + else: + preds_low_x = partial_polarized_sum_rules[0] # small-x + xpreds = np.array(predictions["g"]) + np.array(predictions["singlet"]) / 2.0 + xpreds = 1 / 2 - xpreds # substract the proton spin + ypreds = -(np.array(preds_low_x["g"]) + np.array(preds_low_x["singlet"]) / 2.0) + + params = { + "width_ratios": [6, 1], + "height_ratios": [1, 6], + "nrows": 2, + "ncols": 2, + "sharex": "col", + "sharey": "row", + } # Parameters that define the subplots + fig, ((ax_histx, ax_empty), (ax_scatr, ax_histy)) = plotutils.subplots(**params) + fig.subplots_adjust(wspace=1e-4, hspace=1e-1) + + # Add the scatter plots + ax_scatr.scatter(xpreds, ypreds, label=pdf.label) + ax_scatr.scatter(xpreds.mean(), ypreds.mean(), marker="s", c="red") + + # Add the Ellipse plot + ax_scatr.add_artist(_compute_ellipse(xpreds, ypreds)) + + # Add the histogram plots + ax_histx.hist(**_compute_hists(xpreds)) + ax_histy.hist(**_compute_hists(ypreds), orientation="horizontal") + + # Define the Labels according to the type of plots + xlabel = r"$\int_{xmin}^{xmax} \Delta g(x) dx$" + ylabel = r"$\frac{1}{2}\int_{xmin}^{xmax}\Delta\Sigma (x)dx$" + + if angular_momentum: + # Draw contributions from Angular Momentum + ax_scatr.axline((0, 0), slope=-1, c="#fc6464", lw=0.65) + ax_scatr.axline((1, 1), slope=-1, c="gray", lw=0.65) + ax_scatr.axline((-1, -1), slope=-1, c="gray", lw=0.65) + + xaxis = r"$\frac{1}{2} -$" + xlabel + r"$-$" + ylabel + yaxis = xlabel + r"$+$" + ylabel + ax_scatr.set_xlabel(xaxis.replace("xmin", f"{xminb}").replace("xmax", f"{xmaxb}")) + ax_scatr.set_ylabel(yaxis.replace("xmin", f"{xminb}").replace("xmax", f"{xmina}")) + else: + ax_scatr.set_xlabel(xlabel.replace("xmin", f"{xminb}").replace("xmax", f"{xmaxb}")) + ax_scatr.set_ylabel(ylabel.replace("xmin", f"{xminb}").replace("xmax", f"{xmaxb}")) + ax_scatr.legend(title=f"Computed at Q={round(Q, 1)} GeV", title_fontsize=10) + + # Turn off visibility of some axes + ax_empty.set_axis_off() + ax_histx.tick_params(axis="x", labelbottom=False) + ax_histy.tick_params(axis="y", labelleft=False) + ax_histx.spines["left"].set_visible(False) + ax_histx.get_yaxis().set_ticks([]) + ax_histy.axes.spines["bottom"].set_visible(False) + ax_histy.get_xaxis().set_ticks([]) + + return fig + + +@figure +def plot_orbital_momentum(pdf, Q, partial_polarized_sum_rules): + """In addition to plotting the correlated spin moments as in `plot_polarized_momentum`, + it also plots the contributions from the Orbital Angular Momentum. + """ + return plot_polarized_momentum(pdf, Q, partial_polarized_sum_rules, angular_momentum=True) + + @figuregen def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold: float = 0.9): """ diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index 367f29ede5..cded762eab 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -322,6 +322,12 @@ def check_luxset(luxset): log.info(f'{luxset} Lux pdf checked.') +def check_unpolarized_bc(unpolarized_bc): + """Check that unpolarized PDF bound can be loaded normally.""" + unpolarized_bc.load() + log.info(f"Unpolarized boundary PDF '{unpolarized_bc}' pdf checked.") + + def check_additional_errors(additional_errors): """Lux additional errors pdf check""" additional_errors.load() diff --git a/validphys2/src/validphys/pdfbases.py b/validphys2/src/validphys/pdfbases.py index 1532e1182b..11272c2d23 100644 --- a/validphys2/src/validphys/pdfbases.py +++ b/validphys2/src/validphys/pdfbases.py @@ -4,6 +4,7 @@ This holds the concrete labels data relative to the PDF bases, as declaratively as possible. """ + import abc import copy import functools @@ -518,7 +519,9 @@ def f_(transform_func): 'photon' : {'photon':1}, }, aliases = {'gluon':'g', 'singlet': r'\Sigma', 'sng': r'\Sigma', 'sigma': r'\Sigma', - 'v': 'V', 'v3': 'V3', 'v8': 'V8', 't3': 'T3', 't8': 'T8', 't15': 'T15', 'v15': 'V15',}, + 'v': 'V', 'v3': 'V3', 'v8': 'V8', 't3': 'T3', 't8': 'T8', 't15': 'T15', + 'v15': 'V15', 't24': 'T24', 'v24': 'V24', 't35': 'T35', 'v35': 'V35', + 'photon': 'photon',}, default_elements=(r'\Sigma', 'V', 'T3', 'V3', 'T8', 'V8', 'T15', 'gluon', ) ) @@ -530,6 +533,10 @@ def f_(transform_func): CCBAR_ASYMM = copy.deepcopy(evolution) CCBAR_ASYMM.default_elements = (r'\Sigma', 'V', 'T3', 'V3', 'T8', 'V8', 'T15', 'gluon', 'V15') +# Basis that is ordered exactly in the same way as in FKs +FK_BASIS = copy.deepcopy(evolution) +FK_BASIS.default_elements = ('photon', r'\Sigma', 'gluon', 'V', 'V3', 'V8', 'V15', 'V24', 'V35', 'T3', 'T8', 'T15', 'T24', 'T35') + PDF4LHC20 = LinearBasis.from_mapping({ r'\Sigma': { 'u': 1, 'ubar': 1, 'd': 1, 'dbar': 1, 's': 1, 'sbar': 1, @@ -544,7 +551,7 @@ def f_(transform_func): 'T3': {'u': 1, 'ubar': 1, 'd': -1, 'dbar': -1}, 'T8': {'u': 1, 'ubar': 1, 'd': 1, 'dbar': 1, 's': -2, 'sbar': -2}, - + 'photon': {'photon': 1}, }, aliases = {'gluon':'g', 'singlet': r'\Sigma', 'sng': r'\Sigma', 'sigma': r'\Sigma', @@ -635,6 +642,19 @@ def f_(transform_func): LUX_FLAVOUR = copy.deepcopy(FLAVOUR) LUX_FLAVOUR.default_elements=('u', 'ubar', 'd', 'dbar', 's', 'sbar', 'c', 'cbar', 'g', 'photon') +POLARIZED_EVOL = LinearBasis.from_mapping({ + r'\Delta \Sigma' : {'u': 1, 'ubar': 1, 'd': 1, 'dbar': 1, 's': 1, 'sbar': 1}, + r'\Delta T3' : {'u': 1, 'ubar': 1, 'd':-1, 'dbar':-1}, + r'\Delta T8' : {'u': 1, 'ubar': 1, 'd': 1, 'dbar': 1, 's':-2, 'sbar':-2}, + r'\Delta g' : {'g':1}, + r'(\Delta \Sigma + \Delta T8)/4' : {'u': 1/2, 'ubar': 1/2, 'd': 1/2, 'dbar': 1/2, 's':-1/4, 'sbar':-1/4}, + }, + aliases = {'g':r'\Delta g', 'gluon':r'\Delta g', r'singlet': r'\Delta \Sigma', 'sng': r'\Delta \Sigma', + 'sigma': r'\Delta \Sigma', 't3': r'\Delta T3', 't8': r'\Delta T8', 'T3': r'\Delta T3', + 'T8': r'\Delta T8','sigma_t8': r'(\Delta \Sigma + \Delta T8)/4'}, + default_elements=(r'sigma', 't3', 't8', 'gluon', 'sigma_t8', ) +) + LUX_FLAVOURPC = copy.deepcopy(FLAVOURPC) LUX_FLAVOURPC.default_elements = ('u', 'ubar', 'd', 'dbar', 's', 'sbar', 'g', 'photon') @@ -706,13 +726,39 @@ def cminus(func, xmat, qmat): c = gv[:, [1], ...] return c - cbar +@scalar_function_transformation(label=r"d^+") +def dplus(func, xmat, qmat): + gv = func([1, -1], xmat, qmat) + d = gv[:, [0], ...] + dbar = gv[:, [1], ...] + return d + dbar + +@scalar_function_transformation(label=r"u^+") +def uplus(func, xmat, qmat): + gv = func([2, -2], xmat, qmat) + u = gv[:, [0], ...] + ubar = gv[:, [1], ...] + return u + ubar + +@scalar_function_transformation(label=r"g") +def giso(func, xmat, qmat): + gv = func([0], xmat, qmat) + return gv[:, [0], ...] + +@scalar_function_transformation(label=r"s^+") +def splus(func, xmat, qmat): + gv = func([3, -3], xmat, qmat) + s = gv[:, [0], ...] + sbar = gv[:, [1], ...] + return s + sbar + @scalar_function_transformation(label="Rs", element_representations={"Rs": "R_{s}"}) def strange_fraction(func, xmat, qmat): gv = func([-3, 3, -2, -1], xmat, qmat) sbar, s, ubar, dbar = (gv[:, [i], ...] for i in range(4)) return (sbar + s) / (ubar + dbar) - + def fitbasis_to_NN31IC(flav_info, fitbasis): """Return a rotation matrix R_{ij} which takes from one of the possible fitting basis (evolution, NN31IC, FLAVOUR) to the NN31IC basis, @@ -808,7 +854,7 @@ def fitbasis_to_NN31IC(flav_info, fitbasis): cp = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } g = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 1 } v15 = {'sng': 0, 'v': 1, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } - + elif fitbasis == "CCBAR_ASYMM": sng = {'sng': 1, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0, 'v15': 0 } v = {'sng': 0, 'v': 1, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0, 'v15': 0 } @@ -831,6 +877,18 @@ def fitbasis_to_NN31IC(flav_info, fitbasis): g = {'u': 0, 'ubar': 0, 'd': 0, 'dbar': 0, 's': 0, 'sbar': 0, 'c': 0, 'cbar': 0, 'g': 1 } v15 = {'u': 1, 'ubar': -1, 'd': 1, 'dbar': -1, 's': 1, 'sbar': -1, 'c': -3, 'cbar': 3, 'g': 0 } + + elif fitbasis == 'POLARIZED_EVOL': # With Perturbative Charm + sng = {'sng': 1, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } + v = {'sng': 0, 'v': 1, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } + v3 = {'sng': 0, 'v': 0, 'v3': 1, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } + v8 = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 1, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } + t3 = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 0, 't3': 1, 't8': 0, 't15': 0, 'g': 0 } + t8 = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 1, 't15': 0, 'g': 0 } + cp = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } + g = {'sng': 0, 'v': 0, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 1 } + v15 = {'sng': 0, 'v': 1, 'v3': 0, 'v8': 0, 't3': 0, 't8': 0, 't15': 0, 'g': 0 } + flist = [sng, g, v, v3, v8, t3, t8, cp, v15] mat = [] diff --git a/validphys2/src/validphys/pdfgrids.py b/validphys2/src/validphys/pdfgrids.py index 1a56a18dbf..09dab95d44 100644 --- a/validphys2/src/validphys/pdfgrids.py +++ b/validphys2/src/validphys/pdfgrids.py @@ -163,6 +163,18 @@ def xplotting_grid( return res +@make_argcheck(check_basis) +def boundary_xplotting_grid( + unpolarized_bc: PDF, + Q: (float, int), + xgrid=None, + basis: (str, Basis) = 'flavour', + flavours: (list, tuple, type(None)) = None, +): + r"""A wrapper around `xplotting_grid` to compute instead `unpolarized_bcs`.""" + return xplotting_grid(pdf=unpolarized_bc, Q=Q, xgrid=xgrid, basis=basis, flavours=flavours) + + @make_argcheck(check_basis) def kinetic_xplotting_grid( pdf: PDF, @@ -190,6 +202,7 @@ def kinetic_xplotting_grid( xplotting_grids = collect(xplotting_grid, ('pdfs',)) +boundary_xplotting_grids = collect(boundary_xplotting_grid, ('unpolarized_bcs',)) kinetic_xplotting_grids = collect(kinetic_xplotting_grid, ('pdfs',)) diff --git a/validphys2/src/validphys/pdfplots.py b/validphys2/src/validphys/pdfplots.py index 7e4a370d1d..e8cc1d74a2 100644 --- a/validphys2/src/validphys/pdfplots.py +++ b/validphys2/src/validphys/pdfplots.py @@ -3,6 +3,7 @@ Plots of quantities that are mostly functions of the PDFs only. """ + import abc import copy import functools @@ -601,6 +602,38 @@ def legend(self, flstate): ) +class BandPDFPlotterBC(BandPDFPlotter): + def __init__(self, *args, unpolarized_bcs, boundary_xplotting_grids, **kwargs): + self.unpolarized_bcs = unpolarized_bcs + self.boundary_xplotting_grids = boundary_xplotting_grids + super().__init__(*args, **kwargs) + + def draw(self, pdf, grid, flstate): + xgrid = grid.xgrid + ax = flstate.ax + labels = flstate.labels + handles = flstate.handles + + if pdf.name == self.pdfs[0].name: # Make sure to plot only for 1st pdfs + # Check if BC PDFs are the same and if so do not plot them twice + if len(set(i.name for i in self.unpolarized_bcs)) == 1: + plotting_bcs = [self.boundary_xplotting_grids[0]] + else: + plotting_bcs = self.boundary_xplotting_grids + + for idx, xplot_repr in enumerate(plotting_bcs): + unpol_stats = xplot_repr.select_flavour(flstate.flindex).grid_values + unpol_cv = unpol_stats.central_value() + unpol_std = unpol_stats.std_error() + + (cvline,) = ax.plot(xgrid, unpol_cv + unpol_std, color=f"C{idx + 2}") + ax.plot(xgrid, -(unpol_cv + unpol_std), color=f"C{idx + 2}") + + handles.append(cvline) + labels.append(self.unpolarized_bcs[idx].label) + return super().draw(pdf, grid, flstate) + + @figuregen @check_pdf_normalize_to @check_pdfs_noband @@ -653,6 +686,42 @@ def plot_pdfs( ) +@figuregen +@check_pdf_normalize_to +@check_pdfs_noband +@check_scale("xscale", allow_none=True) +def plot_polarized_boundaries( + pdfs, + xplotting_grids, + unpolarized_bcs, + boundary_xplotting_grids, + xscale: (str, type(None)) = None, + normalize_to: (int, str, type(None)) = None, + ymin=None, + ymax=None, + pdfs_noband: (list, type(None)) = None, + show_mc_errors: bool = True, + legend_stat_labels: bool = True, +): + """Possess the exact same functionalities as `plot_pdfs` but for a list + of Polarized PDF sets. In addition, it plots the unpolarized PDF set used + as a Boundary Condition. + """ + yield from BandPDFPlotterBC( + pdfs, + xplotting_grids, + xscale, + normalize_to, + ymin, + ymax, + unpolarized_bcs=unpolarized_bcs, + boundary_xplotting_grids=boundary_xplotting_grids, + pdfs_noband=pdfs_noband, + show_mc_errors=show_mc_errors, + legend_stat_labels=legend_stat_labels, + ) + + @figuregen @check_pdf_normalize_to @check_mixband_as_replicas diff --git a/validphys2/src/validphys/pineparser.py b/validphys2/src/validphys/pineparser.py index c303b43242..b58dc947c6 100644 --- a/validphys2/src/validphys/pineparser.py +++ b/validphys2/src/validphys/pineparser.py @@ -155,6 +155,9 @@ def pineappl_reader(fkspec): # Extract metadata from the first grid pine_rep = pines[0] + # Check if it is Polarized FK table + is_polarized = pine_rep.key_values().get("polarized") == "True" + # Is it hadronic? (at the moment only hadronic and DIS are considered) hadronic = pine_rep.key_values()["initial_state_1"] == pine_rep.key_values()["initial_state_2"] # Sanity check (in case at some point we start fitting things that are not protons) @@ -258,6 +261,7 @@ def pineappl_reader(fkspec): sigma=sigma, ndata=ndata, Q0=Q0, + is_polarized=is_polarized, metadata=fkspec.metadata, hadronic=hadronic, xgrid=xgrid, diff --git a/validphys2/src/validphys/pseudodata.py b/validphys2/src/validphys/pseudodata.py index 3a527d5e83..5dc1560d52 100644 --- a/validphys2/src/validphys/pseudodata.py +++ b/validphys2/src/validphys/pseudodata.py @@ -2,6 +2,7 @@ Tools to obtain and analyse the pseudodata that was seen by the neural networks during the fitting. """ + from collections import namedtuple import hashlib import logging @@ -9,13 +10,13 @@ import numpy as np import pandas as pd +from nnpdf_data import legacy_to_new_map from reportengine import collect from validphys.covmats import ( INTRA_DATASET_SYS_NAME, dataset_inputs_covmat_from_systematics, sqrt_covmat, ) -from nnpdf_data import legacy_to_new_map FILE_PREFIX = "datacuts_theory_fitting_" diff --git a/validphys2/src/validphys/scripts/vp_comparefits.py b/validphys2/src/validphys/scripts/vp_comparefits.py index 715029d74f..7c79a7c05e 100644 --- a/validphys2/src/validphys/scripts/vp_comparefits.py +++ b/validphys2/src/validphys/scripts/vp_comparefits.py @@ -2,7 +2,7 @@ import os import logging -#TODO: Look into making these lazy imports +# TODO: Look into making these lazy imports import prompt_toolkit from prompt_toolkit.completion import WordCompleter @@ -20,36 +20,28 @@ REFERENCE_FIT_LABEL_DEFAULT = "Reference Fit" - class CompareFitApp(App): def add_positional_arguments(self, parser): parser.add_argument( - 'current_fit', - default=None, - nargs='?', - help="The fit to produce the report for.", + 'current_fit', default=None, nargs='?', help="The fit to produce the report for." ) parser.add_argument( - 'reference_fit', - default=None, - nargs='?', - help="The fit to compare with.") + 'reference_fit', default=None, nargs='?', help="The fit to compare with." + ) # Group together mandatory arguments that are not positional mandatory = parser.add_argument_group("mandatory", "Mandatory command line arguments") - mandatory.add_argument( - '--title', help="The title that will be indexed with the report.") + mandatory.add_argument('--title', help="The title that will be indexed with the report.") mandatory.add_argument('--author', help="The author of the report.") - mandatory.add_argument( - '--keywords', nargs='+', help="keywords to index the report with.") + mandatory.add_argument('--keywords', nargs='+', help="keywords to index the report with.") parser.add_argument( '--thcovmat_if_present', action='store_true', - help="Use theory cov mat for calculating statistical estimators if available.") + help="Use theory cov mat for calculating statistical estimators if available.", + ) parser.add_argument( - '--no-thcovmat_if_present', - action='store_true', - help="DEPRECATED: does nothing") + '--no-thcovmat_if_present', action='store_true', help="DEPRECATED: does nothing" + ) parser.add_argument( '--current_fit_label', nargs='?', @@ -60,38 +52,37 @@ def add_positional_arguments(self, parser): '--reference_fit_label', nargs='?', default=REFERENCE_FIT_LABEL_DEFAULT, - help="The label for the fit that is being compared to.") + help="The label for the fit that is being compared to.", + ) parser.add_argument( '-i', '--interactive', help="Ask interactively for the missing data", - action='store_true') + action='store_true', + ) parser.add_argument( - '-c', - '--closure', - help="Use the closure comparison template.", - action='store_true') + '-c', '--closure', help="Use the closure comparison template.", action='store_true' + ) parser.add_argument( - '-l', - '--lite', - help="Smaller version of the usual comparefit fit", - action='store_true') + '-l', '--lite', help="Smaller version of the usual comparefit fit", action='store_true' + ) + parser.add_argument( + '--use_polarized', help="Use polarized settings for the report", action='store_true' + ) parser.add_argument( '-p', '--photon', help="Use LUX basis (which include the photon) for the report", - action='store_true') + action='store_true', + ) parser.set_defaults() def try_complete_args(self): args = self.args - argnames = ( - 'current_fit', 'reference_fit', 'title', 'author', 'keywords') - optionalnames = ( - 'current_fit_label', 'reference_fit_label') - boolnames = ( - 'thcovmat_if_present',) + argnames = ('current_fit', 'reference_fit', 'title', 'author', 'keywords') + optionalnames = ('current_fit_label', 'reference_fit_label') + boolnames = ('thcovmat_if_present',) badargs = [argname for argname in argnames if not args[argname]] badbools = [bname for bname in boolnames if args[bname] is None] bad = badargs + badbools @@ -107,7 +98,8 @@ def try_complete_args(self): raise KeyboardInterrupt() texts = '\n'.join( f' {argname.replace("_", " ").capitalize()}: {args[argname]}' - for argname in [*argnames, *optionalnames, *boolnames]) + for argname in [*argnames, *optionalnames, *boolnames] + ) log.info(f"Starting NNPDF fit comparison:\n{texts}") def interactive_current_fit(self): @@ -116,10 +108,10 @@ def interactive_current_fit(self): return prompt_toolkit.prompt("Enter current fit: ", completer=completer) def interactive_current_fit_label(self): - #TODO Use the colors in prompt_toolkit 2+ instead of this + # TODO Use the colors in prompt_toolkit 2+ instead of this default = CURRENT_FIT_LABEL_DEFAULT print(f"Enter label for current fit [default:\n{t.dim(default)}]:") - #Do not use the default keyword because it is a pain to delete + # Do not use the default keyword because it is a pain to delete res = prompt_toolkit.prompt("") if not res: return default @@ -128,25 +120,25 @@ def interactive_current_fit_label(self): def interactive_reference_fit(self): l = self.environment.loader completer = WordCompleter(l.available_fits) - return prompt_toolkit.prompt( - "Enter reference fit: ", completer=completer) + return prompt_toolkit.prompt("Enter reference fit: ", completer=completer) def interactive_reference_fit_label(self): - #TODO Use the colors in prompt_toolkit 2+ instead of this + # TODO Use the colors in prompt_toolkit 2+ instead of this default = REFERENCE_FIT_LABEL_DEFAULT print(f"Enter label for reference fit [default:\n{t.dim(default)}]:") - #Do not use the default keyword because it is a pain to delete + # Do not use the default keyword because it is a pain to delete res = prompt_toolkit.prompt("") if not res: return default return res def interactive_title(self): - #TODO Use the colors in prompt_toolkit 2+ instead of this - default = (f"Comparison between {self.args['current_fit']} " - f"and {self.args['reference_fit']} ") + # TODO Use the colors in prompt_toolkit 2+ instead of this + default = ( + f"Comparison between {self.args['current_fit']} " f"and {self.args['reference_fit']} " + ) print(f"Enter report title [default:\n{t.dim(default)}]:") - #Do not use the default keyword because it is a pain to delete + # Do not use the default keyword because it is a pain to delete res = prompt_toolkit.prompt("") if not res: return default @@ -168,17 +160,16 @@ def interactive_keywords(self): else: completer = None kwinp = prompt_toolkit.prompt( - "Enter keywords: ", - completer=completer, - complete_in_thread=True, + "Enter keywords: ", completer=completer, complete_in_thread=True ) return [k.strip() for k in kwinp.split(',') if k] def interactive_thcovmat_if_present(self): - """Interactively fill in the `use_thcovmat_if_present` runcard flag. Which is True by default - """ - message = ("Do you want to use the theory covariance matrix, if available,\n" - "to calculate the statistical estimators? ") + """Interactively fill in the `use_thcovmat_if_present` runcard flag. Which is True by default""" + message = ( + "Do you want to use the theory covariance matrix, if available,\n" + "to calculate the statistical estimators? " + ) return confirm(message, default=True) def get_commandline_arguments(self, cmdline=None): @@ -192,6 +183,9 @@ def get_commandline_arguments(self, cmdline=None): elif args['lite']: log.info("using compare-lite template.") args['config_yml'] = comparefittemplates.template_lite_path + elif args['use_polarized']: + log.info("do not include positivity in report.") + args['config_yml'] = comparefittemplates.template_pol_path else: args['config_yml'] = comparefittemplates.template_path return args @@ -202,47 +196,51 @@ def complete_mapping(self): autosettings['meta'] = { 'title': args['title'], 'author': args['author'], - 'keywords': args['keywords'] + 'keywords': args['keywords'], } currentmap = {'id': args['current_fit'], 'label': args['current_fit_label']} autosettings['current'] = { 'fit': currentmap, 'pdf': currentmap, - 'theory': { - 'from_': 'fit' - }, - 'theoryid': { - 'from_': 'theory' - }, - 'speclabel': args['current_fit_label'] + 'theory': {'from_': 'fit'}, + 'theoryid': {'from_': 'theory'}, + 'speclabel': args['current_fit_label'], } refmap = {'id': args['reference_fit'], 'label': args['reference_fit_label']} autosettings['reference'] = { 'fit': refmap, 'pdf': refmap, - 'theory': { - 'from_': 'fit' - }, - 'theoryid': { - 'from_': 'theory' - }, - 'speclabel': args['reference_fit_label'] + 'theory': {'from_': 'fit'}, + 'theoryid': {'from_': 'theory'}, + 'speclabel': args['reference_fit_label'], } autosettings['use_thcovmat_if_present'] = args['thcovmat_if_present'] if args['photon']: autosettings['Basespecs'] = [ {'basis': 'LUX_FLAVOUR', 'Basistitle': 'Flavour basis'}, - {'basis': 'LUX', 'Basistitle': 'Evolution basis'} + {'basis': 'LUX', 'Basistitle': 'Evolution basis'}, ] + if args['use_polarized']: + autosettings['current'].update( + { + 'positivity_bound': {'from_': 'fit'}, + 'unpolarized_bc': {'from_': 'positivity_bound'}, + } + ) + autosettings['reference'].update( + { + 'positivity_bound': {'from_': 'fit'}, + 'unpolarized_bc': {'from_': 'positivity_bound'}, + } + ) return autosettings - def get_config(self): self.try_complete_args() - #No error handling here because this is our internal file + # No error handling here because this is our internal file with open(self.args['config_yml']) as f: - #TODO: Ideally this would load round trip but needs - #to be fixed in reportengine. + # TODO: Ideally this would load round trip but needs + # to be fixed in reportengine. c = yaml.safe_load(f) c.update(self.complete_mapping()) return self.config_class(c, environment=self.environment) diff --git a/validphys2/src/validphys/sumrules.py b/validphys2/src/validphys/sumrules.py index 91baed58dd..5a800595ae 100644 --- a/validphys2/src/validphys/sumrules.py +++ b/validphys2/src/validphys/sumrules.py @@ -7,6 +7,7 @@ scratch using LHAPDF tables. The code reading the sum rule information output from the fit is present in fitinfo.py """ + import numbers import numpy as np @@ -19,6 +20,10 @@ from validphys.core import PDF from validphys.pdfbases import parse_flarr +# Limits of the partial integration when computing (Sum) Rules +LIMS = [(1e-9, 1e-5), (1e-5, 1e-3), (1e-3, 1)] +POL_LIMS = ((1e-4, 1e-3), (1e-3, 1)) + def _momentum_sum_rule_integrand(x, lpdf, Q): xqvals = lpdf.xfxQ(x, Q) @@ -107,6 +112,15 @@ def f(x, lpdf, Q): "T8": _make_pdf_integrand({"u": 1, "ubar": 1, "d": 1, "dbar": 1, "s": -2, "sbar": -2}), } +POLARIZED_SUM_RULES = { + "singlet": _make_pdf_integrand({'u': 1, 'ubar': 1, 'd': 1, 'dbar': 1, 's': 1, 'sbar': 1}), + "g": _make_pdf_integrand({"g": 1}), + "momentum": _momentum_sum_rule_integrand, + "T3": _make_pdf_integrand({"u": 1, "ubar": 1, "d": -1, "dbar": -1}), + "T8": _make_pdf_integrand({"u": 1, "ubar": 1, "d": 1, "dbar": 1, "s": -2, "sbar": -2}), +} + + KNOWN_SUM_RULES_EXPECTED = { 'momentum': 1, 'uvalence': 2, @@ -116,22 +130,35 @@ def f(x, lpdf, Q): } -def _integral(rule_f, pdf_member, Q, config=None): +def _integral(rule_f, pdf_member, Q, lim, config=None): """Integrate `rule_f` for a given `pdf_member` at a given energy - separating the regions of integration. Uses quad. + for a given region of integration. Uses quad. """ if config is None: config = {"limit": 1000, "epsabs": 1e-4, "epsrel": 1e-4} - res = 0.0 - lims = [(1e-9, 1e-5), (1e-5, 1e-3), (1e-3, 1)] - for lim in lims: - res += quad(rule_f, *lim, args=(pdf_member, Q), **config)[0] - return res + return quad(rule_f, *lim, args=(pdf_member, Q), **config)[0] -def _sum_rules(rules_dict, lpdf, Q): +def _sum_rules(rules_dict, lpdf, Q, lims=LIMS): """Compute a SumRulesGrid from the loaded PDF, at Q""" - return {k: [_integral(r, m, Q) for m in lpdf.members] for k, r in rules_dict.items()} + return [ + {k: [_integral(r, m, Q, lim=l) for m in lpdf.members] for k, r in rules_dict.items()} + for l in lims + ] + + +def _combine_limits(res: list[dict]): + """Sum the various limits together for all SR and return a dictionary.""" + return {k: np.sum([v[k] for v in res], axis=0) for k in res[0].keys()} + + +@check_positive('Q') +def partial_polarized_sum_rules(pdf: PDF, Q: numbers.Real, lims: tuple = POL_LIMS): + """Compute the partial low- and large-x polarized sum rules. Return a SumRulesGrid + object with the list of values for each sum rule. The integration is performed with + absolute and relative tolerance of 1e-4.""" + lpdf = pdf.load() + return _sum_rules(POLARIZED_SUM_RULES, lpdf, Q, lims=lims) @check_positive('Q') @@ -141,14 +168,21 @@ def sum_rules(pdf: PDF, Q: numbers.Real): Return a SumRulesGrid object with the list of values for each sum rule. The integration is performed with absolute and relative tolerance of 1e-4.""" lpdf = pdf.load() - return _sum_rules(KNOWN_SUM_RULES, lpdf, Q) + return _combine_limits(_sum_rules(KNOWN_SUM_RULES, lpdf, Q)) + + +@check_positive('Q') +def polarized_sum_rules(partial_polarized_sum_rules): + """Compute the full polarized sum rules. The integration is performed with absolute + and relative tolerance of 1e-4.""" + return _combine_limits(partial_polarized_sum_rules) @check_positive('Q') def central_sum_rules(pdf: PDF, Q: numbers.Real): """Compute the sum rules for the central member, at the scale Q""" lpdf = pdf.load_t0() - return _sum_rules(KNOWN_SUM_RULES, lpdf, Q) + return _combine_limits(_sum_rules(KNOWN_SUM_RULES, lpdf, Q)) @check_positive('Q') @@ -167,7 +201,7 @@ def unknown_sum_rules(pdf: PDF, Q: numbers.Real): - T8 """ lpdf = pdf.load() - return _sum_rules(UNKNOWN_SUM_RULES, lpdf, Q) + return _combine_limits(_sum_rules(UNKNOWN_SUM_RULES, lpdf, Q)) def _simple_description(d): @@ -178,16 +212,21 @@ def _simple_description(d): d["std"] = np.std(arr) d["min"] = np.min(arr) d["max"] = np.max(arr) + return pd.DataFrame(res).T -def _err_mean_table(d): +def _err_mean_table(d, polarized=False): res = {} for k, arr in d.items(): res[k] = d = {} d["mean"] = np.mean(arr) d["std"] = np.std(arr) + if polarized: + d["min"] = np.min(arr) + d["max"] = np.max(arr) df = pd.DataFrame(res) + df = df[["T3", "T8"]] if polarized else df return format_error_value_columns(df.T, "mean", "std") @@ -198,6 +237,13 @@ def sum_rules_table(sum_rules): return _simple_description(sum_rules) +@table +def polarized_sum_rules_table(polarized_sum_rules): + """Return a table with the descriptive statistics of the polarized sum rules, + over members of the PDF.""" + return _err_mean_table(polarized_sum_rules, polarized=True) + + @table def central_sum_rules_table(central_sum_rules): """Construct a table with the value of each sum rule for the central