From cf8afebe6b964db967da534f59ddd62a49205168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 22 May 2023 11:49:01 +0200 Subject: [PATCH 001/134] Add theories 398 397 to theory.db --- nnpdfcpp/data/theory.db | Bin 102400 -> 106496 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/nnpdfcpp/data/theory.db b/nnpdfcpp/data/theory.db index 1f953e2459c1a85332b22111d2482d6dfe3ba942..06c5db50dbc4d5580ade634dc200f83d9c29f3b2 100644 GIT binary patch delta 398 zcmZozz}9epZGto_8v_G_)I=M`OE=2ICEJW*)|q)7c#u=dv&`Fsg1WRAgjnQf$nerorgAozIE!2d|V31M>yG z^SrBg8o0x_#29Uu+BnX#H?vu=eBD?m%E-ff2xv0{Lz7!Guh#UcW=2(}M)v8BQH&bX zPc$>`oc^|rk(=4n$awnmNJaw|w`M*(ij2UDm=zndK-N#L-*tNW0X0SuR?{Z?W})f1 z8H{S%;PAEN5U>Wqri5oNotj36BNWZ_afbnas&dvJCep79M0`@7h>+gn7Gh zAmd@??O7R&)6}OGFtP}+abz*@t>ew)(cyZ>xq>4L7@%Ps+wUhZcCqt-Jpm;E#zAOL delta 220 zcmV<203-i^zy^Sz29O&C1ONa48Id4A0R*vNqz?lX4}X&f5G(_Q4}Y^k5IYZ%fDsiK zgD(I802hNH0000MgB1V(02P61lb0WD0~rV`vj-sG0ki5MG6s==6oV`%w=5_D*cSs0 z0Hl`(Kmnb%&{F{>0Rtg{X_hDfLAMS<0r(9XGXM_H4XO-)3swpi2+aqB1~>%u1F-^b z0W-0269KoUWC6ni13!Zjmu+YPCbu6|0p$uD3;^E%4!8|;3^)q=39blf2O|aE1fc_C W0v!O~k#WDbYM23v2e)Zx0hcGeOFe%8 From 6b40d90e8e221dcc06b312e5c9fe548281703fa4 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 15:53:57 +0200 Subject: [PATCH 002/134] Name input layer xgrids --- n3fit/src/n3fit/model_gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 2814c2f656..901ad73c41 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -534,7 +534,7 @@ def pdfNN_layer_generator( # Generate the generic layers that will not depend on extra considerations # First prepare the input for the PDF model and any scaling if needed - placeholder_input = Input(shape=(None, 1), batch_size=1) + placeholder_input = Input(shape=(None, 1), batch_size=1, name='xgrids') subtract_one = False process_input = Lambda(lambda x: x) @@ -546,7 +546,7 @@ def pdfNN_layer_generator( process_input = Lambda(lambda x: 2 * x - 1) subtract_one = True input_x_eq_1 = scaler([1.0])[0] - placeholder_input = Input(shape=(None, 2), batch_size=1) + placeholder_input = Input(shape=(None, 2), batch_size=1, name='xgrids') elif inp == 2: # If the input is of type (x, logx) # create a x --> (x, logx) layer to preppend to everything From 57f6552aa8d85a2244d5c406e34fc0acebae1606 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 17:48:03 +0200 Subject: [PATCH 003/134] Rename and simplify dense_me -> neural_network --- n3fit/src/n3fit/model_gen.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 901ad73c41..47acb60074 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -597,15 +597,12 @@ def pdfNN_layer_generator( basis_size=last_layer_nodes, ) - def dense_me(x): + def neural_network(x): """Takes an input tensor `x` and applies all layers from the `list_of_pdf_layers` in order""" - processed_x = process_input(x) - curr_fun = list_of_pdf_layers[0](processed_x) - - for dense_layer in list_of_pdf_layers[1:]: - curr_fun = dense_layer(curr_fun) - return curr_fun + for layer in list_of_pdf_layers: + x = layer(x) + return x preproseed = layer_seed + number_of_layers layer_preproc = Preprocessing( @@ -624,9 +621,9 @@ def layer_fitbasis(x): x_scaled = op.op_gather_keep_dims(x, 0, axis=-1) x_original = op.op_gather_keep_dims(x, -1, axis=-1) - nn_output = dense_me(x_scaled) + nn_output = neural_network(process_input(x_scaled)) if subtract_one: - nn_at_one = dense_me(layer_x_eq_1) + nn_at_one = neural_network(process_input(layer_x_eq_1)) nn_output = op.op_subtract([nn_output, nn_at_one]) ret = op.op_multiply([nn_output, layer_preproc(x_original)]) From d81814d44fe9ee343ca4c721f729f28e2e5e2821 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 17:58:23 +0200 Subject: [PATCH 004/134] Rename i->i_replica and layer_seed->replica_seed --- n3fit/src/n3fit/model_gen.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 47acb60074..1627206b46 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -570,9 +570,9 @@ def pdfNN_layer_generator( else: sumrule_layer = lambda x: x - # Now we need a trainable network per model to be trained in parallel + # Now we need a trainable network per replica to be trained in parallel pdf_models = [] - for i, layer_seed in enumerate(seed): + for i_replica, replica_seed in enumerate(seed): if layer_type == "dense": reg = regularizer_selector(regularizer, **regularizer_args) list_of_pdf_layers = generate_dense_network( @@ -580,7 +580,7 @@ def pdfNN_layer_generator( nodes, activations, initializer_name, - seed=layer_seed, + seed=replica_seed, dropout_rate=dropout, regularizer=reg, ) @@ -593,7 +593,7 @@ def pdfNN_layer_generator( nodes, activations, initializer_name, - seed=layer_seed, + seed=replica_seed, basis_size=last_layer_nodes, ) @@ -604,11 +604,11 @@ def neural_network(x): x = layer(x) return x - preproseed = layer_seed + number_of_layers + preproseed = replica_seed + number_of_layers layer_preproc = Preprocessing( flav_info=flav_info, input_shape=(1,), - name=f"pdf_prepro_{i}", + name=f"pdf_prepro_{i_replica}", seed=preproseed, large_x=not subtract_one, ) @@ -641,7 +641,7 @@ def layer_pdf(x): # Create the model pdf_model = MetaModel( - model_input, final_pdf(placeholder_input), name=f"PDF_{i}", scaler=scaler + model_input, final_pdf(placeholder_input), name=f"PDF_{i_replica}", scaler=scaler ) pdf_models.append(pdf_model) return pdf_models From 557b14c96d459c2cbe4ba9c9382c5c4ccd5503e3 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 18:13:53 +0200 Subject: [PATCH 005/134] Rename preprocessing -> prefactor --- n3fit/src/n3fit/layers/__init__.py | 2 +- .../layers/{preprocessing.py => prefactor.py} | 16 ++++++++-------- n3fit/src/n3fit/model_gen.py | 16 ++++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) rename n3fit/src/n3fit/layers/{preprocessing.py => prefactor.py} (91%) diff --git a/n3fit/src/n3fit/layers/__init__.py b/n3fit/src/n3fit/layers/__init__.py index e5839046cc..ccc78fbb15 100644 --- a/n3fit/src/n3fit/layers/__init__.py +++ b/n3fit/src/n3fit/layers/__init__.py @@ -1,4 +1,4 @@ -from .preprocessing import Preprocessing +from .prefactor import Prefactor from .rotations import FkRotation, FlavourToEvolution, ObsRotation from .x_operations import xIntegrator, xDivide from .msr_normalization import MSR_Normalization diff --git a/n3fit/src/n3fit/layers/preprocessing.py b/n3fit/src/n3fit/layers/prefactor.py similarity index 91% rename from n3fit/src/n3fit/layers/preprocessing.py rename to n3fit/src/n3fit/layers/prefactor.py index 56278224bf..9651c059a1 100644 --- a/n3fit/src/n3fit/layers/preprocessing.py +++ b/n3fit/src/n3fit/layers/prefactor.py @@ -3,13 +3,13 @@ from n3fit.backends import operations as op -class Preprocessing(MetaLayer): +class Prefactor(MetaLayer): """ - Applies preprocessing to the PDF. + Computes prefactor for the PDF. This layer generates a factor (1-x)^beta*x^(1-alpha) where both beta and alpha - are model paramters that can be trained. If feature scaling is used, the preprocessing - factor is x^(1-alpha). + are model paramters that can be trained. If feature scaling is used, the + prefactor is x^(1-alpha). Alpha is initialized uniformly within the ranges allowed in the runcard and then it is only allowed to move between those two values (with a hard wall in each side) @@ -21,7 +21,7 @@ class Preprocessing(MetaLayer): Parameters ---------- flav_info: list - list of dicts containing the information about the fitting of the preprocessing + list of dicts containing the information about the fitting of the prefactor This corresponds to the `fitting::basis` parameter in the nnpdf runcard. The dicts can contain the following fields: `smallx`: range of alpha @@ -29,7 +29,7 @@ class Preprocessing(MetaLayer): `trainable`: whether these alpha-beta should be trained during the fit (defaults to true) large_x: bool - Whether large x preprocessing should be active + Whether large x prefactor should be active seed: int seed for the initializer of the random alpha and beta values """ @@ -43,7 +43,7 @@ def __init__( **kwargs, ): if flav_info is None: - raise ValueError("Trying to instantiate a preprocessing with no basis information") + raise ValueError("Trying to instantiate a prefactor with no basis information") self.flav_info = flav_info self.seed = seed self.output_dim = len(flav_info) @@ -105,7 +105,7 @@ def build(self, input_shape): beta_name = f"beta_{flav_name}" self.generate_weight(beta_name, "largex", flav_dict, set_to_zero=not self.large_x) - super(Preprocessing, self).build(input_shape) + super(Prefactor, self).build(input_shape) def call(self, inputs, **kwargs): x = inputs diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 1627206b46..2fd1befbbf 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -13,7 +13,7 @@ import numpy as np from n3fit.msr import msr_impose from n3fit.layers import DIS, DY, ObsRotation, losses -from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution +from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask from n3fit.layers.observable import is_unique from n3fit.backends import MetaModel, Input @@ -409,7 +409,7 @@ def pdfNN_layer_generator( and outputs a basis of 14 PDFs. It generates the preprocessing of the x into a set (x, log(x)), the arbitrary NN to fit the form of the PDF - and the preprocessing factors. + and the prefactor. The funtional form of the output of this function is of: @@ -444,7 +444,7 @@ def pdfNN_layer_generator( A function is constructed that joins all those layers. The function takes a tensor as the input and applies all layers for NN in order. - 4. Create a preprocessing layer (that takes as input the same tensor x as the NN) + 4. Create a prefactor layer (that takes as input the same tensor x as the NN) and multiply it to the NN. We have now: N(x)_{j} * x^{1-alpha_{j}} * (1-x)^{beta_{j}} @@ -481,7 +481,7 @@ def pdfNN_layer_generator( selects the type of architecture of the NN. Default: dense flav_info: dict dictionary containing the information about each PDF (basis dictionary in the runcard) - to be used by Preprocessing + to be used by Prefactor out: int number of output flavours of the model (default 14) seed: list(int) @@ -604,12 +604,12 @@ def neural_network(x): x = layer(x) return x - preproseed = replica_seed + number_of_layers - layer_preproc = Preprocessing( + prefacseed = replica_seed + number_of_layers + layer_preproc = Prefactor( flav_info=flav_info, input_shape=(1,), - name=f"pdf_prepro_{i_replica}", - seed=preproseed, + name=f"pdf_prefactor_{i_replica}", + seed=prefacseed, large_x=not subtract_one, ) From e087a386729141c60012c0f3e20184c747e1e6dd Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 19:04:24 +0200 Subject: [PATCH 006/134] Create apply_prefactor layer (can't name yet as it is created twice rather than reused, in the sumrule) --- n3fit/src/n3fit/model_gen.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 2fd1befbbf..970825754a 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -573,6 +573,15 @@ def pdfNN_layer_generator( # Now we need a trainable network per replica to be trained in parallel pdf_models = [] for i_replica, replica_seed in enumerate(seed): + prefacseed = replica_seed + number_of_layers + compute_prefactor = Prefactor( + flav_info=flav_info, + input_shape=(1,), + name=f"pdf_prefactor_{i_replica}", + seed=prefacseed, + large_x=not subtract_one, + ) + if layer_type == "dense": reg = regularizer_selector(regularizer, **regularizer_args) list_of_pdf_layers = generate_dense_network( @@ -604,15 +613,6 @@ def neural_network(x): x = layer(x) return x - prefacseed = replica_seed + number_of_layers - layer_preproc = Prefactor( - flav_info=flav_info, - input_shape=(1,), - name=f"pdf_prefactor_{i_replica}", - seed=prefacseed, - large_x=not subtract_one, - ) - # Apply preprocessing and basis def layer_fitbasis(x): """The tensor x has a expected shape of (1, None, {1,2}) @@ -626,7 +626,9 @@ def layer_fitbasis(x): nn_at_one = neural_network(process_input(layer_x_eq_1)) nn_output = op.op_subtract([nn_output, nn_at_one]) - ret = op.op_multiply([nn_output, layer_preproc(x_original)]) + apply_prefactor = Lambda(op.op_multiply) + prefactor = compute_prefactor(x_original) + ret = apply_prefactor([nn_output, prefactor]) if basis_rotation.is_identity(): # if we don't need to rotate basis we don't want spurious layers return ret From ca187e4b608b51394c596423a6cdb52f26aaa1af Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 20:16:27 +0200 Subject: [PATCH 007/134] Merge msr.py into layers/msr_normalization.py --- n3fit/src/n3fit/layers/msr_normalization.py | 83 ++++++++++++++++++ n3fit/src/n3fit/model_gen.py | 2 +- n3fit/src/n3fit/msr.py | 93 --------------------- 3 files changed, 84 insertions(+), 94 deletions(-) delete mode 100644 n3fit/src/n3fit/msr.py diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index c31bf8fb41..5228b89360 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -1,3 +1,5 @@ +import numpy as np +from n3fit.layers import xDivide, xIntegrator from n3fit.backends import MetaLayer from n3fit.backends import operations as op @@ -64,3 +66,84 @@ def call(self, pdf_integrated): norm_constants += n_av + n_av3 + n_av8 + n_av15 return self._out_scatter(norm_constants) + +def gen_integration_input(nx): + """ + Generates a np.array (shaped (nx,1)) of nx elements where the + nx/2 first elements are a logspace between 0 and 0.1 + and the rest a linspace from 0.1 to 0 + """ + lognx = int(nx / 2) + linnx = int(nx - lognx) + xgrid_log = np.logspace(-9, -1, lognx + 1) + xgrid_lin = np.linspace(0.1, 1, linnx) + xgrid = np.concatenate([xgrid_log[:-1], xgrid_lin]).reshape(nx, 1) + + spacing = [0.0] + for i in range(1, nx): + spacing.append(np.abs(xgrid[i - 1] - xgrid[i])) + spacing.append(0.0) + + weights = [] + for i in range(nx): + weights.append((spacing[i] + spacing[i + 1]) / 2.0) + weights_array = np.array(weights).reshape(nx, 1) + + return xgrid, weights_array + + +def msr_impose(nx=int(2e3), mode='All', scaler=None): + """ + This function receives: + Generates a function that applies a normalization layer to the fit. + - fit_layer: the 8-basis layer of PDF which we fit + The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) + - final_layer: the 14-basis which is fed to the fktable + and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). + It uses pdf_fit to compute the sum rule and returns a modified version of + the final_pdf layer with a normalisation by which the sum rule is imposed + + Parameters + ---------- + nx: int + number of points for the integration grid, default: 2000 + mode: str + what sum rules to compute (MSR, VSR or All), default: All + scaler: scaler + 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 + """ + + # 1. Generate the fake input which will be used to integrate + xgrid, weights_array = gen_integration_input(nx) + # 1b If a scaler is provided, scale the input xgrid + if scaler: + xgrid = scaler(xgrid) + + # 2. Prepare the pdf for integration + # for that we need to multiply several flavours with 1/x + division_by_x = xDivide() + # 3. Now create the integration layer (the layer that will simply integrate, given some weight + integrator = xIntegrator(weights_array, input_shape=(nx,)) + + # 4. Now create the normalization by selecting the right integrations + normalizer = MSR_Normalization(mode=mode) + + # 5. Make the xgrid array into a backend input layer so it can be given to the normalization + xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") + # Finally prepare a function which will take as input the output of the PDF model + # and will return it appropiately normalized. + def apply_normalization(layer_pdf): + """ + layer_pdf: output of the PDF, unnormalized, ready for the fktable + """ + x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) + pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) + normalization = normalizer(integrator(pdf_integrand)) + + def ultimate_pdf(x): + return layer_pdf(x)*normalization + + return ultimate_pdf + + return apply_normalization, xgrid_input diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 970825754a..3ac2d5db45 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -11,7 +11,7 @@ """ from dataclasses import dataclass import numpy as np -from n3fit.msr import msr_impose +from n3fit.layers.msr_normalization import msr_impose from n3fit.layers import DIS, DY, ObsRotation, losses from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask from n3fit.layers.observable import is_unique diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py deleted file mode 100644 index e99006de47..0000000000 --- a/n3fit/src/n3fit/msr.py +++ /dev/null @@ -1,93 +0,0 @@ -""" - The constraint module include functions to impose the momentum sum rules on the PDFs -""" -import logging -import numpy as np - -from n3fit.layers import xDivide, MSR_Normalization, xIntegrator -from n3fit.backends import operations as op - - -log = logging.getLogger(__name__) - - -def gen_integration_input(nx): - """ - Generates a np.array (shaped (nx,1)) of nx elements where the - nx/2 first elements are a logspace between 0 and 0.1 - and the rest a linspace from 0.1 to 0 - """ - lognx = int(nx / 2) - linnx = int(nx - lognx) - xgrid_log = np.logspace(-9, -1, lognx + 1) - xgrid_lin = np.linspace(0.1, 1, linnx) - xgrid = np.concatenate([xgrid_log[:-1], xgrid_lin]).reshape(nx, 1) - - spacing = [0.0] - for i in range(1, nx): - spacing.append(np.abs(xgrid[i - 1] - xgrid[i])) - spacing.append(0.0) - - weights = [] - for i in range(nx): - weights.append((spacing[i] + spacing[i + 1]) / 2.0) - weights_array = np.array(weights).reshape(nx, 1) - - return xgrid, weights_array - - -def msr_impose(nx=int(2e3), mode='All', scaler=None): - """ - This function receives: - Generates a function that applies a normalization layer to the fit. - - fit_layer: the 8-basis layer of PDF which we fit - The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) - - final_layer: the 14-basis which is fed to the fktable - and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). - It uses pdf_fit to compute the sum rule and returns a modified version of - the final_pdf layer with a normalisation by which the sum rule is imposed - - Parameters - ---------- - nx: int - number of points for the integration grid, default: 2000 - mode: str - what sum rules to compute (MSR, VSR or All), default: All - scaler: scaler - 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 - """ - - # 1. Generate the fake input which will be used to integrate - xgrid, weights_array = gen_integration_input(nx) - # 1b If a scaler is provided, scale the input xgrid - if scaler: - xgrid = scaler(xgrid) - - # 2. Prepare the pdf for integration - # for that we need to multiply several flavours with 1/x - division_by_x = xDivide() - # 3. Now create the integration layer (the layer that will simply integrate, given some weight - integrator = xIntegrator(weights_array, input_shape=(nx,)) - - # 4. Now create the normalization by selecting the right integrations - normalizer = MSR_Normalization(mode=mode) - - # 5. Make the xgrid array into a backend input layer so it can be given to the normalization - xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") - # Finally prepare a function which will take as input the output of the PDF model - # and will return it appropiately normalized. - def apply_normalization(layer_pdf): - """ - layer_pdf: output of the PDF, unnormalized, ready for the fktable - """ - x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) - pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) - normalization = normalizer(integrator(pdf_integrand)) - - def ultimate_pdf(x): - return layer_pdf(x)*normalization - - return ultimate_pdf - - return apply_normalization, xgrid_input From 97d7409b772a4915422c2ea9c783d79d2e95d5d2 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 20:43:19 +0200 Subject: [PATCH 008/134] Turn msr_impose into class method --- n3fit/src/n3fit/layers/msr_normalization.py | 110 ++++++++++---------- n3fit/src/n3fit/model_gen.py | 6 +- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 5228b89360..2c9e4723f2 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -67,6 +67,61 @@ def call(self, pdf_integrated): return self._out_scatter(norm_constants) + def msr_impose(self, nx=int(2e3), mode='All', scaler=None): + """ + This function receives: + Generates a function that applies a normalization layer to the fit. + - fit_layer: the 8-basis layer of PDF which we fit + The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) + - final_layer: the 14-basis which is fed to the fktable + and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). + It uses pdf_fit to compute the sum rule and returns a modified version of + the final_pdf layer with a normalisation by which the sum rule is imposed + + Parameters + ---------- + nx: int + number of points for the integration grid, default: 2000 + mode: str + what sum rules to compute (MSR, VSR or All), default: All + scaler: scaler + 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 + """ + + # 1. Generate the fake input which will be used to integrate + xgrid, weights_array = gen_integration_input(nx) + # 1b If a scaler is provided, scale the input xgrid + if scaler: + xgrid = scaler(xgrid) + + # 2. Prepare the pdf for integration + # for that we need to multiply several flavours with 1/x + division_by_x = xDivide() + # 3. Now create the integration layer (the layer that will simply integrate, given some weight + integrator = xIntegrator(weights_array, input_shape=(nx,)) + + # 4. Now create the normalization by selecting the right integrations + + # 5. Make the xgrid array into a backend input layer so it can be given to the normalization + xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") + # Finally prepare a function which will take as input the output of the PDF model + # and will return it appropiately normalized. + def apply_normalization(layer_pdf): + """ + layer_pdf: output of the PDF, unnormalized, ready for the fktable + """ + x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) + pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) + normalization = self(integrator(pdf_integrand)) + + def ultimate_pdf(x): + return layer_pdf(x)*normalization + + return ultimate_pdf + + return apply_normalization, xgrid_input + def gen_integration_input(nx): """ Generates a np.array (shaped (nx,1)) of nx elements where the @@ -92,58 +147,3 @@ def gen_integration_input(nx): return xgrid, weights_array -def msr_impose(nx=int(2e3), mode='All', scaler=None): - """ - This function receives: - Generates a function that applies a normalization layer to the fit. - - fit_layer: the 8-basis layer of PDF which we fit - The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) - - final_layer: the 14-basis which is fed to the fktable - and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). - It uses pdf_fit to compute the sum rule and returns a modified version of - the final_pdf layer with a normalisation by which the sum rule is imposed - - Parameters - ---------- - nx: int - number of points for the integration grid, default: 2000 - mode: str - what sum rules to compute (MSR, VSR or All), default: All - scaler: scaler - 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 - """ - - # 1. Generate the fake input which will be used to integrate - xgrid, weights_array = gen_integration_input(nx) - # 1b If a scaler is provided, scale the input xgrid - if scaler: - xgrid = scaler(xgrid) - - # 2. Prepare the pdf for integration - # for that we need to multiply several flavours with 1/x - division_by_x = xDivide() - # 3. Now create the integration layer (the layer that will simply integrate, given some weight - integrator = xIntegrator(weights_array, input_shape=(nx,)) - - # 4. Now create the normalization by selecting the right integrations - normalizer = MSR_Normalization(mode=mode) - - # 5. Make the xgrid array into a backend input layer so it can be given to the normalization - xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") - # Finally prepare a function which will take as input the output of the PDF model - # and will return it appropiately normalized. - def apply_normalization(layer_pdf): - """ - layer_pdf: output of the PDF, unnormalized, ready for the fktable - """ - x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) - pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) - normalization = normalizer(integrator(pdf_integrand)) - - def ultimate_pdf(x): - return layer_pdf(x)*normalization - - return ultimate_pdf - - return apply_normalization, xgrid_input diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 3ac2d5db45..59775cf56e 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -11,9 +11,8 @@ """ from dataclasses import dataclass import numpy as np -from n3fit.layers.msr_normalization import msr_impose from n3fit.layers import DIS, DY, ObsRotation, losses -from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask +from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask, MSR_Normalization from n3fit.layers.observable import is_unique from n3fit.backends import MetaModel, Input @@ -565,7 +564,8 @@ def pdfNN_layer_generator( # Normalization and sum rules if impose_sumrule: - sumrule_layer, integrator_input = msr_impose(mode=impose_sumrule, scaler=scaler) + msr_normalization = MSR_Normalization(mode=impose_sumrule) + sumrule_layer, integrator_input = msr_normalization.msr_impose(mode=impose_sumrule, scaler=scaler) model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x From e0fb2f5146371660acfd395314f0a980bf9377ad Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 20:53:18 +0200 Subject: [PATCH 009/134] Use MSR_Normalization class attributes --- n3fit/src/n3fit/layers/msr_normalization.py | 65 ++++++++++----------- n3fit/src/n3fit/model_gen.py | 2 +- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 2c9e4723f2..2fd9d54672 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -18,7 +18,9 @@ class MSR_Normalization(MetaLayer): _msr_enabled = False _vsr_enabled = False - def __init__(self, output_dim=14, mode="ALL", **kwargs): + def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs): + self.nx = nx + self.scaler = scaler if mode == True or mode.upper() == "ALL": self._msr_enabled = True self._vsr_enabled = True @@ -67,7 +69,7 @@ def call(self, pdf_integrated): return self._out_scatter(norm_constants) - def msr_impose(self, nx=int(2e3), mode='All', scaler=None): + def msr_impose(self): """ This function receives: Generates a function that applies a normalization layer to the fit. @@ -80,26 +82,22 @@ def msr_impose(self, nx=int(2e3), mode='All', scaler=None): Parameters ---------- - nx: int - number of points for the integration grid, default: 2000 - mode: str - what sum rules to compute (MSR, VSR or All), default: All scaler: scaler 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 """ # 1. Generate the fake input which will be used to integrate - xgrid, weights_array = gen_integration_input(nx) + xgrid, weights_array = self._gen_integration_input() # 1b If a scaler is provided, scale the input xgrid - if scaler: - xgrid = scaler(xgrid) + if self.scaler: + xgrid = self.scaler(xgrid) # 2. Prepare the pdf for integration # for that we need to multiply several flavours with 1/x division_by_x = xDivide() # 3. Now create the integration layer (the layer that will simply integrate, given some weight - integrator = xIntegrator(weights_array, input_shape=(nx,)) + integrator = xIntegrator(weights_array, input_shape=(self.nx,)) # 4. Now create the normalization by selecting the right integrations @@ -122,28 +120,27 @@ def ultimate_pdf(x): return apply_normalization, xgrid_input -def gen_integration_input(nx): - """ - Generates a np.array (shaped (nx,1)) of nx elements where the - nx/2 first elements are a logspace between 0 and 0.1 - and the rest a linspace from 0.1 to 0 - """ - lognx = int(nx / 2) - linnx = int(nx - lognx) - xgrid_log = np.logspace(-9, -1, lognx + 1) - xgrid_lin = np.linspace(0.1, 1, linnx) - xgrid = np.concatenate([xgrid_log[:-1], xgrid_lin]).reshape(nx, 1) - - spacing = [0.0] - for i in range(1, nx): - spacing.append(np.abs(xgrid[i - 1] - xgrid[i])) - spacing.append(0.0) - - weights = [] - for i in range(nx): - weights.append((spacing[i] + spacing[i + 1]) / 2.0) - weights_array = np.array(weights).reshape(nx, 1) - - return xgrid, weights_array - + def _gen_integration_input(self): + """ + Generates a np.array (shaped (nx,1)) of nx elements where the + nx/2 first elements are a logspace between 0 and 0.1 + and the rest a linspace from 0.1 to 0 + """ + lognx = int(self.nx / 2) + linnx = int(self.nx - lognx) + xgrid_log = np.logspace(-9, -1, lognx + 1) + xgrid_lin = np.linspace(0.1, 1, linnx) + xgrid = np.concatenate([xgrid_log[:-1], xgrid_lin]).reshape(self.nx, 1) + + spacing = [0.0] + for i in range(1, self.nx): + spacing.append(np.abs(xgrid[i - 1] - xgrid[i])) + spacing.append(0.0) + + weights = [] + for i in range(self.nx): + weights.append((spacing[i] + spacing[i + 1]) / 2.0) + weights_array = np.array(weights).reshape(self.nx, 1) + + return xgrid, weights_array diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 59775cf56e..3ed1d53dce 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -565,7 +565,7 @@ def pdfNN_layer_generator( # Normalization and sum rules if impose_sumrule: msr_normalization = MSR_Normalization(mode=impose_sumrule) - sumrule_layer, integrator_input = msr_normalization.msr_impose(mode=impose_sumrule, scaler=scaler) + sumrule_layer, integrator_input = msr_normalization.msr_impose() model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x From c8e7e63383a2254c4a73363746ac66b4c5f0e234 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 20:59:50 +0200 Subject: [PATCH 010/134] Create integration grid in MSR_Normalizations init --- n3fit/src/n3fit/layers/msr_normalization.py | 28 ++++++++++----------- n3fit/src/n3fit/model_gen.py | 4 +-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 2fd9d54672..ee4993093f 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -41,6 +41,8 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs op.scatter_to_one, op_kwargs={"indices": idx, "output_dim": output_dim} ) + self._gen_integration_input() + super().__init__(**kwargs, name="normalizer") def call(self, pdf_integrated): @@ -87,30 +89,22 @@ def msr_impose(self): will be a (1, None, 2) tensor where dim [:,:,0] is scaled """ - # 1. Generate the fake input which will be used to integrate - xgrid, weights_array = self._gen_integration_input() - # 1b If a scaler is provided, scale the input xgrid - if self.scaler: - xgrid = self.scaler(xgrid) - # 2. Prepare the pdf for integration # for that we need to multiply several flavours with 1/x division_by_x = xDivide() # 3. Now create the integration layer (the layer that will simply integrate, given some weight - integrator = xIntegrator(weights_array, input_shape=(self.nx,)) + integrator = xIntegrator(self.weights_array, input_shape=(self.nx,)) # 4. Now create the normalization by selecting the right integrations - # 5. Make the xgrid array into a backend input layer so it can be given to the normalization - xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") # Finally prepare a function which will take as input the output of the PDF model # and will return it appropiately normalized. def apply_normalization(layer_pdf): """ layer_pdf: output of the PDF, unnormalized, ready for the fktable """ - x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) - pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) + x_original = op.op_gather_keep_dims(self.xgrid_input, -1, axis=-1) + pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(self.xgrid_input)]) normalization = self(integrator(pdf_integrand)) def ultimate_pdf(x): @@ -118,7 +112,7 @@ def ultimate_pdf(x): return ultimate_pdf - return apply_normalization, xgrid_input + return apply_normalization def _gen_integration_input(self): """ @@ -140,7 +134,13 @@ def _gen_integration_input(self): weights = [] for i in range(self.nx): weights.append((spacing[i] + spacing[i + 1]) / 2.0) - weights_array = np.array(weights).reshape(self.nx, 1) + self.weights_array = np.array(weights).reshape(self.nx, 1) - return xgrid, weights_array + # 1. Generate the fake input which will be used to integrate + # 1b If a scaler is provided, scale the input xgrid + if self.scaler: + xgrid = self.scaler(xgrid) + + # 5. Make the xgrid array into a backend input layer so it can be given to the normalization + self.xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 3ed1d53dce..35bc049f47 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -565,8 +565,8 @@ def pdfNN_layer_generator( # Normalization and sum rules if impose_sumrule: msr_normalization = MSR_Normalization(mode=impose_sumrule) - sumrule_layer, integrator_input = msr_normalization.msr_impose() - model_input["integrator_input"] = integrator_input + sumrule_layer = msr_normalization.msr_impose() + model_input["integrator_input"] = msr_normalization.xgrid_input else: sumrule_layer = lambda x: x From c5551f11d989159d9f7e2d598b103e3c108f5b66 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 21:23:53 +0200 Subject: [PATCH 011/134] Renamings --- n3fit/src/n3fit/layers/msr_normalization.py | 25 ++++++++++++--------- n3fit/src/n3fit/model_gen.py | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index ee4993093f..711b066716 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -42,6 +42,12 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs ) self._gen_integration_input() + # 2. Prepare the pdf for integration + # for that we need to multiply several flavours with 1/x + self.divide_by_x = xDivide() + # 3. Now create the integration layer (the layer that will simply integrate, given some weight + self.integrator = xIntegrator(self.weights_array, input_shape=(self.nx,)) + super().__init__(**kwargs, name="normalizer") @@ -89,12 +95,6 @@ def msr_impose(self): will be a (1, None, 2) tensor where dim [:,:,0] is scaled """ - # 2. Prepare the pdf for integration - # for that we need to multiply several flavours with 1/x - division_by_x = xDivide() - # 3. Now create the integration layer (the layer that will simply integrate, given some weight - integrator = xIntegrator(self.weights_array, input_shape=(self.nx,)) - # 4. Now create the normalization by selecting the right integrations # Finally prepare a function which will take as input the output of the PDF model @@ -103,12 +103,15 @@ def apply_normalization(layer_pdf): """ layer_pdf: output of the PDF, unnormalized, ready for the fktable """ - x_original = op.op_gather_keep_dims(self.xgrid_input, -1, axis=-1) - pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(self.xgrid_input)]) - normalization = self(integrator(pdf_integrand)) + x_original = op.op_gather_keep_dims(self.xgrid_integration, -1, axis=-1) + x_divided = self.divide_by_x(x_original) + pdf_xgrid_integration = layer_pdf(self.xgrid_integration) + pdf_integrand = op.op_multiply([x_divided, pdf_xgrid_integration]) + normalization_factor = self(self.integrator(pdf_integrand)) def ultimate_pdf(x): - return layer_pdf(x)*normalization + pdf_xgrid = layer_pdf(x) + return normalization_factor * pdf_xgrid return ultimate_pdf @@ -142,5 +145,5 @@ def _gen_integration_input(self): xgrid = self.scaler(xgrid) # 5. Make the xgrid array into a backend input layer so it can be given to the normalization - self.xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") + self.xgrid_integration = op.numpy_to_input(xgrid, name="integration_grid") diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 35bc049f47..11e18713c1 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -566,7 +566,7 @@ def pdfNN_layer_generator( if impose_sumrule: msr_normalization = MSR_Normalization(mode=impose_sumrule) sumrule_layer = msr_normalization.msr_impose() - model_input["integrator_input"] = msr_normalization.xgrid_input + model_input["integrator_input"] = msr_normalization.xgrid_integration else: sumrule_layer = lambda x: x From 62416143e6756f49d7253a9a78adb718ec65206e Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 12 May 2023 21:49:17 +0200 Subject: [PATCH 012/134] Prepare call method in MSR_Normalization --- n3fit/src/n3fit/layers/msr_normalization.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 711b066716..581b9abe3d 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -103,20 +103,26 @@ def apply_normalization(layer_pdf): """ layer_pdf: output of the PDF, unnormalized, ready for the fktable """ - x_original = op.op_gather_keep_dims(self.xgrid_integration, -1, axis=-1) - x_divided = self.divide_by_x(x_original) pdf_xgrid_integration = layer_pdf(self.xgrid_integration) - pdf_integrand = op.op_multiply([x_divided, pdf_xgrid_integration]) - normalization_factor = self(self.integrator(pdf_integrand)) def ultimate_pdf(x): pdf_xgrid = layer_pdf(x) - return normalization_factor * pdf_xgrid + return self.tempcall([pdf_xgrid, pdf_xgrid_integration]) return ultimate_pdf return apply_normalization + def tempcall(self, pdfx_pdfinteg): + pdf_xgrid, pdf_xgrid_integration = pdfx_pdfinteg + + x_original = op.op_gather_keep_dims(self.xgrid_integration, -1, axis=-1) + x_divided = self.divide_by_x(x_original) + pdf_integrand = op.op_multiply([x_divided, pdf_xgrid_integration]) + normalization_factor = self(self.integrator(pdf_integrand)) + + return normalization_factor * pdf_xgrid + def _gen_integration_input(self): """ Generates a np.array (shaped (nx,1)) of nx elements where the From 4ecb1baf8e50136d40bc098bab2102feeb2f9b70 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 15 May 2023 13:53:05 +0200 Subject: [PATCH 013/134] Share more layers, add names --- n3fit/src/n3fit/model_gen.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 11e18713c1..4692139298 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -536,20 +536,29 @@ def pdfNN_layer_generator( placeholder_input = Input(shape=(None, 1), batch_size=1, name='xgrids') subtract_one = False - process_input = Lambda(lambda x: x) + process_input = Lambda(lambda x: x, name='process_input') input_x_eq_1 = [1.0] # When scaler is active we also want to do the subtraction of large x # TODO: make it its own option (i.e., one could want to use this without using scaler) if scaler: # change the input domain [0,1] -> [-1,1] - process_input = Lambda(lambda x: 2 * x - 1) + process_input = Lambda(lambda x: 2 * x - 1, name='process_input') subtract_one = True input_x_eq_1 = scaler([1.0])[0] placeholder_input = Input(shape=(None, 2), batch_size=1, name='xgrids') elif inp == 2: # If the input is of type (x, logx) # create a x --> (x, logx) layer to preppend to everything - process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1)) + process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='process_input') + + extract_scaled = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') + extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') + + # the layer that multiplies the NN output by the prefactor + apply_prefactor = Lambda(op.op_multiply, name='apply_prefactor') + + # the layer that subtracts 1 from the NN output + subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') model_input = {"pdf_input": placeholder_input} if subtract_one: @@ -614,25 +623,25 @@ def neural_network(x): return x # Apply preprocessing and basis + def layer_fitbasis(x): """The tensor x has a expected shape of (1, None, {1,2}) where x[...,0] corresponds to the feature_scaled input and x[...,-1] the original input """ - x_scaled = op.op_gather_keep_dims(x, 0, axis=-1) - x_original = op.op_gather_keep_dims(x, -1, axis=-1) + x_scaled = extract_scaled(x) + x_original = extract_original(x) nn_output = neural_network(process_input(x_scaled)) if subtract_one: nn_at_one = neural_network(process_input(layer_x_eq_1)) - nn_output = op.op_subtract([nn_output, nn_at_one]) + nn_output = subtract_one_layer([nn_output, nn_at_one]) - apply_prefactor = Lambda(op.op_multiply) prefactor = compute_prefactor(x_original) ret = apply_prefactor([nn_output, prefactor]) - if basis_rotation.is_identity(): + if not basis_rotation.is_identity(): # if we don't need to rotate basis we don't want spurious layers - return ret - return basis_rotation(ret) + ret = basis_rotation(ret) + return ret # Rotation layer, changes from the 8-basis to the 14-basis def layer_pdf(x): From 767977b8e8ccbfdba6a774d57e462500d0d511c9 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 15 May 2023 14:40:24 +0200 Subject: [PATCH 014/134] Create named layers in msr_normalization --- n3fit/src/n3fit/layers/msr_normalization.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 581b9abe3d..e20fae5d89 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -1,6 +1,6 @@ import numpy as np from n3fit.layers import xDivide, xIntegrator -from n3fit.backends import MetaLayer +from n3fit.backends import MetaLayer, Lambda from n3fit.backends import operations as op GLUON_IDX = [[2]] @@ -44,10 +44,13 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs self._gen_integration_input() # 2. Prepare the pdf for integration # for that we need to multiply several flavours with 1/x + self.get_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ") self.divide_by_x = xDivide() # 3. Now create the integration layer (the layer that will simply integrate, given some weight self.integrator = xIntegrator(self.weights_array, input_shape=(self.nx,)) + self.compute_integrand = Lambda(op.op_multiply, name="pdf_integrand") + self.compute_normalized_pdf = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized") super().__init__(**kwargs, name="normalizer") @@ -116,12 +119,13 @@ def ultimate_pdf(x): def tempcall(self, pdfx_pdfinteg): pdf_xgrid, pdf_xgrid_integration = pdfx_pdfinteg - x_original = op.op_gather_keep_dims(self.xgrid_integration, -1, axis=-1) + x_original = self.get_original(self.xgrid_integration) x_divided = self.divide_by_x(x_original) - pdf_integrand = op.op_multiply([x_divided, pdf_xgrid_integration]) + pdf_integrand = self.compute_integrand([x_divided, pdf_xgrid_integration]) normalization_factor = self(self.integrator(pdf_integrand)) - return normalization_factor * pdf_xgrid + pdf_normalized = self.compute_normalized_pdf([pdf_xgrid, normalization_factor]) + return pdf_normalized def _gen_integration_input(self): """ From d6ed37c23dc37cf39876d9fa5e22feb2faa32410 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 15 May 2023 15:41:20 +0200 Subject: [PATCH 015/134] Add pdf_integrated step --- n3fit/src/n3fit/layers/msr_normalization.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index e20fae5d89..b068859045 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -122,7 +122,8 @@ def tempcall(self, pdfx_pdfinteg): x_original = self.get_original(self.xgrid_integration) x_divided = self.divide_by_x(x_original) pdf_integrand = self.compute_integrand([x_divided, pdf_xgrid_integration]) - normalization_factor = self(self.integrator(pdf_integrand)) + pdf_integrated = self.integrator(pdf_integrand) + normalization_factor = self(pdf_integrated) pdf_normalized = self.compute_normalized_pdf([pdf_xgrid, normalization_factor]) return pdf_normalized From 396fc6f40b64f662cb95de17f83fb621f5e805c0 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 15 May 2023 15:48:48 +0200 Subject: [PATCH 016/134] Move computation of xdivided to init, move integration into call --- n3fit/src/n3fit/layers/msr_normalization.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index b068859045..ce6341fc75 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -46,6 +46,8 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs # for that we need to multiply several flavours with 1/x self.get_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ") self.divide_by_x = xDivide() + x_original = self.get_original(self.xgrid_integration) + self.x_divided = self.divide_by_x(x_original) # 3. Now create the integration layer (the layer that will simply integrate, given some weight self.integrator = xIntegrator(self.weights_array, input_shape=(self.nx,)) @@ -54,7 +56,7 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs super().__init__(**kwargs, name="normalizer") - def call(self, pdf_integrated): + def call(self, pdf_integrand): """Imposes the valence and momentum sum rules: A_g = (1-sigma)/g A_v = A_v24 = A_v35 = 3/V @@ -64,6 +66,7 @@ def call(self, pdf_integrated): Note that both the input and the output are in the 14-flavours fk-basis """ + pdf_integrated = self.integrator(pdf_integrand) y = op.flatten(pdf_integrated) norm_constants = [] @@ -119,11 +122,8 @@ def ultimate_pdf(x): def tempcall(self, pdfx_pdfinteg): pdf_xgrid, pdf_xgrid_integration = pdfx_pdfinteg - x_original = self.get_original(self.xgrid_integration) - x_divided = self.divide_by_x(x_original) - pdf_integrand = self.compute_integrand([x_divided, pdf_xgrid_integration]) - pdf_integrated = self.integrator(pdf_integrand) - normalization_factor = self(pdf_integrated) + pdf_integrand = self.compute_integrand([self.x_divided, pdf_xgrid_integration]) + normalization_factor = self(pdf_integrand) pdf_normalized = self.compute_normalized_pdf([pdf_xgrid, normalization_factor]) return pdf_normalized From 472abed13add183c50259f630b64ab666edf2f90 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 15 May 2023 15:52:43 +0200 Subject: [PATCH 017/134] remove tempcall --- n3fit/src/n3fit/layers/msr_normalization.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index ce6341fc75..7d15e9073f 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -112,22 +112,17 @@ def apply_normalization(layer_pdf): pdf_xgrid_integration = layer_pdf(self.xgrid_integration) def ultimate_pdf(x): + pdf_integrand = self.compute_integrand([self.x_divided, pdf_xgrid_integration]) + normalization_factor = self(pdf_integrand) + pdf_xgrid = layer_pdf(x) - return self.tempcall([pdf_xgrid, pdf_xgrid_integration]) + pdf_normalized = self.compute_normalized_pdf([pdf_xgrid, normalization_factor]) + return pdf_normalized return ultimate_pdf return apply_normalization - def tempcall(self, pdfx_pdfinteg): - pdf_xgrid, pdf_xgrid_integration = pdfx_pdfinteg - - pdf_integrand = self.compute_integrand([self.x_divided, pdf_xgrid_integration]) - normalization_factor = self(pdf_integrand) - - pdf_normalized = self.compute_normalized_pdf([pdf_xgrid, normalization_factor]) - return pdf_normalized - def _gen_integration_input(self): """ Generates a np.array (shaped (nx,1)) of nx elements where the From 08c887655e644c8b8b7e3edf128ee662c9e440a7 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 16 May 2023 13:43:57 +0200 Subject: [PATCH 018/134] Fix bug introduced after renaming preprocessing to prefactor --- n3fit/src/n3fit/io/writer.py | 2 +- n3fit/src/n3fit/vpinterface.py | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/n3fit/src/n3fit/io/writer.py b/n3fit/src/n3fit/io/writer.py index 6b4879f5a8..32418e9543 100644 --- a/n3fit/src/n3fit/io/writer.py +++ b/n3fit/src/n3fit/io/writer.py @@ -318,7 +318,7 @@ def jsonfit(replica_status, pdf_object, tr_chi2, vl_chi2, true_chi2, stop_epoch, """ all_info = {} # Generate preprocessing information - all_info["preprocessing"] = pdf_object.get_preprocessing_factors() + all_info["preprocessing"] = pdf_object.get_prefactor_factors() # .fitinfo-like info all_info["stop_epoch"] = stop_epoch all_info["best_epoch"] = replica_status.best_epoch diff --git a/n3fit/src/n3fit/vpinterface.py b/n3fit/src/n3fit/vpinterface.py index 777cac91ac..f851aafb3f 100644 --- a/n3fit/src/n3fit/vpinterface.py +++ b/n3fit/src/n3fit/vpinterface.py @@ -195,29 +195,31 @@ def get_nn_weights(self): """Outputs all weights of the NN as numpy.ndarrays""" return [model.get_weights() for model in self._models] - def get_preprocessing_factors(self, replica=None): - """Loads the preprocessing alpha and beta arrays from the PDF trained model. + def get_prefactor_factors(self, replica=None): + """Loads the prefactor alpha and beta arrays from the PDF trained model. If a ``fit_basis`` given in the format of ``n3fit`` runcards is given it will be used to generate a new dictionary with the names, the exponent and whether they are trainable otherwise outputs a Nx2 array where [:,0] are alphas and [:,1] betas """ - # If no replica is explicitly requested, get the preprocessing layer for the first model + # If no replica is explicitly requested, get the prefactor layer for the first model if replica is None: replica = 1 # Replicas start counting in 1 so: - preprocessing_layers = self._models[replica - 1].get_layer_re(r"pdf_prepro_\d") - if len(preprocessing_layers) != 1: + prefactor_layers = self._models[replica - 1].get_layer_re(r"pdf_prefactor_\d") + if len(prefactor_layers) > 1: # We really don't want to fail at this point, but print a warning at least... - log.warning("More than one preprocessing layer found within the model!") - preprocessing_layer = preprocessing_layers[0] + log.warning("More than one prefactor layer found within the model!") + elif len(prefactor_layers) < 1: + log.warning("No prefactor layer found within the model!") + prefactor_layer = prefactor_layers[0] alphas_and_betas = None if self.fit_basis is not None: output_dictionaries = [] for d in self.fit_basis: flavour = d["fl"] - alpha = preprocessing_layer.get_weight_by_name(f"alpha_{flavour}") - beta = preprocessing_layer.get_weight_by_name(f"beta_{flavour}") + alpha = prefactor_layer.get_weight_by_name(f"alpha_{flavour}") + beta = prefactor_layer.get_weight_by_name(f"beta_{flavour}") if alpha is not None: alpha = float(alpha.numpy()) if beta is not None: From 5337d184bfa26680d04fd251067903a4d318df96 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 16 May 2023 15:38:39 +0200 Subject: [PATCH 019/134] Join neural network layers into their own NN_i model --- n3fit/src/n3fit/model_gen.py | 102 +++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 47 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 4692139298..9f63c26e29 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -9,6 +9,7 @@ """ +from typing import List from dataclasses import dataclass import numpy as np from n3fit.layers import DIS, DY, ObsRotation, losses @@ -387,21 +388,21 @@ def output_layer(ilayer): def pdfNN_layer_generator( - inp=2, - nodes=None, - activations=None, - initializer_name="glorot_normal", - layer_type="dense", - flav_info=None, + inp: int = 2, + nodes: List[int] = None, + activations: List[str] = None, + initializer_name: str = "glorot_normal", + layer_type: str = "dense", + flav_info: dict = None, fitbasis="NN31IC", - out=14, - seed=None, - dropout=0.0, + out: int = 14, + seed: int = None, + dropout: float = 0.0, regularizer=None, regularizer_args=None, - impose_sumrule=None, + impose_sumrule: str = None, scaler=None, - parallel_models=1, + parallel_models: int = 1, ): # pylint: disable=too-many-locals """ Generates the PDF model which takes as input a point in x (from 0 to 1) @@ -582,48 +583,21 @@ def pdfNN_layer_generator( # Now we need a trainable network per replica to be trained in parallel pdf_models = [] for i_replica, replica_seed in enumerate(seed): - prefacseed = replica_seed + number_of_layers + compute_prefactor = Prefactor( flav_info=flav_info, input_shape=(1,), name=f"pdf_prefactor_{i_replica}", - seed=prefacseed, + seed=replica_seed + number_of_layers, large_x=not subtract_one, ) - if layer_type == "dense": - reg = regularizer_selector(regularizer, **regularizer_args) - list_of_pdf_layers = generate_dense_network( - inp, - nodes, - activations, - initializer_name, - seed=replica_seed, - dropout_rate=dropout, - regularizer=reg, - ) - elif layer_type == "dense_per_flavour": - # Define the basis size attending to the last layer in the network - # TODO: this information should come from the basis information - # once the basis information is passed to this class - list_of_pdf_layers = generate_dense_per_flavour_network( - inp, - nodes, - activations, - initializer_name, - seed=replica_seed, - basis_size=last_layer_nodes, - ) - - def neural_network(x): - """Takes an input tensor `x` and applies all layers - from the `list_of_pdf_layers` in order""" - for layer in list_of_pdf_layers: - x = layer(x) - return x + neural_network = generate_nn( + layer_type, inp, nodes, activations, initializer_name, + replica_seed, dropout, regularizer, regularizer_args, + last_layer_nodes, name=f"NN_{i_replica}") # Apply preprocessing and basis - def layer_fitbasis(x): """The tensor x has a expected shape of (1, None, {1,2}) where x[...,0] corresponds to the feature_scaled input and x[...,-1] the original input @@ -650,9 +624,43 @@ def layer_pdf(x): # Final PDF (apply normalization) final_pdf = sumrule_layer(layer_pdf) + model_output = final_pdf(placeholder_input) + # Create the model - pdf_model = MetaModel( - model_input, final_pdf(placeholder_input), name=f"PDF_{i_replica}", scaler=scaler - ) + pdf_model = MetaModel(model_input, model_output, name=f"PDF_{i_replica}", scaler=scaler) pdf_models.append(pdf_model) return pdf_models + +def generate_nn( + layer_type: str, + inp: int, + nodes: List[int], + activations: List[str], + initializer_name: str, + replica_seed: int, + dropout: float, + regularizer: str, + regularizer_args: dict, + last_layer_nodes: int, + name: str) -> MetaModel: + """ + Create the part of the model that contains all of the actual neural network + layers. + """ + common_args = {'nodes_in': inp, 'nodes': nodes, 'activations': activations, 'initializer_name': initializer_name, 'seed': replica_seed} + if layer_type == "dense": + reg = regularizer_selector(regularizer, **regularizer_args) + list_of_pdf_layers = generate_dense_network(**common_args, dropout_rate=dropout, regularizer=reg) + elif layer_type == "dense_per_flavour": + list_of_pdf_layers = generate_dense_per_flavour_network(**common_args, basis_size=last_layer_nodes) + + # Note: using a Sequential model would be more appropriate, but it would require + # creating a MetaSequential model. + x = Input(shape=(None, inp), batch_size=1, name='xgrids_processed') + pdf = x + for layer in list_of_pdf_layers: + pdf = layer(pdf) + + model = MetaModel({'NN_input': x}, pdf, name=name) + return model + From ed8538932a4630f71b4212c3e7869572c5817f57 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 16 May 2023 16:50:35 +0200 Subject: [PATCH 020/134] Clarify layer names --- n3fit/src/n3fit/layers/msr_normalization.py | 2 +- n3fit/src/n3fit/model_gen.py | 18 +++++++++--------- n3fit/src/n3fit/vpinterface.py | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 7d15e9073f..1c78f7877f 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -54,7 +54,7 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs self.compute_integrand = Lambda(op.op_multiply, name="pdf_integrand") self.compute_normalized_pdf = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized") - super().__init__(**kwargs, name="normalizer") + super().__init__(**kwargs, name="msr_weights") def call(self, pdf_integrand): """Imposes the valence and momentum sum rules: diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 9f63c26e29..f7b7236025 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -534,7 +534,7 @@ def pdfNN_layer_generator( # Generate the generic layers that will not depend on extra considerations # First prepare the input for the PDF model and any scaling if needed - placeholder_input = Input(shape=(None, 1), batch_size=1, name='xgrids') + placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') subtract_one = False process_input = Lambda(lambda x: x, name='process_input') @@ -546,17 +546,17 @@ def pdfNN_layer_generator( process_input = Lambda(lambda x: 2 * x - 1, name='process_input') subtract_one = True input_x_eq_1 = scaler([1.0])[0] - placeholder_input = Input(shape=(None, 2), batch_size=1, name='xgrids') + placeholder_input = Input(shape=(None, 2), batch_size=1, name='x') elif inp == 2: # If the input is of type (x, logx) # create a x --> (x, logx) layer to preppend to everything - process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='process_input') + process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') extract_scaled = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') # the layer that multiplies the NN output by the prefactor - apply_prefactor = Lambda(op.op_multiply, name='apply_prefactor') + apply_prefactor = Lambda(op.op_multiply, name='prefactor_times_NN') # the layer that subtracts 1 from the NN output subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') @@ -566,11 +566,11 @@ def pdfNN_layer_generator( layer_x_eq_1 = op.numpy_to_input(np.array(input_x_eq_1).reshape(1, 1)) model_input["layer_x_eq_1"] = layer_x_eq_1 - # Evolution layer - layer_evln = FkRotation(input_shape=(last_layer_nodes,), output_dim=out) - # Basis rotation - basis_rotation = FlavourToEvolution(flav_info=flav_info, fitbasis=fitbasis) + basis_rotation = FlavourToEvolution(flav_info=flav_info, fitbasis=fitbasis, name="pdf_evolution_basis") + + # Evolution layer + layer_evln = FkRotation(input_shape=(last_layer_nodes,), output_dim=out, name="pdf_FK_basis") # Normalization and sum rules if impose_sumrule: @@ -587,7 +587,7 @@ def pdfNN_layer_generator( compute_prefactor = Prefactor( flav_info=flav_info, input_shape=(1,), - name=f"pdf_prefactor_{i_replica}", + name=f"prefactor_{i_replica}", seed=replica_seed + number_of_layers, large_x=not subtract_one, ) diff --git a/n3fit/src/n3fit/vpinterface.py b/n3fit/src/n3fit/vpinterface.py index f851aafb3f..373515b3d4 100644 --- a/n3fit/src/n3fit/vpinterface.py +++ b/n3fit/src/n3fit/vpinterface.py @@ -205,7 +205,7 @@ def get_prefactor_factors(self, replica=None): if replica is None: replica = 1 # Replicas start counting in 1 so: - prefactor_layers = self._models[replica - 1].get_layer_re(r"pdf_prefactor_\d") + prefactor_layers = self._models[replica - 1].get_layer_re(r"prefactor_\d") if len(prefactor_layers) > 1: # We really don't want to fail at this point, but print a warning at least... log.warning("More than one prefactor layer found within the model!") From 6bc651fb52dac50b1f21d7937d6ce51348c7a41b Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 17 May 2023 12:33:33 +0200 Subject: [PATCH 021/134] Revert all changes to MSR --- n3fit/src/n3fit/layers/msr_normalization.py | 97 +-------------------- n3fit/src/n3fit/model_gen.py | 8 +- n3fit/src/n3fit/msr.py | 93 ++++++++++++++++++++ 3 files changed, 101 insertions(+), 97 deletions(-) create mode 100644 n3fit/src/n3fit/msr.py diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 1c78f7877f..c31bf8fb41 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -1,6 +1,4 @@ -import numpy as np -from n3fit.layers import xDivide, xIntegrator -from n3fit.backends import MetaLayer, Lambda +from n3fit.backends import MetaLayer from n3fit.backends import operations as op GLUON_IDX = [[2]] @@ -18,9 +16,7 @@ class MSR_Normalization(MetaLayer): _msr_enabled = False _vsr_enabled = False - def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs): - self.nx = nx - self.scaler = scaler + def __init__(self, output_dim=14, mode="ALL", **kwargs): if mode == True or mode.upper() == "ALL": self._msr_enabled = True self._vsr_enabled = True @@ -41,22 +37,9 @@ def __init__(self, output_dim=14, mode="ALL", nx=int(2e3), scaler=None, **kwargs op.scatter_to_one, op_kwargs={"indices": idx, "output_dim": output_dim} ) - self._gen_integration_input() - # 2. Prepare the pdf for integration - # for that we need to multiply several flavours with 1/x - self.get_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ") - self.divide_by_x = xDivide() - x_original = self.get_original(self.xgrid_integration) - self.x_divided = self.divide_by_x(x_original) - # 3. Now create the integration layer (the layer that will simply integrate, given some weight - self.integrator = xIntegrator(self.weights_array, input_shape=(self.nx,)) + super().__init__(**kwargs, name="normalizer") - self.compute_integrand = Lambda(op.op_multiply, name="pdf_integrand") - self.compute_normalized_pdf = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized") - - super().__init__(**kwargs, name="msr_weights") - - def call(self, pdf_integrand): + def call(self, pdf_integrated): """Imposes the valence and momentum sum rules: A_g = (1-sigma)/g A_v = A_v24 = A_v35 = 3/V @@ -66,7 +49,6 @@ def call(self, pdf_integrand): Note that both the input and the output are in the 14-flavours fk-basis """ - pdf_integrated = self.integrator(pdf_integrand) y = op.flatten(pdf_integrated) norm_constants = [] @@ -82,74 +64,3 @@ def call(self, pdf_integrand): norm_constants += n_av + n_av3 + n_av8 + n_av15 return self._out_scatter(norm_constants) - - def msr_impose(self): - """ - This function receives: - Generates a function that applies a normalization layer to the fit. - - fit_layer: the 8-basis layer of PDF which we fit - The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) - - final_layer: the 14-basis which is fed to the fktable - and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). - It uses pdf_fit to compute the sum rule and returns a modified version of - the final_pdf layer with a normalisation by which the sum rule is imposed - - Parameters - ---------- - scaler: scaler - 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 - """ - - # 4. Now create the normalization by selecting the right integrations - - # Finally prepare a function which will take as input the output of the PDF model - # and will return it appropiately normalized. - def apply_normalization(layer_pdf): - """ - layer_pdf: output of the PDF, unnormalized, ready for the fktable - """ - pdf_xgrid_integration = layer_pdf(self.xgrid_integration) - - def ultimate_pdf(x): - pdf_integrand = self.compute_integrand([self.x_divided, pdf_xgrid_integration]) - normalization_factor = self(pdf_integrand) - - pdf_xgrid = layer_pdf(x) - pdf_normalized = self.compute_normalized_pdf([pdf_xgrid, normalization_factor]) - return pdf_normalized - - return ultimate_pdf - - return apply_normalization - - def _gen_integration_input(self): - """ - Generates a np.array (shaped (nx,1)) of nx elements where the - nx/2 first elements are a logspace between 0 and 0.1 - and the rest a linspace from 0.1 to 0 - """ - lognx = int(self.nx / 2) - linnx = int(self.nx - lognx) - xgrid_log = np.logspace(-9, -1, lognx + 1) - xgrid_lin = np.linspace(0.1, 1, linnx) - xgrid = np.concatenate([xgrid_log[:-1], xgrid_lin]).reshape(self.nx, 1) - - spacing = [0.0] - for i in range(1, self.nx): - spacing.append(np.abs(xgrid[i - 1] - xgrid[i])) - spacing.append(0.0) - - weights = [] - for i in range(self.nx): - weights.append((spacing[i] + spacing[i + 1]) / 2.0) - self.weights_array = np.array(weights).reshape(self.nx, 1) - - # 1. Generate the fake input which will be used to integrate - # 1b If a scaler is provided, scale the input xgrid - if self.scaler: - xgrid = self.scaler(xgrid) - - # 5. Make the xgrid array into a backend input layer so it can be given to the normalization - self.xgrid_integration = op.numpy_to_input(xgrid, name="integration_grid") - diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index f7b7236025..5ad0fea1a5 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -12,8 +12,9 @@ from typing import List from dataclasses import dataclass import numpy as np +from n3fit.msr import msr_impose from n3fit.layers import DIS, DY, ObsRotation, losses -from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask, MSR_Normalization +from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask from n3fit.layers.observable import is_unique from n3fit.backends import MetaModel, Input @@ -574,9 +575,8 @@ def pdfNN_layer_generator( # Normalization and sum rules if impose_sumrule: - msr_normalization = MSR_Normalization(mode=impose_sumrule) - sumrule_layer = msr_normalization.msr_impose() - model_input["integrator_input"] = msr_normalization.xgrid_integration + sumrule_layer, integrator_input = msr_impose(mode=impose_sumrule, scaler=scaler) + model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py new file mode 100644 index 0000000000..e99006de47 --- /dev/null +++ b/n3fit/src/n3fit/msr.py @@ -0,0 +1,93 @@ +""" + The constraint module include functions to impose the momentum sum rules on the PDFs +""" +import logging +import numpy as np + +from n3fit.layers import xDivide, MSR_Normalization, xIntegrator +from n3fit.backends import operations as op + + +log = logging.getLogger(__name__) + + +def gen_integration_input(nx): + """ + Generates a np.array (shaped (nx,1)) of nx elements where the + nx/2 first elements are a logspace between 0 and 0.1 + and the rest a linspace from 0.1 to 0 + """ + lognx = int(nx / 2) + linnx = int(nx - lognx) + xgrid_log = np.logspace(-9, -1, lognx + 1) + xgrid_lin = np.linspace(0.1, 1, linnx) + xgrid = np.concatenate([xgrid_log[:-1], xgrid_lin]).reshape(nx, 1) + + spacing = [0.0] + for i in range(1, nx): + spacing.append(np.abs(xgrid[i - 1] - xgrid[i])) + spacing.append(0.0) + + weights = [] + for i in range(nx): + weights.append((spacing[i] + spacing[i + 1]) / 2.0) + weights_array = np.array(weights).reshape(nx, 1) + + return xgrid, weights_array + + +def msr_impose(nx=int(2e3), mode='All', scaler=None): + """ + This function receives: + Generates a function that applies a normalization layer to the fit. + - fit_layer: the 8-basis layer of PDF which we fit + The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) + - final_layer: the 14-basis which is fed to the fktable + and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). + It uses pdf_fit to compute the sum rule and returns a modified version of + the final_pdf layer with a normalisation by which the sum rule is imposed + + Parameters + ---------- + nx: int + number of points for the integration grid, default: 2000 + mode: str + what sum rules to compute (MSR, VSR or All), default: All + scaler: scaler + 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 + """ + + # 1. Generate the fake input which will be used to integrate + xgrid, weights_array = gen_integration_input(nx) + # 1b If a scaler is provided, scale the input xgrid + if scaler: + xgrid = scaler(xgrid) + + # 2. Prepare the pdf for integration + # for that we need to multiply several flavours with 1/x + division_by_x = xDivide() + # 3. Now create the integration layer (the layer that will simply integrate, given some weight + integrator = xIntegrator(weights_array, input_shape=(nx,)) + + # 4. Now create the normalization by selecting the right integrations + normalizer = MSR_Normalization(mode=mode) + + # 5. Make the xgrid array into a backend input layer so it can be given to the normalization + xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") + # Finally prepare a function which will take as input the output of the PDF model + # and will return it appropiately normalized. + def apply_normalization(layer_pdf): + """ + layer_pdf: output of the PDF, unnormalized, ready for the fktable + """ + x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) + pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) + normalization = normalizer(integrator(pdf_integrand)) + + def ultimate_pdf(x): + return layer_pdf(x)*normalization + + return ultimate_pdf + + return apply_normalization, xgrid_input From 96328a2eb77928d6f3fa22afeeacfdc2401d6504 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 17 May 2023 13:54:32 +0200 Subject: [PATCH 022/134] Rewrite msr into a model that takes as inputs the pdf, pdf on integration grid and the integration grid, and outputs normalized pdf --- n3fit/src/n3fit/layers/msr_normalization.py | 2 +- n3fit/src/n3fit/model_gen.py | 11 +- n3fit/src/n3fit/msr.py | 133 +++++++++++--------- 3 files changed, 84 insertions(+), 62 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index c31bf8fb41..39ac5ac984 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -37,7 +37,7 @@ def __init__(self, output_dim=14, mode="ALL", **kwargs): op.scatter_to_one, op_kwargs={"indices": idx, "output_dim": output_dim} ) - super().__init__(**kwargs, name="normalizer") + super().__init__(**kwargs) def call(self, pdf_integrated): """Imposes the valence and momentum sum rules: diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 5ad0fea1a5..a67cb495c0 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -12,7 +12,7 @@ from typing import List from dataclasses import dataclass import numpy as np -from n3fit.msr import msr_impose +from n3fit.msr import generate_msr_model_and_grid from n3fit.layers import DIS, DY, ObsRotation, losses from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask from n3fit.layers.observable import is_unique @@ -575,7 +575,7 @@ def pdfNN_layer_generator( # Normalization and sum rules if impose_sumrule: - sumrule_layer, integrator_input = msr_impose(mode=impose_sumrule, scaler=scaler) + sumrule_layer, integrator_input = generate_msr_model_and_grid(mode=impose_sumrule, scaler=scaler) model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x @@ -621,10 +621,11 @@ def layer_fitbasis(x): def layer_pdf(x): return layer_evln(layer_fitbasis(x)) - # Final PDF (apply normalization) - final_pdf = sumrule_layer(layer_pdf) + pdf_unnormalized = layer_pdf(placeholder_input) + pdf_integration_grid = layer_pdf(integrator_input) - model_output = final_pdf(placeholder_input) + pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) + model_output = pdf_normalized # Create the model pdf_model = MetaModel(model_input, model_output, name=f"PDF_{i_replica}", scaler=scaler) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index e99006de47..00881b49d8 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -7,10 +7,85 @@ from n3fit.layers import xDivide, MSR_Normalization, xIntegrator from n3fit.backends import operations as op +from n3fit.backends import MetaModel, Lambda, Input + log = logging.getLogger(__name__) +def generate_msr_model_and_grid( + output_dim: int = 14, + mode: str = "ALL", + nx: int = int(2e3), + scaler=None, + **kwargs) -> MetaModel: + """ + Generates a model that applies the sum rules to the PDF. + + Parameters + ---------- + output_dim: int + Number of flavours of the output PDF + mode: str + Mode of sum rules to apply. It can be: + - "ALL": applies both the momentum and valence sum rules + - "MSR": applies only the momentum sum rule + - "VSR": applies only the valence sum rule + nx: int + Number of points of the integration grid + scaler: Scaler + Scaler to be applied to the PDF before applying the sum rules + + Returns + ------- + model: MetaModel + Model that applies the sum rules to the PDF + It takes as inputs: + - pdf_x: the PDF output of the model + - pdf_xgrid_integration: the PDF output of the model evaluated at the integration grid + - xgrid_integration: the integration grid + It returns the PDF with the sum rules applied + xgrid_integration: dict + Dictionary with the integration grid, with: + - values: the integration grid + - input: the input layer of the integration grid + """ + # 0. Prepare input layers to MSR model + pdf_x = Input(shape=(None, output_dim), batch_size=1, name="pdf_x") + pdf_xgrid_integration = Input(shape=(nx, output_dim), batch_size=1, name="pdf_xgrid_integration") + + # 1. Generate the grid and weights that will be used to integrate + xgrid_integration, weights_array = gen_integration_input(nx) + # 1b If a scaler is provided, scale the input xgrid + if scaler: + xgrid_integration = scaler(xgrid_integration) + # 1c Get the original grid + x_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ")(xgrid_integration) + + # 2. Divide the grid by x depending on the flavour + x_divided = xDivide()(x_original) + + # 3. Prepare the pdf for integration by dividing by x + pdf_integrand = Lambda(op.op_multiply, name="pdf_integrand")([x_divided, pdf_xgrid_integration]) + + # 4. Integrate the pdf + pdf_integrated = xIntegrator(weights_array, input_shape=(nx,))(pdf_integrand) + + # 5. Compute the normalization factor + normalization_factor = MSR_Normalization(output_dim, mode, name="msr_weights")(pdf_integrated) + + # 6. Apply the normalization factor to the pdf + pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")([pdf_x, normalization_factor]) + + inputs = { + "pdf_x": pdf_x, + "pdf_xgrid_integration": pdf_xgrid_integration, + "xgrid_integration": xgrid_integration, + } + model = MetaModel(inputs, pdf_normalized, name="impose_msr") + + return model, xgrid_integration + def gen_integration_input(nx): """ Generates a np.array (shaped (nx,1)) of nx elements where the @@ -33,61 +108,7 @@ def gen_integration_input(nx): weights.append((spacing[i] + spacing[i + 1]) / 2.0) weights_array = np.array(weights).reshape(nx, 1) - return xgrid, weights_array - + xgrid = op.numpy_to_input(xgrid, name="integration_grid") -def msr_impose(nx=int(2e3), mode='All', scaler=None): - """ - This function receives: - Generates a function that applies a normalization layer to the fit. - - fit_layer: the 8-basis layer of PDF which we fit - The normalization is computed from the direct output of the NN (so the 7,8-flavours basis) - - final_layer: the 14-basis which is fed to the fktable - and it is applied to the input of the fktable (i.e., to the 14-flavours fk-basis). - It uses pdf_fit to compute the sum rule and returns a modified version of - the final_pdf layer with a normalisation by which the sum rule is imposed - - Parameters - ---------- - nx: int - number of points for the integration grid, default: 2000 - mode: str - what sum rules to compute (MSR, VSR or All), default: All - scaler: scaler - 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 - """ + return xgrid, weights_array - # 1. Generate the fake input which will be used to integrate - xgrid, weights_array = gen_integration_input(nx) - # 1b If a scaler is provided, scale the input xgrid - if scaler: - xgrid = scaler(xgrid) - - # 2. Prepare the pdf for integration - # for that we need to multiply several flavours with 1/x - division_by_x = xDivide() - # 3. Now create the integration layer (the layer that will simply integrate, given some weight - integrator = xIntegrator(weights_array, input_shape=(nx,)) - - # 4. Now create the normalization by selecting the right integrations - normalizer = MSR_Normalization(mode=mode) - - # 5. Make the xgrid array into a backend input layer so it can be given to the normalization - xgrid_input = op.numpy_to_input(xgrid, name="integration_grid") - # Finally prepare a function which will take as input the output of the PDF model - # and will return it appropiately normalized. - def apply_normalization(layer_pdf): - """ - layer_pdf: output of the PDF, unnormalized, ready for the fktable - """ - x_original = op.op_gather_keep_dims(xgrid_input, -1, axis=-1) - pdf_integrand = op.op_multiply([division_by_x(x_original), layer_pdf(xgrid_input)]) - normalization = normalizer(integrator(pdf_integrand)) - - def ultimate_pdf(x): - return layer_pdf(x)*normalization - - return ultimate_pdf - - return apply_normalization, xgrid_input From 82cf95b47686f104776ee5d4934d0cbadfc47994 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 17 May 2023 14:04:01 +0200 Subject: [PATCH 023/134] Set shape of integration grid to (None, 1) rather than (2000, 1) to display shapes in model summary and plot --- n3fit/src/n3fit/backends/keras_backend/operations.py | 6 +++++- n3fit/src/n3fit/msr.py | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 8cf1065849..e348649481 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -112,7 +112,7 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation -def numpy_to_input(numpy_array, no_reshape=False, name=None): +def numpy_to_input(numpy_array, no_reshape=False, name=None, custom_shape: tuple = None): """ Takes a numpy array and generates a Input layer. By default it adds a batch dimension (of size 1) so that the shape of the layer @@ -125,6 +125,8 @@ def numpy_to_input(numpy_array, no_reshape=False, name=None): if true, don't add batch dimension, take the first dimension of the array as the batch name: bool name to give to the layer + custom_shape: tuple + To specify a more general shape with None values """ if no_reshape: batched_array = numpy_array @@ -134,6 +136,8 @@ def numpy_to_input(numpy_array, no_reshape=False, name=None): batched_array = np.expand_dims(numpy_array, 0) batch_size = 1 shape = numpy_array.shape + if custom_shape is not None: + shape = custom_shape input_layer = Input(batch_size=batch_size, shape=shape, name=name) input_layer.tensor_content = batched_array input_layer.original_shape = no_reshape diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 00881b49d8..fd769ae737 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -108,7 +108,8 @@ def gen_integration_input(nx): weights.append((spacing[i] + spacing[i + 1]) / 2.0) weights_array = np.array(weights).reshape(nx, 1) - xgrid = op.numpy_to_input(xgrid, name="integration_grid") + # Specify a custom shape here using None, so shapes will display properly in the model summary + xgrid = op.numpy_to_input(xgrid, name="integration_grid", custom_shape=(None, 1)) return xgrid, weights_array From 7b475bafefb4c3ca4400fe7223635e9d57c3d3b6 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 17 May 2023 14:59:57 +0200 Subject: [PATCH 024/134] Revert renaming of Preprocessing to Prefactor (now use PreprocessingFactor for clarity and consistency) --- n3fit/src/n3fit/io/writer.py | 2 +- n3fit/src/n3fit/layers/__init__.py | 2 +- .../layers/{prefactor.py => preprocessing.py} | 4 ++-- n3fit/src/n3fit/model_gen.py | 8 +++---- n3fit/src/n3fit/vpinterface.py | 22 +++++++++---------- 5 files changed, 19 insertions(+), 19 deletions(-) rename n3fit/src/n3fit/layers/{prefactor.py => preprocessing.py} (97%) diff --git a/n3fit/src/n3fit/io/writer.py b/n3fit/src/n3fit/io/writer.py index 32418e9543..6b4879f5a8 100644 --- a/n3fit/src/n3fit/io/writer.py +++ b/n3fit/src/n3fit/io/writer.py @@ -318,7 +318,7 @@ def jsonfit(replica_status, pdf_object, tr_chi2, vl_chi2, true_chi2, stop_epoch, """ all_info = {} # Generate preprocessing information - all_info["preprocessing"] = pdf_object.get_prefactor_factors() + all_info["preprocessing"] = pdf_object.get_preprocessing_factors() # .fitinfo-like info all_info["stop_epoch"] = stop_epoch all_info["best_epoch"] = replica_status.best_epoch diff --git a/n3fit/src/n3fit/layers/__init__.py b/n3fit/src/n3fit/layers/__init__.py index ccc78fbb15..c8a7c6fafb 100644 --- a/n3fit/src/n3fit/layers/__init__.py +++ b/n3fit/src/n3fit/layers/__init__.py @@ -1,4 +1,4 @@ -from .prefactor import Prefactor +from .preprocessing import PreprocessingFactor from .rotations import FkRotation, FlavourToEvolution, ObsRotation from .x_operations import xIntegrator, xDivide from .msr_normalization import MSR_Normalization diff --git a/n3fit/src/n3fit/layers/prefactor.py b/n3fit/src/n3fit/layers/preprocessing.py similarity index 97% rename from n3fit/src/n3fit/layers/prefactor.py rename to n3fit/src/n3fit/layers/preprocessing.py index 9651c059a1..d312483874 100644 --- a/n3fit/src/n3fit/layers/prefactor.py +++ b/n3fit/src/n3fit/layers/preprocessing.py @@ -3,7 +3,7 @@ from n3fit.backends import operations as op -class Prefactor(MetaLayer): +class PreprocessingFactor(MetaLayer): """ Computes prefactor for the PDF. @@ -105,7 +105,7 @@ def build(self, input_shape): beta_name = f"beta_{flav_name}" self.generate_weight(beta_name, "largex", flav_dict, set_to_zero=not self.large_x) - super(Prefactor, self).build(input_shape) + super(PreprocessingFactor, self).build(input_shape) def call(self, inputs, **kwargs): x = inputs diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index a67cb495c0..db2f426b51 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -14,7 +14,7 @@ import numpy as np from n3fit.msr import generate_msr_model_and_grid from n3fit.layers import DIS, DY, ObsRotation, losses -from n3fit.layers import Preprocessing, FkRotation, FlavourToEvolution, Mask +from n3fit.layers import PreprocessingFactor, FkRotation, FlavourToEvolution, Mask from n3fit.layers.observable import is_unique from n3fit.backends import MetaModel, Input @@ -482,7 +482,7 @@ def pdfNN_layer_generator( selects the type of architecture of the NN. Default: dense flav_info: dict dictionary containing the information about each PDF (basis dictionary in the runcard) - to be used by Prefactor + to be used by PreprocessingFactor out: int number of output flavours of the model (default 14) seed: list(int) @@ -584,10 +584,10 @@ def pdfNN_layer_generator( pdf_models = [] for i_replica, replica_seed in enumerate(seed): - compute_prefactor = Prefactor( + compute_prefactor = PreprocessingFactor( flav_info=flav_info, input_shape=(1,), - name=f"prefactor_{i_replica}", + name=f"preprocessing_factor_{i_replica}", seed=replica_seed + number_of_layers, large_x=not subtract_one, ) diff --git a/n3fit/src/n3fit/vpinterface.py b/n3fit/src/n3fit/vpinterface.py index 373515b3d4..1986c96dad 100644 --- a/n3fit/src/n3fit/vpinterface.py +++ b/n3fit/src/n3fit/vpinterface.py @@ -195,31 +195,31 @@ def get_nn_weights(self): """Outputs all weights of the NN as numpy.ndarrays""" return [model.get_weights() for model in self._models] - def get_prefactor_factors(self, replica=None): - """Loads the prefactor alpha and beta arrays from the PDF trained model. + def get_preprocessing_factors(self, replica=None): + """Loads the preprocessing alpha and beta arrays from the PDF trained model. If a ``fit_basis`` given in the format of ``n3fit`` runcards is given it will be used to generate a new dictionary with the names, the exponent and whether they are trainable otherwise outputs a Nx2 array where [:,0] are alphas and [:,1] betas """ - # If no replica is explicitly requested, get the prefactor layer for the first model + # If no replica is explicitly requested, get the preprocessing layer for the first model if replica is None: replica = 1 # Replicas start counting in 1 so: - prefactor_layers = self._models[replica - 1].get_layer_re(r"prefactor_\d") - if len(prefactor_layers) > 1: + preprocessing_layers = self._models[replica - 1].get_layer_re(r"preprocessing_factor_\d") + if len(preprocessing_layers) > 1: # We really don't want to fail at this point, but print a warning at least... - log.warning("More than one prefactor layer found within the model!") - elif len(prefactor_layers) < 1: - log.warning("No prefactor layer found within the model!") - prefactor_layer = prefactor_layers[0] + log.warning("More than one preprocessing layer found within the model!") + elif len(preprocessing_layers) < 1: + log.warning("No preprocessing layer found within the model!") + preprocessing_layer = preprocessing_layers[0] alphas_and_betas = None if self.fit_basis is not None: output_dictionaries = [] for d in self.fit_basis: flavour = d["fl"] - alpha = prefactor_layer.get_weight_by_name(f"alpha_{flavour}") - beta = prefactor_layer.get_weight_by_name(f"beta_{flavour}") + alpha = preprocessing_layer.get_weight_by_name(f"alpha_{flavour}") + beta = preprocessing_layer.get_weight_by_name(f"beta_{flavour}") if alpha is not None: alpha = float(alpha.numpy()) if beta is not None: From 7153e939a77fd66c23854646b20829b4023aa20e Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 17 May 2023 15:25:37 +0200 Subject: [PATCH 025/134] Clean up model creation code --- n3fit/src/n3fit/model_gen.py | 91 +++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index db2f426b51..5bc72fd35a 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -582,47 +582,61 @@ def pdfNN_layer_generator( # Now we need a trainable network per replica to be trained in parallel pdf_models = [] - for i_replica, replica_seed in enumerate(seed): - compute_prefactor = PreprocessingFactor( - flav_info=flav_info, - input_shape=(1,), - name=f"preprocessing_factor_{i_replica}", - seed=replica_seed + number_of_layers, - large_x=not subtract_one, + # Only these layers change from replica to replica: + nn_replicas = [] + prefactor_replicas = [] + for i_replica, replica_seed in enumerate(seed): + prefactor_replicas.append( + PreprocessingFactor( + flav_info=flav_info, + input_shape=(1,), + name=f"preprocessing_factor_{i_replica}", + seed=replica_seed + number_of_layers, + large_x=not subtract_one, + ) ) + nn_replicas.append( + generate_nn( + layer_type, inp, nodes, activations, initializer_name, + replica_seed, dropout, regularizer, regularizer_args, + last_layer_nodes, name=f"NN_{i_replica}") + ) + + # All layers have been made, now we need to connect them, + # do this in a function so we can call it for both grids and each replica + # Since all layers are already made, they will be reused + def compute_unnormalized_pdf(x, neural_network, compute_prefactor): + # Preprocess the input grid + x_scaled = extract_scaled(x) + x_original = extract_original(x) + x_processed = process_input(x_scaled) + + # Compute the neural network output + nn_output = neural_network(x_processed) + if subtract_one: + x_eq_1_processed = process_input(layer_x_eq_1) + nn_at_one = neural_network(x_eq_1_processed) + nn_output = subtract_one_layer([nn_output, nn_at_one]) - neural_network = generate_nn( - layer_type, inp, nodes, activations, initializer_name, - replica_seed, dropout, regularizer, regularizer_args, - last_layer_nodes, name=f"NN_{i_replica}") - - # Apply preprocessing and basis - def layer_fitbasis(x): - """The tensor x has a expected shape of (1, None, {1,2}) - where x[...,0] corresponds to the feature_scaled input and x[...,-1] the original input - """ - x_scaled = extract_scaled(x) - x_original = extract_original(x) - - nn_output = neural_network(process_input(x_scaled)) - if subtract_one: - nn_at_one = neural_network(process_input(layer_x_eq_1)) - nn_output = subtract_one_layer([nn_output, nn_at_one]) - - prefactor = compute_prefactor(x_original) - ret = apply_prefactor([nn_output, prefactor]) - if not basis_rotation.is_identity(): - # if we don't need to rotate basis we don't want spurious layers - ret = basis_rotation(ret) - return ret - - # Rotation layer, changes from the 8-basis to the 14-basis - def layer_pdf(x): - return layer_evln(layer_fitbasis(x)) - - pdf_unnormalized = layer_pdf(placeholder_input) - pdf_integration_grid = layer_pdf(integrator_input) + # Compute the preprocessing prefactor and multiply + prefactor = compute_prefactor(x_original) + pref_nn = apply_prefactor([nn_output, prefactor]) + + # Apply basis rotation if needed + if not basis_rotation.is_identity(): + pref_nn = basis_rotation(pref_nn) + + # Transform to FK basis + pdf_unnormalized = layer_evln(pref_nn) + + return pdf_unnormalized + + # Finally compute the normalized PDFs for each replica + pdf_models = [] + for i_replica, (prefactor, nn) in enumerate(zip(prefactor_replicas, nn_replicas)): + pdf_unnormalized = compute_unnormalized_pdf(placeholder_input, nn, prefactor) + pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, prefactor) pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) model_output = pdf_normalized @@ -630,6 +644,7 @@ def layer_pdf(x): # Create the model pdf_model = MetaModel(model_input, model_output, name=f"PDF_{i_replica}", scaler=scaler) pdf_models.append(pdf_model) + return pdf_models def generate_nn( From dfb4eed6536b1d4d4849446cf5524f3649d6e788 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 22 May 2023 13:47:00 +0200 Subject: [PATCH 026/134] Reorganize input options, keeping effect the same --- n3fit/src/n3fit/model_gen.py | 70 ++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 5bc72fd35a..8bb5f2545a 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -515,9 +515,6 @@ def pdfNN_layer_generator( if impose_sumrule is None: impose_sumrule = "All" - if scaler: - inp = 1 - if activations is None: activations = ["tanh", "linear"] elif callable(activations): @@ -532,41 +529,50 @@ def pdfNN_layer_generator( # The number of nodes in the last layer is equal to the number of fitted flavours last_layer_nodes = nodes[-1] # (== len(flav_info)) - # Generate the generic layers that will not depend on extra considerations - - # First prepare the input for the PDF model and any scaling if needed - placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') - - subtract_one = False - process_input = Lambda(lambda x: x, name='process_input') - input_x_eq_1 = [1.0] + # Process input options. There are 3 options: + # 1. Do nothing + # 2. Scale the input + # 3. Concatenate log(x) to the input + # when feature scaling is on, don't add logs regardless of the input + use_feature_scaling = scaler is not None + add_logs = inp == 2 and not use_feature_scaling # When scaler is active we also want to do the subtraction of large x # TODO: make it its own option (i.e., one could want to use this without using scaler) - if scaler: - # change the input domain [0,1] -> [-1,1] - process_input = Lambda(lambda x: 2 * x - 1, name='process_input') - subtract_one = True - input_x_eq_1 = scaler([1.0])[0] - placeholder_input = Input(shape=(None, 2), batch_size=1, name='x') - elif inp == 2: - # If the input is of type (x, logx) - # create a x --> (x, logx) layer to preppend to everything - process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') + subtract_one = use_feature_scaling - extract_scaled = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') - extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') - - # the layer that multiplies the NN output by the prefactor - apply_prefactor = Lambda(op.op_multiply, name='prefactor_times_NN') + if use_feature_scaling: + inp = 1 - # the layer that subtracts 1 from the NN output - subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') + # Define the main input + if add_logs: + placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') + process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') + elif use_feature_scaling: + # Note feature scaling happens before the model created here, + # so the input is of the form (scaler(x), x) + placeholder_input = Input(shape=(None, 2), batch_size=1, name='scaledx_x') + process_input = Lambda(lambda x: 2 * x - 1, name='process_input') + else: + placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') + process_input = None model_input = {"pdf_input": placeholder_input} + if subtract_one: + input_x_eq_1 = [1.0] + if use_feature_scaling: + input_x_eq_1 = scaler(input_x_eq_1)[0] + # the layer that subtracts 1 from the NN output + subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') layer_x_eq_1 = op.numpy_to_input(np.array(input_x_eq_1).reshape(1, 1)) model_input["layer_x_eq_1"] = layer_x_eq_1 + extract_scaled = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') + extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') + + # the layer that multiplies the NN output by the prefactor + apply_prefactor = Lambda(op.op_multiply, name='prefactor_times_NN') + # Basis rotation basis_rotation = FlavourToEvolution(flav_info=flav_info, fitbasis=fitbasis, name="pdf_evolution_basis") @@ -610,7 +616,10 @@ def compute_unnormalized_pdf(x, neural_network, compute_prefactor): # Preprocess the input grid x_scaled = extract_scaled(x) x_original = extract_original(x) - x_processed = process_input(x_scaled) + if process_input is not None: + x_processed = process_input(x_scaled) + else: + x_processed = x_scaled # Compute the neural network output nn_output = neural_network(x_processed) @@ -672,7 +681,8 @@ def generate_nn( # Note: using a Sequential model would be more appropriate, but it would require # creating a MetaSequential model. - x = Input(shape=(None, inp), batch_size=1, name='xgrids_processed') + input_dimensions = 2 if inp == 2 or scaler is not None else 1 + x = Input(shape=(None, input_dimensions), batch_size=1, name='xgrids_processed') pdf = x for layer in list_of_pdf_layers: pdf = layer(pdf) From 9dc1384ba8d67cf020b3287ece1ae5ee97f4c9f6 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 22 May 2023 14:17:41 +0200 Subject: [PATCH 027/134] Make preprocessing layers dependent on which option is used (scaling, adding logs) --- n3fit/src/n3fit/model_gen.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 8bb5f2545a..410362719f 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -536,6 +536,7 @@ def pdfNN_layer_generator( # when feature scaling is on, don't add logs regardless of the input use_feature_scaling = scaler is not None add_logs = inp == 2 and not use_feature_scaling + print(f"******************** inp: {inp}, use_feature_scaling: {use_feature_scaling}, add_logs: {add_logs}") # When scaler is active we also want to do the subtraction of large x # TODO: make it its own option (i.e., one could want to use this without using scaler) subtract_one = use_feature_scaling @@ -547,14 +548,20 @@ def pdfNN_layer_generator( if add_logs: placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') + extract_original = None + extract_nn_input = None elif use_feature_scaling: # Note feature scaling happens before the model created here, # so the input is of the form (scaler(x), x) placeholder_input = Input(shape=(None, 2), batch_size=1, name='scaledx_x') process_input = Lambda(lambda x: 2 * x - 1, name='process_input') + extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') + extract_nn_input = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') else: placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') process_input = None + extract_original = None + extract_nn_input = None model_input = {"pdf_input": placeholder_input} @@ -567,8 +574,6 @@ def pdfNN_layer_generator( layer_x_eq_1 = op.numpy_to_input(np.array(input_x_eq_1).reshape(1, 1)) model_input["layer_x_eq_1"] = layer_x_eq_1 - extract_scaled = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') - extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') # the layer that multiplies the NN output by the prefactor apply_prefactor = Lambda(op.op_multiply, name='prefactor_times_NN') @@ -614,12 +619,9 @@ def pdfNN_layer_generator( # Since all layers are already made, they will be reused def compute_unnormalized_pdf(x, neural_network, compute_prefactor): # Preprocess the input grid - x_scaled = extract_scaled(x) - x_original = extract_original(x) - if process_input is not None: - x_processed = process_input(x_scaled) - else: - x_processed = x_scaled + x_nn_input = extract_nn_input(x) if extract_nn_input is not None else x + x_original = extract_original(x) if extract_original is not None else x + x_processed = process_input(x_nn_input) if process_input is not None else x_nn_input # Compute the neural network output nn_output = neural_network(x_processed) From 7c6d8ae340fa71e7e1c5e15c69bcc55f59cac0d8 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 22 May 2023 14:33:44 +0200 Subject: [PATCH 028/134] Fix msr with scaling --- n3fit/src/n3fit/model_gen.py | 19 +++++++++++++------ n3fit/src/n3fit/msr.py | 9 ++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 410362719f..19e841ae6f 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -609,10 +609,18 @@ def pdfNN_layer_generator( ) nn_replicas.append( generate_nn( - layer_type, inp, nodes, activations, initializer_name, - replica_seed, dropout, regularizer, regularizer_args, - last_layer_nodes, name=f"NN_{i_replica}") - ) + layer_type=layer_type, + inp=inp, + nodes=nodes, + activations=activations, + initializer_name=initializer_name, + replica_seed=replica_seed, + dropout=dropout, + regularizer=regularizer, + regularizer_args=regularizer_args, + last_layer_nodes=last_layer_nodes, + name=f"NN_{i_replica}") + ) # All layers have been made, now we need to connect them, # do this in a function so we can call it for both grids and each replica @@ -683,8 +691,7 @@ def generate_nn( # Note: using a Sequential model would be more appropriate, but it would require # creating a MetaSequential model. - input_dimensions = 2 if inp == 2 or scaler is not None else 1 - x = Input(shape=(None, input_dimensions), batch_size=1, name='xgrids_processed') + x = Input(shape=(None, inp), batch_size=1, name='xgrids_processed') pdf = x for layer in list_of_pdf_layers: pdf = layer(pdf) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index fd769ae737..bb83baaedc 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -59,6 +59,12 @@ def generate_msr_model_and_grid( # 1b If a scaler is provided, scale the input xgrid if scaler: xgrid_integration = scaler(xgrid_integration) + + # Turn into input layer. Specify a custom shape here using None, + # so shapes will display properly in the model summary + xgrid_integration = op.numpy_to_input( + xgrid_integration, name="integration_grid", custom_shape=(None, 1)) + # 1c Get the original grid x_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ")(xgrid_integration) @@ -108,8 +114,5 @@ def gen_integration_input(nx): weights.append((spacing[i] + spacing[i + 1]) / 2.0) weights_array = np.array(weights).reshape(nx, 1) - # Specify a custom shape here using None, so shapes will display properly in the model summary - xgrid = op.numpy_to_input(xgrid, name="integration_grid", custom_shape=(None, 1)) - return xgrid, weights_array From cbce1813ba3e2ec08a35eea5595125074a200915 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 22 May 2023 14:54:20 +0200 Subject: [PATCH 029/134] Fix msr with scaling, shape of integration grid --- n3fit/src/n3fit/msr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index bb83baaedc..7ea45a68f3 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -62,8 +62,9 @@ def generate_msr_model_and_grid( # Turn into input layer. Specify a custom shape here using None, # so shapes will display properly in the model summary + grid_shape = 2 if scaler is not None else 1 xgrid_integration = op.numpy_to_input( - xgrid_integration, name="integration_grid", custom_shape=(None, 1)) + xgrid_integration, name="integration_grid", custom_shape=(None, grid_shape)) # 1c Get the original grid x_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ")(xgrid_integration) From 3296aa473a8f1c32cb78ca65fcd20a18eb527085 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 22 May 2023 14:54:52 +0200 Subject: [PATCH 030/134] Set shape of x=1 input to None so tensorflow displays proper shapes --- n3fit/src/n3fit/model_gen.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 19e841ae6f..7d29a0d20f 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -571,7 +571,10 @@ def pdfNN_layer_generator( input_x_eq_1 = scaler(input_x_eq_1)[0] # the layer that subtracts 1 from the NN output subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') - layer_x_eq_1 = op.numpy_to_input(np.array(input_x_eq_1).reshape(1, 1)) + layer_x_eq_1 = op.numpy_to_input( + np.array(input_x_eq_1).reshape(1, 1), + name='x_ones', + custom_shape=(None, 1)) # Just to make shapes consistent model_input["layer_x_eq_1"] = layer_x_eq_1 From fba7827821201f3734e36b9cbfe747d11ce9c666 Mon Sep 17 00:00:00 2001 From: Aron Date: Thu, 25 May 2023 16:01:34 +0200 Subject: [PATCH 031/134] Add dummy ph_replica argument to MSR_Normalization layer --- n3fit/src/n3fit/msr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 1c42b03d53..4de24c6012 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -86,7 +86,8 @@ def generate_msr_model_and_grid( photons_c = photons.integral # 6. Compute the normalization factor - normalization_factor = MSR_Normalization(output_dim, mode, name="msr_weights", photons_contribution=photons_c)(pdf_integrated) + # For now set the photon component to None + normalization_factor = MSR_Normalization(output_dim, mode, name="msr_weights", photons_contribution=photons_c)(pdf_integrated, ph_replica=None) # 7. Apply the normalization factor to the pdf pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")([pdf_x, normalization_factor]) From 38e1984d0fd3d7f2c71545d801ab05d201442551 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 23 May 2023 13:16:37 +0200 Subject: [PATCH 032/134] Factor out scaler into own module scaler.py --- n3fit/src/n3fit/model_trainer.py | 50 ++------------------------ n3fit/src/n3fit/scaler.py | 62 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 48 deletions(-) create mode 100644 n3fit/src/n3fit/scaler.py diff --git a/n3fit/src/n3fit/model_trainer.py b/n3fit/src/n3fit/model_trainer.py index 1f1a5a4011..a9d3328966 100644 --- a/n3fit/src/n3fit/model_trainer.py +++ b/n3fit/src/n3fit/model_trainer.py @@ -13,10 +13,10 @@ import logging import numpy as np -from scipy.interpolate import PchipInterpolator from n3fit import model_gen from n3fit.backends import MetaModel, callbacks, clear_backend_state +from n3fit.scaler import generate_scaler from n3fit.backends import operations as op import n3fit.hyper_optimization.penalties import n3fit.hyper_optimization.rewards @@ -600,53 +600,7 @@ def _generate_observables( # Store a reference to the interpolator as self._scaler if interpolation_points: - input_arr = np.concatenate(self.input_list, axis=1) - input_arr = np.sort(input_arr) - input_arr_size = input_arr.size - - # Define an evenly spaced grid in the domain [0,1] - # force_set_smallest is used to make sure the smallest point included in the scaling is - # 1e-9, to prevent trouble when saving it to the LHAPDF grid - force_set_smallest = input_arr.min() > 1e-9 - if force_set_smallest: - new_xgrid = np.linspace( - start=1 / input_arr_size, stop=1.0, endpoint=False, num=input_arr_size - ) - else: - new_xgrid = np.linspace(start=0, stop=1.0, endpoint=False, num=input_arr_size) - - # When mapping the FK xgrids onto our new grid, we need to consider degeneracies among - # the x-values in the FK grids - unique, counts = np.unique(input_arr, return_counts=True) - map_to_complete = [] - for cumsum_ in np.cumsum(counts): - # Make sure to include the smallest new_xgrid value, such that we have a point at - # x<=1e-9 - map_to_complete.append(new_xgrid[cumsum_ - counts[0]]) - map_to_complete = np.array(map_to_complete) - map_from_complete = unique - - # If needed, set feature_scaling(x=1e-9)=0 - if force_set_smallest: - map_from_complete = np.insert(map_from_complete, 0, 1e-9) - map_to_complete = np.insert(map_to_complete, 0, 0.0) - - # Select the indices of the points that will be used by the interpolator - onein = map_from_complete.size / (int(interpolation_points) - 1) - selected_points = [round(i * onein - 1) for i in range(1, int(interpolation_points))] - if selected_points[0] != 0: - selected_points = [0] + selected_points - map_from = map_from_complete[selected_points] - map_from = np.log(map_from) - map_to = map_to_complete[selected_points] - - try: - scaler = PchipInterpolator(map_from, map_to) - except ValueError: - raise ValueError( - "interpolation_points is larger than the number of unique " "input x-values" - ) - self._scaler = lambda x: np.concatenate([scaler(np.log(x)), x], axis=-1) + self._scaler = generate_scaler(self.input_list, interpolation_points) def _generate_pdf( self, diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py new file mode 100644 index 0000000000..056e53745d --- /dev/null +++ b/n3fit/src/n3fit/scaler.py @@ -0,0 +1,62 @@ +from typing import Callable, List +import numpy as np +from scipy.interpolate import PchipInterpolator + + +def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = None) -> Callable: + """ + Generate the scaler function that applies feature scaling to the input data. + + Parameters + ---------- + input_list : list of numpy.ndarray + The list of input data arrays. + interpolation_points : int, optional + + Returns + ------- + _scaler : function + The scaler function that applies feature scaling to the input data. + """ + input_arr = np.concatenate(input_list, axis=1) + input_arr = np.sort(input_arr) + input_arr_size = input_arr.size + + force_set_smallest = input_arr.min() > 1e-9 + if force_set_smallest: + new_xgrid = np.linspace( + start=1 / input_arr_size, stop=1.0, endpoint=False, num=input_arr_size + ) + else: + new_xgrid = np.linspace(start=0, stop=1.0, endpoint=False, num=input_arr_size) + + unique, counts = np.unique(input_arr, return_counts=True) + map_to_complete = [] + for cumsum_ in np.cumsum(counts): + map_to_complete.append(new_xgrid[cumsum_ - counts[0]]) + map_to_complete = np.array(map_to_complete) + map_from_complete = unique + + if force_set_smallest: + map_from_complete = np.insert(map_from_complete, 0, 1e-9) + map_to_complete = np.insert(map_to_complete, 0, 0.0) + + onein = map_from_complete.size / (int(interpolation_points) - 1) + selected_points = [round(i * onein - 1) for i in range(1, int(interpolation_points))] + if selected_points[0] != 0: + selected_points = [0] + selected_points + map_from = map_from_complete[selected_points] + map_from = np.log(map_from) + map_to = map_to_complete[selected_points] + + try: + scaler = PchipInterpolator(map_from, map_to) + except ValueError: + raise ValueError( + "interpolation_points is larger than the number of unique input x-values" + ) + + _scaler = lambda x: np.concatenate([scaler(np.log(x)), x], axis=-1) + + return _scaler + From d0065df9762904f0d204cec7e1c6d7f624f5b4d9 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 23 May 2023 15:31:36 +0200 Subject: [PATCH 033/134] Do scaling of [0,1] to [-1, 1] inside scaler --- n3fit/src/n3fit/model_gen.py | 8 +++++--- n3fit/src/n3fit/scaler.py | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index e752e04f39..e10a215d33 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -568,7 +568,7 @@ def pdfNN_layer_generator( # Note feature scaling happens before the model created here, # so the input is of the form (scaler(x), x) placeholder_input = Input(shape=(None, 2), batch_size=1, name='scaledx_x') - process_input = Lambda(lambda x: 2 * x - 1, name='process_input') + process_input = None extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') extract_nn_input = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') else: @@ -591,7 +591,6 @@ def pdfNN_layer_generator( custom_shape=(None, 1)) # Just to make shapes consistent model_input["layer_x_eq_1"] = layer_x_eq_1 - # the layer that multiplies the NN output by the prefactor apply_prefactor = Lambda(op.op_multiply, name='prefactor_times_NN') @@ -654,7 +653,10 @@ def compute_unnormalized_pdf(x, neural_network, compute_prefactor): # Compute the neural network output nn_output = neural_network(x_processed) if subtract_one: - x_eq_1_processed = process_input(layer_x_eq_1) + if process_input is not None: + x_eq_1_processed = process_input(layer_x_eq_1) + else: + x_eq_1_processed = layer_x_eq_1 nn_at_one = neural_network(x_eq_1_processed) nn_output = subtract_one_layer([nn_output, nn_at_one]) diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index 056e53745d..9eac8ed575 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -56,7 +56,10 @@ def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = No "interpolation_points is larger than the number of unique input x-values" ) - _scaler = lambda x: np.concatenate([scaler(np.log(x)), x], axis=-1) + def _scaler(x): + x_scaled = scaler(np.log(x)) + x_scaled = 2 * x_scaled - 1 + return np.concatenate([x_scaled, x], axis=-1) return _scaler From 2d2f8a03939c8db0951b0c361a631bddc231510a Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 23 May 2023 15:37:17 +0200 Subject: [PATCH 034/134] Replace None layers with identity functions --- n3fit/src/n3fit/model_gen.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index e10a215d33..c24fc17f8c 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -559,23 +559,24 @@ def pdfNN_layer_generator( inp = 1 # Define the main input + do_nothing = lambda x: x if add_logs: placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') - extract_original = None - extract_nn_input = None + extract_original = do_nothing + extract_nn_input = do_nothing elif use_feature_scaling: # Note feature scaling happens before the model created here, # so the input is of the form (scaler(x), x) placeholder_input = Input(shape=(None, 2), batch_size=1, name='scaledx_x') - process_input = None + process_input = do_nothing extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') extract_nn_input = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') else: placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') - process_input = None - extract_original = None - extract_nn_input = None + process_input = do_nothing + extract_original = do_nothing + extract_nn_input = do_nothing model_input = {"pdf_input": placeholder_input} @@ -646,17 +647,14 @@ def pdfNN_layer_generator( # Since all layers are already made, they will be reused def compute_unnormalized_pdf(x, neural_network, compute_prefactor): # Preprocess the input grid - x_nn_input = extract_nn_input(x) if extract_nn_input is not None else x - x_original = extract_original(x) if extract_original is not None else x - x_processed = process_input(x_nn_input) if process_input is not None else x_nn_input + x_nn_input = extract_nn_input(x) + x_original = extract_original(x) + x_processed = process_input(x_nn_input) # Compute the neural network output nn_output = neural_network(x_processed) if subtract_one: - if process_input is not None: - x_eq_1_processed = process_input(layer_x_eq_1) - else: - x_eq_1_processed = layer_x_eq_1 + x_eq_1_processed = process_input(layer_x_eq_1) nn_at_one = neural_network(x_eq_1_processed) nn_output = subtract_one_layer([nn_output, nn_at_one]) From 08d26f2221ca63e619c9066255bbdb4842ab90b9 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 23 May 2023 16:28:54 +0200 Subject: [PATCH 035/134] Add option to save model plots (to current directory for now) --- n3fit/src/n3fit/model_trainer.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/n3fit/src/n3fit/model_trainer.py b/n3fit/src/n3fit/model_trainer.py index a9d3328966..ed8c8448f8 100644 --- a/n3fit/src/n3fit/model_trainer.py +++ b/n3fit/src/n3fit/model_trainer.py @@ -24,6 +24,8 @@ from n3fit.vpinterface import N3PDF from validphys.photon.compute import Photon +from tensorflow.keras.utils import plot_model + log = logging.getLogger(__name__) # Threshold defaults @@ -175,6 +177,7 @@ def __init__( self.max_cores = max_cores self.model_file = model_file self.print_summary = True + self.plot_model = True self.mode_hyperopt = False self.impose_sumrule = sum_rules self._hyperkeys = None @@ -252,9 +255,11 @@ def set_hyperopt(self, hyperopt_on, keys=None, status_ok="ok"): self._hyperkeys = keys if hyperopt_on: self.print_summary = False + self.plot_model = False self.mode_hyperopt = True else: self.print_summary = True + self.plot_model = True self.mode_hyperopt = False ########################################################################### @@ -472,6 +477,21 @@ def _model_generation(self, xinput, pdf_models, partition, partition_idx): if self.print_summary: training.summary() + pdf_model = training.get_layer("PDF_0") + pdf_model.summary() + nn_model = pdf_model.get_layer("NN_0") + nn_model.summary() + msr_model = pdf_model.get_layer("impose_msr") + msr_model.summary() + if self.plot_model: + log.info("Generating model plots saved in the current directory") + plot_model(training, to_file="full_model.png", show_shapes=True) + pdf_model = training.get_layer("PDF_0") + plot_model(pdf_model, to_file="pdf_model.png", show_shapes=True) + nn_model = pdf_model.get_layer("NN_0") + plot_model(nn_model, to_file="nn_model.png", show_shapes=True) + msr_model = pdf_model.get_layer("impose_msr") + plot_model(msr_model, to_file="msr_model.png", show_shapes=True) models = { "training": training, From 577d5d8bf50b60c3d23e95cacb7aca59900722d6 Mon Sep 17 00:00:00 2001 From: Aron Date: Thu, 25 May 2023 13:50:52 +0200 Subject: [PATCH 036/134] Add test for xDivide --- n3fit/src/n3fit/tests/test_xops.py | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 n3fit/src/n3fit/tests/test_xops.py diff --git a/n3fit/src/n3fit/tests/test_xops.py b/n3fit/src/n3fit/tests/test_xops.py new file mode 100644 index 0000000000..8aba9595ee --- /dev/null +++ b/n3fit/src/n3fit/tests/test_xops.py @@ -0,0 +1,33 @@ +""" + Test the x operations +""" +import numpy as np +from n3fit.layers import xDivide + + +def test_xdivide_default(): + """Check that the default xDivide works as expected""" + x_div = xDivide() + test_input = np.array([1, 2, 3], dtype=np.float32).reshape((1, 3, 1)) + test_output = x_div(test_input) + + expected_output = np.ones(shape=(1, 3, 14)) + default_indices = [3, 4, 5, 6] + for i in default_indices: + expected_output[:, :, i] = 1 / test_input[:, :, 0] + + assert np.allclose(test_output, expected_output) + +def test_xdivide_indices(): + """Check that the default xDivide works as expected""" + custom_indices = [0, 1, 7] + x_div = xDivide(div_list=custom_indices) + test_input = np.array([1, 2, 3], dtype=np.float32).reshape((1, 3, 1)) + test_output = x_div(test_input) + + expected_output = np.ones(shape=(1, 3, 14)) + for i in custom_indices: + expected_output[:, :, i] = 1 / test_input[:, :, 0] + + assert np.allclose(test_output, expected_output) + From f798c224a8f3eff53336f00d0e14380ff1423843 Mon Sep 17 00:00:00 2001 From: Aron Date: Thu, 25 May 2023 12:37:37 +0200 Subject: [PATCH 037/134] Update xDivide documentation to include v15 in the default settings, as the code already did. --- n3fit/src/n3fit/layers/x_operations.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index f3cc9c32e9..2b9a0a86a0 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -19,8 +19,8 @@ class xDivide(MetaLayer): """ Divide some PDFs by x - By default it utilizes the 14-flavour FK basis and divides [v, v3, v8] - which corresponds to indices (3,4,5) from + By default it utilizes the 14-flavour FK basis and divides [v, v3, v8, v15] + which corresponds to indices (3,4,5, 6) from (photon, sigma, g, v, v3, v8, v15, v24, v35, t3, t8, t15, t24, t35) Parameters: @@ -28,7 +28,7 @@ class xDivide(MetaLayer): output_dim: int dimension of the pdf div_list: list - list of indices to be divided by X (by default [3,4,5]; [v, v3, v8] + list of indices to be divided by X (by default [3,4,5, 6]; [v, v3, v8, v15] """ def __init__(self, output_dim=BASIS_SIZE, div_list=None, **kwargs): From 00a4974da901959c9615fe20f8eee0a335733f4f Mon Sep 17 00:00:00 2001 From: Aron Date: Thu, 25 May 2023 13:21:18 +0200 Subject: [PATCH 038/134] Simplify xDivide layer --- .../backends/keras_backend/operations.py | 18 ++++++++++++- n3fit/src/n3fit/layers/x_operations.py | 27 ++++++++++--------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index e348649481..b330f85193 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -203,7 +203,6 @@ def tensor_ones_like(*args, **kwargs): """ return K.ones_like(*args, **kwargs) - @tf.function def many_replication(grid, replications, axis=0, **kwargs): """ @@ -313,6 +312,14 @@ def tensor_product(*args, **kwargs): return tf.tensordot(*args, **kwargs) +@tf.function +def pow(tensor, power): + """ + Computes the power of the tensor + """ + return tf.pow(tensor, power) + + @tf.function(experimental_relax_shapes=True) def op_log(o_tensor, **kwargs): """ @@ -346,6 +353,15 @@ def scatter_to_one(values, indices=[[1]], output_dim=14): ones = np.ones(output_dim, dtype=np.float32) return tf.tensor_scatter_nd_update(ones, indices, values) +def scatter_to_zero(values, indices, output_dim): + """ + Like scatter_nd initialized to zero + see full `docs `_ + """ + indices = tf.constant([[i] for i in indices]) + updates = tf.constant(values) + return tf.scatter_nd(indices, updates, [output_dim]) + def op_subtract(inputs, **kwargs): """ diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index 2b9a0a86a0..b1593980c4 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -1,7 +1,7 @@ """ This module contains layers acting on the x-grid input of the NN - The three operations included are: + The two operations included are: - ``xDivide`` - ``xIntegrator`` @@ -9,6 +9,7 @@ for all flavours. The choice of flavours on which to act in a different way is given as an input argument. """ +from typing import List from n3fit.backends import MetaLayer from n3fit.backends import operations as op @@ -31,24 +32,26 @@ class xDivide(MetaLayer): list of indices to be divided by X (by default [3,4,5, 6]; [v, v3, v8, v15] """ - def __init__(self, output_dim=BASIS_SIZE, div_list=None, **kwargs): + def __init__(self, output_dim: int = BASIS_SIZE, div_list: List = None, **kwargs): if div_list is None: div_list = [3, 4, 5, 6] self.output_dim = output_dim self.div_list = div_list super().__init__(**kwargs) + # Create powers, a vector of zeros except for the indices + self.powers = op.scatter_to_zero( + indices=div_list, + values=[-1.0] * len(div_list), + output_dim=output_dim) + def call(self, x): - out_array = [] - one = op.tensor_ones_like(x) - for i in range(self.output_dim): - if i in self.div_list: - res = one / x - else: - res = one - out_array.append(res) - out_tensor = op.concatenate(out_array) - return out_tensor + return op.pow(x, self.powers) + + def get_config(self): + config = super().get_config() + config.update({"output_dim": self.output_dim, "div_list": self.div_list}) + return config class xIntegrator(MetaLayer): From 4c94100f4f2201d6e375197772f088515f615be1 Mon Sep 17 00:00:00 2001 From: Aron Date: Thu, 25 May 2023 13:32:51 +0200 Subject: [PATCH 039/134] Clarify xDivide documentation. --- n3fit/src/n3fit/layers/x_operations.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index b1593980c4..76e1d41567 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -18,7 +18,8 @@ class xDivide(MetaLayer): """ - Divide some PDFs by x + 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 From 4f3d949bf2d86de801ae3463458d1e65eea65bb9 Mon Sep 17 00:00:00 2001 From: Aron Date: Thu, 25 May 2023 16:58:28 +0200 Subject: [PATCH 040/134] Turn off plotting of model for now --- n3fit/src/n3fit/model_trainer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/model_trainer.py b/n3fit/src/n3fit/model_trainer.py index ed8c8448f8..eab6936095 100644 --- a/n3fit/src/n3fit/model_trainer.py +++ b/n3fit/src/n3fit/model_trainer.py @@ -177,7 +177,7 @@ def __init__( self.max_cores = max_cores self.model_file = model_file self.print_summary = True - self.plot_model = True + self.plot_model = False # TODO: change back to true once dependencies fixed self.mode_hyperopt = False self.impose_sumrule = sum_rules self._hyperkeys = None @@ -259,7 +259,7 @@ def set_hyperopt(self, hyperopt_on, keys=None, status_ok="ok"): self.mode_hyperopt = True else: self.print_summary = True - self.plot_model = True + self.plot_model = False # TODO: change back to true once dependencies fixed self.mode_hyperopt = False ########################################################################### From b2790681607749132033a3497cb6e9fe75c64727 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 31 May 2023 14:16:51 +0200 Subject: [PATCH 041/134] Manually change regression weights hdf5 file structure to fit new model --- .../src/n3fit/tests/regressions/weights_1.h5 | Bin 33624 -> 29064 bytes .../src/n3fit/tests/regressions/weights_2.h5 | Bin 33624 -> 29064 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/n3fit/src/n3fit/tests/regressions/weights_1.h5 b/n3fit/src/n3fit/tests/regressions/weights_1.h5 index bcc79666b09430dbd2d850aa7388427ff4e8108b..2c5b02e71eed2ab94b30aa51f0cfb9264fc4ba55 100644 GIT binary patch literal 29064 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 Q7d(PgJY4Y5)d@WQ4;SlD;{X5v literal 33624 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 nEsA`)d^Jjeh=41vmtOoI{L$9? diff --git a/n3fit/src/n3fit/tests/regressions/weights_2.h5 b/n3fit/src/n3fit/tests/regressions/weights_2.h5 index cd7b3d2d3c8609e5235e285c0c8a72c8087226e7..e5a8adea8692c6ef3fab1d8947de89455ce607ca 100644 GIT binary patch literal 29064 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 Date: Wed, 31 May 2023 15:49:02 +0200 Subject: [PATCH 042/134] Manually change developing_weights.h5 file structure to fit new model --- n3fit/runcards/examples/developing_weights.h5 | Bin 53532 -> 41420 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/n3fit/runcards/examples/developing_weights.h5 b/n3fit/runcards/examples/developing_weights.h5 index a337c5b6a4430e87f23002a0518bf7b0b7636bf0..542fca06f960ec56e2db2a210f06c3c058c1bec0 100644 GIT binary patch delta 4582 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 Date: Thu, 1 Jun 2023 10:24:45 +0200 Subject: [PATCH 043/134] Remove inp option in pdfNN_layer_generator, instead enforcing adding of logs if scaler is None. --- n3fit/src/n3fit/model_gen.py | 54 +++++++++++++++--------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index c24fc17f8c..190f352e35 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -399,7 +399,6 @@ def output_layer(ilayer): def pdfNN_layer_generator( - inp: int = 2, nodes: List[int] = None, activations: List[str] = None, initializer_name: str = "glorot_normal", @@ -479,8 +478,6 @@ def pdfNN_layer_generator( Parameters ---------- - inp: int - dimension of the xgrid. If inp=2, turns the x point into a (x, log(x)) pair nodes: list(int) list of the number of nodes per layer of the PDF NN. Default: [15,8] activation: list @@ -502,9 +499,10 @@ def pdfNN_layer_generator( 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) - scaler: scaler + 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 + When None, instead turn the x point into a (x, log(x)) pair parallel_models: int How many models should be trained in parallel photon: :py:class:`validphys.photon.compute.Photon` @@ -544,41 +542,35 @@ def pdfNN_layer_generator( # The number of nodes in the last layer is equal to the number of fitted flavours last_layer_nodes = nodes[-1] # (== len(flav_info)) - # Process input options. There are 3 options: - # 1. Do nothing - # 2. Scale the input - # 3. Concatenate log(x) to the input - # when feature scaling is on, don't add logs regardless of the input + # Process input options. There are 2 options: + # 1. Scale the input + # 2. Concatenate log(x) to the input use_feature_scaling = scaler is not None - add_logs = inp == 2 and not use_feature_scaling + add_logs = not use_feature_scaling # When scaler is active we also want to do the subtraction of large x # TODO: make it its own option (i.e., one could want to use this without using scaler) subtract_one = use_feature_scaling - if use_feature_scaling: - inp = 1 + # Feature scaling happens before the pdf model and changes x->(scaler(x), x), + # so it adds an input dimension + pdf_input_dimensions = 2 if use_feature_scaling else 1 + # Adding of logs happens inside, but before the NN and adds a dimension there + nn_input_dimensions = 1 if use_feature_scaling else 2 # Define the main input do_nothing = lambda x: x - if add_logs: - placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') - process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') - extract_original = do_nothing - extract_nn_input = do_nothing - elif use_feature_scaling: - # Note feature scaling happens before the model created here, - # so the input is of the form (scaler(x), x) - placeholder_input = Input(shape=(None, 2), batch_size=1, name='scaledx_x') + if use_feature_scaling: + pdf_input = Input(shape=(None, pdf_input_dimensions), batch_size=1, name='scaledx_x') process_input = do_nothing - extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name='x_original') extract_nn_input = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') - else: - placeholder_input = Input(shape=(None, 1), batch_size=1, name='x') - process_input = do_nothing + extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, 1, axis=-1), name='x') + else: # if add_logs + pdf_input = Input(shape=(None, pdf_input_dimensions), batch_size=1, name='x') + process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') extract_original = do_nothing extract_nn_input = do_nothing - model_input = {"pdf_input": placeholder_input} + model_input = {"pdf_input": pdf_input} if subtract_one: input_x_eq_1 = [1.0] @@ -630,7 +622,7 @@ def pdfNN_layer_generator( nn_replicas.append( generate_nn( layer_type=layer_type, - inp=inp, + input_dimensions=nn_input_dimensions, nodes=nodes, activations=activations, initializer_name=initializer_name, @@ -674,7 +666,7 @@ def compute_unnormalized_pdf(x, neural_network, compute_prefactor): # Finally compute the normalized PDFs for each replica pdf_models = [] for i_replica, (prefactor, nn) in enumerate(zip(prefactor_replicas, nn_replicas)): - pdf_unnormalized = compute_unnormalized_pdf(placeholder_input, nn, prefactor) + pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, prefactor) pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, prefactor) pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) @@ -693,7 +685,7 @@ def compute_unnormalized_pdf(x, neural_network, compute_prefactor): def generate_nn( layer_type: str, - inp: int, + input_dimensions: int, nodes: List[int], activations: List[str], initializer_name: str, @@ -707,7 +699,7 @@ def generate_nn( Create the part of the model that contains all of the actual neural network layers. """ - common_args = {'nodes_in': inp, 'nodes': nodes, 'activations': activations, 'initializer_name': initializer_name, 'seed': replica_seed} + common_args = {'nodes_in': input_dimensions, 'nodes': nodes, 'activations': activations, 'initializer_name': initializer_name, 'seed': replica_seed} if layer_type == "dense": reg = regularizer_selector(regularizer, **regularizer_args) list_of_pdf_layers = generate_dense_network(**common_args, dropout_rate=dropout, regularizer=reg) @@ -716,7 +708,7 @@ def generate_nn( # Note: using a Sequential model would be more appropriate, but it would require # creating a MetaSequential model. - x = Input(shape=(None, inp), batch_size=1, name='xgrids_processed') + x = Input(shape=(None, input_dimensions), batch_size=1, name='xgrids_processed') pdf = x for layer in list_of_pdf_layers: pdf = layer(pdf) From 38a1ccbcf1cbfa41540e6ceef13c9d96acdc117f Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 2 Jun 2023 12:54:08 +0200 Subject: [PATCH 044/134] Incorporate Juan's comments --- .../backends/keras_backend/operations.py | 7 +++++- n3fit/src/n3fit/layers/preprocessing.py | 12 +++++----- n3fit/src/n3fit/model_gen.py | 24 +++++++++---------- n3fit/src/n3fit/tests/test_xops.py | 4 ++-- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index b330f85193..3abba9cd90 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -112,7 +112,12 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation -def numpy_to_input(numpy_array, no_reshape=False, name=None, custom_shape: tuple = None): +def numpy_to_input( + numpy_array: np.ndarray, + no_reshape: bool = False, + name: str = None, + custom_shape: tuple = None, + ): """ Takes a numpy array and generates a Input layer. By default it adds a batch dimension (of size 1) so that the shape of the layer diff --git a/n3fit/src/n3fit/layers/preprocessing.py b/n3fit/src/n3fit/layers/preprocessing.py index 9ad1ca3b61..d3e3b88a32 100644 --- a/n3fit/src/n3fit/layers/preprocessing.py +++ b/n3fit/src/n3fit/layers/preprocessing.py @@ -5,11 +5,11 @@ class Preprocessing(MetaLayer): """ - Computes prefactor for the PDF. + Computes preprocessing factor for the PDF. This layer generates a factor (1-x)^beta*x^(1-alpha) where both beta and alpha - are model paramters that can be trained. If feature scaling is used, the - prefactor is x^(1-alpha). + are model paramters that can be trained. If feature scaling is used, the preprocessing + factor is x^(1-alpha). Alpha is initialized uniformly within the ranges allowed in the runcard and then it is only allowed to move between those two values (with a hard wall in each side) @@ -21,7 +21,7 @@ class Preprocessing(MetaLayer): Parameters ---------- flav_info: list - list of dicts containing the information about the fitting of the prefactor + list of dicts containing the information about the fitting of the preprocessing factor This corresponds to the `fitting::basis` parameter in the nnpdf runcard. The dicts can contain the following fields: `smallx`: range of alpha @@ -29,7 +29,7 @@ class Preprocessing(MetaLayer): `trainable`: whether these alpha-beta should be trained during the fit (defaults to true) large_x: bool - Whether large x prefactor should be active + Whether large x preprocessing factor should be active seed: int seed for the initializer of the random alpha and beta values """ @@ -43,7 +43,7 @@ def __init__( **kwargs, ): if flav_info is None: - raise ValueError("Trying to instantiate a prefactor with no basis information") + raise ValueError("Trying to instantiate a preprocessing factor with no basis information") self.flav_info = flav_info self.seed = seed self.output_dim = len(flav_info) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 190f352e35..fe5bac218a 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -9,7 +9,7 @@ """ -from typing import List +from typing import List, Callable from dataclasses import dataclass import numpy as np @@ -302,13 +302,13 @@ def observable_generator( # Network generation functions def generate_dense_network( - nodes_in, - nodes, - activations, - initializer_name="glorot_normal", - seed=0, - dropout_rate=0.0, - regularizer=None, + nodes_in: int, + nodes: int, + activations: List[str], + initializer_name: str = "glorot_normal", + seed: int = 0, + dropout_rate: float = 0.0, + regularizer: str = None, ): """ Generates a dense network @@ -404,14 +404,14 @@ def pdfNN_layer_generator( initializer_name: str = "glorot_normal", layer_type: str = "dense", flav_info: dict = None, - fitbasis="NN31IC", + fitbasis: str = "NN31IC", out: int = 14, seed: int = None, dropout: float = 0.0, - regularizer=None, - regularizer_args=None, + regularizer: str = None, + regularizer_args: dict = None, impose_sumrule: str = None, - scaler=None, + scaler: Callable = None, parallel_models: int = 1, photons=None, ): # pylint: disable=too-many-locals diff --git a/n3fit/src/n3fit/tests/test_xops.py b/n3fit/src/n3fit/tests/test_xops.py index 8aba9595ee..cfdd95fc46 100644 --- a/n3fit/src/n3fit/tests/test_xops.py +++ b/n3fit/src/n3fit/tests/test_xops.py @@ -16,7 +16,7 @@ def test_xdivide_default(): for i in default_indices: expected_output[:, :, i] = 1 / test_input[:, :, 0] - assert np.allclose(test_output, expected_output) + np.testing.assert_allclose(test_output, expected_output, rtol=1e-05) def test_xdivide_indices(): """Check that the default xDivide works as expected""" @@ -29,5 +29,5 @@ def test_xdivide_indices(): for i in custom_indices: expected_output[:, :, i] = 1 / test_input[:, :, 0] - assert np.allclose(test_output, expected_output) + np.testing.assert_allclose(test_output, expected_output, rtol=1e-05) From 789a4c32bc052492e2109840f1db6e2b9e91ca85 Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 2 Jun 2023 17:36:07 +0200 Subject: [PATCH 045/134] Incorporate Roy's comments --- n3fit/src/n3fit/layers/x_operations.py | 10 ++----- n3fit/src/n3fit/model_gen.py | 38 ++++++++++++++------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index 76e1d41567..c56a369a75 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -22,7 +22,7 @@ class xDivide(MetaLayer): 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 + which corresponds to indices (3, 4, 5, 6) from (photon, sigma, g, v, v3, v8, v15, v24, v35, t3, t8, t15, t24, t35) Parameters: @@ -30,7 +30,7 @@ class xDivide(MetaLayer): 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: List = None, **kwargs): @@ -40,11 +40,7 @@ def __init__(self, output_dim: int = BASIS_SIZE, div_list: List = None, **kwargs self.div_list = div_list super().__init__(**kwargs) - # Create powers, a vector of zeros except for the indices - self.powers = op.scatter_to_zero( - indices=div_list, - values=[-1.0] * len(div_list), - output_dim=output_dim) + self.powers = [-1 if i in div_list else 0 for i in range(output_dim)] def call(self, x): return op.pow(x, self.powers) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index fe5bac218a..13c469eadb 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -32,6 +32,8 @@ ) from n3fit.layers.observable import is_unique +from validphys.photon.compute import Photon # only used for type hint here + @dataclass class ObservableWrapper: @@ -413,14 +415,14 @@ def pdfNN_layer_generator( impose_sumrule: str = None, scaler: Callable = None, parallel_models: int = 1, - photons=None, + photons: Photon = None, ): # pylint: disable=too-many-locals """ Generates the PDF model which takes as input a point in x (from 0 to 1) and outputs a basis of 14 PDFs. It generates the preprocessing of the x into a set (x, log(x)), the arbitrary NN to fit the form of the PDF - and the prefactor. + and the preprocessing factor. The funtional form of the output of this function is of: @@ -455,7 +457,7 @@ def pdfNN_layer_generator( A function is constructed that joins all those layers. The function takes a tensor as the input and applies all layers for NN in order. - 4. Create a prefactor layer (that takes as input the same tensor x as the NN) + 4. Create a preprocessing factor layer (that takes as input the same tensor x as the NN) and multiply it to the NN. We have now: N(x)_{j} * x^{1-alpha_{j}} * (1-x)^{beta_{j}} @@ -546,7 +548,7 @@ def pdfNN_layer_generator( # 1. Scale the input # 2. Concatenate log(x) to the input use_feature_scaling = scaler is not None - add_logs = not use_feature_scaling + # When scaler is active we also want to do the subtraction of large x # TODO: make it its own option (i.e., one could want to use this without using scaler) subtract_one = use_feature_scaling @@ -564,7 +566,7 @@ def pdfNN_layer_generator( process_input = do_nothing extract_nn_input = Lambda(lambda x: op.op_gather_keep_dims(x, 0, axis=-1), name='x_scaled') extract_original = Lambda(lambda x: op.op_gather_keep_dims(x, 1, axis=-1), name='x') - else: # if add_logs + else: # add log(x) pdf_input = Input(shape=(None, pdf_input_dimensions), batch_size=1, name='x') process_input = Lambda(lambda x: op.concatenate([x, op.op_log(x)], axis=-1), name='x_logx') extract_original = do_nothing @@ -584,8 +586,8 @@ def pdfNN_layer_generator( custom_shape=(None, 1)) # Just to make shapes consistent model_input["layer_x_eq_1"] = layer_x_eq_1 - # the layer that multiplies the NN output by the prefactor - apply_prefactor = Lambda(op.op_multiply, name='prefactor_times_NN') + # the layer that multiplies the NN output by the preprocessing factor + apply_preprocessing_factor = Lambda(op.op_multiply, name='prefactor_times_NN') # Photon layer layer_photon = AddPhoton(photons=photons, name="add_photon") @@ -608,9 +610,9 @@ def pdfNN_layer_generator( # Only these layers change from replica to replica: nn_replicas = [] - prefactor_replicas = [] + preprocessing_factor_replicas = [] for i_replica, replica_seed in enumerate(seed): - prefactor_replicas.append( + preprocessing_factor_replicas.append( Preprocessing( flav_info=flav_info, input_shape=(1,), @@ -637,7 +639,7 @@ def pdfNN_layer_generator( # All layers have been made, now we need to connect them, # do this in a function so we can call it for both grids and each replica # Since all layers are already made, they will be reused - def compute_unnormalized_pdf(x, neural_network, compute_prefactor): + def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): # Preprocess the input grid x_nn_input = extract_nn_input(x) x_original = extract_original(x) @@ -650,9 +652,9 @@ def compute_unnormalized_pdf(x, neural_network, compute_prefactor): nn_at_one = neural_network(x_eq_1_processed) nn_output = subtract_one_layer([nn_output, nn_at_one]) - # Compute the preprocessing prefactor and multiply - prefactor = compute_prefactor(x_original) - pref_nn = apply_prefactor([nn_output, prefactor]) + # Compute the preprocessing factor and multiply + preprocessing_factor = compute_preprocessing_factor(x_original) + pref_nn = apply_preprocessing_factor([nn_output, preprocessing_factor]) # Apply basis rotation if needed if not basis_rotation.is_identity(): @@ -665,12 +667,14 @@ def compute_unnormalized_pdf(x, neural_network, compute_prefactor): # Finally compute the normalized PDFs for each replica pdf_models = [] - for i_replica, (prefactor, nn) in enumerate(zip(prefactor_replicas, nn_replicas)): - pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, prefactor) - pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, prefactor) + for i_replica, (preprocessing_factor, nn) in \ + enumerate(zip(preprocessing_factor_replicas, nn_replicas)): + pdf_unnormalized = compute_unnormalized_pdf( + pdf_input, nn, preprocessing_factor) + pdf_integration_grid = compute_unnormalized_pdf( + integrator_input, nn, preprocessing_factor) pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) - # Final PDF (apply normalization) if photons: pdf_normalized = layer_photon(pdf_normalized, i_replica) From fe84657e10a0e9b8128ac96bf99f836253fbcbf3 Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 5 Jun 2023 09:05:52 +0200 Subject: [PATCH 046/134] Remove plotting of model from model_trainer --- n3fit/src/n3fit/model_trainer.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/n3fit/src/n3fit/model_trainer.py b/n3fit/src/n3fit/model_trainer.py index eab6936095..974dd18b16 100644 --- a/n3fit/src/n3fit/model_trainer.py +++ b/n3fit/src/n3fit/model_trainer.py @@ -24,8 +24,6 @@ from n3fit.vpinterface import N3PDF from validphys.photon.compute import Photon -from tensorflow.keras.utils import plot_model - log = logging.getLogger(__name__) # Threshold defaults @@ -177,7 +175,6 @@ def __init__( self.max_cores = max_cores self.model_file = model_file self.print_summary = True - self.plot_model = False # TODO: change back to true once dependencies fixed self.mode_hyperopt = False self.impose_sumrule = sum_rules self._hyperkeys = None @@ -255,11 +252,9 @@ def set_hyperopt(self, hyperopt_on, keys=None, status_ok="ok"): self._hyperkeys = keys if hyperopt_on: self.print_summary = False - self.plot_model = False self.mode_hyperopt = True else: self.print_summary = True - self.plot_model = False # TODO: change back to true once dependencies fixed self.mode_hyperopt = False ########################################################################### @@ -483,15 +478,6 @@ def _model_generation(self, xinput, pdf_models, partition, partition_idx): nn_model.summary() msr_model = pdf_model.get_layer("impose_msr") msr_model.summary() - if self.plot_model: - log.info("Generating model plots saved in the current directory") - plot_model(training, to_file="full_model.png", show_shapes=True) - pdf_model = training.get_layer("PDF_0") - plot_model(pdf_model, to_file="pdf_model.png", show_shapes=True) - nn_model = pdf_model.get_layer("NN_0") - plot_model(nn_model, to_file="nn_model.png", show_shapes=True) - msr_model = pdf_model.get_layer("impose_msr") - plot_model(msr_model, to_file="msr_model.png", show_shapes=True) models = { "training": training, From 1f4537edb13c2acbb1e82d412f097bd4dcd59f9b Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 5 Jun 2023 09:29:26 +0200 Subject: [PATCH 047/134] Remove unnecessary get_original layer from msr if scaler is not used --- n3fit/src/n3fit/msr.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 4de24c6012..14222f5195 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -69,7 +69,11 @@ def generate_msr_model_and_grid( xgrid_integration, name="integration_grid", custom_shape=(None, grid_shape)) # 1c Get the original grid - x_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ")(xgrid_integration) + if scaler: + get_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ") + else: + get_original = lambda x: x + x_original = get_original(xgrid_integration) # 2. Divide the grid by x depending on the flavour x_divided = xDivide()(x_original) From 6353db3862476dea21155095a92acd4586d6762d Mon Sep 17 00:00:00 2001 From: Aron Date: Mon, 5 Jun 2023 10:04:11 +0200 Subject: [PATCH 048/134] Add model plot example script to documentation. --- doc/sphinx/source/n3fit/figures/plot_pdf.png | Bin 0 -> 89400 bytes doc/sphinx/source/n3fit/methodology.rst | 49 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 doc/sphinx/source/n3fit/figures/plot_pdf.png diff --git a/doc/sphinx/source/n3fit/figures/plot_pdf.png b/doc/sphinx/source/n3fit/figures/plot_pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..59d086a1392ec1c903468f8f416eadc2ded5764e GIT binary patch literal 89400 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%0A_;c=GI-I@$_~kHcqe!R(ud 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 Date: Mon, 5 Jun 2023 15:20:17 +0200 Subject: [PATCH 049/134] Apply black to all changed files. --- .../backends/keras_backend/operations.py | 27 +++--- n3fit/src/n3fit/layers/preprocessing.py | 4 +- n3fit/src/n3fit/model_gen.py | 89 +++++++++++-------- n3fit/src/n3fit/msr.py | 31 ++++--- n3fit/src/n3fit/scaler.py | 5 +- n3fit/src/n3fit/tests/test_xops.py | 2 +- 6 files changed, 89 insertions(+), 69 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 3abba9cd90..ff3d1a0248 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -36,7 +36,7 @@ def evaluate(tensor): - """ Evaluate input tensor using the backend """ + """Evaluate input tensor using the backend""" return K.eval(tensor) @@ -107,17 +107,17 @@ def numpy_to_tensor(ival, **kwargs): # f(x: tensor) -> y: tensor def batchit(x, batch_dimension=0, **kwarg): - """ Add a batch dimension to tensor x """ + """Add a batch dimension to tensor x""" return tf.expand_dims(x, batch_dimension, **kwarg) # layer generation def numpy_to_input( - numpy_array: np.ndarray, - no_reshape: bool = False, - name: str = None, - custom_shape: tuple = None, - ): + numpy_array: np.ndarray, + no_reshape: bool = False, + name: str = None, + custom_shape: tuple = None, +): """ Takes a numpy array and generates a Input layer. By default it adds a batch dimension (of size 1) so that the shape of the layer @@ -183,7 +183,7 @@ def op_gather_keep_dims(tensor, indices, axis=0, **kwargs): both eager and non-eager tensors """ if indices == -1: - indices = tensor.shape[axis]-1 + indices = tensor.shape[axis] - 1 def tmp(x): y = tf.gather(x, indices, axis=axis, **kwargs) @@ -198,6 +198,7 @@ def tmp(x): # f(x: tensor[s]) -> y: tensor # + # Generation operations # generate tensors of given shape/content @tf.function @@ -208,6 +209,7 @@ def tensor_ones_like(*args, **kwargs): """ return K.ones_like(*args, **kwargs) + @tf.function def many_replication(grid, replications, axis=0, **kwargs): """ @@ -224,7 +226,7 @@ def many_replication(grid, replications, axis=0, **kwargs): # modify properties of the tensor like the shape or elements it has @tf.function def flatten(x): - """ Flatten tensor x """ + """Flatten tensor x""" return tf.reshape(x, (-1,)) @@ -248,7 +250,7 @@ def transpose(tensor, **kwargs): def stack(tensor_list, axis=0, **kwargs): - """ Stack a list of tensors + """Stack a list of tensors see full `docs `_ """ return tf.stack(tensor_list, axis=axis, **kwargs) @@ -288,8 +290,8 @@ def pdf_masked_convolution(raw_pdf, basis_mask): pdf_x_pdf: tf.tensor rank3 (len(mask_true), xgrid, xgrid, replicas) """ - if raw_pdf.shape[-1] == 1: # only one replica! - pdf = tf.squeeze(raw_pdf, axis=(0,-1)) + if raw_pdf.shape[-1] == 1: # only one replica! + pdf = tf.squeeze(raw_pdf, axis=(0, -1)) luminosity = tensor_product(pdf, pdf, axes=0) lumi_tmp = K.permute_dimensions(luminosity, (3, 1, 2, 0)) pdf_x_pdf = batchit(boolean_mask(lumi_tmp, basis_mask), -1) @@ -358,6 +360,7 @@ def scatter_to_one(values, indices=[[1]], output_dim=14): ones = np.ones(output_dim, dtype=np.float32) return tf.tensor_scatter_nd_update(ones, indices, values) + def scatter_to_zero(values, indices, output_dim): """ Like scatter_nd initialized to zero diff --git a/n3fit/src/n3fit/layers/preprocessing.py b/n3fit/src/n3fit/layers/preprocessing.py index d3e3b88a32..3aefbadaec 100644 --- a/n3fit/src/n3fit/layers/preprocessing.py +++ b/n3fit/src/n3fit/layers/preprocessing.py @@ -43,7 +43,9 @@ def __init__( **kwargs, ): if flav_info is None: - raise ValueError("Trying to instantiate a preprocessing factor with no basis information") + raise ValueError( + "Trying to instantiate a preprocessing factor with no basis information" + ) self.flav_info = flav_info self.seed = seed self.output_dim = len(flav_info) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 13c469eadb..33d6ec4e58 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -360,7 +360,6 @@ def generate_dense_per_flavour_network( number_of_layers = len(nodes) current_seed = seed for i, (nodes_out, activation) in enumerate(zip(nodes, activations)): - initializers = [] for _ in range(basis_size): # select the initializer and move the seed @@ -581,9 +580,8 @@ def pdfNN_layer_generator( # the layer that subtracts 1 from the NN output subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') layer_x_eq_1 = op.numpy_to_input( - np.array(input_x_eq_1).reshape(1, 1), - name='x_ones', - custom_shape=(None, 1)) # Just to make shapes consistent + np.array(input_x_eq_1).reshape(1, 1), name='x_ones', custom_shape=(None, 1) + ) # Just to make shapes consistent model_input["layer_x_eq_1"] = layer_x_eq_1 # the layer that multiplies the NN output by the preprocessing factor @@ -593,14 +591,18 @@ def pdfNN_layer_generator( layer_photon = AddPhoton(photons=photons, name="add_photon") # Basis rotation - basis_rotation = FlavourToEvolution(flav_info=flav_info, fitbasis=fitbasis, name="pdf_evolution_basis") + basis_rotation = FlavourToEvolution( + flav_info=flav_info, fitbasis=fitbasis, name="pdf_evolution_basis" + ) # Evolution layer layer_evln = FkRotation(input_shape=(last_layer_nodes,), output_dim=out, name="pdf_FK_basis") # Normalization and sum rules if impose_sumrule: - sumrule_layer, integrator_input = generate_msr_model_and_grid(mode=impose_sumrule, scaler=scaler, photons=photons) + sumrule_layer, integrator_input = generate_msr_model_and_grid( + mode=impose_sumrule, scaler=scaler, photons=photons + ) model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x @@ -623,18 +625,19 @@ def pdfNN_layer_generator( ) nn_replicas.append( generate_nn( - layer_type=layer_type, - input_dimensions=nn_input_dimensions, - nodes=nodes, - activations=activations, - initializer_name=initializer_name, - replica_seed=replica_seed, - dropout=dropout, - regularizer=regularizer, - regularizer_args=regularizer_args, - last_layer_nodes=last_layer_nodes, - name=f"NN_{i_replica}") + layer_type=layer_type, + input_dimensions=nn_input_dimensions, + nodes=nodes, + activations=activations, + initializer_name=initializer_name, + replica_seed=replica_seed, + dropout=dropout, + regularizer=regularizer, + regularizer_args=regularizer_args, + last_layer_nodes=last_layer_nodes, + name=f"NN_{i_replica}", ) + ) # All layers have been made, now we need to connect them, # do this in a function so we can call it for both grids and each replica @@ -667,12 +670,11 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): # Finally compute the normalized PDFs for each replica pdf_models = [] - for i_replica, (preprocessing_factor, nn) in \ - enumerate(zip(preprocessing_factor_replicas, nn_replicas)): - pdf_unnormalized = compute_unnormalized_pdf( - pdf_input, nn, preprocessing_factor) - pdf_integration_grid = compute_unnormalized_pdf( - integrator_input, nn, preprocessing_factor) + for i_replica, (preprocessing_factor, nn) in enumerate( + zip(preprocessing_factor_replicas, nn_replicas) + ): + pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, preprocessing_factor) + pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, preprocessing_factor) pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) @@ -687,28 +689,40 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): return pdf_models + def generate_nn( - layer_type: str, - input_dimensions: int, - nodes: List[int], - activations: List[str], - initializer_name: str, - replica_seed: int, - dropout: float, - regularizer: str, - regularizer_args: dict, - last_layer_nodes: int, - name: str) -> MetaModel: + layer_type: str, + input_dimensions: int, + nodes: List[int], + activations: List[str], + initializer_name: str, + replica_seed: int, + dropout: float, + regularizer: str, + regularizer_args: dict, + last_layer_nodes: int, + name: str, +) -> MetaModel: """ Create the part of the model that contains all of the actual neural network layers. """ - common_args = {'nodes_in': input_dimensions, 'nodes': nodes, 'activations': activations, 'initializer_name': initializer_name, 'seed': replica_seed} + common_args = { + 'nodes_in': input_dimensions, + 'nodes': nodes, + 'activations': activations, + 'initializer_name': initializer_name, + 'seed': replica_seed, + } if layer_type == "dense": reg = regularizer_selector(regularizer, **regularizer_args) - list_of_pdf_layers = generate_dense_network(**common_args, dropout_rate=dropout, regularizer=reg) + list_of_pdf_layers = generate_dense_network( + **common_args, dropout_rate=dropout, regularizer=reg + ) elif layer_type == "dense_per_flavour": - list_of_pdf_layers = generate_dense_per_flavour_network(**common_args, basis_size=last_layer_nodes) + list_of_pdf_layers = generate_dense_per_flavour_network( + **common_args, basis_size=last_layer_nodes + ) # Note: using a Sequential model would be more appropriate, but it would require # creating a MetaSequential model. @@ -719,4 +733,3 @@ def generate_nn( model = MetaModel({'NN_input': x}, pdf, name=name) return model - diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 14222f5195..1ad8ce49ac 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -13,12 +13,8 @@ def generate_msr_model_and_grid( - output_dim: int = 14, - mode: str = "ALL", - nx: int = int(2e3), - scaler=None, - photons=None, - **kwargs) -> MetaModel: + output_dim: int = 14, mode: str = "ALL", nx: int = int(2e3), scaler=None, photons=None, **kwargs +) -> MetaModel: """ Generates a model that applies the sum rules to the PDF. @@ -54,7 +50,9 @@ def generate_msr_model_and_grid( """ # 0. Prepare input layers to MSR model pdf_x = Input(shape=(None, output_dim), batch_size=1, name="pdf_x") - pdf_xgrid_integration = Input(shape=(nx, output_dim), batch_size=1, name="pdf_xgrid_integration") + pdf_xgrid_integration = Input( + shape=(nx, output_dim), batch_size=1, name="pdf_xgrid_integration" + ) # 1. Generate the grid and weights that will be used to integrate xgrid_integration, weights_array = gen_integration_input(nx) @@ -66,11 +64,14 @@ def generate_msr_model_and_grid( # so shapes will display properly in the model summary grid_shape = 2 if scaler is not None else 1 xgrid_integration = op.numpy_to_input( - xgrid_integration, name="integration_grid", custom_shape=(None, grid_shape)) + xgrid_integration, name="integration_grid", custom_shape=(None, grid_shape) + ) # 1c Get the original grid if scaler: - get_original = Lambda(lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ") + get_original = Lambda( + lambda x: op.op_gather_keep_dims(x, -1, axis=-1), name="x_original_integ" + ) else: get_original = lambda x: x x_original = get_original(xgrid_integration) @@ -91,20 +92,25 @@ def generate_msr_model_and_grid( # 6. Compute the normalization factor # For now set the photon component to None - normalization_factor = MSR_Normalization(output_dim, mode, name="msr_weights", photons_contribution=photons_c)(pdf_integrated, ph_replica=None) + normalization_factor = MSR_Normalization( + output_dim, mode, name="msr_weights", photons_contribution=photons_c + )(pdf_integrated, ph_replica=None) # 7. Apply the normalization factor to the pdf - pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")([pdf_x, normalization_factor]) + pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")( + [pdf_x, normalization_factor] + ) inputs = { "pdf_x": pdf_x, "pdf_xgrid_integration": pdf_xgrid_integration, "xgrid_integration": xgrid_integration, - } + } model = MetaModel(inputs, pdf_normalized, name="impose_msr") return model, xgrid_integration + def gen_integration_input(nx): """ Generates a np.array (shaped (nx,1)) of nx elements where the @@ -128,4 +134,3 @@ def gen_integration_input(nx): weights_array = np.array(weights).reshape(nx, 1) return xgrid, weights_array - diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index 9eac8ed575..b8434a5759 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -52,9 +52,7 @@ def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = No try: scaler = PchipInterpolator(map_from, map_to) except ValueError: - raise ValueError( - "interpolation_points is larger than the number of unique input x-values" - ) + raise ValueError("interpolation_points is larger than the number of unique input x-values") def _scaler(x): x_scaled = scaler(np.log(x)) @@ -62,4 +60,3 @@ def _scaler(x): return np.concatenate([x_scaled, x], axis=-1) return _scaler - diff --git a/n3fit/src/n3fit/tests/test_xops.py b/n3fit/src/n3fit/tests/test_xops.py index cfdd95fc46..8aa2248c91 100644 --- a/n3fit/src/n3fit/tests/test_xops.py +++ b/n3fit/src/n3fit/tests/test_xops.py @@ -18,6 +18,7 @@ def test_xdivide_default(): np.testing.assert_allclose(test_output, expected_output, rtol=1e-05) + def test_xdivide_indices(): """Check that the default xDivide works as expected""" custom_indices = [0, 1, 7] @@ -30,4 +31,3 @@ def test_xdivide_indices(): expected_output[:, :, i] = 1 / test_input[:, :, 0] np.testing.assert_allclose(test_output, expected_output, rtol=1e-05) - From 801366ad65ee0f82a132107f8aa5abee807f59e5 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 7 Jun 2023 11:41:26 +0200 Subject: [PATCH 050/134] Remove sentence about plotting full model. --- doc/sphinx/source/n3fit/methodology.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx/source/n3fit/methodology.rst b/doc/sphinx/source/n3fit/methodology.rst index 3851bdd16f..78562f323f 100644 --- a/doc/sphinx/source/n3fit/methodology.rst +++ b/doc/sphinx/source/n3fit/methodology.rst @@ -169,7 +169,7 @@ To see the structure of the model, one can use Keras's ``plot_model`` function a This will produce for instance the plot of the PDF model below, and can also be used to plot the -neural network model, the momentum sum rule model, and the model containing everything that is illustrated above. +neural network model, and the momentum sum rule model. .. image:: figures/plot_pdf.png From 78c31b42b6c4ee4c1ee7f324b20649db5c44f983 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 9 Jun 2023 11:37:00 +0200 Subject: [PATCH 051/134] add nf=3 option --- n3fit/src/evolven3fit_new/eko_utils.py | 40 +++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/n3fit/src/evolven3fit_new/eko_utils.py b/n3fit/src/evolven3fit_new/eko_utils.py index 7b6be83110..267cdb3769 100644 --- a/n3fit/src/evolven3fit_new/eko_utils.py +++ b/n3fit/src/evolven3fit_new/eko_utils.py @@ -30,7 +30,6 @@ } NFREF_DEFAULT = 5 -NF0_DEFAULT = 4 def construct_eko_cards( @@ -58,31 +57,46 @@ def construct_eko_cards( theory = Loader().check_theoryID(theoryID).get_description() theory.pop("FNS") theory.update(theory_card_dict) - if "nfref" not in theory: - theory["nfref"] = NFREF_DEFAULT - if "nf0" not in theory: - theory["nf0"] = NF0_DEFAULT - + # Prepare the thresholds according to MaxNfPdf thresholds = {"c": theory["kcThr"], "b": theory["kbThr"], "t": theory["ktThr"]} if theory["MaxNfPdf"] < 5: thresholds["b"] = np.inf if theory["MaxNfPdf"] < 6: thresholds["t"] = np.inf - + + if "nfref" not in theory: + theory["nfref"] = NFREF_DEFAULT + + # Set nf_0 according to the fitting scale unless set explicitly + mu0 = theory["Q0"] + if "nf0" not in theory: + if mu0 < theory["mc"] * thresholds["c"]: + theory["nf0"] = 3 + elif mu0 < theory["mb"] * thresholds["b"]: + theory["nf0"] = 4 + elif mu0 < theory["mt"] * thresholds["t"]: + theory["nf0"] = 5 + else: + theory["nf0"] = 6 + # Setting the thresholds in the theory card to inf if necessary - theory.update({"kbThr":thresholds["b"], "ktThr":thresholds["t"] }) - + theory.update({"kbThr": thresholds["b"], "ktThr": thresholds["t"]}) + # The Legacy function is able to construct a theory card for eko starting from an NNPDF theory legacy_class = runcards.Legacy(theory, {}) theory_card = legacy_class.new_theory # construct operator card q2_grid = utils.generate_q2grid( - theory["Q0"], + mu0, q_fin, q_points, - {theory["mb"]: thresholds["b"], theory["mt"]: thresholds["t"]}, + { + theory["mc"]: thresholds["c"], + theory["mb"]: thresholds["b"], + theory["mt"]: thresholds["t"], + }, ) op_card = default_op_card masses = np.array([theory["mc"], theory["mb"], theory["mt"]]) ** 2 @@ -90,11 +104,11 @@ def construct_eko_cards( atlas = Atlas( matching_scales=MatchingScales(masses * thresholds_ratios), - origin=(theory["Q0"] ** 2, theory["nf0"]), + origin=(mu0**2, theory["nf0"]), ) op_card.update( { - "mu0": theory["Q0"], + "mu0": mu0, "mugrid": [(float(np.sqrt(q2)), int(nf_default(q2, atlas))) for q2 in q2_grid], } ) From fe60a687881bc7a3f70a4aaa280bab673b5b4206 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 9 Jun 2023 11:38:49 +0200 Subject: [PATCH 052/134] load only .exportgrid files corresponding to the fit --- n3fit/src/evolven3fit_new/evolve.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/n3fit/src/evolven3fit_new/evolve.py b/n3fit/src/evolven3fit_new/evolve.py index cddb1eb308..8cf5e28cc6 100644 --- a/n3fit/src/evolven3fit_new/evolve.py +++ b/n3fit/src/evolven3fit_new/evolve.py @@ -145,7 +145,7 @@ def load_fit(usr_path): """ nnfitpath = usr_path / "nnfit" pdf_dict = {} - for yaml_file in nnfitpath.glob("replica_*/*.exportgrid"): + for yaml_file in nnfitpath.glob(f"replica_*/{usr_path.name}.exportgrid"): data = yaml.safe_load(yaml_file.read_text(encoding="UTF-8")) pdf_dict[yaml_file.parent.stem] = data return pdf_dict From 135862ea1235d18c2d28ea59f9a146bc1bf4fe5e Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 9 Jun 2023 17:21:58 +0200 Subject: [PATCH 053/134] create a separate Q,nf entry when crossing a threshold --- n3fit/src/evolven3fit_new/eko_utils.py | 29 +++++++++++++++++++------- n3fit/src/evolven3fit_new/utils.py | 1 - 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/n3fit/src/evolven3fit_new/eko_utils.py b/n3fit/src/evolven3fit_new/eko_utils.py index 267cdb3769..82265698f8 100644 --- a/n3fit/src/evolven3fit_new/eko_utils.py +++ b/n3fit/src/evolven3fit_new/eko_utils.py @@ -106,12 +106,25 @@ def construct_eko_cards( matching_scales=MatchingScales(masses * thresholds_ratios), origin=(mu0**2, theory["nf0"]), ) - op_card.update( - { - "mu0": mu0, - "mugrid": [(float(np.sqrt(q2)), int(nf_default(q2, atlas))) for q2 in q2_grid], - } - ) + + # Create the eko operator q2grid + # This is a grid which contains information on (q, nf) + # in VFNS values at the matching scales need to be doubled so that they are considered in both sides + + ep = 1e-4 + mugrid = [] + for q2 in q2_grid: + q = float(np.sqrt(q2)) + if nf_default(q2 + ep, atlas) != nf_default(q2 - ep, atlas): + nf_l = int(nf_default(q2 - ep, atlas)) + nf_u = int(nf_default(q2 + ep, atlas)) + mugrid.append((q, nf_l)) + mugrid.append((q, nf_u)) + else: + mugrid.append((q, int(nf_default(q2, atlas)))) + + op_card.update({"mu0": theory["Q0"], "mugrid": mugrid}) + op_card["xgrid"] = x_grid # Specific defaults for evolven3fit evolution if theory["ModEv"] == "TRN": @@ -133,7 +146,7 @@ def construct_eko_cards( def split_evolgrid(evolgrid): - """Split the evolgrid in blocks according to the number of flavors and repeating the last entry of one block in the first entry of the next.""" + """Split the evolgrid in blocks according to the number of flavors.""" evolgrid_index_list = [] evolgrid.sort() starting_nf = evolgrid[0][1] @@ -145,7 +158,7 @@ def split_evolgrid(evolgrid): start_index = 0 evolgrid_list = [] for index in evolgrid_index_list: - evolgrid_list.append(evolgrid[start_index : index + 1]) + evolgrid_list.append(evolgrid[start_index:index]) start_index = index evolgrid_list.append(evolgrid[start_index:]) return evolgrid_list diff --git a/n3fit/src/evolven3fit_new/utils.py b/n3fit/src/evolven3fit_new/utils.py index f1303fcbd7..f6abcfea7d 100644 --- a/n3fit/src/evolven3fit_new/utils.py +++ b/n3fit/src/evolven3fit_new/utils.py @@ -22,7 +22,6 @@ 3.8800751e00, 4.3584516e00, 4.9200000e00, - 4.9200000e00, 5.5493622e00, 6.2897452e00, 7.1650687e00, From d63bda0eed068daf2dd4f5014f721ae336ab7161 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 9 Jun 2023 18:45:17 +0200 Subject: [PATCH 054/134] add a default q0 grid for nf0=3 and associated tests --- n3fit/src/evolven3fit_new/eko_utils.py | 1 + n3fit/src/evolven3fit_new/utils.py | 73 +++++++++++++++++++++-- n3fit/src/n3fit/tests/test_evolven3fit.py | 56 ++++++++++------- 3 files changed, 106 insertions(+), 24 deletions(-) diff --git a/n3fit/src/evolven3fit_new/eko_utils.py b/n3fit/src/evolven3fit_new/eko_utils.py index 82265698f8..7eabc1b009 100644 --- a/n3fit/src/evolven3fit_new/eko_utils.py +++ b/n3fit/src/evolven3fit_new/eko_utils.py @@ -97,6 +97,7 @@ def construct_eko_cards( theory["mb"]: thresholds["b"], theory["mt"]: thresholds["t"], }, + theory["nf0"], ) op_card = default_op_card masses = np.array([theory["mc"], theory["mb"], theory["mt"]]) ** 2 diff --git a/n3fit/src/evolven3fit_new/utils.py b/n3fit/src/evolven3fit_new/utils.py index f6abcfea7d..4df9274459 100644 --- a/n3fit/src/evolven3fit_new/utils.py +++ b/n3fit/src/evolven3fit_new/utils.py @@ -7,7 +7,7 @@ from reportengine.compat import yaml from validphys.pdfbases import PIDS_DICT -DEFAULT_Q2GRID = ( +Q2GRID_Nf04 = ( np.array( [ 1.6500000e00, @@ -64,6 +64,62 @@ ** 2 ) +Q2GRID_Nf03 = ( + np.array( + [ + 1.0000000e00, + 1.0768843e00, + 1.1642787e00, + 1.2640247e00, + 1.3783565e00, + 1.5100000e00, + 1.6573843e00, + 1.8279487e00, + 2.0263188e00, + 2.2582323e00, + 2.5308507e00, + 2.8531703e00, + 3.2365690e00, + 3.6955380e00, + 4.2486693e00, + 4.9200000e00, + 5.6571821e00, + 6.5475141e00, + 7.6300446e00, + 8.9555329e00, + 1.0590474e01, + 1.2622686e01, + 1.5169120e01, + 1.8386905e01, + 2.2489085e01, + 2.7767274e01, + 3.4624624e01, + 4.3624282e01, + 5.5561424e01, + 7.1571582e01, + 9.3295496e01, + 1.2313315e02, + 1.6464038e02, + 2.2315640e02, + 3.0681103e02, + 4.2816505e02, + 6.0692308e02, + 8.7449251e02, + 1.2817733e03, + 1.9127020e03, + 2.9082314e03, + 4.5095982e03, + 7.1379509e03, + 1.1543948e04, + 1.9094934e04, + 3.2338760e04, + 5.6137084e04, + 1.0000000e05, + ] + ) + ** 2 +) + class LhapdfLike: """ @@ -122,7 +178,7 @@ def get_theoryID_from_runcard(usr_path): return my_runcard["theory"]["theoryid"] -def generate_q2grid(Q0, Qfin, Q_points, match_dict): +def generate_q2grid(Q0, Qfin, Q_points, match_dict, nf0=None): """Generate the q2grid used in the final evolved pdfs or use the default grid if Qfin or Q_points is not provided. @@ -130,7 +186,14 @@ def generate_q2grid(Q0, Qfin, Q_points, match_dict): in order to obtain the relative matching scale. """ if Qfin is None and Q_points is None: - return DEFAULT_Q2GRID + if nf0 == 4: + return Q2GRID_Nf04 + elif nf0 == 3: + return Q2GRID_Nf03 + elif nf0 is None: + raise ValueError("In order to use a default grid, a value of nf0 must be provided") + else: + raise NotImplementedError(f"No default grid in Q available for {nf0=}") elif Qfin is None or Q_points is None: raise ValueError("q_fin and q_points must be specified either both or none of them") else: @@ -147,7 +210,9 @@ def generate_q2grid(Q0, Qfin, Q_points, match_dict): frac_of_point = np.log(match_scale / Q_ini) / np.log(Qfin / Q0) num_points = int(Q_points * frac_of_point) num_points_list.append(num_points) - grids.append(np.geomspace(Q_ini**2, match_scale**2, num=num_points)) + grids.append( + np.geomspace(Q_ini**2, match_scale**2, num=num_points, endpoint=False) + ) Q_ini = match_scale num_points = Q_points - sum(num_points_list) grids.append(np.geomspace(Q_ini**2, Qfin**2, num=num_points)) diff --git a/n3fit/src/n3fit/tests/test_evolven3fit.py b/n3fit/src/n3fit/tests/test_evolven3fit.py index 1796095df1..8cab0b4927 100644 --- a/n3fit/src/n3fit/tests/test_evolven3fit.py +++ b/n3fit/src/n3fit/tests/test_evolven3fit.py @@ -23,11 +23,6 @@ def assert_sorted(arr, title): raise ValueError(f"The values of {title} are not sorted!") -def check_consecutive_members(grid, value): - """Check if the first occurrence of value in grid is followed by value again""" - return np.allclose(grid[list(grid).index(value) + 1], value) - - def check_lhapdf_info(info_path): """Check the LHAPDF info file is correct""" info = yaml.load(info_path.open("r", encoding="utf-8")) @@ -77,24 +72,40 @@ def check_lhapdf_dat(dat_path, info): # Use allclose here to avoid failing because of a different in the 7th place np.testing.assert_allclose(q[-1], info["QMax"]) + +def test_generate_q2grid(): + """Tests the creation of the default grids for different values of nf + and whether the matched grid is generating points in the desired locations + """ + # nf 3, q0 = 1.0 + grid = utils.generate_q2grid(None, None, None, {}, 3) + assert grid[0] == 1.0**2 + # nf 4, q0 = 1.65 + grid = utils.generate_q2grid(None, None, None, {}, 4) + assert grid[0] == 1.65**2 + + for nf in [1, 2, 5, 6]: + with pytest.raises(NotImplementedError): + grid = utils.generate_q2grid(None, None, None, {}, nf) + + with pytest.raises(ValueError): + grid = utils.generate_q2grid(None, None, None, {}) -def test_utils(): - # Testing the default grid - grid = utils.generate_q2grid(1.65, None, None, {}) - assert_allclose(1.65**2, grid[0]) - assert len(grid) == 50 - # We expect the bottom mass to be repeated twice because it is intended once in 4 flavors and once in 5 flavors. - assert check_consecutive_members(grid, 4.92**2) - # Testing if the points of the matching are correctly repeated twice matched_grid = utils.generate_q2grid(1.65, 1.0e5, 100, {4.92: 2.0, 100: 1.0}) - assert len(matched_grid) == 100 + t1 = 4.92 * 2.0 + t2 = 100.0 * 1.0 + + assert_allclose((1.65) ** 2, matched_grid[0]) assert_allclose((1.0e5) ** 2, matched_grid[-1]) - assert check_consecutive_members(matched_grid, (4.92 * 2.0) ** 2) - assert check_consecutive_members(matched_grid, (100.0 * 1.0) ** 2) + assert t1**2 in matched_grid + assert t2**2 in matched_grid + + +def test_utils(): # Testing the fake LHAPDF class q20 = 1.65**2 x_grid = np.geomspace(1.0e-7, 1.0, 30) - fake_grids = [[x * (1.0 - x) for x in x_grid] for pid in PIDS_DICT.keys()] + fake_grids = [[x * (1.0 - x) for x in x_grid] for _ in PIDS_DICT.keys()] pdf_grid = dict([(pid, v) for pid, v in zip(range(len(PIDS_DICT)), fake_grids)]) my_PDF = utils.LhapdfLike(pdf_grid, q20, x_grid) assert my_PDF.hasFlavor(6) @@ -133,10 +144,15 @@ def test_eko_utils(tmp_path): t_card_dict["order"][0] == pto + 1 ) # This is due to a different convention in eko orders due to QED assert_allclose(op_card_dict["xgrid"], x_grid) - assert_allclose(op_card_dict["mugrid"][0], (1.65, 4)) + # In theory 162 the charm threshold is at 1.51 + # and we should find two entries, one for nf=3 and another one for nf=4 + assert_allclose(op_card_dict["mugrid"][0], (1.51, 3)) + assert_allclose(op_card_dict["mugrid"][1], (1.51, 4)) + # Then (with the number of points we chosen it will happen in position 2,3 + # we will find the bottom threshold at two different nf + assert_allclose(op_card_dict["mugrid"][2], (4.92, 4)) + assert_allclose(op_card_dict["mugrid"][3], (4.92, 5)) assert_allclose(op_card_dict["mugrid"][-1], (q_fin, 5)) - # In this case there are not enough points to have twice the bottom matching scale - assert_allclose(op_card_dict["mugrid"][1], (4.92, 5)) # Testing computation of eko save_path = tmp_path / "ekotest.tar" runner.solve(t_card, op_card, save_path) From fcc3e8e101ce61f56bdcc728491801394af712ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 13 Jun 2023 22:06:10 +0200 Subject: [PATCH 055/134] Add qed test in test_evolven3fit.py --- n3fit/runcards/examples/Basic_runcard_qed.yml | 2 +- n3fit/src/n3fit/tests/test_evolven3fit.py | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/n3fit/runcards/examples/Basic_runcard_qed.yml b/n3fit/runcards/examples/Basic_runcard_qed.yml index 309f5901d5..d07e9d6cfb 100644 --- a/n3fit/runcards/examples/Basic_runcard_qed.yml +++ b/n3fit/runcards/examples/Basic_runcard_qed.yml @@ -95,7 +95,7 @@ datacuts: ############################################################ theory: - theoryid: 522 # database id + theoryid: 523 # database id ############################################################ trvlseed: 1551864071 diff --git a/n3fit/src/n3fit/tests/test_evolven3fit.py b/n3fit/src/n3fit/tests/test_evolven3fit.py index 1796095df1..22708c6279 100644 --- a/n3fit/src/n3fit/tests/test_evolven3fit.py +++ b/n3fit/src/n3fit/tests/test_evolven3fit.py @@ -169,3 +169,29 @@ def test_perform_evolution(tmp_path, fitname): info = check_lhapdf_info(tmp_info) for datpath in tmp_nnfit.glob("replica_*/*.dat"): check_lhapdf_dat(datpath, info) + + +@pytest.mark.parametrize("fitname", ["Basic_runcard_qed_3replicas_lowprec_398"]) +def test_perform_evolution_qed(tmp_path, fitname): + """Test that evolven3fit_new is able to utilize the current eko in the respective theory. + In addition checks that the generated .info files are correct + """ + fit = API.fit(fit=fitname) + # Move the fit to a temporary folder + tmp_fit = tmp_path / fitname + shutil.copytree(fit.path, tmp_fit) + # Clear the .log and .dat files + (tmp_fit / "evolven3fit_new.log").unlink() + tmp_nnfit = tmp_fit / "nnfit" + tmp_info = tmp_nnfit / f"{fitname}.info" + tmp_info.unlink() + for datpath in tmp_nnfit.glob("replica_*/*.dat"): + datpath.unlink() + + # And re-evolve the fit + sp.run(["evolven3fit_new", "evolve", fitname], cwd=tmp_path, check=True) + + # check that everything worked! + info = check_lhapdf_info(tmp_info) + for datpath in tmp_nnfit.glob("replica_*/*.dat"): + check_lhapdf_dat(datpath, info) From 5e7176ef48e6020447d1e2037b85148100ff2258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 13 Jun 2023 23:02:35 +0200 Subject: [PATCH 056/134] Add qed test in test_fit --- .../n3fit/tests/regressions/quickcard_qed.yml | 92 ++++++++++++++++++ .../tests/regressions/quickcard_qed_1.json | 95 +++++++++++++++++++ .../tests/regressions/quickcard_qed_2.json | 95 +++++++++++++++++++ 3 files changed, 282 insertions(+) create mode 100644 n3fit/src/n3fit/tests/regressions/quickcard_qed.yml create mode 100644 n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json create mode 100644 n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml b/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml new file mode 100644 index 0000000000..950e32c58c --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml @@ -0,0 +1,92 @@ +# +# Configuration file for n3fit regression tests +# This runcard includes two DIS datasets, one Hadronic dataset +# and two positivity datasets +# + +############################################################ +description: n3fit regression test + +############################################################ +# frac: training fraction +# ewk: apply ewk k-factors +# sys: systematics treatment (see systypes) +dataset_inputs: +- { dataset: NMC, frac: 0.5 } +- { dataset: SLACP_dwsh, frac: 0.5} +- { dataset: CMSZDIFF12, frac: 0.5, cfac: ['QCD'], sys: 10 } +- { dataset: ATLASTTBARTOT8TEV, frac: 1.0, cfac: ['QCD'] } + +############################################################ +datacuts: + t0pdfset: NNPDF40_nnlo_as_01180 # PDF set to generate t0 covmat + q2min : 3.49 # Q2 minimum + w2min : 12.5 # W2 minimum + combocuts : NNPDF31 # NNPDF3.0 final kin. cuts + jetptcut_tev : 0 # jet pt cut for tevatron + jetptcut_lhc : 0 # jet pt cut for lhc + wptcut_lhc : 30.0 # Minimum pT for W pT diff distributions + jetycut_tev : 1e30 # jet rap. cut for tevatron + jetycut_lhc : 1e30 # jet rap. cut for lhc + dymasscut_min: 0 # dy inv.mass. min cut + dymasscut_max: 1e30 # dy inv.mass. max cut + jetcfactcut : 1e30 # jet cfact. cut + +############################################################ +theory: + theoryid: 398 # database id + +############################################################ +genrep: True # on = generate MC replicas, False = use real data +trvlseed: 3 +nnseed: 2 +mcseed: 1 + +load: "weights.h5" + +parameters: # This defines the parameter dictionary that is passed to the Model Trainer + nodes_per_layer: [15, 10, 8] + activation_per_layer: ['sigmoid', 'sigmoid', 'linear'] + initializer: 'glorot_normal' + optimizer: + optimizer_name: 'RMSprop' + learning_rate: 0.00001 + clipnorm: 1.0 + epochs: 1100 + positivity: + multiplier: 1.05 + initial: 1.5 + stopping_patience: 0.10 # percentage of the number of epochs + layer_type: 'dense' + dropout: 0.0 + threshold_chi2: 10.0 + +fitting: + fitbasis: NN31IC # EVOL (7), EVOLQED (8), etc. + basis: + - { fl: sng, smallx: [1.05,1.19], largex: [1.47,2.70] } + - { fl: g, smallx: [0.94,1.25], largex: [0.11,5.87] } + - { fl: v, smallx: [0.54,0.75], largex: [1.15,2.76] } + - { fl: v3, smallx: [0.21,0.57], largex: [1.35,3.08] } + - { fl: v8, smallx: [0.52,0.76], largex: [0.77,3.56] } + - { fl: t3, smallx: [-0.37,1.52], largex: [1.74,3.39] } + - { fl: t8, smallx: [0.56,1.29], largex: [1.45,3.03] } + - { fl: cp, smallx: [0.12,1.19], largex: [1.83,6.70] } + +############################################################ +positivity: + posdatasets: + - { dataset: POSF2U, maxlambda: 1e6 } # Positivity Lagrange Multiplier + - { dataset: POSDYS, maxlambda: 1e5 } + +integrability: + integdatasets: + - {dataset: INTEGXT8, maxlambda: 1e2} + +############################################################ +debug: true + +fiatlux: + luxset: NNPDF40_nnlo_as_01180 + additional_errors: true # should be set to true only for the last iteration + luxseed: 1234567890 diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json new file mode 100644 index 0000000000..5c47a02aa6 --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json @@ -0,0 +1,95 @@ +{ + "preprocessing": [ + { + "fl": "sng", + "smallx": 1.1307647228240967, + "largex": 2.6348154544830322, + "trainable": true + }, + { + "fl": "g", + "smallx": 1.1853630542755127, + "largex": 1.5627975463867188, + "trainable": true + }, + { + "fl": "v", + "smallx": 0.5399999022483826, + "largex": 2.004500150680542, + "trainable": true + }, + { + "fl": "v3", + "smallx": 0.3061821758747101, + "largex": 2.6243231296539307, + "trainable": true + }, + { + "fl": "v8", + "smallx": 0.5774596929550171, + "largex": 2.120253801345825, + "trainable": true + }, + { + "fl": "t3", + "smallx": 1.3441987037658691, + "largex": 1.7566683292388916, + "trainable": true + }, + { + "fl": "t8", + "smallx": 1.04995858669281, + "largex": 1.945939064025879, + "trainable": true + }, + { + "fl": "cp", + "smallx": 0.7400740385055542, + "largex": 3.461853504180908, + "trainable": true + } + ], + "stop_epoch": 1100, + "best_epoch": 1099, + "erf_tr": 31.479900360107422, + "erf_vl": 28.42186164855957, + "chi2": 19.602598190307617, + "pos_state": "POS_VETO", + "arc_lengths": [ + 1.0355354158791996, + 1.1952711188285763, + 1.0889863228847247, + 1.3354546180547748, + 1.0845053775983715 + ], + "integrability": [ + 0.002640353239258264, + 0.002640353239257265, + 0.00025514093067380283, + 3.289671421051026, + 0.0039052469655898037 + ], + "timing": { + "walltime": { + "Total": 1332.9973878860474, + "start": 0.0, + "replica_set": 0.539992094039917, + "replica_fitted": 1332.997339963913, + "replica_set_to_replica_fitted": 1332.457347869873 + }, + "cputime": { + "Total": 1332.938156, + "start": 0.0, + "replica_set": 2.026674, + "replica_fitted": 1332.938103, + "replica_set_to_replica_fitted": 1330.911429 + } + }, + "version": { + "keras": "2.10.0", + "tensorflow": "2.10.0, mkl=False", + "numpy": "1.22.4", + "nnpdf": "4.0.6.840+gfcc3e8e10-dev", + "validphys": "4.0.6.840+gfcc3e8e10-dev" + } +} \ No newline at end of file diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json new file mode 100644 index 0000000000..15077e500e --- /dev/null +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json @@ -0,0 +1,95 @@ +{ + "preprocessing": [ + { + "fl": "sng", + "smallx": 1.1090877056121826, + "largex": 2.683891534805298, + "trainable": true + }, + { + "fl": "g", + "smallx": 0.9399998784065247, + "largex": 1.6251798868179321, + "trainable": true + }, + { + "fl": "v", + "smallx": 0.7499998211860657, + "largex": 1.726711630821228, + "trainable": true + }, + { + "fl": "v3", + "smallx": 0.2121002972126007, + "largex": 1.3534746170043945, + "trainable": true + }, + { + "fl": "v8", + "smallx": 0.7599999308586121, + "largex": 2.390061616897583, + "trainable": true + }, + { + "fl": "t3", + "smallx": 1.4388009309768677, + "largex": 2.2958621978759766, + "trainable": true + }, + { + "fl": "t8", + "smallx": 1.0386217832565308, + "largex": 1.7531665563583374, + "trainable": true + }, + { + "fl": "cp", + "smallx": 0.24638593196868896, + "largex": 2.7976953983306885, + "trainable": true + } + ], + "stop_epoch": 1100, + "best_epoch": 1099, + "erf_tr": 3.5775744915008545, + "erf_vl": 3.6801669597625732, + "chi2": 2.1422781944274902, + "pos_state": "POS_VETO", + "arc_lengths": [ + 1.320261058152196, + 1.2008326348375713, + 1.0538968228329768, + 5.092393152077501, + 1.0856575181085886 + ], + "integrability": [ + 0.029426240362226908, + 0.029426240362226963, + 0.0003942905323124357, + 12.764077186584473, + 0.029728015419096226 + ], + "timing": { + "walltime": { + "Total": 1296.5483038425446, + "start": 0.0, + "replica_set": 0.4714009761810303, + "replica_fitted": 1296.5482459068298, + "replica_set_to_replica_fitted": 1296.0768449306488 + }, + "cputime": { + "Total": 1296.4548610000002, + "start": 0.0, + "replica_set": 2.022157, + "replica_fitted": 1296.454798, + "replica_set_to_replica_fitted": 1294.4326409999999 + } + }, + "version": { + "keras": "2.10.0", + "tensorflow": "2.10.0, mkl=False", + "numpy": "1.22.4", + "nnpdf": "4.0.6.840+gfcc3e8e10-dev", + "validphys": "4.0.6.840+gfcc3e8e10-dev" + } +} \ No newline at end of file From 0af300487d7c4412bec587b1a510d5afcbef2ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Tue, 13 Jun 2023 23:03:00 +0200 Subject: [PATCH 057/134] Add qed test in test_fit 2 --- n3fit/src/n3fit/tests/test_fit.py | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/n3fit/src/n3fit/tests/test_fit.py b/n3fit/src/n3fit/tests/test_fit.py index 80a329faa0..496115ea50 100644 --- a/n3fit/src/n3fit/tests/test_fit.py +++ b/n3fit/src/n3fit/tests/test_fit.py @@ -33,6 +33,7 @@ log = logging.getLogger(__name__) REGRESSION_FOLDER = pathlib.Path(__file__).with_name("regressions") QUICKNAME = "quickcard" +QUICKNAME_QED = "quickcard_qed" EXE = "n3fit" REPLICA = "1" EXPECTED_MAX_FITTIME = 130 # seen mac ~ 180 and linux ~ 90 @@ -153,3 +154,50 @@ def test_weirdbasis(tmp_path, timing=30): # with pytest.raises(sp.TimeoutExpired): with pytest.raises(sp.CalledProcessError): sp.run(f"{EXE} {quickcard} {REPLICA}".split(), cwd=tmp_path, timeout=timing, check=True) + + +def auxiliary_performfit_qed(tmp_path, replica=1, timing=True, rel_error=2e-3): + """Fits quickcard and checks the json file to ensure the results have not changed. + """ + quickcard = f"{QUICKNAME_QED}.yml" + # Prepare the runcard + quickpath = REGRESSION_FOLDER / quickcard + weightpath = REGRESSION_FOLDER / f"weights_{replica}.h5" + # read up the previous json file for the given replica + old_json = load_data(REGRESSION_FOLDER / f"{QUICKNAME_QED}_{replica}.json") + # cp runcard and weights to tmp folder + shutil.copy(quickpath, tmp_path) + shutil.copy(weightpath, tmp_path / "weights.h5") + # run the fit + sp.run(f"{EXE} {quickcard} {replica}".split(), cwd=tmp_path, check=True) + # read up json files + full_json = tmp_path / f"{QUICKNAME_QED}/nnfit/replica_{replica}/{QUICKNAME_QED}.json" + new_json = load_data(full_json) + # Now compare to regression results, taking into account precision won't be 100% + equal_checks = ["stop_epoch", "pos_state"] + approx_checks = ["erf_tr", "erf_vl", "chi2", "best_epoch", "arc_lengths", "integrability", "best_epoch"] + for key in equal_checks: + assert_equal(new_json[key], old_json[key]) + for key in approx_checks: + if old_json[key] is None and new_json[key] is None: + continue + assert_allclose(new_json[key], old_json[key], rtol=rel_error) + # check that the times didnt grow in a weird manner + if timing: + # Better to catch up errors even when they happen to grow larger by chance + times = new_json["timing"] + fitting_time = times["walltime"]["replica_set_to_replica_fitted"] + assert fitting_time < EXPECTED_MAX_FITTIME + # For safety, check also the version + assert new_json["version"]["nnpdf"] == n3fit.__version__ + + +@pytest.mark.darwin +def test_performfit_qed(tmp_path): + auxiliary_performfit_qed(tmp_path, replica=2, timing=False, rel_error=1e-1) + + +@pytest.mark.linux +@pytest.mark.parametrize("replica", [1, 2]) +def test_performfit_and_timing_qed(tmp_path, replica): + auxiliary_performfit_qed(tmp_path, replica=replica, timing=True) \ No newline at end of file From 22566646bfa1baa1c72996ba85561a2022a4cb3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 14 Jun 2023 10:23:19 +0200 Subject: [PATCH 058/134] Refector QED tests --- n3fit/src/n3fit/tests/test_evolven3fit.py | 27 +--------- n3fit/src/n3fit/tests/test_fit.py | 61 +++-------------------- 2 files changed, 9 insertions(+), 79 deletions(-) diff --git a/n3fit/src/n3fit/tests/test_evolven3fit.py b/n3fit/src/n3fit/tests/test_evolven3fit.py index 22708c6279..4d0f0c4dda 100644 --- a/n3fit/src/n3fit/tests/test_evolven3fit.py +++ b/n3fit/src/n3fit/tests/test_evolven3fit.py @@ -145,7 +145,7 @@ def test_eko_utils(tmp_path): assert_allclose(list(eko_op.operator_card.raw["mugrid"]), op_card_dict["mugrid"]) -@pytest.mark.parametrize("fitname", ["Basic_runcard_3replicas_lowprec_399"]) +@pytest.mark.parametrize("fitname", ["Basic_runcard_3replicas_lowprec_399", "Basic_runcard_qed_3replicas_lowprec_398"]) def test_perform_evolution(tmp_path, fitname): """Test that evolven3fit_new is able to utilize the current eko in the respective theory. In addition checks that the generated .info files are correct @@ -170,28 +170,3 @@ def test_perform_evolution(tmp_path, fitname): for datpath in tmp_nnfit.glob("replica_*/*.dat"): check_lhapdf_dat(datpath, info) - -@pytest.mark.parametrize("fitname", ["Basic_runcard_qed_3replicas_lowprec_398"]) -def test_perform_evolution_qed(tmp_path, fitname): - """Test that evolven3fit_new is able to utilize the current eko in the respective theory. - In addition checks that the generated .info files are correct - """ - fit = API.fit(fit=fitname) - # Move the fit to a temporary folder - tmp_fit = tmp_path / fitname - shutil.copytree(fit.path, tmp_fit) - # Clear the .log and .dat files - (tmp_fit / "evolven3fit_new.log").unlink() - tmp_nnfit = tmp_fit / "nnfit" - tmp_info = tmp_nnfit / f"{fitname}.info" - tmp_info.unlink() - for datpath in tmp_nnfit.glob("replica_*/*.dat"): - datpath.unlink() - - # And re-evolve the fit - sp.run(["evolven3fit_new", "evolve", fitname], cwd=tmp_path, check=True) - - # check that everything worked! - info = check_lhapdf_info(tmp_info) - for datpath in tmp_nnfit.glob("replica_*/*.dat"): - check_lhapdf_dat(datpath, info) diff --git a/n3fit/src/n3fit/tests/test_fit.py b/n3fit/src/n3fit/tests/test_fit.py index 496115ea50..8cc009fa53 100644 --- a/n3fit/src/n3fit/tests/test_fit.py +++ b/n3fit/src/n3fit/tests/test_fit.py @@ -65,10 +65,10 @@ def test_initialize_seeds(): assert len({replica_mcseed(rep, 1, True) for rep in same_replicas}) == 1 -def auxiliary_performfit(tmp_path, replica=1, timing=True, rel_error=2e-3): +def auxiliary_performfit(tmp_path, runcard=QUICKNAME, replica=1, timing=True, rel_error=2e-3): """Fits quickcard and checks the json file to ensure the results have not changed. """ - quickcard = f"{QUICKNAME}.yml" + quickcard = f"{runcard}.yml" # Prepare the runcard quickpath = REGRESSION_FOLDER / quickcard weightpath = REGRESSION_FOLDER / f"weights_{replica}.h5" @@ -102,14 +102,16 @@ def auxiliary_performfit(tmp_path, replica=1, timing=True, rel_error=2e-3): @pytest.mark.darwin -def test_performfit(tmp_path): - auxiliary_performfit(tmp_path, replica=2, timing=False, rel_error=1e-1) +@pytest.mark.parametrize("runcard", [QUICKNAME, QUICKNAME_QED]) +def test_performfit(tmp_path, runcard): + auxiliary_performfit(tmp_path, runcard=runcard, replica=2, timing=False, rel_error=1e-1) @pytest.mark.linux @pytest.mark.parametrize("replica", [1, 2]) -def test_performfit_and_timing(tmp_path, replica): - auxiliary_performfit(tmp_path, replica=replica, timing=True) +@pytest.mark.parametrize("runcard", [QUICKNAME, QUICKNAME_QED]) +def test_performfit_and_timing(tmp_path, runcard, replica): + auxiliary_performfit(tmp_path, runcard=runcard, replica=replica, timing=True) @pytest.mark.skip(reason="Still not implemented in parallel mode") @@ -154,50 +156,3 @@ def test_weirdbasis(tmp_path, timing=30): # with pytest.raises(sp.TimeoutExpired): with pytest.raises(sp.CalledProcessError): sp.run(f"{EXE} {quickcard} {REPLICA}".split(), cwd=tmp_path, timeout=timing, check=True) - - -def auxiliary_performfit_qed(tmp_path, replica=1, timing=True, rel_error=2e-3): - """Fits quickcard and checks the json file to ensure the results have not changed. - """ - quickcard = f"{QUICKNAME_QED}.yml" - # Prepare the runcard - quickpath = REGRESSION_FOLDER / quickcard - weightpath = REGRESSION_FOLDER / f"weights_{replica}.h5" - # read up the previous json file for the given replica - old_json = load_data(REGRESSION_FOLDER / f"{QUICKNAME_QED}_{replica}.json") - # cp runcard and weights to tmp folder - shutil.copy(quickpath, tmp_path) - shutil.copy(weightpath, tmp_path / "weights.h5") - # run the fit - sp.run(f"{EXE} {quickcard} {replica}".split(), cwd=tmp_path, check=True) - # read up json files - full_json = tmp_path / f"{QUICKNAME_QED}/nnfit/replica_{replica}/{QUICKNAME_QED}.json" - new_json = load_data(full_json) - # Now compare to regression results, taking into account precision won't be 100% - equal_checks = ["stop_epoch", "pos_state"] - approx_checks = ["erf_tr", "erf_vl", "chi2", "best_epoch", "arc_lengths", "integrability", "best_epoch"] - for key in equal_checks: - assert_equal(new_json[key], old_json[key]) - for key in approx_checks: - if old_json[key] is None and new_json[key] is None: - continue - assert_allclose(new_json[key], old_json[key], rtol=rel_error) - # check that the times didnt grow in a weird manner - if timing: - # Better to catch up errors even when they happen to grow larger by chance - times = new_json["timing"] - fitting_time = times["walltime"]["replica_set_to_replica_fitted"] - assert fitting_time < EXPECTED_MAX_FITTIME - # For safety, check also the version - assert new_json["version"]["nnpdf"] == n3fit.__version__ - - -@pytest.mark.darwin -def test_performfit_qed(tmp_path): - auxiliary_performfit_qed(tmp_path, replica=2, timing=False, rel_error=1e-1) - - -@pytest.mark.linux -@pytest.mark.parametrize("replica", [1, 2]) -def test_performfit_and_timing_qed(tmp_path, replica): - auxiliary_performfit_qed(tmp_path, replica=replica, timing=True) \ No newline at end of file From 5a319fc7f4a4fd38df319db5b8b3e3d041f8c63b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 14 Jun 2023 11:02:52 +0200 Subject: [PATCH 059/134] Fix test --- n3fit/src/n3fit/tests/test_fit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/tests/test_fit.py b/n3fit/src/n3fit/tests/test_fit.py index 8cc009fa53..97d7d55175 100644 --- a/n3fit/src/n3fit/tests/test_fit.py +++ b/n3fit/src/n3fit/tests/test_fit.py @@ -73,14 +73,14 @@ def auxiliary_performfit(tmp_path, runcard=QUICKNAME, replica=1, timing=True, re quickpath = REGRESSION_FOLDER / quickcard weightpath = REGRESSION_FOLDER / f"weights_{replica}.h5" # read up the previous json file for the given replica - old_json = load_data(REGRESSION_FOLDER / f"{QUICKNAME}_{replica}.json") + old_json = load_data(REGRESSION_FOLDER / f"{runcard}_{replica}.json") # cp runcard and weights to tmp folder shutil.copy(quickpath, tmp_path) shutil.copy(weightpath, tmp_path / "weights.h5") # run the fit sp.run(f"{EXE} {quickcard} {replica}".split(), cwd=tmp_path, check=True) # read up json files - full_json = tmp_path / f"{QUICKNAME}/nnfit/replica_{replica}/{QUICKNAME}.json" + full_json = tmp_path / f"{runcard}/nnfit/replica_{replica}/{runcard}.json" new_json = load_data(full_json) # Now compare to regression results, taking into account precision won't be 100% equal_checks = ["stop_epoch", "pos_state"] From 9758018eaea080cba7cea19562fda45f084ddd4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 14 Jun 2023 11:21:47 +0200 Subject: [PATCH 060/134] Add fiatlux precision in the runcard --- n3fit/runcards/examples/Basic_runcard_qed.yml | 1 + .../n3fit/tests/regressions/quickcard_qed.yml | 1 + .../tests/regressions/quickcard_qed_1.json | 46 +++++++-------- .../tests/regressions/quickcard_qed_2.json | 58 +++++++++---------- validphys2/src/validphys/photon/compute.py | 8 ++- 5 files changed, 61 insertions(+), 53 deletions(-) diff --git a/n3fit/runcards/examples/Basic_runcard_qed.yml b/n3fit/runcards/examples/Basic_runcard_qed.yml index d07e9d6cfb..d7ccf7b9c1 100644 --- a/n3fit/runcards/examples/Basic_runcard_qed.yml +++ b/n3fit/runcards/examples/Basic_runcard_qed.yml @@ -169,3 +169,4 @@ fiatlux: luxset: NNPDF40_nnlo_as_01180 additional_errors: true # should be set to true only for the last iteration luxseed: 1234567890 + abs_err: 1e-2 diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml b/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml index 950e32c58c..5995b99d60 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml @@ -90,3 +90,4 @@ fiatlux: luxset: NNPDF40_nnlo_as_01180 additional_errors: true # should be set to true only for the last iteration luxseed: 1234567890 + abs_err: 1e-2 diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json index 5c47a02aa6..fd7c92d36d 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json @@ -51,45 +51,45 @@ ], "stop_epoch": 1100, "best_epoch": 1099, - "erf_tr": 31.479900360107422, - "erf_vl": 28.42186164855957, - "chi2": 19.602598190307617, + "erf_tr": 31.479909896850586, + "erf_vl": 28.421838760375977, + "chi2": 19.602609634399414, "pos_state": "POS_VETO", "arc_lengths": [ - 1.0355354158791996, - 1.1952711188285763, - 1.0889863228847247, - 1.3354546180547748, - 1.0845053775983715 + 1.0355354274955006, + 1.195271539211688, + 1.088986348499315, + 1.335431714155942, + 1.0845053845820272 ], "integrability": [ - 0.002640353239258264, - 0.002640353239257265, - 0.00025514093067380283, - 3.289671421051026, - 0.0039052469655898037 + 0.0026403537049198844, + 0.00264035370491833, + 0.00025512540650873827, + 3.2896719574928284, + 0.0039052472275233896 ], "timing": { "walltime": { - "Total": 1332.9973878860474, + "Total": 53.36410307884216, "start": 0.0, - "replica_set": 0.539992094039917, - "replica_fitted": 1332.997339963913, - "replica_set_to_replica_fitted": 1332.457347869873 + "replica_set": 0.47026801109313965, + "replica_fitted": 53.364020109176636, + "replica_set_to_replica_fitted": 52.893752098083496 }, "cputime": { - "Total": 1332.938156, + "Total": 55.200050000000005, "start": 0.0, - "replica_set": 2.026674, - "replica_fitted": 1332.938103, - "replica_set_to_replica_fitted": 1330.911429 + "replica_set": 2.1680059999999983, + "replica_fitted": 55.199962, + "replica_set_to_replica_fitted": 53.031956 } }, "version": { "keras": "2.10.0", "tensorflow": "2.10.0, mkl=False", "numpy": "1.22.4", - "nnpdf": "4.0.6.840+gfcc3e8e10-dev", - "validphys": "4.0.6.840+gfcc3e8e10-dev" + "nnpdf": "4.0.6.844+g5a319fc7f-dev", + "validphys": "4.0.6.844+g5a319fc7f-dev" } } \ No newline at end of file diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json index 15077e500e..2294d90a85 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json @@ -2,32 +2,32 @@ "preprocessing": [ { "fl": "sng", - "smallx": 1.1090877056121826, + "smallx": 1.1090871095657349, "largex": 2.683891534805298, "trainable": true }, { "fl": "g", "smallx": 0.9399998784065247, - "largex": 1.6251798868179321, + "largex": 1.6251764297485352, "trainable": true }, { "fl": "v", "smallx": 0.7499998211860657, - "largex": 1.726711630821228, + "largex": 1.726712942123413, "trainable": true }, { "fl": "v3", - "smallx": 0.2121002972126007, - "largex": 1.3534746170043945, + "smallx": 0.21201345324516296, + "largex": 1.3534246683120728, "trainable": true }, { "fl": "v8", "smallx": 0.7599999308586121, - "largex": 2.390061616897583, + "largex": 2.3900604248046875, "trainable": true }, { @@ -51,45 +51,45 @@ ], "stop_epoch": 1100, "best_epoch": 1099, - "erf_tr": 3.5775744915008545, - "erf_vl": 3.6801669597625732, - "chi2": 2.1422781944274902, + "erf_tr": 3.57742977142334, + "erf_vl": 3.6800172328948975, + "chi2": 2.142242431640625, "pos_state": "POS_VETO", "arc_lengths": [ - 1.320261058152196, - 1.2008326348375713, - 1.0538968228329768, - 5.092393152077501, - 1.0856575181085886 + 1.320264040560382, + 1.2009584734334209, + 1.053896670589243, + 5.093812560494535, + 1.0856600633895122 ], "integrability": [ - 0.029426240362226908, - 0.029426240362226963, - 0.0003942905323124357, - 12.764077186584473, - 0.029728015419096226 + 0.02942626690492056, + 0.02942626690492034, + 0.00039390505207781423, + 12.764078140258789, + 0.029728126246482744 ], "timing": { "walltime": { - "Total": 1296.5483038425446, + "Total": 53.159754037857056, "start": 0.0, - "replica_set": 0.4714009761810303, - "replica_fitted": 1296.5482459068298, - "replica_set_to_replica_fitted": 1296.0768449306488 + "replica_set": 0.5134978294372559, + "replica_fitted": 53.15968608856201, + "replica_set_to_replica_fitted": 52.646188259124756 }, "cputime": { - "Total": 1296.4548610000002, + "Total": 54.924513, "start": 0.0, - "replica_set": 2.022157, - "replica_fitted": 1296.454798, - "replica_set_to_replica_fitted": 1294.4326409999999 + "replica_set": 2.1671650000000007, + "replica_fitted": 54.92444, + "replica_set_to_replica_fitted": 52.75727499999999 } }, "version": { "keras": "2.10.0", "tensorflow": "2.10.0, mkl=False", "numpy": "1.22.4", - "nnpdf": "4.0.6.840+gfcc3e8e10-dev", - "validphys": "4.0.6.840+gfcc3e8e10-dev" + "nnpdf": "4.0.6.844+g5a319fc7f-dev", + "validphys": "4.0.6.844+g5a319fc7f-dev" } } \ No newline at end of file diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index 657e807ba2..02125d5f29 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -19,7 +19,6 @@ FIATLUX_DEFAULT = { "apfel": False, - "eps_base": 1e-5, # precision on final integration of double integral. "eps_rel": 1e-1, # extra precision on any single integration. "mum_proton": 2.792847356, # proton magnetic moment, from # http://pdglive.lbl.gov/DataBlock.action?node=S016MM which itself @@ -59,6 +58,13 @@ def __init__(self, theoryid, lux_params, replicas): # This is going to be changed in favor of a bool em_running # in the runcard fiatlux_runcard["mproton"] = theory["MP"] + if "abs_err" in lux_params: + fiatlux_runcard["eps_base"] = lux_params["abs_err"] + log.info(f"Using eps_base from runcard") + else: + fiatlux_runcard["eps_base"] = 1e-5 # precision on final integration of double integral. + log.info(f"Using default eps_base = 1e-5") + self.replicas = replicas # structure functions From 0a926fdf155f2a759b37e196a9c8b487d8c3baed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 14 Jun 2023 11:43:05 +0200 Subject: [PATCH 061/134] Rename abs_err -> eps_base --- n3fit/runcards/examples/Basic_runcard_qed.yml | 2 +- n3fit/src/n3fit/tests/regressions/quickcard_qed.yml | 2 +- validphys2/src/validphys/photon/compute.py | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/n3fit/runcards/examples/Basic_runcard_qed.yml b/n3fit/runcards/examples/Basic_runcard_qed.yml index d7ccf7b9c1..9fd98ce1b1 100644 --- a/n3fit/runcards/examples/Basic_runcard_qed.yml +++ b/n3fit/runcards/examples/Basic_runcard_qed.yml @@ -169,4 +169,4 @@ fiatlux: luxset: NNPDF40_nnlo_as_01180 additional_errors: true # should be set to true only for the last iteration luxseed: 1234567890 - abs_err: 1e-2 + eps_base: 1e-2 diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml b/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml index 5995b99d60..84a880c44e 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed.yml @@ -90,4 +90,4 @@ fiatlux: luxset: NNPDF40_nnlo_as_01180 additional_errors: true # should be set to true only for the last iteration luxseed: 1234567890 - abs_err: 1e-2 + eps_base: 1e-2 diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index 02125d5f29..95525c6177 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -58,12 +58,12 @@ def __init__(self, theoryid, lux_params, replicas): # This is going to be changed in favor of a bool em_running # in the runcard fiatlux_runcard["mproton"] = theory["MP"] - if "abs_err" in lux_params: - fiatlux_runcard["eps_base"] = lux_params["abs_err"] - log.info(f"Using eps_base from runcard") + if "eps_base" in lux_params: + fiatlux_runcard["eps_base"] = lux_params["eps_base"] + log.warning(f"Using fiatlux parameter eps_base from runcard") else: fiatlux_runcard["eps_base"] = 1e-5 # precision on final integration of double integral. - log.info(f"Using default eps_base = 1e-5") + log.info(f"Using default value for fiatlux parameter eps_base") self.replicas = replicas From f99b77b0ac20a4a304933eee555bc35c29d94fc3 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 14 Jun 2023 12:41:37 +0200 Subject: [PATCH 062/134] Remove now unused scatter_to_zero. --- n3fit/src/n3fit/backends/keras_backend/operations.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index ff3d1a0248..4020466a23 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -361,16 +361,6 @@ def scatter_to_one(values, indices=[[1]], output_dim=14): return tf.tensor_scatter_nd_update(ones, indices, values) -def scatter_to_zero(values, indices, output_dim): - """ - Like scatter_nd initialized to zero - see full `docs `_ - """ - indices = tf.constant([[i] for i in indices]) - updates = tf.constant(values) - return tf.scatter_nd(indices, updates, [output_dim]) - - def op_subtract(inputs, **kwargs): """ Computes the difference between two tensors. From 32e1a868c6583e51b9f32f2f186f7c3ffa257e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 14 Jun 2023 17:46:31 +0200 Subject: [PATCH 063/134] Use .json from linux machine --- .../tests/regressions/quickcard_qed_1.json | 54 +++++++-------- .../tests/regressions/quickcard_qed_2.json | 66 +++++++++---------- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json index fd7c92d36d..db2b66daf2 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json @@ -20,8 +20,8 @@ }, { "fl": "v3", - "smallx": 0.3061821758747101, - "largex": 2.6243231296539307, + "smallx": 0.3061824142932892, + "largex": 2.624323606491089, "trainable": true }, { @@ -51,45 +51,45 @@ ], "stop_epoch": 1100, "best_epoch": 1099, - "erf_tr": 31.479909896850586, - "erf_vl": 28.421838760375977, - "chi2": 19.602609634399414, + "erf_tr": 31.486101150512695, + "erf_vl": 28.4218692779541, + "chi2": 19.611825942993164, "pos_state": "POS_VETO", "arc_lengths": [ - 1.0355354274955006, - 1.195271539211688, - 1.088986348499315, - 1.335431714155942, - 1.0845053845820272 + 1.035533162554303, + 1.1953713068471692, + 1.0881025884095246, + 1.3414978876721764, + 1.0839843290638607 ], "integrability": [ - 0.0026403537049198844, - 0.00264035370491833, - 0.00025512540650873827, - 3.2896719574928284, - 0.0039052472275233896 + 0.002653829054906187, + 0.002653829054905521, + 0.0002567724250169823, + 3.2896786332130423, + 0.003927801561079747 ], "timing": { "walltime": { - "Total": 53.36410307884216, + "Total": 58.37841296195984, "start": 0.0, - "replica_set": 0.47026801109313965, - "replica_fitted": 53.364020109176636, - "replica_set_to_replica_fitted": 52.893752098083496 + "replica_set": 0.3208029270172119, + "replica_fitted": 58.37802076339722, + "replica_set_to_replica_fitted": 58.057217836380005 }, "cputime": { - "Total": 55.200050000000005, + "Total": 61.517351913999995, "start": 0.0, - "replica_set": 2.1680059999999983, - "replica_fitted": 55.199962, - "replica_set_to_replica_fitted": 53.031956 + "replica_set": 2.813359167999998, + "replica_fitted": 61.516948647, + "replica_set_to_replica_fitted": 58.703589479 } }, "version": { - "keras": "2.10.0", - "tensorflow": "2.10.0, mkl=False", + "keras": "2.11.0", + "tensorflow": "2.11.0, mkl=False", "numpy": "1.22.4", - "nnpdf": "4.0.6.844+g5a319fc7f-dev", - "validphys": "4.0.6.844+g5a319fc7f-dev" + "nnpdf": "4.0.6.846+g0a926fdf1", + "validphys": "4.0.6.846+g0a926fdf1" } } \ No newline at end of file diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json index 2294d90a85..e737991a66 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json @@ -2,32 +2,32 @@ "preprocessing": [ { "fl": "sng", - "smallx": 1.1090871095657349, + "smallx": 1.1090763807296753, "largex": 2.683891534805298, "trainable": true }, { "fl": "g", "smallx": 0.9399998784065247, - "largex": 1.6251764297485352, + "largex": 1.6250606775283813, "trainable": true }, { "fl": "v", "smallx": 0.7499998211860657, - "largex": 1.726712942123413, + "largex": 1.7267229557037354, "trainable": true }, { "fl": "v3", - "smallx": 0.21201345324516296, - "largex": 1.3534246683120728, + "smallx": 0.21201331913471222, + "largex": 1.3532426357269287, "trainable": true }, { "fl": "v8", - "smallx": 0.7599999308586121, - "largex": 2.3900604248046875, + "smallx": 0.7599998712539673, + "largex": 2.390087127685547, "trainable": true }, { @@ -44,52 +44,52 @@ }, { "fl": "cp", - "smallx": 0.24638593196868896, + "smallx": 0.24638080596923828, "largex": 2.7976953983306885, "trainable": true } ], "stop_epoch": 1100, "best_epoch": 1099, - "erf_tr": 3.57742977142334, - "erf_vl": 3.6800172328948975, - "chi2": 2.142242431640625, + "erf_tr": 3.5809452533721924, + "erf_vl": 3.6826603412628174, + "chi2": 2.141340732574463, "pos_state": "POS_VETO", "arc_lengths": [ - 1.320264040560382, - 1.2009584734334209, - 1.053896670589243, - 5.093812560494535, - 1.0856600633895122 + 1.3194883264768875, + 1.1995146017416334, + 1.054266019685804, + 5.074692492247958, + 1.0689068380364566 ], "integrability": [ - 0.02942626690492056, - 0.02942626690492034, - 0.00039390505207781423, - 12.764078140258789, - 0.029728126246482744 + 0.02917606895789332, + 0.029176068957894374, + 0.0003924771135637162, + 12.764093160629272, + 0.02982003148645135 ], "timing": { "walltime": { - "Total": 53.159754037857056, + "Total": 57.77593541145325, "start": 0.0, - "replica_set": 0.5134978294372559, - "replica_fitted": 53.15968608856201, - "replica_set_to_replica_fitted": 52.646188259124756 + "replica_set": 0.31868839263916016, + "replica_fitted": 57.77560114860535, + "replica_set_to_replica_fitted": 57.45691275596619 }, "cputime": { - "Total": 54.924513, + "Total": 60.771742980000006, "start": 0.0, - "replica_set": 2.1671650000000007, - "replica_fitted": 54.92444, - "replica_set_to_replica_fitted": 52.75727499999999 + "replica_set": 2.6913169609999983, + "replica_fitted": 60.771408723, + "replica_set_to_replica_fitted": 58.080091762 } }, "version": { - "keras": "2.10.0", - "tensorflow": "2.10.0, mkl=False", + "keras": "2.11.0", + "tensorflow": "2.11.0, mkl=False", "numpy": "1.22.4", - "nnpdf": "4.0.6.844+g5a319fc7f-dev", - "validphys": "4.0.6.844+g5a319fc7f-dev" + "nnpdf": "4.0.6.846+g0a926fdf1", + "validphys": "4.0.6.846+g0a926fdf1" } } \ No newline at end of file From e2954aea1f2f346405aaa0f6b3e63baaec87808a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Wed, 14 Jun 2023 22:52:42 +0200 Subject: [PATCH 064/134] Fix very small bug in interp1d --- validphys2/src/validphys/photon/compute.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index 95525c6177..b3d44d01d3 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -118,7 +118,7 @@ def __init__(self, theoryid, lux_params, replicas): self.lux[replica].PlugStructureFunctions(f2.fxq, fl.fxq, f2lo.fxq) photon_array = self.compute_photon_array(replica) - self.interpolator.append(interp1d(XGRID, photon_array, fill_value=0.0, kind="cubic")) + self.interpolator.append(interp1d(XGRID, photon_array, fill_value="extrapolate", kind="cubic")) self.integral.append(trapezoid(photon_array, XGRID)) def compute_photon_array(self, replica): From 3d1783d79a498f1da1ce41b2f0dba4507e476177 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Thu, 15 Jun 2023 15:51:33 +0200 Subject: [PATCH 065/134] Download theoryIDs --- n3fit/src/n3fit/tests/test_evolven3fit.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/n3fit/src/n3fit/tests/test_evolven3fit.py b/n3fit/src/n3fit/tests/test_evolven3fit.py index 4d0f0c4dda..133895ce6b 100644 --- a/n3fit/src/n3fit/tests/test_evolven3fit.py +++ b/n3fit/src/n3fit/tests/test_evolven3fit.py @@ -12,6 +12,7 @@ from reportengine.compat import yaml from validphys.api import API from validphys.pdfbases import PIDS_DICT +from validphys.core import TheoryIDSpec REGRESSION_FOLDER = pathlib.Path(__file__).with_name("regressions") log = logging.getLogger(__name__) @@ -150,6 +151,9 @@ def test_perform_evolution(tmp_path, fitname): """Test that evolven3fit_new is able to utilize the current eko in the respective theory. In addition checks that the generated .info files are correct """ + theory = API.theoryid(theoryid=int(fitname[-3:])) + # check that nothing went wrong + assert isinstance(theory, TheoryIDSpec) fit = API.fit(fit=fitname) # Move the fit to a temporary folder tmp_fit = tmp_path / fitname From 296e2d412716fff109e1211efec0893a88e4ad9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 09:51:59 +0200 Subject: [PATCH 066/134] Add whitelines --- n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json | 2 +- n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json | 2 +- validphys2/src/validphys/photon/compute.py | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json index db2b66daf2..a960f7da9f 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_1.json @@ -92,4 +92,4 @@ "nnpdf": "4.0.6.846+g0a926fdf1", "validphys": "4.0.6.846+g0a926fdf1" } -} \ No newline at end of file +} diff --git a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json index e737991a66..18e6a605ae 100644 --- a/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json +++ b/n3fit/src/n3fit/tests/regressions/quickcard_qed_2.json @@ -92,4 +92,4 @@ "nnpdf": "4.0.6.846+g0a926fdf1", "validphys": "4.0.6.846+g0a926fdf1" } -} \ No newline at end of file +} diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index b3d44d01d3..189f801b97 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -58,11 +58,13 @@ def __init__(self, theoryid, lux_params, replicas): # This is going to be changed in favor of a bool em_running # in the runcard fiatlux_runcard["mproton"] = theory["MP"] + + # precision on final integration of double integral if "eps_base" in lux_params: fiatlux_runcard["eps_base"] = lux_params["eps_base"] log.warning(f"Using fiatlux parameter eps_base from runcard") else: - fiatlux_runcard["eps_base"] = 1e-5 # precision on final integration of double integral. + fiatlux_runcard["eps_base"] = 1e-5 log.info(f"Using default value for fiatlux parameter eps_base") self.replicas = replicas From 7585eea0267978026de42c113f7cfedec64ca0e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 10:06:18 +0200 Subject: [PATCH 067/134] Load theoryID from fit --- n3fit/src/n3fit/tests/test_evolven3fit.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/n3fit/src/n3fit/tests/test_evolven3fit.py b/n3fit/src/n3fit/tests/test_evolven3fit.py index 133895ce6b..aeee049ee5 100644 --- a/n3fit/src/n3fit/tests/test_evolven3fit.py +++ b/n3fit/src/n3fit/tests/test_evolven3fit.py @@ -151,10 +151,8 @@ def test_perform_evolution(tmp_path, fitname): """Test that evolven3fit_new is able to utilize the current eko in the respective theory. In addition checks that the generated .info files are correct """ - theory = API.theoryid(theoryid=int(fitname[-3:])) - # check that nothing went wrong - assert isinstance(theory, TheoryIDSpec) fit = API.fit(fit=fitname) + _ = API.theoryid(theoryid=fit.as_input()['theory']['theoryid']) # Move the fit to a temporary folder tmp_fit = tmp_path / fitname shutil.copytree(fit.path, tmp_fit) From 57a5343bdbd7dfe63b46f9151fddd5fc7dae2cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 10:36:23 +0200 Subject: [PATCH 068/134] Use test theory in test_compute --- .../validphys/tests/photon/test_compute.py | 135 +++--------------- 1 file changed, 21 insertions(+), 114 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index f61b13a6bd..927bcada49 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -1,141 +1,48 @@ from collections import namedtuple from pathlib import Path -import fiatlux import numpy as np from validphys.photon import structure_functions from validphys.photon.compute import Photon, Alpha from validphys.core import PDF as PDFset +from validphys.api import API from ..conftest import PDF from eko.io import EKO +TEST_THEORY = API.theoryid(theoryid=398) -class FakeTheory: - def __init__(self): - self.path = Path("/fake/path/") - - def get_description(self): - return { - "alphaqed": 0.01, - "Qref": 91.2, - "Qedref": 91.2, - "mc": 1.3, - "mb": 4.92, - "mt": 172.0, - "kcThr": 1.0, - "kbThr": 1.0, - "ktThr": 1.0, - "MaxNfAs": 5, - "MaxNfPdf": 5, - "MP": 0.938 - } - - -fiatlux_runcard = { +FIATLUX_RUNCARD = { "luxset": PDFset(PDF), - "additional_errors": False, - "luxseed": 123456789 + "additional_errors": PDFset("LUXqed17_plus_PDF4LHC15_nnlo_100"), + "luxseed": 123456789, + "eps_base": 1e-2, } -photon = namedtuple("photon", ["total", "elastic", "inelastic"]) - - -class FakeFiatlux: - def __init__(self, runcard): - self.runcard = runcard - self.alphaem = None - self.qref = None - self.trash1 = None - self.trash2 = None - self.f2 = None - self.fl = None - self.f2lo = None - self.res = photon(0., 0., 0.) - - def PlugAlphaQED(self, alphaem, qref): - self.alphaem = alphaem - self.qref = qref - - def InsertInelasticSplitQ(self, args): - self.trash1 = args[0] - self.trash2 = args[1] - - def PlugStructureFunctions(self, f2, fl, f2lo): - self.f2 = f2 - self.fl = fl - self.f2lo = f2lo - - def EvaluatePhoton(self, x, q): - return self.res - -class FakeEKO: - def __init__(self, path): - self.path = path - self.mu20 = 100**2 - - def __enter__(self): - return self - - def __exit__(self, exc_type: type, _exc_value, _traceback): - pass - +def test_parameters_init(): -class FakeStructureFunction: - def __init__(self, path, pdfs): - self.path = path - self.pdfs = pdfs - self.q2_max = 1e8 - - def fxq(self): - return 0 - - -class FakeF2LO: - def __init__(self, pdfs, theory): - self.pdfs = pdfs - self.theory = theory - - def fxq(self): - return 0 - - -def test_parameters_init(monkeypatch): - monkeypatch.setattr( - structure_functions, "InterpStructureFunction", FakeStructureFunction - ) - monkeypatch.setattr(structure_functions, "F2LO", FakeF2LO) - monkeypatch.setattr(fiatlux, "FiatLux", FakeFiatlux) - monkeypatch.setattr(Photon, "compute_photon_array", lambda *args: np.zeros(196)) - monkeypatch.setattr(EKO, "read", FakeEKO) - - photon = Photon(FakeTheory(), fiatlux_runcard, [1, 2, 3]) - alpha = Alpha(FakeTheory().get_description()) + photon = Photon(TEST_THEORY, FIATLUX_RUNCARD, [1, 2, 3]) + alpha = Alpha(TEST_THEORY.get_description()) np.testing.assert_equal(photon.replicas, [1, 2, 3]) - np.testing.assert_equal(photon.luxpdfset._name, fiatlux_runcard["luxset"].name) - np.testing.assert_equal(photon.additional_errors, fiatlux_runcard["additional_errors"]) - np.testing.assert_equal(photon.luxseed, fiatlux_runcard["luxseed"]) + np.testing.assert_equal(photon.luxpdfset._name, FIATLUX_RUNCARD["luxset"].name) + np.testing.assert_equal(photon.additional_errors._name, "LUXqed17_plus_PDF4LHC15_nnlo_100") + np.testing.assert_equal(photon.luxseed, FIATLUX_RUNCARD["luxseed"]) + np.testing.assert_equal(photon.path_to_eko_photon, TEST_THEORY.path / "eko_photon.tar") + np.testing.assert_equal(photon.q_in, 100.) np.testing.assert_almost_equal( - alpha.alpha_em_ref, FakeTheory().get_description()["alphaqed"] + alpha.alpha_em_ref, TEST_THEORY.get_description()["alphaqed"] ) def test_masses_init(): - alpha = Alpha(FakeTheory().get_description()) + alpha = Alpha(TEST_THEORY.get_description()) np.testing.assert_equal(alpha.thresh_t, np.inf) np.testing.assert_almost_equal(alpha.thresh_b, 4.92) - np.testing.assert_almost_equal(alpha.thresh_c, 1.3) - -def test_set_thresholds_alpha_em(monkeypatch): - monkeypatch.setattr( - structure_functions, "InterpStructureFunction", FakeStructureFunction - ) - monkeypatch.setattr(structure_functions, "F2LO", FakeF2LO) + np.testing.assert_almost_equal(alpha.thresh_c, 1.51) - monkeypatch.setattr(fiatlux, "FiatLux", FakeFiatlux) - monkeypatch.setattr(Photon, "compute_photon_array", lambda *args: np.zeros(196)) +def test_set_thresholds_alpha_em(): - alpha = Alpha(FakeTheory().get_description()) + alpha = Alpha(TEST_THEORY.get_description()) np.testing.assert_almost_equal(alpha.thresh[5], 91.2) np.testing.assert_almost_equal(alpha.thresh[4], 4.92) @@ -152,7 +59,7 @@ def test_set_thresholds_alpha_em(monkeypatch): np.testing.assert_equal(len(alpha.thresh), 3) def test_betas(): - alpha = Alpha(FakeTheory().get_description()) + alpha = Alpha(TEST_THEORY.get_description()) vec_beta0 = [ -0.5305164769729844, -0.6719875374991137, @@ -167,4 +74,4 @@ def test_betas(): ] for nf in range(3, 6 + 1): np.testing.assert_allclose(alpha.beta0[nf], vec_beta0[nf - 3], rtol=1e-7) - np.testing.assert_allclose(alpha.b1[nf], vec_b1[nf - 3], rtol=1e-7) + np.testing.assert_allclose(alpha.b1[nf], vec_b1[nf - 3], rtol=1e-7) \ No newline at end of file From 077e2ed75e4a360d2dbd5ba5c8bf65fa8a8fe2e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 10:38:33 +0200 Subject: [PATCH 069/134] Fix charm mass in test --- validphys2/src/validphys/tests/photon/test_compute.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 927bcada49..7a25e399c2 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -46,14 +46,14 @@ def test_set_thresholds_alpha_em(): np.testing.assert_almost_equal(alpha.thresh[5], 91.2) np.testing.assert_almost_equal(alpha.thresh[4], 4.92) - np.testing.assert_almost_equal(alpha.thresh[3], 1.3) + np.testing.assert_almost_equal(alpha.thresh[3], 51) np.testing.assert_almost_equal(alpha.alpha_thresh[5], 0.01) np.testing.assert_almost_equal( alpha.alpha_thresh[4], alpha.alpha_em_fixed_flavor(4.92, 0.01, 91.2, 5) ) np.testing.assert_almost_equal( alpha.alpha_thresh[3], - alpha.alpha_em_fixed_flavor(1.3, alpha.alpha_thresh[4], 4.92, 4), + alpha.alpha_em_fixed_flavor(1.51, alpha.alpha_thresh[4], 4.92, 4), ) np.testing.assert_equal(len(alpha.alpha_thresh), 3) np.testing.assert_equal(len(alpha.thresh), 3) From 388be7b9fe05cad4703cd43b62104d242c61cad6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 10:41:06 +0200 Subject: [PATCH 070/134] speed up photon computation in test --- validphys2/src/validphys/tests/photon/test_compute.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 7a25e399c2..4f876ccb06 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -21,7 +21,12 @@ def test_parameters_init(): - photon = Photon(TEST_THEORY, FIATLUX_RUNCARD, [1, 2, 3]) + fiatlux_runcard = FIATLUX_RUNCARD.copy() + + # we are not testing the photon here so we make it faster + fiatlux_runcard['eps_base'] = 1e-1 + + photon = Photon(TEST_THEORY, fiatlux_runcard, [1, 2, 3]) alpha = Alpha(TEST_THEORY.get_description()) np.testing.assert_equal(photon.replicas, [1, 2, 3]) From ddc57d34893c8ad75ebd92f27f303994f787b1ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 10:43:27 +0200 Subject: [PATCH 071/134] Fix charm mass in test again --- validphys2/src/validphys/tests/photon/test_compute.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 4f876ccb06..dcf6102d96 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -51,7 +51,7 @@ def test_set_thresholds_alpha_em(): np.testing.assert_almost_equal(alpha.thresh[5], 91.2) np.testing.assert_almost_equal(alpha.thresh[4], 4.92) - np.testing.assert_almost_equal(alpha.thresh[3], 51) + np.testing.assert_almost_equal(alpha.thresh[3], 1.51) np.testing.assert_almost_equal(alpha.alpha_thresh[5], 0.01) np.testing.assert_almost_equal( alpha.alpha_thresh[4], alpha.alpha_em_fixed_flavor(4.92, 0.01, 91.2, 5) From dba334a0da0e92a8714b3e5aa33d515fc6c4d824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Fri, 16 Jun 2023 10:47:17 +0200 Subject: [PATCH 072/134] Fix testing of alpha --- .../src/validphys/tests/photon/test_compute.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index dcf6102d96..2a27bbf63a 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -47,18 +47,20 @@ def test_masses_init(): def test_set_thresholds_alpha_em(): - alpha = Alpha(TEST_THEORY.get_description()) + theory = TEST_THEORY.get_description() + + alpha = Alpha(theory) - np.testing.assert_almost_equal(alpha.thresh[5], 91.2) - np.testing.assert_almost_equal(alpha.thresh[4], 4.92) - np.testing.assert_almost_equal(alpha.thresh[3], 1.51) - np.testing.assert_almost_equal(alpha.alpha_thresh[5], 0.01) + np.testing.assert_almost_equal(alpha.thresh[5], theory["Qedref"]) + np.testing.assert_almost_equal(alpha.thresh[4], theory["mb"]) + np.testing.assert_almost_equal(alpha.thresh[3], theory["mc"]) + np.testing.assert_almost_equal(alpha.alpha_thresh[5], theory["alphaqed"]) np.testing.assert_almost_equal( - alpha.alpha_thresh[4], alpha.alpha_em_fixed_flavor(4.92, 0.01, 91.2, 5) + alpha.alpha_thresh[4], alpha.alpha_em_fixed_flavor(theory["mb"], theory["alphaqed"], theory["Qedref"], 5) ) np.testing.assert_almost_equal( alpha.alpha_thresh[3], - alpha.alpha_em_fixed_flavor(1.51, alpha.alpha_thresh[4], 4.92, 4), + alpha.alpha_em_fixed_flavor(theory["mb"], alpha.alpha_thresh[4], theory["mb"], 4), ) np.testing.assert_equal(len(alpha.alpha_thresh), 3) np.testing.assert_equal(len(alpha.thresh), 3) From 3fa81ba8dbd478b5a32344305b8cd3f74f233d38 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 10:51:20 +0200 Subject: [PATCH 073/134] Fix test_compute --- validphys2/src/validphys/tests/photon/test_compute.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 2a27bbf63a..93aef28c04 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -31,7 +31,7 @@ def test_parameters_init(): np.testing.assert_equal(photon.replicas, [1, 2, 3]) np.testing.assert_equal(photon.luxpdfset._name, FIATLUX_RUNCARD["luxset"].name) - np.testing.assert_equal(photon.additional_errors._name, "LUXqed17_plus_PDF4LHC15_nnlo_100") + np.testing.assert_equal(photon.additional_errors.name, "LUXqed17_plus_PDF4LHC15_nnlo_100") np.testing.assert_equal(photon.luxseed, FIATLUX_RUNCARD["luxseed"]) np.testing.assert_equal(photon.path_to_eko_photon, TEST_THEORY.path / "eko_photon.tar") np.testing.assert_equal(photon.q_in, 100.) @@ -60,7 +60,7 @@ def test_set_thresholds_alpha_em(): ) np.testing.assert_almost_equal( alpha.alpha_thresh[3], - alpha.alpha_em_fixed_flavor(theory["mb"], alpha.alpha_thresh[4], theory["mb"], 4), + alpha.alpha_em_fixed_flavor(theory["mc"], alpha.alpha_thresh[4], theory["mb"], 4), ) np.testing.assert_equal(len(alpha.alpha_thresh), 3) np.testing.assert_equal(len(alpha.thresh), 3) From bb3a1fdc86db5c20d79b4286a4cedd3a59ad4297 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 12:13:51 +0200 Subject: [PATCH 074/134] Add test on photon computation --- .../validphys/tests/photon/test_compute.py | 119 ++++++++++++++++-- 1 file changed, 107 insertions(+), 12 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 93aef28c04..12a2e37e95 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -1,14 +1,19 @@ from collections import namedtuple from pathlib import Path +import tempfile +import fiatlux import numpy as np -from validphys.photon import structure_functions -from validphys.photon.compute import Photon, Alpha -from validphys.core import PDF as PDFset +import yaml + +from eko.io import EKO +from n3fit.io.writer import XGRID from validphys.api import API +from validphys.core import PDF as PDFset +from validphys.photon import structure_functions as sf +from validphys.photon.compute import Alpha, Photon from ..conftest import PDF -from eko.io import EKO TEST_THEORY = API.theoryid(theoryid=398) @@ -19,8 +24,40 @@ "eps_base": 1e-2, } -def test_parameters_init(): +FIATLUX_DEFAULT = { + "apfel": False, + "qed_running": True, + "q2_max": 1e8, + "eps_base": 1e-2, + "eps_rel": 1e-1, # extra precision on any single integration. + "mproton": 0.938, + "mum_proton": 2.792847356, # proton magnetic moment, from + # http://pdglive.lbl.gov/DataBlock.action?node=S016MM which itself + # gets it from arXiv:1203.5425 (CODATA) + # the elastic param type, options: + # dipole + # A1_world_spline + # A1_world_pol_spline + "elastic_param": "A1_world_pol_spline", + "elastic_electric_rescale": 1, + "elastic_magnetic_rescale": 1, + # the inelastic param type, options: + "inelastic_param": "LHAPDF_Hermes_ALLM_CLAS", # Hermes_ALLM_CLAS, LHAPDF_Hermes_ALLM_CLAS + "rescale_r_twist4": 0, + "rescale_r": 1, + "allm_limits": 0, + "rescale_non_resonance": 1, + "rescale_resonance": 1, + "use_mu2_as_upper_limit": False, + "q2min_inel_override": 0.0, + "q2max_inel_override": 1e300, + "lhapdf_transition_q2": 9, + # general + "verbose": False, +} + +def test_parameters_init(): fiatlux_runcard = FIATLUX_RUNCARD.copy() # we are not testing the photon here so we make it faster @@ -34,10 +71,9 @@ def test_parameters_init(): np.testing.assert_equal(photon.additional_errors.name, "LUXqed17_plus_PDF4LHC15_nnlo_100") np.testing.assert_equal(photon.luxseed, FIATLUX_RUNCARD["luxseed"]) np.testing.assert_equal(photon.path_to_eko_photon, TEST_THEORY.path / "eko_photon.tar") - np.testing.assert_equal(photon.q_in, 100.) - np.testing.assert_almost_equal( - alpha.alpha_em_ref, TEST_THEORY.get_description()["alphaqed"] - ) + np.testing.assert_equal(photon.q_in, 100.0) + np.testing.assert_almost_equal(alpha.alpha_em_ref, TEST_THEORY.get_description()["alphaqed"]) + def test_masses_init(): alpha = Alpha(TEST_THEORY.get_description()) @@ -45,8 +81,8 @@ def test_masses_init(): np.testing.assert_almost_equal(alpha.thresh_b, 4.92) np.testing.assert_almost_equal(alpha.thresh_c, 1.51) -def test_set_thresholds_alpha_em(): +def test_set_thresholds_alpha_em(): theory = TEST_THEORY.get_description() alpha = Alpha(theory) @@ -56,7 +92,8 @@ def test_set_thresholds_alpha_em(): np.testing.assert_almost_equal(alpha.thresh[3], theory["mc"]) np.testing.assert_almost_equal(alpha.alpha_thresh[5], theory["alphaqed"]) np.testing.assert_almost_equal( - alpha.alpha_thresh[4], alpha.alpha_em_fixed_flavor(theory["mb"], theory["alphaqed"], theory["Qedref"], 5) + alpha.alpha_thresh[4], + alpha.alpha_em_fixed_flavor(theory["mb"], theory["alphaqed"], theory["Qedref"], 5), ) np.testing.assert_almost_equal( alpha.alpha_thresh[3], @@ -65,6 +102,7 @@ def test_set_thresholds_alpha_em(): np.testing.assert_equal(len(alpha.alpha_thresh), 3) np.testing.assert_equal(len(alpha.thresh), 3) + def test_betas(): alpha = Alpha(TEST_THEORY.get_description()) vec_beta0 = [ @@ -81,4 +119,61 @@ def test_betas(): ] for nf in range(3, 6 + 1): np.testing.assert_allclose(alpha.beta0[nf], vec_beta0[nf - 3], rtol=1e-7) - np.testing.assert_allclose(alpha.b1[nf], vec_b1[nf - 3], rtol=1e-7) \ No newline at end of file + np.testing.assert_allclose(alpha.b1[nf], vec_b1[nf - 3], rtol=1e-7) + + +def test_photon(): + fiatlux_runcard = FIATLUX_RUNCARD.copy() + fiatlux_runcard["additional_errors"] = False + theory = TEST_THEORY.get_description() + + for replica in [1, 2, 3]: + photon = Photon(TEST_THEORY, fiatlux_runcard, [replica]) + + # set up fiatlux + path_to_F2 = TEST_THEORY.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" + path_to_FL = TEST_THEORY.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" + pdfs = FIATLUX_RUNCARD["luxset"].load() + f2 = sf.InterpStructureFunction(path_to_F2, pdfs.members[replica]) + fl = sf.InterpStructureFunction(path_to_FL, pdfs.members[replica]) + f2lo = sf.F2LO(pdfs.members[replica], theory) + with tempfile.NamedTemporaryFile(mode="w") as tmp: + with tmp.file as tmp_file: + tmp_file.write(yaml.dump(FIATLUX_DEFAULT)) + lux = fiatlux.FiatLux(tmp.name) + + alpha = Alpha(theory) + + lux.PlugAlphaQED(alpha.alpha_em, alpha.qref) + lux.InsertInelasticSplitQ( + [ + theory["mb"], + 1e100, + ] + ) + lux.PlugStructureFunctions(f2.fxq, fl.fxq, f2lo.fxq) + photon_fiatlux_qin = np.array([lux.EvaluatePhoton(x, 100**2).total for x in XGRID]) + path_to_eko_photon = TEST_THEORY.path / "eko_photon.tar" + photon_fiatlux_qin /= XGRID + with EKO.read(path_to_eko_photon) as eko: + # construct PDFs + pdfs_init = np.zeros((len(eko.bases.inputpids), len(XGRID))) + for j, pid in enumerate(eko.bases.inputpids): + if pid == 22: + pdfs_init[j] = photon_fiatlux_qin + ph_id = j + else: + if pid not in pdfs.flavors: + continue + pdfs_init[j] = np.array([pdfs.xfxQ(x, 100, replica, pid) / x for x in XGRID]) + + # Apply EKO to PDFs + for _, elem in eko.items(): + pdfs_final = np.einsum("ajbk,bk", elem.operator, pdfs_init) + + photon_Q0 = pdfs_final[ph_id] + photon_fiatlux = XGRID * photon_Q0 + + photon_validphys = photon(XGRID[np.newaxis, :, np.newaxis])[0][0, :, 0] + + np.testing.assert_allclose(photon_fiatlux, photon_validphys, rtol=1e-7) From 3901ba54d8d229a44b15f694a73c0d4adedf7de5 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 12:14:32 +0200 Subject: [PATCH 075/134] Remove unused dependencies --- validphys2/src/validphys/tests/photon/test_compute.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 12a2e37e95..958646a408 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -1,5 +1,3 @@ -from collections import namedtuple -from pathlib import Path import tempfile import fiatlux From f3de6b07cc90146b99797087694a5e990d081371 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 12:25:17 +0200 Subject: [PATCH 076/134] Polish test --- .../validphys/tests/photon/test_compute.py | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 958646a408..85573120bf 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -24,11 +24,7 @@ FIATLUX_DEFAULT = { "apfel": False, - "qed_running": True, - "q2_max": 1e8, - "eps_base": 1e-2, "eps_rel": 1e-1, # extra precision on any single integration. - "mproton": 0.938, "mum_proton": 2.792847356, # proton magnetic moment, from # http://pdglive.lbl.gov/DataBlock.action?node=S016MM which itself # gets it from arXiv:1203.5425 (CODATA) @@ -135,6 +131,15 @@ def test_photon(): f2 = sf.InterpStructureFunction(path_to_F2, pdfs.members[replica]) fl = sf.InterpStructureFunction(path_to_FL, pdfs.members[replica]) f2lo = sf.F2LO(pdfs.members[replica], theory) + + # runcard + fiatlux_default = FIATLUX_DEFAULT.copy() + fiatlux_default['mproton'] = theory['MP'] + fiatlux_default["qed_running"] = bool(np.isclose(theory["Qedref"], theory["Qref"])) + fiatlux_default["q2_max"] = float(f2.q2_max) + fiatlux_default["eps_base"] = FIATLUX_RUNCARD["eps_base"] + + # load fiatlux with tempfile.NamedTemporaryFile(mode="w") as tmp: with tmp.file as tmp_file: tmp_file.write(yaml.dump(FIATLUX_DEFAULT)) @@ -145,15 +150,15 @@ def test_photon(): lux.PlugAlphaQED(alpha.alpha_em, alpha.qref) lux.InsertInelasticSplitQ( [ - theory["mb"], - 1e100, + theory["kbThr"] * theory["mb"], + theory["ktThr"] * theory["mt"] if theory["MaxNfPdf"] == 6 else 1e100, ] ) lux.PlugStructureFunctions(f2.fxq, fl.fxq, f2lo.fxq) - photon_fiatlux_qin = np.array([lux.EvaluatePhoton(x, 100**2).total for x in XGRID]) path_to_eko_photon = TEST_THEORY.path / "eko_photon.tar" - photon_fiatlux_qin /= XGRID with EKO.read(path_to_eko_photon) as eko: + photon_fiatlux_qin = np.array([lux.EvaluatePhoton(x, eko.mu20).total for x in XGRID]) + photon_fiatlux_qin /= XGRID # construct PDFs pdfs_init = np.zeros((len(eko.bases.inputpids), len(XGRID))) for j, pid in enumerate(eko.bases.inputpids): @@ -163,7 +168,9 @@ def test_photon(): else: if pid not in pdfs.flavors: continue - pdfs_init[j] = np.array([pdfs.xfxQ(x, 100, replica, pid) / x for x in XGRID]) + pdfs_init[j] = np.array( + [pdfs.xfxQ(x, np.sqrt(eko.mu20), replica, pid) / x for x in XGRID] + ) # Apply EKO to PDFs for _, elem in eko.items(): From 7550e2d2881f01abc4ce8398c4653f9a9e2f3a82 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 12:26:46 +0200 Subject: [PATCH 077/134] Polish test again --- validphys2/src/validphys/tests/photon/test_compute.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 85573120bf..4b3275f067 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -70,10 +70,11 @@ def test_parameters_init(): def test_masses_init(): - alpha = Alpha(TEST_THEORY.get_description()) + theory = TEST_THEORY.get_description() + alpha = Alpha(theory) np.testing.assert_equal(alpha.thresh_t, np.inf) - np.testing.assert_almost_equal(alpha.thresh_b, 4.92) - np.testing.assert_almost_equal(alpha.thresh_c, 1.51) + np.testing.assert_almost_equal(alpha.thresh_b, theory["mb"]) + np.testing.assert_almost_equal(alpha.thresh_c, theory["mc"]) def test_set_thresholds_alpha_em(): From 98d919fa75ddd9a77bded83e58b79bb7881c76ae Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 13:11:33 +0200 Subject: [PATCH 078/134] Pass test theory to test_structurefunctions.py --- .../validphys/tests/photon/test_compute.py | 2 +- .../tests/photon/test_structurefunctions.py | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 4b3275f067..f875f03ce9 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -19,7 +19,7 @@ "luxset": PDFset(PDF), "additional_errors": PDFset("LUXqed17_plus_PDF4LHC15_nnlo_100"), "luxseed": 123456789, - "eps_base": 1e-2, + "eps_base": 1e-2, # using low precision to speed up tests } FIATLUX_DEFAULT = { diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 984eb2eecd..c2a8dddfff 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -2,7 +2,21 @@ import pineappl import validphys.photon.structure_functions as sf from validphys.lhapdfset import LHAPDFSet +from validphys.api import API +from ..conftest import PDF +from validphys.core import PDF as PDFset +TEST_THEORY = API.theoryid(theoryid=398) +NNPDF40 = PDFset(PDF) + +class ZeroPdfs: + def xfxQ(self, x, Q): + res = {} + for i in range(1, 6 + 1): + res[i] = res[-i] = 0.0 + return res + +TEST_THEORY = API.theoryid(theoryid=398) class ZeroPdfs: def xfxQ(self, x, Q): @@ -125,3 +139,20 @@ def test_F2(monkeypatch): for x in np.geomspace(1e-4, 1.0, 10): for Q in np.geomspace(10, 1000000, 10): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) + +def test_interpolation_grid(): + pdfs = NNPDF40.load() + replica = 1 + for channel in ["F2", "FL"]: + tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" + path_to_fktable = TEST_THEORY.path / tmp + fktable = pineappl.fk_table.FkTable.read(path_to_fktable) + x = np.unique(fktable.bin_left(1)) + q2 = np.unique(fktable.bin_left(0)) + predictions = fktable.convolute_with_one(2212, pdfs.members[replica].xfxQ2) + grid2D = predictions.reshape(len(x), len(q2)) + + struct_func = sf.InterpStructureFunction(path_to_fktable, pdfs.members[replica]) + for i,x_ in enumerate(x): + for j, q2_ in enumerate(q2): + np.testing.assert_allclose(struct_func.fxq(x_, np.sqrt(q2_)), grid2D[i,j], rtol=1e-5) From 4b0ed9c705a011d34d495b20331e49f4518fa0f3 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 13:12:32 +0200 Subject: [PATCH 079/134] Run isort and black on test_structurefunctions.py --- .../tests/photon/test_structurefunctions.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index c2a8dddfff..7c9929327f 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -1,14 +1,17 @@ import numpy as np import pineappl -import validphys.photon.structure_functions as sf -from validphys.lhapdfset import LHAPDFSet + from validphys.api import API -from ..conftest import PDF from validphys.core import PDF as PDFset +from validphys.lhapdfset import LHAPDFSet +import validphys.photon.structure_functions as sf + +from ..conftest import PDF TEST_THEORY = API.theoryid(theoryid=398) NNPDF40 = PDFset(PDF) + class ZeroPdfs: def xfxQ(self, x, Q): res = {} @@ -16,8 +19,10 @@ def xfxQ(self, x, Q): res[i] = res[-i] = 0.0 return res + TEST_THEORY = API.theoryid(theoryid=398) + class ZeroPdfs: def xfxQ(self, x, Q): res = {} @@ -27,7 +32,6 @@ def xfxQ(self, x, Q): def test_zero_pdfs(): - pdfs = ZeroPdfs() fake_theory = { @@ -140,6 +144,7 @@ def test_F2(monkeypatch): for Q in np.geomspace(10, 1000000, 10): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) + def test_interpolation_grid(): pdfs = NNPDF40.load() replica = 1 @@ -153,6 +158,8 @@ def test_interpolation_grid(): grid2D = predictions.reshape(len(x), len(q2)) struct_func = sf.InterpStructureFunction(path_to_fktable, pdfs.members[replica]) - for i,x_ in enumerate(x): + for i, x_ in enumerate(x): for j, q2_ in enumerate(q2): - np.testing.assert_allclose(struct_func.fxq(x_, np.sqrt(q2_)), grid2D[i,j], rtol=1e-5) + np.testing.assert_allclose( + struct_func.fxq(x_, np.sqrt(q2_)), grid2D[i, j], rtol=1e-5 + ) From 10dd7e2d0b4de4d472bb205c42279759c8f29685 Mon Sep 17 00:00:00 2001 From: juacrumar Date: Fri, 16 Jun 2023 13:19:37 +0200 Subject: [PATCH 080/134] modify the call to generate_block to make it compatible with eko 0.13.5 --- conda-recipe/meta.yaml | 2 +- n3fit/src/evolven3fit_new/eko_utils.py | 23 +++-------------------- n3fit/src/evolven3fit_new/evolve.py | 21 +++++++++++++++------ 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml index fb9edea8bf..d2c41ea803 100644 --- a/conda-recipe/meta.yaml +++ b/conda-recipe/meta.yaml @@ -51,7 +51,7 @@ requirements: - sphinxcontrib-bibtex - curio >=1.0 - pineappl >=0.5.8 - - eko >=0.13.4,<0.14 + - eko >=0.13.5,<0.14 - banana-hep >=0.6.8 - fiatlux diff --git a/n3fit/src/evolven3fit_new/eko_utils.py b/n3fit/src/evolven3fit_new/eko_utils.py index 7eabc1b009..4203a3b128 100644 --- a/n3fit/src/evolven3fit_new/eko_utils.py +++ b/n3fit/src/evolven3fit_new/eko_utils.py @@ -87,7 +87,7 @@ def construct_eko_cards( legacy_class = runcards.Legacy(theory, {}) theory_card = legacy_class.new_theory - # construct operator card + # Generate the q2grid, if q_fin and q_points are None, use `nf0` to select a default q2_grid = utils.generate_q2grid( mu0, q_fin, @@ -99,6 +99,8 @@ def construct_eko_cards( }, theory["nf0"], ) + + # construct operator card op_card = default_op_card masses = np.array([theory["mc"], theory["mb"], theory["mt"]]) ** 2 thresholds_ratios = np.array([thresholds["c"], thresholds["b"], thresholds["t"]]) ** 2 @@ -144,22 +146,3 @@ def construct_eko_cards( op_card = runcards.OperatorCard.from_dict(op_card) return theory_card, op_card - - -def split_evolgrid(evolgrid): - """Split the evolgrid in blocks according to the number of flavors.""" - evolgrid_index_list = [] - evolgrid.sort() - starting_nf = evolgrid[0][1] - for evo_point in evolgrid: - current_nf = evo_point[1] - if current_nf != starting_nf: - evolgrid_index_list.append(evolgrid.index(evo_point)) - starting_nf = current_nf - start_index = 0 - evolgrid_list = [] - for index in evolgrid_index_list: - evolgrid_list.append(evolgrid[start_index:index]) - start_index = index - evolgrid_list.append(evolgrid[start_index:]) - return evolgrid_list diff --git a/n3fit/src/evolven3fit_new/evolve.py b/n3fit/src/evolven3fit_new/evolve.py index 8cf5e28cc6..8caab4e3e2 100644 --- a/n3fit/src/evolven3fit_new/evolve.py +++ b/n3fit/src/evolven3fit_new/evolve.py @@ -1,3 +1,4 @@ +from collections import defaultdict import logging import pathlib import sys @@ -178,19 +179,27 @@ def evolve_exportgrid(exportgrid, eko, x_grid, qed): # generate block to dump targetgrid = eko.bases.targetgrid.tolist() - def ev_pdf(pid, x, Q2): - return x * evolved_pdf[Q2]["pdfs"][pid][targetgrid.index(x)] + # Finally separate by nf block (and order per nf/q) + by_nf = defaultdict(list) + for q, nf in sorted(eko.evolgrid, key=lambda ep: ep[1]): + by_nf[nf].append(q) + q2block_per_nf = {nf: sorted(qs) for nf, qs in by_nf.items()} - evolgrid_list = eko_utils.split_evolgrid(eko.evolgrid) blocks = [] - for evgrid in evolgrid_list: + for nf, q2grid in q2block_per_nf.items(): + + def pdf_xq2(pid, x, Q2): + x_idx = targetgrid.index(x) + return x * evolved_pdf[(Q2, nf)]["pdfs"][pid][x_idx] + block = genpdf.generate_block( - ev_pdf, + pdf_xq2, xgrid=targetgrid, - evolgrid=evgrid, + sorted_q2grid=q2grid, pids=basis_rotation.flavor_basis_pids, ) blocks.append(block) + return blocks From 5ede6f4ed07ff34d6e1f31dc396a7bbe84f5d965 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 13:21:11 +0200 Subject: [PATCH 081/134] Test init parameters of test_structurefunctions.py --- .../tests/photon/test_structurefunctions.py | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 7c9929327f..12944a23d4 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -20,9 +20,6 @@ def xfxQ(self, x, Q): return res -TEST_THEORY = API.theoryid(theoryid=398) - - class ZeroPdfs: def xfxQ(self, x, Q): res = {} @@ -144,22 +141,37 @@ def test_F2(monkeypatch): for Q in np.geomspace(10, 1000000, 10): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) - -def test_interpolation_grid(): +def test_params(): pdfs = NNPDF40.load() replica = 1 + theory = TEST_THEORY.get_description() for channel in ["F2", "FL"]: tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" path_to_fktable = TEST_THEORY.path / tmp - fktable = pineappl.fk_table.FkTable.read(path_to_fktable) - x = np.unique(fktable.bin_left(1)) - q2 = np.unique(fktable.bin_left(0)) - predictions = fktable.convolute_with_one(2212, pdfs.members[replica].xfxQ2) - grid2D = predictions.reshape(len(x), len(q2)) - struct_func = sf.InterpStructureFunction(path_to_fktable, pdfs.members[replica]) - for i, x_ in enumerate(x): - for j, q2_ in enumerate(q2): - np.testing.assert_allclose( - struct_func.fxq(x_, np.sqrt(q2_)), grid2D[i, j], rtol=1e-5 - ) + np.testing.assert_allclose(struct_func.q2_max, 1e8) + f2lo = sf.F2LO(pdfs.members[replica], theory) + np.testing.assert_allclose(f2lo.thresh_c, theory["mc"]) + np.testing.assert_allclose(f2lo.thresh_b, theory["mb"]) + np.testing.assert_allclose(f2lo.thresh_t, np.inf) + + + +def test_interpolation_grid(): + pdfs = NNPDF40.load() + for replica in [1, 2, 3]: + for channel in ["F2", "FL"]: + tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" + path_to_fktable = TEST_THEORY.path / tmp + fktable = pineappl.fk_table.FkTable.read(path_to_fktable) + x = np.unique(fktable.bin_left(1)) + q2 = np.unique(fktable.bin_left(0)) + predictions = fktable.convolute_with_one(2212, pdfs.members[replica].xfxQ2) + grid2D = predictions.reshape(len(x), len(q2)) + + struct_func = sf.InterpStructureFunction(path_to_fktable, pdfs.members[replica]) + for i, x_ in enumerate(x): + for j, q2_ in enumerate(q2): + np.testing.assert_allclose( + struct_func.fxq(x_, np.sqrt(q2_)), grid2D[i, j], rtol=1e-5 + ) From 52e91306085dab2490f419a44c0ee60bc44c4f99 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 13:21:51 +0200 Subject: [PATCH 082/134] Run isort and black on test_structurefunctions.py --- .../src/validphys/tests/photon/test_structurefunctions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 12944a23d4..df1edf6faf 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -141,6 +141,7 @@ def test_F2(monkeypatch): for Q in np.geomspace(10, 1000000, 10): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) + def test_params(): pdfs = NNPDF40.load() replica = 1 @@ -156,7 +157,6 @@ def test_params(): np.testing.assert_allclose(f2lo.thresh_t, np.inf) - def test_interpolation_grid(): pdfs = NNPDF40.load() for replica in [1, 2, 3]: From 370d0dd72a6c3d95def92e61a476fb94f8d439c6 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 14:34:57 +0200 Subject: [PATCH 083/134] Use API to install pdfset --- validphys2/src/validphys/tests/photon/test_compute.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index f875f03ce9..2b217bd448 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -17,7 +17,7 @@ FIATLUX_RUNCARD = { "luxset": PDFset(PDF), - "additional_errors": PDFset("LUXqed17_plus_PDF4LHC15_nnlo_100"), + "additional_errors": API.pdf(pdf='LUXqed17_plus_PDF4LHC15_nnlo_100'), "luxseed": 123456789, "eps_base": 1e-2, # using low precision to speed up tests } From b97450d097a14ba2409ebd622924bc2ee6141bcd Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 15:01:33 +0200 Subject: [PATCH 084/134] Refactor test_structurefunctions.py and add docstrings --- .../validphys/tests/photon/test_compute.py | 10 +- .../tests/photon/test_structurefunctions.py | 114 ++++-------------- 2 files changed, 33 insertions(+), 91 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 2b217bd448..00da494130 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -52,13 +52,13 @@ def test_parameters_init(): + "test initailization of the parameters from Photon class" fiatlux_runcard = FIATLUX_RUNCARD.copy() # we are not testing the photon here so we make it faster fiatlux_runcard['eps_base'] = 1e-1 photon = Photon(TEST_THEORY, fiatlux_runcard, [1, 2, 3]) - alpha = Alpha(TEST_THEORY.get_description()) np.testing.assert_equal(photon.replicas, [1, 2, 3]) np.testing.assert_equal(photon.luxpdfset._name, FIATLUX_RUNCARD["luxset"].name) @@ -66,10 +66,10 @@ def test_parameters_init(): np.testing.assert_equal(photon.luxseed, FIATLUX_RUNCARD["luxseed"]) np.testing.assert_equal(photon.path_to_eko_photon, TEST_THEORY.path / "eko_photon.tar") np.testing.assert_equal(photon.q_in, 100.0) - np.testing.assert_almost_equal(alpha.alpha_em_ref, TEST_THEORY.get_description()["alphaqed"]) def test_masses_init(): + "test thresholds in Alpha class" theory = TEST_THEORY.get_description() alpha = Alpha(theory) np.testing.assert_equal(alpha.thresh_t, np.inf) @@ -78,10 +78,12 @@ def test_masses_init(): def test_set_thresholds_alpha_em(): + "test value of alpha_em at threshold values" theory = TEST_THEORY.get_description() alpha = Alpha(theory) + np.testing.assert_almost_equal(alpha.alpha_em_ref, theory["alphaqed"]) np.testing.assert_almost_equal(alpha.thresh[5], theory["Qedref"]) np.testing.assert_almost_equal(alpha.thresh[4], theory["mb"]) np.testing.assert_almost_equal(alpha.thresh[3], theory["mc"]) @@ -99,6 +101,7 @@ def test_set_thresholds_alpha_em(): def test_betas(): + "test betas for different nf" alpha = Alpha(TEST_THEORY.get_description()) vec_beta0 = [ -0.5305164769729844, @@ -118,6 +121,9 @@ def test_betas(): def test_photon(): + """test that photon coming out of Photon interpolator matches the photon array + for XGRID points + """ fiatlux_runcard = FIATLUX_RUNCARD.copy() fiatlux_runcard["additional_errors"] = False theory = TEST_THEORY.get_description() diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index df1edf6faf..14f6b227bf 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -17,42 +17,12 @@ def xfxQ(self, x, Q): res = {} for i in range(1, 6 + 1): res[i] = res[-i] = 0.0 + res[21] = 0.0 + res[22] = 0.0 return res - - -class ZeroPdfs: - def xfxQ(self, x, Q): - res = {} - for i in range(1, 6 + 1): - res[i] = res[-i] = 0.0 - return res - - -def test_zero_pdfs(): - pdfs = ZeroPdfs() - - fake_theory = { - "mc": 1.3, - "mb": 5.0, - "mt": 172.0, - "kcThr": 1.0, - "kbThr": 1.0, - "ktThr": 1.0, - "MaxNfPdf": 5, - } - - f2lo = sf.F2LO(pdfs, fake_theory) - - np.testing.assert_equal(f2lo.thresh_t, np.inf) - - for x in np.geomspace(1e-4, 1.0, 10): - for Q in np.geomspace(10, 1000000, 10): - np.testing.assert_allclose(f2lo.fxq(x, Q), 0.0) - - -class FakeSet: - def get_entry(self, string): - return 0 + + def xfxQ2(self, i, x, Q2): + return self.xfxQ(x, np.sqrt(Q2))[i] class ZeroFKTable: @@ -73,76 +43,41 @@ def convolute_with_one(self, pdgid, xfxQ2): return np.zeros((10, 10)) -class OnePdf: - def __init__(self): - self.ao = 1 - - def xfxQ(self, x, Q): - return 1.0 - - def xfxQ2(self, x, Q): - return 1.0**2 - - def set(self): - return FakeSet() - - -class OneFKTable: - def __init__(self, path): - self.path = path - self.xgrid = np.geomspace(1e-4, 1.0, 10) - self.qgrid = np.geomspace(1.65, 1000, 10) - - def bin_left(self, i): - if i == 1: - return self.xgrid - if i == 0: - return self.qgrid - else: - return 0 - - def convolute_with_one(self, pdgid, xfxQ2): - return np.zeros((10, 10)) - +def test_zero_pdfs(): + "test that a zero PDF gives a zero structure function" + pdfs = ZeroPdfs() + theory = TEST_THEORY.get_description() + path_to_F2 = TEST_THEORY.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" + path_to_FL = TEST_THEORY.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" -class ZeroPdf: - def __init__(self): - self.ao = 1 + f2 = sf.InterpStructureFunction(path_to_F2, pdfs) + fl = sf.InterpStructureFunction(path_to_FL, pdfs) + f2lo = sf.F2LO(pdfs, theory) - def xfxQ(self, x, Q): - return 1.0 + np.testing.assert_equal(f2lo.thresh_t, np.inf) - def xfxQ2(self, x, Q): - return 1.0**2 + for x in np.geomspace(1e-4, 1.0, 10): + for Q in np.geomspace(10, 1000000, 10): + np.testing.assert_allclose(f2lo.fxq(x, Q), 0.0) + np.testing.assert_allclose(f2.fxq(x, Q), 0.0) + np.testing.assert_allclose(fl.fxq(x, Q), 0.0) - def set(self): - return FakeSet() -def test_F2(monkeypatch): - # grid put to 0 and pdf put to 1 +def test_zero_grid(monkeypatch): + "test that a zero grid gives a zero structure function" monkeypatch.setattr(pineappl.fk_table.FkTable, "read", ZeroFKTable) - structurefunc = sf.InterpStructureFunction("", OnePdf()) - for x in np.geomspace(1e-4, 1.0, 10): - for Q in np.geomspace(10, 1000000, 10): - np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) - # grid put to 0 and real pdf - pdf = LHAPDFSet("NNPDF40_nnlo_as_01180", "replicas") + pdf = PDFset(PDF).load() structurefunc = sf.InterpStructureFunction("", pdf.central_member) for x in np.geomspace(1e-4, 1.0, 10): for Q in np.geomspace(10, 1000000, 10): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) - # grid put to 1 and pdf put to 0 - monkeypatch.setattr(pineappl.fk_table.FkTable, "read", OneFKTable) - structurefunc = sf.InterpStructureFunction("", ZeroPdf()) - for x in np.geomspace(1e-4, 1.0, 10): - for Q in np.geomspace(10, 1000000, 10): - np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) def test_params(): + "test initialization of parameters" pdfs = NNPDF40.load() replica = 1 theory = TEST_THEORY.get_description() @@ -158,6 +93,7 @@ def test_params(): def test_interpolation_grid(): + """test that the values coming out of InterpStructureFunction match the grid ones""" pdfs = NNPDF40.load() for replica in [1, 2, 3]: for channel in ["F2", "FL"]: From 3e548a88a38a00d0d0b1a07d58a34c9e24abe6df Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 15:07:47 +0200 Subject: [PATCH 085/134] Small modification --- .../src/validphys/tests/photon/test_structurefunctions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 14f6b227bf..53dc7c1030 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -68,8 +68,8 @@ def test_zero_grid(monkeypatch): "test that a zero grid gives a zero structure function" monkeypatch.setattr(pineappl.fk_table.FkTable, "read", ZeroFKTable) # grid put to 0 and real pdf - pdf = PDFset(PDF).load() - structurefunc = sf.InterpStructureFunction("", pdf.central_member) + pdfs = NNPDF40.load() + structurefunc = sf.InterpStructureFunction("", pdfs.central_member) for x in np.geomspace(1e-4, 1.0, 10): for Q in np.geomspace(10, 1000000, 10): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) From b40db35c19da9c82af9e59c41b9985fa10877318 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 15:20:33 +0200 Subject: [PATCH 086/134] Use FIATLUX_DEFAULT from photon.compute --- .../validphys/tests/photon/test_compute.py | 32 ++----------------- .../tests/photon/test_structurefunctions.py | 3 +- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 00da494130..948ed3d3db 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -9,7 +9,7 @@ from validphys.api import API from validphys.core import PDF as PDFset from validphys.photon import structure_functions as sf -from validphys.photon.compute import Alpha, Photon +from validphys.photon.compute import Alpha, Photon, FIATLUX_DEFAULT from ..conftest import PDF @@ -22,34 +22,6 @@ "eps_base": 1e-2, # using low precision to speed up tests } -FIATLUX_DEFAULT = { - "apfel": False, - "eps_rel": 1e-1, # extra precision on any single integration. - "mum_proton": 2.792847356, # proton magnetic moment, from - # http://pdglive.lbl.gov/DataBlock.action?node=S016MM which itself - # gets it from arXiv:1203.5425 (CODATA) - # the elastic param type, options: - # dipole - # A1_world_spline - # A1_world_pol_spline - "elastic_param": "A1_world_pol_spline", - "elastic_electric_rescale": 1, - "elastic_magnetic_rescale": 1, - # the inelastic param type, options: - "inelastic_param": "LHAPDF_Hermes_ALLM_CLAS", # Hermes_ALLM_CLAS, LHAPDF_Hermes_ALLM_CLAS - "rescale_r_twist4": 0, - "rescale_r": 1, - "allm_limits": 0, - "rescale_non_resonance": 1, - "rescale_resonance": 1, - "use_mu2_as_upper_limit": False, - "q2min_inel_override": 0.0, - "q2max_inel_override": 1e300, - "lhapdf_transition_q2": 9, - # general - "verbose": False, -} - def test_parameters_init(): "test initailization of the parameters from Photon class" @@ -69,7 +41,7 @@ def test_parameters_init(): def test_masses_init(): - "test thresholds in Alpha class" + "test thresholds values in Alpha class" theory = TEST_THEORY.get_description() alpha = Alpha(theory) np.testing.assert_equal(alpha.thresh_t, np.inf) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 53dc7c1030..8798a0e30f 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -3,7 +3,6 @@ from validphys.api import API from validphys.core import PDF as PDFset -from validphys.lhapdfset import LHAPDFSet import validphys.photon.structure_functions as sf from ..conftest import PDF @@ -66,8 +65,8 @@ def test_zero_pdfs(): def test_zero_grid(monkeypatch): "test that a zero grid gives a zero structure function" + # patching pineappl.fk_table.FkTable to use ZeroFKTable monkeypatch.setattr(pineappl.fk_table.FkTable, "read", ZeroFKTable) - # grid put to 0 and real pdf pdfs = NNPDF40.load() structurefunc = sf.InterpStructureFunction("", pdfs.central_member) for x in np.geomspace(1e-4, 1.0, 10): From 0958b08b6a03f2702f3eeec24d934cc9537bd825 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Fri, 16 Jun 2023 15:26:04 +0200 Subject: [PATCH 087/134] Remove unused import --- n3fit/src/n3fit/tests/test_evolven3fit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/n3fit/src/n3fit/tests/test_evolven3fit.py b/n3fit/src/n3fit/tests/test_evolven3fit.py index aeee049ee5..820d867891 100644 --- a/n3fit/src/n3fit/tests/test_evolven3fit.py +++ b/n3fit/src/n3fit/tests/test_evolven3fit.py @@ -12,7 +12,6 @@ from reportengine.compat import yaml from validphys.api import API from validphys.pdfbases import PIDS_DICT -from validphys.core import TheoryIDSpec REGRESSION_FOLDER = pathlib.Path(__file__).with_name("regressions") log = logging.getLogger(__name__) From 61c5bb901176ddb82c6be37c492e98cfd8d8faac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 19 Jun 2023 10:14:13 +0200 Subject: [PATCH 088/134] Remove variable NNPDF40 --- .../src/validphys/tests/photon/test_structurefunctions.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 8798a0e30f..52f68f0a22 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -8,7 +8,6 @@ from ..conftest import PDF TEST_THEORY = API.theoryid(theoryid=398) -NNPDF40 = PDFset(PDF) class ZeroPdfs: @@ -67,7 +66,7 @@ def test_zero_grid(monkeypatch): "test that a zero grid gives a zero structure function" # patching pineappl.fk_table.FkTable to use ZeroFKTable monkeypatch.setattr(pineappl.fk_table.FkTable, "read", ZeroFKTable) - pdfs = NNPDF40.load() + pdfs = PDFset(PDF).load() structurefunc = sf.InterpStructureFunction("", pdfs.central_member) for x in np.geomspace(1e-4, 1.0, 10): for Q in np.geomspace(10, 1000000, 10): @@ -77,7 +76,7 @@ def test_zero_grid(monkeypatch): def test_params(): "test initialization of parameters" - pdfs = NNPDF40.load() + pdfs = PDFset(PDF).load() replica = 1 theory = TEST_THEORY.get_description() for channel in ["F2", "FL"]: @@ -93,7 +92,7 @@ def test_params(): def test_interpolation_grid(): """test that the values coming out of InterpStructureFunction match the grid ones""" - pdfs = NNPDF40.load() + pdfs = PDFset(PDF).load() for replica in [1, 2, 3]: for channel in ["F2", "FL"]: tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" From 53d7c73728050d092065714fbc6671cf0edda27b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 19 Jun 2023 10:28:52 +0200 Subject: [PATCH 089/134] Add comment --- validphys2/src/validphys/photon/compute.py | 1 + 1 file changed, 1 insertion(+) diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index 189f801b97..52c3b04c78 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -17,6 +17,7 @@ log = logging.getLogger(__name__) +# not the complete fiatlux runcard since some parameters are set in the code FIATLUX_DEFAULT = { "apfel": False, "eps_rel": 1e-1, # extra precision on any single integration. From 95f1e2416d73f80f0d7180e42f7b214c8eb169ad Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Mon, 17 Apr 2023 09:21:05 +0100 Subject: [PATCH 090/134] Allow categorical variables in smpdf plots Fix crash in plot_smpdf when the variable in the color axis is categorical, such as for the W and Z total cross sections. Encode the categorical variables as integers and use an appropriate color map to display them. The implementation feels a bit untidy, with some variables acting at a distance, but there doesn't seem to be an easy better way considering that we'd like the color bar to be the same for all figures. Also, the fact that np.unique sorts the output may not be what we want. See https://github.com/numpy/numpy/issues/8621. But don't want to make it more complicated. --- validphys2/src/validphys/dataplots.py | 112 ++++++++++++++++---------- 1 file changed, 71 insertions(+), 41 deletions(-) diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index 8ae5fe1012..15aeec77c0 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -4,10 +4,11 @@ """ from __future__ import generator_stop +import logging +import itertools from collections import defaultdict from collections.abc import Sequence -import itertools -import logging + import matplotlib as mpl from matplotlib import cm @@ -387,6 +388,7 @@ def _plot_fancy_impl( lb = labellist[normalize_to] ax.set_ylabel(f"Ratio to {lb if lb else norm_result.label}") + ax.legend().set_zorder(100000) ax.set_xlabel(info.xlabel) fig.tight_layout() @@ -851,7 +853,7 @@ def plot_replica_sum_rules(pdf, sum_rules, Q): @figuregen -def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold: float = 0.9): +def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): """ Plot the correlations between the change in the observable and the change in the PDF in (x,fl) space. @@ -879,7 +881,6 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold: float = 0.9): info = get_info(dataset) table = kitable(dataset, info) - figby = sane_groupby_iter(table, info.figure_by) basis = obs_pdf_correlations.basis @@ -891,54 +892,83 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold: float = 0.9): plotting_var = info.get_xcol(table) - # TODO: vmin vmax should be global or by figure? - vmin, vmax = min(plotting_var), max(plotting_var) - if info.x_scale == 'log': - norm = mcolors.LogNorm(vmin, vmax) + categorical = not np.issubdtype(plotting_var.dtype, np.number) + if categorical: + # Categorical + keys, values = np.unique(plotting_var, return_inverse=True) + plotting_var = values + nunique = len(keys) + if nunique <= len(cm.Set2.colors): + cmap = mcolors.ListedColormap(cm.Set2.colors[:nunique]) + else: + cmap = cm.viridis.resample(nunique) + bins = np.linspace(0, nunique, nunique + 1) + norm = mcolors.BoundaryNorm(bins, nunique) + else: - norm = mcolors.Normalize(vmin, vmax) - # http://stackoverflow.com/a/11558629/1007990 - sm = cm.ScalarMappable(cmap=cm.viridis, norm=norm) + cmap = cm.viridis + #TODO: vmin vmax should be global or by figure? + vmin,vmax = min(plotting_var), max(plotting_var) + if info.x_scale == 'log': + norm = mcolors.LogNorm(vmin, vmax) + else: + norm = mcolors.Normalize(vmin, vmax) + + + table["__plotting_var"] = plotting_var + sm = cm.ScalarMappable(cmap=cmap, norm=norm) + + figby = sane_groupby_iter(table, info.figure_by) for same_vals, fb in figby: - grid = fullgrid[np.asarray(fb.index), ...] + grid = fullgrid[ np.asarray(fb.index),...] + - # Use the maximum absolute correlation for plotting purposes + #Use the maximum absolute correlation for plotting purposes absgrid = np.max(np.abs(grid), axis=0) - mark_mask = absgrid > np.max(absgrid) * mark_threshold + mark_mask = absgrid > np.max(absgrid)*mark_threshold label = info.group_label(same_vals, info.figure_by) - # TODO: PY36ScalarMappable - # TODO Improve title? - title = "%s %s\n[%s]" % (info.dataset_label, '(%s)' % label if label else '', pdf.label) - - # Start plotting - w, h = mpl.rcParams["figure.figsize"] - h *= 2.5 - fig, axes = plotutils.subplots(nrows=nf, sharex=True, figsize=(w, h), sharey=True) + #TODO: PY36ScalarMappable + #TODO Improve title? + title = "%s %s\n[%s]" % (info.dataset_label, '(%s)'%label if label else '' ,pdf.label) + + #Start plotting + w,h = plt.rcParams["figure.figsize"] + h*=2.5 + fig,axes = plt.subplots(nrows=nf ,sharex=True, figsize=(w,h), sharey=True) fig.suptitle(title) - colors = sm.to_rgba(info.get_xcol(fb)) + colors = sm.to_rgba(fb["__plotting_var"]) for flindex, (ax, fl) in enumerate(zip(axes, fls)): - for i, color in enumerate(colors): - ax.plot(x, grid[i, flindex, :].T, color=color) + for i,color in enumerate(colors): + ax.plot(x, grid[i,flindex,:].T, color=color) - flmask = mark_mask[flindex, :] + + flmask = mark_mask[flindex,:] ranges = split_ranges(x, flmask, filter_falses=True) for r in ranges: ax.axvspan(r[0], r[-1], color='#eeeeff') - ax.set_ylabel("$%s$" % basis.elementlabel(fl)) + ax.set_ylabel("$%s$"%basis.elementlabel(fl)) ax.set_xscale(scale_from_grid(obs_pdf_correlations)) - ax.set_ylim(-1, 1) + ax.set_ylim(-1,1) ax.set_xlim(x[0], x[-1]) ax.set_xlabel('$x$') - # fig.subplots_adjust(hspace=0) + #fig.subplots_adjust(hspace=0) - fig.colorbar(sm, ax=axes.ravel().tolist(), label=info.xlabel, aspect=100) - # TODO: Fix title for this - # fig.tight_layout() - yield fig + cbar = fig.colorbar( + sm, + ax=axes.ravel().tolist(), + label=info.xlabel, + aspect=100, + ) + if categorical: + cbar.set_ticks(np.linspace(0.5, nunique - 0.5, nunique)) + cbar.ax.set_yticklabels(keys) + #TODO: Fix title for this + #fig.tight_layout() + yield fig @figure def plot_obscorrs(corrpair_datasets, obs_obs_correlations, pdf): @@ -1225,14 +1255,14 @@ def plot_xq2( highlight_datasets = set() def next_options(): - # Get the colors - prop_settings = mpl.rcParams['axes.prop_cycle'] - # Apparently calling the object gives us an infinite cycler + #Get the colors + prop_settings = plt.rcParams['axes.prop_cycle'] + #Apparently calling the object gives us an infinite cycler settings_cycler = prop_settings() - # So far, I don't understand how this is done with mpl "cycler" - # objects, or wether I like it. So far this is godd enough - for markeropts, settings in zip(plotutils.marker_iter_plot(), settings_cycler): - # Override last with first + #So far, I don't understand how this is done with mpl "cycler" + #objects, or wether I like it. So far this is godd enough + for markeropts, settings in zip(plotutils.marker_iter_plot(), settings_cycler): + #Override last with first options = { 'linestyle': 'none', **markeropts, @@ -1243,7 +1273,7 @@ def next_options(): next_opts = next_options() key_options = {} - for experiment, commondata, fitted, masked, group in dataset_inputs_by_groups_xq2map: + for (experiment, commondata, fitted, masked, group) in dataset_inputs_by_groups_xq2map: info = get_info(commondata) if marker_by == 'process type': key = info.process_description From ced398162ee853ce820d1cec51bfea3b5f10cbe4 Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Fri, 26 May 2023 11:53:35 +0100 Subject: [PATCH 091/134] Add test and improve variables --- validphys2/src/validphys/dataplots.py | 32 ++++++++---------- .../baseline/test_plot_smpdf_categorical.png | Bin 0 -> 139010 bytes validphys2/src/validphys/tests/conftest.py | 12 +++++++ validphys2/src/validphys/tests/test_plots.py | 5 +++ 4 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 validphys2/src/validphys/tests/baseline/test_plot_smpdf_categorical.png diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index 15aeec77c0..3999ff6386 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -4,11 +4,10 @@ """ from __future__ import generator_stop -import logging -import itertools from collections import defaultdict from collections.abc import Sequence - +import itertools +import logging import matplotlib as mpl from matplotlib import cm @@ -895,20 +894,20 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): categorical = not np.issubdtype(plotting_var.dtype, np.number) if categorical: # Categorical - keys, values = np.unique(plotting_var, return_inverse=True) + categorical_keys, values = np.unique(plotting_var, return_inverse=True) plotting_var = values - nunique = len(keys) - if nunique <= len(cm.Set2.colors): - cmap = mcolors.ListedColormap(cm.Set2.colors[:nunique]) + num_categories = len(categorical_keys) + if num_categories <= len(cm.Set2.colors): + cmap = mcolors.ListedColormap(cm.Set2.colors[:num_categories]) else: - cmap = cm.viridis.resample(nunique) - bins = np.linspace(0, nunique, nunique + 1) - norm = mcolors.BoundaryNorm(bins, nunique) + cmap = cm.viridis.resample(num_categories) + bins = np.linspace(0, num_categories, num_categories + 1) + norm = mcolors.BoundaryNorm(bins, num_categories) else: cmap = cm.viridis #TODO: vmin vmax should be global or by figure? - vmin,vmax = min(plotting_var), max(plotting_var) + vmin, vmax = min(plotting_var), max(plotting_var) if info.x_scale == 'log': norm = mcolors.LogNorm(vmin, vmax) else: @@ -931,12 +930,12 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): label = info.group_label(same_vals, info.figure_by) #TODO: PY36ScalarMappable #TODO Improve title? - title = "%s %s\n[%s]" % (info.dataset_label, '(%s)'%label if label else '' ,pdf.label) + title = f"{info.dataset_label} {label if label else ''}\n[{pdf.label}]" #Start plotting - w,h = plt.rcParams["figure.figsize"] + w,h = mpl.rcParams["figure.figsize"] h*=2.5 - fig,axes = plt.subplots(nrows=nf ,sharex=True, figsize=(w,h), sharey=True) + fig, axes = plotutils.subplots(nrows=nf, sharex=True, figsize=(w,h), sharey=True) fig.suptitle(title) colors = sm.to_rgba(fb["__plotting_var"]) for flindex, (ax, fl) in enumerate(zip(axes, fls)): @@ -954,7 +953,6 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): ax.set_ylim(-1,1) ax.set_xlim(x[0], x[-1]) ax.set_xlabel('$x$') - #fig.subplots_adjust(hspace=0) cbar = fig.colorbar( sm, @@ -963,8 +961,8 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): aspect=100, ) if categorical: - cbar.set_ticks(np.linspace(0.5, nunique - 0.5, nunique)) - cbar.ax.set_yticklabels(keys) + cbar.set_ticks(np.linspace(0.5, num_categories - 0.5, num_categories)) + cbar.ax.set_yticklabels(categorical_keys) #TODO: Fix title for this #fig.tight_layout() diff --git a/validphys2/src/validphys/tests/baseline/test_plot_smpdf_categorical.png b/validphys2/src/validphys/tests/baseline/test_plot_smpdf_categorical.png new file mode 100644 index 0000000000000000000000000000000000000000..42349bad9596889cf930c5e5b1ee777709c3bf28 GIT binary patch literal 139010 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 Date: Fri, 26 May 2023 12:16:29 +0100 Subject: [PATCH 092/134] Remove figby in atlas total cross section Overall it makes little sense to separate 3 points into 2+1 --- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml index c05aa86e87..73bbec06cb 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml @@ -3,8 +3,7 @@ dataset_label: "ATLAS $W,Z$ inclusive 13 TeV" x: " " y_label: $\sigma^{fid}$ (fb) -figure_by: - - boson + extra_labels: " ": - $W^-$ From 9b861be894054caa30c699bb554908807f5dd774 Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Mon, 19 Jun 2023 10:50:17 +0100 Subject: [PATCH 093/134] Improve comments --- validphys2/src/validphys/dataplots.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index 3999ff6386..7a66a2e3e9 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -852,7 +852,7 @@ def plot_replica_sum_rules(pdf, sum_rules, Q): @figuregen -def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): +def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold: float = 0.9): """ Plot the correlations between the change in the observable and the change in the PDF in (x,fl) space. @@ -893,7 +893,8 @@ def plot_smpdf(pdf, dataset, obs_pdf_correlations, mark_threshold:float=0.9): categorical = not np.issubdtype(plotting_var.dtype, np.number) if categorical: - # Categorical + # Plot lines using a categorical color map (for a reasonable number of + # categories), and set up the categorical labels (used below). categorical_keys, values = np.unique(plotting_var, return_inverse=True) plotting_var = values num_categories = len(categorical_keys) From e43cac7e5ad7aca49e5c612d163cd443d45aa223 Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Mon, 19 Jun 2023 10:57:23 +0100 Subject: [PATCH 094/134] Typo --- validphys2/src/validphys/tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validphys2/src/validphys/tests/conftest.py b/validphys2/src/validphys/tests/conftest.py index b04d1d4eee..a78216b09b 100644 --- a/validphys2/src/validphys/tests/conftest.py +++ b/validphys2/src/validphys/tests/conftest.py @@ -27,7 +27,7 @@ def tmp(tmpdir): SINGLE_DATASET = {'dataset': 'NMC'} -SINGLE_CATEGICAL = {"dataset": "ATLAS_WZ_TOT_13TEV", 'cfac': ["QCD"]} +SINGLE_CATEGORICAL = {"dataset": "ATLAS_WZ_TOT_13TEV", 'cfac': ["QCD"]} DATA = [ {'dataset': 'NMC'}, @@ -102,7 +102,7 @@ def single_data_categorical_internal_cuts_config(data_internal_cuts_config): """Test dataset with categorical plotting variables""" return { **data_internal_cuts_config, - 'dataset_input': SINGLE_CATEGICAL, + 'dataset_input': SINGLE_CATEGORICAL, # NOTE: The old theory is currently bugged for this dataset 'theoryid': THEORYID_NEW, } From 80a99fcb31507ad5bc2cd5fc7972993368e2577b Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Mon, 19 Jun 2023 11:46:03 +0100 Subject: [PATCH 095/134] Leftover typo --- validphys2/src/validphys/dataplots.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/dataplots.py b/validphys2/src/validphys/dataplots.py index 7a66a2e3e9..7a8088ed31 100644 --- a/validphys2/src/validphys/dataplots.py +++ b/validphys2/src/validphys/dataplots.py @@ -1255,7 +1255,7 @@ def plot_xq2( def next_options(): #Get the colors - prop_settings = plt.rcParams['axes.prop_cycle'] + prop_settings = mpl.rcParams['axes.prop_cycle'] #Apparently calling the object gives us an infinite cycler settings_cycler = prop_settings() #So far, I don't understand how this is done with mpl "cycler" From 6089608fb7fdd42ffc4de48b414bab0ab9a12745 Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Mon, 19 Jun 2023 11:49:31 +0100 Subject: [PATCH 096/134] Update test image --- .../tests/baseline/test_plot_smpdf.png | Bin 208347 -> 207972 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/validphys2/src/validphys/tests/baseline/test_plot_smpdf.png b/validphys2/src/validphys/tests/baseline/test_plot_smpdf.png index 7274fa0469d7cd899d5d2f9e514fb3e27ad68004..883dc4d07773b37ab5cc792ccae678a8b7b4b747 100644 GIT binary patch literal 207972 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

-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 literal 208347 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 MWY|$|l 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 From d5a48f9092beb2f9100ad19bed9145d4e61d2188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 19 Jun 2023 15:05:21 +0200 Subject: [PATCH 097/134] Check installation of error pdf in test --- validphys2/src/validphys/tests/photon/test_compute.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 948ed3d3db..b7942cf468 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -10,14 +10,17 @@ from validphys.core import PDF as PDFset from validphys.photon import structure_functions as sf from validphys.photon.compute import Alpha, Photon, FIATLUX_DEFAULT +from validphys.loader import FallbackLoader from ..conftest import PDF TEST_THEORY = API.theoryid(theoryid=398) +# check if "LUXqed17_plus_PDF4LHC15_nnlo_100" is installed +FallbackLoader().check_pdf("LUXqed17_plus_PDF4LHC15_nnlo_100") FIATLUX_RUNCARD = { "luxset": PDFset(PDF), - "additional_errors": API.pdf(pdf='LUXqed17_plus_PDF4LHC15_nnlo_100'), + "additional_errors": PDFset('LUXqed17_plus_PDF4LHC15_nnlo_100'), "luxseed": 123456789, "eps_base": 1e-2, # using low precision to speed up tests } From 1e237da236ab9dbc0820e226dae11af387ba9745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 19 Jun 2023 15:06:57 +0200 Subject: [PATCH 098/134] Call black and isort --- validphys2/src/validphys/tests/photon/test_compute.py | 6 +++--- .../src/validphys/tests/photon/test_structurefunctions.py | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index b7942cf468..b17547dcb0 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -8,9 +8,9 @@ from n3fit.io.writer import XGRID from validphys.api import API from validphys.core import PDF as PDFset -from validphys.photon import structure_functions as sf -from validphys.photon.compute import Alpha, Photon, FIATLUX_DEFAULT from validphys.loader import FallbackLoader +from validphys.photon import structure_functions as sf +from validphys.photon.compute import FIATLUX_DEFAULT, Alpha, Photon from ..conftest import PDF @@ -22,7 +22,7 @@ "luxset": PDFset(PDF), "additional_errors": PDFset('LUXqed17_plus_PDF4LHC15_nnlo_100'), "luxseed": 123456789, - "eps_base": 1e-2, # using low precision to speed up tests + "eps_base": 1e-2, # using low precision to speed up tests } diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 52f68f0a22..571ae765f2 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -18,7 +18,7 @@ def xfxQ(self, x, Q): res[21] = 0.0 res[22] = 0.0 return res - + def xfxQ2(self, i, x, Q2): return self.xfxQ(x, np.sqrt(Q2))[i] @@ -61,7 +61,6 @@ def test_zero_pdfs(): np.testing.assert_allclose(fl.fxq(x, Q), 0.0) - def test_zero_grid(monkeypatch): "test that a zero grid gives a zero structure function" # patching pineappl.fk_table.FkTable to use ZeroFKTable @@ -73,7 +72,6 @@ def test_zero_grid(monkeypatch): np.testing.assert_allclose(structurefunc.fxq(x, Q), 0.0, rtol=1e-5) - def test_params(): "test initialization of parameters" pdfs = PDFset(PDF).load() From 1e105cdf1a53c5d97604b874e581a5c2b2cdacac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Mon, 19 Jun 2023 15:44:01 +0200 Subject: [PATCH 099/134] Fix last commit --- validphys2/src/validphys/tests/photon/test_compute.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index b17547dcb0..9e3226062e 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -16,11 +16,10 @@ TEST_THEORY = API.theoryid(theoryid=398) -# check if "LUXqed17_plus_PDF4LHC15_nnlo_100" is installed -FallbackLoader().check_pdf("LUXqed17_plus_PDF4LHC15_nnlo_100") FIATLUX_RUNCARD = { "luxset": PDFset(PDF), - "additional_errors": PDFset('LUXqed17_plus_PDF4LHC15_nnlo_100'), + # check if "LUXqed17_plus_PDF4LHC15_nnlo_100" is installed + "additional_errors": FallbackLoader().check_pdf("LUXqed17_plus_PDF4LHC15_nnlo_100"), "luxseed": 123456789, "eps_base": 1e-2, # using low precision to speed up tests } From 0bd5582d1788bcc1fbe02db8a2fa92423cc1d369 Mon Sep 17 00:00:00 2001 From: Aron Date: Tue, 20 Jun 2023 16:28:51 +0200 Subject: [PATCH 100/134] Pass replica number as additional argument to impose_msr model --- n3fit/src/n3fit/model_gen.py | 4 ++-- n3fit/src/n3fit/msr.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 33d6ec4e58..959d1929ab 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -676,8 +676,8 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, preprocessing_factor) pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, preprocessing_factor) - pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) - + # i_replica argument is necessary to select the right photon integral + pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input, i_replica]) if photons: pdf_normalized = layer_photon(pdf_normalized, i_replica) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 1ad8ce49ac..66fb28e4f7 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -85,16 +85,18 @@ def generate_msr_model_and_grid( # 4. Integrate the pdf pdf_integrated = xIntegrator(weights_array, input_shape=(nx,))(pdf_integrand) - # 5. If a photon is given, compute the photon component of the MSR + # 5. If a photon is given, retrieve the photon component of the MSR... photons_c = None if photons: photons_c = photons.integral + # ... and add the replica number as an input, as the above contains the integrals for all replicas + replica_number = Input(shape=(1,), batch_size=1, name="replica_number", dtype="int32") # 6. Compute the normalization factor # For now set the photon component to None normalization_factor = MSR_Normalization( output_dim, mode, name="msr_weights", photons_contribution=photons_c - )(pdf_integrated, ph_replica=None) + )(pdf_integrated, ph_replica=replica_number) # 7. Apply the normalization factor to the pdf pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")( @@ -105,6 +107,7 @@ def generate_msr_model_and_grid( "pdf_x": pdf_x, "pdf_xgrid_integration": pdf_xgrid_integration, "xgrid_integration": xgrid_integration, + "replica_number": replica_number, } model = MetaModel(inputs, pdf_normalized, name="impose_msr") From 1071478be7824fd81a22059f758fcf45df3c7f49 Mon Sep 17 00:00:00 2001 From: andreab1997 Date: Wed, 21 Jun 2023 11:12:50 +0200 Subject: [PATCH 101/134] First tentative grouping --- nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml | 2 +- .../data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml | 2 +- .../data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml | 2 +- .../data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml | 2 +- .../data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml | 3 ++- nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml | 2 +- 74 files changed, 82 insertions(+), 74 deletions(-) diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml index e0e348734a..1a69c2adc0 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml @@ -9,4 +9,4 @@ x_label: '$|y_{\ell\ell}|$' kinematics_override: ewk_rap_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml index 7de7755c8b..5b2ed32b91 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml @@ -3,4 +3,4 @@ x: k2 y_label: '$d\sigma_{Z/\gamma^{*}}/dM_{ll}$ (fb)' experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml index a0ad9ced8c..94f9f2113b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml @@ -7,4 +7,4 @@ y_label: '$d\sigma_{W}/dp_T$' kinematics_override: ewk_pt_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml index 8da266f15a..0a35b7bde8 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml @@ -19,4 +19,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC +#TO SPLIT diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml index 99ebea3f72..9ee41e87d8 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml @@ -29,4 +29,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC +#TO SPLIT \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml index 66c083a7b8..5854d76ba1 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml @@ -23,4 +23,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC +#TO SPLIT \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml index 0ff36b94c4..68ccd59bfd 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml @@ -17,4 +17,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC +#TO SPLIT \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml index c05aa86e87..3d99510f0a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml @@ -17,4 +17,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC +#TO SPLIT diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml index fcf04cd516..4156d3ba35 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml @@ -7,4 +7,4 @@ kinematics_override: ewk_mll_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml index 951a54052a..d679f58a2c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml @@ -10,4 +10,4 @@ kinematics_override: jet_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml index 711cd15def..07a8b21d6a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml @@ -6,4 +6,4 @@ figure_by: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml index 61c17476dc..4c1b5d2528 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml @@ -8,4 +8,4 @@ kinematics_override: jet_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml index 8b53ee46b8..b494b6c51e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml @@ -7,4 +7,4 @@ figure_by: x_label: '$|y_{\ell\ell}|$' experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml index cccd62ea82..918f95eb4e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W^-+c)/d|\eta^\ell|$ (fb)' x_label: '$|\eta^\ell|$' experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml index 2489bf0c67..d9d9d05b02 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W^++\bar{c})/d|\eta^\ell|$ (fb)' x_label: '$|\eta^\ell|$' experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml index 075c518353..feb12bc8e2 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml @@ -21,4 +21,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml index 44d0c7638b..6138c59e5f 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml index 2f47c29832..1552e18994 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml index a02daba1bb..b6c178092a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml index 7de64cd8ce..7dbd5b4f58 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml index c05aa86e87..3bc431fc5b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml @@ -17,4 +17,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY +nnpdf31_process: DY_CC +#TO SPLIT diff --git a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml index 63c729a730..db0d6a4176 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "CDF" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml index 0f24efcd40..817e04a0fc 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "CDF" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml index 9b4535b103..27a2108506 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml @@ -8,4 +8,4 @@ kinematics_override: ewk_mll_sqrt_scale experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml index eef80749b8..3884ff636b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml @@ -6,4 +6,4 @@ figure_by: experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml index 7a81bfd166..1def4ee86a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml @@ -4,4 +4,4 @@ y_label: '$\sigma(W^+ + \bar{c})/\sigma(W^- + c)$' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml index 9cef298672..14320503e3 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W+c)/d|\eta_l|$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml index 2882456dc4..aac897de5c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{e}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml index 8fb168a843..ea30ef23e2 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{\mu}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml index afcc365969..49d1c2032b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W\to l\nu)/dy_l$' #x_label: 'Lepton rapidity $|y_l|$' experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml index d76a9e2013..c878834004 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml @@ -6,4 +6,4 @@ figure_by: experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml index 3cdedfdf4e..822b1b080c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W+c)/d|\eta^\mu|$ (fb)' x_label: '$|\eta^\mu|$' experiment: "CMS" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml index 3d23348171..9e44c95e52 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{e}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "D0" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml index 4cccad254a..b34fe74e97 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{\mu}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "D0" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml index 36fee913cc..8a47b94d24 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml @@ -4,4 +4,4 @@ y_label: '$1/\sigma\;d\sigma_{Z/\gamma^{*}}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "D0" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml index a3f5d7264c..eac902793b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml @@ -5,4 +5,4 @@ y_label: '$1/\sigma\;d\sigma_{Z/\gamma^{*}}/dy$' experiment: "D0" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml index a3f5d7264c..eac902793b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml @@ -5,4 +5,4 @@ y_label: '$1/\sigma\;d\sigma_{Z/\gamma^{*}}/dy$' experiment: "D0" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml index 83334fae71..f20fb7043a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "DYE605" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml index afcc3847a9..c6b7ef132d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml index afcc3847a9..c6b7ef132d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml index afcc3847a9..c6b7ef132d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml index afcc3847a9..c6b7ef132d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml index 10ec11b5d9..be14382f77 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml @@ -47,4 +47,4 @@ extra_labels: experiment: "DYE886" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml index 7537f8c245..509adc7b3d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DYE886" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml index 98e6b4c4e5..fb6605a60d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml index 98e6b4c4e5..fb6605a60d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml index 98e6b4c4e5..fb6605a60d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml index 98e6b4c4e5..fb6605a60d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml index 13c3331601..d16110cac0 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml index 7261a315b6..9c2146a65e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DYE906" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml index 8a8a7b9e35..63425b21b9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml index ef9b4bb3de..eb8b37b5b5 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml index e158923009..c5411dba40 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml index a28c8492e9..7118bd2f19 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml index ea829dd716..aebfcd29e6 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml index 8f8af7b7c7..c6199b5dcc 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml index ce17caa9e9..d7ef0697be 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml index 3a82c23eb5..0b3728efe8 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml index 6230bb3f14..c57ba2d02a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml index aa3eb93d78..ce45afe960 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml index e6d4ee8ddf..e2c765ee51 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml index e6d4ee8ddf..e2c765ee51 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml index d3ca3ee121..c4f850aa17 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml index b4ba2a3ed1..1dc68c0a1c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml @@ -12,4 +12,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml index b4ba2a3ed1..b61c9bd40e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml @@ -12,4 +12,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml index f37e08e95c..73dcb11b4f 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml @@ -13,4 +13,5 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC +#TO SPLIT \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml index 9be274af7a..6df6463d47 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml @@ -12,4 +12,5 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC +#TO SPLIT \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml index 6c03662edd..3f41ad6950 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml index 4bf4524a4d..566b0374a9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml index 4bf4524a4d..566b0374a9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml index 642392b1ce..3991ef7c09 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml @@ -6,4 +6,4 @@ x_label: '$\eta^e$' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml index c62cbafb5e..366788c98e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml @@ -6,4 +6,4 @@ x_label: '$\eta^e$' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml index 482efe038e..d34084a4fa 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml @@ -5,4 +5,4 @@ x_label: 'y' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml index 6e333339b8..34b6489c6d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z}/dy$ (fb)' x_label: 'y' experiment: "LHCb" -nnpdf31_process: DY +nnpdf31_process: DY_NC From d6392ba4044947e5aac6018d95cfee2e642fb3ab Mon Sep 17 00:00:00 2001 From: Zaharid Date: Thu, 22 Jun 2023 09:29:26 +0100 Subject: [PATCH 102/134] Add luminosity channels (#1762) * Add luminosity channels This adds lumi channels corresponding to the main production channels for W and Z bosons. --------- Co-authored-by: Juan M. Cruz-Martinez --- validphys2/examples/pdf_lumi_plots.yaml | 3 ++- validphys2/src/validphys/gridvalues.py | 30 ++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/validphys2/examples/pdf_lumi_plots.yaml b/validphys2/examples/pdf_lumi_plots.yaml index 67d046dba7..c570249a83 100644 --- a/validphys2/examples/pdf_lumi_plots.yaml +++ b/validphys2/examples/pdf_lumi_plots.yaml @@ -13,7 +13,8 @@ pdf: {id: "NNPDF40_nlo_as_01180", label: "4.0 NLO"} sqrts: 13000 # GeV lumi_channel: "gg" # one of [gg, gq, qqbar, qq, ddbar, uubar, ssbar, - # ccbar, bbbar, dubar, udbar, scbar, csbar, pp, gp] + # ccbar, bbbar, dubar, udbar, scbar, csbar, pp, gp, + # wlum1, zlum1] PDFscalespecs: - xscale: log diff --git a/validphys2/src/validphys/gridvalues.py b/validphys2/src/validphys/gridvalues.py index 83628a9997..96d2e3aacb 100644 --- a/validphys2/src/validphys/gridvalues.py +++ b/validphys2/src/validphys/gridvalues.py @@ -32,6 +32,8 @@ 'csbar': r'c\bar{s}', 'pp': r'\gamma\gamma', 'gp': r'g\gamma', + 'zlum1': r'u\bar{u} + d\bar{d}', + 'wlum1': r'u\bar{d} + d\bar{u}', } QUARK_COMBINATIONS = { @@ -115,6 +117,15 @@ def central_grid_values(pdf: PDF, flmat, xmat, qmat): # TODO: Investigate writting these in cython/cffi/numba/... +def _parton_pair_lumi_inner(pdf_set, n, mx, x1, x2, i, j): + """Helper to evaluate lumis for pairs of partons.""" + # fmt: off + return ( + pdf_set.xfxQ(x1, mx, n, i)*pdf_set.xfxQ(x2, mx, n, j) + + pdf_set.xfxQ(x1, mx, n, j)*pdf_set.xfxQ(x2, mx, n, i) + ) + + def evaluate_luminosity( pdf_set: LHAPDFSet, n: int, s: float, mx: float, x1: float, x2: float, channel ): @@ -155,11 +166,24 @@ def evaluate_luminosity( # as in the second of Eq.(4) in arXiv:1607.01831 res = sum(a*b for a,b in itertools.product(r1,r2)) + elif channel == 'zlum1': + u, ubar = 2, -2 + d, dbar = -1, 1 + res = ( + _parton_pair_lumi_inner(pdf_set=pdf_set, n=n, mx=mx, x1=x1, x2=x2, i=u, j=ubar) + + _parton_pair_lumi_inner(pdf_set=pdf_set, n=n, mx=mx, x1=x1, x2=x2, i=d, j=dbar) + ) + elif channel == 'wlum1': + u, dbar = 2, -1 + d, ubar = 1, -2 + res = ( + _parton_pair_lumi_inner(pdf_set=pdf_set, n=n, mx=mx, x1=x1, x2=x2, i=u, j=dbar) + + _parton_pair_lumi_inner(pdf_set=pdf_set, n=n, mx=mx, x1=x1, x2=x2, i=d, j=ubar) + ) + elif channel in QUARK_COMBINATIONS.keys(): i, j = QUARK_COMBINATIONS[channel] - res = (pdf_set.xfxQ(x1, mx, n, i) * pdf_set.xfxQ(x2, mx, n, j) - + pdf_set.xfxQ(x1, mx, n, j) * pdf_set.xfxQ(x2, mx, n, i)) - + res = _parton_pair_lumi_inner(pdf_set=pdf_set, n=n, mx=mx, x1=x1, x2=x2, i=i, j=j) else: raise ValueError("Bad channel") # fmt: on From acd0b0690803f16e046b9467c756310421b793d0 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Thu, 22 Jun 2023 15:36:02 +0200 Subject: [PATCH 103/134] Use function to generate fiatlux runcard in tests --- validphys2/src/validphys/tests/conftest.py | 1 + .../validphys/tests/photon/test_compute.py | 31 ++++++++++--------- .../tests/photon/test_structurefunctions.py | 4 +-- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/validphys2/src/validphys/tests/conftest.py b/validphys2/src/validphys/tests/conftest.py index a78216b09b..75d35c718c 100644 --- a/validphys2/src/validphys/tests/conftest.py +++ b/validphys2/src/validphys/tests/conftest.py @@ -56,6 +56,7 @@ def tmp(tmpdir): HESSIAN_PDF = "NNPDF40_nnlo_as_01180_hessian" THEORYID = 162 THEORYID_NEW = 399 +THEORY_QED = 398 FIT = "NNPDF40_nnlo_lowprecision" FIT_3REPLICAS = "Basic_runcard_3replicas_lowprec_221130" FIT_3REPLICAS_DCUTS = "Basic_runcard_3replicas_diffcuts_230221" diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 9e3226062e..c5ad3dc74c 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -12,22 +12,23 @@ from validphys.photon import structure_functions as sf from validphys.photon.compute import FIATLUX_DEFAULT, Alpha, Photon -from ..conftest import PDF +from ..conftest import PDF, THEORY_QED -TEST_THEORY = API.theoryid(theoryid=398) +TEST_THEORY = API.theoryid(theoryid=THEORY_QED) -FIATLUX_RUNCARD = { - "luxset": PDFset(PDF), - # check if "LUXqed17_plus_PDF4LHC15_nnlo_100" is installed - "additional_errors": FallbackLoader().check_pdf("LUXqed17_plus_PDF4LHC15_nnlo_100"), - "luxseed": 123456789, - "eps_base": 1e-2, # using low precision to speed up tests -} +def generate_fiatlux_runcard(): + return { + "luxset": PDFset(PDF), + # check if "LUXqed17_plus_PDF4LHC15_nnlo_100" is installed + "additional_errors": FallbackLoader().check_pdf("LUXqed17_plus_PDF4LHC15_nnlo_100"), + "luxseed": 123456789, + "eps_base": 1e-2, # using low precision to speed up tests + } def test_parameters_init(): "test initailization of the parameters from Photon class" - fiatlux_runcard = FIATLUX_RUNCARD.copy() + fiatlux_runcard = generate_fiatlux_runcard() # we are not testing the photon here so we make it faster fiatlux_runcard['eps_base'] = 1e-1 @@ -35,9 +36,9 @@ def test_parameters_init(): photon = Photon(TEST_THEORY, fiatlux_runcard, [1, 2, 3]) np.testing.assert_equal(photon.replicas, [1, 2, 3]) - np.testing.assert_equal(photon.luxpdfset._name, FIATLUX_RUNCARD["luxset"].name) + np.testing.assert_equal(photon.luxpdfset._name, fiatlux_runcard["luxset"].name) np.testing.assert_equal(photon.additional_errors.name, "LUXqed17_plus_PDF4LHC15_nnlo_100") - np.testing.assert_equal(photon.luxseed, FIATLUX_RUNCARD["luxseed"]) + np.testing.assert_equal(photon.luxseed, fiatlux_runcard["luxseed"]) np.testing.assert_equal(photon.path_to_eko_photon, TEST_THEORY.path / "eko_photon.tar") np.testing.assert_equal(photon.q_in, 100.0) @@ -98,7 +99,7 @@ def test_photon(): """test that photon coming out of Photon interpolator matches the photon array for XGRID points """ - fiatlux_runcard = FIATLUX_RUNCARD.copy() + fiatlux_runcard = generate_fiatlux_runcard() fiatlux_runcard["additional_errors"] = False theory = TEST_THEORY.get_description() @@ -108,7 +109,7 @@ def test_photon(): # set up fiatlux path_to_F2 = TEST_THEORY.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" path_to_FL = TEST_THEORY.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" - pdfs = FIATLUX_RUNCARD["luxset"].load() + pdfs = fiatlux_runcard["luxset"].load() f2 = sf.InterpStructureFunction(path_to_F2, pdfs.members[replica]) fl = sf.InterpStructureFunction(path_to_FL, pdfs.members[replica]) f2lo = sf.F2LO(pdfs.members[replica], theory) @@ -118,7 +119,7 @@ def test_photon(): fiatlux_default['mproton'] = theory['MP'] fiatlux_default["qed_running"] = bool(np.isclose(theory["Qedref"], theory["Qref"])) fiatlux_default["q2_max"] = float(f2.q2_max) - fiatlux_default["eps_base"] = FIATLUX_RUNCARD["eps_base"] + fiatlux_default["eps_base"] = fiatlux_runcard["eps_base"] # load fiatlux with tempfile.NamedTemporaryFile(mode="w") as tmp: diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 571ae765f2..f45cf94527 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -5,9 +5,9 @@ from validphys.core import PDF as PDFset import validphys.photon.structure_functions as sf -from ..conftest import PDF +from ..conftest import PDF, THEORY_QED -TEST_THEORY = API.theoryid(theoryid=398) +TEST_THEORY = API.theoryid(theoryid=THEORY_QED) class ZeroPdfs: From 40bc7bcb6dbfedf92d15011a71657cd37bfc5b49 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Thu, 22 Jun 2023 15:43:08 +0200 Subject: [PATCH 104/134] Call api inside tests --- validphys2/src/validphys/photon/compute.py | 9 ++++--- .../validphys/tests/photon/test_compute.py | 26 +++++++++++-------- .../tests/photon/test_structurefunctions.py | 17 ++++++------ 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index 52c3b04c78..c9a5805f07 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -81,7 +81,6 @@ def __init__(self, theoryid, lux_params, replicas): self.path_to_eko_photon = theoryid.path / "eko_photon.tar" with EKO.read(self.path_to_eko_photon) as eko: self.q_in = np.sqrt(eko.mu20) - # set fiatlux self.lux = {} @@ -121,7 +120,9 @@ def __init__(self, theoryid, lux_params, replicas): self.lux[replica].PlugStructureFunctions(f2.fxq, fl.fxq, f2lo.fxq) photon_array = self.compute_photon_array(replica) - self.interpolator.append(interp1d(XGRID, photon_array, fill_value="extrapolate", kind="cubic")) + self.interpolator.append( + interp1d(XGRID, photon_array, fill_value="extrapolate", kind="cubic") + ) self.integral.append(trapezoid(photon_array, XGRID)) def compute_photon_array(self, replica): @@ -140,7 +141,9 @@ def compute_photon_array(self, replica): """ # Compute photon PDF log.info(f"Computing photon") - photon_qin = np.array([self.lux[replica].EvaluatePhoton(x, self.q_in**2).total for x in XGRID]) + photon_qin = np.array( + [self.lux[replica].EvaluatePhoton(x, self.q_in**2).total for x in XGRID] + ) photon_qin += self.generate_errors(replica) # fiatlux computes x * gamma(x) photon_qin /= XGRID diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index c5ad3dc74c..82787e7492 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -14,7 +14,6 @@ from ..conftest import PDF, THEORY_QED -TEST_THEORY = API.theoryid(theoryid=THEORY_QED) def generate_fiatlux_runcard(): return { @@ -29,23 +28,25 @@ def generate_fiatlux_runcard(): def test_parameters_init(): "test initailization of the parameters from Photon class" fiatlux_runcard = generate_fiatlux_runcard() + test_theory = API.theoryid(theoryid=THEORY_QED) # we are not testing the photon here so we make it faster fiatlux_runcard['eps_base'] = 1e-1 - photon = Photon(TEST_THEORY, fiatlux_runcard, [1, 2, 3]) + photon = Photon(test_theory, fiatlux_runcard, [1, 2, 3]) np.testing.assert_equal(photon.replicas, [1, 2, 3]) np.testing.assert_equal(photon.luxpdfset._name, fiatlux_runcard["luxset"].name) np.testing.assert_equal(photon.additional_errors.name, "LUXqed17_plus_PDF4LHC15_nnlo_100") np.testing.assert_equal(photon.luxseed, fiatlux_runcard["luxseed"]) - np.testing.assert_equal(photon.path_to_eko_photon, TEST_THEORY.path / "eko_photon.tar") + np.testing.assert_equal(photon.path_to_eko_photon, test_theory.path / "eko_photon.tar") np.testing.assert_equal(photon.q_in, 100.0) def test_masses_init(): "test thresholds values in Alpha class" - theory = TEST_THEORY.get_description() + test_theory = API.theoryid(theoryid=THEORY_QED) + theory = test_theory.get_description() alpha = Alpha(theory) np.testing.assert_equal(alpha.thresh_t, np.inf) np.testing.assert_almost_equal(alpha.thresh_b, theory["mb"]) @@ -54,7 +55,8 @@ def test_masses_init(): def test_set_thresholds_alpha_em(): "test value of alpha_em at threshold values" - theory = TEST_THEORY.get_description() + test_theory = API.theoryid(theoryid=THEORY_QED) + theory = test_theory.get_description() alpha = Alpha(theory) @@ -77,7 +79,8 @@ def test_set_thresholds_alpha_em(): def test_betas(): "test betas for different nf" - alpha = Alpha(TEST_THEORY.get_description()) + test_theory = API.theoryid(theoryid=THEORY_QED) + alpha = Alpha(test_theory.get_description()) vec_beta0 = [ -0.5305164769729844, -0.6719875374991137, @@ -101,14 +104,15 @@ def test_photon(): """ fiatlux_runcard = generate_fiatlux_runcard() fiatlux_runcard["additional_errors"] = False - theory = TEST_THEORY.get_description() + test_theory = API.theoryid(theoryid=THEORY_QED) + theory = test_theory.get_description() for replica in [1, 2, 3]: - photon = Photon(TEST_THEORY, fiatlux_runcard, [replica]) + photon = Photon(test_theory, fiatlux_runcard, [replica]) # set up fiatlux - path_to_F2 = TEST_THEORY.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" - path_to_FL = TEST_THEORY.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" + path_to_F2 = test_theory.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" + path_to_FL = test_theory.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" pdfs = fiatlux_runcard["luxset"].load() f2 = sf.InterpStructureFunction(path_to_F2, pdfs.members[replica]) fl = sf.InterpStructureFunction(path_to_FL, pdfs.members[replica]) @@ -137,7 +141,7 @@ def test_photon(): ] ) lux.PlugStructureFunctions(f2.fxq, fl.fxq, f2lo.fxq) - path_to_eko_photon = TEST_THEORY.path / "eko_photon.tar" + path_to_eko_photon = test_theory.path / "eko_photon.tar" with EKO.read(path_to_eko_photon) as eko: photon_fiatlux_qin = np.array([lux.EvaluatePhoton(x, eko.mu20).total for x in XGRID]) photon_fiatlux_qin /= XGRID diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index f45cf94527..5e83e6458f 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -7,8 +7,6 @@ from ..conftest import PDF, THEORY_QED -TEST_THEORY = API.theoryid(theoryid=THEORY_QED) - class ZeroPdfs: def xfxQ(self, x, Q): @@ -44,9 +42,10 @@ def convolute_with_one(self, pdgid, xfxQ2): def test_zero_pdfs(): "test that a zero PDF gives a zero structure function" pdfs = ZeroPdfs() - theory = TEST_THEORY.get_description() - path_to_F2 = TEST_THEORY.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" - path_to_FL = TEST_THEORY.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" + test_theory = API.theoryid(theoryid=THEORY_QED) + theory = test_theory.get_description() + path_to_F2 = test_theory.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" + path_to_FL = test_theory.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" f2 = sf.InterpStructureFunction(path_to_F2, pdfs) fl = sf.InterpStructureFunction(path_to_FL, pdfs) @@ -76,10 +75,11 @@ def test_params(): "test initialization of parameters" pdfs = PDFset(PDF).load() replica = 1 - theory = TEST_THEORY.get_description() + test_theory = API.theoryid(theoryid=THEORY_QED) + theory = test_theory.get_description() for channel in ["F2", "FL"]: tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" - path_to_fktable = TEST_THEORY.path / tmp + path_to_fktable = test_theory.path / tmp struct_func = sf.InterpStructureFunction(path_to_fktable, pdfs.members[replica]) np.testing.assert_allclose(struct_func.q2_max, 1e8) f2lo = sf.F2LO(pdfs.members[replica], theory) @@ -91,10 +91,11 @@ def test_params(): def test_interpolation_grid(): """test that the values coming out of InterpStructureFunction match the grid ones""" pdfs = PDFset(PDF).load() + test_theory = API.theoryid(theoryid=THEORY_QED) for replica in [1, 2, 3]: for channel in ["F2", "FL"]: tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" - path_to_fktable = TEST_THEORY.path / tmp + path_to_fktable = test_theory.path / tmp fktable = pineappl.fk_table.FkTable.read(path_to_fktable) x = np.unique(fktable.bin_left(1)) q2 = np.unique(fktable.bin_left(0)) From 8dbc98d4fdf2f802316ebdad250549cfd6adf7cb Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 23 Jun 2023 11:08:00 +0200 Subject: [PATCH 105/134] Replace indexing with tf.gather since ph_replica is now a tensor --- n3fit/src/n3fit/backends/keras_backend/operations.py | 3 +++ n3fit/src/n3fit/layers/msr_normalization.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 4020466a23..1007536065 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -193,6 +193,9 @@ def tmp(x): return layer_op(tensor) +def op_gather(tensor, indices, **kwargs): + return tf.gather(tensor, indices, **kwargs) + # # Tensor operations # f(x: tensor[s]) -> y: tensor diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 6725fdbbdf..774164c3c6 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -54,7 +54,7 @@ def call(self, pdf_integrated, ph_replica): norm_constants = [] if self._photons: - photon_integral = self._photons[ph_replica] + photon_integral = op.gather(self._photons, ph_replica) else: photon_integral = 0.0 From a0f6e0927b143d16992aa7d7e9a7ed3543e7541e Mon Sep 17 00:00:00 2001 From: Aron Date: Fri, 23 Jun 2023 12:02:15 +0200 Subject: [PATCH 106/134] gather -> op_gather --- n3fit/src/n3fit/layers/msr_normalization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 774164c3c6..60788a912d 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -54,7 +54,7 @@ def call(self, pdf_integrated, ph_replica): norm_constants = [] if self._photons: - photon_integral = op.gather(self._photons, ph_replica) + photon_integral = op.op_gather(self._photons, ph_replica) else: photon_integral = 0.0 From 20833cae25fd2dfce1e8e2b4edeb0ae32673f47a Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Sat, 24 Jun 2023 07:50:39 +0200 Subject: [PATCH 107/134] Revert to commit 2b8c806e --- n3fit/src/n3fit/backends/keras_backend/operations.py | 3 --- n3fit/src/n3fit/layers/msr_normalization.py | 2 +- n3fit/src/n3fit/model_gen.py | 4 ++-- n3fit/src/n3fit/msr.py | 7 ++----- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 1007536065..4020466a23 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -193,9 +193,6 @@ def tmp(x): return layer_op(tensor) -def op_gather(tensor, indices, **kwargs): - return tf.gather(tensor, indices, **kwargs) - # # Tensor operations # f(x: tensor[s]) -> y: tensor diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 60788a912d..6725fdbbdf 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -54,7 +54,7 @@ def call(self, pdf_integrated, ph_replica): norm_constants = [] if self._photons: - photon_integral = op.op_gather(self._photons, ph_replica) + photon_integral = self._photons[ph_replica] else: photon_integral = 0.0 diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 959d1929ab..33d6ec4e58 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -676,8 +676,8 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, preprocessing_factor) pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, preprocessing_factor) - # i_replica argument is necessary to select the right photon integral - pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input, i_replica]) + pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) + if photons: pdf_normalized = layer_photon(pdf_normalized, i_replica) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 66fb28e4f7..1ad8ce49ac 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -85,18 +85,16 @@ def generate_msr_model_and_grid( # 4. Integrate the pdf pdf_integrated = xIntegrator(weights_array, input_shape=(nx,))(pdf_integrand) - # 5. If a photon is given, retrieve the photon component of the MSR... + # 5. If a photon is given, compute the photon component of the MSR photons_c = None if photons: photons_c = photons.integral - # ... and add the replica number as an input, as the above contains the integrals for all replicas - replica_number = Input(shape=(1,), batch_size=1, name="replica_number", dtype="int32") # 6. Compute the normalization factor # For now set the photon component to None normalization_factor = MSR_Normalization( output_dim, mode, name="msr_weights", photons_contribution=photons_c - )(pdf_integrated, ph_replica=replica_number) + )(pdf_integrated, ph_replica=None) # 7. Apply the normalization factor to the pdf pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")( @@ -107,7 +105,6 @@ def generate_msr_model_and_grid( "pdf_x": pdf_x, "pdf_xgrid_integration": pdf_xgrid_integration, "xgrid_integration": xgrid_integration, - "replica_number": replica_number, } model = MetaModel(inputs, pdf_normalized, name="impose_msr") From 6a1ce0287260d8c418cabd00f456f1f9fb3188cd Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Sat, 24 Jun 2023 08:01:21 +0200 Subject: [PATCH 108/134] Set photon integral as explicit argument to normalization model --- n3fit/src/n3fit/layers/msr_normalization.py | 24 +++++++++++++-------- n3fit/src/n3fit/model_gen.py | 15 ++++++++++++- n3fit/src/n3fit/msr.py | 15 ++++++------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/n3fit/src/n3fit/layers/msr_normalization.py b/n3fit/src/n3fit/layers/msr_normalization.py index 6725fdbbdf..552f618b59 100644 --- a/n3fit/src/n3fit/layers/msr_normalization.py +++ b/n3fit/src/n3fit/layers/msr_normalization.py @@ -16,8 +16,7 @@ class MSR_Normalization(MetaLayer): _msr_enabled = False _vsr_enabled = False - def __init__(self, output_dim=14, mode="ALL", photons_contribution=None, **kwargs): - self._photons = photons_contribution + def __init__(self, output_dim=14, mode="ALL", **kwargs): if mode == True or mode.upper() == "ALL": self._msr_enabled = True self._vsr_enabled = True @@ -40,7 +39,7 @@ def __init__(self, output_dim=14, mode="ALL", photons_contribution=None, **kwarg super().__init__(**kwargs) - def call(self, pdf_integrated, ph_replica): + def call(self, pdf_integrated, photon_integral): """Imposes the valence and momentum sum rules: A_g = (1-sigma-photon)/g A_v = A_v24 = A_v35 = 3/V @@ -49,17 +48,24 @@ def call(self, pdf_integrated, ph_replica): A_v15 = 3/V_15 Note that both the input and the output are in the 14-flavours fk-basis + + Parameters + ---------- + pdf_integrated: (Tensor(1,None,14)) + the integrated PDF + photon_integral: (Tensor(1)): + the integrated photon, not included in PDF + + Returns + ------- + normalization_factor: Tensor(14) + The normalization factors per flavour. """ y = op.flatten(pdf_integrated) norm_constants = [] - if self._photons: - photon_integral = self._photons[ph_replica] - else: - photon_integral = 0.0 - if self._msr_enabled: - n_ag = [(1.0 - y[GLUON_IDX[0][0] - 1] - photon_integral) / y[GLUON_IDX[0][0]]] * len( + n_ag = [(1.0 - y[GLUON_IDX[0][0] - 1] - photon_integral[0]) / y[GLUON_IDX[0][0]]] * len( GLUON_IDX ) norm_constants += n_ag diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 33d6ec4e58..ec8d43b43d 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -606,6 +606,14 @@ def pdfNN_layer_generator( model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x + # The photon is treated separately, need to get its integrals to normalize the pdf + if photons: + photon_integrals = photons.integral + else: + photon_integrals = [0.0 for _ in range(len(seed))] + import tensorflow as tf + photon_integrals = [tf.constant(photon_integrals[i_replica]) + for i_replica in range(len(seed))] # Now we need a trainable network per replica to be trained in parallel pdf_models = [] @@ -676,7 +684,12 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, preprocessing_factor) pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, preprocessing_factor) - pdf_normalized = sumrule_layer([pdf_unnormalized, pdf_integration_grid, integrator_input]) + pdf_normalized = sumrule_layer({ + "pdf_x": pdf_unnormalized, + "pdf_xgrid_integration": pdf_integration_grid, + "xgrid_integration": integrator_input, + "photon_integral": photon_integrals[i_replica], + }) if photons: pdf_normalized = layer_photon(pdf_normalized, i_replica) diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index 1ad8ce49ac..e015486df3 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -13,7 +13,7 @@ def generate_msr_model_and_grid( - output_dim: int = 14, mode: str = "ALL", nx: int = int(2e3), scaler=None, photons=None, **kwargs + output_dim: int = 14, mode: str = "ALL", nx: int = int(2e3), scaler=None, **kwargs ) -> MetaModel: """ Generates a model that applies the sum rules to the PDF. @@ -31,8 +31,6 @@ def generate_msr_model_and_grid( Number of points of the integration grid scaler: Scaler Scaler to be applied to the PDF before applying the sum rules - photons: :py:class:`validphys.photon.compute.Photon` - If given, gives the AddPhoton layer a function to compute the MSR component for the photon Returns ------- @@ -42,6 +40,7 @@ def generate_msr_model_and_grid( - pdf_x: the PDF output of the model - pdf_xgrid_integration: the PDF output of the model evaluated at the integration grid - xgrid_integration: the integration grid + - photon_integral: the integrated photon contribution It returns the PDF with the sum rules applied xgrid_integration: dict Dictionary with the integration grid, with: @@ -85,16 +84,13 @@ def generate_msr_model_and_grid( # 4. Integrate the pdf pdf_integrated = xIntegrator(weights_array, input_shape=(nx,))(pdf_integrand) - # 5. If a photon is given, compute the photon component of the MSR - photons_c = None - if photons: - photons_c = photons.integral + # 5. THe input for the photon integral, will be set to 0 if no photons + photon_integral = Input(shape=(), batch_size=1, name='photon_integral') # 6. Compute the normalization factor # For now set the photon component to None normalization_factor = MSR_Normalization( - output_dim, mode, name="msr_weights", photons_contribution=photons_c - )(pdf_integrated, ph_replica=None) + output_dim, mode, name="msr_weights")(pdf_integrated, photon_integral) # 7. Apply the normalization factor to the pdf pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")( @@ -105,6 +101,7 @@ def generate_msr_model_and_grid( "pdf_x": pdf_x, "pdf_xgrid_integration": pdf_xgrid_integration, "xgrid_integration": xgrid_integration, + "photon_integral": photon_integral, } model = MetaModel(inputs, pdf_normalized, name="impose_msr") From a67fdc3e644eb8a9b6427db80334d89a6771aaee Mon Sep 17 00:00:00 2001 From: enocera Date: Sun, 25 Jun 2023 22:43:37 +0200 Subject: [PATCH 109/134] Splitting of DY data sets into CC and NC - all data sets tested and working --- buildmaster/filters/ATLASWRAP11.cc | 82 +++++++ buildmaster/filters/ATLASWRAP36PB.cc | 130 +++++++++++ buildmaster/filters/ATLASZRAP11.cc | 84 +++++++ buildmaster/filters/ATLASZRAP36PB.cc | 113 +++++++++ buildmaster/filters/ATLAS_WZ_TOT_13TEV.cc | 4 +- buildmaster/filters/ATLAS_W_TOT_13TEV.cc | 165 ++++++++++++++ buildmaster/filters/ATLAS_Z_TOT_13TEV.cc | 165 ++++++++++++++ buildmaster/filters/LHCBWMU7TEV.cc | 214 ++++++++++++++++++ buildmaster/filters/LHCBWMU8TEV.cc | 209 +++++++++++++++++ buildmaster/filters/LHCBWZMU7TEV.cc | 5 + buildmaster/filters/LHCBZMU7TEV.cc | 198 ++++++++++++++++ buildmaster/filters/LHCBZMU8TEV.cc | 189 ++++++++++++++++ buildmaster/inc/ATLASWRAP11CC.h | 24 ++ buildmaster/inc/ATLASWRAP36PB.h | 22 ++ buildmaster/inc/ATLASZRAP11CC.h | 24 ++ buildmaster/inc/ATLASZRAP36PB.h | 22 ++ buildmaster/inc/ATLAS_W_TOT_13TEV.h | 15 ++ buildmaster/inc/ATLAS_Z_TOT_13TEV.h | 15 ++ buildmaster/inc/LHCBWMU7TEV.h | 20 ++ buildmaster/inc/LHCBWMU8TEV.h | 20 ++ buildmaster/inc/LHCBZMU7TEV.h | 20 ++ buildmaster/inc/LHCBZMU8TEV.h | 20 ++ buildmaster/meta/ATLASWRAP11CC.yaml | 4 + buildmaster/meta/ATLASWRAP36PB.yaml | 4 + buildmaster/meta/ATLASZRAP11CC.yaml | 4 + buildmaster/meta/ATLASZRAP36PB.yaml | 4 + buildmaster/meta/ATLAS_W_TOT_13TEV.yaml | 4 + buildmaster/meta/ATLAS_Z_TOT_13TEV.yaml | 4 + buildmaster/meta/LHCBWMU7TEV.yaml | 4 + buildmaster/meta/LHCBWMU8TEV.yaml | 4 + buildmaster/meta/LHCBZMU7TEV.yaml | 4 + buildmaster/meta/LHCBZMU8TEV.yaml | 4 + buildmaster/src/buildmaster.cc | 21 ++ .../data/commondata/DATA_ATLASWRAP11CC.dat | 23 ++ .../data/commondata/DATA_ATLASWRAP36PB.dat | 23 ++ .../data/commondata/DATA_ATLASZRAP11CC.dat | 25 ++ .../data/commondata/DATA_ATLASZRAP36PB.dat | 9 + .../commondata/DATA_ATLAS_W_TOT_13TEV.dat | 3 + .../commondata/DATA_ATLAS_Z_TOT_13TEV.dat | 2 + nnpdfcpp/data/commondata/DATA_LHCBWMU7TEV.dat | 17 ++ nnpdfcpp/data/commondata/DATA_LHCBWMU8TEV.dat | 17 ++ nnpdfcpp/data/commondata/DATA_LHCBZMU7TEV.dat | 18 ++ nnpdfcpp/data/commondata/DATA_LHCBZMU8TEV.dat | 19 ++ .../commondata/PLOTTING_ATLASWRAP11CC.yaml | 26 +++ .../commondata/PLOTTING_ATLASWRAP36PB.yaml | 20 ++ .../commondata/PLOTTING_ATLASWZRAP11CC.yaml | 3 +- .../commondata/PLOTTING_ATLASWZRAP11CF.yaml | 3 +- .../commondata/PLOTTING_ATLASWZRAP36PB.yaml | 3 +- .../commondata/PLOTTING_ATLASZRAP11CC.yaml | 29 +++ .../commondata/PLOTTING_ATLASZRAP36PB.yaml | 20 ++ .../PLOTTING_ATLAS_WZ_TOT_13TEV.yaml | 4 +- .../PLOTTING_ATLAS_W_TOT_13TEV.yaml | 19 ++ .../PLOTTING_ATLAS_Z_TOT_13TEV.yaml | 17 ++ .../data/commondata/PLOTTING_LHCBWMU7TEV.yaml | 16 ++ .../data/commondata/PLOTTING_LHCBWMU8TEV.yaml | 16 ++ .../commondata/PLOTTING_LHCBWZMU7TEV.yaml | 3 +- .../commondata/PLOTTING_LHCBWZMU8TEV.yaml | 3 +- .../data/commondata/PLOTTING_LHCBZMU7TEV.yaml | 16 ++ .../data/commondata/PLOTTING_LHCBZMU8TEV.yaml | 16 ++ .../SYSTYPE_ATLASWRAP11CC_DEFAULT.dat | 134 +++++++++++ .../SYSTYPE_ATLASWRAP36PB_DEFAULT.dat | 33 +++ .../SYSTYPE_ATLASZRAP11CC_DEFAULT.dat | 134 +++++++++++ .../SYSTYPE_ATLASZRAP36PB_DEFAULT.dat | 33 +++ .../SYSTYPE_ATLAS_W_TOT_13TEV_DEFAULT.dat | 5 + .../SYSTYPE_ATLAS_Z_TOT_13TEV_DEFAULT.dat | 5 + .../systypes/SYSTYPE_LHCBWMU7TEV_DEFAULT.dat | 36 +++ .../systypes/SYSTYPE_LHCBWMU8TEV_DEFAULT.dat | 37 +++ .../systypes/SYSTYPE_LHCBZMU7TEV_DEFAULT.dat | 36 +++ .../systypes/SYSTYPE_LHCBZMU8TEV_DEFAULT.dat | 37 +++ validphys2/src/validphys/cuts/filters.yaml | 34 +++ 70 files changed, 2701 insertions(+), 14 deletions(-) create mode 100644 buildmaster/filters/ATLASWRAP11.cc create mode 100644 buildmaster/filters/ATLASWRAP36PB.cc create mode 100644 buildmaster/filters/ATLASZRAP11.cc create mode 100644 buildmaster/filters/ATLASZRAP36PB.cc create mode 100644 buildmaster/filters/ATLAS_W_TOT_13TEV.cc create mode 100644 buildmaster/filters/ATLAS_Z_TOT_13TEV.cc create mode 100644 buildmaster/filters/LHCBWMU7TEV.cc create mode 100644 buildmaster/filters/LHCBWMU8TEV.cc create mode 100644 buildmaster/filters/LHCBZMU7TEV.cc create mode 100644 buildmaster/filters/LHCBZMU8TEV.cc create mode 100644 buildmaster/inc/ATLASWRAP11CC.h create mode 100644 buildmaster/inc/ATLASWRAP36PB.h create mode 100644 buildmaster/inc/ATLASZRAP11CC.h create mode 100644 buildmaster/inc/ATLASZRAP36PB.h create mode 100644 buildmaster/inc/ATLAS_W_TOT_13TEV.h create mode 100644 buildmaster/inc/ATLAS_Z_TOT_13TEV.h create mode 100644 buildmaster/inc/LHCBWMU7TEV.h create mode 100644 buildmaster/inc/LHCBWMU8TEV.h create mode 100644 buildmaster/inc/LHCBZMU7TEV.h create mode 100644 buildmaster/inc/LHCBZMU8TEV.h create mode 100644 buildmaster/meta/ATLASWRAP11CC.yaml create mode 100644 buildmaster/meta/ATLASWRAP36PB.yaml create mode 100644 buildmaster/meta/ATLASZRAP11CC.yaml create mode 100644 buildmaster/meta/ATLASZRAP36PB.yaml create mode 100644 buildmaster/meta/ATLAS_W_TOT_13TEV.yaml create mode 100644 buildmaster/meta/ATLAS_Z_TOT_13TEV.yaml create mode 100644 buildmaster/meta/LHCBWMU7TEV.yaml create mode 100644 buildmaster/meta/LHCBWMU8TEV.yaml create mode 100644 buildmaster/meta/LHCBZMU7TEV.yaml create mode 100644 buildmaster/meta/LHCBZMU8TEV.yaml create mode 100644 nnpdfcpp/data/commondata/DATA_ATLASWRAP11CC.dat create mode 100644 nnpdfcpp/data/commondata/DATA_ATLASWRAP36PB.dat create mode 100644 nnpdfcpp/data/commondata/DATA_ATLASZRAP11CC.dat create mode 100644 nnpdfcpp/data/commondata/DATA_ATLASZRAP36PB.dat create mode 100644 nnpdfcpp/data/commondata/DATA_ATLAS_W_TOT_13TEV.dat create mode 100644 nnpdfcpp/data/commondata/DATA_ATLAS_Z_TOT_13TEV.dat create mode 100644 nnpdfcpp/data/commondata/DATA_LHCBWMU7TEV.dat create mode 100644 nnpdfcpp/data/commondata/DATA_LHCBWMU8TEV.dat create mode 100644 nnpdfcpp/data/commondata/DATA_LHCBZMU7TEV.dat create mode 100644 nnpdfcpp/data/commondata/DATA_LHCBZMU8TEV.dat create mode 100644 nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml create mode 100644 nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP11CC_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP36PB_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP11CC_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP36PB_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_W_TOT_13TEV_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_Z_TOT_13TEV_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU7TEV_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU8TEV_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU7TEV_DEFAULT.dat create mode 100644 nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU8TEV_DEFAULT.dat diff --git a/buildmaster/filters/ATLASWRAP11.cc b/buildmaster/filters/ATLASWRAP11.cc new file mode 100644 index 0000000000..856a6ff66e --- /dev/null +++ b/buildmaster/filters/ATLASWRAP11.cc @@ -0,0 +1,82 @@ +/* + This file implements the W production subset of the ATLASWZRAP11CC data set. + This is required to separate CC DY from NC DY. + Implemented by ERN June 2023. +*/ + +#include "ATLASWRAP11CC.h" + +// Central selection +void ATLASWRAP11CCFilter::ReadData() +{ + + // Opening files + fstream f1; + + stringstream datafile(""); + datafile << dataPath() << "rawdata/ATLASWZRAP11CC/wzrap11.dat"; + + f1.open(datafile.str().c_str(), ios::in); + + if (f1.fail()) { + cerr << "Error opening data file " << datafile.str() << endl; + exit(-1); + } + + // Dummy string + std::string dummy; + + // Read the names of systematics + std::string *sysNames = new std::string[fNSys]; + sysNames[0] = "UNCORR"; + for (int i=0; i<5; i++) f1 >> dummy; + for (int i=0; i> sysNames[i]; + + const int nBins = 2; + const int ndataWZ[nBins] = {11,22}; // Data thresholds for W+ and W- + const double MWZ2[nBins]= {pow(MW,2.0), pow(MW,2.0)}; //Mass squared of W (+ and -) + + int low_bin = 0; + for (int b = 0; b < nBins; b++) + { + for (int i = low_bin; i < ndataWZ[b]; i++) + { + double etamin, etamax; + + // Kinematics + f1 >> dummy; f1 >> etamin; f1 >> etamax; + fKin1[i] = etamin + (etamax - etamin)/2.0; + fKin2[i] = MWZ2[b]; + fKin3[i] = 7000; + + // Observable + f1 >> fData[i]; + fData[i] *= 1000; // pb -> fb + + // Statistical errors - percentage with respect the observable + f1 >> fStat[i]; + fStat[i] *= fData[i]*1e-2; + + // Correlated systematic errors + for (int l = 0; l < fNSys; l++) + { + f1 >> fSys[i][l].mult; + fSys[i][l].type = MULT; + fSys[i][l].name = sysNames[l]; + } + + // Additive errors + for (int l = 0; l < fNSys; l++) + fSys[i][l].add = fSys[i][l].mult*fData[i]*1e-2; + } + // Update lowest point in bin + low_bin = ndataWZ[b]; + } + + delete[] sysNames; + + f1.close(); +} + + diff --git a/buildmaster/filters/ATLASWRAP36PB.cc b/buildmaster/filters/ATLASWRAP36PB.cc new file mode 100644 index 0000000000..98c337d7c1 --- /dev/null +++ b/buildmaster/filters/ATLASWRAP36PB.cc @@ -0,0 +1,130 @@ +/* + This file implements the W production subset of the ATLASWZRAP36PB data set. + This is required to separate CC DY from NC DY. + Implemented by ERN June 2023. +*/ + +#include "ATLASWRAP36PB.h" + +void ATLASWRAP36PBFilter::ReadData() +{ + // Opening files + fstream fWZ[2]; + + stringstream datafile(""); + datafile << dataPath() << "rawdata/ATLASWZRAP36PB/ATLAS-36pb-Wplrap.data"; + fWZ[0].open(datafile.str().c_str(), ios::in); + + if (fWZ[0].fail()) { + cerr << "Error opening data file " << datafile.str() << endl; + exit(-1); + } + + stringstream datafile2(""); + datafile2 << dataPath() << "rawdata/ATLASWZRAP36PB/ATLAS-36pb-Wmlrap.data"; + fWZ[1].open(datafile2.str().c_str(), ios::in); + + if (fWZ[1].fail()) { + cerr << "Error opening data file " << datafile2.str() << endl; + exit(-1); + } + + // Starting filter + const double lcorr = 1.0187; // correction factor due to luminosity upgrade + const int ndataWZ[2] = {11,11}; //Number of data for W+, W- + const double convfac = lcorr*1000.; // Must multiply from pb to fb + const double MWZ2[2] = {pow(MW,2.0), pow(MW,2.0)}; //Mass squared of W (+ and -) and Z + + string line; + int idat = 0; + double etamin,etamax,tmp; + + for (int iWZ = 0; iWZ < 2; iWZ++) + { + // rapidity + getline(fWZ[iWZ],line); + istringstream lstream(line); + for (int i = 0; i < ndataWZ[iWZ]; i++) + { + lstream >> etamin >> etamax; + fKin1[idat+i] = etamin + (etamax-etamin)*0.5; + } + + // M_W + for (int i = 0; i < ndataWZ[iWZ]; i++) + fKin2[idat+i] = MWZ2[iWZ]; + + // sqrt(s) + for (int i = 0; i < ndataWZ[iWZ]; i++) + fKin3[idat+i] = 7000; + + // obs + getline(fWZ[iWZ],line); + istringstream lstream2(line); + for (int i = 0; i < ndataWZ[iWZ]; i++) + { + lstream2 >> fData[idat+i]; + fData[idat+i] *= convfac; + } + + // stat (%, converted later) + getline(fWZ[iWZ],line); + istringstream lstream3(line); + for (int i = 0; i < ndataWZ[iWZ]; i++) + lstream3 >> fStat[idat+i]; + + // uncorrelated sys + getline(fWZ[iWZ],line); + istringstream lstream4(line); + for (int i = 0; i < ndataWZ[iWZ]; i++) + { + lstream4 >> fSys[idat+i][0].mult; + fSys[idat+i][0].name = "UNCORR"; + } + + // total correlated sys (unused) + getline(fWZ[iWZ],line); + + // total uncertainty (unused) + getline(fWZ[iWZ],line); + + // correlated systematics + for (int isys = 2; isys < fNSys; isys++) //2 to skip uncorr and lumi + { + getline(fWZ[iWZ],line); + istringstream lstream(line); + lstream >> tmp; + for (int i = 0; i < ndataWZ[iWZ]; i++) + { + lstream >> fSys[idat+i][isys].mult; + ostringstream sysname; + sysname << "ATLASWZRAP36PB_" << isys-2; + fSys[idat+1][isys].name = sysname.str(); + } + } + + // luminosity: 3.4% + for (int i = 0; i < ndataWZ[iWZ]; i++) + { + fSys[idat+i][1].mult = 3.5; + fSys[idat+i][1].name = "ATLASLUMI10"; + } + + idat+=ndataWZ[iWZ]; + } + + // Convert additive uncertainties to absolute form + for (int i = 0; i < fNData; i++) + { + fStat[i] *= fData[i]*1e-2; + for(int l = 0; l < fNSys; l++) + { + fSys[i][l].type = MULT; // All systematics multiplicative + fSys[i][l].add = fSys[i][l].mult*fData[i]*1e-2; + } + } + + + fWZ[0].close(); + fWZ[1].close(); +} diff --git a/buildmaster/filters/ATLASZRAP11.cc b/buildmaster/filters/ATLASZRAP11.cc new file mode 100644 index 0000000000..4cc4a6e8c5 --- /dev/null +++ b/buildmaster/filters/ATLASZRAP11.cc @@ -0,0 +1,84 @@ +/* + This file implements the Z production subset of the ATLASWZRAP11CC data set. + This is required to separate NC DY from CC DY. + Implemented by ERN June 2023. +*/ + +#include "ATLASZRAP11CC.h" + +// Central selection +void ATLASZRAP11CCFilter::ReadData() +{ + + // Opening files + fstream f1; + + stringstream datafile(""); + datafile << dataPath() << "rawdata/ATLASWZRAP11CC/wzrap11.dat"; + + f1.open(datafile.str().c_str(), ios::in); + + if (f1.fail()) { + cerr << "Error opening data file " << datafile.str() << endl; + exit(-1); + } + + // Dummy string + std::string dummy; + + // Read the names of systematics + std::string *sysNames = new std::string[fNSys]; + sysNames[0] = "UNCORR"; + for (int i=0; i<5; i++) f1 >> dummy; + for (int i=0; i> sysNames[i]; + + const int nBins = 3; + const int ndataWZ[nBins] = {6,18,24}; // Data thresholds for (Z_low, Z_peak, Z_high) respectively + const double MWZ2[nBins]= {pow(56.0,2.0), pow(91.0,2.0), pow(133.0,2.0)}; //Mass squared of (Z_low, Z_peak, Z_high) + + string line; + for(int iline=0; iline<23; iline++) + getline(f1,line); + + int low_bin = 0; + for (int b = 0; b < nBins; b++) + { + for (int i = low_bin; i < ndataWZ[b]; i++) + { + double etamin, etamax; + + // Kinematics + f1 >> dummy; f1 >> etamin; f1 >> etamax; + fKin1[i] = etamin + (etamax - etamin)/2.0; + fKin2[i] = MWZ2[b]; + fKin3[i] = 7000; + + // Observable + f1 >> fData[i]; + fData[i] *= 1000; // pb -> fb + + // Statistical errors - percentage with respect the observable + f1 >> fStat[i]; + fStat[i] *= fData[i]*1e-2; + + // Correlated systematic errors + for (int l = 0; l < fNSys; l++) + { + f1 >> fSys[i][l].mult; + fSys[i][l].type = MULT; + fSys[i][l].name = sysNames[l]; + } + + // Additive errors + for (int l = 0; l < fNSys; l++) + fSys[i][l].add = fSys[i][l].mult*fData[i]*1e-2; + } + // Update lowest point in bin + low_bin = ndataWZ[b]; + } + + delete[] sysNames; + + f1.close(); +} diff --git a/buildmaster/filters/ATLASZRAP36PB.cc b/buildmaster/filters/ATLASZRAP36PB.cc new file mode 100644 index 0000000000..e8a75edc82 --- /dev/null +++ b/buildmaster/filters/ATLASZRAP36PB.cc @@ -0,0 +1,113 @@ +/* + This file implements the Z production subset of the ATLASWZRAP36PB data set. + This is required to separate NC DY from CC DY. + Implemented by ERN June 2023. +*/ + +#include "ATLASZRAP36PB.h" + +void ATLASZRAP36PBFilter::ReadData() +{ + // Opening files + fstream fWZ; + + stringstream datafile(""); + datafile << dataPath() << "rawdata/ATLASWZRAP36PB/ATLAS-36pb-Zrap.data"; + fWZ.open(datafile.str().c_str(), ios::in); + + if (fWZ.fail()) { + cerr << "Error opening data file " << datafile.str() << endl; + exit(-1); + } + + // Starting filter + const double lcorr = 1.0187; // correction factor due to luminosity upgrade + const int ndataWZ = 8; //Number of data for W+, W- and Z respectively + const double convfac = lcorr*1000.; // Must multiply from pb to fb + const double MWZ2 = pow(MZ,2.0); //Mass squared of W (+ and -) and Z + + string line; + double etamin,etamax,tmp; + + // rapidity + getline(fWZ,line); + istringstream lstream(line); + for (int i = 0; i < ndataWZ; i++) + { + lstream >> etamin >> etamax; + fKin1[i] = etamin + (etamax-etamin)*0.5; + } + + //Z + for (int i = 0; i < ndataWZ; i++) + fKin2[i] = MWZ2; + + // sqrt(s) + for (int i = 0; i < ndataWZ; i++) + fKin3[i] = 7000; + + // obs + getline(fWZ,line); + istringstream lstream2(line); + for (int i = 0; i < ndataWZ; i++) + { + lstream2 >> fData[i]; + fData[i] *= convfac; + } + + // stat (%, converted later) + getline(fWZ,line); + istringstream lstream3(line); + for (int i = 0; i < ndataWZ; i++) + lstream3 >> fStat[i]; + + // uncorrelated sys + getline(fWZ,line); + istringstream lstream4(line); + for (int i = 0; i < ndataWZ; i++) + { + lstream4 >> fSys[i][0].mult; + fSys[i][0].name = "UNCORR"; + } + + // total correlated sys (unused) + getline(fWZ,line); + + // total uncertainty (unused) + getline(fWZ,line); + + // correlated systematics + for (int isys = 2; isys < fNSys; isys++) //2 to skip uncorr and lumi + { + getline(fWZ,line); + istringstream lstream(line); + lstream >> tmp; + for (int i = 0; i < ndataWZ; i++) + { + lstream >> fSys[i][isys].mult; + ostringstream sysname; + sysname << "ATLASWZRAP36PB_" << isys-2; + fSys[i][isys].name = sysname.str(); + } + } + + // luminosity: 3.4% + for (int i = 0; i < ndataWZ; i++) + { + fSys[i][1].mult = 3.5; + fSys[i][1].name = "ATLASLUMI10"; + } + + // Convert additive uncertainties to absolute form + for (int i = 0; i < fNData; i++) + { + fStat[i] *= fData[i]*1e-2; + for(int l = 0; l < fNSys; l++) + { + fSys[i][l].type = MULT; // All systematics multiplicative + fSys[i][l].add = fSys[i][l].mult*fData[i]*1e-2; + } + } + + fWZ; +} diff --git a/buildmaster/filters/ATLAS_WZ_TOT_13TEV.cc b/buildmaster/filters/ATLAS_WZ_TOT_13TEV.cc index 4dba14955c..72708e7514 100644 --- a/buildmaster/filters/ATLAS_WZ_TOT_13TEV.cc +++ b/buildmaster/filters/ATLAS_WZ_TOT_13TEV.cc @@ -61,7 +61,7 @@ void ATLAS_WZ_TOT_13TEVFilter::ReadData() sys[i] *= 1e6; lumi[i] *= 1e6; } - + //Correlation coefficients for(int i=0; i<25; i++) { @@ -114,7 +114,7 @@ void ATLAS_WZ_TOT_13TEVFilter::ReadData() { throw runtime_error("Couldn't generate artificial systematics for " + fSetName); } - + for(int i=0; i sys(data_tot); + vector lumi(fNData); + + for(int i=0; i> sdum + >> fData[i] + >> fStat[i] + >> sys[i] + >> lumi[i] + >> fKin1[i] + >> fKin2[i] + >> fKin3[i]; + //conversion to femtobarns + fData[i] *= 1e6; + fStat[i] *= 1e6; + sys[i] *= 1e6; + lumi[i] *= 1e6; + } + + for(int i=0; i<1; i++) + { + string sdum; + double ddum; + + getline(f1,line); + istringstream lstream(line); + lstream >> sdum + >> ddum + >> ddum + >> sys[i+2] + >> ddum + >> ddum + >> ddum + >> ddum; + sys[i+2] *= 1e6; + } + + //Correlation coefficients + for(int i=0; i<25; i++) + { + getline(f2,line); + } + + double** covmat = new double*[data_tot]; + for(int i=0; i corrcoeff(3); + + for(int k=0; k<3; k++) + { + getline(f2,line); + istringstream lstream(line); + lstream >> ddum >> comma >> ddum >> comma >> corrcoeff[k]; + } + + covmat[0][1] = corrcoeff[0]; + covmat[1][0] = covmat[0][1]; + covmat[0][2] = corrcoeff[1]; + covmat[2][0] = covmat[0][2]; + covmat[1][2] = corrcoeff[2]; + covmat[2][1] = covmat[1][2]; + + for(int i=0; i sys(data_tot); + vector lumi(fNData); + + for(int i=0; i<2; i++) + { + string sdum; + double ddum; + + getline(f1,line); + istringstream lstream(line); + lstream >> sdum + >> ddum + >> ddum + >> sys[i] + >> ddum + >> ddum + >> ddum + >> ddum; + sys[i] *= 1e6; + } + + for(int i=0; i> sdum + >> fData[i] + >> fStat[i] + >> sys[i+2] + >> lumi[i] + >> fKin1[i] + >> fKin2[i] + >> fKin3[i]; + //conversion to femtobarns + fData[i] *= 1e6; + fStat[i] *= 1e6; + sys[i+2] *= 1e6; + lumi[i] *= 1e6; + } + + //Correlation coefficients + for(int i=0; i<25; i++) + { + getline(f2,line); + } + + double** covmat = new double*[data_tot]; + for(int i=0; i corrcoeff(data_tot); + + for(int k=0; k> ddum >> comma >> ddum >> comma >> corrcoeff[k]; + } + + covmat[0][1] = corrcoeff[0]; + covmat[1][0] = covmat[0][1]; + covmat[0][2] = corrcoeff[1]; + covmat[2][0] = covmat[0][2]; + covmat[1][2] = corrcoeff[2]; + covmat[2][1] = covmat[1][2]; + + for(int i=0; i> ddum >> ddum >> ddum >> ddum >> ddum >> totsys_z[i]; + //Chck if central value is needed or not + totsys_z[i] *= pb2fb; + } + + // W+ + getline(fWp,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWp,line); + istringstream lstream(line); + + lstream >> etaavg >> etamin >> etamax; + fKin1[idat+i] = etaavg; // eta + fKin2[idat+i] = MW2; // W mass squared + fKin3[idat+i] = s; // sqrt(s) + + lstream >> fData[idat+i]; + fData[idat+i] *= pb2fb; + lstream >> fStat[idat+i]; + fStat[idat+i] *= pb2fb; + lstream >> totsys_w[idat+i]; + totsys_w[idat+i] *= pb2fb; + + lstream >> fSys[idat+i][ndata_tot].add; // Beam uncertainty + fSys[idat+i][ndata_tot].add *= pb2fb; + fSys[idat+i][ndata_tot].mult = fSys[idat+i][ndata_tot].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot].type = MULT; + fSys[idat+i][ndata_tot].name = "LHCBBEAM7TEV"; + + lstream >> fSys[idat+i][ndata_tot+1].add; // Lumi uncertainty + fSys[idat+i][ndata_tot+1].add *= pb2fb; + fSys[idat+i][ndata_tot+1].mult = fSys[idat+i][ndata_tot+1].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot+1].type = MULT; + fSys[idat+i][ndata_tot+1].name = "LHCBLUMI7TEV"; + } + idat+=ndata_wp; + + // W- + getline(fWm,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWm,line); + istringstream lstream(line); + + lstream >> etaavg >> etamin >> etamax; + fKin1[idat+i] = etaavg; // eta + fKin2[idat+i] = MW2; // W mass squared + fKin3[idat+i] = s; // sqrt(s) + + lstream >> fData[idat+i]; + fData[idat+i] *= pb2fb; + lstream >> fStat[idat+i]; + fStat[idat+i] *= pb2fb; + lstream >> totsys_w[idat+i]; + totsys_w[idat+i] *= pb2fb; + + lstream >> fSys[idat+i][ndata_tot].add; // Beam uncertainty + fSys[idat+i][ndata_tot].add *= pb2fb; + fSys[idat+i][ndata_tot].mult = fSys[idat+i][ndata_tot].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot].type = MULT; + fSys[idat+i][ndata_tot].name = "LHCBBEAM7TEV"; + + lstream >> fSys[idat+i][ndata_tot+1].add; // Lumi uncertainty + fSys[idat+i][ndata_tot+1].add *= pb2fb; + fSys[idat+i][ndata_tot+1].mult = fSys[idat+i][ndata_tot+1].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot+1].type = MULT; + fSys[idat+i][ndata_tot+1].name = "LHCBLUMI7TEV"; + } + idat+=ndata_wm; + + for(int i=0; i> inmat[j][i]; + } + } + for (int i = 0; i < ndata_tot; i++) { + for (int j = i+1; j < ndata_tot; j++) { + inmat[j][i] = inmat[i][j]; // symmetrize + } + } + + // Multiply by total systematic uncertainty + double** covmat = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + { + covmat[i] = new double[ndata_tot]; + for(int j = 0; j < ndata_tot; j++) + { + covmat[i][j]=inmat[i][j]*totsys[i]*totsys[j]; + } + } + + // Generate artificial systematics + double** syscor = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + syscor[i] = new double[ndata_tot]; + + if(!genArtSys(ndata_tot,covmat,syscor)) + { + cerr << " in " << fSetName << endl; + exit(-1); + } + + for (int i = 0; i < fNData; i++) + for (int l = 0; l < fNSys-2; l++) + { + fSys[i][l].add = syscor[i+ndata_z][l]; + fSys[i][l].mult = fSys[i][l].add/fData[i]*1e2; + fSys[i][l].type = MULT; + ostringstream sysname; + sysname << "LHCBWZMU7TEV_" << l; + fSys[i][l].name = sysname.str(); + } + + for(int i = 0; i < ndata_tot; i++) + { + delete[] syscor[i]; + delete[] covmat[i]; + } + delete[] syscor; + delete[] covmat; + + fZ.close(); + fWp.close(); + fWm.close(); + fCorr.close(); +} diff --git a/buildmaster/filters/LHCBWMU8TEV.cc b/buildmaster/filters/LHCBWMU8TEV.cc new file mode 100644 index 0000000000..f58603c72d --- /dev/null +++ b/buildmaster/filters/LHCBWMU8TEV.cc @@ -0,0 +1,209 @@ +/* + This file implements the W production subset of the LHCBWZMU8TEV data set. + This is required to separate CC DY from NC DY. + Implemented by ERN June 2023. +*/ + +#include "LHCBWMU8TEV.h" + +void LHCBWMU8TEVFilter::ReadData() +{ + // Opening files + fstream fZ, fWp, fWm, fCorr; + + stringstream DataFileZ(""); + DataFileZ << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_zrap.data"; + fZ.open(DataFileZ.str().c_str(), ios::in); + + if (fZ.fail()) { + cerr << "Error opening data file " << DataFileZ.str() << endl; + exit(-1); + } + + stringstream DataFileWp(""); + DataFileWp << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_wplrap.data"; + fWp.open(DataFileWp.str().c_str(), ios::in); + + if (fWp.fail()) { + cerr << "Error opening data file " << DataFileWp.str() << endl; + exit(-1); + } + + stringstream DataFileWm(""); + DataFileWm << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_wmlrap.data"; + fWm.open(DataFileWm.str().c_str(), ios::in); + + if (fWm.fail()) { + cerr << "Error opening data file " << DataFileWm.str() << endl; + } + + stringstream DataFileCorr(""); + DataFileCorr << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_corrmat.data"; + fCorr.open(DataFileCorr.str().c_str(), ios::in); + + if (fCorr.fail()) { + cerr << "Error opening data file " << DataFileCorr.str() << endl; + exit(-1); + } + + // Starting filter + const int ndata_z = 18; + const int ndata_wp = 8; + const int ndata_wm = 8; + int ndata_tot = ndata_z + ndata_wp + ndata_wm; + const double pb2fb = 1000.; // Must multiply from pb to fb + double MW2 = pow(MW,2.0); + double MZ2 = pow(MZ,2.0); + double s = 8000; + string line; + + double totsys_w[ndata_wp+ndata_wp]; + double totsys_z[ndata_z]; + double totsys[ndata_tot]; + double inmat[ndata_tot][ndata_tot]; + double etaavg, etamin, etamax; + int idat = 0; + + double ddum; + + // Z + getline(fZ,line); + for (int i = 0; i < ndata_z; i++) + { + getline(fZ,line); + istringstream lstream(line); + + lstream >> ddum >> ddum >> ddum >> ddum >> ddum >> totsys_z[i]; + //Chck if central value is needed or not + totsys_z[i] *= pb2fb; + } + + // W+ + getline(fWp,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWp,line); + istringstream lstream(line); + + lstream >> etaavg >> etamin >> etamax; + fKin1[idat+i] = etaavg; // eta + fKin2[idat+i] = MW2; // W mass squared + fKin3[idat+i] = s; // sqrt(s) + + lstream >> fData[idat+i]; + fData[idat+i] *= pb2fb; + lstream >> fStat[idat+i]; + fStat[idat+i] *= pb2fb; + lstream >> totsys_w[idat+i]; + totsys_w[idat+i] *= pb2fb; + + lstream >> fSys[idat+i][ndata_tot].add; // Beam uncertainty + fSys[idat+i][ndata_tot].add *= pb2fb; + fSys[idat+i][ndata_tot].mult = fSys[idat+i][ndata_tot].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot].type = MULT; + fSys[idat+i][ndata_tot].name = "LHCBBEAM8TEV"; + + lstream >> fSys[idat+i][ndata_tot+1].add; // Lumi uncertainty + fSys[idat+i][ndata_tot+1].add *= pb2fb; + fSys[idat+i][ndata_tot+1].mult = fSys[idat+i][ndata_tot+1].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot+1].type = MULT; + fSys[idat+i][ndata_tot+1].name = "LHCBLUMI8TEV"; + } + idat+=ndata_wp; + + // W- + getline(fWm,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWm,line); + istringstream lstream(line); + + lstream >> etaavg >> etamin >> etamax; + fKin1[idat+i] = etaavg; // eta + fKin2[idat+i] = MW2; // W mass squared + fKin3[idat+i] = s; // sqrt(s) + + lstream >> fData[idat+i]; + fData[idat+i] *= pb2fb; + lstream >> fStat[idat+i]; + fStat[idat+i] *= pb2fb; + lstream >> totsys_w[idat+i]; + totsys_w[idat+i] *= pb2fb; + + lstream >> fSys[idat+i][ndata_tot].add; // Beam uncertainty + fSys[idat+i][ndata_tot].add *= pb2fb; + fSys[idat+i][ndata_tot].mult = fSys[idat+i][ndata_tot].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot].type = MULT; + fSys[idat+i][ndata_tot].name = "LHCBBEAM8TEV"; + + lstream >> fSys[idat+i][ndata_tot+1].add; // Lumi uncertainty + fSys[idat+i][ndata_tot+1].add *= pb2fb; + fSys[idat+i][ndata_tot+1].mult = fSys[idat+i][ndata_tot+1].add/fData[idat+i]*1e2; + fSys[idat+i][ndata_tot+1].type = MULT; + fSys[idat+i][ndata_tot+1].name = "LHCBLUMI8TEV"; + } + idat+=ndata_wm; + + for(int i=0; i> inmat[j][i]; + } + } + for (int i = 0; i < ndata_tot; i++) { + for (int j = i+1; j < ndata_tot; j++) { + inmat[j][i] = inmat[i][j]; // symmetrize + } + } + + // Multiply by total systematic uncertainty + double** covmat = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + { + covmat[i] = new double[ndata_tot]; + for(int j = 0; j < ndata_tot; j++) + { + covmat[i][j]=inmat[i][j]*totsys[i]*totsys[j]; + } + } + + // Generate artificial systematics + double** syscor = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + syscor[i] = new double[ndata_tot]; + + if(!genArtSys(ndata_tot,covmat,syscor)) + { + cerr << " in " << fSetName << endl; + exit(-1); + } + + for (int i = 0; i < fNData; i++) + for (int l = 0; l < fNSys-2; l++) + { + fSys[i][l].add = syscor[i+ndata_z][l]; + fSys[i][l].mult = fSys[i][l].add/fData[i]*1e2; + fSys[i][l].type = MULT; + ostringstream sysname; + sysname << "LHCBWZMU8TEV_" << l; + fSys[i][l].name = sysname.str(); + } + + for(int i = 0; i < ndata_tot; i++) + { + delete[] syscor[i]; + delete[] covmat[i]; + } + delete[] syscor; + delete[] covmat; + + fZ.close(); + fWp.close(); + fWm.close(); + fCorr.close(); +} diff --git a/buildmaster/filters/LHCBWZMU7TEV.cc b/buildmaster/filters/LHCBWZMU7TEV.cc index ddc18e2f8f..27694f1836 100644 --- a/buildmaster/filters/LHCBWZMU7TEV.cc +++ b/buildmaster/filters/LHCBWZMU7TEV.cc @@ -181,6 +181,11 @@ void LHCBWZMU7TEVFilter::ReadData() } idat+=ndata_wm; + for(int i=0; i> etaavg >> etamin >> etamax; + fKin1[i] = etaavg; // eta + fKin2[i] = MZ2; // Z mass squared + fKin3[i] = s; // sqrt(s) + + lstream >> fData[i]; + fData[i] *= pb2fb; + lstream >> fStat[i]; + fStat[i] *= pb2fb; + lstream >> totsys_z[i]; + totsys_z[i] *= pb2fb; + + lstream >> fSys[i][ndata_tot].add; // Beam uncertainty + fSys[i][ndata_tot].add *= pb2fb; + fSys[i][ndata_tot].mult = fSys[idat+i][ndata_tot].add/fData[i]*1e2; + fSys[i][ndata_tot].type = MULT; + fSys[i][ndata_tot].name = "LHCBBEAM7TEV"; + + lstream >> fSys[i][ndata_tot+1].add; // Lumi uncertainty + fSys[i][ndata_tot+1].add *= pb2fb; + fSys[i][ndata_tot+1].mult = fSys[i][ndata_tot+1].add/fData[i]*1e2; + fSys[i][ndata_tot+1].type = MULT; + fSys[i][ndata_tot+1].name = "LHCBLUMI7TEV"; + } + + // W+ + getline(fWp,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWp,line); + istringstream lstream(line); + + lstream >> ddum >> ddum >> ddum >> ddum >> ddum >> totsys_w[i+idat]; + //Chck if central value is needed or not + totsys_w[i+idat] *= pb2fb; + } + idat+=ndata_wp; + + // W- + getline(fWm,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWm,line); + istringstream lstream(line); + + lstream >> ddum >> ddum >> ddum >> ddum >> ddum >> totsys_w[i+idat]; + //Chck if central value is needed or not + totsys_w[i+idat] *= pb2fb; + } + idat+=ndata_wm; + + for(int i=0; i> inmat[j][i]; + } + } + for (int i = 0; i < ndata_tot; i++) { + for (int j = i+1; j < ndata_tot; j++) { + inmat[j][i] = inmat[i][j]; // symmetrize + } + } + + // Multiply by total systematic uncertainty + double** covmat = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + { + covmat[i] = new double[ndata_tot]; + for(int j = 0; j < ndata_tot; j++) + { + covmat[i][j]=inmat[i][j]*totsys[i]*totsys[j]; + } + } + + // Generate artificial systematics + double** syscor = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + syscor[i] = new double[ndata_tot]; + + if(!genArtSys(ndata_tot,covmat,syscor)) + { + cerr << " in " << fSetName << endl; + exit(-1); + } + + for (int i = 0; i < fNData; i++) + for (int l = 0; l < fNSys-2; l++) + { + fSys[i][l].add = syscor[i][l]; + fSys[i][l].mult = fSys[i][l].add/fData[i]*1e2; + fSys[i][l].type = MULT; + ostringstream sysname; + sysname << "LHCBWZMU7TEV_" << l; + fSys[i][l].name = sysname.str(); + } + + for(int i = 0; i < ndata_tot; i++) + { + delete[] syscor[i]; + delete[] covmat[i]; + } + delete[] syscor; + delete[] covmat; + + fZ.close(); + fWp.close(); + fWm.close(); + fCorr.close(); +} diff --git a/buildmaster/filters/LHCBZMU8TEV.cc b/buildmaster/filters/LHCBZMU8TEV.cc new file mode 100644 index 0000000000..e7be03c7a8 --- /dev/null +++ b/buildmaster/filters/LHCBZMU8TEV.cc @@ -0,0 +1,189 @@ +/* + This file implements the W production subset of the LHCBWZMU8TEV data set. + This is required to separate NC DY from CC DY. + Implemented by ERN June 2023. +*/ + +#include "LHCBZMU8TEV.h" + +void LHCBZMU8TEVFilter::ReadData() +{ + // Opening files + fstream fZ, fWp, fWm, fCorr; + + stringstream DataFileZ(""); + DataFileZ << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_zrap.data"; + fZ.open(DataFileZ.str().c_str(), ios::in); + + if (fZ.fail()) { + cerr << "Error opening data file " << DataFileZ.str() << endl; + exit(-1); + } + + stringstream DataFileWp(""); + DataFileWp << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_wplrap.data"; + fWp.open(DataFileWp.str().c_str(), ios::in); + + if (fWp.fail()) { + cerr << "Error opening data file " << DataFileWp.str() << endl; + exit(-1); + } + + stringstream DataFileWm(""); + DataFileWm << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_wmlrap.data"; + fWm.open(DataFileWm.str().c_str(), ios::in); + + if (fWm.fail()) { + cerr << "Error opening data file " << DataFileWm.str() << endl; + } + + stringstream DataFileCorr(""); + DataFileCorr << dataPath() << "rawdata/LHCBWZMU8TEV/LHCBWZMU8TEV_corrmat.data"; + fCorr.open(DataFileCorr.str().c_str(), ios::in); + + if (fCorr.fail()) { + cerr << "Error opening data file " << DataFileCorr.str() << endl; + exit(-1); + } + + // Starting filter + const int ndata_z = 18; + const int ndata_wp = 8; + const int ndata_wm = 8; + int ndata_tot = ndata_z + ndata_wp + ndata_wm; + const double pb2fb = 1000.; // Must multiply from pb to fb + double MW2 = pow(MW,2.0); + double MZ2 = pow(MZ,2.0); + double s = 8000; + string line; + + double totsys_w[ndata_wp+ndata_wp]; + double totsys_z[ndata_z]; + double totsys[ndata_tot]; + double inmat[ndata_tot][ndata_tot]; + double etaavg, etamin, etamax; + int idat = 0; + + double ddum; + + // Z + getline(fZ,line); + for (int i = 0; i < ndata_z; i++) + { + getline(fZ,line); + istringstream lstream(line); + + lstream >> etaavg >> etamin >> etamax; + fKin1[i] = etaavg; // eta + fKin2[i] = MZ2; // Z mass squared + fKin3[i] = s; // sqrt(s) + + lstream >> fData[i]; + fData[i] *= pb2fb; + lstream >> fStat[i]; + fStat[i] *= pb2fb; + lstream >> totsys_z[i]; + totsys_z[i] *= pb2fb; + + lstream >> fSys[i][ndata_tot].add; // Beam uncertainty + fSys[i][ndata_tot].add *= pb2fb; + fSys[i][ndata_tot].mult = fSys[idat+i][ndata_tot].add/fData[i]*1e2; + fSys[i][ndata_tot].type = MULT; + fSys[i][ndata_tot].name = "LHCBBEAM8TEV"; + + lstream >> fSys[i][ndata_tot+1].add; // Lumi uncertainty + fSys[i][ndata_tot+1].add *= pb2fb; + fSys[i][ndata_tot+1].mult = fSys[i][ndata_tot+1].add/fData[i]*1e2; + fSys[i][ndata_tot+1].type = MULT; + fSys[i][ndata_tot+1].name = "LHCBLUMI8TEV"; + } + + // W+ + getline(fWp,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWp,line); + istringstream lstream(line); + + lstream >> ddum >> ddum >> ddum >> ddum >> ddum >> totsys_w[i+idat]; + //Chck if central value is needed or not + totsys_w[i+idat] *= pb2fb; + } + idat+=ndata_wp; + + // W- + getline(fWm,line); + for (int i = 0; i < ndata_wp; i++) + { + getline(fWm,line); + istringstream lstream(line); + + lstream >> ddum >> ddum >> ddum >> ddum >> ddum >> totsys_w[i+idat]; + //Chck if central value is needed or not + totsys_w[i+idat] *= pb2fb; + } + idat+=ndata_wm; + + for(int i=0; i> inmat[j][i]; + } + } + for (int i = 0; i < ndata_tot; i++) { + for (int j = i+1; j < ndata_tot; j++) { + inmat[j][i] = inmat[i][j]; // symmetrize + } + } + + // Multiply by total systematic uncertainty + double** covmat = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + { + covmat[i] = new double[ndata_tot]; + for(int j = 0; j < ndata_tot; j++) + { + covmat[i][j]=inmat[i][j]*totsys[i]*totsys[j]; + } + } + + // Generate artificial systematics + double** syscor = new double*[ndata_tot]; + for(int i = 0; i < ndata_tot; i++) + syscor[i] = new double[ndata_tot]; + + if(!genArtSys(ndata_tot,covmat,syscor)) + { + cerr << " in " << fSetName << endl; + exit(-1); + } + + for (int i = 0; i < fNData; i++) + for (int l = 0; l < fNSys-2; l++) + { + fSys[i][l].add = syscor[i][l]; + fSys[i][l].mult = fSys[i][l].add/fData[i]*1e2; + fSys[i][l].type = MULT; + ostringstream sysname; + sysname << "LHCBWZMU8TEV_" << l; + fSys[i][l].name = sysname.str(); + } + + for(int i = 0; i < ndata_tot; i++) + { + delete[] syscor[i]; + delete[] covmat[i]; + } + delete[] syscor; + delete[] covmat; + + fZ.close(); + fWp.close(); + fWm.close(); + fCorr.close(); +} diff --git a/buildmaster/inc/ATLASWRAP11CC.h b/buildmaster/inc/ATLASWRAP11CC.h new file mode 100644 index 0000000000..2c0594a5c8 --- /dev/null +++ b/buildmaster/inc/ATLASWRAP11CC.h @@ -0,0 +1,24 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +// ********* Filters ************** + +class ATLASWRAP11CCFilter: public CommonData +{ +public: ATLASWRAP11CCFilter(): + CommonData("ATLASWRAP11CC") { ReadData(); } + +private: + void ReadData(); +}; + + diff --git a/buildmaster/inc/ATLASWRAP36PB.h b/buildmaster/inc/ATLASWRAP36PB.h new file mode 100644 index 0000000000..fb0fb994f9 --- /dev/null +++ b/buildmaster/inc/ATLASWRAP36PB.h @@ -0,0 +1,22 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +// ********* Filters ************** + +class ATLASWRAP36PBFilter: public CommonData +{ +public: ATLASWRAP36PBFilter(): + CommonData("ATLASWRAP36PB") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/ATLASZRAP11CC.h b/buildmaster/inc/ATLASZRAP11CC.h new file mode 100644 index 0000000000..f13e3f7055 --- /dev/null +++ b/buildmaster/inc/ATLASZRAP11CC.h @@ -0,0 +1,24 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +// ********* Filters ************** + +class ATLASZRAP11CCFilter: public CommonData +{ +public: ATLASZRAP11CCFilter(): + CommonData("ATLASZRAP11CC") { ReadData(); } + +private: + void ReadData(); +}; + + diff --git a/buildmaster/inc/ATLASZRAP36PB.h b/buildmaster/inc/ATLASZRAP36PB.h new file mode 100644 index 0000000000..22c935c452 --- /dev/null +++ b/buildmaster/inc/ATLASZRAP36PB.h @@ -0,0 +1,22 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +// ********* Filters ************** + +class ATLASZRAP36PBFilter: public CommonData +{ +public: ATLASZRAP36PBFilter(): + CommonData("ATLASZRAP36PB") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/ATLAS_W_TOT_13TEV.h b/buildmaster/inc/ATLAS_W_TOT_13TEV.h new file mode 100644 index 0000000000..f7c66a2a39 --- /dev/null +++ b/buildmaster/inc/ATLAS_W_TOT_13TEV.h @@ -0,0 +1,15 @@ +#pragma once +/* + * See the rawdata folder for details. +*/ + +#include "buildmaster_utils.h" + +class ATLAS_W_TOT_13TEVFilter: public CommonData +{ +public: ATLAS_W_TOT_13TEVFilter(): + CommonData("ATLAS_W_TOT_13TEV") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/ATLAS_Z_TOT_13TEV.h b/buildmaster/inc/ATLAS_Z_TOT_13TEV.h new file mode 100644 index 0000000000..eb83bcb43f --- /dev/null +++ b/buildmaster/inc/ATLAS_Z_TOT_13TEV.h @@ -0,0 +1,15 @@ +#pragma once +/* + * See the rawdata folder for details. +*/ + +#include "buildmaster_utils.h" + +class ATLAS_Z_TOT_13TEVFilter: public CommonData +{ +public: ATLAS_Z_TOT_13TEVFilter(): + CommonData("ATLAS_Z_TOT_13TEV") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/LHCBWMU7TEV.h b/buildmaster/inc/LHCBWMU7TEV.h new file mode 100644 index 0000000000..e9d0a2ae1a --- /dev/null +++ b/buildmaster/inc/LHCBWMU7TEV.h @@ -0,0 +1,20 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +class LHCBWMU7TEVFilter: public CommonData +{ +public: LHCBWMU7TEVFilter(): + CommonData("LHCBWMU7TEV") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/LHCBWMU8TEV.h b/buildmaster/inc/LHCBWMU8TEV.h new file mode 100644 index 0000000000..01c4efbcce --- /dev/null +++ b/buildmaster/inc/LHCBWMU8TEV.h @@ -0,0 +1,20 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +class LHCBWMU8TEVFilter: public CommonData +{ +public: LHCBWMU8TEVFilter(): + CommonData("LHCBWMU8TEV") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/LHCBZMU7TEV.h b/buildmaster/inc/LHCBZMU7TEV.h new file mode 100644 index 0000000000..de5c06956b --- /dev/null +++ b/buildmaster/inc/LHCBZMU7TEV.h @@ -0,0 +1,20 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +class LHCBZMU7TEVFilter: public CommonData +{ +public: LHCBZMU7TEVFilter(): + CommonData("LHCBZMU7TEV") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/inc/LHCBZMU8TEV.h b/buildmaster/inc/LHCBZMU8TEV.h new file mode 100644 index 0000000000..46412123f0 --- /dev/null +++ b/buildmaster/inc/LHCBZMU8TEV.h @@ -0,0 +1,20 @@ +// $Id +// +// NNPDF++ 2013 +// +// Authors: Nathan Hartland, n.p.hartland@ed.ac.uk +// Stefano Carrazza, stefano.carrazza@mi.infn.it +// Luigi Del Debbio, luigi.del.debbio@ed.ac.uk + +#pragma once + +#include "buildmaster_utils.h" + +class LHCBZMU8TEVFilter: public CommonData +{ +public: LHCBZMU8TEVFilter(): + CommonData("LHCBZMU8TEV") { ReadData(); } + +private: + void ReadData(); +}; diff --git a/buildmaster/meta/ATLASWRAP11CC.yaml b/buildmaster/meta/ATLASWRAP11CC.yaml new file mode 100644 index 0000000000..e052a004ee --- /dev/null +++ b/buildmaster/meta/ATLASWRAP11CC.yaml @@ -0,0 +1,4 @@ +ndata: 22 +nsys: 133 +setname: "ATLASWRAP11CC" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/ATLASWRAP36PB.yaml b/buildmaster/meta/ATLASWRAP36PB.yaml new file mode 100644 index 0000000000..7506fed2e8 --- /dev/null +++ b/buildmaster/meta/ATLASWRAP36PB.yaml @@ -0,0 +1,4 @@ +ndata: 22 +nsys: 32 +setname: "ATLASWRAP36PB" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/ATLASZRAP11CC.yaml b/buildmaster/meta/ATLASZRAP11CC.yaml new file mode 100644 index 0000000000..3c0e8cbaa5 --- /dev/null +++ b/buildmaster/meta/ATLASZRAP11CC.yaml @@ -0,0 +1,4 @@ +ndata: 24 +nsys: 133 +setname: "ATLASZRAP11CC" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/ATLASZRAP36PB.yaml b/buildmaster/meta/ATLASZRAP36PB.yaml new file mode 100644 index 0000000000..e9008e9306 --- /dev/null +++ b/buildmaster/meta/ATLASZRAP36PB.yaml @@ -0,0 +1,4 @@ +ndata: 8 +nsys: 32 +setname: "ATLASZRAP36PB" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/ATLAS_W_TOT_13TEV.yaml b/buildmaster/meta/ATLAS_W_TOT_13TEV.yaml new file mode 100644 index 0000000000..d4c109ea38 --- /dev/null +++ b/buildmaster/meta/ATLAS_W_TOT_13TEV.yaml @@ -0,0 +1,4 @@ +ndata: 2 +nsys: 4 +setname: "ATLAS_W_TOT_13TEV" +proctype: "INC" diff --git a/buildmaster/meta/ATLAS_Z_TOT_13TEV.yaml b/buildmaster/meta/ATLAS_Z_TOT_13TEV.yaml new file mode 100644 index 0000000000..c27cb5b6d0 --- /dev/null +++ b/buildmaster/meta/ATLAS_Z_TOT_13TEV.yaml @@ -0,0 +1,4 @@ +ndata: 1 +nsys: 4 +setname: "ATLAS_Z_TOT_13TEV" +proctype: "INC" diff --git a/buildmaster/meta/LHCBWMU7TEV.yaml b/buildmaster/meta/LHCBWMU7TEV.yaml new file mode 100644 index 0000000000..021b1bdb3d --- /dev/null +++ b/buildmaster/meta/LHCBWMU7TEV.yaml @@ -0,0 +1,4 @@ +ndata: 16 +nsys: 35 +setname: "LHCBWMU7TEV" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/LHCBWMU8TEV.yaml b/buildmaster/meta/LHCBWMU8TEV.yaml new file mode 100644 index 0000000000..b82825f9af --- /dev/null +++ b/buildmaster/meta/LHCBWMU8TEV.yaml @@ -0,0 +1,4 @@ +ndata: 16 +nsys: 36 +setname: "LHCBWMU8TEV" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/LHCBZMU7TEV.yaml b/buildmaster/meta/LHCBZMU7TEV.yaml new file mode 100644 index 0000000000..20f7fb7412 --- /dev/null +++ b/buildmaster/meta/LHCBZMU7TEV.yaml @@ -0,0 +1,4 @@ +ndata: 17 +nsys: 35 +setname: "LHCBZMU7TEV" +proctype: "EWK_RAP" diff --git a/buildmaster/meta/LHCBZMU8TEV.yaml b/buildmaster/meta/LHCBZMU8TEV.yaml new file mode 100644 index 0000000000..88b261be00 --- /dev/null +++ b/buildmaster/meta/LHCBZMU8TEV.yaml @@ -0,0 +1,4 @@ +ndata: 18 +nsys: 36 +setname: "LHCBZMU8TEV" +proctype: "EWK_RAP" diff --git a/buildmaster/src/buildmaster.cc b/buildmaster/src/buildmaster.cc index 51cb38395d..c5f588a4aa 100644 --- a/buildmaster/src/buildmaster.cc +++ b/buildmaster/src/buildmaster.cc @@ -57,6 +57,12 @@ #include "H1F2B.h" #include "ATLASWZTOT13TEV81PB.h" #include "ATLAS_WZ_TOT_13TEV.h" +#include "ATLAS_W_TOT_13TEV.h" +#include "ATLAS_Z_TOT_13TEV.h" +#include "ATLASWRAP36PB.h" +#include "ATLASZRAP36PB.h" +#include "ATLASWRAP11CC.h" +#include "ATLASZRAP11CC.h" #include "ATLASZPT7TEV.h" #include "ATLASZPT8TEV.h" #include "ATLASTTBARTOT.h" @@ -115,6 +121,11 @@ #include "CMS_HMDY_13TEV.h" #include "ATLAS_DY_2D_8TEV_LOWMASS.h" #include "ATLAS_WMU_8TEV.h" +#include "LHCBWMU7TEV.h" +#include "LHCBZMU7TEV.h" +#include "LHCBWMU8TEV.h" +#include "LHCBZMU8TEV.h" + /** * \param argv the filename containing the configuration */ @@ -154,7 +165,11 @@ vector> InitCommonData() // ************************* ATLAS ****************************** target.emplace_back(new ATLASWZRAP36PBFilter()); + target.emplace_back(new ATLASWRAP36PBFilter()); + target.emplace_back(new ATLASZRAP36PBFilter()); target.emplace_back(new ATLASWZRAP11CCFilter()); + target.emplace_back(new ATLASWRAP11CCFilter()); + target.emplace_back(new ATLASZRAP11CCFilter()); target.emplace_back(new ATLASWZRAP11CFFilter()); target.emplace_back(new ATLASR04JETS36PBFilter()); target.emplace_back(new ATLASR06JETS36PBFilter()); @@ -166,6 +181,8 @@ vector> InitCommonData() target.emplace_back(new ATLASLOMASSDY11EXTFilter()); target.emplace_back(new ATLASWZTOT13TEV81PBFilter()); target.emplace_back(new ATLAS_WZ_TOT_13TEVFilter()); + target.emplace_back(new ATLAS_W_TOT_13TEVFilter()); + target.emplace_back(new ATLAS_Z_TOT_13TEVFilter()); // target.emplace_back(new ATLASZPT7TEVFilter()); target.emplace_back(new ATLAS_WCHARM_WP_DIFF_7TEVFilter()); @@ -329,7 +346,11 @@ vector> InitCommonData() target.emplace_back(new LHCBZEE2FBFilter()); target.emplace_back(new LHCBZEE2FB_40Filter()); target.emplace_back(new LHCBWZMU7TEVFilter()); + target.emplace_back(new LHCBWMU7TEVFilter()); + target.emplace_back(new LHCBZMU7TEVFilter()); target.emplace_back(new LHCBWZMU8TEVFilter()); + target.emplace_back(new LHCBWMU8TEVFilter()); + target.emplace_back(new LHCBZMU8TEVFilter()); target.emplace_back(new LHCB_WENU_8TEV_RFilter()); target.emplace_back(new LHCB_WENU_8TEV_AFilter()); target.emplace_back(new LHCB_Z_13TEV_DIMUONFilter()); diff --git a/nnpdfcpp/data/commondata/DATA_ATLASWRAP11CC.dat b/nnpdfcpp/data/commondata/DATA_ATLASWRAP11CC.dat new file mode 100644 index 0000000000..6bf2ca0f41 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_ATLASWRAP11CC.dat @@ -0,0 +1,23 @@ +ATLASWRAP11CC 133 22 + 1 EWK_RAP 1.050000000000e-01 6.463838404000e+03 7.000000000000e+03 5.771500000000e+05 6.263808950000e+02 7.609145600000e+02 1.318400000000e-01 -1.269730000000e+02 -2.200000000000e-02 5.771500000000e+00 1.000000000000e-03 5.771500000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -5.771500000000e+00 -1.000000000000e-03 2.885750000000e+01 5.000000000000e-03 -6.925800000000e+01 -1.200000000000e-02 8.195530000000e+02 1.420000000000e-01 1.644877500000e+03 2.850000000000e-01 2.770320000000e+02 4.800000000000e-02 2.885750000000e+01 5.000000000000e-03 2.020025000000e+02 3.500000000000e-02 0.000000000000e+00 0.000000000000e+00 6.579510000000e+02 1.140000000000e-01 5.194350000000e+01 9.000000000000e-03 1.731450000000e+01 3.000000000000e-03 4.040050000000e+01 7.000000000000e-03 1.212015000000e+02 2.100000000000e-02 6.925800000000e+01 1.200000000000e-02 -2.597175000000e+02 -4.500000000000e-02 -1.154300000000e+01 -2.000000000000e-03 -2.308600000000e+01 -4.000000000000e-03 -2.885750000000e+01 -5.000000000000e-03 -5.771500000000e+00 -1.000000000000e-03 5.194350000000e+01 9.000000000000e-03 -4.617200000000e+01 -8.000000000000e-03 4.040050000000e+01 7.000000000000e-03 -4.040050000000e+01 -7.000000000000e-03 5.771500000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -5.771500000000e+00 -1.000000000000e-03 2.308600000000e+01 4.000000000000e-03 3.462900000000e+01 6.000000000000e-03 5.771500000000e+00 1.000000000000e-03 -2.308600000000e+01 -4.000000000000e-03 6.925800000000e+01 1.200000000000e-02 3.174325000000e+02 5.500000000000e-02 -1.154300000000e+02 -2.000000000000e-02 4.040050000000e+01 7.000000000000e-03 2.193170000000e+02 3.800000000000e-02 1.442875000000e+02 2.500000000000e-02 2.885750000000e+01 5.000000000000e-03 -7.502950000000e+01 -1.300000000000e-02 1.154300000000e+01 2.000000000000e-03 1.038870000000e+02 1.800000000000e-02 2.308600000000e+01 4.000000000000e-03 5.194350000000e+01 9.000000000000e-03 -4.617200000000e+01 -8.000000000000e-03 1.096585000000e+02 1.900000000000e-02 1.154300000000e+01 2.000000000000e-03 1.731450000000e+02 3.000000000000e-02 -1.154300000000e+02 -2.000000000000e-02 -1.154300000000e+01 -2.000000000000e-03 9.234400000000e+01 1.600000000000e-02 1.096585000000e+02 1.900000000000e-02 7.502950000000e+01 1.300000000000e-02 2.250885000000e+02 3.900000000000e-02 4.617200000000e+01 8.000000000000e-03 -1.154300000000e+01 -2.000000000000e-03 2.885750000000e+01 5.000000000000e-03 1.846880000000e+02 3.200000000000e-02 1.789165000000e+02 3.100000000000e-02 1.038870000000e+02 1.800000000000e-02 1.269730000000e+02 2.200000000000e-02 -1.038870000000e+02 -1.800000000000e-02 4.040050000000e+01 7.000000000000e-03 -4.040050000000e+01 -7.000000000000e-03 -2.885750000000e+01 -5.000000000000e-03 -1.096585000000e+02 -1.900000000000e-02 -0.000000000000e+00 -0.000000000000e+00 1.327445000000e+02 2.300000000000e-02 8.080100000000e+01 1.400000000000e-02 5.771500000000e+01 1.000000000000e-02 1.038870000000e+02 1.800000000000e-02 -4.617200000000e+02 -8.000000000000e-02 -2.424030000000e+02 -4.200000000000e-02 -1.327445000000e+02 -2.300000000000e-02 1.500590000000e+02 2.600000000000e-02 3.462900000000e+01 6.000000000000e-03 -2.770320000000e+02 -4.800000000000e-02 -2.539460000000e+02 -4.400000000000e-02 -2.885750000000e+01 -5.000000000000e-03 1.096585000000e+02 1.900000000000e-02 1.327445000000e+02 2.300000000000e-02 -8.657250000000e+01 -1.500000000000e-02 6.925800000000e+01 1.200000000000e-02 4.617200000000e+01 8.000000000000e-03 5.194350000000e+01 9.000000000000e-03 1.731450000000e+01 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.500590000000e+02 2.600000000000e-02 1.442875000000e+02 2.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 5.771500000000e+01 1.000000000000e-02 -2.885750000000e+01 -5.000000000000e-03 -6.925800000000e+01 -1.200000000000e-02 -9.234400000000e+01 -1.600000000000e-02 2.654890000000e+02 4.600000000000e-02 2.885750000000e+01 5.000000000000e-03 5.194350000000e+01 9.000000000000e-03 -2.020025000000e+02 -3.500000000000e-02 8.080100000000e+01 1.400000000000e-02 1.154300000000e+01 2.000000000000e-03 -1.148528500000e+03 -1.990000000000e-01 -1.962310000000e+02 -3.400000000000e-02 -5.021205000000e+02 -8.700000000000e-02 3.462900000000e+01 6.000000000000e-03 -1.616020000000e+02 -2.800000000000e-02 5.482925000000e+02 9.500000000000e-02 5.194350000000e+01 9.000000000000e-03 6.637225000000e+02 1.150000000000e-01 6.406365000000e+02 1.110000000000e-01 7.214375000000e+02 1.250000000000e-01 -1.500590000000e+02 -2.600000000000e-02 -5.540640000000e+02 -9.600000000000e-02 1.038870000000e+02 1.800000000000e-02 2.308600000000e+01 4.000000000000e-03 -1.154300000000e+01 -2.000000000000e-03 -8.657250000000e+01 -1.500000000000e-02 2.308600000000e+01 4.000000000000e-03 2.308600000000e+01 4.000000000000e-03 4.097765000000e+02 7.100000000000e-02 1.038870000000e+04 1.800000000000e+00 7.156660000000e+02 1.240000000000e-01 + 2 EWK_RAP 3.150000000000e-01 6.463838404000e+03 7.000000000000e+03 5.768700000000e+05 6.209428680000e+02 8.455760460000e+02 1.465800000000e-01 -9.229920000000e+01 -1.600000000000e-02 1.153740000000e+01 2.000000000000e-03 1.153740000000e+01 2.000000000000e-03 5.768700000000e+00 1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.884350000000e+01 5.000000000000e-03 -6.922440000000e+01 -1.200000000000e-02 6.691692000000e+02 1.160000000000e-01 1.488324600000e+03 2.580000000000e-01 -5.768700000000e+00 -1.000000000000e-03 -4.614960000000e+01 -8.000000000000e-03 1.961358000000e+02 3.400000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.634005000000e+02 1.150000000000e-01 5.191830000000e+01 9.000000000000e-03 1.730610000000e+01 3.000000000000e-03 4.038090000000e+01 7.000000000000e-03 1.153740000000e+02 2.000000000000e-02 6.345570000000e+01 1.100000000000e-02 -8.076180000000e+01 -1.400000000000e-02 -1.153740000000e+01 -2.000000000000e-03 -1.153740000000e+01 -2.000000000000e-03 -2.307480000000e+01 -4.000000000000e-03 -5.768700000000e+00 -1.000000000000e-03 4.038090000000e+01 7.000000000000e-03 -2.884350000000e+01 -5.000000000000e-03 3.461220000000e+01 6.000000000000e-03 -4.038090000000e+01 -7.000000000000e-03 2.307480000000e+01 4.000000000000e-03 4.038090000000e+01 7.000000000000e-03 -1.730610000000e+01 -3.000000000000e-03 2.884350000000e+01 5.000000000000e-03 1.730610000000e+01 3.000000000000e-03 5.768700000000e+00 1.000000000000e-03 -2.307480000000e+01 -4.000000000000e-03 9.806790000000e+01 1.700000000000e-02 8.653050000000e+01 1.500000000000e-02 1.153740000000e+01 2.000000000000e-03 5.191830000000e+01 9.000000000000e-03 2.538228000000e+02 4.400000000000e-02 1.499862000000e+02 2.600000000000e-02 1.730610000000e+01 3.000000000000e-03 -6.345570000000e+01 -1.100000000000e-02 2.307480000000e+01 4.000000000000e-03 7.499310000000e+01 1.300000000000e-02 1.153740000000e+01 2.000000000000e-03 2.307480000000e+01 4.000000000000e-03 -2.884350000000e+01 -5.000000000000e-03 8.653050000000e+01 1.500000000000e-02 2.884350000000e+01 5.000000000000e-03 1.672923000000e+02 2.900000000000e-02 -1.096053000000e+02 -1.900000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -1.557549000000e+02 -2.700000000000e-02 -1.384488000000e+02 -2.400000000000e-02 2.884350000000e+01 5.000000000000e-03 1.730610000000e+02 3.000000000000e-02 -1.153740000000e+02 -2.000000000000e-02 1.153740000000e+01 2.000000000000e-03 -1.096053000000e+02 -1.900000000000e-02 5.191830000000e+01 9.000000000000e-03 2.884350000000e+01 5.000000000000e-03 -5.768700000000e+00 -1.000000000000e-03 2.307480000000e+01 4.000000000000e-03 2.307480000000e+01 4.000000000000e-03 1.672923000000e+02 2.900000000000e-02 -9.806790000000e+01 -1.700000000000e-02 -2.480541000000e+02 -4.300000000000e-02 -7.499310000000e+01 -1.300000000000e-02 -0.000000000000e+00 -0.000000000000e+00 1.499862000000e+02 2.600000000000e-02 1.096053000000e+02 1.900000000000e-02 -2.884350000000e+01 -5.000000000000e-03 5.768700000000e+00 1.000000000000e-03 -7.499310000000e+01 -1.300000000000e-02 -5.768700000000e+01 -1.000000000000e-02 -7.499310000000e+01 -1.300000000000e-02 -2.307480000000e+02 -4.000000000000e-02 3.461220000000e+02 6.000000000000e-02 -5.191830000000e+01 -9.000000000000e-03 -3.461220000000e+02 -6.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -1.153740000000e+01 -2.000000000000e-03 1.384488000000e+02 2.400000000000e-02 2.884350000000e+01 5.000000000000e-03 8.076180000000e+01 1.400000000000e-02 4.038090000000e+01 7.000000000000e-03 3.461220000000e+01 6.000000000000e-03 1.153740000000e+01 2.000000000000e-03 -5.768700000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 2.249793000000e+02 3.900000000000e-02 -1.730610000000e+01 -3.000000000000e-03 3.461220000000e+01 6.000000000000e-03 -3.461220000000e+01 -6.000000000000e-03 -4.614960000000e+01 -8.000000000000e-03 -9.229920000000e+01 -1.600000000000e-02 8.653050000000e+01 1.500000000000e-02 6.345570000000e+01 1.100000000000e-02 2.884350000000e+01 5.000000000000e-03 -1.730610000000e+01 -3.000000000000e-03 -5.768700000000e+00 -1.000000000000e-03 5.768700000000e+00 1.000000000000e-03 -4.038090000000e+01 -7.000000000000e-03 -1.130665200000e+03 -1.960000000000e-01 -2.365167000000e+02 -4.100000000000e-02 -4.961082000000e+02 -8.600000000000e-02 9.229920000000e+01 1.600000000000e-02 2.307480000000e+01 4.000000000000e-03 9.979851000000e+02 1.730000000000e-01 9.229920000000e+01 1.600000000000e-02 6.403257000000e+02 1.110000000000e-01 5.941761000000e+02 1.030000000000e-01 6.749379000000e+02 1.170000000000e-01 -1.326801000000e+02 -2.300000000000e-02 -3.172785000000e+02 -5.500000000000e-02 2.307480000000e+01 4.000000000000e-03 4.614960000000e+01 8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.557549000000e+02 -2.700000000000e-02 4.038090000000e+01 7.000000000000e-03 -6.345570000000e+01 -1.100000000000e-02 1.845984000000e+02 3.200000000000e-02 1.038366000000e+04 1.800000000000e+00 6.634005000000e+02 1.150000000000e-01 + 3 EWK_RAP 5.250000000000e-01 6.463838404000e+03 7.000000000000e+03 5.817500000000e+05 5.346224325000e+02 7.192757000000e+02 1.236400000000e-01 -2.152475000000e+02 -3.700000000000e-02 2.327000000000e+01 4.000000000000e-03 1.745250000000e+01 3.000000000000e-03 -5.817500000000e+00 -1.000000000000e-03 1.163500000000e+01 2.000000000000e-03 7.562750000000e+01 1.300000000000e-02 -1.279850000000e+02 -2.200000000000e-02 7.853625000000e+02 1.350000000000e-01 1.320572500000e+03 2.270000000000e-01 -2.617875000000e+02 -4.500000000000e-02 -1.047150000000e+02 -1.800000000000e-02 1.919775000000e+02 3.300000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.631950000000e+02 1.140000000000e-01 5.235750000000e+01 9.000000000000e-03 1.745250000000e+01 3.000000000000e-03 3.490500000000e+01 6.000000000000e-03 1.047150000000e+02 1.800000000000e-02 6.399250000000e+01 1.100000000000e-02 -2.327000000000e+01 -4.000000000000e-03 -1.745250000000e+01 -3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.327000000000e+01 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 3.490500000000e+01 6.000000000000e-03 -4.072250000000e+01 -7.000000000000e-03 2.908750000000e+01 5.000000000000e-03 -1.745250000000e+01 -3.000000000000e-03 1.745250000000e+01 3.000000000000e-03 -4.072250000000e+01 -7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 8.726250000000e+01 1.500000000000e-02 5.817500000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -2.908750000000e+01 -5.000000000000e-03 1.047150000000e+02 1.800000000000e-02 2.327000000000e+01 4.000000000000e-03 -2.385175000000e+02 -4.100000000000e-02 2.094300000000e+02 3.600000000000e-02 1.861600000000e+02 3.200000000000e-02 6.399250000000e+01 1.100000000000e-02 -5.817500000000e+00 -1.000000000000e-03 -8.726250000000e+01 -1.500000000000e-02 -2.908750000000e+01 -5.000000000000e-03 5.817500000000e+01 1.000000000000e-02 -1.163500000000e+01 -2.000000000000e-03 -2.327000000000e+01 -4.000000000000e-03 -1.745250000000e+01 -3.000000000000e-03 4.072250000000e+01 7.000000000000e-03 5.817500000000e+00 1.000000000000e-03 1.745250000000e+02 3.000000000000e-02 -1.221675000000e+02 -2.100000000000e-02 5.817500000000e+00 1.000000000000e-03 -1.512550000000e+02 -2.600000000000e-02 -1.512550000000e+02 -2.600000000000e-02 5.235750000000e+01 9.000000000000e-03 9.889750000000e+01 1.700000000000e-02 5.817500000000e+00 1.000000000000e-03 2.908750000000e+01 5.000000000000e-03 -5.817500000000e+00 -1.000000000000e-03 1.687075000000e+02 2.900000000000e-02 9.308000000000e+01 1.600000000000e-02 -4.654000000000e+01 -8.000000000000e-03 -6.981000000000e+01 -1.200000000000e-02 -9.889750000000e+01 -1.700000000000e-02 3.490500000000e+01 6.000000000000e-03 -9.308000000000e+01 -1.600000000000e-02 -3.839550000000e+02 -6.600000000000e-02 -4.654000000000e+01 -8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.268825000000e+02 3.900000000000e-02 1.977950000000e+02 3.400000000000e-02 4.072250000000e+01 7.000000000000e-03 -1.745250000000e+01 -3.000000000000e-03 -5.817500000000e+00 -1.000000000000e-03 -5.817500000000e+00 -1.000000000000e-03 -5.235750000000e+01 -9.000000000000e-03 -3.432325000000e+02 -5.900000000000e-02 3.665025000000e+02 6.300000000000e-02 1.163500000000e+01 2.000000000000e-03 -8.726250000000e+01 -1.500000000000e-02 -9.889750000000e+01 -1.700000000000e-02 4.072250000000e+01 7.000000000000e-03 -1.163500000000e+01 -2.000000000000e-03 7.562750000000e+01 1.300000000000e-02 9.889750000000e+01 1.700000000000e-02 3.490500000000e+01 6.000000000000e-03 2.327000000000e+01 4.000000000000e-03 5.817500000000e+00 1.000000000000e-03 -1.163500000000e+01 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 8.144500000000e+01 1.400000000000e-02 -5.817500000000e+00 -1.000000000000e-03 5.817500000000e+00 1.000000000000e-03 -2.908750000000e+01 -5.000000000000e-03 -8.726250000000e+01 -1.500000000000e-02 -9.308000000000e+01 -1.600000000000e-02 5.235750000000e+01 9.000000000000e-03 -1.163500000000e+01 -2.000000000000e-03 5.817500000000e+01 1.000000000000e-02 2.327000000000e+01 4.000000000000e-03 -5.817500000000e+00 -1.000000000000e-03 -1.163500000000e+01 -2.000000000000e-03 -5.817500000000e+01 -1.000000000000e-02 -1.169317500000e+03 -2.010000000000e-01 -2.036125000000e+02 -3.500000000000e-02 -4.886700000000e+02 -8.400000000000e-02 2.908750000000e+01 5.000000000000e-03 1.745250000000e+01 3.000000000000e-03 7.562750000000e+02 1.300000000000e-01 1.338025000000e+02 2.300000000000e-02 6.748300000000e+02 1.160000000000e-01 6.224725000000e+02 1.070000000000e-01 6.224725000000e+02 1.070000000000e-01 -5.235750000000e+01 -9.000000000000e-03 -4.421300000000e+02 -7.600000000000e-02 1.221675000000e+02 2.100000000000e-02 1.803425000000e+02 3.100000000000e-02 5.817500000000e+00 1.000000000000e-03 1.687075000000e+02 2.900000000000e-02 -5.817500000000e+00 -1.000000000000e-03 3.199625000000e+02 5.500000000000e-02 4.595825000000e+02 7.900000000000e-02 1.047150000000e+04 1.800000000000e+00 6.050200000000e+02 1.040000000000e-01 + 4 EWK_RAP 7.350000000000e-01 6.463838404000e+03 7.000000000000e+03 5.860700000000e+05 5.851322880000e+02 6.731013950000e+02 1.148500000000e-01 -4.102490000000e+01 -7.000000000000e-03 5.274630000000e+01 9.000000000000e-03 2.344280000000e+01 4.000000000000e-03 5.860700000000e+00 1.000000000000e-03 5.860700000000e+00 1.000000000000e-03 5.860700000000e+01 1.000000000000e-02 -8.791050000000e+01 -1.500000000000e-02 7.618910000000e+02 1.300000000000e-01 1.213164900000e+03 2.070000000000e-01 -4.922988000000e+02 -8.400000000000e-02 -1.523782000000e+02 -2.600000000000e-02 1.816817000000e+02 3.100000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.622591000000e+02 1.130000000000e-01 5.274630000000e+01 9.000000000000e-03 1.758210000000e+01 3.000000000000e-03 4.102490000000e+01 7.000000000000e-03 9.963190000000e+01 1.700000000000e-02 6.446770000000e+01 1.100000000000e-02 -2.344280000000e+01 -4.000000000000e-03 -5.860700000000e+00 -1.000000000000e-03 -5.860700000000e+00 -1.000000000000e-03 -2.344280000000e+01 -4.000000000000e-03 -5.860700000000e+00 -1.000000000000e-03 2.344280000000e+01 4.000000000000e-03 -1.758210000000e+01 -3.000000000000e-03 5.860700000000e+00 1.000000000000e-03 -1.172140000000e+01 -2.000000000000e-03 -5.860700000000e+00 -1.000000000000e-03 -1.758210000000e+01 -3.000000000000e-03 -7.032840000000e+01 -1.200000000000e-02 1.172140000000e+01 2.000000000000e-03 1.758210000000e+01 3.000000000000e-03 1.172140000000e+01 2.000000000000e-03 1.406568000000e+02 2.400000000000e-02 3.164778000000e+02 5.400000000000e-02 8.791050000000e+01 1.500000000000e-02 -7.032840000000e+01 -1.200000000000e-02 1.172140000000e+01 2.000000000000e-03 9.377120000000e+01 1.600000000000e-02 8.791050000000e+01 1.500000000000e-02 -5.860700000000e+00 -1.000000000000e-03 -5.860700000000e+01 -1.000000000000e-02 5.860700000000e+00 1.000000000000e-03 2.344280000000e+01 4.000000000000e-03 1.758210000000e+01 3.000000000000e-03 -2.344280000000e+01 -4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.344280000000e+01 4.000000000000e-03 1.758210000000e+01 3.000000000000e-03 1.758210000000e+02 3.000000000000e-02 -1.230747000000e+02 -2.100000000000e-02 1.172140000000e+01 2.000000000000e-03 -1.875424000000e+02 -3.200000000000e-02 -1.465175000000e+02 -2.500000000000e-02 9.377120000000e+01 1.600000000000e-02 -2.109852000000e+02 -3.600000000000e-02 4.688560000000e+01 8.000000000000e-03 4.102490000000e+01 7.000000000000e-03 1.054926000000e+02 1.800000000000e-02 1.523782000000e+02 2.600000000000e-02 2.051245000000e+02 3.500000000000e-02 -8.791050000000e+01 -1.500000000000e-02 -1.582389000000e+02 -2.700000000000e-02 4.688560000000e+01 8.000000000000e-03 2.285673000000e+02 3.900000000000e-02 -8.204980000000e+01 -1.400000000000e-02 -9.963190000000e+01 -1.700000000000e-02 -1.113533000000e+02 -1.900000000000e-02 0.000000000000e+00 0.000000000000e+00 2.871743000000e+02 4.900000000000e-02 2.754529000000e+02 4.700000000000e-02 1.113533000000e+02 1.900000000000e-02 -7.618910000000e+01 -1.300000000000e-02 2.402887000000e+02 4.100000000000e-02 1.113533000000e+02 1.900000000000e-02 -3.340599000000e+02 -5.700000000000e-02 1.875424000000e+02 3.200000000000e-02 3.809455000000e+02 6.500000000000e-02 2.461494000000e+02 4.200000000000e-02 -2.344280000000e+01 -4.000000000000e-03 3.516420000000e+01 6.000000000000e-03 -1.054926000000e+02 -1.800000000000e-02 -7.032840000000e+01 -1.200000000000e-02 2.109852000000e+02 3.600000000000e-02 1.289354000000e+02 2.200000000000e-02 3.516420000000e+01 6.000000000000e-03 1.172140000000e+01 2.000000000000e-03 -5.860700000000e+00 -1.000000000000e-03 -5.860700000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 2.930350000000e+01 5.000000000000e-03 7.032840000000e+01 1.200000000000e-02 4.688560000000e+01 8.000000000000e-03 4.102490000000e+01 7.000000000000e-03 -1.758210000000e+01 -3.000000000000e-03 4.688560000000e+01 8.000000000000e-03 -1.523782000000e+02 -2.600000000000e-02 -7.618910000000e+01 -1.300000000000e-02 7.618910000000e+01 1.300000000000e-02 -5.860700000000e+01 -1.000000000000e-02 1.758210000000e+01 3.000000000000e-03 -1.758210000000e+01 -3.000000000000e-03 3.516420000000e+01 6.000000000000e-03 -1.201443500000e+03 -2.050000000000e-01 -3.575027000000e+02 -6.100000000000e-02 -5.098809000000e+02 -8.700000000000e-02 -7.032840000000e+01 -1.200000000000e-02 -1.172140000000e+02 -2.000000000000e-02 8.146373000000e+02 1.390000000000e-01 9.963190000000e+01 1.700000000000e-02 6.681198000000e+02 1.140000000000e-01 7.384482000000e+02 1.260000000000e-01 6.739805000000e+02 1.150000000000e-01 -1.523782000000e+02 -2.600000000000e-02 -4.981595000000e+02 -8.500000000000e-02 2.227066000000e+02 3.800000000000e-02 1.406568000000e+02 2.400000000000e-02 1.172140000000e+01 2.000000000000e-03 3.575027000000e+02 6.100000000000e-02 3.516420000000e+01 6.000000000000e-03 4.688560000000e+01 8.000000000000e-03 2.988957000000e+02 5.100000000000e-02 1.054926000000e+04 1.800000000000e+00 7.501696000000e+02 1.280000000000e-01 + 5 EWK_RAP 9.450000000000e-01 6.463838404000e+03 7.000000000000e+03 5.863300000000e+05 6.058547890000e+02 8.474813820000e+02 1.445400000000e-01 2.345320000000e+01 4.000000000000e-03 7.622290000000e+01 1.300000000000e-02 2.931650000000e+01 5.000000000000e-03 5.863300000000e+00 1.000000000000e-03 5.863300000000e+00 1.000000000000e-03 7.035960000000e+01 1.200000000000e-02 -9.381280000000e+01 -1.600000000000e-02 8.970849000000e+02 1.530000000000e-01 1.108163700000e+03 1.890000000000e-01 -6.860061000000e+02 -1.170000000000e-01 -1.817623000000e+02 -3.100000000000e-02 1.641724000000e+02 2.800000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.625529000000e+02 1.130000000000e-01 4.690640000000e+01 8.000000000000e-03 1.758990000000e+01 3.000000000000e-03 3.517980000000e+01 6.000000000000e-03 9.381280000000e+01 1.600000000000e-02 6.449630000000e+01 1.100000000000e-02 -5.863300000000e+00 -1.000000000000e-03 -5.863300000000e+00 -1.000000000000e-03 5.863300000000e+00 1.000000000000e-03 -1.172660000000e+02 -2.000000000000e-02 -1.758990000000e+01 -3.000000000000e-03 1.758990000000e+01 3.000000000000e-03 1.172660000000e+01 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -5.863300000000e+00 -1.000000000000e-03 -5.863300000000e+00 -1.000000000000e-03 -5.863300000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.172660000000e+01 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.172660000000e+01 2.000000000000e-03 -2.521219000000e+02 -4.300000000000e-02 2.579852000000e+02 4.400000000000e-02 5.276970000000e+01 9.000000000000e-03 -6.449630000000e+01 -1.100000000000e-02 -0.000000000000e+00 -0.000000000000e+00 7.035960000000e+01 1.200000000000e-02 4.690640000000e+01 8.000000000000e-03 -2.931650000000e+01 -5.000000000000e-03 -4.690640000000e+01 -8.000000000000e-03 -5.863300000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.172660000000e+01 2.000000000000e-03 -4.690640000000e+01 -8.000000000000e-03 1.172660000000e+01 2.000000000000e-03 5.863300000000e+00 1.000000000000e-03 3.517980000000e+01 6.000000000000e-03 1.817623000000e+02 3.100000000000e-02 -1.289926000000e+02 -2.200000000000e-02 1.758990000000e+01 3.000000000000e-03 -8.208620000000e+01 -1.400000000000e-02 -9.381280000000e+01 -1.600000000000e-02 9.967610000000e+01 1.700000000000e-02 -1.524458000000e+02 -2.600000000000e-02 -1.758990000000e+01 -3.000000000000e-03 5.863300000000e+01 1.000000000000e-02 1.289926000000e+02 2.200000000000e-02 7.622290000000e+01 1.300000000000e-02 2.462586000000e+02 4.200000000000e-02 -1.465825000000e+02 -2.500000000000e-02 -3.517980000000e+01 -6.000000000000e-03 2.345320000000e+01 4.000000000000e-03 3.517980000000e+01 6.000000000000e-03 1.172660000000e+01 2.000000000000e-03 -1.700357000000e+02 -2.900000000000e-02 -2.931650000000e+01 -5.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.934889000000e+02 3.300000000000e-02 1.758990000000e+02 3.000000000000e-02 8.208620000000e+01 1.400000000000e-02 -1.172660000000e+01 -2.000000000000e-03 4.104310000000e+01 7.000000000000e-03 1.172660000000e+01 2.000000000000e-03 1.524458000000e+02 2.600000000000e-02 2.052155000000e+02 3.500000000000e-02 3.459347000000e+02 5.900000000000e-02 -3.517980000000e+02 -6.000000000000e-02 3.283448000000e+02 5.600000000000e-02 9.381280000000e+01 1.600000000000e-02 -2.931650000000e+01 -5.000000000000e-03 -7.622290000000e+01 -1.300000000000e-02 -1.231293000000e+02 -2.100000000000e-02 1.348559000000e+02 2.300000000000e-02 2.931650000000e+01 5.000000000000e-03 1.172660000000e+01 2.000000000000e-03 5.863300000000e+00 1.000000000000e-03 -1.172660000000e+01 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -1.055394000000e+02 -1.800000000000e-02 -3.517980000000e+01 -6.000000000000e-03 9.381280000000e+01 1.600000000000e-02 -4.690640000000e+01 -8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 8.794950000000e+01 1.500000000000e-02 -1.172660000000e+01 -2.000000000000e-03 -1.934889000000e+02 -3.300000000000e-02 7.035960000000e+01 1.200000000000e-02 -7.622290000000e+01 -1.300000000000e-02 4.690640000000e+01 8.000000000000e-03 -1.758990000000e+01 -3.000000000000e-03 8.794950000000e+01 1.500000000000e-02 -1.190249900000e+03 -2.030000000000e-01 -9.381280000000e+01 -1.600000000000e-02 -5.218337000000e+02 -8.900000000000e-02 1.641724000000e+02 2.800000000000e-02 2.931650000000e+01 5.000000000000e-03 7.094593000000e+02 1.210000000000e-01 8.794950000000e+01 1.500000000000e-02 7.094593000000e+02 1.210000000000e-01 8.091354000000e+02 1.380000000000e-01 6.508263000000e+02 1.110000000000e-01 -8.794950000000e+01 -1.500000000000e-02 -1.993522000000e+02 -3.400000000000e-02 1.993522000000e+02 3.400000000000e-02 4.690640000000e+02 8.000000000000e-02 1.172660000000e+01 2.000000000000e-03 -5.511502000000e+02 -9.400000000000e-02 2.052155000000e+02 3.500000000000e-02 -1.348559000000e+02 -2.300000000000e-02 -2.228054000000e+02 -3.800000000000e-02 1.055394000000e+04 1.800000000000e+00 7.387758000000e+02 1.260000000000e-01 + 6 EWK_RAP 1.210000000000e+00 6.463838404000e+03 7.000000000000e+03 5.990700000000e+05 4.668013347000e+02 7.669294140000e+02 1.280200000000e-01 1.138233000000e+02 1.900000000000e-02 1.377861000000e+02 2.300000000000e-02 5.391630000000e+01 9.000000000000e-03 5.990700000000e+00 1.000000000000e-03 -5.990700000000e+00 -1.000000000000e-03 1.377861000000e+02 2.300000000000e-02 -1.258047000000e+02 -2.100000000000e-02 7.308654000000e+02 1.220000000000e-01 1.006437600000e+03 1.680000000000e-01 -8.746422000000e+02 -1.460000000000e-01 -2.336373000000e+02 -3.900000000000e-02 1.437768000000e+02 2.400000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.649677000000e+02 1.110000000000e-01 4.792560000000e+01 8.000000000000e-03 1.797210000000e+01 3.000000000000e-03 3.594420000000e+01 6.000000000000e-03 7.787910000000e+01 1.300000000000e-02 5.990700000000e+01 1.000000000000e-02 1.198140000000e+01 2.000000000000e-03 5.990700000000e+00 1.000000000000e-03 1.557582000000e+02 2.600000000000e-02 1.198140000000e+01 2.000000000000e-03 -1.198140000000e+01 -2.000000000000e-03 1.797210000000e+01 3.000000000000e-03 1.797210000000e+01 3.000000000000e-03 -1.198140000000e+01 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -5.990700000000e+00 -1.000000000000e-03 -5.990700000000e+00 -1.000000000000e-03 1.198140000000e+01 2.000000000000e-03 -5.990700000000e+00 -1.000000000000e-03 1.797210000000e+01 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 8.986050000000e+01 1.500000000000e-02 -5.990700000000e+00 -1.000000000000e-03 -6.589770000000e+01 -1.100000000000e-02 1.198140000000e+01 2.000000000000e-03 1.198140000000e+01 2.000000000000e-03 5.391630000000e+01 9.000000000000e-03 -2.995350000000e+01 -5.000000000000e-03 -2.995350000000e+01 -5.000000000000e-03 4.792560000000e+01 8.000000000000e-03 -1.198140000000e+01 -2.000000000000e-03 4.792560000000e+01 8.000000000000e-03 -2.396280000000e+02 -4.000000000000e-02 -5.990700000000e+00 -1.000000000000e-03 7.787910000000e+01 1.300000000000e-02 3.594420000000e+01 6.000000000000e-03 1.677396000000e+02 2.800000000000e-02 -1.198140000000e+02 -2.000000000000e-02 2.396280000000e+01 4.000000000000e-03 -9.585120000000e+01 -1.600000000000e-02 1.497675000000e+02 2.500000000000e-02 1.377861000000e+02 2.300000000000e-02 -2.156652000000e+02 -3.600000000000e-02 1.198140000000e+01 2.000000000000e-03 8.386980000000e+01 1.400000000000e-02 1.258047000000e+02 2.100000000000e-02 -3.594420000000e+01 -6.000000000000e-03 -2.995350000000e+02 -5.000000000000e-02 1.677396000000e+02 2.800000000000e-02 -8.386980000000e+01 -1.400000000000e-02 0.000000000000e+00 0.000000000000e+00 4.792560000000e+01 8.000000000000e-03 -2.216559000000e+02 -3.700000000000e-02 -2.576001000000e+02 -4.300000000000e-02 -6.589770000000e+01 -1.100000000000e-02 0.000000000000e+00 0.000000000000e+00 2.096745000000e+02 3.500000000000e-02 1.617489000000e+02 2.700000000000e-02 9.585120000000e+01 1.600000000000e-02 5.990700000000e+00 1.000000000000e-03 2.396280000000e+01 4.000000000000e-03 2.995350000000e+01 5.000000000000e-03 3.714234000000e+02 6.200000000000e-02 6.589770000000e+01 1.100000000000e-02 1.976931000000e+02 3.300000000000e-02 -8.386980000000e+01 -1.400000000000e-02 1.138233000000e+02 1.900000000000e-02 1.677396000000e+02 2.800000000000e-02 -2.396280000000e+01 -4.000000000000e-03 -6.589770000000e+01 -1.100000000000e-02 -1.497675000000e+02 -2.500000000000e-02 1.317954000000e+02 2.200000000000e-02 5.391630000000e+01 9.000000000000e-03 5.990700000000e+00 1.000000000000e-03 -5.990700000000e+00 -1.000000000000e-03 -1.198140000000e+01 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -3.055257000000e+02 -5.100000000000e-02 1.797210000000e+01 3.000000000000e-03 2.995350000000e+01 5.000000000000e-03 -2.396280000000e+01 -4.000000000000e-03 2.995350000000e+01 5.000000000000e-03 5.990700000000e+01 1.000000000000e-02 7.787910000000e+01 1.300000000000e-02 -1.018419000000e+02 -1.700000000000e-02 9.585120000000e+01 1.600000000000e-02 -1.797210000000e+01 -3.000000000000e-03 -2.995350000000e+01 -5.000000000000e-03 -1.198140000000e+01 -2.000000000000e-03 -5.990700000000e+00 -1.000000000000e-03 -1.264037700000e+03 -2.110000000000e-01 -1.557582000000e+02 -2.600000000000e-02 -5.451537000000e+02 -9.100000000000e-02 7.787910000000e+01 1.300000000000e-02 3.594420000000e+01 6.000000000000e-03 7.188840000000e+02 1.200000000000e-01 1.857117000000e+02 3.100000000000e-02 7.308654000000e+02 1.220000000000e-01 8.926143000000e+02 1.490000000000e-01 7.428468000000e+02 1.240000000000e-01 1.797210000000e+01 3.000000000000e-03 -4.253397000000e+02 -7.100000000000e-02 4.193490000000e+02 7.000000000000e-02 1.617489000000e+02 2.700000000000e-02 2.995350000000e+01 5.000000000000e-03 6.410049000000e+02 1.070000000000e-01 -4.193490000000e+01 -7.000000000000e-03 2.815629000000e+02 4.700000000000e-02 -2.995350000000e+02 -5.000000000000e-02 1.078326000000e+04 1.800000000000e+00 6.230328000000e+02 1.040000000000e-01 + 7 EWK_RAP 1.445000000000e+00 6.463838404000e+03 7.000000000000e+03 5.967500000000e+05 7.952290500000e+02 1.951014450000e+03 3.269400000000e-01 -1.432200000000e+02 -2.400000000000e-02 3.103100000000e+02 5.200000000000e-02 1.133825000000e+02 1.900000000000e-02 -5.370750000000e+01 -9.000000000000e-03 -2.983750000000e+01 -5.000000000000e-03 4.057900000000e+02 6.800000000000e-02 -3.461150000000e+02 -5.800000000000e-02 7.578725000000e+02 1.270000000000e-01 1.098020000000e+03 1.840000000000e-01 -5.132050000000e+02 -8.600000000000e-02 -1.909600000000e+02 -3.200000000000e-02 1.133825000000e+02 1.900000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.743275000000e+02 1.130000000000e-01 4.774000000000e+01 8.000000000000e-03 1.790250000000e+01 3.000000000000e-03 3.580500000000e+01 6.000000000000e-03 5.967500000000e+01 1.000000000000e-02 6.564250000000e+01 1.100000000000e-02 4.774000000000e+01 8.000000000000e-03 -2.387000000000e+01 -4.000000000000e-03 -8.354500000000e+01 -1.400000000000e-02 2.387000000000e+01 4.000000000000e-03 -5.967500000000e+00 -1.000000000000e-03 -1.193500000000e+01 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 7.757750000000e+01 1.300000000000e-02 2.983750000000e+01 5.000000000000e-03 2.685375000000e+02 4.500000000000e-02 -1.133825000000e+02 -1.900000000000e-02 4.774000000000e+01 8.000000000000e-03 -1.253175000000e+02 -2.100000000000e-02 3.580500000000e+01 6.000000000000e-03 2.387000000000e+01 4.000000000000e-03 -3.580500000000e+01 -6.000000000000e-03 -8.354500000000e+01 -1.400000000000e-02 5.370750000000e+01 9.000000000000e-03 2.983750000000e+01 5.000000000000e-03 3.580500000000e+01 6.000000000000e-03 -1.491875000000e+02 -2.500000000000e-02 5.967500000000e+00 1.000000000000e-03 -5.370750000000e+02 -9.000000000000e-02 -4.415950000000e+02 -7.400000000000e-02 6.265875000000e+02 1.050000000000e-01 3.282125000000e+02 5.500000000000e-02 -4.177250000000e+01 -7.000000000000e-03 1.790250000000e+02 3.000000000000e-02 -3.580500000000e+01 -6.000000000000e-03 -1.133825000000e+02 -1.900000000000e-02 -4.774000000000e+01 -8.000000000000e-03 1.551550000000e+02 2.600000000000e-02 -1.014475000000e+02 -1.700000000000e-02 1.790250000000e+01 3.000000000000e-03 -2.387000000000e+01 -4.000000000000e-03 6.564250000000e+01 1.100000000000e-02 4.774000000000e+01 8.000000000000e-03 -1.790250000000e+01 -3.000000000000e-03 -2.983750000000e+01 -5.000000000000e-03 7.161000000000e+01 1.200000000000e-02 1.193500000000e+01 2.000000000000e-03 8.354500000000e+01 1.400000000000e-02 1.790250000000e+01 3.000000000000e-03 -1.193500000000e+01 -2.000000000000e-03 2.387000000000e+01 4.000000000000e-03 -2.387000000000e+01 -4.000000000000e-03 2.983750000000e+01 5.000000000000e-03 -5.967500000000e+01 -1.000000000000e-02 -1.014475000000e+02 -1.700000000000e-02 -3.580500000000e+01 -6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.566025000000e+02 4.300000000000e-02 7.757750000000e+01 1.300000000000e-02 5.967500000000e+00 1.000000000000e-03 5.967500000000e+00 1.000000000000e-03 -2.387000000000e+01 -4.000000000000e-03 -5.967500000000e+00 -1.000000000000e-03 2.983750000000e+01 5.000000000000e-03 -1.790250000000e+01 -3.000000000000e-03 2.566025000000e+02 4.300000000000e-02 -4.774000000000e+01 -8.000000000000e-03 1.193500000000e+01 2.000000000000e-03 1.193500000000e+01 2.000000000000e-03 1.790250000000e+01 3.000000000000e-03 1.790250000000e+01 3.000000000000e-03 -2.387000000000e+01 -4.000000000000e-03 1.074150000000e+02 1.800000000000e-02 6.564250000000e+01 1.100000000000e-02 2.387000000000e+01 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -5.967500000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 3.580500000000e+01 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -5.967500000000e+00 -1.000000000000e-03 -5.967500000000e+00 -1.000000000000e-03 1.790250000000e+01 3.000000000000e-03 -5.967500000000e+00 -1.000000000000e-03 3.580500000000e+01 6.000000000000e-03 5.967500000000e+00 1.000000000000e-03 -1.193500000000e+01 -2.000000000000e-03 -5.967500000000e+00 -1.000000000000e-03 -2.387000000000e+01 -4.000000000000e-03 -1.271077500000e+03 -2.130000000000e-01 -1.193500000000e+02 -2.000000000000e-02 -4.356275000000e+02 -7.300000000000e-02 5.370750000000e+01 9.000000000000e-03 -7.757750000000e+01 -1.300000000000e-02 8.175475000000e+02 1.370000000000e-01 1.133825000000e+02 1.900000000000e-02 8.533525000000e+02 1.430000000000e-01 1.062215000000e+03 1.780000000000e-01 8.354500000000e+02 1.400000000000e-01 1.372525000000e+02 2.300000000000e-02 -3.580500000000e+02 -6.000000000000e-02 1.730575000000e+02 2.900000000000e-02 1.849925000000e+02 3.100000000000e-02 3.580500000000e+01 6.000000000000e-03 3.162775000000e+02 5.300000000000e-02 8.354500000000e+01 1.400000000000e-02 9.548000000000e+01 1.600000000000e-02 -4.177250000000e+01 -7.000000000000e-03 1.074150000000e+04 1.800000000000e+00 8.533525000000e+02 1.430000000000e-01 + 8 EWK_RAP 1.630000000000e+00 6.463838404000e+03 7.000000000000e+03 6.041700000000e+05 6.369160140000e+02 7.841522430000e+02 1.297900000000e-01 -3.625020000000e+01 -6.000000000000e-03 8.458380000000e+01 1.400000000000e-02 2.416680000000e+01 4.000000000000e-03 -6.041700000000e+00 -1.000000000000e-03 -1.208340000000e+01 -2.000000000000e-03 1.087506000000e+02 1.800000000000e-02 -9.666720000000e+01 -1.600000000000e-02 7.793793000000e+02 1.290000000000e-01 9.606303000000e+02 1.590000000000e-01 -1.027089000000e+03 -1.700000000000e-01 -2.718765000000e+02 -4.500000000000e-02 1.027089000000e+02 1.700000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.766704000000e+02 1.120000000000e-01 4.833360000000e+01 8.000000000000e-03 1.812510000000e+01 3.000000000000e-03 3.020850000000e+01 5.000000000000e-03 5.437530000000e+01 9.000000000000e-03 6.041700000000e+01 1.000000000000e-02 4.229190000000e+01 7.000000000000e-03 -2.416680000000e+01 -4.000000000000e-03 1.208340000000e+01 2.000000000000e-03 -1.208340000000e+01 -2.000000000000e-03 -1.208340000000e+01 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -1.208340000000e+01 -2.000000000000e-03 6.041700000000e+00 1.000000000000e-03 -1.812510000000e+01 -3.000000000000e-03 -1.208340000000e+01 -2.000000000000e-03 -1.812510000000e+01 -3.000000000000e-03 -1.208340000000e+01 -2.000000000000e-03 -7.250040000000e+01 -1.200000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -1.812510000000e+01 -3.000000000000e-03 9.062550000000e+01 1.500000000000e-02 -1.812510000000e+01 -3.000000000000e-03 -4.833360000000e+01 -8.000000000000e-03 -1.812510000000e+01 -3.000000000000e-03 6.041700000000e+00 1.000000000000e-03 7.250040000000e+01 1.200000000000e-02 -1.812510000000e+01 -3.000000000000e-03 1.208340000000e+01 2.000000000000e-03 1.208340000000e+01 2.000000000000e-03 -3.020850000000e+01 -5.000000000000e-03 1.208340000000e+01 2.000000000000e-03 -1.510425000000e+02 -2.500000000000e-02 1.389591000000e+02 2.300000000000e-02 -1.570842000000e+02 -2.600000000000e-02 5.437530000000e+01 9.000000000000e-03 1.752093000000e+02 2.900000000000e-02 -1.329174000000e+02 -2.200000000000e-02 2.416680000000e+01 4.000000000000e-03 4.168773000000e+02 6.900000000000e-02 9.666720000000e+02 1.600000000000e-01 -2.416680000000e+01 -4.000000000000e-03 -7.250040000000e+01 -1.200000000000e-02 -1.329174000000e+02 -2.200000000000e-02 1.268757000000e+02 2.100000000000e-02 3.020850000000e+01 5.000000000000e-03 6.041700000000e+01 1.000000000000e-02 -1.208340000000e+02 -2.000000000000e-02 -5.014611000000e+02 -8.300000000000e-02 -3.625020000000e+01 -6.000000000000e-03 -1.027089000000e+02 -1.700000000000e-02 1.812510000000e+01 3.000000000000e-03 -1.752093000000e+02 -2.900000000000e-02 -3.625020000000e+02 -6.000000000000e-02 1.208340000000e+01 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 3.141684000000e+02 5.200000000000e-02 7.854210000000e+01 1.300000000000e-02 -1.812510000000e+02 -3.000000000000e-02 -6.041700000000e+01 -1.000000000000e-02 -3.625020000000e+01 -6.000000000000e-03 -6.645870000000e+01 -1.100000000000e-02 -7.250040000000e+01 -1.200000000000e-02 -2.416680000000e+01 -4.000000000000e-03 2.779182000000e+02 4.600000000000e-02 -6.041700000000e+01 -1.000000000000e-02 3.625020000000e+01 6.000000000000e-03 -3.020850000000e+01 -5.000000000000e-03 3.020850000000e+01 5.000000000000e-03 1.450008000000e+02 2.400000000000e-02 6.041700000000e+01 1.000000000000e-02 1.329174000000e+02 2.200000000000e-02 4.833360000000e+01 8.000000000000e-03 3.020850000000e+01 5.000000000000e-03 -6.041700000000e+00 -1.000000000000e-03 -1.208340000000e+01 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 2.779182000000e+02 4.600000000000e-02 4.833360000000e+01 8.000000000000e-03 6.041700000000e+00 1.000000000000e-03 -1.812510000000e+01 -3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -6.041700000000e+00 -1.000000000000e-03 6.041700000000e+00 1.000000000000e-03 1.933344000000e+02 3.200000000000e-02 6.041700000000e+01 1.000000000000e-02 -1.208340000000e+01 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.208340000000e+01 -2.000000000000e-03 -3.020850000000e+01 -5.000000000000e-03 -1.305007200000e+03 -2.160000000000e-01 -1.993761000000e+02 -3.300000000000e-02 -5.618781000000e+02 -9.300000000000e-02 1.087506000000e+02 1.800000000000e-02 -2.356263000000e+02 -3.900000000000e-02 7.250040000000e+02 1.200000000000e-01 2.537514000000e+02 4.200000000000e-02 7.975044000000e+02 1.320000000000e-01 1.178131500000e+03 1.950000000000e-01 7.250040000000e+02 1.200000000000e-01 -4.833360000000e+01 -8.000000000000e-03 -5.135445000000e+02 -8.500000000000e-02 2.537514000000e+02 4.200000000000e-02 1.268757000000e+02 2.100000000000e-02 3.625020000000e+01 6.000000000000e-03 1.812510000000e+02 3.000000000000e-02 1.329174000000e+02 2.200000000000e-02 3.625020000000e+01 6.000000000000e-03 -4.833360000000e+01 -8.000000000000e-03 1.087506000000e+04 1.800000000000e+00 8.156295000000e+02 1.350000000000e-01 + 9 EWK_RAP 1.845000000000e+00 6.463838404000e+03 7.000000000000e+03 6.069300000000e+05 6.999116760000e+02 1.071656301000e+03 1.765700000000e-01 -6.069300000000e+00 -1.000000000000e-03 6.676230000000e+01 1.100000000000e-02 1.820790000000e+01 3.000000000000e-03 6.069300000000e+00 1.000000000000e-03 1.213860000000e+01 2.000000000000e-03 6.069300000000e+01 1.000000000000e-02 -5.462370000000e+01 -9.000000000000e-03 7.586625000000e+02 1.250000000000e-01 8.982564000000e+02 1.480000000000e-01 -1.122820500000e+03 -1.850000000000e-01 -2.913264000000e+02 -4.800000000000e-02 7.890090000000e+01 1.300000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.372765000000e+02 1.050000000000e-01 4.248510000000e+01 7.000000000000e-03 1.213860000000e+01 2.000000000000e-03 3.034650000000e+01 5.000000000000e-03 4.248510000000e+01 7.000000000000e-03 5.462370000000e+01 9.000000000000e-03 4.855440000000e+01 8.000000000000e-03 -2.427720000000e+01 -4.000000000000e-03 1.820790000000e+01 3.000000000000e-03 -1.213860000000e+01 -2.000000000000e-03 -6.069300000000e+00 -1.000000000000e-03 6.069300000000e+00 1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.820790000000e+01 -3.000000000000e-03 6.676230000000e+01 1.100000000000e-02 -1.213860000000e+01 -2.000000000000e-03 6.069300000000e+00 1.000000000000e-03 -1.213860000000e+01 -2.000000000000e-03 1.213860000000e+01 2.000000000000e-03 -1.820790000000e+01 -3.000000000000e-03 1.213860000000e+01 2.000000000000e-03 -6.069300000000e+00 -1.000000000000e-03 1.092474000000e+02 1.800000000000e-02 -1.820790000000e+01 -3.000000000000e-03 -2.427720000000e+01 -4.000000000000e-03 -2.427720000000e+01 -4.000000000000e-03 -1.213860000000e+01 -2.000000000000e-03 2.427720000000e+01 4.000000000000e-03 -6.676230000000e+01 -1.100000000000e-02 -9.710880000000e+01 -1.600000000000e-02 -3.641580000000e+01 -6.000000000000e-03 -1.213860000000e+02 -2.000000000000e-02 -1.031781000000e+02 -1.700000000000e-02 -1.274553000000e+02 -2.100000000000e-02 4.855440000000e+01 8.000000000000e-03 -2.427720000000e+01 -4.000000000000e-03 3.034650000000e+01 5.000000000000e-03 1.760097000000e+02 2.900000000000e-02 -1.335246000000e+02 -2.200000000000e-02 3.034650000000e+01 5.000000000000e-03 3.641580000000e+01 6.000000000000e-03 -3.034650000000e+01 -5.000000000000e-03 2.245641000000e+02 3.700000000000e-02 7.890090000000e+01 1.300000000000e-02 -1.395939000000e+02 -2.300000000000e-02 1.092474000000e+02 1.800000000000e-02 -3.034650000000e+01 -5.000000000000e-03 2.002869000000e+02 3.300000000000e-02 1.820790000000e+01 3.000000000000e-03 -1.274553000000e+02 -2.100000000000e-02 -8.497020000000e+01 -1.400000000000e-02 -1.335246000000e+02 -2.200000000000e-02 -1.153167000000e+02 -1.900000000000e-02 3.641580000000e+01 6.000000000000e-03 1.037850300000e+03 1.710000000000e-01 -8.497020000000e+01 -1.400000000000e-02 0.000000000000e+00 0.000000000000e+00 2.245641000000e+02 3.700000000000e-02 2.367027000000e+02 3.900000000000e-02 -1.517325000000e+02 -2.500000000000e-02 1.456632000000e+02 2.400000000000e-02 -1.578018000000e+02 -2.600000000000e-02 3.034650000000e+02 5.000000000000e-02 6.069300000000e+00 1.000000000000e-03 -5.462370000000e+01 -9.000000000000e-03 3.156036000000e+02 5.200000000000e-02 -9.710880000000e+01 -1.600000000000e-02 7.283160000000e+01 1.200000000000e-02 -2.913264000000e+02 -4.800000000000e-02 1.820790000000e+01 3.000000000000e-03 -9.710880000000e+01 -1.600000000000e-02 -6.069300000000e+00 -1.000000000000e-03 1.395939000000e+02 2.300000000000e-02 3.034650000000e+01 5.000000000000e-03 4.855440000000e+01 8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -6.069300000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.820790000000e+01 3.000000000000e-03 1.820790000000e+01 3.000000000000e-03 8.497020000000e+01 1.400000000000e-02 1.395939000000e+02 2.300000000000e-02 4.248510000000e+01 7.000000000000e-03 -3.641580000000e+01 -6.000000000000e-03 5.462370000000e+01 9.000000000000e-03 -1.820790000000e+01 -3.000000000000e-03 5.462370000000e+01 9.000000000000e-03 1.578018000000e+02 2.600000000000e-02 -4.248510000000e+01 -7.000000000000e-03 -1.153167000000e+02 -1.900000000000e-02 6.069300000000e+00 1.000000000000e-03 -1.056058200000e+03 -1.740000000000e-01 -1.456632000000e+02 -2.400000000000e-02 -5.098212000000e+02 -8.400000000000e-02 3.641580000000e+01 6.000000000000e-03 -1.760097000000e+02 -2.900000000000e-02 7.161774000000e+02 1.180000000000e-01 2.609799000000e+02 4.300000000000e-02 6.919002000000e+02 1.140000000000e-01 1.347384600000e+03 2.220000000000e-01 6.797616000000e+02 1.120000000000e-01 1.213860000000e+01 2.000000000000e-03 -7.404546000000e+02 -1.220000000000e-01 2.549106000000e+02 4.200000000000e-02 2.367027000000e+02 3.900000000000e-02 4.248510000000e+01 7.000000000000e-03 3.823659000000e+02 6.300000000000e-02 1.213860000000e+02 2.000000000000e-02 1.820790000000e+02 3.000000000000e-02 7.890090000000e+01 1.300000000000e-02 1.092474000000e+04 1.800000000000e+00 1.019642400000e+03 1.680000000000e-01 + 10 EWK_RAP 2.065000000000e+00 6.463838404000e+03 7.000000000000e+03 5.934000000000e+05 6.707793600000e+02 8.547927000000e+02 1.440500000000e-01 -2.373600000000e+01 -4.000000000000e-03 3.560400000000e+01 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -5.934000000000e+00 -1.000000000000e-03 -1.780200000000e+01 -3.000000000000e-03 2.967000000000e+01 5.000000000000e-03 -2.967000000000e+01 -5.000000000000e-03 7.773540000000e+02 1.310000000000e-01 8.485620000000e+02 1.430000000000e-01 -1.145262000000e+03 -1.930000000000e-01 -2.848320000000e+02 -4.800000000000e-02 5.934000000000e+01 1.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.230700000000e+02 1.050000000000e-01 4.153800000000e+01 7.000000000000e-03 1.186800000000e+01 2.000000000000e-03 2.373600000000e+01 4.000000000000e-03 2.967000000000e+01 5.000000000000e-03 5.340600000000e+01 9.000000000000e-03 4.747200000000e+01 8.000000000000e-03 -2.373600000000e+01 -4.000000000000e-03 2.967000000000e+01 5.000000000000e-03 -1.780200000000e+01 -3.000000000000e-03 3.560400000000e+01 6.000000000000e-03 -1.186800000000e+01 -2.000000000000e-03 1.186800000000e+01 2.000000000000e-03 -1.186800000000e+01 -2.000000000000e-03 1.186800000000e+01 2.000000000000e-03 -1.186800000000e+01 -2.000000000000e-03 -1.186800000000e+01 -2.000000000000e-03 -1.186800000000e+01 -2.000000000000e-03 5.934000000000e+00 1.000000000000e-03 -2.373600000000e+01 -4.000000000000e-03 1.780200000000e+01 3.000000000000e-03 -1.780200000000e+01 -3.000000000000e-03 1.246140000000e+02 2.100000000000e-02 -3.560400000000e+01 -6.000000000000e-03 -4.747200000000e+01 -8.000000000000e-03 -5.934000000000e+00 -1.000000000000e-03 1.186800000000e+01 2.000000000000e-03 2.967000000000e+01 5.000000000000e-03 -7.120800000000e+01 -1.200000000000e-02 -5.340600000000e+01 -9.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.246140000000e+02 -2.100000000000e-02 5.934000000000e+01 1.000000000000e-02 -1.127460000000e+02 -1.900000000000e-02 2.967000000000e+01 5.000000000000e-03 -5.340600000000e+01 -9.000000000000e-03 2.373600000000e+01 4.000000000000e-03 1.720860000000e+02 2.900000000000e-02 -1.305480000000e+02 -2.200000000000e-02 2.967000000000e+01 5.000000000000e-03 5.340600000000e+01 9.000000000000e-03 -1.780200000000e+02 -3.000000000000e-02 2.136240000000e+02 3.600000000000e-02 1.068120000000e+02 1.800000000000e-02 -2.492280000000e+02 -4.200000000000e-02 1.068120000000e+02 1.800000000000e-02 -2.967000000000e+01 -5.000000000000e-03 1.661520000000e+02 2.800000000000e-02 3.323040000000e+02 5.600000000000e-02 5.934000000000e+00 1.000000000000e-03 2.076900000000e+02 3.500000000000e-02 -2.967000000000e+01 -5.000000000000e-03 3.560400000000e+01 6.000000000000e-03 1.186800000000e+02 2.000000000000e-02 3.560400000000e+02 6.000000000000e-02 5.934000000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 4.509840000000e+02 7.600000000000e-02 -2.076900000000e+02 -3.500000000000e-02 1.483500000000e+02 2.500000000000e-02 3.916440000000e+02 6.600000000000e-02 2.195580000000e+02 3.700000000000e-02 -4.035120000000e+02 -6.800000000000e-02 -3.560400000000e+01 -6.000000000000e-03 -4.747200000000e+01 -8.000000000000e-03 3.382380000000e+02 5.700000000000e-02 2.788980000000e+02 4.700000000000e-02 -1.127460000000e+02 -1.900000000000e-02 1.424160000000e+02 2.400000000000e-02 -2.017560000000e+02 -3.400000000000e-02 1.898880000000e+02 3.200000000000e-02 -2.432940000000e+02 -4.100000000000e-02 8.307600000000e+01 1.400000000000e-02 5.340600000000e+01 9.000000000000e-03 2.373600000000e+01 4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 6.527400000000e+01 1.100000000000e-02 -2.967000000000e+01 -5.000000000000e-03 -1.839540000000e+02 -3.100000000000e-02 0.000000000000e+00 0.000000000000e+00 -1.898880000000e+02 -3.200000000000e-02 4.153800000000e+01 7.000000000000e-03 -1.186800000000e+01 -2.000000000000e-03 -5.934000000000e+01 -1.000000000000e-02 3.560400000000e+01 6.000000000000e-03 7.714200000000e+01 1.300000000000e-02 5.340600000000e+01 9.000000000000e-03 2.254920000000e+02 3.800000000000e-02 -3.560400000000e+01 -6.000000000000e-03 -1.062186000000e+03 -1.790000000000e-01 -1.780200000000e+02 -3.000000000000e-02 -3.560400000000e+02 -6.000000000000e-02 1.068120000000e+02 1.800000000000e-02 -5.934000000000e+00 -1.000000000000e-03 7.892220000000e+02 1.330000000000e-01 2.551620000000e+02 4.300000000000e-02 6.112020000000e+02 1.030000000000e-01 1.269876000000e+03 2.140000000000e-01 5.518620000000e+02 9.300000000000e-02 -9.494400000000e+01 -1.600000000000e-02 -6.052680000000e+02 -1.020000000000e-01 -2.314260000000e+02 -3.900000000000e-02 4.213140000000e+02 7.100000000000e-02 5.340600000000e+01 9.000000000000e-03 4.450500000000e+02 7.500000000000e-02 1.246140000000e+02 2.100000000000e-02 -2.967000000000e+01 -5.000000000000e-03 1.839540000000e+02 3.100000000000e-02 1.068120000000e+04 1.800000000000e+00 8.841660000000e+02 1.490000000000e-01 + 11 EWK_RAP 2.340000000000e+00 6.463838404000e+03 7.000000000000e+03 5.584600000000e+05 6.570840360000e+02 8.081474660000e+02 1.447100000000e-01 -0.000000000000e+00 -0.000000000000e+00 3.909220000000e+01 7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -1.116920000000e+01 -2.000000000000e-03 2.233840000000e+01 4.000000000000e-03 -2.792300000000e+01 -5.000000000000e-03 9.773050000000e+02 1.750000000000e-01 7.930132000000e+02 1.420000000000e-01 -1.044320200000e+03 -1.870000000000e-01 -2.401378000000e+02 -4.300000000000e-02 3.909220000000e+01 7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.863830000000e+02 1.050000000000e-01 3.350760000000e+01 6.000000000000e-03 1.116920000000e+01 2.000000000000e-03 2.233840000000e+01 4.000000000000e-03 1.675380000000e+01 3.000000000000e-03 5.026140000000e+01 9.000000000000e-03 3.350760000000e+01 6.000000000000e-03 -1.675380000000e+01 -3.000000000000e-03 2.233840000000e+01 4.000000000000e-03 -2.233840000000e+01 -4.000000000000e-03 -1.116920000000e+01 -2.000000000000e-03 -3.350760000000e+01 -6.000000000000e-03 -5.584600000000e+00 -1.000000000000e-03 -1.675380000000e+01 -3.000000000000e-03 5.584600000000e+00 1.000000000000e-03 -1.116920000000e+01 -2.000000000000e-03 -5.584600000000e+00 -1.000000000000e-03 -1.116920000000e+01 -2.000000000000e-03 1.116920000000e+01 2.000000000000e-03 -1.675380000000e+01 -3.000000000000e-03 1.116920000000e+01 2.000000000000e-03 -2.233840000000e+01 -4.000000000000e-03 1.172766000000e+02 2.100000000000e-02 -1.675380000000e+01 -3.000000000000e-03 -2.233840000000e+01 -4.000000000000e-03 -5.584600000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.233840000000e+01 4.000000000000e-03 -1.005228000000e+02 -1.800000000000e-02 -5.026140000000e+01 -9.000000000000e-03 -7.259980000000e+01 -1.300000000000e-02 -2.233840000000e+01 -4.000000000000e-03 3.350760000000e+01 6.000000000000e-03 -1.172766000000e+02 -2.100000000000e-02 3.350760000000e+01 6.000000000000e-03 -4.467680000000e+01 -8.000000000000e-03 3.909220000000e+01 7.000000000000e-03 -4.467680000000e+01 -8.000000000000e-03 -7.259980000000e+01 -1.300000000000e-02 2.792300000000e+01 5.000000000000e-03 3.239068000000e+02 5.800000000000e-02 -2.010456000000e+02 -3.600000000000e-02 2.680608000000e+02 4.800000000000e-02 1.563688000000e+02 2.800000000000e-02 2.177994000000e+02 3.900000000000e-02 8.935360000000e+01 1.600000000000e-02 7.818440000000e+01 1.400000000000e-02 4.355988000000e+02 7.800000000000e-02 2.122148000000e+02 3.800000000000e-02 4.020912000000e+02 7.200000000000e-02 3.350760000000e+02 6.000000000000e-02 1.675380000000e+02 3.000000000000e-02 2.568916000000e+02 4.600000000000e-02 1.675380000000e+01 3.000000000000e-03 -1.787072000000e+02 -3.200000000000e-02 4.802756000000e+02 8.600000000000e-02 0.000000000000e+00 0.000000000000e+00 6.087214000000e+02 1.090000000000e-01 -5.975522000000e+02 -1.070000000000e-01 1.954610000000e+02 3.500000000000e-02 -3.183222000000e+02 -5.700000000000e-02 -1.396150000000e+02 -2.500000000000e-02 1.061074000000e+02 1.900000000000e-02 -5.584600000000e+01 -1.000000000000e-02 5.584600000000e+00 1.000000000000e-03 1.787072000000e+02 3.200000000000e-02 1.507842000000e+02 2.700000000000e-02 6.701520000000e+01 1.200000000000e-02 9.493820000000e+01 1.700000000000e-02 4.020912000000e+02 7.200000000000e-02 -6.143060000000e+01 -1.100000000000e-02 1.675380000000e+01 3.000000000000e-03 5.584600000000e+00 1.000000000000e-03 8.376900000000e+01 1.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 1.116920000000e+01 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -1.451996000000e+02 -2.600000000000e-02 -1.116920000000e+01 -2.000000000000e-03 -9.493820000000e+01 -1.700000000000e-02 -6.701520000000e+01 -1.200000000000e-02 1.340304000000e+02 2.400000000000e-02 -1.061074000000e+02 -1.900000000000e-02 -6.143060000000e+01 -1.100000000000e-02 5.584600000000e+00 1.000000000000e-03 -3.685836000000e+02 -6.600000000000e-02 -1.005228000000e+02 -1.800000000000e-02 -3.909220000000e+01 -7.000000000000e-03 -4.467680000000e+01 -8.000000000000e-03 -2.233840000000e+01 -4.000000000000e-03 -1.016397200000e+03 -1.820000000000e-01 -9.493820000000e+01 -1.700000000000e-02 -1.507842000000e+02 -2.700000000000e-02 2.568916000000e+02 4.600000000000e-02 1.563688000000e+02 2.800000000000e-02 7.148288000000e+02 1.280000000000e-01 2.289686000000e+02 4.100000000000e-02 6.087214000000e+02 1.090000000000e-01 1.206273600000e+03 2.160000000000e-01 5.919676000000e+02 1.060000000000e-01 5.584600000000e+00 1.000000000000e-03 -6.757366000000e+02 -1.210000000000e-01 1.563688000000e+02 2.800000000000e-02 7.204134000000e+02 1.290000000000e-01 5.584600000000e+01 1.000000000000e-02 7.930132000000e+02 1.420000000000e-01 1.675380000000e+02 3.000000000000e-02 -6.924904000000e+02 -1.240000000000e-01 -3.685836000000e+02 -6.600000000000e-02 1.005228000000e+04 1.800000000000e+00 7.315826000000e+02 1.310000000000e-01 + 12 EWK_RAP 1.050000000000e-01 6.463838404000e+03 7.000000000000e+03 4.364500000000e+05 5.379246250000e+02 6.236870500000e+02 1.429000000000e-01 -1.178415000000e+02 -2.700000000000e-02 4.364500000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -4.364500000000e+00 -1.000000000000e-03 2.618700000000e+01 6.000000000000e-03 8.292550000000e+01 1.900000000000e-02 3.709825000000e+02 8.500000000000e-02 9.689190000000e+02 2.220000000000e-01 -2.444120000000e+02 -5.600000000000e-02 -1.003835000000e+02 -2.300000000000e-02 2.051315000000e+02 4.700000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.975530000000e+02 1.140000000000e-01 4.800950000000e+01 1.100000000000e-02 1.309350000000e+01 3.000000000000e-03 3.928050000000e+01 9.000000000000e-03 8.292550000000e+01 1.900000000000e-02 4.364500000000e+01 1.000000000000e-02 -3.055150000000e+01 -7.000000000000e-03 1.003835000000e+02 2.300000000000e-02 8.729000000000e+00 2.000000000000e-03 -1.309350000000e+01 -3.000000000000e-03 -4.364500000000e+00 -1.000000000000e-03 1.745800000000e+01 4.000000000000e-03 -8.729000000000e+00 -2.000000000000e-03 8.729000000000e+00 2.000000000000e-03 -8.729000000000e+00 -2.000000000000e-03 -4.364500000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -4.364500000000e+00 -1.000000000000e-03 8.729000000000e+00 2.000000000000e-03 4.364500000000e+00 1.000000000000e-03 1.309350000000e+01 3.000000000000e-03 -2.618700000000e+01 -6.000000000000e-03 8.729000000000e+01 2.000000000000e-02 4.364500000000e+01 1.000000000000e-02 -4.800950000000e+01 -1.100000000000e-02 -1.745800000000e+01 -4.000000000000e-03 7.419650000000e+01 1.700000000000e-02 5.673850000000e+01 1.300000000000e-02 8.292550000000e+01 1.900000000000e-02 -1.309350000000e+02 -3.000000000000e-02 4.364500000000e+00 1.000000000000e-03 5.237400000000e+01 1.200000000000e-02 2.618700000000e+01 6.000000000000e-03 -4.800950000000e+01 -1.100000000000e-02 -1.745800000000e+01 -4.000000000000e-03 2.182250000000e+01 5.000000000000e-03 4.364500000000e+00 1.000000000000e-03 1.178415000000e+02 2.700000000000e-02 -8.292550000000e+01 -1.900000000000e-02 4.364500000000e+00 1.000000000000e-03 -1.483930000000e+02 -3.400000000000e-02 3.491600000000e+01 8.000000000000e-03 1.047480000000e+02 2.400000000000e-02 1.091125000000e+02 2.500000000000e-02 1.309350000000e+01 3.000000000000e-03 3.055150000000e+01 7.000000000000e-03 -5.673850000000e+01 -1.300000000000e-02 1.265705000000e+02 2.900000000000e-02 9.165450000000e+01 2.100000000000e-02 8.729000000000e+00 2.000000000000e-03 -2.182250000000e+01 -5.000000000000e-03 -1.222060000000e+02 -2.800000000000e-02 -3.928050000000e+01 -9.000000000000e-03 -1.745800000000e+02 -4.000000000000e-02 -6.546750000000e+01 -1.500000000000e-02 3.055150000000e+01 7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.134770000000e+02 2.600000000000e-02 1.265705000000e+02 2.900000000000e-02 1.003835000000e+02 2.300000000000e-02 7.419650000000e+01 1.700000000000e-02 -3.797115000000e+02 -8.700000000000e-02 -1.702155000000e+02 -3.900000000000e-02 -1.003835000000e+02 -2.300000000000e-02 9.601900000000e+01 2.200000000000e-02 1.178415000000e+02 2.700000000000e-02 -2.225895000000e+02 -5.100000000000e-02 -2.182250000000e+02 -5.000000000000e-02 0.000000000000e+00 0.000000000000e+00 7.856100000000e+01 1.800000000000e-02 7.856100000000e+01 1.800000000000e-02 -6.110300000000e+01 -1.400000000000e-02 6.546750000000e+01 1.500000000000e-02 3.928050000000e+01 9.000000000000e-03 2.618700000000e+01 6.000000000000e-03 8.729000000000e+00 2.000000000000e-03 -4.364500000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 6.110300000000e+01 1.400000000000e-02 1.091125000000e+02 2.500000000000e-02 2.182250000000e+01 5.000000000000e-03 3.928050000000e+01 9.000000000000e-03 -3.055150000000e+01 -7.000000000000e-03 -6.983200000000e+01 -1.600000000000e-02 -7.419650000000e+01 -1.700000000000e-02 1.745800000000e+02 4.000000000000e-02 3.055150000000e+01 7.000000000000e-03 2.618700000000e+01 6.000000000000e-03 -1.789445000000e+02 -4.100000000000e-02 5.673850000000e+01 1.300000000000e-02 1.309350000000e+01 3.000000000000e-03 -8.510775000000e+02 -1.950000000000e-01 -7.768810000000e+02 -1.780000000000e-01 -6.764975000000e+02 -1.550000000000e-01 6.983200000000e+01 1.600000000000e-02 -1.658510000000e+02 -3.800000000000e-02 6.372170000000e+02 1.460000000000e-01 1.091125000000e+02 2.500000000000e-02 4.102630000000e+02 9.400000000000e-02 4.757305000000e+02 1.090000000000e-01 4.626370000000e+02 1.060000000000e-01 -3.055150000000e+01 -7.000000000000e-03 -2.531410000000e+02 -5.800000000000e-02 2.618700000000e+01 6.000000000000e-03 2.094960000000e+02 4.800000000000e-02 5.237400000000e+01 1.200000000000e-02 1.003835000000e+02 2.300000000000e-02 1.833090000000e+02 4.200000000000e-02 3.055150000000e+01 7.000000000000e-03 5.673850000000e+01 1.300000000000e-02 7.856100000000e+03 1.800000000000e+00 3.753470000000e+02 8.600000000000e-02 + 13 EWK_RAP 3.150000000000e-01 6.463838404000e+03 7.000000000000e+03 4.327800000000e+05 5.359980300000e+02 7.127453820000e+02 1.646900000000e-01 -3.029460000000e+01 -7.000000000000e-03 2.163900000000e+01 5.000000000000e-03 8.655600000000e+00 2.000000000000e-03 -4.327800000000e+00 -1.000000000000e-03 4.327800000000e+00 1.000000000000e-03 3.029460000000e+01 7.000000000000e-03 6.491700000000e+01 1.500000000000e-02 3.808464000000e+02 8.800000000000e-02 9.001824000000e+02 2.080000000000e-01 -3.029460000000e+02 -7.000000000000e-02 -1.081950000000e+02 -2.500000000000e-02 1.990788000000e+02 4.600000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.847136000000e+02 1.120000000000e-01 4.760580000000e+01 1.100000000000e-02 1.298340000000e+01 3.000000000000e-03 3.895020000000e+01 9.000000000000e-03 7.790040000000e+01 1.800000000000e-02 4.327800000000e+01 1.000000000000e-02 -2.596680000000e+01 -6.000000000000e-03 -1.731120000000e+01 -4.000000000000e-03 8.655600000000e+00 2.000000000000e-03 -1.298340000000e+01 -3.000000000000e-03 -4.327800000000e+00 -1.000000000000e-03 1.731120000000e+01 4.000000000000e-03 -8.655600000000e+00 -2.000000000000e-03 8.655600000000e+00 2.000000000000e-03 -8.655600000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -4.327800000000e+00 -1.000000000000e-03 1.731120000000e+01 4.000000000000e-03 4.327800000000e+00 1.000000000000e-03 4.327800000000e+00 1.000000000000e-03 -1.298340000000e+01 -3.000000000000e-03 8.655600000000e+01 2.000000000000e-02 5.193360000000e+01 1.200000000000e-02 -5.626140000000e+01 -1.300000000000e-02 2.163900000000e+01 5.000000000000e-03 8.655600000000e+01 2.000000000000e-02 4.760580000000e+01 1.100000000000e-02 -1.731120000000e+01 -4.000000000000e-03 -5.193360000000e+01 -1.200000000000e-02 4.327800000000e+00 1.000000000000e-03 1.731120000000e+01 4.000000000000e-03 3.462240000000e+01 8.000000000000e-03 -1.298340000000e+01 -3.000000000000e-03 9.521160000000e+01 2.200000000000e-02 8.222820000000e+01 1.900000000000e-02 -4.327800000000e+00 -1.000000000000e-03 1.168506000000e+02 2.700000000000e-02 -7.790040000000e+01 -1.800000000000e-02 4.327800000000e+00 1.000000000000e-03 -1.168506000000e+02 -2.700000000000e-02 -1.514730000000e+02 -3.500000000000e-02 3.029460000000e+01 7.000000000000e-03 8.655600000000e+01 2.000000000000e-02 0.000000000000e+00 0.000000000000e+00 3.029460000000e+01 7.000000000000e-03 4.327800000000e+00 1.000000000000e-03 1.168506000000e+02 2.700000000000e-02 -1.731120000000e+01 -4.000000000000e-03 -8.655600000000e+00 -2.000000000000e-03 2.207178000000e+02 5.100000000000e-02 1.384896000000e+02 3.200000000000e-02 3.462240000000e+01 8.000000000000e-03 -8.655600000000e+00 -2.000000000000e-03 -1.514730000000e+02 -3.500000000000e-02 -6.491700000000e+01 -1.500000000000e-02 0.000000000000e+00 0.000000000000e+00 1.168506000000e+02 2.700000000000e-02 1.341618000000e+02 3.100000000000e-02 3.029460000000e+01 7.000000000000e-03 -1.298340000000e+01 -3.000000000000e-03 -6.058920000000e+01 -1.400000000000e-02 -4.760580000000e+01 -1.100000000000e-02 -6.058920000000e+01 -1.400000000000e-02 -1.514730000000e+02 -3.500000000000e-02 3.029460000000e+02 7.000000000000e-02 -6.058920000000e+01 -1.400000000000e-02 -2.596680000000e+02 -6.000000000000e-02 2.596680000000e+01 6.000000000000e-03 -8.655600000000e+00 -2.000000000000e-03 8.222820000000e+01 1.900000000000e-02 2.596680000000e+01 6.000000000000e-03 6.924480000000e+01 1.600000000000e-02 3.029460000000e+01 7.000000000000e-03 1.731120000000e+01 4.000000000000e-03 4.327800000000e+00 1.000000000000e-03 -8.655600000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.255062000000e+02 2.900000000000e-02 -4.327800000000e+00 -1.000000000000e-03 4.327800000000e+01 1.000000000000e-02 -3.462240000000e+01 -8.000000000000e-03 -4.760580000000e+01 -1.100000000000e-02 -7.357260000000e+01 -1.700000000000e-02 5.193360000000e+01 1.200000000000e-02 2.163900000000e+01 5.000000000000e-03 3.462240000000e+01 8.000000000000e-03 -3.462240000000e+01 -8.000000000000e-03 -2.163900000000e+01 -5.000000000000e-03 8.655600000000e+00 2.000000000000e-03 -1.731120000000e+01 -4.000000000000e-03 -8.006430000000e+02 -1.850000000000e-01 -7.140870000000e+02 -1.650000000000e-01 -7.097592000000e+02 -1.640000000000e-01 9.088380000000e+01 2.100000000000e-02 -6.491700000000e+01 -1.500000000000e-02 3.462240000000e+02 8.000000000000e-02 5.626140000000e+01 1.300000000000e-02 3.851742000000e+02 8.900000000000e-02 4.630746000000e+02 1.070000000000e-01 4.068132000000e+02 9.400000000000e-02 -5.193360000000e+01 -1.200000000000e-02 -2.813070000000e+02 -6.500000000000e-02 9.521160000000e+01 2.200000000000e-02 1.125228000000e+02 2.600000000000e-02 6.058920000000e+01 1.400000000000e-02 1.125228000000e+02 2.600000000000e-02 1.774398000000e+02 4.100000000000e-02 -1.038672000000e+02 -2.400000000000e-02 -1.255062000000e+02 -2.900000000000e-02 7.790040000000e+03 1.800000000000e+00 3.938298000000e+02 9.100000000000e-02 + 14 EWK_RAP 5.250000000000e-01 6.463838404000e+03 7.000000000000e+03 4.292900000000e+05 4.604135250000e+02 5.713849900000e+02 1.331000000000e-01 -1.244941000000e+02 -2.900000000000e-02 3.005030000000e+01 7.000000000000e-03 1.287870000000e+01 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 8.585800000000e+00 2.000000000000e-03 4.722190000000e+01 1.100000000000e-02 1.073225000000e+02 2.500000000000e-02 3.434320000000e+02 8.000000000000e-02 8.328226000000e+02 1.940000000000e-01 -3.391391000000e+02 -7.900000000000e-02 -1.287870000000e+02 -3.000000000000e-02 1.931805000000e+02 4.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.850977000000e+02 1.130000000000e-01 4.722190000000e+01 1.100000000000e-02 1.287870000000e+01 3.000000000000e-03 3.863610000000e+01 9.000000000000e-03 7.297930000000e+01 1.700000000000e-02 4.292900000000e+01 1.000000000000e-02 -8.585800000000e+00 -2.000000000000e-03 -3.434320000000e+01 -8.000000000000e-03 1.287870000000e+01 3.000000000000e-03 -8.585800000000e+00 -2.000000000000e-03 -8.585800000000e+00 -2.000000000000e-03 1.287870000000e+01 3.000000000000e-03 -8.585800000000e+00 -2.000000000000e-03 8.585800000000e+00 2.000000000000e-03 -4.292900000000e+00 -1.000000000000e-03 -4.292900000000e+00 -1.000000000000e-03 -4.292900000000e+00 -1.000000000000e-03 -4.292900000000e+00 -1.000000000000e-03 8.585800000000e+00 2.000000000000e-03 8.585800000000e+00 2.000000000000e-03 4.292900000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 9.015090000000e+01 2.100000000000e-02 4.722190000000e+01 1.100000000000e-02 -6.439350000000e+01 -1.500000000000e-02 8.585800000000e+00 2.000000000000e-03 5.580770000000e+01 1.300000000000e-02 3.434320000000e+01 8.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.146450000000e+01 -5.000000000000e-03 5.580770000000e+01 1.300000000000e-02 -4.292900000000e+00 -1.000000000000e-03 4.292900000000e+00 1.000000000000e-03 -1.717160000000e+01 -4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 6.439350000000e+01 1.500000000000e-02 2.146450000000e+02 5.000000000000e-02 1.116154000000e+02 2.600000000000e-02 -7.727220000000e+01 -1.800000000000e-02 4.292900000000e+00 1.000000000000e-03 -1.159083000000e+02 -2.700000000000e-02 -1.073225000000e+02 -2.500000000000e-02 -4.292900000000e+00 -1.000000000000e-03 -1.287870000000e+01 -3.000000000000e-03 -7.297930000000e+01 -1.700000000000e-02 3.863610000000e+01 9.000000000000e-03 8.585800000000e+00 2.000000000000e-03 -1.330799000000e+02 -3.100000000000e-02 4.292900000000e+00 1.000000000000e-03 -8.585800000000e+01 -2.000000000000e-02 1.073225000000e+02 2.500000000000e-02 -9.015090000000e+01 -2.100000000000e-02 5.151480000000e+01 1.200000000000e-02 -1.116154000000e+02 -2.600000000000e-02 -2.318166000000e+02 -5.400000000000e-02 -4.292900000000e+01 -1.000000000000e-02 0.000000000000e+00 0.000000000000e+00 1.588373000000e+02 3.700000000000e-02 1.674231000000e+02 3.900000000000e-02 6.439350000000e+01 1.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -2.575740000000e+01 -6.000000000000e-03 -4.292900000000e+00 -1.000000000000e-03 -3.434320000000e+01 -8.000000000000e-03 -2.232308000000e+02 -5.200000000000e-02 2.747456000000e+02 6.400000000000e-02 -3.005030000000e+01 -7.000000000000e-03 -8.585800000000e+01 -2.000000000000e-02 -6.010060000000e+01 -1.400000000000e-02 3.863610000000e+01 9.000000000000e-03 -3.005030000000e+01 -7.000000000000e-03 3.434320000000e+01 8.000000000000e-03 6.868640000000e+01 1.600000000000e-02 3.434320000000e+01 8.000000000000e-03 1.287870000000e+01 3.000000000000e-03 4.292900000000e+00 1.000000000000e-03 -8.585800000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.717160000000e+01 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 8.585800000000e+00 2.000000000000e-03 -1.287870000000e+01 -3.000000000000e-03 -6.439350000000e+01 -1.500000000000e-02 -7.727220000000e+01 -1.800000000000e-02 2.575740000000e+01 6.000000000000e-03 -3.434320000000e+01 -8.000000000000e-03 3.863610000000e+01 9.000000000000e-03 1.287870000000e+01 3.000000000000e-03 -1.717160000000e+01 -4.000000000000e-03 -8.585800000000e+00 -2.000000000000e-03 -3.434320000000e+01 -8.000000000000e-03 -8.070652000000e+02 -1.880000000000e-01 -6.782782000000e+02 -1.580000000000e-01 -5.752486000000e+02 -1.340000000000e-01 -5.151480000000e+01 -1.200000000000e-02 -1.202012000000e+02 -2.800000000000e-02 6.353492000000e+02 1.480000000000e-01 6.010060000000e+01 1.400000000000e-02 4.121184000000e+02 9.600000000000e-02 4.421687000000e+02 1.030000000000e-01 4.722190000000e+02 1.100000000000e-01 -6.868640000000e+01 -1.600000000000e-02 -3.133817000000e+02 -7.300000000000e-02 3.005030000000e+01 7.000000000000e-03 1.416657000000e+02 3.300000000000e-02 6.439350000000e+01 1.500000000000e-02 2.704527000000e+02 6.300000000000e-02 1.717160000000e+02 4.000000000000e-02 2.962101000000e+02 6.900000000000e-02 5.151480000000e+01 1.200000000000e-02 7.727220000000e+03 1.800000000000e+00 3.863610000000e+02 9.000000000000e-02 + 15 EWK_RAP 7.350000000000e-01 6.463838404000e+03 7.000000000000e+03 4.233800000000e+05 4.952699240000e+02 5.340938700000e+02 1.261500000000e-01 -2.540280000000e+01 -6.000000000000e-03 4.233800000000e+01 1.000000000000e-02 1.693520000000e+01 4.000000000000e-03 4.233800000000e+00 1.000000000000e-03 -4.233800000000e+00 -1.000000000000e-03 4.657180000000e+01 1.100000000000e-02 7.620840000000e+01 1.800000000000e-02 3.344702000000e+02 7.900000000000e-02 8.044220000000e+02 1.900000000000e-01 -4.022110000000e+02 -9.500000000000e-02 -1.354816000000e+02 -3.200000000000e-02 1.820534000000e+02 4.300000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.741856000000e+02 1.120000000000e-01 4.657180000000e+01 1.100000000000e-02 1.270140000000e+01 3.000000000000e-03 3.810420000000e+01 9.000000000000e-03 6.774080000000e+01 1.600000000000e-02 4.233800000000e+01 1.000000000000e-02 -8.467600000000e+00 -2.000000000000e-03 -2.116900000000e+01 -5.000000000000e-03 1.270140000000e+01 3.000000000000e-03 -8.467600000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.270140000000e+01 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -4.233800000000e+00 -1.000000000000e-03 -4.233800000000e+00 -1.000000000000e-03 -4.233800000000e+00 -1.000000000000e-03 -8.467600000000e+00 -2.000000000000e-03 8.467600000000e+00 2.000000000000e-03 8.467600000000e+00 2.000000000000e-03 -2.540280000000e+01 -6.000000000000e-03 -2.963660000000e+01 -7.000000000000e-03 8.890980000000e+01 2.100000000000e-02 2.116900000000e+01 5.000000000000e-03 -6.350700000000e+01 -1.500000000000e-02 4.657180000000e+01 1.100000000000e-02 0.000000000000e+00 0.000000000000e+00 2.370928000000e+02 5.600000000000e-02 -2.116900000000e+01 -5.000000000000e-03 -3.810420000000e+01 -9.000000000000e-03 -1.693520000000e+01 -4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 8.467600000000e+00 2.000000000000e-03 -2.540280000000e+01 -6.000000000000e-03 -4.233800000000e+00 -1.000000000000e-03 2.540280000000e+01 6.000000000000e-03 8.467600000000e+00 2.000000000000e-03 1.100788000000e+02 2.600000000000e-02 -7.620840000000e+01 -1.800000000000e-02 8.467600000000e+00 2.000000000000e-03 -1.354816000000e+02 -3.200000000000e-02 -8.467600000000e+01 -2.000000000000e-02 6.774080000000e+01 1.600000000000e-02 -8.890980000000e+01 -2.100000000000e-02 -4.657180000000e+01 -1.100000000000e-02 3.810420000000e+01 9.000000000000e-03 -1.439492000000e+02 -3.400000000000e-02 -1.439492000000e+02 -3.400000000000e-02 1.566506000000e+02 3.700000000000e-02 -1.100788000000e+02 -2.600000000000e-02 -1.016112000000e+02 -2.400000000000e-02 -8.890980000000e+01 -2.100000000000e-02 -2.116900000000e+01 -5.000000000000e-03 -1.354816000000e+02 -3.200000000000e-02 -2.667294000000e+02 -6.300000000000e-02 4.233800000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.032224000000e+02 4.800000000000e-02 1.947548000000e+02 4.600000000000e-02 8.044220000000e+01 1.900000000000e-02 -8.467600000000e+00 -2.000000000000e-03 1.312478000000e+02 3.100000000000e-02 9.314360000000e+01 2.200000000000e-02 -2.074562000000e+02 -4.900000000000e-02 1.312478000000e+02 3.100000000000e-02 2.667294000000e+02 6.300000000000e-02 1.397154000000e+02 3.300000000000e-02 -2.540280000000e+01 -6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -7.197460000000e+01 -1.700000000000e-02 -5.927320000000e+01 -1.400000000000e-02 1.100788000000e+02 2.600000000000e-02 7.620840000000e+01 1.800000000000e-02 3.387040000000e+01 8.000000000000e-03 4.233800000000e+00 1.000000000000e-03 -4.233800000000e+00 -1.000000000000e-03 -8.467600000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -1.693520000000e+01 -4.000000000000e-03 4.657180000000e+01 1.100000000000e-02 3.387040000000e+01 8.000000000000e-03 5.080560000000e+01 1.200000000000e-02 -8.467600000000e+00 -2.000000000000e-03 3.387040000000e+01 8.000000000000e-03 -1.016112000000e+02 -2.400000000000e-02 -7.197460000000e+01 -1.700000000000e-02 4.657180000000e+01 1.100000000000e-02 -2.116900000000e+01 -5.000000000000e-03 4.233800000000e+00 1.000000000000e-03 -1.270140000000e+01 -3.000000000000e-03 2.540280000000e+01 6.000000000000e-03 -8.298248000000e+02 -1.960000000000e-01 -5.546278000000e+02 -1.310000000000e-01 -6.223686000000e+02 -1.470000000000e-01 -5.927320000000e+01 -1.400000000000e-02 -1.735858000000e+02 -4.100000000000e-02 5.376926000000e+02 1.270000000000e-01 1.481830000000e+02 3.500000000000e-02 4.149124000000e+02 9.800000000000e-02 4.487828000000e+02 1.060000000000e-01 4.741856000000e+02 1.120000000000e-01 -8.467600000000e+01 -2.000000000000e-02 -1.820534000000e+02 -4.300000000000e-02 1.862872000000e+02 4.400000000000e-02 1.778196000000e+02 4.200000000000e-02 7.197460000000e+01 1.700000000000e-02 3.937434000000e+02 9.300000000000e-02 2.074562000000e+02 4.900000000000e-02 4.233800000000e+01 1.000000000000e-02 -1.354816000000e+02 -3.200000000000e-02 7.620840000000e+03 1.800000000000e+00 3.852758000000e+02 9.100000000000e-02 + 16 EWK_RAP 9.450000000000e-01 6.463838404000e+03 7.000000000000e+03 4.136400000000e+05 4.747346280000e+02 6.152067720000e+02 1.487300000000e-01 9.100080000000e+01 2.200000000000e-02 1.034100000000e+02 2.500000000000e-02 3.722760000000e+01 9.000000000000e-03 4.136400000000e+00 1.000000000000e-03 8.272800000000e+00 2.000000000000e-03 6.618240000000e+01 1.600000000000e-02 9.513720000000e+01 2.300000000000e-02 2.399112000000e+02 5.800000000000e-02 7.155972000000e+02 1.730000000000e-01 -4.715496000000e+02 -1.140000000000e-01 -1.571832000000e+02 -3.800000000000e-02 1.613196000000e+02 3.900000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.715496000000e+02 1.140000000000e-01 4.136400000000e+01 1.000000000000e-02 1.240920000000e+01 3.000000000000e-03 3.722760000000e+01 9.000000000000e-03 6.204600000000e+01 1.500000000000e-02 4.136400000000e+01 1.000000000000e-02 -8.272800000000e+00 -2.000000000000e-03 -4.136400000000e+00 -1.000000000000e-03 4.136400000000e+00 1.000000000000e-03 -8.272800000000e+00 -2.000000000000e-03 -4.136400000000e+00 -1.000000000000e-03 8.272800000000e+00 2.000000000000e-03 -1.654560000000e+01 -4.000000000000e-03 1.034100000000e+02 2.500000000000e-02 -4.136400000000e+00 -1.000000000000e-03 -2.895480000000e+01 -7.000000000000e-03 -8.272800000000e+00 -2.000000000000e-03 -8.272800000000e+00 -2.000000000000e-03 1.240920000000e+01 3.000000000000e-03 -4.136400000000e+00 -1.000000000000e-03 8.272800000000e+00 2.000000000000e-03 1.654560000000e+01 4.000000000000e-03 5.377320000000e+01 1.300000000000e-02 4.136400000000e+00 1.000000000000e-03 -1.778652000000e+02 -4.300000000000e-02 -1.282284000000e+02 -3.100000000000e-02 2.233656000000e+02 5.400000000000e-02 8.272800000000e+01 2.000000000000e-02 -3.309120000000e+01 -8.000000000000e-03 -5.790960000000e+01 -1.400000000000e-02 4.136400000000e+00 1.000000000000e-03 2.068200000000e+01 5.000000000000e-03 -1.654560000000e+01 -4.000000000000e-03 -3.309120000000e+01 -8.000000000000e-03 -8.272800000000e+00 -2.000000000000e-03 -4.136400000000e+00 -1.000000000000e-03 2.481840000000e+01 6.000000000000e-03 1.034100000000e+02 2.500000000000e-02 -7.031880000000e+01 -1.700000000000e-02 8.272800000000e+00 2.000000000000e-03 -6.204600000000e+01 -1.500000000000e-02 -7.031880000000e+01 -1.700000000000e-02 8.686440000000e+01 2.100000000000e-02 -7.445520000000e+01 -1.800000000000e-02 -9.513720000000e+01 -2.300000000000e-02 4.963680000000e+01 1.200000000000e-02 4.963680000000e+01 1.200000000000e-02 -9.100080000000e+01 -2.200000000000e-02 -4.963680000000e+01 -1.200000000000e-02 5.790960000000e+01 1.400000000000e-02 -9.513720000000e+01 -2.300000000000e-02 -1.571832000000e+02 -3.800000000000e-02 -1.075464000000e+02 -2.600000000000e-02 -1.199556000000e+02 -2.900000000000e-02 -2.357748000000e+02 -5.700000000000e-02 1.240920000000e+01 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.406376000000e+02 3.400000000000e-02 1.158192000000e+02 2.800000000000e-02 2.895480000000e+01 7.000000000000e-03 1.240920000000e+01 3.000000000000e-03 1.654560000000e+01 4.000000000000e-03 1.654560000000e+01 4.000000000000e-03 9.100080000000e+01 2.200000000000e-02 1.447740000000e+02 3.500000000000e-02 2.399112000000e+02 5.800000000000e-02 -2.316384000000e+02 -5.600000000000e-02 1.985472000000e+02 4.800000000000e-02 3.309120000000e+01 8.000000000000e-03 -1.654560000000e+01 -4.000000000000e-03 -4.963680000000e+01 -1.200000000000e-02 -8.272800000000e+01 -2.000000000000e-02 7.031880000000e+01 1.700000000000e-02 3.722760000000e+01 9.000000000000e-03 8.272800000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -8.272800000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -6.618240000000e+01 -1.600000000000e-02 -2.068200000000e+01 -5.000000000000e-03 5.790960000000e+01 1.400000000000e-02 -2.068200000000e+01 -5.000000000000e-03 1.240920000000e+01 3.000000000000e-03 6.204600000000e+01 1.500000000000e-02 -8.272800000000e+00 -2.000000000000e-03 -1.282284000000e+02 -3.100000000000e-02 4.136400000000e+01 1.000000000000e-02 -3.309120000000e+01 -8.000000000000e-03 2.895480000000e+01 7.000000000000e-03 -1.240920000000e+01 -3.000000000000e-03 4.550040000000e+01 1.100000000000e-02 -8.272800000000e+02 -2.000000000000e-01 -4.177764000000e+02 -1.010000000000e-01 -3.474576000000e+02 -8.400000000000e-02 -4.963680000000e+01 -1.200000000000e-02 -1.654560000000e+02 -4.000000000000e-02 7.321428000000e+02 1.770000000000e-01 1.365012000000e+02 3.300000000000e-02 4.219128000000e+02 1.020000000000e-01 5.046408000000e+02 1.220000000000e-01 4.425948000000e+02 1.070000000000e-01 1.654560000000e+01 4.000000000000e-03 -1.654560000000e+02 -4.000000000000e-02 1.737288000000e+02 4.200000000000e-02 2.440476000000e+02 5.900000000000e-02 6.618240000000e+01 1.600000000000e-02 3.309120000000e+01 8.000000000000e-03 2.730024000000e+02 6.600000000000e-02 -1.985472000000e+02 -4.800000000000e-02 -4.798224000000e+02 -1.160000000000e-01 7.445520000000e+03 1.800000000000e+00 3.805488000000e+02 9.200000000000e-02 + 17 EWK_RAP 1.210000000000e+00 6.463838404000e+03 7.000000000000e+03 4.052600000000e+05 3.899046986000e+02 5.653782260000e+02 1.395100000000e-01 5.673640000000e+01 1.400000000000e-02 8.510460000000e+01 2.100000000000e-02 2.836820000000e+01 7.000000000000e-03 2.026300000000e+01 5.000000000000e-03 -1.215780000000e+01 -3.000000000000e-03 8.105200000000e+01 2.000000000000e-02 6.889420000000e+01 1.700000000000e-02 3.687866000000e+02 9.100000000000e-02 7.456784000000e+02 1.840000000000e-01 -5.187328000000e+02 -1.280000000000e-01 -1.580514000000e+02 -3.900000000000e-02 1.377884000000e+02 3.400000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.538912000000e+02 1.120000000000e-01 4.457860000000e+01 1.100000000000e-02 1.215780000000e+01 3.000000000000e-03 3.647340000000e+01 9.000000000000e-03 4.863120000000e+01 1.200000000000e-02 4.052600000000e+01 1.000000000000e-02 -4.052600000000e+00 -1.000000000000e-03 -8.105200000000e+00 -2.000000000000e-03 4.052600000000e+00 1.000000000000e-03 -2.836820000000e+01 -7.000000000000e-03 2.431560000000e+01 6.000000000000e-03 3.647340000000e+01 9.000000000000e-03 -8.915720000000e+01 -2.200000000000e-02 -2.836820000000e+01 -7.000000000000e-03 -1.621040000000e+01 -4.000000000000e-03 8.105200000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -4.052600000000e+00 -1.000000000000e-03 8.105200000000e+00 2.000000000000e-03 -8.105200000000e+00 -2.000000000000e-03 1.621040000000e+01 4.000000000000e-03 -1.215780000000e+01 -3.000000000000e-03 7.699940000000e+01 1.900000000000e-02 2.026300000000e+01 5.000000000000e-03 -2.431560000000e+01 -6.000000000000e-03 3.647340000000e+01 9.000000000000e-03 3.242080000000e+01 8.000000000000e-03 2.836820000000e+01 7.000000000000e-03 -2.026300000000e+01 -5.000000000000e-03 -3.242080000000e+01 -8.000000000000e-03 4.052600000000e+00 1.000000000000e-03 2.026300000000e+01 5.000000000000e-03 1.621040000000e+01 4.000000000000e-03 -2.026300000000e+01 -5.000000000000e-03 8.105200000000e+00 2.000000000000e-03 -1.621040000000e+01 -4.000000000000e-03 1.215780000000e+01 3.000000000000e-03 1.134728000000e+02 2.800000000000e-02 -7.699940000000e+01 -1.900000000000e-02 1.215780000000e+01 3.000000000000e-03 2.026300000000e+01 5.000000000000e-03 1.013150000000e+02 2.500000000000e-02 3.647340000000e+01 9.000000000000e-03 -1.094202000000e+02 -2.700000000000e-02 1.215780000000e+01 3.000000000000e-03 5.673640000000e+01 1.400000000000e-02 1.094202000000e+02 2.700000000000e-02 1.702092000000e+02 4.200000000000e-02 2.107352000000e+02 5.200000000000e-02 1.377884000000e+02 3.400000000000e-02 1.013150000000e+02 2.500000000000e-02 3.647340000000e+01 9.000000000000e-03 6.484160000000e+01 1.600000000000e-02 8.105200000000e+01 2.000000000000e-02 -1.742618000000e+02 -4.300000000000e-02 -5.268380000000e+01 -1.300000000000e-02 0.000000000000e+00 0.000000000000e+00 1.296832000000e+02 3.200000000000e-02 1.013150000000e+02 2.500000000000e-02 3.647340000000e+01 9.000000000000e-03 4.052600000000e+00 1.000000000000e-03 1.621040000000e+01 4.000000000000e-03 1.621040000000e+01 4.000000000000e-03 2.147878000000e+02 5.300000000000e-02 4.052600000000e+01 1.000000000000e-02 1.256306000000e+02 3.100000000000e-02 -6.078900000000e+01 -1.500000000000e-02 7.699940000000e+01 1.900000000000e-02 9.726240000000e+01 2.400000000000e-02 -2.026300000000e+01 -5.000000000000e-03 -2.836820000000e+01 -7.000000000000e-03 -8.105200000000e+01 -2.000000000000e-02 7.699940000000e+01 1.900000000000e-02 4.863120000000e+01 1.200000000000e-02 8.105200000000e+00 2.000000000000e-03 -4.052600000000e+00 -1.000000000000e-03 -8.105200000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -1.783144000000e+02 -4.400000000000e-02 2.431560000000e+01 6.000000000000e-03 1.215780000000e+01 3.000000000000e-03 -1.215780000000e+01 -3.000000000000e-03 2.431560000000e+01 6.000000000000e-03 4.457860000000e+01 1.100000000000e-02 5.268380000000e+01 1.300000000000e-02 -6.078900000000e+01 -1.500000000000e-02 6.078900000000e+01 1.500000000000e-02 -8.105200000000e+00 -2.000000000000e-03 -8.105200000000e+00 -2.000000000000e-03 -1.215780000000e+01 -3.000000000000e-03 -1.621040000000e+01 -4.000000000000e-03 -8.956246000000e+02 -2.210000000000e-01 -3.444710000000e+02 -8.500000000000e-02 -3.687866000000e+02 -9.100000000000e-02 3.647340000000e+01 9.000000000000e-03 -2.431560000000e+02 -6.000000000000e-02 8.469934000000e+02 2.090000000000e-01 1.377884000000e+02 3.400000000000e-02 4.984698000000e+02 1.230000000000e-01 6.159952000000e+02 1.520000000000e-01 5.106276000000e+02 1.260000000000e-01 -7.699940000000e+01 -1.900000000000e-02 -9.320980000000e+01 -2.300000000000e-02 1.904722000000e+02 4.700000000000e-02 1.013150000000e+02 2.500000000000e-02 7.294680000000e+01 1.800000000000e-02 6.241004000000e+02 1.540000000000e-01 8.105200000000e+01 2.000000000000e-02 2.593664000000e+02 6.400000000000e-02 -4.863120000000e+02 -1.200000000000e-01 7.294680000000e+03 1.800000000000e+00 2.796294000000e+02 6.900000000000e-02 + 18 EWK_RAP 1.445000000000e+00 6.463838404000e+03 7.000000000000e+03 3.880200000000e+05 6.490022520000e+02 1.325825538000e+03 3.416900000000e-01 -2.716140000000e+01 -7.000000000000e-03 2.289318000000e+02 5.900000000000e-02 5.820300000000e+01 1.500000000000e-02 8.148420000000e+01 2.100000000000e-02 -4.268220000000e+01 -1.100000000000e-02 2.677338000000e+02 6.900000000000e-02 2.832546000000e+02 7.300000000000e-02 3.336972000000e+02 8.600000000000e-02 6.363528000000e+02 1.640000000000e-01 -4.733844000000e+02 -1.220000000000e-01 -1.707288000000e+02 -4.400000000000e-02 1.086456000000e+02 2.800000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.384626000000e+02 1.130000000000e-01 4.268220000000e+01 1.100000000000e-02 1.164060000000e+01 3.000000000000e-03 3.104160000000e+01 8.000000000000e-03 3.880200000000e+01 1.000000000000e-02 3.880200000000e+01 1.000000000000e-02 7.760400000000e+00 2.000000000000e-03 -4.656240000000e+01 -1.200000000000e-02 0.000000000000e+00 0.000000000000e+00 1.164060000000e+01 3.000000000000e-03 -1.940100000000e+01 -5.000000000000e-03 -7.760400000000e+00 -2.000000000000e-03 5.432280000000e+01 1.400000000000e-02 -2.716140000000e+01 -7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.164060000000e+01 -3.000000000000e-03 -2.328120000000e+01 -6.000000000000e-03 -7.760400000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -7.760400000000e+00 -2.000000000000e-03 4.268220000000e+01 1.100000000000e-02 1.940100000000e+01 5.000000000000e-03 4.656240000000e+01 1.200000000000e-02 7.760400000000e+00 2.000000000000e-03 -7.760400000000e+00 -2.000000000000e-03 9.312480000000e+01 2.400000000000e-02 1.940100000000e+01 5.000000000000e-03 -1.552080000000e+01 -4.000000000000e-03 7.760400000000e+00 2.000000000000e-03 -3.880200000000e+00 -1.000000000000e-03 -3.880200000000e+00 -1.000000000000e-03 3.492180000000e+01 9.000000000000e-03 3.880200000000e+00 1.000000000000e-03 2.328120000000e+01 6.000000000000e-03 -1.552080000000e+01 -4.000000000000e-03 -4.656240000000e+01 -1.200000000000e-02 -6.208320000000e+01 -1.600000000000e-02 9.700500000000e+01 2.500000000000e-02 -6.596340000000e+01 -1.700000000000e-02 1.164060000000e+01 3.000000000000e-03 -5.432280000000e+01 -1.400000000000e-02 -7.760400000000e+00 -2.000000000000e-03 1.552080000000e+01 4.000000000000e-03 -1.164060000000e+01 -3.000000000000e-03 -1.552080000000e+01 -4.000000000000e-03 5.432280000000e+01 1.400000000000e-02 -3.880200000000e+00 -1.000000000000e-03 1.164060000000e+01 3.000000000000e-03 7.760400000000e+00 2.000000000000e-03 7.760400000000e+00 2.000000000000e-03 2.328120000000e+01 6.000000000000e-03 -2.716140000000e+01 -7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.328120000000e+01 -6.000000000000e-03 -8.148420000000e+01 -2.100000000000e-02 3.880200000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.746090000000e+02 4.500000000000e-02 5.820300000000e+01 1.500000000000e-02 1.164060000000e+01 3.000000000000e-03 1.164060000000e+01 3.000000000000e-03 -1.940100000000e+01 -5.000000000000e-03 -7.760400000000e+00 -2.000000000000e-03 7.760400000000e+00 2.000000000000e-03 3.880200000000e+00 1.000000000000e-03 1.823694000000e+02 4.700000000000e-02 -4.268220000000e+01 -1.100000000000e-02 0.000000000000e+00 0.000000000000e+00 7.760400000000e+00 2.000000000000e-03 7.760400000000e+00 2.000000000000e-03 7.760400000000e+00 2.000000000000e-03 -1.940100000000e+01 -5.000000000000e-03 6.984360000000e+01 1.800000000000e-02 4.656240000000e+01 1.200000000000e-02 1.164060000000e+01 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -7.760400000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -3.880200000000e+00 -1.000000000000e-03 2.716140000000e+01 7.000000000000e-03 3.880200000000e+00 1.000000000000e-03 3.880200000000e+00 1.000000000000e-03 -3.880200000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 3.880200000000e+00 1.000000000000e-03 -1.164060000000e+01 -3.000000000000e-03 2.328120000000e+01 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.164060000000e+01 -3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.164060000000e+01 -3.000000000000e-03 -8.924460000000e+02 -2.300000000000e-01 -2.483328000000e+02 -6.400000000000e-02 -4.345824000000e+02 -1.120000000000e-01 3.104160000000e+01 8.000000000000e-03 -1.008852000000e+02 -2.600000000000e-02 7.527588000000e+02 1.940000000000e-01 -1.940100000000e+01 -5.000000000000e-03 4.307022000000e+02 1.110000000000e-01 8.032014000000e+02 2.070000000000e-01 2.871348000000e+02 7.400000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -6.208320000000e+01 -1.600000000000e-02 6.596340000000e+01 1.700000000000e-02 1.474476000000e+02 3.800000000000e-02 5.432280000000e+01 1.400000000000e-02 2.405724000000e+02 6.200000000000e-02 1.396872000000e+02 3.600000000000e-02 2.328120000000e+01 6.000000000000e-03 -1.629684000000e+02 -4.200000000000e-02 6.984360000000e+03 1.800000000000e+00 4.539834000000e+02 1.170000000000e-01 + 19 EWK_RAP 1.630000000000e+00 6.463838404000e+03 7.000000000000e+03 3.775100000000e+05 5.202087800000e+02 6.224762390000e+02 1.648900000000e-01 -1.510040000000e+01 -4.000000000000e-03 4.907630000000e+01 1.300000000000e-02 7.550200000000e+00 2.000000000000e-03 -7.550200000000e+00 -2.000000000000e-03 -3.775100000000e+00 -1.000000000000e-03 5.285140000000e+01 1.400000000000e-02 5.662650000000e+01 1.500000000000e-02 2.529317000000e+02 6.700000000000e-02 7.814457000000e+02 2.070000000000e-01 -5.624899000000e+02 -1.490000000000e-01 -1.774297000000e+02 -4.700000000000e-02 9.437750000000e+01 2.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.416867000000e+02 1.170000000000e-01 4.152610000000e+01 1.100000000000e-02 1.132530000000e+01 3.000000000000e-03 3.020080000000e+01 8.000000000000e-03 3.020080000000e+01 8.000000000000e-03 4.152610000000e+01 1.100000000000e-02 7.550200000000e+00 2.000000000000e-03 -2.265060000000e+01 -6.000000000000e-03 1.132530000000e+01 3.000000000000e-03 -7.550200000000e+00 -2.000000000000e-03 -3.775100000000e+00 -1.000000000000e-03 7.550200000000e+00 2.000000000000e-03 3.775100000000e+00 1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -3.775100000000e+00 -1.000000000000e-03 -3.775100000000e+00 -1.000000000000e-03 -7.550200000000e+00 -2.000000000000e-03 1.132530000000e+01 3.000000000000e-03 -3.775100000000e+00 -1.000000000000e-03 1.132530000000e+01 3.000000000000e-03 3.775100000000e+00 1.000000000000e-03 8.305220000000e+01 2.200000000000e-02 1.132530000000e+01 3.000000000000e-03 -4.152610000000e+01 -1.100000000000e-02 1.132530000000e+01 3.000000000000e-03 4.152610000000e+01 1.100000000000e-02 2.642570000000e+01 7.000000000000e-03 -1.510040000000e+01 -4.000000000000e-03 -1.887550000000e+01 -5.000000000000e-03 -1.132530000000e+01 -3.000000000000e-03 -1.510040000000e+01 -4.000000000000e-03 1.132530000000e+01 3.000000000000e-03 -5.285140000000e+01 -1.400000000000e-02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 2.642570000000e+01 7.000000000000e-03 1.132530000000e+02 3.000000000000e-02 -7.550200000000e+01 -2.000000000000e-02 1.132530000000e+01 3.000000000000e-03 9.060240000000e+01 2.400000000000e-02 5.775903000000e+02 1.530000000000e-01 -3.775100000000e+01 -1.000000000000e-02 1.132530000000e+01 3.000000000000e-03 4.530120000000e+01 1.200000000000e-02 7.172690000000e+01 1.900000000000e-02 6.795180000000e+01 1.800000000000e-02 -2.642570000000e+01 -7.000000000000e-03 -8.682730000000e+01 -2.300000000000e-02 -1.321285000000e+02 -3.500000000000e-02 6.417670000000e+01 1.700000000000e-02 2.642570000000e+01 7.000000000000e-03 2.642570000000e+01 7.000000000000e-03 7.550200000000e+00 2.000000000000e-03 -1.812048000000e+02 -4.800000000000e-02 -3.775100000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.774297000000e+02 4.700000000000e-02 5.285140000000e+01 1.400000000000e-02 -1.472289000000e+02 -3.900000000000e-02 -6.040160000000e+01 -1.600000000000e-02 -1.887550000000e+01 -5.000000000000e-03 -5.662650000000e+01 -1.500000000000e-02 -6.417670000000e+01 -1.700000000000e-02 -7.550200000000e+00 -2.000000000000e-03 1.585542000000e+02 4.200000000000e-02 -5.285140000000e+01 -1.400000000000e-02 2.642570000000e+01 7.000000000000e-03 -1.887550000000e+01 -5.000000000000e-03 2.265060000000e+01 6.000000000000e-03 1.094779000000e+02 2.900000000000e-02 4.907630000000e+01 1.300000000000e-02 6.795180000000e+01 1.800000000000e-02 4.907630000000e+01 1.300000000000e-02 2.265060000000e+01 6.000000000000e-03 -3.775100000000e+00 -1.000000000000e-03 -7.550200000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 2.038554000000e+02 5.400000000000e-02 4.152610000000e+01 1.100000000000e-02 -3.775100000000e+00 -1.000000000000e-03 -1.132530000000e+01 -3.000000000000e-03 7.550200000000e+00 2.000000000000e-03 7.550200000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.434538000000e+02 3.800000000000e-02 3.775100000000e+01 1.000000000000e-02 -1.510040000000e+01 -4.000000000000e-03 1.132530000000e+01 3.000000000000e-03 -7.550200000000e+00 -2.000000000000e-03 -3.020080000000e+01 -8.000000000000e-03 -9.173493000000e+02 -2.430000000000e-01 -9.815260000000e+01 -2.600000000000e-02 -5.322891000000e+02 -1.410000000000e-01 -4.530120000000e+01 -1.200000000000e-02 6.795180000000e+01 1.800000000000e-02 5.549397000000e+02 1.470000000000e-01 2.151807000000e+02 5.700000000000e-02 5.171887000000e+02 1.370000000000e-01 8.003212000000e+02 2.120000000000e-01 5.473895000000e+02 1.450000000000e-01 -4.907630000000e+01 -1.300000000000e-02 1.849799000000e+02 4.900000000000e-02 9.437750000000e+01 2.500000000000e-02 1.698795000000e+02 4.500000000000e-02 8.682730000000e+01 2.300000000000e-02 1.812048000000e+02 4.800000000000e-02 2.076305000000e+02 5.500000000000e-02 8.305220000000e+01 2.200000000000e-02 -2.906827000000e+02 -7.700000000000e-02 6.795180000000e+03 1.800000000000e+00 4.492369000000e+02 1.190000000000e-01 + 20 EWK_RAP 1.845000000000e+00 6.463838404000e+03 7.000000000000e+03 3.658200000000e+05 4.324358220000e+02 7.412976480000e+02 2.026400000000e-01 -5.487300000000e+01 -1.500000000000e-02 9.511320000000e+01 2.600000000000e-02 7.316400000000e+00 2.000000000000e-03 1.097460000000e+01 3.000000000000e-03 -3.658200000000e+00 -1.000000000000e-03 9.877140000000e+01 2.700000000000e-02 9.877140000000e+01 2.700000000000e-02 3.292380000000e+02 9.000000000000e-02 7.535892000000e+02 2.060000000000e-01 -5.450718000000e+02 -1.490000000000e-01 -1.755936000000e+02 -4.800000000000e-02 7.316400000000e+01 2.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.024020000000e+02 1.100000000000e-01 4.024020000000e+01 1.100000000000e-02 7.316400000000e+00 2.000000000000e-03 2.926560000000e+01 8.000000000000e-03 2.194920000000e+01 6.000000000000e-03 4.024020000000e+01 1.100000000000e-02 1.463280000000e+01 4.000000000000e-03 -4.024020000000e+01 -1.100000000000e-02 7.316400000000e+00 2.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 3.658200000000e+00 1.000000000000e-03 7.316400000000e+00 2.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 7.316400000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.097460000000e+01 -3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 7.316400000000e+00 2.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 7.316400000000e+00 2.000000000000e-03 8.048040000000e+01 2.200000000000e-02 1.097460000000e+01 3.000000000000e-03 -1.829100000000e+01 -5.000000000000e-03 1.097460000000e+01 3.000000000000e-03 2.194920000000e+01 6.000000000000e-03 1.829100000000e+01 5.000000000000e-03 -1.829100000000e+01 -5.000000000000e-03 -1.097460000000e+01 -3.000000000000e-03 1.097460000000e+01 3.000000000000e-03 -2.560740000000e+01 -7.000000000000e-03 -3.658200000000e+00 -1.000000000000e-03 -4.389840000000e+01 -1.200000000000e-02 7.316400000000e+00 2.000000000000e-03 -1.463280000000e+01 -4.000000000000e-03 7.316400000000e+00 2.000000000000e-03 1.170624000000e+02 3.200000000000e-02 -8.048040000000e+01 -2.200000000000e-02 1.097460000000e+01 3.000000000000e-03 -1.463280000000e+01 -4.000000000000e-03 -1.353534000000e+02 -3.700000000000e-02 5.853120000000e+01 1.600000000000e-02 1.536444000000e+02 4.200000000000e-02 7.316400000000e+01 2.000000000000e-02 6.218940000000e+01 1.700000000000e-02 1.097460000000e+01 3.000000000000e-03 4.024020000000e+01 1.100000000000e-02 -8.048040000000e+01 -2.200000000000e-02 -1.463280000000e+01 -4.000000000000e-03 1.207206000000e+02 3.300000000000e-02 0.000000000000e+00 0.000000000000e+00 -1.463280000000e+01 -4.000000000000e-03 1.463280000000e+01 4.000000000000e-03 2.560740000000e+02 7.000000000000e-02 -2.926560000000e+01 -8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.390116000000e+02 3.800000000000e-02 1.134042000000e+02 3.100000000000e-02 -9.511320000000e+01 -2.600000000000e-02 5.853120000000e+01 1.600000000000e-02 -6.584760000000e+01 -1.800000000000e-02 9.511320000000e+01 2.600000000000e-02 -1.829100000000e+01 -5.000000000000e-03 -1.097460000000e+01 -3.000000000000e-03 1.719354000000e+02 4.700000000000e-02 -6.218940000000e+01 -1.700000000000e-02 3.292380000000e+01 9.000000000000e-03 -1.134042000000e+02 -3.100000000000e-02 3.658200000000e+00 1.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 7.316400000000e+01 2.000000000000e-02 4.389840000000e+01 1.200000000000e-02 2.194920000000e+01 6.000000000000e-03 3.658200000000e+00 1.000000000000e-03 -3.658200000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 5.487300000000e+01 1.500000000000e-02 4.024020000000e+01 1.100000000000e-02 2.560740000000e+01 7.000000000000e-03 5.853120000000e+01 1.600000000000e-02 1.463280000000e+01 4.000000000000e-03 -7.316400000000e+00 -2.000000000000e-03 2.194920000000e+01 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 4.024020000000e+01 1.100000000000e-02 6.218940000000e+01 1.700000000000e-02 -1.463280000000e+01 -4.000000000000e-03 -4.389840000000e+01 -1.200000000000e-02 -1.463280000000e+01 -4.000000000000e-03 -7.974876000000e+02 -2.180000000000e-01 5.853120000000e+01 1.600000000000e-02 -3.841110000000e+02 -1.050000000000e-01 1.829100000000e+01 5.000000000000e-03 -1.134042000000e+02 -3.100000000000e-02 6.913998000000e+02 1.890000000000e-01 3.365544000000e+02 9.200000000000e-02 4.901988000000e+02 1.340000000000e-01 9.438156000000e+02 2.580000000000e-01 5.560464000000e+02 1.520000000000e-01 5.487300000000e+01 1.500000000000e-02 1.390116000000e+02 3.800000000000e-02 6.218940000000e+01 1.700000000000e-02 9.877140000000e+01 2.700000000000e-02 6.950580000000e+01 1.900000000000e-02 3.328962000000e+02 9.100000000000e-02 1.792518000000e+02 4.900000000000e-02 1.938846000000e+02 5.300000000000e-02 -3.292380000000e+01 -9.000000000000e-03 6.584760000000e+03 1.800000000000e+00 5.121480000000e+02 1.400000000000e-01 + 21 EWK_RAP 2.065000000000e+00 6.463838404000e+03 7.000000000000e+03 3.447000000000e+05 4.351492800000e+02 5.844043800000e+02 1.695400000000e-01 -4.825800000000e+01 -1.400000000000e-02 5.515200000000e+01 1.600000000000e-02 -3.447000000000e+00 -1.000000000000e-03 -1.378800000000e+01 -4.000000000000e-03 -1.723500000000e+01 -5.000000000000e-03 5.515200000000e+01 1.600000000000e-02 6.894000000000e+01 2.000000000000e-02 1.930320000000e+02 5.600000000000e-02 8.100450000000e+02 2.350000000000e-01 -5.963310000000e+02 -1.730000000000e-01 -1.964790000000e+02 -5.700000000000e-02 5.170500000000e+01 1.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 3.895110000000e+02 1.130000000000e-01 3.791700000000e+01 1.100000000000e-02 6.894000000000e+00 2.000000000000e-03 2.412900000000e+01 7.000000000000e-03 1.378800000000e+01 4.000000000000e-03 3.791700000000e+01 1.100000000000e-02 1.034100000000e+01 3.000000000000e-03 -3.102300000000e+01 -9.000000000000e-03 1.034100000000e+01 3.000000000000e-03 -3.447000000000e+00 -1.000000000000e-03 -1.034100000000e+01 -3.000000000000e-03 6.894000000000e+00 2.000000000000e-03 1.378800000000e+01 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 3.447000000000e+00 1.000000000000e-03 -3.447000000000e+00 -1.000000000000e-03 -1.034100000000e+01 -3.000000000000e-03 -1.723500000000e+01 -5.000000000000e-03 1.723500000000e+01 5.000000000000e-03 -2.412900000000e+01 -7.000000000000e-03 5.859900000000e+01 1.700000000000e-02 -3.447000000000e+00 -1.000000000000e-03 7.583400000000e+01 2.200000000000e-02 6.894000000000e+00 2.000000000000e-03 -4.136400000000e+01 -1.200000000000e-02 1.034100000000e+01 3.000000000000e-03 4.825800000000e+01 1.400000000000e-02 3.447000000000e+01 1.000000000000e-02 -2.412900000000e+01 -7.000000000000e-03 -2.757600000000e+01 -8.000000000000e-03 -6.894000000000e+00 -2.000000000000e-03 -2.757600000000e+01 -8.000000000000e-03 1.034100000000e+01 3.000000000000e-03 -7.238700000000e+01 -2.100000000000e-02 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 2.757600000000e+01 8.000000000000e-03 1.137510000000e+02 3.300000000000e-02 -7.928100000000e+01 -2.300000000000e-02 1.034100000000e+01 3.000000000000e-03 -1.378800000000e+02 -4.000000000000e-02 -8.617500000000e+01 -2.500000000000e-02 -1.482210000000e+02 -4.300000000000e-02 -1.034100000000e+01 -3.000000000000e-03 4.136400000000e+01 1.200000000000e-02 6.549300000000e+01 1.900000000000e-02 -1.206450000000e+02 -3.500000000000e-02 -2.068200000000e+01 -6.000000000000e-03 -6.549300000000e+01 -1.900000000000e-02 3.102300000000e+01 9.000000000000e-03 -3.791700000000e+01 -1.100000000000e-02 -9.651600000000e+01 -2.800000000000e-02 -3.791700000000e+01 -1.100000000000e-02 3.791700000000e+01 1.100000000000e-02 1.137510000000e+02 3.300000000000e-02 2.757600000000e+01 8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.033730000000e+02 5.900000000000e-02 -8.272800000000e+01 -2.400000000000e-02 4.481100000000e+01 1.300000000000e-02 1.757970000000e+02 5.100000000000e-02 6.894000000000e+01 2.000000000000e-02 -1.826910000000e+02 -5.300000000000e-02 -2.412900000000e+01 -7.000000000000e-03 -2.068200000000e+01 -6.000000000000e-03 1.516680000000e+02 4.400000000000e-02 7.238700000000e+01 2.100000000000e-02 -5.859900000000e+01 -1.700000000000e-02 4.825800000000e+01 1.400000000000e-02 -7.928100000000e+01 -2.300000000000e-02 9.306900000000e+01 2.700000000000e-02 -1.137510000000e+02 -3.300000000000e-02 4.481100000000e+01 1.300000000000e-02 6.204600000000e+01 1.800000000000e-02 1.378800000000e+01 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 3.447000000000e+01 1.000000000000e-02 1.723500000000e+01 5.000000000000e-03 -8.962200000000e+01 -2.600000000000e-02 6.894000000000e+00 2.000000000000e-03 -7.928100000000e+01 -2.300000000000e-02 2.068200000000e+01 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.447000000000e+01 -1.000000000000e-02 2.412900000000e+01 7.000000000000e-03 3.447000000000e+01 1.000000000000e-02 2.412900000000e+01 7.000000000000e-03 9.306900000000e+01 2.700000000000e-02 -3.102300000000e+01 -9.000000000000e-03 -8.272800000000e+02 -2.400000000000e-01 -1.895850000000e+02 -5.500000000000e-02 -3.102300000000e+02 -9.000000000000e-02 -5.515200000000e+01 -1.600000000000e-02 -6.894000000000e+01 -2.000000000000e-02 5.170500000000e+02 1.500000000000e-01 2.309490000000e+02 6.700000000000e-02 4.205340000000e+02 1.220000000000e-01 9.755010000000e+02 2.830000000000e-01 3.826170000000e+02 1.110000000000e-01 -1.137510000000e+02 -3.300000000000e-02 9.651600000000e+01 2.800000000000e-02 -6.204600000000e+01 -1.800000000000e-02 1.620090000000e+02 4.700000000000e-02 6.549300000000e+01 1.900000000000e-02 1.413270000000e+02 4.100000000000e-02 1.689030000000e+02 4.900000000000e-02 6.894000000000e+01 2.000000000000e-02 -5.515200000000e+01 -1.600000000000e-02 6.204600000000e+03 1.800000000000e+00 4.412160000000e+02 1.280000000000e-01 + 22 EWK_RAP 2.340000000000e+00 6.463838404000e+03 7.000000000000e+03 3.190400000000e+05 4.441036800000e+02 6.182038080000e+02 1.937700000000e-01 1.276160000000e+01 4.000000000000e-03 5.742720000000e+01 1.800000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -9.571200000000e+00 -3.000000000000e-03 -1.595200000000e+01 -5.000000000000e-03 3.828480000000e+01 1.200000000000e-02 4.466560000000e+01 1.400000000000e-02 2.935168000000e+02 9.200000000000e-02 8.263136000000e+02 2.590000000000e-01 -6.380800000000e+02 -2.000000000000e-01 -1.946144000000e+02 -6.100000000000e-02 3.509440000000e+01 1.100000000000e-02 -0.000000000000e+00 -0.000000000000e+00 3.573248000000e+02 1.120000000000e-01 3.509440000000e+01 1.100000000000e-02 6.380800000000e+00 2.000000000000e-03 1.914240000000e+01 6.000000000000e-03 6.380800000000e+00 2.000000000000e-03 4.147520000000e+01 1.300000000000e-02 9.571200000000e+00 3.000000000000e-03 -1.595200000000e+01 -5.000000000000e-03 1.276160000000e+01 4.000000000000e-03 -3.190400000000e+00 -1.000000000000e-03 -3.190400000000e+00 -1.000000000000e-03 9.571200000000e+00 3.000000000000e-03 6.380800000000e+00 2.000000000000e-03 -3.190400000000e+00 -1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.190400000000e+00 -1.000000000000e-03 -3.190400000000e+00 -1.000000000000e-03 -6.380800000000e+00 -2.000000000000e-03 1.595200000000e+01 5.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.276160000000e+01 4.000000000000e-03 -9.571200000000e+00 -3.000000000000e-03 9.252160000000e+01 2.900000000000e-02 9.571200000000e+00 3.000000000000e-03 -4.466560000000e+01 -1.400000000000e-02 1.595200000000e+01 5.000000000000e-03 4.785600000000e+01 1.500000000000e-02 3.509440000000e+01 1.100000000000e-02 -2.871360000000e+01 -9.000000000000e-03 -3.509440000000e+01 -1.100000000000e-02 -3.190400000000e+00 -1.000000000000e-03 -1.595200000000e+01 -5.000000000000e-03 1.914240000000e+01 6.000000000000e-03 -6.380800000000e+01 -2.000000000000e-02 3.190400000000e+00 1.000000000000e-03 -3.190400000000e+00 -1.000000000000e-03 1.914240000000e+01 6.000000000000e-03 -6.061760000000e+01 -1.900000000000e-02 5.104640000000e+01 1.600000000000e-02 9.571200000000e+00 3.000000000000e-03 -5.742720000000e+01 -1.800000000000e-02 -2.041856000000e+02 -6.400000000000e-02 -1.116640000000e+02 -3.500000000000e-02 -6.061760000000e+01 -1.900000000000e-02 -1.882336000000e+02 -5.900000000000e-02 5.423680000000e+01 1.700000000000e-02 -1.467584000000e+02 -4.600000000000e-02 -1.339968000000e+02 -4.200000000000e-02 -1.052832000000e+02 -3.300000000000e-02 7.337920000000e+01 2.300000000000e-02 -3.828480000000e+01 -1.200000000000e-02 5.423680000000e+01 1.700000000000e-02 -1.084736000000e+02 -3.400000000000e-02 4.785600000000e+01 1.500000000000e-02 -3.828480000000e+01 -1.200000000000e-02 1.786624000000e+02 5.600000000000e-02 0.000000000000e+00 0.000000000000e+00 2.679936000000e+02 8.400000000000e-02 -2.616128000000e+02 -8.200000000000e-02 6.699840000000e+01 2.100000000000e-02 -1.690912000000e+02 -5.300000000000e-02 -9.890240000000e+01 -3.100000000000e-02 4.147520000000e+01 1.300000000000e-02 -6.380800000000e+00 -2.000000000000e-03 1.595200000000e+01 5.000000000000e-03 6.699840000000e+01 2.100000000000e-02 -6.380800000000e+00 -2.000000000000e-03 2.233280000000e+01 7.000000000000e-03 4.785600000000e+01 1.500000000000e-02 1.978048000000e+02 6.200000000000e-02 -1.276160000000e+01 -4.000000000000e-03 9.571200000000e+00 3.000000000000e-03 2.233280000000e+01 7.000000000000e-03 7.656960000000e+01 2.400000000000e-02 3.190400000000e+00 1.000000000000e-03 6.380800000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -5.742720000000e+01 -1.800000000000e-02 4.147520000000e+01 1.300000000000e-02 -4.785600000000e+01 -1.500000000000e-02 -3.828480000000e+01 -1.200000000000e-02 7.656960000000e+01 2.400000000000e-02 -4.466560000000e+01 -1.400000000000e-02 -1.914240000000e+01 -6.000000000000e-03 6.380800000000e+00 2.000000000000e-03 -1.627104000000e+02 -5.100000000000e-02 -5.423680000000e+01 -1.700000000000e-02 -2.871360000000e+01 -9.000000000000e-03 -2.552320000000e+01 -8.000000000000e-03 -3.509440000000e+01 -1.100000000000e-02 -8.518368000000e+02 -2.670000000000e-01 -2.360896000000e+02 -7.400000000000e-02 -3.860384000000e+02 -1.210000000000e-01 -5.742720000000e+01 -1.800000000000e-02 -1.754720000000e+02 -5.500000000000e-02 5.136544000000e+02 1.610000000000e-01 2.392800000000e+02 7.500000000000e-02 4.051808000000e+02 1.270000000000e-01 9.922144000000e+02 3.110000000000e-01 4.913216000000e+02 1.540000000000e-01 -3.828480000000e+01 -1.200000000000e-02 2.456608000000e+02 7.700000000000e-02 -1.084736000000e+02 -3.400000000000e-02 2.743744000000e+02 8.600000000000e-02 6.061760000000e+01 1.900000000000e-02 6.763648000000e+02 2.120000000000e-01 1.531392000000e+02 4.800000000000e-02 -5.136544000000e+02 -1.610000000000e-01 -5.487488000000e+02 -1.720000000000e-01 5.742720000000e+03 1.800000000000e+00 3.796576000000e+02 1.190000000000e-01 diff --git a/nnpdfcpp/data/commondata/DATA_ATLASWRAP36PB.dat b/nnpdfcpp/data/commondata/DATA_ATLASWRAP36PB.dat new file mode 100644 index 0000000000..b451172842 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_ATLASWRAP36PB.dat @@ -0,0 +1,23 @@ +ATLASWRAP36PB 32 22 + 1 EWK_RAP 1.050000000000e-01 6.463838404000e+03 7.000000000000e+03 6.132574000000e+05 6.132574000000e+03 7.113785840000e+03 1.160000000000e+00 2.146400900000e+04 3.500000000000e+00 1.410492020000e+03 2.300000000000e-01 -1.103863320000e+03 -1.800000000000e-01 5.519316600000e+02 9.000000000000e-02 1.226514800000e+03 2.000000000000e-01 1.839772200000e+02 3.000000000000e-02 -6.132574000000e+01 -1.000000000000e-02 1.839772200000e+02 3.000000000000e-02 1.839772200000e+02 3.000000000000e-02 4.906059200000e+02 8.000000000000e-02 6.132574000000e+02 1.000000000000e-01 7.972346200000e+02 1.300000000000e-01 4.906059200000e+02 8.000000000000e-02 -2.637006820000e+03 -4.300000000000e-01 1.839772200000e+02 3.000000000000e-02 -1.042537580000e+03 -1.700000000000e-01 -1.349166280000e+03 -2.200000000000e-01 -3.618218660000e+03 -5.900000000000e-01 2.269052380000e+03 3.700000000000e-01 1.287840540000e+03 2.100000000000e-01 1.839772200000e+03 3.000000000000e-01 -1.103863320000e+03 -1.800000000000e-01 -3.066287000000e+02 -5.000000000000e-02 5.519316600000e+02 9.000000000000e-02 -4.906059200000e+02 -8.000000000000e-02 -1.471817760000e+03 -2.400000000000e-01 4.538104760000e+03 7.400000000000e-01 5.519316600000e+02 9.000000000000e-02 7.359088800000e+02 1.200000000000e-01 4.292801800000e+02 7.000000000000e-02 -1.103863320000e+03 -1.800000000000e-01 + 2 EWK_RAP 3.150000000000e-01 6.463838404000e+03 7.000000000000e+03 6.139399290000e+05 5.709641339700e+03 6.078005297100e+03 9.900000000000e-01 2.148789751500e+04 3.500000000000e+00 1.412061836700e+03 2.300000000000e-01 -1.105091872200e+03 -1.800000000000e-01 5.525459361000e+02 9.000000000000e-02 1.227879858000e+03 2.000000000000e-01 1.841819787000e+02 3.000000000000e-02 -6.139399290000e+01 -1.000000000000e-02 1.841819787000e+02 3.000000000000e-02 1.841819787000e+02 3.000000000000e-02 4.911519432000e+02 8.000000000000e-02 6.753339219000e+02 1.100000000000e-01 7.367279148000e+02 1.200000000000e-01 4.911519432000e+02 8.000000000000e-02 -2.394365723100e+03 -3.900000000000e-01 6.139399290000e+01 1.000000000000e-02 -9.209098935000e+02 -1.500000000000e-01 -1.166485865100e+03 -1.900000000000e-01 -3.683639574000e+03 -6.000000000000e-01 2.087395758600e+03 3.400000000000e-01 1.903213779900e+03 3.100000000000e-01 1.227879858000e+03 2.000000000000e-01 -1.166485865100e+03 -1.900000000000e-01 -4.911519432000e+02 -8.000000000000e-02 4.911519432000e+02 8.000000000000e-02 -8.595159006000e+02 -1.400000000000e-01 -7.981219077000e+02 -1.300000000000e-01 2.762729680500e+03 4.500000000000e-01 9.823038864000e+02 1.600000000000e-01 1.289273850900e+03 2.100000000000e-01 3.683639574000e+02 6.000000000000e-02 -6.139399290000e+02 -1.000000000000e-01 + 3 EWK_RAP 5.250000000000e-01 6.463838404000e+03 7.000000000000e+03 6.317468050000e+05 5.622546564500e+03 6.127944008500e+03 9.700000000000e-01 2.211113817500e+04 3.500000000000e+00 1.453017651500e+03 2.300000000000e-01 -1.137144249000e+03 -1.800000000000e-01 5.685721245000e+02 9.000000000000e-02 1.263493610000e+03 2.000000000000e-01 1.895240415000e+02 3.000000000000e-02 -6.317468050000e+01 -1.000000000000e-02 1.263493610000e+02 2.000000000000e-02 2.526987220000e+02 4.000000000000e-02 3.790480830000e+02 6.000000000000e-02 8.844455270000e+02 1.400000000000e-01 8.212708465000e+02 1.300000000000e-01 4.422227635000e+02 7.000000000000e-02 -2.526987220000e+03 -4.000000000000e-01 2.526987220000e+02 4.000000000000e-02 -1.010794888000e+03 -1.600000000000e-01 -1.073969568500e+03 -1.700000000000e-01 -3.474607427500e+03 -5.500000000000e-01 2.969209983500e+03 4.700000000000e-01 2.779685942000e+03 4.400000000000e-01 1.073969568500e+03 1.700000000000e-01 -1.768891054000e+03 -2.800000000000e-01 -7.580961660000e+02 -1.200000000000e-01 3.790480830000e+02 6.000000000000e-02 -3.158734025000e+02 -5.000000000000e-02 3.790480830000e+02 6.000000000000e-02 3.158734025000e+02 5.000000000000e-02 1.453017651500e+03 2.300000000000e-01 1.579367012500e+03 2.500000000000e-01 1.895240415000e+02 3.000000000000e-02 -4.422227635000e+02 -7.000000000000e-02 + 4 EWK_RAP 7.350000000000e-01 6.463838404000e+03 7.000000000000e+03 6.261847030000e+05 5.948754678500e+03 7.013268673600e+03 1.120000000000e+00 2.191646460500e+04 3.500000000000e+00 1.440224816900e+03 2.300000000000e-01 -1.127132465400e+03 -1.800000000000e-01 5.635662327000e+02 9.000000000000e-02 1.252369406000e+03 2.000000000000e-01 2.504738812000e+02 4.000000000000e-02 -6.261847030000e+01 -1.000000000000e-02 2.504738812000e+02 4.000000000000e-02 1.252369406000e+02 2.000000000000e-02 5.635662327000e+02 9.000000000000e-02 7.514216436000e+02 1.200000000000e-01 7.514216436000e+02 1.200000000000e-01 4.383292921000e+02 7.000000000000e-02 -2.943068104100e+03 -4.700000000000e-01 6.261847030000e+01 1.000000000000e-02 -1.001895524800e+03 -1.600000000000e-01 -1.440224816900e+03 -2.300000000000e-01 -3.944963628900e+03 -6.300000000000e-01 2.943068104100e+03 4.700000000000e-01 2.191646460500e+03 3.500000000000e-01 1.440224816900e+03 2.300000000000e-01 -6.261847030000e+02 -1.000000000000e-01 -6.261847030000e+01 -1.000000000000e-02 3.130923515000e+02 5.000000000000e-02 -8.140401139000e+02 -1.300000000000e-01 -5.635662327000e+02 -9.000000000000e-02 1.127132465400e+03 1.800000000000e-01 8.766585842000e+02 1.400000000000e-01 1.628080227800e+03 2.600000000000e-01 1.878554109000e+02 3.000000000000e-02 -5.635662327000e+02 -9.000000000000e-02 + 5 EWK_RAP 9.450000000000e-01 6.463838404000e+03 7.000000000000e+03 6.526301550000e+05 6.134723457000e+03 6.983142658500e+03 1.070000000000e+00 2.284205542500e+04 3.500000000000e+00 1.501049356500e+03 2.300000000000e-01 -1.174734279000e+03 -1.800000000000e-01 5.873671395000e+02 9.000000000000e-02 1.305260310000e+03 2.000000000000e-01 2.610520620000e+02 4.000000000000e-02 0.000000000000e+00 0.000000000000e+00 2.610520620000e+02 4.000000000000e-02 2.610520620000e+02 4.000000000000e-02 4.568411085000e+02 7.000000000000e-02 7.178931705000e+02 1.100000000000e-01 1.239997294500e+03 1.900000000000e-01 6.526301550000e+02 1.000000000000e-01 -3.132624744000e+03 -4.800000000000e-01 3.263150775000e+02 5.000000000000e-02 -1.435786341000e+03 -2.200000000000e-01 -1.501049356500e+03 -2.300000000000e-01 -3.002098713000e+03 -4.600000000000e-01 4.176832992000e+03 6.400000000000e-01 1.827364434000e+03 2.800000000000e-01 1.827364434000e+03 2.800000000000e-01 -2.023153480500e+03 -3.100000000000e-01 -5.221041240000e+02 -8.000000000000e-02 6.526301550000e+01 1.000000000000e-02 1.696838403000e+03 2.600000000000e-01 -1.957890465000e+02 -3.000000000000e-02 2.610520620000e+02 4.000000000000e-02 8.484192015000e+02 1.300000000000e-01 1.174734279000e+03 1.800000000000e-01 3.263150775000e+02 5.000000000000e-02 -1.239997294500e+03 -1.900000000000e-01 + 6 EWK_RAP 1.210000000000e+00 6.463838404000e+03 7.000000000000e+03 6.593128270000e+05 4.747052354400e+03 5.472296464100e+03 8.300000000000e-01 2.307594894500e+04 3.500000000000e+00 1.516419502100e+03 2.300000000000e-01 -1.186763088600e+03 -1.800000000000e-01 5.933815443000e+02 9.000000000000e-02 1.318625654000e+03 2.000000000000e-01 2.637251308000e+02 4.000000000000e-02 -6.593128270000e+01 -1.000000000000e-02 1.318625654000e+02 2.000000000000e-02 0.000000000000e+00 0.000000000000e+00 7.252441097000e+02 1.100000000000e-01 9.889692405000e+02 1.500000000000e-01 7.252441097000e+02 1.100000000000e-01 6.593128270000e+02 1.000000000000e-01 -3.032839004200e+03 -4.600000000000e-01 5.274502616000e+02 8.000000000000e-02 -1.516419502100e+03 -2.300000000000e-01 -1.450488219400e+03 -2.200000000000e-01 -4.351464658200e+03 -6.600000000000e-01 2.373526177200e+03 3.600000000000e-01 1.912007198300e+03 2.900000000000e-01 1.912007198300e+03 2.900000000000e-01 -1.120831805900e+03 -1.700000000000e-01 0.000000000000e+00 0.000000000000e+00 -3.296564135000e+02 -5.000000000000e-02 -2.637251308000e+02 -4.000000000000e-02 1.318625654000e+02 2.000000000000e-02 1.450488219400e+03 2.200000000000e-01 1.186763088600e+03 1.800000000000e-01 1.384556936700e+03 2.100000000000e-01 3.296564135000e+02 5.000000000000e-02 -5.933815443000e+02 -9.000000000000e-02 + 7 EWK_RAP 1.445000000000e+00 6.463838404000e+03 7.000000000000e+03 6.425348380000e+05 8.802727280600e+03 8.352952894000e+03 1.300000000000e+00 2.248871933000e+04 3.500000000000e+00 1.477830127400e+03 2.300000000000e-01 -1.156562708400e+03 -1.800000000000e-01 5.782813542000e+02 9.000000000000e-02 1.285069676000e+03 2.000000000000e-01 3.855209028000e+02 6.000000000000e-02 -1.285069676000e+02 -2.000000000000e-02 1.285069676000e+02 2.000000000000e-02 -1.927604514000e+02 -3.000000000000e-02 1.092309224600e+03 1.700000000000e-01 1.156562708400e+03 1.800000000000e-01 7.710418056000e+02 1.200000000000e-01 4.497743866000e+02 7.000000000000e-02 -3.919462511800e+03 -6.100000000000e-01 5.140278704000e+02 8.000000000000e-02 -1.156562708400e+03 -1.800000000000e-01 -1.670590578800e+03 -2.600000000000e-01 -6.425348380000e+03 -1.000000000000e+00 2.570139352000e+03 4.000000000000e-01 6.425348380000e+02 1.000000000000e-01 3.084167222400e+03 4.800000000000e-01 -1.927604514000e+03 -3.000000000000e-01 1.927604514000e+02 3.000000000000e-02 -1.220816192200e+03 -1.900000000000e-01 -4.497743866000e+02 -7.000000000000e-02 1.285069676000e+02 2.000000000000e-02 3.148420706200e+03 4.900000000000e-01 2.634392835800e+03 4.100000000000e-01 2.955660254800e+03 4.600000000000e-01 9.638022570000e+02 1.500000000000e-01 2.313125416800e+03 3.600000000000e-01 + 8 EWK_RAP 1.630000000000e+00 6.463838404000e+03 7.000000000000e+03 6.409354790000e+05 5.383858023600e+03 4.999296736200e+03 7.800000000000e-01 2.243274176500e+04 3.500000000000e+00 1.474151601700e+03 2.300000000000e-01 -1.153683862200e+03 -1.800000000000e-01 5.768419311000e+02 9.000000000000e-02 1.281870958000e+03 2.000000000000e-01 2.563741916000e+02 4.000000000000e-02 -6.409354790000e+01 -1.000000000000e-02 1.281870958000e+02 2.000000000000e-02 0.000000000000e+00 0.000000000000e+00 7.050290269000e+02 1.100000000000e-01 7.050290269000e+02 1.100000000000e-01 7.691225748000e+02 1.200000000000e-01 7.050290269000e+02 1.100000000000e-01 -3.140583847100e+03 -4.900000000000e-01 3.845612874000e+02 6.000000000000e-02 -1.666432245400e+03 -2.600000000000e-01 -1.345964505900e+03 -2.100000000000e-01 -4.101987065600e+03 -6.400000000000e-01 2.371461272300e+03 3.700000000000e-01 1.089590314300e+03 1.700000000000e-01 1.730525793300e+03 2.700000000000e-01 -7.050290269000e+02 -1.100000000000e-01 6.409354790000e+01 1.000000000000e-02 -7.050290269000e+02 -1.100000000000e-01 8.973096706000e+02 1.400000000000e-01 1.922806437000e+02 3.000000000000e-02 8.332161227000e+02 1.300000000000e-01 1.153683862200e+03 1.800000000000e-01 1.153683862200e+03 1.800000000000e-01 3.204677395000e+02 5.000000000000e-02 -1.922806437000e+02 -3.000000000000e-02 + 9 EWK_RAP 1.845000000000e+00 6.463838404000e+03 7.000000000000e+03 6.609834950000e+05 5.816654756000e+03 5.816654756000e+03 8.800000000000e-01 2.313442232500e+04 3.500000000000e+00 1.520262038500e+03 2.300000000000e-01 -1.189770291000e+03 -1.800000000000e-01 5.948851455000e+02 9.000000000000e-02 1.321966990000e+03 2.000000000000e-01 3.304917475000e+02 5.000000000000e-02 -6.609834950000e+01 -1.000000000000e-02 1.321966990000e+02 2.000000000000e-02 0.000000000000e+00 0.000000000000e+00 7.931801940000e+02 1.200000000000e-01 7.931801940000e+02 1.200000000000e-01 8.592785435000e+02 1.300000000000e-01 7.270818445000e+02 1.100000000000e-01 -3.371015824500e+03 -5.100000000000e-01 5.948851455000e+02 9.000000000000e-02 -1.718557087000e+03 -2.600000000000e-01 -1.586360388000e+03 -2.400000000000e-01 -4.098097669000e+03 -6.200000000000e-01 3.040524077000e+03 4.600000000000e-01 1.850753786000e+03 2.800000000000e-01 2.445638931500e+03 3.700000000000e-01 -1.057573592000e+03 -1.600000000000e-01 7.270818445000e+02 1.100000000000e-01 -6.609834950000e+02 -1.000000000000e-01 -7.931801940000e+02 -1.200000000000e-01 -1.321966990000e+02 -2.000000000000e-02 1.784655436500e+03 2.700000000000e-01 1.454163689000e+03 2.200000000000e-01 1.916852135500e+03 2.900000000000e-01 5.287867960000e+02 8.000000000000e-02 -1.321966990000e+02 -2.000000000000e-02 + 10 EWK_RAP 2.065000000000e+00 6.463838404000e+03 7.000000000000e+03 6.398760310000e+05 5.438946263500e+03 5.566921469700e+03 8.700000000000e-01 2.239566108500e+04 3.500000000000e+00 1.471714871300e+03 2.300000000000e-01 -1.151776855800e+03 -1.800000000000e-01 5.758884279000e+02 9.000000000000e-02 1.279752062000e+03 2.000000000000e-01 1.919628093000e+02 3.000000000000e-02 0.000000000000e+00 0.000000000000e+00 1.919628093000e+02 3.000000000000e-02 1.919628093000e+02 3.000000000000e-02 7.038636341000e+02 1.100000000000e-01 7.678512372000e+02 1.200000000000e-01 8.318388403000e+02 1.300000000000e-01 7.038636341000e+02 1.100000000000e-01 -2.815454536400e+03 -4.400000000000e-01 4.479132217000e+02 7.000000000000e-02 -1.663677680600e+03 -2.600000000000e-01 -1.087789252700e+03 -1.700000000000e-01 -3.839256186000e+03 -6.000000000000e-01 2.303553711600e+03 3.600000000000e-01 1.343739665100e+03 2.100000000000e-01 1.599690077500e+03 2.500000000000e-01 -1.599690077500e+03 -2.500000000000e-01 -6.398760310000e+01 -1.000000000000e-02 -6.398760310000e+02 -1.000000000000e-01 -1.919628093000e+02 -3.000000000000e-02 -4.479132217000e+02 -7.000000000000e-02 2.815454536400e+03 4.400000000000e-01 1.151776855800e+03 1.800000000000e-01 1.535702474400e+03 2.400000000000e-01 5.758884279000e+02 9.000000000000e-02 -3.839256186000e+02 -6.000000000000e-02 + 11 EWK_RAP 2.340000000000e+00 6.463838404000e+03 7.000000000000e+03 5.892058930000e+05 5.243932447700e+03 5.774217751400e+03 9.800000000000e-01 2.062220625500e+04 3.500000000000e+00 1.355173553900e+03 2.300000000000e-01 -1.060570607400e+03 -1.800000000000e-01 5.302853037000e+02 9.000000000000e-02 1.178411786000e+03 2.000000000000e-01 1.178411786000e+02 2.000000000000e-02 -5.892058930000e+01 -1.000000000000e-02 4.713647144000e+02 8.000000000000e-02 -1.767617679000e+02 -3.000000000000e-02 2.946029465000e+02 5.000000000000e-02 6.481264823000e+02 1.100000000000e-01 1.414094143200e+03 2.400000000000e-01 5.892058930000e+01 1.000000000000e-02 -2.828188286400e+03 -4.800000000000e-01 2.946029465000e+02 5.000000000000e-02 -1.708697089700e+03 -2.900000000000e-01 -1.414094143200e+03 -2.400000000000e-01 -4.831488322600e+03 -8.200000000000e-01 2.710347107800e+03 4.600000000000e-01 1.355173553900e+03 2.300000000000e-01 1.119491196700e+03 1.900000000000e-01 -1.944379446900e+03 -3.300000000000e-01 4.713647144000e+02 8.000000000000e-02 -1.119491196700e+03 -1.900000000000e-01 -2.356823572000e+02 -4.000000000000e-02 -5.892058930000e+01 -1.000000000000e-02 1.590855911100e+03 2.700000000000e-01 1.119491196700e+03 1.900000000000e-01 1.826538268300e+03 3.100000000000e-01 3.535235358000e+02 6.000000000000e-02 -1.178411786000e+02 -2.000000000000e-02 + 12 EWK_RAP 1.050000000000e-01 6.463838404000e+03 7.000000000000e+03 4.546661840000e+05 5.274127734400e+03 5.865193773600e+03 1.290000000000e+00 1.591331644000e+04 3.500000000000e+00 4.546661840000e+02 1.000000000000e-01 8.183991312000e+02 1.800000000000e-01 1.045732223200e+03 2.300000000000e-01 8.638657496000e+02 1.900000000000e-01 1.363998552000e+02 3.000000000000e-02 -4.546661840000e+01 -1.000000000000e-02 1.818664736000e+02 4.000000000000e-02 2.273330920000e+02 5.000000000000e-02 3.182663288000e+02 7.000000000000e-02 5.001328024000e+02 1.100000000000e-01 7.729325128000e+02 1.700000000000e-01 2.727997104000e+02 6.000000000000e-02 -1.909597972800e+03 -4.200000000000e-01 3.637329472000e+02 8.000000000000e-02 -8.183991312000e+02 -1.800000000000e-01 -1.318531933600e+03 -2.900000000000e-01 -2.591597248800e+03 -5.700000000000e-01 1.773198117600e+03 3.900000000000e-01 1.363998552000e+03 3.000000000000e-01 1.545865025600e+03 3.400000000000e-01 -1.864131354400e+03 -4.100000000000e-01 -5.001328024000e+02 -1.100000000000e-01 5.455994208000e+02 1.200000000000e-01 -5.001328024000e+02 -1.100000000000e-01 -9.093323680000e+01 -2.000000000000e-02 2.318797538400e+03 5.100000000000e-01 -3.637329472000e+02 -8.000000000000e-02 5.001328024000e+02 1.100000000000e-01 3.182663288000e+02 7.000000000000e-02 -7.274658944000e+02 -1.600000000000e-01 + 13 EWK_RAP 3.150000000000e-01 6.463838404000e+03 7.000000000000e+03 4.484928620000e+05 4.843722909600e+03 5.067969340600e+03 1.130000000000e+00 1.569725017000e+04 3.500000000000e+00 4.484928620000e+02 1.000000000000e-01 8.072871516000e+02 1.800000000000e-01 1.031533582600e+03 2.300000000000e-01 8.521364378000e+02 1.900000000000e-01 1.345478586000e+02 3.000000000000e-02 0.000000000000e+00 0.000000000000e+00 2.242464310000e+02 5.000000000000e-02 2.690957172000e+02 6.000000000000e-02 3.139450034000e+02 7.000000000000e-02 4.933421482000e+02 1.100000000000e-01 8.072871516000e+02 1.800000000000e-01 4.036435758000e+02 9.000000000000e-02 -1.883670020400e+03 -4.200000000000e-01 2.242464310000e+02 5.000000000000e-02 -8.969857240000e+02 -2.000000000000e-01 -1.300629299800e+03 -2.900000000000e-01 -2.152765737600e+03 -4.800000000000e-01 1.973368592800e+03 4.400000000000e-01 1.659423589400e+03 3.700000000000e-01 1.524875730800e+03 3.400000000000e-01 -1.704272875600e+03 -3.800000000000e-01 -3.587942896000e+02 -8.000000000000e-02 7.624378654000e+02 1.700000000000e-01 -8.072871516000e+02 -1.800000000000e-01 -7.175885792000e+02 -1.600000000000e-01 1.838820734200e+03 4.100000000000e-01 -6.727392930000e+02 -1.500000000000e-01 9.418350102000e+02 2.100000000000e-01 3.139450034000e+02 7.000000000000e-02 -4.484928620000e+02 -1.000000000000e-01 + 14 EWK_RAP 5.250000000000e-01 6.463838404000e+03 7.000000000000e+03 4.635696220000e+05 4.821124068800e+03 5.099265842000e+03 1.100000000000e+00 1.622493677000e+04 3.500000000000e+00 4.635696220000e+02 1.000000000000e-01 8.344253196000e+02 1.800000000000e-01 1.066210130600e+03 2.300000000000e-01 8.807822818000e+02 1.900000000000e-01 1.854278488000e+02 4.000000000000e-02 -4.635696220000e+01 -1.000000000000e-02 2.781417732000e+02 6.000000000000e-02 1.390708866000e+02 3.000000000000e-02 3.244987354000e+02 7.000000000000e-02 4.172126598000e+02 9.000000000000e-02 7.417113952000e+02 1.600000000000e-01 2.781417732000e+02 6.000000000000e-02 -2.086063299000e+03 -4.500000000000e-01 2.317848110000e+02 5.000000000000e-02 -9.271392440000e+02 -2.000000000000e-01 -1.437065828200e+03 -3.100000000000e-01 -2.410562034400e+03 -5.200000000000e-01 2.317848110000e+03 5.000000000000e-01 1.483422790400e+03 3.200000000000e-01 1.483422790400e+03 3.200000000000e-01 -1.297994941600e+03 -2.800000000000e-01 -3.708556976000e+02 -8.000000000000e-02 8.807822818000e+02 1.900000000000e-01 -6.489974708000e+02 -1.400000000000e-01 -6.489974708000e+02 -1.400000000000e-01 2.317848110000e+03 5.000000000000e-01 -8.344253196000e+02 -1.800000000000e-01 5.562835464000e+02 1.200000000000e-01 2.317848110000e+02 5.000000000000e-02 -4.635696220000e+02 -1.000000000000e-01 + 15 EWK_RAP 7.350000000000e-01 6.463838404000e+03 7.000000000000e+03 4.480344470000e+05 5.017985806400e+03 5.824447811000e+03 1.300000000000e+00 1.568120564500e+04 3.500000000000e+00 4.480344470000e+02 1.000000000000e-01 8.064620046000e+02 1.800000000000e-01 1.030479228100e+03 2.300000000000e-01 8.512654493000e+02 1.900000000000e-01 1.792137788000e+02 4.000000000000e-02 -4.480344470000e+01 -1.000000000000e-02 2.240172235000e+02 5.000000000000e-02 2.688206682000e+02 6.000000000000e-02 3.584275576000e+02 8.000000000000e-02 4.480344470000e+02 1.000000000000e-01 8.064620046000e+02 1.800000000000e-01 4.032310023000e+02 9.000000000000e-02 -2.195368790300e+03 -4.900000000000e-01 3.584275576000e+02 8.000000000000e-02 -9.856757834000e+02 -2.200000000000e-01 -1.388906785700e+03 -3.100000000000e-01 -2.195368790300e+03 -4.900000000000e-01 2.508992903200e+03 5.600000000000e-01 1.702530898600e+03 3.800000000000e-01 1.971351566800e+03 4.400000000000e-01 -1.612924009200e+03 -3.600000000000e-01 -1.344103341000e+02 -3.000000000000e-02 6.272482258000e+02 1.400000000000e-01 -4.032310023000e+02 -9.000000000000e-02 -3.136241129000e+02 -7.000000000000e-02 1.433710230400e+03 3.200000000000e-01 -3.584275576000e+02 -8.000000000000e-02 9.408723387000e+02 2.100000000000e-01 3.136241129000e+02 7.000000000000e-02 -5.824447811000e+02 -1.300000000000e-01 + 16 EWK_RAP 9.450000000000e-01 6.463838404000e+03 7.000000000000e+03 4.360749090000e+05 4.884038980800e+03 5.668973817000e+03 1.300000000000e+00 1.526262181500e+04 3.500000000000e+00 4.360749090000e+02 1.000000000000e-01 7.849348362000e+02 1.800000000000e-01 1.002972290700e+03 2.300000000000e-01 8.285423271000e+02 1.900000000000e-01 1.308224727000e+02 3.000000000000e-02 -4.360749090000e+01 -1.000000000000e-02 1.744299636000e+02 4.000000000000e-02 2.616449454000e+02 6.000000000000e-02 2.180374545000e+02 5.000000000000e-02 4.796823999000e+02 1.100000000000e-01 9.157573089000e+02 2.100000000000e-01 3.052524363000e+02 7.000000000000e-02 -2.005944581400e+03 -4.600000000000e-01 3.924674181000e+02 9.000000000000e-02 -1.002972290700e+03 -2.300000000000e-01 -1.177402254300e+03 -2.700000000000e-01 -2.660056944900e+03 -6.100000000000e-01 2.311197017700e+03 5.300000000000e-01 1.133794763400e+03 2.600000000000e-01 1.264617236100e+03 2.900000000000e-01 -2.049552072300e+03 -4.700000000000e-01 -3.924674181000e+02 -9.000000000000e-02 3.052524363000e+02 7.000000000000e-02 -9.593647998000e+02 -2.200000000000e-01 -5.232898908000e+02 -1.200000000000e-01 1.569869672400e+03 3.600000000000e-01 -3.052524363000e+02 -7.000000000000e-02 9.157573089000e+02 2.100000000000e-01 2.616449454000e+02 6.000000000000e-02 -6.105048726000e+02 -1.400000000000e-01 + 17 EWK_RAP 1.210000000000e+00 6.463838404000e+03 7.000000000000e+03 4.267232430000e+05 3.840509187000e+03 4.053870808500e+03 9.500000000000e-01 1.493531350500e+04 3.500000000000e+00 4.267232430000e+02 1.000000000000e-01 7.681018374000e+02 1.800000000000e-01 9.814634589000e+02 2.300000000000e-01 8.107741617000e+02 1.900000000000e-01 1.706892972000e+02 4.000000000000e-02 0.000000000000e+00 0.000000000000e+00 2.133616215000e+02 5.000000000000e-02 1.280169729000e+02 3.000000000000e-02 4.693955673000e+02 1.100000000000e-01 5.547402159000e+02 1.300000000000e-01 7.681018374000e+02 1.800000000000e-01 5.547402159000e+02 1.300000000000e-01 -2.090943890700e+03 -4.900000000000e-01 4.693955673000e+02 1.100000000000e-01 -1.365514377600e+03 -3.200000000000e-01 -1.450859026200e+03 -3.400000000000e-01 -2.560339458000e+03 -6.000000000000e-01 1.578875999100e+03 3.700000000000e-01 1.408186701900e+03 3.300000000000e-01 1.920254593500e+03 4.500000000000e-01 -2.005599242100e+03 -4.700000000000e-01 -8.534464860000e+01 -2.000000000000e-02 1.280169729000e+02 3.000000000000e-02 -6.400848645000e+02 -1.500000000000e-01 -4.693955673000e+02 -1.100000000000e-01 1.066808107500e+03 2.500000000000e-01 -8.534464860000e+01 -2.000000000000e-02 1.152152756100e+03 2.700000000000e-01 3.840509187000e+02 9.000000000000e-02 -4.267232430000e+02 -1.000000000000e-01 + 18 EWK_RAP 1.445000000000e+00 6.463838404000e+03 7.000000000000e+03 3.945119490000e+05 7.061763887100e+03 5.325911311500e+03 1.350000000000e+00 1.380791821500e+04 3.500000000000e+00 3.945119490000e+02 1.000000000000e-01 7.101215082000e+02 1.800000000000e-01 9.073774827000e+02 2.300000000000e-01 7.495727031000e+02 1.900000000000e-01 1.972559745000e+02 5.000000000000e-02 -7.890238980000e+01 -2.000000000000e-02 1.578047796000e+02 4.000000000000e-02 2.367071694000e+02 6.000000000000e-02 4.734143388000e+02 1.200000000000e-01 7.495727031000e+02 1.900000000000e-01 7.890238980000e+02 2.000000000000e-01 3.550607541000e+02 9.000000000000e-02 -2.445974083800e+03 -6.200000000000e-01 5.523167286000e+02 1.400000000000e-01 -9.862798725000e+02 -2.500000000000e-01 -1.499145406200e+03 -3.800000000000e-01 -3.195546786900e+03 -8.100000000000e-01 2.051462134800e+03 5.200000000000e-01 9.862798725000e+02 2.500000000000e-01 2.288169304200e+03 5.800000000000e-01 -2.090913329700e+03 -5.300000000000e-01 -1.972559745000e+02 -5.000000000000e-02 3.945119490000e+01 1.000000000000e-02 0.000000000000e+00 0.000000000000e+00 5.128655337000e+02 1.300000000000e-01 7.495727031000e+02 1.900000000000e-01 -9.862798725000e+02 -2.500000000000e-01 1.341340626600e+03 3.400000000000e-01 4.734143388000e+02 1.200000000000e-01 1.222987041900e+03 3.100000000000e-01 + 19 EWK_RAP 1.630000000000e+00 6.463838404000e+03 7.000000000000e+03 3.912113610000e+05 4.342446107100e+03 3.638265657300e+03 9.300000000000e-01 1.369239763500e+04 3.500000000000e+00 3.912113610000e+02 1.000000000000e-01 7.041804498000e+02 1.800000000000e-01 8.997861303000e+02 2.300000000000e-01 7.433015859000e+02 1.900000000000e-01 1.564845444000e+02 4.000000000000e-02 0.000000000000e+00 0.000000000000e+00 2.347268166000e+02 6.000000000000e-02 1.564845444000e+02 4.000000000000e-02 4.303324971000e+02 1.100000000000e-01 5.868170415000e+02 1.500000000000e-01 7.824227220000e+02 2.000000000000e-01 5.085747693000e+02 1.300000000000e-01 -2.073420213300e+03 -5.300000000000e-01 4.303324971000e+02 1.100000000000e-01 -1.408360899600e+03 -3.600000000000e-01 -1.408360899600e+03 -3.600000000000e-01 -2.894964071400e+03 -7.400000000000e-01 1.369239763500e+03 3.500000000000e-01 8.997861303000e+02 2.300000000000e-01 1.564845444000e+03 4.000000000000e-01 -1.682208852300e+03 -4.300000000000e-01 -3.912113610000e+01 -1.000000000000e-02 3.912113610000e+01 1.000000000000e-02 -1.134512946900e+03 -2.900000000000e-01 -8.606649942000e+02 -2.200000000000e-01 1.017149538600e+03 2.600000000000e-01 -3.520902249000e+02 -9.000000000000e-02 1.251876355200e+03 3.200000000000e-01 3.129690888000e+02 8.000000000000e-02 1.173634083000e+02 3.000000000000e-02 + 20 EWK_RAP 1.845000000000e+00 6.463838404000e+03 7.000000000000e+03 3.823079230000e+05 4.473002699100e+03 3.937771606900e+03 1.030000000000e+00 1.338077730500e+04 3.500000000000e+00 3.823079230000e+02 1.000000000000e-01 6.881542614000e+02 1.800000000000e-01 8.793082229000e+02 2.300000000000e-01 7.263850537000e+02 1.900000000000e-01 1.911539615000e+02 5.000000000000e-02 0.000000000000e+00 0.000000000000e+00 1.529231692000e+02 4.000000000000e-02 1.146923769000e+02 3.000000000000e-02 3.823079230000e+02 1.000000000000e-01 4.205387153000e+02 1.100000000000e-01 7.263850537000e+02 1.900000000000e-01 4.970002999000e+02 1.300000000000e-01 -2.064462784200e+03 -5.400000000000e-01 4.970002999000e+02 1.300000000000e-01 -1.338077730500e+03 -3.500000000000e-01 -1.414539315100e+03 -3.700000000000e-01 -2.332078330300e+03 -6.100000000000e-01 1.796847238100e+03 4.700000000000e-01 1.261616145900e+03 3.300000000000e-01 1.835078030400e+03 4.800000000000e-01 -1.682154861200e+03 -4.400000000000e-01 -3.823079230000e+01 -1.000000000000e-02 4.205387153000e+02 1.100000000000e-01 -8.793082229000e+02 -2.300000000000e-01 -3.823079230000e+02 -1.000000000000e-01 1.376308522800e+03 3.600000000000e-01 -3.058463384000e+02 -8.000000000000e-02 9.557698075000e+02 2.500000000000e-01 3.058463384000e+02 8.000000000000e-02 -3.823079230000e+01 -1.000000000000e-02 + 21 EWK_RAP 2.065000000000e+00 6.463838404000e+03 7.000000000000e+03 3.640731930000e+05 4.114027080900e+03 3.567917291400e+03 9.800000000000e-01 1.274256175500e+04 3.500000000000e+00 3.640731930000e+02 1.000000000000e-01 6.553317474000e+02 1.800000000000e-01 8.373683439000e+02 2.300000000000e-01 6.917390667000e+02 1.900000000000e-01 1.456292772000e+02 4.000000000000e-02 -3.640731930000e+01 -1.000000000000e-02 1.456292772000e+02 4.000000000000e-02 1.820365965000e+02 5.000000000000e-02 3.640731930000e+02 1.000000000000e-01 3.640731930000e+02 1.000000000000e-01 7.281463860000e+02 2.000000000000e-01 5.097024702000e+02 1.400000000000e-01 -1.893180603600e+03 -5.200000000000e-01 5.461097895000e+02 1.500000000000e-01 -1.310663494800e+03 -3.600000000000e-01 -1.165034217600e+03 -3.200000000000e-01 -2.330068435200e+03 -6.400000000000e-01 1.310663494800e+03 3.600000000000e-01 5.461097895000e+02 1.500000000000e-01 1.929587922900e+03 5.300000000000e-01 -2.038809880800e+03 -5.600000000000e-01 -7.281463860000e+01 -2.000000000000e-02 2.184439158000e+02 6.000000000000e-02 -1.165034217600e+03 -3.200000000000e-01 -1.456292772000e+02 -4.000000000000e-02 1.529107410600e+03 4.200000000000e-01 0.000000000000e+00 0.000000000000e+00 9.101829825000e+02 2.500000000000e-01 3.276658737000e+02 9.000000000000e-02 -1.456292772000e+02 -4.000000000000e-02 + 22 EWK_RAP 2.340000000000e+00 6.463838404000e+03 7.000000000000e+03 3.371795130000e+05 3.978718253400e+03 3.708974643000e+03 1.100000000000e+00 1.180128295500e+04 3.500000000000e+00 3.371795130000e+02 1.000000000000e-01 6.069231234000e+02 1.800000000000e-01 7.755128799000e+02 2.300000000000e-01 6.406410747000e+02 1.900000000000e-01 2.023077078000e+02 6.000000000000e-02 0.000000000000e+00 0.000000000000e+00 4.720513182000e+02 1.400000000000e-01 3.371795130000e+01 1.000000000000e-02 6.743590260000e+01 2.000000000000e-02 4.720513182000e+02 1.400000000000e-01 1.180128295500e+03 3.500000000000e-01 4.046154156000e+02 1.200000000000e-01 -1.652179613700e+03 -4.900000000000e-01 5.394872208000e+02 1.600000000000e-01 -1.213846246800e+03 -3.600000000000e-01 -1.045256490300e+03 -3.100000000000e-01 -2.832307909200e+03 -8.400000000000e-01 1.348718052000e+03 4.000000000000e-01 2.697436104000e+02 8.000000000000e-02 1.955641175400e+03 5.800000000000e-01 -1.854487321500e+03 -5.500000000000e-01 -3.371795130000e+02 -1.000000000000e-01 -3.371795130000e+01 -1.000000000000e-02 -1.517307808500e+03 -4.500000000000e-01 -1.348718052000e+02 -4.000000000000e-02 8.092308312000e+02 2.400000000000e-01 3.034615617000e+02 9.000000000000e-02 9.778205877000e+02 2.900000000000e-01 3.034615617000e+02 9.000000000000e-02 0.000000000000e+00 0.000000000000e+00 diff --git a/nnpdfcpp/data/commondata/DATA_ATLASZRAP11CC.dat b/nnpdfcpp/data/commondata/DATA_ATLASZRAP11CC.dat new file mode 100644 index 0000000000..1dd11d57d4 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_ATLASZRAP11CC.dat @@ -0,0 +1,25 @@ +ATLASZRAP11CC 133 24 + 1 EWK_RAP 2.000000000000e-01 3.136000000000e+03 7.000000000000e+03 3.524400000000e+03 3.421839960000e+01 1.824828588000e+01 5.177700000000e-01 -1.621224000000e+00 -4.600000000000e-02 1.515492000000e+00 4.300000000000e-02 5.533308000000e+00 1.570000000000e-01 1.057320000000e+00 3.000000000000e-02 9.868320000000e-01 2.800000000000e-02 -1.409760000000e+00 -4.000000000000e-02 1.198296000000e+00 3.400000000000e-02 -1.832688000000e+00 -5.200000000000e-02 1.621224000000e+00 4.600000000000e-02 -6.943068000000e+00 -1.970000000000e-01 1.053795600000e+01 2.990000000000e-01 6.167700000000e+00 1.750000000000e-01 3.524400000000e-02 1.000000000000e-03 2.114640000000e-01 6.000000000000e-03 1.148954400000e+01 3.260000000000e-01 3.171960000000e-01 9.000000000000e-03 1.022076000000e+00 2.900000000000e-02 3.171960000000e-01 9.000000000000e-03 3.524400000000e-02 1.000000000000e-03 1.057320000000e-01 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -2.114640000000e-01 -6.000000000000e-03 2.819520000000e-01 8.000000000000e-03 -1.057320000000e-01 -3.000000000000e-03 -2.467080000000e-01 -7.000000000000e-03 4.581720000000e-01 1.300000000000e-02 -2.467080000000e-01 -7.000000000000e-03 1.057320000000e-01 3.000000000000e-03 -7.048800000000e-02 -2.000000000000e-03 7.048800000000e-02 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 7.048800000000e-02 2.000000000000e-03 -1.057320000000e-01 -3.000000000000e-03 1.057320000000e-01 3.000000000000e-03 3.524400000000e-02 1.000000000000e-03 2.467080000000e-01 7.000000000000e-03 -1.762200000000e-01 -5.000000000000e-03 1.057320000000e-01 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -7.048800000000e-02 -2.000000000000e-03 -1.762200000000e-01 -5.000000000000e-03 -2.114640000000e-01 -6.000000000000e-03 7.048800000000e-02 2.000000000000e-03 -7.048800000000e-02 -2.000000000000e-03 -4.229280000000e-01 -1.200000000000e-02 3.524400000000e-02 1.000000000000e-03 -5.991480000000e-01 -1.700000000000e-02 1.057320000000e-01 3.000000000000e-03 -3.171960000000e-01 -9.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 6.343920000000e-01 1.800000000000e-02 3.876840000000e-01 1.100000000000e-02 2.921727600000e+01 8.290000000000e-01 -1.127808000000e+00 -3.200000000000e-02 -1.621224000000e+00 -4.600000000000e-02 3.876840000000e+00 1.100000000000e-01 -1.691712000000e+00 -4.800000000000e-02 -2.114640000000e-01 -6.000000000000e-03 3.665376000000e+00 1.040000000000e-01 2.819520000000e+00 8.000000000000e-02 1.656468000000e+00 4.700000000000e-02 -7.048800000000e-02 -2.000000000000e-03 -3.066228000000e+00 -8.700000000000e-02 -1.374516000000e+00 -3.900000000000e-02 -1.092564000000e+00 -3.100000000000e-02 2.467080000000e+00 7.000000000000e-02 0.000000000000e+00 0.000000000000e+00 -7.048800000000e-01 -2.000000000000e-02 2.114640000000e+00 6.000000000000e-02 3.524400000000e-02 1.000000000000e-03 7.119288000000e+00 2.020000000000e-01 5.462820000000e+00 1.550000000000e-01 2.643300000000e+00 7.500000000000e-02 5.286600000000e-01 1.500000000000e-02 -2.326104000000e+00 -6.600000000000e-02 -5.286600000000e-01 -1.500000000000e-02 -8.811000000000e-01 -2.500000000000e-02 -9.868320000000e-01 -2.800000000000e-02 1.254686400000e+01 3.560000000000e-01 -3.876840000000e+00 -1.100000000000e-01 -1.445004000000e+00 -4.100000000000e-02 -3.876840000000e-01 -1.100000000000e-02 1.515492000000e+00 4.300000000000e-02 -9.163440000000e-01 -2.600000000000e-02 -1.339272000000e+00 -3.800000000000e-02 4.581720000000e-01 1.300000000000e-02 1.797444000000e+00 5.100000000000e-02 5.991480000000e-01 1.700000000000e-02 -5.639040000000e-01 -1.600000000000e-02 -2.467080000000e-01 -7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 5.639040000000e-01 1.600000000000e-02 -3.524400000000e-01 -1.000000000000e-02 7.048800000000e-02 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.467080000000e-01 -7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.762200000000e-01 5.000000000000e-03 -2.467080000000e-01 -7.000000000000e-03 1.057320000000e-01 3.000000000000e-03 -4.581720000000e-01 -1.300000000000e-02 2.467080000000e-01 7.000000000000e-03 -2.819520000000e-01 -8.000000000000e-03 -2.713788000000e+00 -7.700000000000e-02 -2.008908000000e+00 -5.700000000000e-02 -8.811000000000e-01 -2.500000000000e-02 -1.057320000000e-01 -3.000000000000e-03 -1.409760000000e-01 -4.000000000000e-03 -3.524400000000e-02 -1.000000000000e-03 -5.991480000000e-01 -1.700000000000e-02 1.867932000000e+00 5.300000000000e-02 5.991480000000e-01 1.700000000000e-02 1.163052000000e+00 3.300000000000e-02 2.467080000000e-01 7.000000000000e-03 1.339272000000e+00 3.800000000000e-02 -1.233540000000e+00 -3.500000000000e-02 -1.092564000000e+00 -3.100000000000e-02 -2.114640000000e-01 -6.000000000000e-03 -8.811000000000e-01 -2.500000000000e-02 -7.048800000000e-01 -2.000000000000e-02 -4.581720000000e-01 -1.300000000000e-02 6.696360000000e-01 1.900000000000e-02 6.343920000000e+01 1.800000000000e+00 4.881294000000e+00 1.385000000000e-01 + 2 EWK_RAP 6.000000000000e-01 3.136000000000e+03 7.000000000000e+03 3.549000000000e+03 3.363600240000e+01 1.683965010000e+01 4.744900000000e-01 -1.206660000000e+00 -3.400000000000e-02 1.774500000000e+00 5.000000000000e-02 5.500950000000e+00 1.550000000000e-01 7.452900000000e-01 2.100000000000e-02 2.058420000000e+00 5.800000000000e-02 -1.597050000000e+00 -4.500000000000e-02 9.582300000000e-01 2.700000000000e-02 9.227400000000e-01 2.600000000000e-02 1.206660000000e+00 3.400000000000e-02 -7.239960000000e+00 -2.040000000000e-01 8.801520000000e+00 2.480000000000e-01 5.288010000000e+00 1.490000000000e-01 7.098000000000e-02 2.000000000000e-03 2.129400000000e-01 6.000000000000e-03 1.110837000000e+01 3.130000000000e-01 2.839200000000e-01 8.000000000000e-03 9.582300000000e-01 2.700000000000e-02 2.484300000000e-01 7.000000000000e-03 1.064700000000e-01 3.000000000000e-03 4.968600000000e-01 1.400000000000e-02 -2.484300000000e-01 -7.000000000000e-03 1.064700000000e-01 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.549000000000e-02 -1.000000000000e-03 -1.419600000000e-01 -4.000000000000e-03 2.129400000000e-01 6.000000000000e-03 -1.774500000000e-01 -5.000000000000e-03 1.064700000000e-01 3.000000000000e-03 -1.064700000000e-01 -3.000000000000e-03 -7.098000000000e-02 -2.000000000000e-03 -3.549000000000e-02 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.064700000000e-01 -3.000000000000e-03 7.098000000000e-02 2.000000000000e-03 -7.098000000000e-02 -2.000000000000e-03 4.613700000000e-01 1.300000000000e-02 -2.839200000000e-01 -8.000000000000e-03 3.549000000000e-02 1.000000000000e-03 3.549000000000e-02 1.000000000000e-03 -2.484300000000e-01 -7.000000000000e-03 -1.774500000000e-01 -5.000000000000e-03 -3.549000000000e-01 -1.000000000000e-02 1.064700000000e-01 3.000000000000e-03 -1.419600000000e-01 -4.000000000000e-03 -4.613700000000e-01 -1.300000000000e-02 3.549000000000e-02 1.000000000000e-03 -6.388200000000e-01 -1.800000000000e-02 1.064700000000e-01 3.000000000000e-03 -3.903900000000e-01 -1.100000000000e-02 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 5.678400000000e-01 1.600000000000e-02 2.725632000000e+01 7.680000000000e-01 -2.200380000000e+00 -6.200000000000e-02 -1.880970000000e+00 -5.300000000000e-02 2.981160000000e+00 8.400000000000e-02 -1.561560000000e+00 -4.400000000000e-02 -1.774500000000e-01 -5.000000000000e-03 5.181540000000e+00 1.460000000000e-01 2.910180000000e+00 8.200000000000e-02 1.419600000000e+00 4.000000000000e-02 -1.206660000000e+00 -3.400000000000e-02 -3.265080000000e+00 -9.200000000000e-02 -1.455090000000e+00 -4.100000000000e-02 -7.098000000000e-01 -2.000000000000e-02 2.093910000000e+00 5.900000000000e-02 -7.098000000000e-02 -2.000000000000e-03 -9.937200000000e-01 -2.800000000000e-02 2.271360000000e+00 6.400000000000e-02 7.098000000000e-02 2.000000000000e-03 6.956040000000e+00 1.960000000000e-01 5.288010000000e+00 1.490000000000e-01 2.413320000000e+00 6.800000000000e-02 2.129400000000e-01 6.000000000000e-03 -9.937200000000e-01 -2.800000000000e-02 -1.064700000000e-01 -3.000000000000e-03 -3.194100000000e-01 -9.000000000000e-03 -3.903900000000e-01 -1.100000000000e-02 1.061151000000e+01 2.990000000000e-01 -1.774500000000e+00 -5.000000000000e-02 3.549000000000e-01 1.000000000000e-02 4.968600000000e-01 1.400000000000e-02 5.323500000000e-01 1.500000000000e-02 -8.517600000000e-01 -2.400000000000e-02 -8.872500000000e-01 -2.500000000000e-02 7.452900000000e-01 2.100000000000e-02 1.313130000000e+00 3.700000000000e-02 5.323500000000e-01 1.500000000000e-02 3.549000000000e-02 1.000000000000e-03 -5.323500000000e-01 -1.500000000000e-02 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 5.323500000000e-01 1.500000000000e-02 -1.419600000000e-01 -4.000000000000e-03 3.549000000000e-02 1.000000000000e-03 -7.098000000000e-02 -2.000000000000e-03 -2.839200000000e-01 -8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.484300000000e-01 7.000000000000e-03 -3.549000000000e-02 -1.000000000000e-03 7.098000000000e-02 2.000000000000e-03 -5.678400000000e-01 -1.600000000000e-02 2.129400000000e-01 6.000000000000e-03 -2.129400000000e-01 -6.000000000000e-03 -2.342340000000e+00 -6.600000000000e-02 -1.632540000000e+00 -4.600000000000e-02 -9.937200000000e-01 -2.800000000000e-02 0.000000000000e+00 0.000000000000e+00 -3.549000000000e-02 -1.000000000000e-03 1.064700000000e-01 3.000000000000e-03 -2.484300000000e-01 -7.000000000000e-03 1.526070000000e+00 4.300000000000e-02 1.135680000000e+00 3.200000000000e-02 9.227400000000e-01 2.600000000000e-02 2.484300000000e-01 7.000000000000e-03 1.206660000000e+00 3.400000000000e-02 -1.029210000000e+00 -2.900000000000e-02 -1.206660000000e+00 -3.400000000000e-02 -1.774500000000e-01 -5.000000000000e-03 -1.171170000000e+00 -3.300000000000e-02 -5.678400000000e-01 -1.600000000000e-02 -1.064700000000e-01 -3.000000000000e-03 7.098000000000e-01 2.000000000000e-02 6.388200000000e+01 1.800000000000e+00 4.871002500000e+00 1.372500000000e-01 + 3 EWK_RAP 1.000000000000e+00 3.136000000000e+03 7.000000000000e+03 3.411400000000e+03 3.320588532000e+01 1.651936336000e+01 4.842400000000e-01 -3.070260000000e-01 -9.000000000000e-03 2.353866000000e+00 6.900000000000e-02 6.345204000000e+00 1.860000000000e-01 7.505080000000e-01 2.200000000000e-02 5.117100000000e-01 1.500000000000e-02 -3.274944000000e+00 -9.600000000000e-02 6.822800000000e-02 2.000000000000e-03 4.980644000000e+00 1.460000000000e-01 -6.822800000000e-01 -2.000000000000e-02 -7.948562000000e+00 -2.330000000000e-01 8.664956000000e+00 2.540000000000e-01 4.298364000000e+00 1.260000000000e-01 3.411400000000e-02 1.000000000000e-03 1.705700000000e-01 5.000000000000e-03 1.078002400000e+01 3.160000000000e-01 3.070260000000e-01 9.000000000000e-03 9.893060000000e-01 2.900000000000e-02 2.387980000000e-01 7.000000000000e-03 1.364560000000e-01 4.000000000000e-03 9.893060000000e-01 2.900000000000e-02 -5.458240000000e-01 -1.600000000000e-02 3.411400000000e-01 1.000000000000e-02 -1.023420000000e-01 -3.000000000000e-03 -3.411400000000e-02 -1.000000000000e-03 -1.364560000000e-01 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.387980000000e-01 -7.000000000000e-03 1.705700000000e-01 5.000000000000e-03 -1.023420000000e-01 -3.000000000000e-03 -2.387980000000e-01 -7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.705700000000e-01 -5.000000000000e-03 -2.046840000000e-01 -6.000000000000e-03 6.822800000000e-02 2.000000000000e-03 -1.705700000000e-01 -5.000000000000e-03 3.752540000000e-01 1.100000000000e-02 -4.434820000000e-01 -1.300000000000e-02 6.822800000000e-02 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -6.822800000000e-01 -2.000000000000e-02 -3.070260000000e-01 -9.000000000000e-03 -4.434820000000e-01 -1.300000000000e-02 3.411400000000e-02 1.000000000000e-03 -1.364560000000e-01 -4.000000000000e-03 -4.093680000000e-01 -1.200000000000e-02 6.822800000000e-02 2.000000000000e-03 -7.163940000000e-01 -2.100000000000e-02 1.364560000000e-01 4.000000000000e-03 -6.481660000000e-01 -1.900000000000e-02 -6.822800000000e-02 -2.000000000000e-03 3.718426000000e+00 1.090000000000e-01 1.842156000000e+00 5.400000000000e-02 2.916747000000e+01 8.550000000000e-01 -2.592664000000e+00 -7.600000000000e-02 -3.377286000000e+00 -9.900000000000e-02 2.660892000000e+00 7.800000000000e-02 -1.808042000000e+00 -5.300000000000e-02 -4.093680000000e-01 -1.200000000000e-02 5.492354000000e+00 1.610000000000e-01 2.695006000000e+00 7.900000000000e-02 1.296332000000e+00 3.800000000000e-02 -2.012726000000e+00 -5.900000000000e-02 -3.070260000000e+00 -9.000000000000e-02 -1.535130000000e+00 -4.500000000000e-02 -1.023420000000e+00 -3.000000000000e-02 1.739814000000e+00 5.100000000000e-02 -1.023420000000e-01 -3.000000000000e-03 -2.729120000000e+00 -8.000000000000e-02 3.036146000000e+00 8.900000000000e-02 3.411400000000e-02 1.000000000000e-03 6.379318000000e+00 1.870000000000e-01 3.991338000000e+00 1.170000000000e-01 1.398674000000e+00 4.100000000000e-02 -1.023420000000e-01 -3.000000000000e-03 -5.799380000000e-01 -1.700000000000e-02 -1.705700000000e-01 -5.000000000000e-03 5.458240000000e-01 1.600000000000e-02 2.387980000000e-01 7.000000000000e-03 7.880334000000e+00 2.310000000000e-01 -3.411400000000e-02 -1.000000000000e-03 2.831462000000e+00 8.300000000000e-02 1.330446000000e+00 3.900000000000e-02 -1.364560000000e-01 -4.000000000000e-03 -4.093680000000e-01 -1.200000000000e-02 -7.163940000000e-01 -2.100000000000e-02 9.210780000000e-01 2.700000000000e-02 1.057534000000e+00 3.100000000000e-02 6.140520000000e-01 1.800000000000e-02 6.822800000000e-02 2.000000000000e-03 -3.070260000000e-01 -9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 1.364560000000e-01 4.000000000000e-03 5.117100000000e-01 1.500000000000e-02 1.023420000000e-01 3.000000000000e-03 6.822800000000e-02 2.000000000000e-03 -6.822800000000e-02 -2.000000000000e-03 -3.070260000000e-01 -9.000000000000e-03 6.822800000000e-02 2.000000000000e-03 3.752540000000e-01 1.100000000000e-02 2.046840000000e-01 6.000000000000e-03 1.023420000000e-01 3.000000000000e-03 -6.481660000000e-01 -1.900000000000e-02 1.364560000000e-01 4.000000000000e-03 -1.364560000000e-01 -4.000000000000e-03 -1.978612000000e+00 -5.800000000000e-02 -1.364560000000e+00 -4.000000000000e-02 -1.023420000000e+00 -3.000000000000e-02 1.023420000000e-01 3.000000000000e-03 3.411400000000e-02 1.000000000000e-03 2.387980000000e-01 7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.228104000000e+00 3.600000000000e-02 1.398674000000e+00 4.100000000000e-02 5.799380000000e-01 1.700000000000e-02 3.070260000000e-01 9.000000000000e-03 1.193990000000e+00 3.500000000000e-02 -7.505080000000e-01 -2.200000000000e-02 -1.398674000000e+00 -4.100000000000e-02 -1.364560000000e-01 -4.000000000000e-03 -1.364560000000e+00 -4.000000000000e-02 -4.434820000000e-01 -1.300000000000e-02 3.411400000000e-01 1.000000000000e-02 6.822800000000e-01 2.000000000000e-02 6.140520000000e+01 1.800000000000e+00 5.441183000000e+00 1.595000000000e-01 + 4 EWK_RAP 1.400000000000e+00 3.136000000000e+03 7.000000000000e+03 3.422800000000e+03 3.439914000000e+01 1.658038548000e+01 4.844100000000e-01 -1.711400000000e-01 -5.000000000000e-03 2.704012000000e+00 7.900000000000e-02 6.777144000000e+00 1.980000000000e-01 -1.642944000000e+00 -4.800000000000e-02 1.916768000000e+00 5.600000000000e-02 -4.723464000000e+00 -1.380000000000e-01 -1.300664000000e+00 -3.800000000000e-02 4.894604000000e+00 1.430000000000e-01 -2.122136000000e+00 -6.200000000000e-02 -8.317404000000e+00 -2.430000000000e-01 5.989900000000e+00 1.750000000000e-01 2.977836000000e+00 8.700000000000e-02 6.845600000000e-02 2.000000000000e-03 2.053680000000e-01 6.000000000000e-03 1.016571600000e+01 2.970000000000e-01 2.395960000000e-01 7.000000000000e-03 8.557000000000e-01 2.500000000000e-02 1.369120000000e-01 4.000000000000e-03 2.053680000000e-01 6.000000000000e-03 1.300664000000e+00 3.800000000000e-02 -5.818760000000e-01 -1.700000000000e-02 3.422800000000e-01 1.000000000000e-02 3.422800000000e-02 1.000000000000e-03 1.369120000000e-01 4.000000000000e-03 -1.711400000000e-01 -5.000000000000e-03 -1.369120000000e-01 -4.000000000000e-03 -3.765080000000e-01 -1.100000000000e-02 3.765080000000e-01 1.100000000000e-02 -1.711400000000e-01 -5.000000000000e-03 -2.053680000000e-01 -6.000000000000e-03 1.369120000000e-01 4.000000000000e-03 -3.765080000000e-01 -1.100000000000e-02 -4.107360000000e-01 -1.200000000000e-02 2.053680000000e-01 6.000000000000e-03 -1.026840000000e-01 -3.000000000000e-03 3.422800000000e-02 1.000000000000e-03 -7.187880000000e-01 -2.100000000000e-02 2.053680000000e-01 6.000000000000e-03 -2.053680000000e-01 -6.000000000000e-03 -1.026840000000e+00 -3.000000000000e-02 -3.422800000000e-01 -1.000000000000e-02 -3.422800000000e-01 -1.000000000000e-02 0.000000000000e+00 0.000000000000e+00 -2.053680000000e-01 -6.000000000000e-03 -6.503320000000e-01 -1.900000000000e-02 3.422800000000e-02 1.000000000000e-03 -6.503320000000e-01 -1.900000000000e-02 3.080520000000e-01 9.000000000000e-03 -7.872440000000e-01 -2.300000000000e-02 6.845600000000e-02 2.000000000000e-03 -1.095296000000e+00 -3.200000000000e-02 1.369120000000e-01 4.000000000000e-03 2.584214000000e+01 7.550000000000e-01 -1.950996000000e+00 -5.700000000000e-02 -2.293276000000e+00 -6.700000000000e-02 2.704012000000e+00 7.900000000000e-02 -1.642944000000e+00 -4.800000000000e-02 1.026840000000e-01 3.000000000000e-03 6.263724000000e+00 1.830000000000e-01 2.601328000000e+00 7.600000000000e-02 1.300664000000e+00 3.800000000000e-02 -2.053680000000e+00 -6.000000000000e-02 -3.662396000000e+00 -1.070000000000e-01 -1.334892000000e+00 -3.900000000000e-02 -7.872440000000e-01 -2.300000000000e-02 1.369120000000e+00 4.000000000000e-02 4.107360000000e-01 1.200000000000e-02 -1.403348000000e+00 -4.100000000000e-02 3.422800000000e+00 1.000000000000e-01 3.422800000000e-02 1.000000000000e-03 6.229496000000e+00 1.820000000000e-01 3.457028000000e+00 1.010000000000e-01 1.129524000000e+00 3.300000000000e-02 3.080520000000e-01 9.000000000000e-03 -7.187880000000e-01 -2.100000000000e-02 -2.738240000000e-01 -8.000000000000e-03 5.134200000000e-01 1.500000000000e-02 1.711400000000e-01 5.000000000000e-03 7.119424000000e+00 2.080000000000e-01 2.053680000000e-01 6.000000000000e-03 2.395960000000e+00 7.000000000000e-02 1.061068000000e+00 3.100000000000e-02 -3.422800000000e-01 -1.000000000000e-02 -1.711400000000e-01 -5.000000000000e-03 -5.818760000000e-01 -1.700000000000e-02 1.232208000000e+00 3.600000000000e-02 1.403348000000e+00 4.100000000000e-02 3.080520000000e-01 9.000000000000e-03 -3.765080000000e-01 -1.100000000000e-02 -2.053680000000e-01 -6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -5.476480000000e-01 -1.600000000000e-02 5.134200000000e-01 1.500000000000e-02 3.422800000000e-01 1.000000000000e-02 -3.422800000000e-02 -1.000000000000e-03 -2.395960000000e-01 -7.000000000000e-03 -3.422800000000e-01 -1.000000000000e-02 3.422800000000e-02 1.000000000000e-03 -2.738240000000e-01 -8.000000000000e-03 4.791920000000e-01 1.400000000000e-02 -1.026840000000e-01 -3.000000000000e-03 -7.530160000000e-01 -2.200000000000e-02 1.369120000000e-01 4.000000000000e-03 -3.422800000000e-02 -1.000000000000e-03 -2.087908000000e+00 -6.100000000000e-02 -1.129524000000e+00 -3.300000000000e-02 -1.437576000000e+00 -4.200000000000e-02 1.026840000000e-01 3.000000000000e-03 2.738240000000e-01 8.000000000000e-03 6.845600000000e-01 2.000000000000e-02 5.476480000000e-01 1.600000000000e-02 1.300664000000e+00 3.800000000000e-02 2.669784000000e+00 7.800000000000e-02 8.214720000000e-01 2.400000000000e-02 4.107360000000e-01 1.200000000000e-02 1.129524000000e+00 3.300000000000e-02 -8.214720000000e-01 -2.400000000000e-02 -1.711400000000e+00 -5.000000000000e-02 -2.738240000000e-01 -8.000000000000e-03 -1.814084000000e+00 -5.300000000000e-02 -7.872440000000e-01 -2.300000000000e-02 5.476480000000e-01 1.600000000000e-02 1.266436000000e+00 3.700000000000e-02 6.161040000000e+01 1.800000000000e+00 5.544936000000e+00 1.620000000000e-01 + 5 EWK_RAP 1.800000000000e+00 3.136000000000e+03 7.000000000000e+03 2.941700000000e+03 3.214983930000e+01 1.380775146000e+01 4.693800000000e-01 -5.883400000000e-02 -2.000000000000e-03 2.588696000000e+00 8.800000000000e-02 5.648064000000e+00 1.920000000000e-01 -6.765910000000e-01 -2.300000000000e-02 -8.530930000000e-01 -2.900000000000e-02 -3.147619000000e+00 -1.070000000000e-01 4.412550000000e-01 1.500000000000e-02 -1.029595000000e+00 -3.500000000000e-02 -1.000178000000e+00 -3.400000000000e-02 -8.060258000000e+00 -2.740000000000e-01 1.794437000000e+00 6.100000000000e-02 1.500267000000e+00 5.100000000000e-02 2.941700000000e-02 1.000000000000e-03 1.176680000000e-01 4.000000000000e-03 8.854517000000e+00 3.010000000000e-01 2.059190000000e-01 7.000000000000e-03 7.060080000000e-01 2.400000000000e-02 0.000000000000e+00 0.000000000000e+00 2.647530000000e-01 9.000000000000e-03 1.206097000000e+00 4.100000000000e-02 -6.765910000000e-01 -2.300000000000e-02 8.825100000000e-02 3.000000000000e-03 3.530040000000e-01 1.200000000000e-02 1.470850000000e-01 5.000000000000e-03 -5.589230000000e-01 -1.900000000000e-02 3.235870000000e-01 1.100000000000e-02 -5.589230000000e-01 -1.900000000000e-02 5.295060000000e-01 1.800000000000e-02 -1.176680000000e-01 -4.000000000000e-03 -1.176680000000e-01 -4.000000000000e-03 1.176680000000e-01 4.000000000000e-03 -2.059190000000e-01 -7.000000000000e-03 -5.000890000000e-01 -1.700000000000e-02 3.824210000000e-01 1.300000000000e-02 5.883400000000e-02 2.000000000000e-03 1.176680000000e-01 4.000000000000e-03 -6.765910000000e-01 -2.300000000000e-02 2.647530000000e-01 9.000000000000e-03 -5.883400000000e-02 -2.000000000000e-03 -7.942590000000e-01 -2.700000000000e-02 -5.000890000000e-01 -1.700000000000e-02 -2.941700000000e-01 -1.000000000000e-02 8.825100000000e-02 3.000000000000e-03 -1.470850000000e-01 -5.000000000000e-03 -7.060080000000e-01 -2.400000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -8.236760000000e-01 -2.800000000000e-02 2.353360000000e-01 8.000000000000e-03 -7.060080000000e-01 -2.400000000000e-02 8.825100000000e-02 3.000000000000e-03 -9.589942000000e+00 -3.260000000000e-01 2.412194000000e+00 8.200000000000e-02 2.085665300000e+01 7.090000000000e-01 -2.647530000000e+00 -9.000000000000e-02 -2.412194000000e+00 -8.200000000000e-02 2.265109000000e+00 7.700000000000e-02 -9.413440000000e-01 -3.200000000000e-02 -6.471740000000e-01 -2.200000000000e-02 3.441789000000e+00 1.170000000000e-01 1.941522000000e+00 6.600000000000e-02 1.176680000000e+00 4.000000000000e-02 -7.942590000000e-01 -2.700000000000e-02 -3.294704000000e+00 -1.120000000000e-01 -6.177570000000e-01 -2.100000000000e-02 -7.942590000000e-01 -2.700000000000e-02 9.707610000000e-01 3.300000000000e-02 3.235870000000e-01 1.100000000000e-02 1.470850000000e-01 5.000000000000e-03 1.706186000000e+00 5.800000000000e-02 2.941700000000e-02 1.000000000000e-03 5.795149000000e+00 1.970000000000e-01 2.971117000000e+00 1.010000000000e-01 2.941700000000e-01 1.000000000000e-02 6.177570000000e-01 2.100000000000e-02 -6.765910000000e-01 -2.300000000000e-02 -6.765910000000e-01 -2.300000000000e-02 2.941700000000e-01 1.000000000000e-02 1.176680000000e-01 4.000000000000e-03 5.912817000000e+00 2.010000000000e-01 -5.295060000000e-01 -1.800000000000e-02 1.029595000000e+00 3.500000000000e-02 5.000890000000e-01 1.700000000000e-02 -3.235870000000e-01 -1.100000000000e-02 3.530040000000e-01 1.200000000000e-02 -5.295060000000e-01 -1.800000000000e-02 1.206097000000e+00 4.100000000000e-02 1.500267000000e+00 5.100000000000e-02 -1.765020000000e-01 -6.000000000000e-03 -2.353360000000e-01 -8.000000000000e-03 -5.589230000000e-01 -1.900000000000e-02 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -3.235870000000e-01 -1.100000000000e-02 4.412550000000e-01 1.500000000000e-02 4.706720000000e-01 1.600000000000e-02 -1.470850000000e-01 -5.000000000000e-03 -2.941700000000e-01 -1.000000000000e-02 -1.176680000000e-01 -4.000000000000e-03 2.941700000000e-02 1.000000000000e-03 -5.883400000000e-02 -2.000000000000e-03 8.236760000000e-01 2.800000000000e-02 -2.353360000000e-01 -8.000000000000e-03 -5.883400000000e-01 -2.000000000000e-02 1.176680000000e-01 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.647352000000e+00 -5.600000000000e-02 -1.235514000000e+00 -4.200000000000e-02 -1.470850000000e+00 -5.000000000000e-02 5.883400000000e-02 2.000000000000e-03 1.765020000000e-01 6.000000000000e-03 4.706720000000e-01 1.600000000000e-02 2.941700000000e-01 1.000000000000e-02 1.029595000000e+00 3.500000000000e-02 2.618113000000e+00 8.900000000000e-02 5.295060000000e-01 1.800000000000e-02 4.118380000000e-01 1.400000000000e-02 1.235514000000e+00 4.200000000000e-02 -2.059190000000e-01 -7.000000000000e-03 -1.853271000000e+00 -6.300000000000e-02 -1.765020000000e-01 -6.000000000000e-03 -1.882688000000e+00 -6.400000000000e-02 -5.883400000000e-01 -2.000000000000e-02 1.264931000000e+00 4.300000000000e-02 4.706720000000e-01 1.600000000000e-02 5.295060000000e+01 1.800000000000e+00 6.074610500000e+00 2.065000000000e-01 + 6 EWK_RAP 2.200000000000e+00 3.136000000000e+03 7.000000000000e+03 1.541200000000e+03 2.530650400000e+01 9.321331720000e+00 6.048100000000e-01 -4.623600000000e-02 -3.000000000000e-03 1.340844000000e+00 8.700000000000e-02 2.404272000000e+00 1.560000000000e-01 -4.007120000000e-01 -2.600000000000e-02 -3.236520000000e-01 -2.100000000000e-02 -3.853000000000e-01 -2.500000000000e-02 -2.774160000000e-01 -1.800000000000e-02 -1.155900000000e+00 -7.500000000000e-02 4.007120000000e-01 2.600000000000e-02 -4.438656000000e+00 -2.880000000000e-01 -2.774160000000e-01 -1.800000000000e-02 4.007120000000e-01 2.600000000000e-02 0.000000000000e+00 0.000000000000e+00 4.623600000000e-02 3.000000000000e-03 4.392420000000e+00 2.850000000000e-01 9.247200000000e-02 6.000000000000e-03 2.928280000000e-01 1.900000000000e-02 -3.082400000000e-02 -2.000000000000e-03 1.387080000000e-01 9.000000000000e-03 5.856560000000e-01 3.800000000000e-02 -2.928280000000e-01 -1.900000000000e-02 -1.078840000000e-01 -7.000000000000e-03 2.311800000000e-01 1.500000000000e-02 7.706000000000e-02 5.000000000000e-03 -5.394200000000e-01 -3.500000000000e-02 2.157680000000e-01 1.400000000000e-02 -2.465920000000e-01 -1.600000000000e-02 2.157680000000e-01 1.400000000000e-02 -1.387080000000e-01 -9.000000000000e-03 -1.541200000000e-02 -1.000000000000e-03 7.706000000000e-02 5.000000000000e-03 -3.082400000000e-02 -2.000000000000e-03 -1.387080000000e-01 -9.000000000000e-03 2.928280000000e-01 1.900000000000e-02 6.164800000000e-02 4.000000000000e-03 -3.082400000000e-02 -2.000000000000e-03 -4.161240000000e-01 -2.700000000000e-02 1.387080000000e-01 9.000000000000e-03 -1.232960000000e-01 -8.000000000000e-03 -4.007120000000e-01 -2.600000000000e-02 -2.311800000000e-01 -1.500000000000e-02 -1.232960000000e-01 -8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.078840000000e-01 -7.000000000000e-03 -3.544760000000e-01 -2.300000000000e-02 4.623600000000e-02 3.000000000000e-03 -2.928280000000e-01 -1.900000000000e-02 7.706000000000e-02 5.000000000000e-03 -2.928280000000e-01 -1.900000000000e-02 9.247200000000e-02 6.000000000000e-03 6.010680000000e-01 3.900000000000e-02 6.858340000000e+00 4.450000000000e-01 1.054180800000e+01 6.840000000000e-01 3.082400000000e-02 2.000000000000e-03 -3.082400000000e-01 -2.000000000000e-02 1.325432000000e+00 8.600000000000e-02 -4.007120000000e-01 -2.600000000000e-02 -6.318920000000e-01 -4.100000000000e-02 1.032604000000e+00 6.700000000000e-02 5.702440000000e-01 3.700000000000e-02 9.709560000000e-01 6.300000000000e-02 -3.853000000000e-01 -2.500000000000e-02 -3.698880000000e-01 -2.400000000000e-02 -3.390640000000e-01 -2.200000000000e-02 -5.394200000000e-01 -3.500000000000e-02 4.007120000000e-01 2.600000000000e-02 3.853000000000e-01 2.500000000000e-02 2.157680000000e-01 1.400000000000e-02 2.049796000000e+00 1.330000000000e-01 1.541200000000e-02 1.000000000000e-03 2.959104000000e+00 1.920000000000e-01 6.935400000000e-01 4.500000000000e-02 6.627160000000e-01 4.300000000000e-02 3.236520000000e-01 2.100000000000e-02 -3.698880000000e-01 -2.400000000000e-02 -1.541200000000e-01 -1.000000000000e-02 -1.541200000000e-02 -1.000000000000e-03 1.078840000000e-01 7.000000000000e-03 2.774160000000e+00 1.800000000000e-01 3.082400000000e-01 2.000000000000e-02 3.236520000000e-01 2.100000000000e-02 4.161240000000e-01 2.700000000000e-02 0.000000000000e+00 0.000000000000e+00 -1.232960000000e-01 -8.000000000000e-03 -2.465920000000e-01 -1.600000000000e-02 7.706000000000e-01 5.000000000000e-02 8.938960000000e-01 5.800000000000e-02 -2.774160000000e-01 -1.800000000000e-02 -2.003560000000e-01 -1.300000000000e-02 -3.544760000000e-01 -2.300000000000e-02 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -2.928280000000e-01 -1.900000000000e-02 1.849440000000e-01 1.200000000000e-02 3.544760000000e-01 2.300000000000e-02 -3.082400000000e-02 -2.000000000000e-03 -2.003560000000e-01 -1.300000000000e-02 -3.082400000000e-02 -2.000000000000e-03 4.623600000000e-02 3.000000000000e-03 -2.465920000000e-01 -1.600000000000e-02 5.856560000000e-01 3.800000000000e-02 -9.247200000000e-02 -6.000000000000e-03 -2.620040000000e-01 -1.700000000000e-02 1.541200000000e-02 1.000000000000e-03 6.164800000000e-02 4.000000000000e-03 -6.935400000000e-01 -4.500000000000e-02 -4.931840000000e-01 -3.200000000000e-02 -8.168360000000e-01 -5.300000000000e-02 4.623600000000e-02 3.000000000000e-03 1.387080000000e-01 9.000000000000e-03 3.544760000000e-01 2.300000000000e-02 3.390640000000e-01 2.200000000000e-02 3.698880000000e-01 2.400000000000e-02 1.587436000000e+00 1.030000000000e-01 2.465920000000e-01 1.600000000000e-02 2.157680000000e-01 1.400000000000e-02 5.085960000000e-01 3.300000000000e-02 -1.541200000000e-02 -1.000000000000e-03 -9.863680000000e-01 -6.400000000000e-02 -1.078840000000e-01 -7.000000000000e-03 -1.140488000000e+00 -7.400000000000e-02 -3.390640000000e-01 -2.200000000000e-02 9.555440000000e-01 6.200000000000e-02 5.702440000000e-01 3.700000000000e-02 2.774160000000e+01 1.800000000000e+00 4.201696500000e+00 2.726250000000e-01 + 7 EWK_RAP 1.000000000000e-01 8.281000000000e+03 7.000000000000e+03 1.352200000000e+05 2.551601400000e+02 1.393712540000e+02 1.030700000000e-01 -5.544020000000e+01 -4.100000000000e-02 6.355340000000e+01 4.700000000000e-02 2.704400000000e+01 2.000000000000e-02 5.408800000000e+00 4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -3.921380000000e+01 -2.900000000000e-02 4.056600000000e+00 3.000000000000e-03 -1.352200000000e+01 -1.000000000000e-02 1.162892000000e+02 8.600000000000e-02 -1.338678000000e+02 -9.900000000000e-02 -5.408800000000e+00 -4.000000000000e-03 1.757860000000e+01 1.300000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.761000000000e+00 5.000000000000e-03 4.056600000000e+00 3.000000000000e-03 1.352200000000e+01 1.000000000000e-02 2.704400000000e+00 2.000000000000e-03 -1.352200000000e+00 -1.000000000000e-03 8.113200000000e+00 6.000000000000e-03 -2.704400000000e+00 -2.000000000000e-03 6.761000000000e+00 5.000000000000e-03 6.761000000000e+00 5.000000000000e-03 -5.408800000000e+00 -4.000000000000e-03 -1.352200000000e+00 -1.000000000000e-03 4.056600000000e+00 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.408800000000e+00 4.000000000000e-03 -2.704400000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.352200000000e+00 1.000000000000e-03 -4.056600000000e+00 -3.000000000000e-03 4.056600000000e+00 3.000000000000e-03 1.352200000000e+00 1.000000000000e-03 -2.704400000000e+00 -2.000000000000e-03 -1.352200000000e+00 -1.000000000000e-03 1.757860000000e+01 1.300000000000e-02 -8.113200000000e+00 -6.000000000000e-03 -8.113200000000e+00 -6.000000000000e-03 -5.408800000000e+00 -4.000000000000e-03 5.408800000000e+00 4.000000000000e-03 8.113200000000e+00 6.000000000000e-03 -6.761000000000e+00 -5.000000000000e-03 -1.352200000000e+00 -1.000000000000e-03 1.352200000000e+00 1.000000000000e-03 -2.704400000000e+00 -2.000000000000e-03 2.704400000000e+00 2.000000000000e-03 -1.352200000000e+01 -1.000000000000e-02 4.056600000000e+00 3.000000000000e-03 2.704400000000e+00 2.000000000000e-03 4.056600000000e+00 3.000000000000e-03 5.273580000000e+01 3.900000000000e-02 -2.569180000000e+01 -1.900000000000e-02 3.650940000000e+01 2.700000000000e-02 -4.191820000000e+01 -3.100000000000e-02 -3.786160000000e+01 -2.800000000000e-02 2.569180000000e+01 1.900000000000e-02 -8.113200000000e+00 -6.000000000000e-03 -5.408800000000e+00 -4.000000000000e-03 6.355340000000e+01 4.700000000000e-02 1.893080000000e+01 1.400000000000e-02 1.893080000000e+01 1.400000000000e-02 -1.216980000000e+01 -9.000000000000e-03 -2.974840000000e+01 -2.200000000000e-02 -2.704400000000e+00 -2.000000000000e-03 -1.216980000000e+01 -9.000000000000e-03 1.487420000000e+01 1.100000000000e-02 -6.761000000000e+00 -5.000000000000e-03 -2.569180000000e+01 -1.900000000000e-02 9.465400000000e+00 7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.406288000000e+02 1.040000000000e-01 8.924520000000e+01 6.600000000000e-02 4.056600000000e+01 3.000000000000e-02 -2.704400000000e+00 -2.000000000000e-03 -3.650940000000e+01 -2.700000000000e-02 -1.352200000000e+01 -1.000000000000e-02 -9.465400000000e+00 -7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.663206000000e+02 1.230000000000e-01 -8.113200000000e+00 -6.000000000000e-03 1.622640000000e+01 1.200000000000e-02 2.704400000000e+01 2.000000000000e-02 2.704400000000e+00 2.000000000000e-03 1.352200000000e+00 1.000000000000e-03 -6.761000000000e+00 -5.000000000000e-03 1.893080000000e+01 1.400000000000e-02 3.515720000000e+01 2.600000000000e-02 2.839620000000e+01 2.100000000000e-02 1.216980000000e+01 9.000000000000e-03 -1.216980000000e+01 -9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 8.113200000000e+00 6.000000000000e-03 1.487420000000e+01 1.100000000000e-02 -2.704400000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.352200000000e+00 -1.000000000000e-03 -8.113200000000e+00 -6.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.408800000000e+00 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.352200000000e+00 1.000000000000e-03 -1.216980000000e+01 -9.000000000000e-03 1.352200000000e+00 1.000000000000e-03 -6.761000000000e+00 -5.000000000000e-03 -8.113200000000e+01 -6.000000000000e-02 -3.245280000000e+01 -2.400000000000e-02 -4.462260000000e+01 -3.300000000000e-02 2.704400000000e+00 2.000000000000e-03 -1.352200000000e+00 -1.000000000000e-03 6.761000000000e+00 5.000000000000e-03 1.216980000000e+01 9.000000000000e-03 4.327040000000e+01 3.200000000000e-02 5.949680000000e+01 4.400000000000e-02 4.056600000000e+01 3.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -1.081760000000e+01 -8.000000000000e-03 -2.298740000000e+01 -1.700000000000e-02 -3.650940000000e+01 -2.700000000000e-02 -1.216980000000e+01 -9.000000000000e-03 -6.490560000000e+01 -4.800000000000e-02 -3.245280000000e+01 -2.400000000000e-02 -4.056600000000e+00 -3.000000000000e-03 5.408800000000e+01 4.000000000000e-02 2.433960000000e+03 1.800000000000e+00 7.572320000000e+01 5.600000000000e-02 + 8 EWK_RAP 3.000000000000e-01 8.281000000000e+03 7.000000000000e+03 1.347400000000e+05 2.606410560000e+02 1.304916478000e+02 9.684700000000e-02 -3.772720000000e+01 -2.800000000000e-02 6.737000000000e+01 5.000000000000e-02 3.099020000000e+01 2.300000000000e-02 -2.694800000000e+00 -2.000000000000e-03 5.389600000000e+00 4.000000000000e-03 -3.772720000000e+01 -2.800000000000e-02 -1.347400000000e+00 -1.000000000000e-03 -5.389600000000e+00 -4.000000000000e-03 1.104868000000e+02 8.200000000000e-02 -1.374348000000e+02 -1.020000000000e-01 -1.077920000000e+01 -8.000000000000e-03 1.616880000000e+01 1.200000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.737000000000e+00 5.000000000000e-03 4.042200000000e+00 3.000000000000e-03 1.347400000000e+01 1.000000000000e-02 2.694800000000e+00 2.000000000000e-03 -1.347400000000e+00 -1.000000000000e-03 8.084400000000e+00 6.000000000000e-03 -4.042200000000e+00 -3.000000000000e-03 8.084400000000e+00 6.000000000000e-03 4.042200000000e+00 3.000000000000e-03 -4.042200000000e+00 -3.000000000000e-03 -1.347400000000e+00 -1.000000000000e-03 2.694800000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 4.042200000000e+00 3.000000000000e-03 -2.694800000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.347400000000e+00 1.000000000000e-03 -2.694800000000e+00 -2.000000000000e-03 2.694800000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.347400000000e+00 -1.000000000000e-03 -1.347400000000e+00 -1.000000000000e-03 1.212660000000e+01 9.000000000000e-03 -6.737000000000e+00 -5.000000000000e-03 -5.389600000000e+00 -4.000000000000e-03 -2.694800000000e+00 -2.000000000000e-03 2.694800000000e+00 2.000000000000e-03 5.389600000000e+00 4.000000000000e-03 -4.042200000000e+00 -3.000000000000e-03 -2.694800000000e+00 -2.000000000000e-03 2.694800000000e+00 2.000000000000e-03 -2.694800000000e+00 -2.000000000000e-03 2.694800000000e+00 2.000000000000e-03 -1.212660000000e+01 -9.000000000000e-03 4.042200000000e+00 3.000000000000e-03 1.347400000000e+00 1.000000000000e-03 2.694800000000e+00 2.000000000000e-03 3.368500000000e+01 2.500000000000e-02 6.737000000000e+00 5.000000000000e-03 3.637980000000e+01 2.700000000000e-02 -3.907460000000e+01 -2.900000000000e-02 -3.368500000000e+01 -2.500000000000e-02 2.694800000000e+01 2.000000000000e-02 -1.212660000000e+01 -9.000000000000e-03 -6.737000000000e+00 -5.000000000000e-03 7.949660000000e+01 5.900000000000e-02 2.155840000000e+01 1.600000000000e-02 2.021100000000e+01 1.500000000000e-02 -1.212660000000e+01 -9.000000000000e-03 -3.099020000000e+01 -2.300000000000e-02 -5.389600000000e+00 -4.000000000000e-03 -1.347400000000e+01 -1.000000000000e-02 1.482140000000e+01 1.100000000000e-02 -6.737000000000e+00 -5.000000000000e-03 -2.560060000000e+01 -1.900000000000e-02 1.347400000000e+01 1.000000000000e-02 0.000000000000e+00 0.000000000000e+00 1.360874000000e+02 1.010000000000e-01 8.353880000000e+01 6.200000000000e-02 3.907460000000e+01 2.900000000000e-02 -1.347400000000e+00 -1.000000000000e-03 -3.503240000000e+01 -2.600000000000e-02 -1.482140000000e+01 -1.100000000000e-02 -5.389600000000e+00 -4.000000000000e-03 -5.389600000000e+00 -4.000000000000e-03 1.643828000000e+02 1.220000000000e-01 -1.616880000000e+01 -1.200000000000e-02 4.042200000000e+00 3.000000000000e-03 2.155840000000e+01 1.600000000000e-02 6.737000000000e+00 5.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -8.084400000000e+00 -6.000000000000e-03 2.155840000000e+01 1.600000000000e-02 3.637980000000e+01 2.700000000000e-02 2.694800000000e+01 2.000000000000e-02 6.737000000000e+00 5.000000000000e-03 -5.389600000000e+00 -4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 5.389600000000e+00 4.000000000000e-03 1.482140000000e+01 1.100000000000e-02 -1.347400000000e+00 -1.000000000000e-03 1.347400000000e+00 1.000000000000e-03 -1.347400000000e+00 -1.000000000000e-03 -5.389600000000e+00 -4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.694800000000e+00 2.000000000000e-03 2.694800000000e+00 2.000000000000e-03 1.347400000000e+00 1.000000000000e-03 -1.077920000000e+01 -8.000000000000e-03 1.347400000000e+00 1.000000000000e-03 -6.737000000000e+00 -5.000000000000e-03 -8.084400000000e+01 -6.000000000000e-02 -3.503240000000e+01 -2.600000000000e-02 -4.581160000000e+01 -3.400000000000e-02 2.694800000000e+00 2.000000000000e-03 -1.347400000000e+00 -1.000000000000e-03 8.084400000000e+00 6.000000000000e-03 1.212660000000e+01 9.000000000000e-03 4.446420000000e+01 3.300000000000e-02 6.063300000000e+01 4.500000000000e-02 4.042200000000e+01 3.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -9.431800000000e+00 -7.000000000000e-03 -2.021100000000e+01 -1.500000000000e-02 -3.907460000000e+01 -2.900000000000e-02 -1.212660000000e+01 -9.000000000000e-03 -6.602260000000e+01 -4.900000000000e-02 -3.368500000000e+01 -2.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 5.120120000000e+01 3.800000000000e-02 2.425320000000e+03 1.800000000000e+00 7.949660000000e+01 5.900000000000e-02 + 9 EWK_RAP 5.000000000000e-01 8.281000000000e+03 7.000000000000e+03 1.342400000000e+05 2.614860960000e+02 1.228819536000e+02 9.153900000000e-02 -4.295680000000e+01 -3.200000000000e-02 6.980480000000e+01 5.200000000000e-02 3.087520000000e+01 2.300000000000e-02 5.369600000000e+00 4.000000000000e-03 5.369600000000e+00 4.000000000000e-03 -3.624480000000e+01 -2.700000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -6.712000000000e+00 -5.000000000000e-03 1.154464000000e+02 8.600000000000e-02 -1.369248000000e+02 -1.020000000000e-01 -1.073920000000e+01 -8.000000000000e-03 1.610880000000e+01 1.200000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.712000000000e+00 5.000000000000e-03 4.027200000000e+00 3.000000000000e-03 1.342400000000e+01 1.000000000000e-02 2.684800000000e+00 2.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 8.054400000000e+00 6.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.369600000000e+00 4.000000000000e-03 5.369600000000e+00 4.000000000000e-03 -2.684800000000e+00 -2.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 4.027200000000e+00 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.684800000000e+00 2.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 1.342400000000e+00 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -2.684800000000e+00 -2.000000000000e-03 2.684800000000e+00 2.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.073920000000e+01 8.000000000000e-03 -6.712000000000e+00 -5.000000000000e-03 -4.027200000000e+00 -3.000000000000e-03 -5.369600000000e+00 -4.000000000000e-03 1.342400000000e+00 1.000000000000e-03 4.027200000000e+00 3.000000000000e-03 -5.369600000000e+00 -4.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 2.684800000000e+00 2.000000000000e-03 -2.684800000000e+00 -2.000000000000e-03 1.342400000000e+00 1.000000000000e-03 -1.208160000000e+01 -9.000000000000e-03 4.027200000000e+00 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.684800000000e+00 2.000000000000e-03 4.295680000000e+01 3.200000000000e-02 -5.369600000000e+00 -4.000000000000e-03 3.490240000000e+01 2.600000000000e-02 -4.027200000000e+01 -3.000000000000e-02 -4.161440000000e+01 -3.100000000000e-02 2.819040000000e+01 2.100000000000e-02 -9.396800000000e+00 -7.000000000000e-03 -9.396800000000e+00 -7.000000000000e-03 6.577760000000e+01 4.900000000000e-02 1.745120000000e+01 1.300000000000e-02 2.013600000000e+01 1.500000000000e-02 -1.073920000000e+01 -8.000000000000e-03 -3.356000000000e+01 -2.500000000000e-02 -2.684800000000e+00 -2.000000000000e-03 -1.342400000000e+01 -1.000000000000e-02 1.476640000000e+01 1.100000000000e-02 -5.369600000000e+00 -4.000000000000e-03 -2.953280000000e+01 -2.200000000000e-02 9.396800000000e+00 7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.382672000000e+02 1.030000000000e-01 7.785920000000e+01 5.800000000000e-02 2.953280000000e+01 2.200000000000e-02 -2.684800000000e+00 -2.000000000000e-03 -3.356000000000e+01 -2.500000000000e-02 -1.745120000000e+01 -1.300000000000e-02 -4.027200000000e+00 -3.000000000000e-03 -1.073920000000e+01 -8.000000000000e-03 1.691424000000e+02 1.260000000000e-01 -2.550560000000e+01 -1.900000000000e-02 4.027200000000e+00 3.000000000000e-03 1.610880000000e+01 1.200000000000e-02 1.208160000000e+01 9.000000000000e-03 6.712000000000e+00 5.000000000000e-03 -8.054400000000e+00 -6.000000000000e-03 2.147840000000e+01 1.600000000000e-02 4.027200000000e+01 3.000000000000e-02 2.013600000000e+01 1.500000000000e-02 -2.684800000000e+00 -2.000000000000e-03 4.027200000000e+00 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 6.712000000000e+00 5.000000000000e-03 1.476640000000e+01 1.100000000000e-02 -1.342400000000e+00 -1.000000000000e-03 1.342400000000e+00 1.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 -5.369600000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.369600000000e+00 4.000000000000e-03 2.684800000000e+00 2.000000000000e-03 1.342400000000e+00 1.000000000000e-03 -1.073920000000e+01 -8.000000000000e-03 1.342400000000e+00 1.000000000000e-03 -6.712000000000e+00 -5.000000000000e-03 -7.785920000000e+01 -5.800000000000e-02 -3.356000000000e+01 -2.500000000000e-02 -4.295680000000e+01 -3.200000000000e-02 2.684800000000e+00 2.000000000000e-03 -1.342400000000e+00 -1.000000000000e-03 6.712000000000e+00 5.000000000000e-03 1.073920000000e+01 8.000000000000e-03 4.161440000000e+01 3.100000000000e-02 5.772320000000e+01 4.300000000000e-02 3.892960000000e+01 2.900000000000e-02 0.000000000000e+00 0.000000000000e+00 -1.073920000000e+01 -8.000000000000e-03 -1.879360000000e+01 -1.400000000000e-02 -3.892960000000e+01 -2.900000000000e-02 -1.208160000000e+01 -9.000000000000e-03 -6.309280000000e+01 -4.700000000000e-02 -3.356000000000e+01 -2.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 4.966880000000e+01 3.700000000000e-02 2.416320000000e+03 1.800000000000e+00 8.054400000000e+01 6.000000000000e-02 + 10 EWK_RAP 7.000000000000e-01 8.281000000000e+03 7.000000000000e+03 1.330800000000e+05 2.653615200000e+02 1.256514744000e+02 9.441800000000e-02 -3.726240000000e+01 -2.800000000000e-02 7.452480000000e+01 5.600000000000e-02 2.927760000000e+01 2.200000000000e-02 -6.654000000000e+00 -5.000000000000e-03 -1.197720000000e+01 -9.000000000000e-03 -4.258560000000e+01 -3.200000000000e-02 -6.654000000000e+00 -5.000000000000e-03 -1.330800000000e+01 -1.000000000000e-02 1.104564000000e+02 8.300000000000e-02 -1.384032000000e+02 -1.040000000000e-01 -1.863120000000e+01 -1.400000000000e-02 1.463880000000e+01 1.100000000000e-02 -0.000000000000e+00 -0.000000000000e+00 6.654000000000e+00 5.000000000000e-03 3.992400000000e+00 3.000000000000e-03 1.330800000000e+01 1.000000000000e-02 2.661600000000e+00 2.000000000000e-03 -2.661600000000e+00 -2.000000000000e-03 7.984800000000e+00 6.000000000000e-03 1.330800000000e+00 1.000000000000e-03 3.992400000000e+00 3.000000000000e-03 6.654000000000e+00 5.000000000000e-03 -2.661600000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 3.992400000000e+00 3.000000000000e-03 -1.330800000000e+00 -1.000000000000e-03 2.661600000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -1.330800000000e+00 -1.000000000000e-03 1.330800000000e+00 1.000000000000e-03 -1.330800000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.330800000000e+00 1.000000000000e-03 1.064640000000e+01 8.000000000000e-03 -7.984800000000e+00 -6.000000000000e-03 -5.323200000000e+00 -4.000000000000e-03 -5.323200000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 3.992400000000e+00 3.000000000000e-03 -5.323200000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.661600000000e+00 2.000000000000e-03 -3.992400000000e+00 -3.000000000000e-03 -1.330800000000e+00 -1.000000000000e-03 -1.197720000000e+01 -9.000000000000e-03 3.992400000000e+00 3.000000000000e-03 -1.330800000000e+00 -1.000000000000e-03 3.992400000000e+00 3.000000000000e-03 2.661600000000e+01 2.000000000000e-02 -1.463880000000e+01 -1.100000000000e-02 3.060840000000e+01 2.300000000000e-02 -3.460080000000e+01 -2.600000000000e-02 -3.327000000000e+01 -2.500000000000e-02 3.060840000000e+01 2.300000000000e-02 -9.315600000000e+00 -7.000000000000e-03 -9.315600000000e+00 -7.000000000000e-03 6.654000000000e+01 5.000000000000e-02 1.996200000000e+01 1.500000000000e-02 2.528520000000e+01 1.900000000000e-02 -1.197720000000e+01 -9.000000000000e-03 -2.927760000000e+01 -2.200000000000e-02 -3.992400000000e+00 -3.000000000000e-03 -1.463880000000e+01 -1.100000000000e-02 1.596960000000e+01 1.200000000000e-02 -3.992400000000e+00 -3.000000000000e-03 -2.395440000000e+01 -1.800000000000e-02 1.330800000000e+01 1.000000000000e-02 0.000000000000e+00 0.000000000000e+00 1.397340000000e+02 1.050000000000e-01 7.319400000000e+01 5.500000000000e-02 1.730040000000e+01 1.300000000000e-02 -2.661600000000e+00 -2.000000000000e-03 -2.927760000000e+01 -2.200000000000e-02 -1.064640000000e+01 -8.000000000000e-03 -1.330800000000e+00 -1.000000000000e-03 -5.323200000000e+00 -4.000000000000e-03 1.743348000000e+02 1.310000000000e-01 -4.125480000000e+01 -3.100000000000e-02 3.992400000000e+00 3.000000000000e-03 9.315600000000e+00 7.000000000000e-03 1.330800000000e+01 1.000000000000e-02 7.984800000000e+00 6.000000000000e-03 -9.315600000000e+00 -7.000000000000e-03 2.395440000000e+01 1.800000000000e-02 4.125480000000e+01 3.100000000000e-02 1.197720000000e+01 9.000000000000e-03 -1.330800000000e+01 -1.000000000000e-02 7.984800000000e+00 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 1.330800000000e+00 1.000000000000e-03 1.463880000000e+01 1.100000000000e-02 -2.661600000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.330800000000e+00 -1.000000000000e-03 -5.323200000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.330800000000e+00 1.000000000000e-03 2.661600000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.064640000000e+01 -8.000000000000e-03 2.661600000000e+00 2.000000000000e-03 -6.654000000000e+00 -5.000000000000e-03 -7.851720000000e+01 -5.900000000000e-02 -3.327000000000e+01 -2.500000000000e-02 -4.258560000000e+01 -3.200000000000e-02 2.661600000000e+00 2.000000000000e-03 -1.330800000000e+00 -1.000000000000e-03 7.984800000000e+00 6.000000000000e-03 1.197720000000e+01 9.000000000000e-03 4.258560000000e+01 3.200000000000e-02 5.855520000000e+01 4.400000000000e-02 3.992400000000e+01 3.000000000000e-02 1.330800000000e+00 1.000000000000e-03 -1.064640000000e+01 -8.000000000000e-03 -1.996200000000e+01 -1.500000000000e-02 -3.726240000000e+01 -2.800000000000e-02 -1.197720000000e+01 -9.000000000000e-03 -5.988600000000e+01 -4.500000000000e-02 -3.460080000000e+01 -2.600000000000e-02 -2.661600000000e+00 -2.000000000000e-03 4.923960000000e+01 3.700000000000e-02 2.395440000000e+03 1.800000000000e+00 7.851720000000e+01 5.900000000000e-02 + 11 EWK_RAP 9.000000000000e-01 8.281000000000e+03 7.000000000000e+03 1.324800000000e+05 2.613300480000e+02 1.328774400000e+02 1.003000000000e-01 -1.192320000000e+01 -9.000000000000e-03 8.876160000000e+01 6.700000000000e-02 2.649600000000e+01 2.000000000000e-02 -1.192320000000e+01 -9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.974400000000e+01 -3.000000000000e-02 9.273600000000e+00 7.000000000000e-03 2.517120000000e+01 1.900000000000e-02 1.073088000000e+02 8.100000000000e-02 -1.430784000000e+02 -1.080000000000e-01 -2.384640000000e+01 -1.800000000000e-02 1.324800000000e+01 1.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 5.299200000000e+00 4.000000000000e-03 2.649600000000e+00 2.000000000000e-03 1.324800000000e+01 1.000000000000e-02 2.649600000000e+00 2.000000000000e-03 -2.649600000000e+00 -2.000000000000e-03 7.948800000000e+00 6.000000000000e-03 1.324800000000e+00 1.000000000000e-03 2.649600000000e+00 2.000000000000e-03 6.624000000000e+00 5.000000000000e-03 -3.974400000000e+00 -3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.649600000000e+00 2.000000000000e-03 -1.324800000000e+00 -1.000000000000e-03 -1.324800000000e+00 -1.000000000000e-03 1.324800000000e+00 1.000000000000e-03 2.649600000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.649600000000e+00 -2.000000000000e-03 1.324800000000e+00 1.000000000000e-03 -2.649600000000e+00 -2.000000000000e-03 1.324800000000e+00 1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.192320000000e+01 9.000000000000e-03 -3.974400000000e+00 -3.000000000000e-03 -2.649600000000e+00 -2.000000000000e-03 1.324800000000e+00 1.000000000000e-03 -1.324800000000e+00 -1.000000000000e-03 1.324800000000e+00 1.000000000000e-03 -3.974400000000e+00 -3.000000000000e-03 -1.324800000000e+00 -1.000000000000e-03 1.324800000000e+00 1.000000000000e-03 -7.948800000000e+00 -6.000000000000e-03 -1.324800000000e+00 -1.000000000000e-03 -1.324800000000e+01 -1.000000000000e-02 3.974400000000e+00 3.000000000000e-03 -6.624000000000e+00 -5.000000000000e-03 2.649600000000e+00 2.000000000000e-03 4.636800000000e+01 3.500000000000e-02 -2.384640000000e+01 -1.800000000000e-02 3.576960000000e+01 2.700000000000e-02 -3.444480000000e+01 -2.600000000000e-02 -2.517120000000e+01 -1.900000000000e-02 2.782080000000e+01 2.100000000000e-02 -9.273600000000e+00 -7.000000000000e-03 -1.059840000000e+01 -8.000000000000e-03 5.961600000000e+01 4.500000000000e-02 1.589760000000e+01 1.200000000000e-02 2.119680000000e+01 1.600000000000e-02 -1.192320000000e+01 -9.000000000000e-03 -2.649600000000e+01 -2.000000000000e-02 -1.324800000000e+00 -1.000000000000e-03 -1.192320000000e+01 -9.000000000000e-03 1.192320000000e+01 9.000000000000e-03 -2.649600000000e+00 -2.000000000000e-03 -1.059840000000e+01 -8.000000000000e-03 9.273600000000e+00 7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.430784000000e+02 1.080000000000e-01 5.961600000000e+01 4.500000000000e-02 9.273600000000e+00 7.000000000000e-03 3.974400000000e+00 3.000000000000e-03 -2.384640000000e+01 -1.800000000000e-02 -9.273600000000e+00 -7.000000000000e-03 6.624000000000e+00 5.000000000000e-03 7.948800000000e+00 6.000000000000e-03 1.642752000000e+02 1.240000000000e-01 -4.636800000000e+01 -3.500000000000e-02 -5.299200000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.589760000000e+01 1.200000000000e-02 5.299200000000e+00 4.000000000000e-03 -1.457280000000e+01 -1.100000000000e-02 2.782080000000e+01 2.100000000000e-02 4.106880000000e+01 3.100000000000e-02 2.649600000000e+00 2.000000000000e-03 -1.589760000000e+01 -1.200000000000e-02 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -3.974400000000e+00 -3.000000000000e-03 1.324800000000e+01 1.000000000000e-02 -1.324800000000e+00 -1.000000000000e-03 -1.324800000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.649600000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.649600000000e+00 -2.000000000000e-03 2.649600000000e+00 2.000000000000e-03 -2.649600000000e+00 -2.000000000000e-03 -9.273600000000e+00 -7.000000000000e-03 1.324800000000e+00 1.000000000000e-03 -5.299200000000e+00 -4.000000000000e-03 -7.551360000000e+01 -5.700000000000e-02 -3.576960000000e+01 -2.700000000000e-02 -4.239360000000e+01 -3.200000000000e-02 0.000000000000e+00 0.000000000000e+00 -2.649600000000e+00 -2.000000000000e-03 7.948800000000e+00 6.000000000000e-03 7.948800000000e+00 6.000000000000e-03 4.239360000000e+01 3.200000000000e-02 5.696640000000e+01 4.300000000000e-02 3.576960000000e+01 2.700000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -7.948800000000e+00 -6.000000000000e-03 -1.589760000000e+01 -1.200000000000e-02 -3.576960000000e+01 -2.700000000000e-02 -1.192320000000e+01 -9.000000000000e-03 -5.299200000000e+01 -4.000000000000e-02 -3.312000000000e+01 -2.500000000000e-02 -3.974400000000e+00 -3.000000000000e-03 3.312000000000e+01 2.500000000000e-02 2.384640000000e+03 1.800000000000e+00 8.081280000000e+01 6.100000000000e-02 + 12 EWK_RAP 1.100000000000e+00 8.281000000000e+03 7.000000000000e+03 1.290600000000e+05 2.637341100000e+02 1.396558260000e+02 1.082100000000e-01 -1.161540000000e+01 -9.000000000000e-03 9.163260000000e+01 7.100000000000e-02 1.548720000000e+01 1.200000000000e-02 3.871800000000e+00 3.000000000000e-03 -3.871800000000e+00 -3.000000000000e-03 -4.258980000000e+01 -3.300000000000e-02 3.871800000000e+00 3.000000000000e-03 3.871800000000e+01 3.000000000000e-02 1.019574000000e+02 7.900000000000e-02 -1.406754000000e+02 -1.090000000000e-01 -3.097440000000e+01 -2.400000000000e-02 1.032480000000e+01 8.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.162400000000e+00 4.000000000000e-03 2.581200000000e+00 2.000000000000e-03 1.161540000000e+01 9.000000000000e-03 2.581200000000e+00 2.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 7.743600000000e+00 6.000000000000e-03 5.162400000000e+00 4.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 7.743600000000e+00 6.000000000000e-03 -3.871800000000e+00 -3.000000000000e-03 1.290600000000e+00 1.000000000000e-03 1.290600000000e+00 1.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.581200000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -2.581200000000e+00 -2.000000000000e-03 -2.581200000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.871800000000e+00 -3.000000000000e-03 1.290600000000e+00 1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 9.034200000000e+00 7.000000000000e-03 -3.871800000000e+00 -3.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 2.581200000000e+00 2.000000000000e-03 -2.581200000000e+00 -2.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 -3.871800000000e+00 -3.000000000000e-03 -2.581200000000e+00 -2.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 -9.034200000000e+00 -7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.290600000000e+01 -1.000000000000e-02 3.871800000000e+00 3.000000000000e-03 -6.453000000000e+00 -5.000000000000e-03 2.581200000000e+00 2.000000000000e-03 4.388040000000e+01 3.400000000000e-02 -4.517100000000e+01 -3.500000000000e-02 2.968380000000e+01 2.300000000000e-02 -2.968380000000e+01 -2.300000000000e-02 -2.323080000000e+01 -1.800000000000e-02 2.581200000000e+01 2.000000000000e-02 -7.743600000000e+00 -6.000000000000e-03 -1.032480000000e+01 -8.000000000000e-03 5.033340000000e+01 3.900000000000e-02 1.419660000000e+01 1.100000000000e-02 2.194020000000e+01 1.700000000000e-02 -9.034200000000e+00 -7.000000000000e-03 -1.935900000000e+01 -1.500000000000e-02 1.290600000000e+00 1.000000000000e-03 -1.032480000000e+01 -8.000000000000e-03 1.419660000000e+01 1.100000000000e-02 -5.162400000000e+00 -4.000000000000e-03 -3.871800000000e+00 -3.000000000000e-03 1.161540000000e+01 9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.445472000000e+02 1.120000000000e-01 4.646160000000e+01 3.600000000000e-02 6.453000000000e+00 5.000000000000e-03 6.453000000000e+00 5.000000000000e-03 -1.806840000000e+01 -1.400000000000e-02 -1.032480000000e+01 -8.000000000000e-03 1.032480000000e+01 8.000000000000e-03 6.453000000000e+00 5.000000000000e-03 1.561626000000e+02 1.210000000000e-01 -4.258980000000e+01 -3.300000000000e-02 -7.743600000000e+00 -6.000000000000e-03 -1.290600000000e+00 -1.000000000000e-03 1.548720000000e+01 1.200000000000e-02 9.034200000000e+00 7.000000000000e-03 -1.677780000000e+01 -1.300000000000e-02 2.968380000000e+01 2.300000000000e-02 3.871800000000e+01 3.000000000000e-02 -7.743600000000e+00 -6.000000000000e-03 -6.453000000000e+00 -5.000000000000e-03 -1.419660000000e+01 -1.100000000000e-02 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -5.162400000000e+00 -4.000000000000e-03 1.290600000000e+01 1.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -2.581200000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.581200000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -3.871800000000e+00 -3.000000000000e-03 2.581200000000e+00 2.000000000000e-03 -3.871800000000e+00 -3.000000000000e-03 -9.034200000000e+00 -7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -5.162400000000e+00 -4.000000000000e-03 -7.227360000000e+01 -5.600000000000e-02 -3.355560000000e+01 -2.600000000000e-02 -4.388040000000e+01 -3.400000000000e-02 0.000000000000e+00 0.000000000000e+00 -2.581200000000e+00 -2.000000000000e-03 9.034200000000e+00 7.000000000000e-03 9.034200000000e+00 7.000000000000e-03 4.129920000000e+01 3.200000000000e-02 5.936760000000e+01 4.600000000000e-02 3.484620000000e+01 2.700000000000e-02 -1.290600000000e+00 -1.000000000000e-03 -9.034200000000e+00 -7.000000000000e-03 -1.419660000000e+01 -1.100000000000e-02 -3.613680000000e+01 -2.800000000000e-02 -1.161540000000e+01 -9.000000000000e-03 -5.162400000000e+01 -4.000000000000e-02 -3.226500000000e+01 -2.500000000000e-02 -3.871800000000e+00 -3.000000000000e-03 3.097440000000e+01 2.400000000000e-02 2.323080000000e+03 1.800000000000e+00 7.743600000000e+01 6.000000000000e-02 + 13 EWK_RAP 1.300000000000e+00 8.281000000000e+03 7.000000000000e+03 1.199200000000e+05 2.506447920000e+02 1.128675048000e+02 9.411900000000e-02 -1.199200000000e+01 -1.000000000000e-02 9.113920000000e+01 7.600000000000e-02 1.199200000000e+00 1.000000000000e-03 1.199200000000e+00 1.000000000000e-03 7.195200000000e+00 6.000000000000e-03 -4.676880000000e+01 -3.900000000000e-02 -5.996000000000e+00 -5.000000000000e-03 -4.197200000000e+01 -3.500000000000e-02 8.874080000000e+01 7.400000000000e-02 -1.319120000000e+02 -1.100000000000e-01 -3.837440000000e+01 -3.200000000000e-02 8.394400000000e+00 7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 5.996000000000e+00 5.000000000000e-03 3.597600000000e+00 3.000000000000e-03 1.079280000000e+01 9.000000000000e-03 2.398400000000e+00 2.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 7.195200000000e+00 6.000000000000e-03 1.439040000000e+01 1.200000000000e-02 -7.195200000000e+00 -6.000000000000e-03 9.593600000000e+00 8.000000000000e-03 -3.597600000000e+00 -3.000000000000e-03 2.398400000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.398400000000e+00 -2.000000000000e-03 1.199200000000e+00 1.000000000000e-03 3.597600000000e+00 3.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 -2.398400000000e+00 -2.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 -4.796800000000e+00 -4.000000000000e-03 3.597600000000e+00 3.000000000000e-03 2.398400000000e+00 2.000000000000e-03 5.996000000000e+00 5.000000000000e-03 -7.195200000000e+00 -6.000000000000e-03 -2.398400000000e+00 -2.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 -3.597600000000e+00 -3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.597600000000e+00 -3.000000000000e-03 -3.597600000000e+00 -3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -9.593600000000e+00 -8.000000000000e-03 1.199200000000e+00 1.000000000000e-03 -1.079280000000e+01 -9.000000000000e-03 2.398400000000e+00 2.000000000000e-03 -4.796800000000e+00 -4.000000000000e-03 5.996000000000e+00 5.000000000000e-03 -2.758160000000e+01 -2.300000000000e-02 3.117920000000e+01 2.600000000000e-02 3.597600000000e+01 3.000000000000e-02 -2.998000000000e+01 -2.500000000000e-02 -1.558960000000e+01 -1.300000000000e-02 2.278480000000e+01 1.900000000000e-02 -8.394400000000e+00 -7.000000000000e-03 -9.593600000000e+00 -8.000000000000e-03 4.197200000000e+01 3.500000000000e-02 1.439040000000e+01 1.200000000000e-02 1.918720000000e+01 1.600000000000e-02 -4.796800000000e+00 -4.000000000000e-03 -9.593600000000e+00 -8.000000000000e-03 -2.398400000000e+00 -2.000000000000e-03 -1.199200000000e+01 -1.000000000000e-02 1.079280000000e+01 9.000000000000e-03 -3.597600000000e+00 -3.000000000000e-03 5.996000000000e+00 5.000000000000e-03 2.398400000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.439040000000e+02 1.200000000000e-01 4.556960000000e+01 3.800000000000e-02 7.195200000000e+00 6.000000000000e-03 2.398400000000e+00 2.000000000000e-03 -1.079280000000e+01 -9.000000000000e-03 -4.796800000000e+00 -4.000000000000e-03 3.597600000000e+00 3.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 1.594936000000e+02 1.330000000000e-01 -2.998000000000e+01 -2.500000000000e-02 -8.394400000000e+00 -7.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.319120000000e+01 1.100000000000e-02 5.996000000000e+00 5.000000000000e-03 -1.439040000000e+01 -1.200000000000e-02 3.357760000000e+01 2.800000000000e-02 3.357760000000e+01 2.800000000000e-02 -7.195200000000e+00 -6.000000000000e-03 7.195200000000e+00 6.000000000000e-03 -9.593600000000e+00 -8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -4.796800000000e+00 -4.000000000000e-03 1.319120000000e+01 1.100000000000e-02 1.199200000000e+00 1.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 1.199200000000e+00 1.000000000000e-03 -4.796800000000e+00 -4.000000000000e-03 7.195200000000e+00 6.000000000000e-03 -2.398400000000e+00 -2.000000000000e-03 -8.394400000000e+00 -7.000000000000e-03 1.199200000000e+00 1.000000000000e-03 -4.796800000000e+00 -4.000000000000e-03 -7.075280000000e+01 -5.900000000000e-02 -3.117920000000e+01 -2.600000000000e-02 -4.317120000000e+01 -3.600000000000e-02 1.199200000000e+00 1.000000000000e-03 -1.199200000000e+00 -1.000000000000e-03 1.079280000000e+01 9.000000000000e-03 1.079280000000e+01 9.000000000000e-03 3.957360000000e+01 3.300000000000e-02 6.235840000000e+01 5.200000000000e-02 3.597600000000e+01 3.000000000000e-02 0.000000000000e+00 0.000000000000e+00 -8.394400000000e+00 -7.000000000000e-03 -1.079280000000e+01 -9.000000000000e-03 -3.837440000000e+01 -3.200000000000e-02 -1.199200000000e+01 -1.000000000000e-02 -5.876080000000e+01 -4.900000000000e-02 -3.357760000000e+01 -2.800000000000e-02 4.796800000000e+00 4.000000000000e-03 3.597600000000e+01 3.000000000000e-02 2.158560000000e+03 1.800000000000e+00 7.674880000000e+01 6.400000000000e-02 + 14 EWK_RAP 1.500000000000e+00 8.281000000000e+03 7.000000000000e+03 1.073200000000e+05 2.433373680000e+02 1.330446040000e+02 1.239700000000e-01 -6.439200000000e+00 -6.000000000000e-03 8.156320000000e+01 7.600000000000e-02 -1.502480000000e+01 -1.400000000000e-02 -1.073200000000e+00 -1.000000000000e-03 6.439200000000e+00 6.000000000000e-03 -3.648880000000e+01 -3.400000000000e-02 0.000000000000e+00 0.000000000000e+00 2.468360000000e+01 2.300000000000e-02 7.834360000000e+01 7.300000000000e-02 -1.191252000000e+02 -1.110000000000e-01 -4.078160000000e+01 -3.800000000000e-02 6.439200000000e+00 6.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 4.292800000000e+00 4.000000000000e-03 3.219600000000e+00 3.000000000000e-03 9.658800000000e+00 9.000000000000e-03 2.146400000000e+00 2.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 4.292800000000e+00 4.000000000000e-03 1.287840000000e+01 1.200000000000e-02 -7.512400000000e+00 -7.000000000000e-03 9.658800000000e+00 9.000000000000e-03 -3.219600000000e+00 -3.000000000000e-03 2.146400000000e+00 2.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 -3.219600000000e+00 -3.000000000000e-03 -2.146400000000e+00 -2.000000000000e-03 4.292800000000e+00 4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -3.219600000000e+00 -3.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 -2.146400000000e+00 -2.000000000000e-03 -5.366000000000e+00 -5.000000000000e-03 4.292800000000e+00 4.000000000000e-03 1.073200000000e+00 1.000000000000e-03 7.512400000000e+00 7.000000000000e-03 -4.292800000000e+00 -4.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 1.073200000000e+00 1.000000000000e-03 -3.219600000000e+00 -3.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 -5.366000000000e+00 -5.000000000000e-03 -2.146400000000e+00 -2.000000000000e-03 -3.219600000000e+00 -3.000000000000e-03 -7.512400000000e+00 -7.000000000000e-03 1.073200000000e+00 1.000000000000e-03 -1.073200000000e+01 -1.000000000000e-02 1.073200000000e+00 1.000000000000e-03 -5.366000000000e+00 -5.000000000000e-03 2.146400000000e+00 2.000000000000e-03 -1.287840000000e+01 -1.200000000000e-02 -7.834360000000e+01 -7.300000000000e-02 2.575680000000e+01 2.400000000000e-02 -2.253720000000e+01 -2.100000000000e-02 -8.585600000000e+00 -8.000000000000e-03 1.824440000000e+01 1.700000000000e-02 -5.366000000000e+00 -5.000000000000e-03 -9.658800000000e+00 -9.000000000000e-03 3.434240000000e+01 3.200000000000e-02 1.073200000000e+00 1.000000000000e-03 1.717120000000e+01 1.600000000000e-02 -4.292800000000e+00 -4.000000000000e-03 2.146400000000e+00 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.073200000000e+01 -1.000000000000e-02 2.146400000000e+00 2.000000000000e-03 -7.512400000000e+00 -7.000000000000e-03 -9.658800000000e+00 -9.000000000000e-03 8.585600000000e+00 8.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.298572000000e+02 1.210000000000e-01 2.253720000000e+01 2.100000000000e-02 8.585600000000e+00 8.000000000000e-03 4.292800000000e+00 4.000000000000e-03 -4.292800000000e+00 -4.000000000000e-03 4.292800000000e+00 4.000000000000e-03 6.439200000000e+00 6.000000000000e-03 1.073200000000e+00 1.000000000000e-03 1.352232000000e+02 1.260000000000e-01 -1.609800000000e+01 -1.500000000000e-02 3.219600000000e+00 3.000000000000e-03 2.146400000000e+00 2.000000000000e-03 1.609800000000e+01 1.500000000000e-02 1.073200000000e+00 1.000000000000e-03 -1.824440000000e+01 -1.700000000000e-02 3.541560000000e+01 3.300000000000e-02 2.790320000000e+01 2.600000000000e-02 -9.658800000000e+00 -9.000000000000e-03 1.502480000000e+01 1.400000000000e-02 2.146400000000e+00 2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -4.292800000000e+00 -4.000000000000e-03 1.073200000000e+01 1.000000000000e-02 1.073200000000e+00 1.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 -2.146400000000e+00 -2.000000000000e-03 1.073200000000e+00 1.000000000000e-03 -4.292800000000e+00 -4.000000000000e-03 5.366000000000e+00 5.000000000000e-03 -2.146400000000e+00 -2.000000000000e-03 -7.512400000000e+00 -7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -4.292800000000e+00 -4.000000000000e-03 -6.331880000000e+01 -5.900000000000e-02 -2.897640000000e+01 -2.700000000000e-02 -3.863520000000e+01 -3.600000000000e-02 1.073200000000e+00 1.000000000000e-03 -1.073200000000e+00 -1.000000000000e-03 9.658800000000e+00 9.000000000000e-03 9.658800000000e+00 9.000000000000e-03 3.434240000000e+01 3.200000000000e-02 5.366000000000e+01 5.000000000000e-02 3.004960000000e+01 2.800000000000e-02 -1.073200000000e+00 -1.000000000000e-03 -7.512400000000e+00 -7.000000000000e-03 -1.180520000000e+01 -1.100000000000e-02 -3.219600000000e+01 -3.000000000000e-02 -9.658800000000e+00 -9.000000000000e-03 -4.936720000000e+01 -4.600000000000e-02 -2.790320000000e+01 -2.600000000000e-02 2.146400000000e+00 2.000000000000e-03 3.219600000000e+01 3.000000000000e-02 1.931760000000e+03 1.800000000000e+00 7.941680000000e+01 7.400000000000e-02 + 15 EWK_RAP 1.700000000000e+00 8.281000000000e+03 7.000000000000e+03 8.986600000000e+04 2.230384254000e+02 1.016474326000e+02 1.131100000000e-01 -0.000000000000e+00 -0.000000000000e+00 8.087940000000e+01 9.000000000000e-02 -3.145310000000e+01 -3.500000000000e-02 -2.695980000000e+00 -3.000000000000e-03 -1.437856000000e+01 -1.600000000000e-02 -3.504774000000e+01 -3.900000000000e-02 2.695980000000e+00 3.000000000000e-03 -1.437856000000e+01 -1.600000000000e-02 6.380486000000e+01 7.100000000000e-02 -1.051432200000e+02 -1.170000000000e-01 -4.403434000000e+01 -4.900000000000e-02 4.493300000000e+00 5.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 3.594640000000e+00 4.000000000000e-03 2.695980000000e+00 3.000000000000e-03 8.087940000000e+00 9.000000000000e-03 1.797320000000e+00 2.000000000000e-03 -8.986600000000e-01 -1.000000000000e-03 1.797320000000e+00 2.000000000000e-03 1.168258000000e+01 1.300000000000e-02 -7.189280000000e+00 -8.000000000000e-03 8.087940000000e+00 9.000000000000e-03 8.986600000000e-01 1.000000000000e-03 3.594640000000e+00 4.000000000000e-03 -3.594640000000e+00 -4.000000000000e-03 -8.986600000000e-01 -1.000000000000e-03 -4.493300000000e+00 -5.000000000000e-03 5.391960000000e+00 6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.797320000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.797320000000e+00 -2.000000000000e-03 -7.189280000000e+00 -8.000000000000e-03 5.391960000000e+00 6.000000000000e-03 8.986600000000e-01 1.000000000000e-03 5.391960000000e+00 6.000000000000e-03 -3.594640000000e+00 -4.000000000000e-03 -1.797320000000e+00 -2.000000000000e-03 1.797320000000e+00 2.000000000000e-03 -2.695980000000e+00 -3.000000000000e-03 -1.797320000000e+00 -2.000000000000e-03 -1.797320000000e+00 -2.000000000000e-03 -1.797320000000e+00 -2.000000000000e-03 -8.986600000000e-01 -1.000000000000e-03 -4.493300000000e+00 -5.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -8.986600000000e+00 -1.000000000000e-02 1.797320000000e+00 2.000000000000e-03 -4.493300000000e+00 -5.000000000000e-03 2.695980000000e+00 3.000000000000e-03 -1.716440600000e+02 -1.910000000000e-01 -3.594640000000e+00 -4.000000000000e-03 1.887186000000e+01 2.100000000000e-02 -2.246650000000e+01 -2.500000000000e-02 -1.168258000000e+01 -1.300000000000e-02 1.258124000000e+01 1.400000000000e-02 -8.986600000000e-01 -1.000000000000e-03 -5.391960000000e+00 -6.000000000000e-03 2.516248000000e+01 2.800000000000e-02 5.391960000000e+00 6.000000000000e-03 1.168258000000e+01 1.300000000000e-02 -4.493300000000e+00 -5.000000000000e-03 3.594640000000e+00 4.000000000000e-03 1.797320000000e+00 2.000000000000e-03 -1.078392000000e+01 -1.200000000000e-02 5.391960000000e+00 6.000000000000e-03 -6.290620000000e+00 -7.000000000000e-03 -8.986600000000e+00 -1.000000000000e-02 -3.594640000000e+00 -4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 1.105351800000e+02 1.230000000000e-01 2.336516000000e+01 2.600000000000e-02 -3.594640000000e+00 -4.000000000000e-03 8.986600000000e+00 1.000000000000e-02 -2.695980000000e+00 -3.000000000000e-03 -2.695980000000e+00 -3.000000000000e-03 9.885260000000e+00 1.100000000000e-02 3.594640000000e+00 4.000000000000e-03 1.123325000000e+02 1.250000000000e-01 -2.785846000000e+01 -3.100000000000e-02 8.986600000000e-01 1.000000000000e-03 2.695980000000e+00 3.000000000000e-03 1.078392000000e+01 1.200000000000e-02 8.986600000000e+00 1.000000000000e-02 -1.977052000000e+01 -2.200000000000e-02 4.673032000000e+01 5.200000000000e-02 2.066918000000e+01 2.300000000000e-02 -3.594640000000e+00 -4.000000000000e-03 9.885260000000e+00 1.100000000000e-02 3.594640000000e+00 4.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -1.797320000000e+00 -2.000000000000e-03 9.885260000000e+00 1.100000000000e-02 3.594640000000e+00 4.000000000000e-03 8.986600000000e-01 1.000000000000e-03 -2.695980000000e+00 -3.000000000000e-03 8.986600000000e-01 1.000000000000e-03 1.797320000000e+00 2.000000000000e-03 -4.493300000000e+00 -5.000000000000e-03 1.258124000000e+01 1.400000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -5.391960000000e+00 -6.000000000000e-03 8.986600000000e-01 1.000000000000e-03 -2.695980000000e+00 -3.000000000000e-03 -5.571692000000e+01 -6.200000000000e-02 -3.055444000000e+01 -3.400000000000e-02 -3.684506000000e+01 -4.100000000000e-02 0.000000000000e+00 0.000000000000e+00 -1.797320000000e+00 -2.000000000000e-03 7.189280000000e+00 8.000000000000e-03 8.087940000000e+00 9.000000000000e-03 3.055444000000e+01 3.400000000000e-02 5.212228000000e+01 5.800000000000e-02 2.695980000000e+01 3.000000000000e-02 8.986600000000e-01 1.000000000000e-03 -4.493300000000e+00 -5.000000000000e-03 -5.391960000000e+00 -6.000000000000e-03 -3.594640000000e+01 -4.000000000000e-02 -8.986600000000e+00 -1.000000000000e-02 -5.302094000000e+01 -5.900000000000e-02 -2.516248000000e+01 -2.800000000000e-02 1.887186000000e+01 2.100000000000e-02 3.235176000000e+01 3.600000000000e-02 1.617588000000e+03 1.800000000000e+00 6.650084000000e+01 7.400000000000e-02 + 16 EWK_RAP 1.900000000000e+00 8.281000000000e+03 7.000000000000e+03 6.879800000000e+04 1.963907708000e+02 1.023714240000e+02 1.488000000000e-01 -2.063940000000e+00 -3.000000000000e-03 6.604608000000e+01 9.600000000000e-02 -3.439900000000e+01 -5.000000000000e-02 1.375960000000e+00 2.000000000000e-03 6.879800000000e+00 1.000000000000e-02 -3.095910000000e+01 -4.500000000000e-02 -5.503840000000e+00 -8.000000000000e-03 -1.788748000000e+01 -2.600000000000e-02 4.609466000000e+01 6.700000000000e-02 -7.980568000000e+01 -1.160000000000e-01 -3.852688000000e+01 -5.600000000000e-02 3.439900000000e+00 5.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 3.439900000000e+00 5.000000000000e-03 2.751920000000e+00 4.000000000000e-03 6.191820000000e+00 9.000000000000e-03 1.375960000000e+00 2.000000000000e-03 -1.375960000000e+00 -2.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 8.943740000000e+00 1.300000000000e-02 -6.191820000000e+00 -9.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 4.127880000000e+00 6.000000000000e-03 2.751920000000e+00 4.000000000000e-03 -6.879800000000e+00 -1.000000000000e-02 4.127880000000e+00 6.000000000000e-03 -4.127880000000e+00 -6.000000000000e-03 6.879800000000e+00 1.000000000000e-02 -6.879800000000e-01 -1.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 6.879800000000e-01 1.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 -5.503840000000e+00 -8.000000000000e-03 4.815860000000e+00 7.000000000000e-03 6.879800000000e-01 1.000000000000e-03 2.751920000000e+00 4.000000000000e-03 -4.127880000000e+00 -6.000000000000e-03 -1.375960000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.751920000000e+00 -4.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -1.375960000000e+00 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -3.439900000000e+00 -5.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -6.879800000000e+00 -1.000000000000e-02 1.375960000000e+00 2.000000000000e-03 -3.439900000000e+00 -5.000000000000e-03 2.751920000000e+00 4.000000000000e-03 -7.636578000000e+01 -1.110000000000e-01 -1.169566000000e+01 -1.700000000000e-02 1.582354000000e+01 2.300000000000e-02 -1.926344000000e+01 -2.800000000000e-02 -1.788748000000e+01 -2.600000000000e-02 7.567780000000e+00 1.100000000000e-02 -6.879800000000e-01 -1.000000000000e-03 -2.063940000000e+00 -3.000000000000e-03 1.788748000000e+01 2.600000000000e-02 4.815860000000e+00 7.000000000000e-03 8.255760000000e+00 1.200000000000e-02 -2.751920000000e+00 -4.000000000000e-03 -6.879800000000e+00 -1.000000000000e-02 2.063940000000e+00 3.000000000000e-03 -4.815860000000e+00 -7.000000000000e-03 4.127880000000e+00 6.000000000000e-03 -6.191820000000e+00 -9.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 8.668548000000e+01 1.260000000000e-01 6.191820000000e+00 9.000000000000e-03 -6.191820000000e+00 -9.000000000000e-03 8.943740000000e+00 1.300000000000e-02 -4.815860000000e+00 -7.000000000000e-03 -2.063940000000e+00 -3.000000000000e-03 4.127880000000e+00 6.000000000000e-03 -1.375960000000e+00 -2.000000000000e-03 7.774174000000e+01 1.130000000000e-01 -1.995142000000e+01 -2.900000000000e-02 -1.375960000000e+00 -2.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 9.631720000000e+00 1.400000000000e-02 9.631720000000e+00 1.400000000000e-02 -1.444758000000e+01 -2.100000000000e-02 4.265476000000e+01 6.200000000000e-02 1.307162000000e+01 1.900000000000e-02 1.375960000000e+00 2.000000000000e-03 4.815860000000e+00 7.000000000000e-03 2.063940000000e+00 3.000000000000e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -1.375960000000e+00 -2.000000000000e-03 7.567780000000e+00 1.100000000000e-02 2.751920000000e+00 4.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 -1.375960000000e+00 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 6.879800000000e-01 1.000000000000e-03 -2.063940000000e+00 -3.000000000000e-03 7.567780000000e+00 1.100000000000e-02 -2.063940000000e+00 -3.000000000000e-03 -4.815860000000e+00 -7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.063940000000e+00 -3.000000000000e-03 -3.990284000000e+01 -5.800000000000e-02 -1.788748000000e+01 -2.600000000000e-02 -2.683122000000e+01 -3.900000000000e-02 6.879800000000e-01 1.000000000000e-03 -6.879800000000e-01 -1.000000000000e-03 6.191820000000e+00 9.000000000000e-03 7.567780000000e+00 1.100000000000e-02 2.201536000000e+01 3.200000000000e-02 3.990284000000e+01 5.800000000000e-02 1.995142000000e+01 2.900000000000e-02 6.879800000000e-01 1.000000000000e-03 -5.503840000000e+00 -8.000000000000e-03 -2.751920000000e+00 -4.000000000000e-03 -2.545526000000e+01 -3.700000000000e-02 -6.879800000000e+00 -1.000000000000e-02 -3.783890000000e+01 -5.500000000000e-02 -1.926344000000e+01 -2.800000000000e-02 8.943740000000e+00 1.300000000000e-02 2.063940000000e+01 3.000000000000e-02 1.238364000000e+03 1.800000000000e+00 7.017396000000e+01 1.020000000000e-01 + 17 EWK_RAP 2.100000000000e+00 8.281000000000e+03 7.000000000000e+03 4.561500000000e+04 1.628866035000e+02 1.012744230000e+02 2.220200000000e-01 -1.824600000000e+00 -4.000000000000e-03 4.333425000000e+01 9.500000000000e-02 -2.554440000000e+01 -5.600000000000e-02 3.193050000000e+00 7.000000000000e-03 -1.824600000000e+00 -4.000000000000e-03 -2.508825000000e+01 -5.500000000000e-02 -9.123000000000e-01 -2.000000000000e-03 2.280750000000e+00 5.000000000000e-03 2.873745000000e+01 6.300000000000e-02 -4.972035000000e+01 -1.090000000000e-01 -2.508825000000e+01 -5.500000000000e-02 1.368450000000e+00 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.280750000000e+00 5.000000000000e-03 1.824600000000e+00 4.000000000000e-03 3.649200000000e+00 8.000000000000e-03 9.123000000000e-01 2.000000000000e-03 -9.123000000000e-01 -2.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 5.017650000000e+00 1.100000000000e-02 -4.105350000000e+00 -9.000000000000e-03 -1.368450000000e+00 -3.000000000000e-03 2.736900000000e+00 6.000000000000e-03 3.193050000000e+00 7.000000000000e-03 -8.210700000000e+00 -1.800000000000e-02 3.649200000000e+00 8.000000000000e-03 -3.193050000000e+00 -7.000000000000e-03 4.105350000000e+00 9.000000000000e-03 -1.824600000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.368450000000e+00 3.000000000000e-03 -2.280750000000e+00 -5.000000000000e-03 5.473800000000e+00 1.200000000000e-02 0.000000000000e+00 0.000000000000e+00 3.193050000000e+00 7.000000000000e-03 -2.736900000000e+00 -6.000000000000e-03 -9.123000000000e-01 -2.000000000000e-03 4.561500000000e-01 1.000000000000e-03 -1.824600000000e+00 -4.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 -9.123000000000e-01 -2.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 -2.736900000000e+00 -6.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -4.561500000000e+00 -1.000000000000e-02 9.123000000000e-01 2.000000000000e-03 -2.280750000000e+00 -5.000000000000e-03 1.368450000000e+00 3.000000000000e-03 1.824600000000e+01 4.000000000000e-02 -4.561500000000e-01 -1.000000000000e-03 6.386100000000e+00 1.400000000000e-02 -1.322835000000e+01 -2.900000000000e-02 -2.143905000000e+01 -4.700000000000e-02 1.824600000000e+00 4.000000000000e-03 -1.824600000000e+00 -4.000000000000e-03 -3.193050000000e+00 -7.000000000000e-03 1.505295000000e+01 3.300000000000e-02 3.649200000000e+00 8.000000000000e-03 4.105350000000e+00 9.000000000000e-03 -2.280750000000e+00 -5.000000000000e-03 -5.017650000000e+00 -1.100000000000e-02 2.736900000000e+00 6.000000000000e-03 -3.649200000000e+00 -8.000000000000e-03 1.368450000000e+00 3.000000000000e-03 4.561500000000e-01 1.000000000000e-03 -4.561500000000e+00 -1.000000000000e-02 7.298400000000e+00 1.600000000000e-02 0.000000000000e+00 0.000000000000e+00 6.066795000000e+01 1.330000000000e-01 -1.733370000000e+01 -3.800000000000e-02 3.193050000000e+00 7.000000000000e-03 4.561500000000e+00 1.000000000000e-02 -4.561500000000e+00 -1.000000000000e-02 4.561500000000e-01 1.000000000000e-03 1.368450000000e+00 3.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 4.196580000000e+01 9.200000000000e-02 -1.003530000000e+01 -2.200000000000e-02 -1.824600000000e+00 -4.000000000000e-03 -1.368450000000e+00 -3.000000000000e-03 1.094760000000e+01 2.400000000000e-02 4.561500000000e+00 1.000000000000e-02 -9.579150000000e+00 -2.100000000000e-02 4.059735000000e+01 8.900000000000e-02 2.736900000000e+00 6.000000000000e-03 8.210700000000e+00 1.800000000000e-02 -3.193050000000e+00 -7.000000000000e-03 -1.824600000000e+00 -4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 1.824600000000e+00 4.000000000000e-03 5.017650000000e+00 1.100000000000e-02 2.280750000000e+00 5.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 4.561500000000e-01 1.000000000000e-03 9.123000000000e-01 2.000000000000e-03 5.473800000000e+00 1.200000000000e-02 -1.368450000000e+00 -3.000000000000e-03 -2.736900000000e+00 -6.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 -1.368450000000e+00 -3.000000000000e-03 -2.508825000000e+01 -5.500000000000e-02 -1.140375000000e+01 -2.500000000000e-02 -1.778985000000e+01 -3.900000000000e-02 4.561500000000e-01 1.000000000000e-03 -4.561500000000e-01 -1.000000000000e-03 3.193050000000e+00 7.000000000000e-03 4.105350000000e+00 9.000000000000e-03 1.322835000000e+01 2.900000000000e-02 2.554440000000e+01 5.600000000000e-02 1.140375000000e+01 2.500000000000e-02 -4.561500000000e-01 -1.000000000000e-03 -4.561500000000e+00 -1.000000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -1.642140000000e+01 -3.600000000000e-02 -4.105350000000e+00 -9.000000000000e-03 -2.463210000000e+01 -5.400000000000e-02 -1.140375000000e+01 -2.500000000000e-02 6.842250000000e+00 1.500000000000e-02 1.140375000000e+01 2.500000000000e-02 8.210700000000e+02 1.800000000000e+00 5.884335000000e+01 1.290000000000e-01 + 18 EWK_RAP 2.300000000000e+00 8.281000000000e+03 7.000000000000e+03 2.222800000000e+04 1.322210352000e+02 8.195685880000e+01 3.687100000000e-01 -0.000000000000e+00 -0.000000000000e+00 2.178344000000e+01 9.800000000000e-02 -1.333680000000e+01 -6.000000000000e-02 4.445600000000e-01 2.000000000000e-03 7.557520000000e+00 3.400000000000e-02 -1.022488000000e+01 -4.600000000000e-02 -1.333680000000e+00 -6.000000000000e-03 1.222540000000e+01 5.500000000000e-02 1.555960000000e+01 7.000000000000e-02 -2.511764000000e+01 -1.130000000000e-01 -1.178084000000e+01 -5.300000000000e-02 4.445600000000e-01 2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 1.111400000000e+00 5.000000000000e-03 8.891200000000e-01 4.000000000000e-03 1.778240000000e+00 8.000000000000e-03 2.222800000000e-01 1.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 2.222800000000e+00 1.000000000000e-02 -1.333680000000e+00 -6.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 1.333680000000e+00 6.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 -6.890680000000e+00 -3.100000000000e-02 2.222800000000e-01 1.000000000000e-03 -2.000520000000e+00 -9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -8.891200000000e-01 -4.000000000000e-03 2.222800000000e-01 1.000000000000e-03 4.445600000000e-01 2.000000000000e-03 8.891200000000e-01 4.000000000000e-03 6.668400000000e-01 3.000000000000e-03 1.778240000000e+00 8.000000000000e-03 -2.222800000000e-01 -1.000000000000e-03 1.555960000000e+00 7.000000000000e-03 -8.891200000000e-01 -4.000000000000e-03 -2.222800000000e-01 -1.000000000000e-03 4.445600000000e-01 2.000000000000e-03 -1.111400000000e+00 -5.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 -6.668400000000e-01 -3.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 -8.891200000000e-01 -4.000000000000e-03 -1.111400000000e+00 -5.000000000000e-03 4.445600000000e-01 2.000000000000e-03 -1.778240000000e+00 -8.000000000000e-03 4.445600000000e-01 2.000000000000e-03 -1.333680000000e+00 -6.000000000000e-03 4.445600000000e-01 2.000000000000e-03 3.378656000000e+01 1.520000000000e-01 7.335240000000e+00 3.300000000000e-02 3.334200000000e+00 1.500000000000e-02 -1.333680000000e+00 -6.000000000000e-03 -5.334720000000e+00 -2.400000000000e-02 2.000520000000e+00 9.000000000000e-03 -1.111400000000e+00 -5.000000000000e-03 -1.555960000000e+00 -7.000000000000e-03 7.557520000000e+00 3.400000000000e-02 4.445600000000e-01 2.000000000000e-03 1.555960000000e+00 7.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.222800000000e+00 1.000000000000e-02 4.445600000000e-01 2.000000000000e-03 -1.778240000000e+00 -8.000000000000e-03 1.111400000000e+00 5.000000000000e-03 -2.222800000000e-01 -1.000000000000e-03 -4.890160000000e+00 -2.200000000000e-02 2.889640000000e+00 1.300000000000e-02 0.000000000000e+00 0.000000000000e+00 3.356428000000e+01 1.510000000000e-01 -2.511764000000e+01 -1.130000000000e-01 1.111400000000e+01 5.000000000000e-02 -6.668400000000e+00 -3.000000000000e-02 -3.111920000000e+00 -1.400000000000e-02 4.890160000000e+00 2.200000000000e-02 1.555960000000e+00 7.000000000000e-03 2.222800000000e-01 1.000000000000e-03 1.733784000000e+01 7.800000000000e-02 -3.334200000000e+00 -1.500000000000e-02 -1.778240000000e+00 -8.000000000000e-03 1.111400000000e+00 5.000000000000e-03 8.891200000000e+00 4.000000000000e-02 -8.891200000000e-01 -4.000000000000e-03 -2.889640000000e+00 -1.300000000000e-02 3.400884000000e+01 1.530000000000e-01 -5.557000000000e+00 -2.500000000000e-02 1.244768000000e+01 5.600000000000e-02 -1.044716000000e+01 -4.700000000000e-02 -8.446640000000e+00 -3.800000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 2.222800000000e-01 1.000000000000e-03 2.222800000000e+00 1.000000000000e-02 1.555960000000e+00 7.000000000000e-03 4.445600000000e-01 2.000000000000e-03 -6.668400000000e-01 -3.000000000000e-03 2.222800000000e-01 1.000000000000e-03 4.445600000000e-01 2.000000000000e-03 -1.111400000000e+00 -5.000000000000e-03 3.778760000000e+00 1.700000000000e-02 2.222800000000e-01 1.000000000000e-03 -1.111400000000e+00 -5.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 -4.445600000000e-01 -2.000000000000e-03 -1.222540000000e+01 -5.500000000000e-02 -6.223840000000e+00 -2.800000000000e-02 -9.113480000000e+00 -4.100000000000e-02 2.222800000000e-01 1.000000000000e-03 2.222800000000e-01 1.000000000000e-03 2.000520000000e+00 9.000000000000e-03 2.445080000000e+00 1.100000000000e-02 5.779280000000e+00 2.600000000000e-02 1.311452000000e+01 5.900000000000e-02 5.334720000000e+00 2.400000000000e-02 -4.445600000000e-01 -2.000000000000e-03 -2.667360000000e+00 -1.200000000000e-02 0.000000000000e+00 0.000000000000e+00 -8.668920000000e+00 -3.900000000000e-02 -2.000520000000e+00 -9.000000000000e-03 -1.378136000000e+01 -6.200000000000e-02 -5.557000000000e+00 -2.500000000000e-02 6.446120000000e+00 2.900000000000e-02 8.891200000000e+00 4.000000000000e-02 4.001040000000e+02 1.800000000000e+00 4.779020000000e+01 2.150000000000e-01 + 19 EWK_RAP 2.000000000000e-01 1.768900000000e+04 7.000000000000e+03 1.510400000000e+03 2.127398400000e+01 1.360447488000e+01 9.007200000000e-01 -8.156160000000e-01 -5.400000000000e-02 9.666560000000e-01 6.400000000000e-02 -3.322880000000e-01 -2.200000000000e-02 -6.645760000000e-01 -4.400000000000e-02 4.078080000000e-01 2.700000000000e-02 2.205184000000e+00 1.460000000000e-01 -7.400960000000e-01 -4.900000000000e-02 1.465088000000e+00 9.700000000000e-02 -2.567680000000e+00 -1.700000000000e-01 -1.465088000000e+00 -9.700000000000e-02 2.673408000000e+00 1.770000000000e-01 6.434304000000e+00 4.260000000000e-01 0.000000000000e+00 0.000000000000e+00 -3.171840000000e-01 -2.100000000000e-02 4.531200000000e-02 3.000000000000e-03 3.322880000000e-01 2.200000000000e-02 1.253632000000e+00 8.300000000000e-02 8.458240000000e-01 5.600000000000e-02 -2.869760000000e-01 -1.900000000000e-02 1.510400000000e-01 1.000000000000e-02 1.057280000000e-01 7.000000000000e-03 -7.552000000000e-02 -5.000000000000e-03 -3.020800000000e-02 -2.000000000000e-03 1.510400000000e-02 1.000000000000e-03 -3.020800000000e-02 -2.000000000000e-03 1.510400000000e-02 1.000000000000e-03 -1.510400000000e-02 -1.000000000000e-03 1.510400000000e-02 1.000000000000e-03 0.000000000000e+00 0.000000000000e+00 4.531200000000e-02 3.000000000000e-03 4.531200000000e-02 3.000000000000e-03 -9.062400000000e-02 -6.000000000000e-03 3.020800000000e-02 2.000000000000e-03 -6.041600000000e-02 -4.000000000000e-03 -1.510400000000e-02 -1.000000000000e-03 -4.380160000000e-01 -2.900000000000e-02 -4.229120000000e-01 -2.800000000000e-02 3.624960000000e-01 2.400000000000e-02 -2.567680000000e-01 -1.700000000000e-02 -5.739520000000e-01 -3.800000000000e-02 -4.229120000000e-01 -2.800000000000e-02 -1.208320000000e-01 -8.000000000000e-03 3.020800000000e-01 2.000000000000e-02 -1.208320000000e-01 -8.000000000000e-03 -1.359360000000e-01 -9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 2.718720000000e-01 1.800000000000e-02 -1.510400000000e-02 -1.000000000000e-03 -1.812480000000e-01 -1.200000000000e-02 -2.265600000000e-01 -1.500000000000e-02 -1.223424000000e+00 -8.100000000000e-02 1.208320000000e-01 8.000000000000e-03 8.563968000000e+00 5.670000000000e-01 3.232256000000e+00 2.140000000000e-01 1.736960000000e+00 1.150000000000e-01 4.682240000000e-01 3.100000000000e-02 -2.416640000000e-01 -1.600000000000e-02 1.208320000000e-01 8.000000000000e-03 4.380160000000e-01 2.900000000000e-02 4.682240000000e-01 3.100000000000e-02 -1.057280000000e-01 -7.000000000000e-03 1.510400000000e-02 1.000000000000e-03 -4.229120000000e-01 -2.800000000000e-02 -5.286400000000e-01 -3.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 3.322880000000e-01 2.200000000000e-02 4.984320000000e-01 3.300000000000e-02 4.229120000000e-01 2.800000000000e-02 2.069248000000e+00 1.370000000000e-01 1.510400000000e-02 1.000000000000e-03 1.978624000000e+00 1.310000000000e-01 1.359360000000e+00 9.000000000000e-02 1.359360000000e+00 9.000000000000e-02 4.229120000000e-01 2.800000000000e-02 -2.718720000000e-01 -1.800000000000e-02 1.359360000000e-01 9.000000000000e-03 1.208320000000e-01 8.000000000000e-03 -2.869760000000e-01 -1.900000000000e-02 2.899968000000e+00 1.920000000000e-01 -1.359360000000e-01 -9.000000000000e-03 -4.531200000000e-01 -3.000000000000e-02 1.661440000000e-01 1.100000000000e-02 6.041600000000e-02 4.000000000000e-03 -4.984320000000e-01 -3.300000000000e-02 -4.229120000000e-01 -2.800000000000e-02 1.510400000000e-01 1.000000000000e-02 -6.041600000000e-02 -4.000000000000e-03 2.567680000000e-01 1.700000000000e-02 1.510400000000e-02 1.000000000000e-03 -9.062400000000e-02 -6.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -8.005120000000e-01 -5.300000000000e-02 -5.588480000000e-01 -3.700000000000e-02 1.963520000000e-01 1.300000000000e-02 1.057280000000e-01 7.000000000000e-03 -1.661440000000e-01 -1.100000000000e-02 -1.510400000000e-01 -1.000000000000e-02 -9.062400000000e-02 -6.000000000000e-03 -3.322880000000e-01 -2.200000000000e-02 -1.510400000000e-01 -1.000000000000e-02 1.057280000000e-01 7.000000000000e-03 -9.062400000000e-02 -6.000000000000e-03 1.359360000000e-01 9.000000000000e-03 3.624960000000e-01 2.400000000000e-02 3.866624000000e+00 2.560000000000e-01 1.510400000000e+00 1.000000000000e-01 2.280704000000e+00 1.510000000000e-01 1.208320000000e-01 8.000000000000e-03 3.776000000000e-01 2.500000000000e-02 7.552000000000e-02 5.000000000000e-03 -3.927040000000e-01 -2.600000000000e-02 -2.008832000000e+00 -1.330000000000e-01 -2.326016000000e+00 -1.540000000000e-01 -2.114560000000e+00 -1.400000000000e-01 4.229120000000e-01 2.800000000000e-02 1.797376000000e+00 1.190000000000e-01 4.531200000000e-02 3.000000000000e-03 1.525504000000e+00 1.010000000000e-01 6.343680000000e-01 4.200000000000e-02 3.368192000000e+00 2.230000000000e-01 1.767168000000e+00 1.170000000000e-01 2.567680000000e-01 1.700000000000e-02 -1.465088000000e+00 -9.700000000000e-02 2.718720000000e+01 1.800000000000e+00 9.968640000000e-01 6.600000000000e-02 + 20 EWK_RAP 6.000000000000e-01 1.768900000000e+04 7.000000000000e+03 1.458100000000e+03 2.002408730000e+01 8.901992120000e+00 6.105200000000e-01 -2.916200000000e-01 -2.000000000000e-02 8.456980000000e-01 5.800000000000e-02 -2.624580000000e-01 -1.800000000000e-02 -5.540780000000e-01 -3.800000000000e-02 8.602790000000e-01 5.900000000000e-02 1.545586000000e+00 1.060000000000e-01 -5.540780000000e-01 -3.800000000000e-02 -2.055921000000e+00 -1.410000000000e-01 -3.309887000000e+00 -2.270000000000e-01 -1.166480000000e+00 -8.000000000000e-02 1.385195000000e+00 9.500000000000e-02 5.730333000000e+00 3.930000000000e-01 5.832400000000e-02 4.000000000000e-03 -2.916200000000e-01 -2.000000000000e-02 4.374300000000e-02 3.000000000000e-03 3.499440000000e-01 2.400000000000e-02 1.151899000000e+00 7.900000000000e-02 5.540780000000e-01 3.800000000000e-02 -2.770390000000e-01 -1.900000000000e-02 2.478770000000e-01 1.700000000000e-02 5.832400000000e-02 4.000000000000e-03 -5.832400000000e-02 -4.000000000000e-03 8.748600000000e-02 6.000000000000e-03 2.916200000000e-02 2.000000000000e-03 -8.748600000000e-02 -6.000000000000e-03 8.748600000000e-02 6.000000000000e-03 -4.374300000000e-02 -3.000000000000e-03 5.832400000000e-02 4.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 2.916200000000e-02 2.000000000000e-03 4.374300000000e-02 3.000000000000e-03 -7.290500000000e-02 -5.000000000000e-03 -2.916200000000e-02 -2.000000000000e-03 -1.458100000000e-02 -1.000000000000e-03 8.748600000000e-02 6.000000000000e-03 -5.103350000000e-01 -3.500000000000e-02 -4.665920000000e-01 -3.200000000000e-02 3.645250000000e-01 2.500000000000e-02 -2.187150000000e-01 -1.500000000000e-02 -5.832400000000e-01 -4.000000000000e-02 -3.791060000000e-01 -2.600000000000e-02 -4.374300000000e-02 -3.000000000000e-03 2.478770000000e-01 1.700000000000e-02 -5.832400000000e-02 -4.000000000000e-03 -2.187150000000e-01 -1.500000000000e-02 -2.916200000000e-02 -2.000000000000e-03 1.603910000000e-01 1.100000000000e-02 1.458100000000e-02 1.000000000000e-03 -1.895530000000e-01 -1.300000000000e-02 -8.748600000000e-02 -6.000000000000e-03 -1.851787000000e+00 -1.270000000000e-01 -1.283128000000e+00 -8.800000000000e-02 7.523796000000e+00 5.160000000000e-01 3.572345000000e+00 2.450000000000e-01 2.420446000000e+00 1.660000000000e-01 6.998880000000e-01 4.800000000000e-02 -3.645250000000e-01 -2.500000000000e-02 -0.000000000000e+00 -0.000000000000e+00 5.540780000000e-01 3.800000000000e-02 8.165360000000e-01 5.600000000000e-02 6.269830000000e-01 4.300000000000e-02 -1.020670000000e-01 -7.000000000000e-03 -2.187150000000e-01 -1.500000000000e-02 -9.186030000000e-01 -6.300000000000e-02 1.166480000000e-01 8.000000000000e-03 8.311170000000e-01 5.700000000000e-02 7.290500000000e-01 5.000000000000e-02 1.633072000000e+00 1.120000000000e-01 2.784971000000e+00 1.910000000000e-01 1.458100000000e-02 1.000000000000e-03 1.866368000000e+00 1.280000000000e-01 1.472681000000e+00 1.010000000000e-01 1.633072000000e+00 1.120000000000e-01 3.062010000000e-01 2.100000000000e-02 -2.041340000000e-01 -1.400000000000e-02 1.895530000000e-01 1.300000000000e-02 1.312290000000e-01 9.000000000000e-03 -2.478770000000e-01 -1.700000000000e-02 3.032848000000e+00 2.080000000000e-01 -1.312290000000e-01 -9.000000000000e-03 -5.103350000000e-01 -3.500000000000e-02 2.770390000000e-01 1.900000000000e-02 7.290500000000e-02 5.000000000000e-03 -6.853070000000e-01 -4.700000000000e-02 -3.353630000000e-01 -2.300000000000e-02 -1.458100000000e-02 -1.000000000000e-03 1.020670000000e-01 7.000000000000e-03 1.458100000000e-01 1.000000000000e-02 1.458100000000e-02 1.000000000000e-03 -1.166480000000e-01 -8.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -1.166480000000e+00 -8.000000000000e-02 -5.249160000000e-01 -3.600000000000e-02 1.749720000000e-01 1.200000000000e-02 4.374300000000e-02 3.000000000000e-03 -1.458100000000e-01 -1.000000000000e-02 -1.749720000000e-01 -1.200000000000e-02 -1.166480000000e-01 -8.000000000000e-03 -6.707260000000e-01 -4.600000000000e-02 -2.624580000000e-01 -1.800000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -1.020670000000e-01 -7.000000000000e-03 1.166480000000e-01 8.000000000000e-03 3.499440000000e-01 2.400000000000e-02 3.353630000000e+00 2.300000000000e-01 1.195642000000e+00 8.200000000000e-02 2.041340000000e+00 1.400000000000e-01 7.290500000000e-02 5.000000000000e-03 3.499440000000e-01 2.400000000000e-02 2.041340000000e-01 1.400000000000e-02 -4.228490000000e-01 -2.900000000000e-02 -1.633072000000e+00 -1.120000000000e-01 -1.997597000000e+00 -1.370000000000e-01 -1.822625000000e+00 -1.250000000000e-01 4.082680000000e-01 2.800000000000e-02 1.939273000000e+00 1.330000000000e-01 -1.603910000000e-01 -1.100000000000e-02 1.487262000000e+00 1.020000000000e-01 5.540780000000e-01 3.800000000000e-02 3.280725000000e+00 2.250000000000e-01 1.574748000000e+00 1.080000000000e-01 -1.895530000000e-01 -1.300000000000e-02 -1.531005000000e+00 -1.050000000000e-01 2.624580000000e+01 1.800000000000e+00 9.769270000000e-01 6.700000000000e-02 + 21 EWK_RAP 1.000000000000e+00 1.768900000000e+04 7.000000000000e+03 1.349700000000e+03 1.960034340000e+01 9.900724350000e+00 7.335500000000e-01 -1.889580000000e-01 -1.400000000000e-02 9.582870000000e-01 7.100000000000e-02 -4.723950000000e-01 -3.500000000000e-02 -1.079760000000e-01 -8.000000000000e-03 -4.319040000000e-01 -3.200000000000e-02 1.754610000000e+00 1.300000000000e-01 5.533770000000e-01 4.100000000000e-02 1.430682000000e+00 1.060000000000e-01 -2.510442000000e+00 -1.860000000000e-01 -1.201233000000e+00 -8.900000000000e-02 9.447900000000e-01 7.000000000000e-02 4.008609000000e+00 2.970000000000e-01 8.098200000000e-02 6.000000000000e-03 -2.969340000000e-01 -2.200000000000e-02 6.748500000000e-02 5.000000000000e-03 3.239280000000e-01 2.400000000000e-02 9.717840000000e-01 7.200000000000e-02 3.644190000000e-01 2.700000000000e-02 -2.429460000000e-01 -1.800000000000e-02 9.447900000000e-02 7.000000000000e-03 -4.049100000000e-02 -3.000000000000e-03 -1.349700000000e-02 -1.000000000000e-03 -2.699400000000e-02 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -9.447900000000e-02 -7.000000000000e-03 9.447900000000e-02 7.000000000000e-03 -9.447900000000e-02 -7.000000000000e-03 5.398800000000e-02 4.000000000000e-03 5.398800000000e-02 4.000000000000e-03 1.349700000000e-02 1.000000000000e-03 -1.349700000000e-02 -1.000000000000e-03 -2.699400000000e-02 -2.000000000000e-03 -4.049100000000e-02 -3.000000000000e-03 -2.699400000000e-02 -2.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -2.159520000000e-01 -1.600000000000e-02 -2.564430000000e-01 -1.900000000000e-02 3.914130000000e-01 2.900000000000e-02 2.699400000000e-02 2.000000000000e-03 -4.588980000000e-01 -3.400000000000e-02 -5.128860000000e-01 -3.800000000000e-02 -1.619640000000e-01 -1.200000000000e-02 2.969340000000e-01 2.200000000000e-02 -1.079760000000e-01 -8.000000000000e-03 -2.024550000000e-01 -1.500000000000e-02 -8.098200000000e-02 -6.000000000000e-03 2.699400000000e-02 2.000000000000e-03 -2.699400000000e-02 -2.000000000000e-03 -2.834370000000e-01 -2.100000000000e-02 -2.699400000000e-01 -2.000000000000e-02 5.263830000000e-01 3.900000000000e-02 2.793879000000e+00 2.070000000000e-01 5.938680000000e+00 4.400000000000e-01 3.131304000000e+00 2.320000000000e-01 2.523939000000e+00 1.870000000000e-01 5.938680000000e-01 4.400000000000e-02 1.484670000000e-01 1.100000000000e-02 8.098200000000e-02 6.000000000000e-03 -1.012275000000e+00 -7.500000000000e-02 2.024550000000e-01 1.500000000000e-02 -2.429460000000e-01 -1.800000000000e-02 2.159520000000e-01 1.600000000000e-02 4.723950000000e-01 3.500000000000e-02 -4.184070000000e-01 -3.100000000000e-02 1.214730000000e-01 9.000000000000e-03 1.349700000000e-01 1.000000000000e-02 4.723950000000e-01 3.500000000000e-02 1.417185000000e+00 1.050000000000e-01 2.564430000000e+00 1.900000000000e-01 1.349700000000e-02 1.000000000000e-03 1.633137000000e+00 1.210000000000e-01 1.066263000000e+00 7.900000000000e-02 1.309209000000e+00 9.700000000000e-02 3.239280000000e-01 2.400000000000e-02 5.398800000000e-02 4.000000000000e-03 1.889580000000e-01 1.400000000000e-02 2.699400000000e-01 2.000000000000e-02 -1.484670000000e-01 -1.100000000000e-02 2.523939000000e+00 1.870000000000e-01 -6.748500000000e-02 -5.000000000000e-03 -3.509220000000e-01 -2.600000000000e-02 2.969340000000e-01 2.200000000000e-02 -2.699400000000e-02 -2.000000000000e-03 -5.398800000000e-01 -4.000000000000e-02 -3.779160000000e-01 -2.800000000000e-02 3.374250000000e-01 2.500000000000e-02 -6.748500000000e-02 -5.000000000000e-03 1.349700000000e-01 1.000000000000e-02 -6.748500000000e-02 -5.000000000000e-03 6.748500000000e-02 5.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -9.582870000000e-01 -7.100000000000e-02 -4.858920000000e-01 -3.600000000000e-02 2.024550000000e-01 1.500000000000e-02 5.398800000000e-02 4.000000000000e-03 -1.889580000000e-01 -1.400000000000e-02 -9.447900000000e-02 -7.000000000000e-03 -8.098200000000e-02 -6.000000000000e-03 -5.533770000000e-01 -4.100000000000e-02 -6.748500000000e-02 -5.000000000000e-03 2.699400000000e-02 2.000000000000e-03 -5.398800000000e-02 -4.000000000000e-03 1.214730000000e-01 9.000000000000e-03 3.374250000000e-01 2.500000000000e-02 3.225783000000e+00 2.390000000000e-01 8.638080000000e-01 6.400000000000e-02 1.795101000000e+00 1.330000000000e-01 -0.000000000000e+00 -0.000000000000e+00 2.564430000000e-01 1.900000000000e-02 5.398800000000e-02 4.000000000000e-03 -4.993890000000e-01 -3.700000000000e-02 -1.633137000000e+00 -1.210000000000e-01 -1.916574000000e+00 -1.420000000000e-01 -1.903077000000e+00 -1.410000000000e-01 3.644190000000e-01 2.700000000000e-02 1.849089000000e+00 1.370000000000e-01 -1.349700000000e-02 -1.000000000000e-03 1.255221000000e+00 9.300000000000e-02 5.803710000000e-01 4.300000000000e-02 3.023328000000e+00 2.240000000000e-01 1.606143000000e+00 1.190000000000e-01 2.564430000000e-01 1.900000000000e-02 -1.592646000000e+00 -1.180000000000e-01 2.429460000000e+01 1.800000000000e+00 9.717840000000e-01 7.200000000000e-02 + 22 EWK_RAP 1.400000000000e+00 1.768900000000e+04 7.000000000000e+03 1.182900000000e+03 1.823085480000e+01 8.893278780000e+00 7.518200000000e-01 -1.301190000000e-01 -1.100000000000e-02 1.052781000000e+00 8.900000000000e-02 -7.097400000000e-01 -6.000000000000e-02 1.407651000000e+00 1.190000000000e-01 1.407651000000e+00 1.190000000000e-01 2.200194000000e+00 1.860000000000e-01 8.398590000000e-01 7.100000000000e-02 6.269370000000e-01 5.300000000000e-02 -1.620573000000e+00 -1.370000000000e-01 -1.301190000000e+00 -1.100000000000e-01 2.720670000000e-01 2.300000000000e-02 2.318484000000e+00 1.960000000000e-01 7.097400000000e-02 6.000000000000e-03 -2.602380000000e-01 -2.200000000000e-02 3.548700000000e-02 3.000000000000e-03 2.247510000000e-01 1.900000000000e-02 7.333980000000e-01 6.200000000000e-02 2.602380000000e-01 2.200000000000e-02 -2.602380000000e-01 -2.200000000000e-02 1.774350000000e-01 1.500000000000e-02 -1.182900000000e-01 -1.000000000000e-02 4.731600000000e-02 4.000000000000e-03 -2.365800000000e-02 -2.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -1.064610000000e-01 -9.000000000000e-03 1.419480000000e-01 1.200000000000e-02 -1.064610000000e-01 -9.000000000000e-03 8.280300000000e-02 7.000000000000e-03 3.548700000000e-02 3.000000000000e-03 -2.365800000000e-02 -2.000000000000e-03 -2.365800000000e-02 -2.000000000000e-03 -3.548700000000e-02 -3.000000000000e-03 -5.914500000000e-02 -5.000000000000e-03 3.548700000000e-02 3.000000000000e-03 1.182900000000e-02 1.000000000000e-03 -2.247510000000e-01 -1.900000000000e-02 -2.010930000000e-01 -1.700000000000e-02 4.021860000000e-01 3.400000000000e-02 7.097400000000e-02 6.000000000000e-03 -4.021860000000e-01 -3.400000000000e-02 -5.086470000000e-01 -4.300000000000e-02 -1.182900000000e-01 -1.000000000000e-02 2.957250000000e-01 2.500000000000e-02 -1.064610000000e-01 -9.000000000000e-03 -2.129220000000e-01 -1.800000000000e-02 -5.914500000000e-02 -5.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -4.731600000000e-02 -4.000000000000e-03 -2.838960000000e-01 -2.400000000000e-02 -2.838960000000e-01 -2.400000000000e-02 2.838960000000e-01 2.400000000000e-02 -1.738863000000e+00 -1.470000000000e-01 4.376730000000e+00 3.700000000000e-01 3.394923000000e+00 2.870000000000e-01 2.093733000000e+00 1.770000000000e-01 2.838960000000e-01 2.400000000000e-02 2.484090000000e-01 2.100000000000e-02 3.193830000000e-01 2.700000000000e-02 -1.005465000000e+00 -8.500000000000e-02 -3.903570000000e-01 -3.300000000000e-02 -2.484090000000e-01 -2.100000000000e-02 7.452270000000e-01 6.300000000000e-02 8.990040000000e-01 7.600000000000e-02 -2.247510000000e-01 -1.900000000000e-02 2.720670000000e-01 2.300000000000e-02 1.419480000000e-01 1.200000000000e-02 2.957250000000e-01 2.500000000000e-02 2.720670000000e-01 2.300000000000e-02 2.176536000000e+00 1.840000000000e-01 1.182900000000e-02 1.000000000000e-03 1.632402000000e+00 1.380000000000e-01 6.742530000000e-01 5.700000000000e-02 9.699780000000e-01 8.200000000000e-02 3.903570000000e-01 3.300000000000e-02 7.097400000000e-02 6.000000000000e-03 3.666990000000e-01 3.100000000000e-02 2.602380000000e-01 2.200000000000e-02 -1.182900000000e-01 -1.000000000000e-02 2.188365000000e+00 1.850000000000e-01 -4.731600000000e-02 -4.000000000000e-03 -2.720670000000e-01 -2.300000000000e-02 4.731600000000e-02 4.000000000000e-03 7.097400000000e-02 6.000000000000e-03 -5.204760000000e-01 -4.400000000000e-02 -3.903570000000e-01 -3.300000000000e-02 3.430410000000e-01 2.900000000000e-02 -9.463200000000e-02 -8.000000000000e-03 5.914500000000e-02 5.000000000000e-03 -4.731600000000e-02 -4.000000000000e-03 3.548700000000e-02 3.000000000000e-03 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -8.990040000000e-01 -7.600000000000e-02 -4.495020000000e-01 -3.800000000000e-02 1.537770000000e-01 1.300000000000e-02 1.182900000000e-01 1.000000000000e-02 -9.463200000000e-02 -8.000000000000e-03 -9.463200000000e-02 -8.000000000000e-03 -5.914500000000e-02 -5.000000000000e-03 -5.204760000000e-01 -4.400000000000e-02 -1.774350000000e-01 -1.500000000000e-02 9.463200000000e-02 8.000000000000e-03 -4.731600000000e-02 -4.000000000000e-03 4.731600000000e-02 4.000000000000e-03 2.957250000000e-01 2.500000000000e-02 2.898105000000e+00 2.450000000000e-01 7.215690000000e-01 6.100000000000e-02 1.703376000000e+00 1.440000000000e-01 1.182900000000e-02 1.000000000000e-03 2.010930000000e-01 1.700000000000e-02 5.914500000000e-02 5.000000000000e-03 -5.086470000000e-01 -4.300000000000e-02 -1.490454000000e+00 -1.260000000000e-01 -1.975443000000e+00 -1.670000000000e-01 -1.786179000000e+00 -1.510000000000e-01 2.484090000000e-01 2.100000000000e-02 1.596915000000e+00 1.350000000000e-01 -3.548700000000e-02 -3.000000000000e-03 1.277532000000e+00 1.080000000000e-01 5.323050000000e-01 4.500000000000e-02 2.921763000000e+00 2.470000000000e-01 1.478625000000e+00 1.250000000000e-01 8.280300000000e-02 7.000000000000e-03 -1.466796000000e+00 -1.240000000000e-01 2.129220000000e+01 1.800000000000e+00 1.005465000000e+00 8.500000000000e-02 + 23 EWK_RAP 1.800000000000e+00 1.768900000000e+04 7.000000000000e+03 7.704600000000e+02 1.564650168000e+01 7.596350370000e+00 9.859500000000e-01 1.540920000000e-02 2.000000000000e-03 8.398014000000e-01 1.090000000000e-01 -5.624358000000e-01 -7.300000000000e-02 -3.312978000000e-01 -4.300000000000e-02 1.463874000000e-01 1.900000000000e-02 1.718125800000e+00 2.230000000000e-01 -3.621162000000e-01 -4.700000000000e-02 -2.157288000000e-01 -2.800000000000e-02 -9.707796000000e-01 -1.260000000000e-01 -1.255849800000e+00 -1.630000000000e-01 -6.934140000000e-02 -9.000000000000e-03 8.320968000000e-01 1.080000000000e-01 2.311380000000e-02 3.000000000000e-03 -1.772058000000e-01 -2.300000000000e-02 1.540920000000e-02 2.000000000000e-03 1.309782000000e-01 1.700000000000e-02 3.621162000000e-01 4.700000000000e-02 8.475060000000e-02 1.100000000000e-02 -2.003196000000e-01 -2.600000000000e-02 2.157288000000e-01 2.800000000000e-02 -3.852300000000e-02 -5.000000000000e-03 -6.934140000000e-02 -9.000000000000e-03 7.704600000000e-02 1.000000000000e-02 1.540920000000e-02 2.000000000000e-03 -9.245520000000e-02 -1.200000000000e-02 1.078644000000e-01 1.400000000000e-02 -7.704600000000e-02 -1.000000000000e-02 9.245520000000e-02 1.200000000000e-02 1.540920000000e-02 2.000000000000e-03 -7.704600000000e-03 -1.000000000000e-03 3.852300000000e-02 5.000000000000e-03 -6.163680000000e-02 -8.000000000000e-03 -5.393220000000e-02 -7.000000000000e-03 5.393220000000e-02 7.000000000000e-03 3.081840000000e-02 4.000000000000e-03 -2.850702000000e-01 -3.700000000000e-02 -2.465472000000e-01 -3.200000000000e-02 2.311380000000e-01 3.000000000000e-02 -1.001598000000e-01 -1.300000000000e-02 -3.467070000000e-01 -4.500000000000e-02 -2.773656000000e-01 -3.600000000000e-02 -0.000000000000e+00 -0.000000000000e+00 1.386828000000e-01 1.800000000000e-02 -5.393220000000e-02 -7.000000000000e-03 -1.155690000000e-01 -1.500000000000e-02 -2.311380000000e-02 -3.000000000000e-03 1.540920000000e-01 2.000000000000e-02 -2.311380000000e-02 -3.000000000000e-03 -1.232736000000e-01 -1.600000000000e-02 -8.475060000000e-02 -1.100000000000e-02 -1.571738400000e+00 -2.040000000000e-01 4.052619600000e+00 5.260000000000e-01 1.879922400000e+00 2.440000000000e-01 2.488585800000e+00 3.230000000000e-01 1.987786800000e+00 2.580000000000e-01 2.157288000000e-01 2.800000000000e-02 -1.463874000000e-01 -1.900000000000e-02 1.695012000000e-01 2.200000000000e-02 -5.932542000000e-01 -7.700000000000e-02 -4.622760000000e-02 -6.000000000000e-03 -3.081840000000e-01 -4.000000000000e-02 5.007990000000e-01 6.500000000000e-02 8.552106000000e-01 1.110000000000e-01 -5.624358000000e-01 -7.300000000000e-02 6.934140000000e-02 9.000000000000e-03 1.155690000000e-01 1.500000000000e-02 4.468668000000e-01 5.800000000000e-02 -1.302077400000e+00 -1.690000000000e-01 1.163394600000e+00 1.510000000000e-01 1.540920000000e-02 2.000000000000e-03 1.171099200000e+00 1.520000000000e-01 3.775254000000e-01 4.900000000000e-02 5.701404000000e-01 7.400000000000e-02 8.243922000000e-01 1.070000000000e-01 3.081840000000e-02 4.000000000000e-03 4.083438000000e-01 5.300000000000e-02 2.003196000000e-01 2.600000000000e-02 -2.311380000000e-02 -3.000000000000e-03 1.540920000000e+00 2.000000000000e-01 -7.704600000000e-02 -1.000000000000e-02 -2.542518000000e-01 -3.300000000000e-02 -2.619564000000e-01 -3.400000000000e-02 -1.926150000000e-01 -2.500000000000e-02 -3.775254000000e-01 -4.900000000000e-02 -4.622760000000e-01 -6.000000000000e-02 5.855496000000e-01 7.600000000000e-02 -1.463874000000e-01 -1.900000000000e-02 1.695012000000e-01 2.200000000000e-02 -1.463874000000e-01 -1.900000000000e-02 -6.934140000000e-02 -9.000000000000e-03 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -6.394818000000e-01 -8.300000000000e-02 -2.773656000000e-01 -3.600000000000e-02 1.463874000000e-01 1.900000000000e-02 2.773656000000e-01 3.600000000000e-02 -1.386828000000e-01 -1.800000000000e-02 -1.540920000000e-02 -2.000000000000e-03 1.540920000000e-02 2.000000000000e-03 -5.547312000000e-01 -7.200000000000e-02 6.163680000000e-02 8.000000000000e-03 2.927748000000e-01 3.800000000000e-02 -3.081840000000e-02 -4.000000000000e-03 3.852300000000e-02 5.000000000000e-03 2.234334000000e-01 2.900000000000e-02 1.764353400000e+00 2.290000000000e-01 3.467070000000e-01 4.500000000000e-02 1.132576200000e+00 1.470000000000e-01 6.163680000000e-02 8.000000000000e-03 1.463874000000e-01 1.900000000000e-02 1.617966000000e-01 2.100000000000e-02 -2.003196000000e-01 -2.600000000000e-02 -9.476658000000e-01 -1.230000000000e-01 -1.171099200000e+00 -1.520000000000e-01 -1.001598000000e+00 -1.300000000000e-01 2.157288000000e-01 2.800000000000e-02 1.024711800000e+00 1.330000000000e-01 -1.001598000000e-01 -1.300000000000e-02 6.548910000000e-01 8.500000000000e-02 2.927748000000e-01 3.800000000000e-02 1.571738400000e+00 2.040000000000e-01 8.629152000000e-01 1.120000000000e-01 6.009588000000e-01 7.800000000000e-02 -1.078644000000e-01 -1.400000000000e-02 1.386828000000e+01 1.800000000000e+00 9.476658000000e-01 1.230000000000e-01 + 24 EWK_RAP 2.200000000000e+00 1.768900000000e+04 7.000000000000e+03 3.287100000000e+02 1.041681990000e+01 4.306429710000e+00 1.310100000000e+00 6.574200000000e-03 2.000000000000e-03 3.615810000000e-01 1.100000000000e-01 -2.498196000000e-01 -7.600000000000e-02 2.005131000000e-01 6.100000000000e-02 6.935781000000e-01 2.110000000000e-01 4.634811000000e-01 1.410000000000e-01 3.221358000000e-01 9.800000000000e-02 -9.138138000000e-01 -2.780000000000e-01 -5.292231000000e-01 -1.610000000000e-01 -3.089874000000e-01 -9.400000000000e-02 -1.249098000000e-01 -3.800000000000e-02 1.281969000000e-01 3.900000000000e-02 -0.000000000000e+00 -0.000000000000e+00 -7.231620000000e-02 -2.200000000000e-02 1.643550000000e-02 5.000000000000e-03 5.259360000000e-02 1.600000000000e-02 1.314840000000e-01 4.000000000000e-02 1.643550000000e-02 5.000000000000e-03 -8.217750000000e-02 -2.500000000000e-02 7.231620000000e-02 2.200000000000e-02 -4.930650000000e-02 -1.500000000000e-02 -1.972260000000e-02 -6.000000000000e-03 5.259360000000e-02 1.600000000000e-02 1.314840000000e-02 4.000000000000e-03 -9.203880000000e-02 -2.800000000000e-02 7.231620000000e-02 2.200000000000e-02 -4.601940000000e-02 -1.400000000000e-02 4.601940000000e-02 1.400000000000e-02 -6.574200000000e-03 -2.000000000000e-03 6.574200000000e-03 2.000000000000e-03 9.861300000000e-03 3.000000000000e-03 -6.574200000000e-03 -2.000000000000e-03 -1.972260000000e-02 -6.000000000000e-03 3.944520000000e-02 1.200000000000e-02 2.300970000000e-02 7.000000000000e-03 -8.217750000000e-02 -2.500000000000e-02 -6.574200000000e-02 -2.000000000000e-02 1.084743000000e-01 3.300000000000e-02 2.629680000000e-02 8.000000000000e-03 -1.019001000000e-01 -3.100000000000e-02 -1.380582000000e-01 -4.200000000000e-02 -9.861300000000e-03 -3.000000000000e-03 7.560330000000e-02 2.300000000000e-02 -1.314840000000e-02 -4.000000000000e-03 -5.916780000000e-02 -1.800000000000e-02 -9.861300000000e-03 -3.000000000000e-03 -1.643550000000e-02 -5.000000000000e-03 -1.643550000000e-02 -5.000000000000e-03 -7.560330000000e-02 -2.300000000000e-02 -4.601940000000e-02 -1.400000000000e-02 1.821053400000e+00 5.540000000000e-01 1.492343400000e+00 4.540000000000e-01 8.414976000000e-01 2.560000000000e-01 1.544937000000e+00 4.700000000000e-01 6.870039000000e-01 2.090000000000e-01 -1.643550000000e-02 -5.000000000000e-03 -9.861300000000e-03 -3.000000000000e-03 1.840776000000e-01 5.600000000000e-02 -2.629680000000e-02 -8.000000000000e-03 -3.287100000000e-02 -1.000000000000e-02 -2.563938000000e-01 -7.800000000000e-02 2.070873000000e-01 6.300000000000e-02 4.043133000000e-01 1.230000000000e-01 -1.479195000000e-01 -4.500000000000e-02 1.084743000000e-01 3.300000000000e-02 1.281969000000e-01 3.900000000000e-02 6.738555000000e-01 2.050000000000e-01 8.875170000000e-02 2.700000000000e-02 8.710815000000e-01 2.650000000000e-01 9.861300000000e-03 3.000000000000e-03 4.897779000000e-01 1.490000000000e-01 -9.203880000000e-02 -2.800000000000e-02 5.062134000000e-01 1.540000000000e-01 1.051872000000e-01 3.200000000000e-02 -2.958390000000e-02 -9.000000000000e-03 1.840776000000e-01 5.600000000000e-02 5.916780000000e-02 1.800000000000e-02 -2.629680000000e-02 -8.000000000000e-03 5.423715000000e-01 1.650000000000e-01 6.574200000000e-03 2.000000000000e-03 -7.560330000000e-02 -2.300000000000e-02 5.259360000000e-02 1.600000000000e-02 3.287100000000e-02 1.000000000000e-02 -2.268099000000e-01 -6.900000000000e-02 -1.051872000000e-01 -3.200000000000e-02 3.878778000000e-01 1.180000000000e-01 -1.479195000000e-01 -4.500000000000e-02 2.465325000000e-01 7.500000000000e-02 -2.070873000000e-01 -6.300000000000e-02 -6.574200000000e-02 -2.000000000000e-02 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -0.000000000000e+00 -0.000000000000e+00 -3.287100000000e-01 -1.000000000000e-01 -1.150485000000e-01 -3.500000000000e-02 5.916780000000e-02 1.800000000000e-02 5.259360000000e-02 1.600000000000e-02 -3.615810000000e-02 -1.100000000000e-02 -2.958390000000e-02 -9.000000000000e-03 -1.643550000000e-02 -5.000000000000e-03 -2.563938000000e-01 -7.800000000000e-02 -3.615810000000e-02 -1.100000000000e-02 3.944520000000e-02 1.200000000000e-02 -1.643550000000e-02 -5.000000000000e-03 3.287100000000e-03 1.000000000000e-03 8.546460000000e-02 2.600000000000e-02 6.935781000000e-01 2.110000000000e-01 8.546460000000e-02 2.600000000000e-02 3.944520000000e-01 1.200000000000e-01 -6.574200000000e-03 -2.000000000000e-03 5.588070000000e-02 1.700000000000e-02 4.930650000000e-02 1.500000000000e-02 -1.314840000000e-01 -4.000000000000e-02 -3.550068000000e-01 -1.080000000000e-01 -4.470456000000e-01 -1.360000000000e-01 -4.437585000000e-01 -1.350000000000e-01 5.588070000000e-02 1.700000000000e-02 4.700553000000e-01 1.430000000000e-01 -6.245490000000e-02 -1.900000000000e-02 3.188487000000e-01 9.700000000000e-02 1.281969000000e-01 3.900000000000e-02 7.428846000000e-01 2.260000000000e-01 3.747294000000e-01 1.140000000000e-01 3.287100000000e-02 1.000000000000e-02 -2.728293000000e-01 -8.300000000000e-02 5.916780000000e+00 1.800000000000e+00 7.658943000000e-01 2.330000000000e-01 diff --git a/nnpdfcpp/data/commondata/DATA_ATLASZRAP36PB.dat b/nnpdfcpp/data/commondata/DATA_ATLASZRAP36PB.dat new file mode 100644 index 0000000000..abd104941d --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_ATLASZRAP36PB.dat @@ -0,0 +1,9 @@ +ATLASZRAP36PB 32 8 + 1 EWK_RAP 2.000000000000e-01 8.315178393760e+03 7.000000000000e+03 1.316873490000e+05 1.922635295400e+03 7.769553591000e+02 5.900000000000e-01 4.609057215000e+03 3.500000000000e+00 3.818933121000e+02 2.900000000000e-01 1.185186141000e+02 9.000000000000e-02 5.267493960000e+01 4.000000000000e-02 2.502059631000e+02 1.900000000000e-01 9.218114430000e+01 7.000000000000e-02 -1.711935537000e+02 -1.300000000000e-01 6.584367450000e+01 5.000000000000e-02 -9.218114430000e+01 -7.000000000000e-02 -3.950620470000e+01 -3.000000000000e-02 1.580248188000e+02 1.200000000000e-01 -1.316873490000e+02 -1.000000000000e-01 7.901240940000e+01 6.000000000000e-02 -3.687245772000e+02 -2.800000000000e-01 -2.633746980000e+01 -2.000000000000e-02 9.218114430000e+01 7.000000000000e-02 -1.316873490000e+02 -1.000000000000e-01 -6.979429497000e+02 -5.300000000000e-01 9.218114430000e+01 7.000000000000e-02 -2.106997584000e+02 -1.600000000000e-01 4.477369866000e+02 3.400000000000e-01 -1.975310235000e+02 -1.500000000000e-01 -1.316873490000e+02 -1.000000000000e-01 6.584367450000e+01 5.000000000000e-02 2.897121678000e+02 2.200000000000e-01 2.238684933000e+02 1.700000000000e-01 2.370372282000e+02 1.800000000000e-01 0.000000000000e+00 0.000000000000e+00 6.584367450000e+02 5.000000000000e-01 2.238684933000e+02 1.700000000000e-01 -1.580248188000e+02 -1.200000000000e-01 + 2 EWK_RAP 6.000000000000e-01 8.315178393760e+03 7.000000000000e+03 1.318605280000e+05 1.938349761600e+03 6.593026400000e+02 5.000000000000e-01 4.615118480000e+03 3.500000000000e+00 3.823955312000e+02 2.900000000000e-01 1.186744752000e+02 9.000000000000e-02 5.274421120000e+01 4.000000000000e-02 2.505350032000e+02 1.900000000000e-01 9.230236960000e+01 7.000000000000e-02 -1.318605280000e+02 -1.000000000000e-01 5.274421120000e+01 4.000000000000e-02 -1.186744752000e+02 -9.000000000000e-02 -2.637210560000e+01 -2.000000000000e-02 1.714186864000e+02 1.300000000000e-01 -1.318605280000e+02 -1.000000000000e-01 7.911631680000e+01 6.000000000000e-02 -3.823955312000e+02 -2.900000000000e-01 1.318605280000e+01 1.000000000000e-02 7.911631680000e+01 6.000000000000e-02 -1.054884224000e+02 -8.000000000000e-02 -7.252329040000e+02 -5.500000000000e-01 2.637210560000e+01 2.000000000000e-02 -2.109768448000e+02 -1.600000000000e-01 4.219536896000e+02 3.200000000000e-01 -2.241628976000e+02 -1.700000000000e-01 -1.977907920000e+02 -1.500000000000e-01 2.637210560000e+01 2.000000000000e-02 3.032792144000e+02 2.300000000000e-01 2.109768448000e+02 1.600000000000e-01 3.296513200000e+02 2.500000000000e-01 -1.318605280000e+01 -1.000000000000e-02 6.197444816000e+02 4.700000000000e-01 2.373489504000e+02 1.800000000000e-01 -1.450465808000e+02 -1.100000000000e-01 + 3 EWK_RAP 1.000000000000e+00 8.315178393760e+03 7.000000000000e+03 1.281626470000e+05 1.922439705000e+03 6.023644409000e+02 4.700000000000e-01 4.485692645000e+03 3.500000000000e+00 3.716716763000e+02 2.900000000000e-01 1.153463823000e+02 9.000000000000e-02 5.126505880000e+01 4.000000000000e-02 2.435090293000e+02 1.900000000000e-01 6.408132350000e+01 5.000000000000e-02 -1.025301176000e+02 -8.000000000000e-02 6.408132350000e+01 5.000000000000e-02 -8.971385290000e+01 -7.000000000000e-02 -6.408132350000e+01 -5.000000000000e-02 1.409789117000e+02 1.100000000000e-01 -1.281626470000e+02 -1.000000000000e-01 7.689758820000e+01 6.000000000000e-02 -2.178764999000e+02 -1.700000000000e-01 -3.844879410000e+01 -3.000000000000e-02 1.281626470000e+01 1.000000000000e-02 -1.025301176000e+02 -8.000000000000e-02 -5.510993821000e+02 -4.300000000000e-01 3.844879410000e+01 3.000000000000e-02 -1.666114411000e+02 -1.300000000000e-01 2.819578234000e+02 2.200000000000e-01 -1.922439705000e+02 -1.500000000000e-01 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 2.947740881000e+02 2.300000000000e-01 1.537951764000e+02 1.200000000000e-01 3.588554116000e+02 2.800000000000e-01 -5.126505880000e+01 -4.000000000000e-02 5.767319115000e+02 4.500000000000e-01 2.050602352000e+02 1.600000000000e-01 -1.794277058000e+02 -1.400000000000e-01 + 4 EWK_RAP 1.400000000000e+00 8.315178393760e+03 7.000000000000e+03 1.204409010000e+05 1.939098506100e+03 5.419840545000e+02 4.500000000000e-01 4.215431535000e+03 3.500000000000e+00 3.492786129000e+02 2.900000000000e-01 1.083968109000e+02 9.000000000000e-02 4.817636040000e+01 4.000000000000e-02 2.288377119000e+02 1.900000000000e-01 4.817636040000e+01 4.000000000000e-02 -6.022045050000e+01 -5.000000000000e-02 4.817636040000e+01 4.000000000000e-02 -1.083968109000e+02 -9.000000000000e-02 1.204409010000e+01 1.000000000000e-02 9.635272080000e+01 8.000000000000e-02 -6.022045050000e+01 -5.000000000000e-02 1.806613515000e+02 1.500000000000e-01 -1.806613515000e+02 -1.500000000000e-01 6.022045050000e+01 5.000000000000e-02 3.613227030000e+01 3.000000000000e-02 -3.613227030000e+01 -3.000000000000e-02 -4.456313337000e+02 -3.700000000000e-01 8.430863070000e+01 7.000000000000e-02 -7.226454060000e+01 -6.000000000000e-02 3.613227030000e+02 3.000000000000e-01 -1.083968109000e+02 -9.000000000000e-02 -3.011022525000e+02 -2.500000000000e-01 -2.770140723000e+02 -2.300000000000e-01 1.927054416000e+02 1.600000000000e-01 1.686172614000e+02 1.400000000000e-01 2.167936218000e+02 1.800000000000e-01 -4.817636040000e+01 -4.000000000000e-02 6.262926852000e+02 5.200000000000e-01 1.565731713000e+02 1.300000000000e-01 -1.445290812000e+02 -1.200000000000e-01 + 5 EWK_RAP 1.800000000000e+00 8.315178393760e+03 7.000000000000e+03 1.154900190000e+05 2.125016349600e+03 7.275871197000e+02 6.300000000000e-01 4.042150665000e+03 3.500000000000e+00 3.349210551000e+02 2.900000000000e-01 1.039410171000e+02 9.000000000000e-02 4.619600760000e+01 4.000000000000e-02 2.194310361000e+02 1.900000000000e-01 1.154900190000e+01 1.000000000000e-02 -4.619600760000e+01 -4.000000000000e-02 5.774500950000e+01 5.000000000000e-02 -9.239201520000e+01 -8.000000000000e-02 5.774500950000e+01 5.000000000000e-02 3.464700570000e+01 3.000000000000e-02 1.154900190000e+01 1.000000000000e-02 3.811170627000e+02 3.300000000000e-01 1.732350285000e+02 1.500000000000e-01 -1.154900190000e+01 -1.000000000000e-02 2.309800380000e+01 2.000000000000e-02 -1.039410171000e+02 -9.000000000000e-02 -4.273130703000e+02 -3.700000000000e-01 1.963330323000e+02 1.700000000000e-01 -8.084301330000e+01 -7.000000000000e-02 4.735090779000e+02 4.100000000000e-01 4.619600760000e+01 4.000000000000e-02 -5.197050855000e+02 -4.500000000000e-01 -5.659010931000e+02 -4.900000000000e-01 0.000000000000e+00 0.000000000000e+00 9.239201520000e+01 8.000000000000e-02 2.771760456000e+02 2.400000000000e-01 -6.929401140000e+01 -6.000000000000e-02 7.622341254000e+02 6.600000000000e-01 -6.929401140000e+01 -6.000000000000e-02 -1.270390209000e+02 -1.100000000000e-01 + 6 EWK_RAP 2.200000000000e+00 8.315178393760e+03 7.000000000000e+03 1.072283620000e+05 2.755768903400e+03 1.469028559400e+03 1.370000000000e+00 3.752992670000e+03 3.500000000000e+00 3.109622498000e+02 2.900000000000e-01 9.650552580000e+01 9.000000000000e-02 4.289134480000e+01 4.000000000000e-02 2.037338878000e+02 1.900000000000e-01 0.000000000000e+00 0.000000000000e+00 -7.505985340000e+01 -7.000000000000e-02 9.650552580000e+01 9.000000000000e-02 -2.037338878000e+02 -1.900000000000e-01 1.930110516000e+02 1.800000000000e-01 -5.361418100000e+01 -5.000000000000e-02 1.393968706000e+02 1.300000000000e-01 8.149355512000e+02 7.600000000000e-01 1.930110516000e+02 1.800000000000e-01 2.466252326000e+02 2.300000000000e-01 2.466252326000e+02 2.300000000000e-01 4.289134480000e+01 4.000000000000e-02 -6.219244996000e+02 -5.800000000000e-01 1.822882154000e+02 1.700000000000e-01 -6.433701720000e+01 -6.000000000000e-02 7.077071892000e+02 6.600000000000e-01 1.393968706000e+02 1.300000000000e-01 -1.233126163000e+03 -1.150000000000e+00 -9.114410770000e+02 -8.500000000000e-01 1.608425430000e+02 1.500000000000e-01 1.072283620000e+01 1.000000000000e-02 7.398756978000e+02 6.900000000000e-01 -2.144567240000e+02 -2.000000000000e-01 6.648158444000e+02 6.200000000000e-01 -1.501197068000e+02 -1.400000000000e-01 -2.144567240000e+02 -2.000000000000e-01 + 7 EWK_RAP 2.600000000000e+00 8.315178393760e+03 7.000000000000e+03 9.390376600000e+04 3.042482018400e+03 3.577733484600e+03 3.810000000000e+00 3.286631810000e+03 3.500000000000e+00 2.723209214000e+02 2.900000000000e-01 8.451338940000e+01 9.000000000000e-02 3.756150640000e+01 4.000000000000e-02 1.784171554000e+02 1.900000000000e-01 5.634225960000e+01 6.000000000000e-02 -5.634225960000e+01 -6.000000000000e-02 5.446418428000e+02 5.800000000000e-01 -3.943958172000e+02 -4.200000000000e-01 5.728129726000e+02 6.100000000000e-01 -3.756150640000e+02 -4.000000000000e-01 5.915937258000e+02 6.300000000000e-01 2.122225111600e+03 2.260000000000e+00 1.032941426000e+02 1.100000000000e-01 1.089283685600e+03 1.160000000000e+00 1.108064438800e+03 1.180000000000e+00 2.159786618000e+02 2.300000000000e-01 -7.700108812000e+02 -8.200000000000e-01 4.225669470000e+02 4.500000000000e-01 2.817112980000e+01 3.000000000000e-02 -2.817112980000e+01 -3.000000000000e-02 3.756150640000e+01 4.000000000000e-02 -2.629305448000e+02 -2.800000000000e-01 -8.451338940000e+01 -9.000000000000e-02 4.601284534000e+02 4.900000000000e-01 2.441497916000e+02 2.600000000000e-01 2.817112980000e+01 3.000000000000e-02 -1.784171554000e+02 -1.900000000000e-01 6.573263620000e+02 7.000000000000e-01 -1.577583268800e+03 -1.680000000000e+00 -1.971979086000e+02 -2.100000000000e-01 + 8 EWK_RAP 3.200000000000e+00 8.315178393760e+03 7.000000000000e+03 5.437820600000e+04 2.289322472600e+03 2.376327602200e+03 4.370000000000e+00 1.903237210000e+03 3.500000000000e+00 1.576967974000e+02 2.900000000000e-01 4.894038540000e+01 9.000000000000e-02 2.175128240000e+01 4.000000000000e-02 9.788077080000e+01 1.800000000000e-01 9.788077080000e+01 1.800000000000e-01 -1.631346180000e+01 -3.000000000000e-02 9.570564256000e+02 1.760000000000e+00 -6.307871896000e+02 -1.160000000000e+00 6.960410368000e+02 1.280000000000e+00 -5.057173158000e+02 -9.300000000000e-01 1.016872452200e+03 1.870000000000e+00 2.702596838200e+03 4.970000000000e+00 -2.120750034000e+02 -3.900000000000e-01 1.734664771400e+03 3.190000000000e+00 1.468211562000e+03 2.700000000000e+00 8.918025784000e+02 1.640000000000e+00 -1.060375017000e+03 -1.950000000000e+00 3.045179536000e+02 5.600000000000e-01 2.011993622000e+02 3.700000000000e-01 -4.513391098000e+02 -8.300000000000e-01 -1.631346180000e+01 -3.000000000000e-02 7.558570634000e+02 1.390000000000e+00 4.241500068000e+02 7.800000000000e-01 1.522589768000e+02 2.800000000000e-01 1.413833356000e+02 2.600000000000e-01 -6.144737278000e+02 -1.130000000000e+00 -2.175128240000e+01 -4.000000000000e-02 1.413833356000e+02 2.600000000000e-01 -2.501397476000e+02 -4.600000000000e-01 -1.141942326000e+02 -2.100000000000e-01 diff --git a/nnpdfcpp/data/commondata/DATA_ATLAS_W_TOT_13TEV.dat b/nnpdfcpp/data/commondata/DATA_ATLAS_W_TOT_13TEV.dat new file mode 100644 index 0000000000..09f73eb223 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_ATLAS_W_TOT_13TEV.dat @@ -0,0 +1,3 @@ +ATLAS_W_TOT_13TEV 4 2 + 1 INC 0.000000000000e+00 8.038500000000e+01 1.300000000000e+01 3.500000000000e+06 1.000000000000e+04 6.804831649279e+04 1.944237614080e+00 1.641421688915e+04 4.689776254043e-01 -1.031564236735e+01 -2.947326390672e-04 7.000000000000e+04 2.000000000000e+00 + 2 INC 0.000000000000e+00 8.038500000000e+01 1.300000000000e+01 4.530000000000e+06 1.000000000000e+04 8.912329915071e+04 1.967401747256e+00 -1.253128092916e+04 -2.766287180831e-01 -6.742972668559e+01 -1.488514937872e-03 1.000000000000e+05 2.207505518764e+00 diff --git a/nnpdfcpp/data/commondata/DATA_ATLAS_Z_TOT_13TEV.dat b/nnpdfcpp/data/commondata/DATA_ATLAS_Z_TOT_13TEV.dat new file mode 100644 index 0000000000..4976500e86 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_ATLAS_Z_TOT_13TEV.dat @@ -0,0 +1,2 @@ +ATLAS_Z_TOT_13TEV 4 1 + 1 INC 0.000000000000e+00 9.118760000000e+01 1.300000000000e+01 7.790000000000e+05 3.000000000000e+03 1.139539991217e+03 1.462824122230e-01 -1.147189778108e+02 -1.472644131076e-02 5.889676405758e+03 7.560560212783e-01 1.600000000000e+04 2.053915275995e+00 diff --git a/nnpdfcpp/data/commondata/DATA_LHCBWMU7TEV.dat b/nnpdfcpp/data/commondata/DATA_LHCBWMU7TEV.dat new file mode 100644 index 0000000000..c63f8b3489 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_LHCBWMU7TEV.dat @@ -0,0 +1,17 @@ +LHCBWMU7TEV 35 16 + 1 EWK_RAP 2.125000000000e+00 6.463838404000e+03 7.000000000000e+03 1.922000000000e+05 1.200000000000e+03 2.989058480120e+03 1.555181311197e+00 1.741235273420e+03 9.059496739957e-01 -2.502509253267e+02 -1.302033950711e-01 1.923129135381e+02 1.000587479387e-01 1.091852381188e+02 5.680813637815e-02 -1.025660890279e+02 -5.336425027466e-02 -1.104461653422e+02 -5.746418592204e-02 -9.069732310441e+01 -4.718903387326e-02 -1.302139122911e+02 -6.774917392879e-02 -3.443802792048e+02 -1.791780849141e-01 -5.222339273468e+01 -2.717138019494e-02 5.306781238154e+01 2.761072444409e-02 1.434556533549e+00 7.463873743749e-04 -6.801894197503e+00 -3.538966804112e-03 2.441106994931e+00 1.270086886020e-03 1.524675578507e+00 7.932755351234e-04 4.789441759398e-01 2.491905181789e-04 -3.726763257367e-02 -1.939002735363e-05 6.207631613405e-05 3.229777114155e-08 5.144752523450e-05 2.676770303564e-08 -4.978535045625e-04 -2.590288785445e-07 -1.332543857629e-03 -6.933110601606e-07 3.153912505699e-02 1.640953436888e-05 1.090011576442e-03 5.671236089708e-07 5.255700735596e-04 2.734495700102e-07 -8.821259852596e-04 -4.589625313526e-07 -1.956012480794e-02 -1.017696399997e-05 -2.273515254326e-02 -1.182890350846e-05 7.187191336324e-02 3.739433577692e-05 -7.576816752144e-03 -3.942152316412e-06 1.146778633281e-03 5.966590183562e-07 -5.970827174256e-02 -3.106569809706e-05 -6.654182936885e-03 -3.462113910970e-06 2.000000000000e+03 1.040582726327e+00 3.300000000000e+03 1.716961498439e+00 + 2 EWK_RAP 2.375000000000e+00 6.463838404000e+03 7.000000000000e+03 1.788000000000e+05 9.000000000000e+02 -1.771220332867e+03 -9.906153986954e-01 2.177614555246e+03 1.217905232241e+00 1.184982769207e+03 6.627420409437e-01 4.615478923378e+02 2.581364051106e-01 1.337658587596e+02 7.481312011165e-02 -2.271367328176e+01 -1.270339669002e-02 -2.089766517340e+01 -1.168773219989e-02 -7.501098488920e+00 -4.195245239888e-03 1.304455757005e+01 7.295613853496e-03 -2.233613584480e+02 -1.249224599821e-01 1.959079428952e+02 1.095682007244e-01 -3.482826694483e+01 -1.947889650158e-02 -6.349481139807e+01 -3.551163948438e-02 2.814939334331e+01 1.574350858127e-02 1.179622725077e+01 6.597442533989e-03 6.619959021199e+00 3.702437931319e-03 4.660844529208e-01 2.606736313875e-04 -2.452777622605e-02 -1.371799565215e-05 6.435082314041e-05 3.599039325526e-08 1.532612796747e-04 8.571659937061e-08 -4.990479802595e-04 -2.791096086463e-07 -3.561554370899e-03 -1.991920789094e-06 -9.260786790773e-03 -5.179410956808e-06 3.726237000544e-03 2.084025168089e-06 7.849551180122e-03 4.390129295370e-06 -3.652881697629e-02 -2.042998712320e-05 -1.176959484568e-02 -6.582547452840e-06 4.908830761368e-03 2.745431074591e-06 2.144099412842e-02 1.199160745438e-05 -1.149407568064e-02 -6.428453960090e-06 1.316935152189e-02 7.365409128575e-06 -6.059498306499e-02 -3.388981155760e-05 2.772306047150e-02 1.550506737779e-05 1.900000000000e+03 1.062639821029e+00 3.100000000000e+03 1.733780760626e+00 + 3 EWK_RAP 2.625000000000e+00 6.463838404000e+03 7.000000000000e+03 1.543000000000e+05 8.000000000000e+02 -4.576423183868e+02 -2.965925589027e-01 8.102620334429e+02 5.251212141561e-01 -1.155296667958e+01 -7.487340686701e-03 -1.818587804309e+03 -1.178605187498e+00 3.510991721698e+02 2.275432094425e-01 -1.095741310016e+02 -7.101369475154e-02 -5.948870207152e+01 -3.855392227578e-02 -3.995856993978e+01 -2.589667526882e-02 -3.092842563875e+01 -2.004434584494e-02 -5.642192277027e+01 -3.656637898267e-02 -2.098423901684e+02 -1.359963643346e-01 -1.971176054834e+02 -1.277495822964e-01 -8.766815367247e+01 -5.681669064969e-02 3.495502658944e+01 2.265393816555e-02 1.364098039849e+01 8.840557614055e-03 1.040630935059e+01 6.744205671155e-03 2.102782614228e-01 1.362788473252e-04 9.349020488857e-02 6.058989299324e-05 1.569549779935e-04 1.017206597495e-07 -1.512604916090e-04 -9.803013066040e-08 -4.488871631265e-04 -2.909184466147e-07 1.540468282218e-03 9.983592237315e-07 -6.142634454431e-03 -3.980968538192e-06 2.520891253966e-03 1.633759723892e-06 6.458823244352e-03 4.185886742937e-06 -5.292251395058e-03 -3.429845362967e-06 -1.655491247243e-03 -1.072904243190e-06 -3.891746499557e-03 -2.522194750199e-06 -1.159883451701e-02 -7.517067088144e-06 1.835668883996e-02 1.189675232661e-05 -2.111903605138e-02 -1.368699679286e-05 -4.574055894155e-03 -2.964391376640e-06 2.447135548580e-03 1.585959525975e-06 1.600000000000e+03 1.036941023979e+00 2.600000000000e+03 1.685029163966e+00 + 4 EWK_RAP 2.875000000000e+00 6.463838404000e+03 7.000000000000e+03 1.228000000000e+05 7.000000000000e+02 4.394366915739e+02 3.578474687084e-01 4.762649345625e+01 3.878378945948e-02 3.951470343649e+02 3.217809726099e-01 -3.201665755766e+02 -2.607219670819e-01 -1.354648278639e+03 -1.103133777394e+00 -3.322987152617e+02 -2.706015596594e-01 -1.177891074280e+02 -9.591946858957e-02 -8.324115448246e+01 -6.778595641894e-02 -7.473780927882e+01 -6.086140820751e-02 2.411626008280e+01 1.963864827589e-02 1.679651742934e+02 1.367794578937e-01 -3.004888602396e+02 -2.446977689248e-01 1.067870758964e+02 8.696015952472e-02 -5.871616154918e+01 -4.781446380226e-02 1.251659817384e+01 1.019266952267e-02 7.086159625744e-01 5.770488294580e-04 3.062737334365e-01 2.494085777170e-04 1.196466526096e-01 9.743212753221e-05 2.979868643353e-04 2.426603129766e-07 6.937506320305e-05 5.649435114255e-08 4.997181998828e-04 4.069366448557e-07 2.610989408866e-03 2.126212873669e-06 -3.638286984318e-03 -2.962774417197e-06 1.370512003667e-03 1.116052120250e-06 -1.199940979315e-02 -9.771506346217e-06 -5.999996447727e-02 -4.885990592612e-05 1.466067985028e-02 1.193866437320e-05 -2.676307209742e-03 -2.179403265262e-06 -1.488632204947e-02 -1.212241209240e-05 6.579970173707e-03 5.358281900413e-06 3.430374709980e-02 2.793464747540e-05 1.391503242380e-02 1.133145962850e-05 1.918461581069e-02 1.562265131164e-05 1.300000000000e+03 1.058631921824e+00 2.100000000000e+03 1.710097719870e+00 + 5 EWK_RAP 3.125000000000e+00 6.463838404000e+03 7.000000000000e+03 9.430000000000e+04 6.000000000000e+02 -2.480143699037e+02 -2.630056944896e-01 4.044526266707e+02 4.288999222383e-01 -3.251636827425e+01 -3.448183274046e-02 -1.673874232398e+02 -1.775052208269e-01 -2.565823885633e+02 -2.720916103535e-01 1.079538553819e+03 1.144791679554e+00 -1.676189474192e+02 -1.777507395750e-01 -6.130136217664e+01 -6.500674674087e-02 -4.428445403691e+01 -4.696124500202e-02 -8.248578437702e+01 -8.747166954085e-02 -9.474052086833e+01 -1.004671483227e-01 9.929809238617e+00 1.053002040150e-02 3.714846574035e+02 3.939391913080e-01 1.299800239433e+02 1.378367168010e-01 1.810371837383e+00 1.919800463821e-03 7.471091210112e-01 7.922684210087e-04 4.214025328085e-01 4.468743720133e-04 1.864689192430e-01 1.977401052418e-04 2.585137555144e-04 2.741397195274e-07 -2.686626754804e-04 -2.849020948891e-07 2.282232695397e-03 2.420183134037e-06 4.871900744122e-03 5.166384670331e-06 6.226501355942e-03 6.602864640448e-06 -1.038314900457e-02 -1.101076246508e-05 -1.807841434328e-02 -1.917117109574e-05 2.014717840695e-02 2.136498240397e-05 2.079639175233e-02 2.205343770130e-05 3.580261145077e-02 3.796671415776e-05 -5.079231305694e-02 -5.386247407947e-05 2.245470721011e-02 2.381199067880e-05 3.034541572969e-02 3.217965612904e-05 6.074075639357e-02 6.441225492425e-05 -3.312993954191e-02 -3.513249156088e-05 1.000000000000e+03 1.060445387063e+00 1.600000000000e+03 1.696712619300e+00 + 6 EWK_RAP 3.375000000000e+00 6.463838404000e+03 7.000000000000e+03 6.160000000000e+04 5.000000000000e+02 -2.949456461177e+02 -4.788078670742e-01 2.955199869993e+02 4.797402386352e-01 -1.025970883509e+02 -1.665537148554e-01 -5.426177319059e+01 -8.808729414057e-02 -9.647469105130e+01 -1.566147582002e-01 7.128275501730e+01 1.157187581450e-01 7.938038167913e+01 1.288642559726e-01 1.353508088116e+02 2.197253389799e-01 5.539962584105e+02 8.993445753418e-01 -2.053779905758e+02 -3.334058288567e-01 -1.560822901884e+02 -2.533803412150e-01 4.951882509019e+01 8.038770306849e-02 1.176773581820e+02 1.910346723734e-01 -4.305461136826e+02 -6.989384962379e-01 8.982562355331e+01 1.458208174567e-01 1.532178156461e+00 2.487302202048e-03 3.070352733829e-01 4.984338853619e-04 1.140221544526e-01 1.851009000854e-04 1.040765834683e-04 1.689554926433e-07 2.739372589337e-04 4.447033424248e-07 1.859797550420e-04 3.019151867564e-07 4.813306838651e-03 7.813809803005e-06 -9.659092259346e-03 -1.568034457686e-05 -1.474431202718e-02 -2.393557147269e-05 -5.971694635339e-02 -9.694309472952e-05 5.667357161732e-02 9.200255132682e-05 2.756891290459e-02 4.475472874122e-05 6.756965202421e-02 1.096909935458e-04 -1.243421472897e-02 -2.018541352106e-05 4.258458900406e-02 6.913082630529e-05 1.286711853948e-01 2.088817944721e-04 4.053603386903e-02 6.580524978739e-05 -3.886516500356e-02 -6.309280033045e-05 7.000000000000e+02 1.136363636364e+00 1.100000000000e+03 1.785714285714e+00 + 7 EWK_RAP 3.750000000000e+00 6.463838404000e+03 7.000000000000e+03 6.000000000000e+04 5.000000000000e+02 -5.215832457246e+01 -8.693054095410e-02 1.451742117800e+02 2.419570196333e-01 2.506909095215e+01 4.178181825358e-02 -7.241121212245e+01 -1.206853535374e-01 -7.203684627811e+01 -1.200614104635e-01 7.437215030877e+01 1.239535838480e-01 2.533756341324e+02 4.222927235540e-01 3.510314038080e+02 5.850523396801e-01 -1.237208583937e+02 -2.062014306562e-01 -9.359255615563e+01 -1.559875935927e-01 -2.939175309319e+01 -4.898625515532e-02 -3.320333897179e+01 -5.533889828632e-02 2.010470175527e+01 3.350783625879e-02 -9.692472202516e+01 -1.615412033753e-01 -4.757595604893e+02 -7.929326008154e-01 -3.262631985572e+00 -5.437719975953e-03 2.864055062154e-01 4.773425103591e-04 1.666453127670e-01 2.777421879450e-04 -1.127344020794e-03 -1.878906701323e-06 2.392934653373e-04 3.988224422289e-07 3.928978181555e-03 6.548296969259e-06 9.329597580319e-03 1.554932930053e-05 3.175092411472e-03 5.291820685787e-06 -3.148695227275e-02 -5.247825378792e-05 -4.929865689624e-02 -8.216442816041e-05 4.485024408868e-02 7.475040681447e-05 1.198041017363e-02 1.996735028938e-05 1.547081675185e-01 2.578469458642e-04 -2.694235501937e-02 -4.490392503228e-05 8.426679128530e-02 1.404446521422e-04 1.394803788448e-01 2.324672980747e-04 7.062926208545e-02 1.177154368091e-04 3.443581374865e-02 5.739302291441e-05 6.000000000000e+02 1.000000000000e+00 1.000000000000e+03 1.666666666667e+00 + 8 EWK_RAP 4.250000000000e+00 6.463838404000e+03 7.000000000000e+03 1.430000000000e+04 4.000000000000e+02 -4.472911199275e+01 -3.127909929563e-01 7.035727027289e+01 4.920088830272e-01 -8.053619187950e+00 -5.631901530035e-02 -2.409900730299e+01 -1.685245265944e-01 -1.134947405395e+01 -7.936695142623e-02 1.941148834440e+01 1.357446737371e-01 5.222811490581e+01 3.652315727679e-01 -9.673620787604e+00 -6.764769781541e-02 -8.719120366096e+00 -6.097286969298e-02 -2.256659133422e+01 -1.578083310085e-01 -1.113933997221e+01 -7.789748232313e-02 -1.812566959417e+01 -1.267529342249e-01 -1.501157291554e+01 -1.049760343744e-01 2.825573537002e+00 1.975925550351e-02 1.216397883308e+01 8.506278904254e-02 -3.842619544658e+02 -2.687146534726e+00 -1.439278870582e-01 -1.006488720687e-03 -1.913452738465e-02 -1.338078838087e-04 -2.974835675338e-03 -2.080304668068e-05 1.825311137101e-03 1.276441354616e-05 1.159388107007e-02 8.107609139906e-05 4.869941879566e-02 3.405553761934e-04 1.507043127186e-02 1.053876312717e-04 -8.632193188214e-02 -6.036498733016e-04 -1.147278406427e-01 -8.022925919067e-04 1.600804922779e-02 1.119444001943e-04 -3.154824090745e-03 -2.206170692829e-05 3.944091393484e-02 2.758105869569e-04 -3.331582531284e-03 -2.329777993905e-05 1.654679477204e-01 1.157118515527e-03 1.960328803927e-01 1.370859303446e-03 8.161126080518e-02 5.707081175188e-04 -7.681146337356e-02 -5.371431005144e-04 2.000000000000e+02 1.398601398601e+00 2.000000000000e+02 1.398601398601e+00 + 9 EWK_RAP 2.125000000000e+00 6.463838404000e+03 7.000000000000e+03 1.111000000000e+05 9.000000000000e+02 1.697271027136e+02 1.527696694092e-01 1.695620741811e+03 1.526211288758e+00 -9.226299247770e+02 -8.304499772970e-01 1.147016070505e+02 1.032417705225e-01 -2.363814175180e+01 -2.127645522215e-02 1.046214570985e+02 9.416872826148e-02 1.764558657093e+02 1.588261617545e-01 1.615250550357e+02 1.453870882410e-01 2.460318289767e+02 2.214507911581e-01 6.992073391140e+02 6.293495401566e-01 1.069522264237e+02 9.626663044437e-02 -1.085553578188e+02 -9.770959299620e-02 -3.192076522214e+00 -2.873156185611e-03 1.643157516042e+01 1.478989663404e-02 -1.702094217597e+00 -1.532037999637e-03 1.360465577589e-01 1.224541473978e-04 6.432655935964e-01 5.789969339302e-04 3.846019076528e-03 3.461763345209e-06 -1.981221480453e-04 -1.783277660173e-07 -1.197906751754e-04 -1.078223898968e-07 1.498562221319e-03 1.348840883276e-06 2.948478342616e-03 2.653895897944e-06 4.609159724683e-02 4.148658618076e-05 9.436141795372e-03 8.493376953531e-06 1.085759953377e-02 9.772816862083e-06 -7.395233429915e-02 -6.656375724496e-05 -1.912001722107e-02 -1.720973647261e-05 -2.505157004865e-02 -2.254866791058e-05 1.023845344536e-01 9.215529653786e-05 -1.508254634147e-02 -1.357564927225e-05 1.239222201301e-02 1.115411522323e-05 -5.537184398010e-02 -4.983964354645e-05 1.541567964609e-02 1.387549923140e-05 1.000000000000e+03 9.000900090009e-01 1.900000000000e+03 1.710171017102e+00 + 10 EWK_RAP 2.375000000000e+00 6.463838404000e+03 7.000000000000e+03 1.049000000000e+05 7.000000000000e+02 7.859388900903e+02 7.492267779698e-01 6.410270691658e+01 6.110839553535e-02 1.587179884661e+03 1.513040881469e+00 1.576056600651e+02 1.502437178885e-01 1.318315557245e+02 1.256735516916e-01 -1.504670215920e+02 -1.434385334528e-01 -5.044303927175e+01 -4.808678672236e-02 -4.643372583239e+01 -4.426475293840e-02 -6.379158166124e+01 -6.081180329956e-02 4.918938362542e+02 4.689169077733e-01 -3.638660147190e+02 -3.468694134595e-01 5.821559685769e+01 5.549627917797e-02 1.227299065014e+02 1.169970510023e-01 -4.698972934192e+01 -4.479478488267e-02 -1.874136046746e+01 -1.786592990225e-02 -7.225898905328e+00 -6.888368832534e-03 5.732509271069e-01 5.464737150686e-04 -2.146298439926e-02 -2.046042364086e-05 1.739261195697e-05 1.658018299044e-08 -3.531577701395e-04 -3.366613633360e-07 -9.468255952669e-04 -9.025982795681e-07 1.525177942054e-03 1.453935121120e-06 -1.186173368445e-02 -1.130765842178e-05 1.626134699466e-03 1.550176071941e-06 4.215037804219e-03 4.018148526425e-06 4.927944902746e-03 4.697754912055e-06 -3.880160271160e-02 -3.698913509209e-05 -3.859790446461e-02 -3.679495182517e-05 1.920243388055e-02 1.830546604438e-05 2.069854246556e-03 1.973168967164e-06 -8.729177514392e-03 -8.321427563768e-06 -5.524560508129e-02 -5.266501914327e-05 -4.327560565427e-02 -4.125415219664e-05 1.000000000000e+03 9.532888465205e-01 1.800000000000e+03 1.715919923737e+00 + 11 EWK_RAP 2.625000000000e+00 6.463838404000e+03 7.000000000000e+03 9.610000000000e+04 7.000000000000e+02 4.875566420615e+02 5.073430198351e-01 -4.285034855953e+01 -4.458933252813e-02 3.991369918378e+02 4.153350591444e-01 -9.054930951965e+02 -9.422404736696e-01 1.738970051155e+02 1.809542196832e-01 -9.596826218656e+01 -9.986291590693e-02 -3.938891179421e+01 -4.098742122187e-02 -6.935016743260e+00 -7.216458629823e-03 1.327844485923e+01 1.381732035299e-02 1.393821982185e+02 1.450387078236e-01 4.494003266505e+02 4.676382171181e-01 4.154741876346e+02 4.323352628872e-01 1.752099455416e+02 1.823204428112e-01 -6.806431549081e+01 -7.082655097899e-02 -2.225087405501e+01 -2.315387518731e-02 -1.283919818864e+01 -1.336024785499e-02 4.672442791007e-01 4.862063258072e-04 3.037271744182e-02 3.160532512156e-05 -7.736856753177e-05 -8.050839493421e-08 3.476423788526e-04 3.617506543731e-07 7.820826451255e-04 8.138216910775e-07 -5.769072633444e-03 -6.003197329286e-06 -2.413902476921e-03 -2.511865220521e-06 -5.293925095369e-03 -5.508767008709e-06 -1.621861591122e-02 -1.687681156214e-05 -6.016930657788e-02 -6.261114108000e-05 -2.616854501701e-02 -2.723053591780e-05 -3.533295596205e-04 -3.676686364417e-07 -6.470390123464e-02 -6.732976195072e-05 -1.656188673225e-02 -1.723401324896e-05 7.049892336858e-02 7.335996188197e-05 -6.240251334834e-02 -6.493497746966e-05 -3.712912607412e-03 -3.863592723633e-06 9.000000000000e+02 9.365244536941e-01 1.600000000000e+03 1.664932362123e+00 + 12 EWK_RAP 2.875000000000e+00 6.463838404000e+03 7.000000000000e+03 8.840000000000e+04 7.000000000000e+02 -7.255903980378e+02 -8.208036176898e-01 6.741142052359e+02 7.625726303574e-01 -3.134170975631e+02 -3.545442280125e-01 -1.582176567420e+02 -1.789792497081e-01 -8.907824338260e+02 -1.007672436455e+00 -1.177926661394e+02 -1.332496223297e-01 -5.098346380045e+00 -5.767360158422e-03 7.079723382443e+00 8.008736857967e-03 2.214184613364e+01 2.504733725525e-02 3.808583541311e-01 4.308352422297e-04 -2.626596996926e+02 -2.971263571184e-01 4.731748678206e+02 5.352656875799e-01 -1.829359024637e+02 -2.069410661354e-01 1.062954445385e+02 1.202437155412e-01 -1.543047085710e+01 -1.745528377500e-02 1.862951844962e+00 2.107411589324e-03 2.909265822636e-01 3.291024686239e-04 1.681288787557e-01 1.901910393164e-04 -3.056380741288e-04 -3.457444277476e-07 -2.342448928890e-05 -2.649829105079e-08 -1.810018624054e-03 -2.047532380152e-06 1.091475032454e-03 1.234700262957e-06 -7.331286561962e-03 -8.293310590454e-06 -1.509274877659e-02 -1.707324522239e-05 -1.397621059903e-03 -1.581019298533e-06 4.725845876993e-02 5.345979498860e-05 -2.602388254869e-02 -2.943878116368e-05 2.923158524145e-02 3.306740411929e-05 -3.355601867925e-02 -3.795929714848e-05 1.847333776853e-02 2.089744091462e-05 -1.458392148544e-03 -1.649764873919e-06 3.769924678654e-02 4.264620677210e-05 -2.835194288648e-02 -3.207233358199e-05 8.000000000000e+02 9.049773755656e-01 1.500000000000e+03 1.696832579186e+00 + 13 EWK_RAP 3.125000000000e+00 6.463838404000e+03 7.000000000000e+03 8.060000000000e+04 6.000000000000e+02 7.581798133410e+02 9.406697435992e-01 -2.611823656853e+02 -3.240476001058e-01 5.272236305984e+02 6.541236111642e-01 -1.748439666286e+02 -2.169279982985e-01 -1.773662841460e+02 -2.200574244988e-01 8.378081595822e+02 1.039464217844e+00 -1.385014661035e+02 -1.718380472749e-01 -6.669263216258e+01 -8.274520119427e-02 -4.259250149667e+01 -5.284429466088e-02 1.228735857163e+02 1.524486175140e-01 1.110637954599e+02 1.377962722828e-01 -1.546693595600e+01 -1.918974684367e-02 -4.443253250738e+02 -5.512721154762e-01 -1.564122520595e+02 -1.940598660788e-01 3.008432543382e+00 3.732546579879e-03 3.832444124288e+00 4.754893454451e-03 3.126363025333e-01 3.878862314309e-04 1.802198625226e-01 2.235978443208e-04 5.335950985568e-05 6.620286582591e-08 3.782102293862e-04 4.692434607769e-07 -2.000780693369e-03 -2.482358180359e-06 3.751416681898e-03 4.654363128906e-06 -1.080812786758e-02 -1.340958792504e-05 -6.723009037401e-03 -8.341202279653e-06 -2.139251565042e-02 -2.654158269283e-05 -1.685059039254e-02 -2.090643969298e-05 3.237234334788e-02 4.016419770208e-05 4.935692375712e-02 6.123687811058e-05 1.898158734498e-02 2.355035650742e-05 3.767798406520e-02 4.674687849281e-05 5.157280203480e-02 6.398610674292e-05 3.183112541268e-02 3.949271143013e-05 3.697637550457e-02 4.587639640766e-05 7.000000000000e+02 8.684863523573e-01 1.400000000000e+03 1.736972704715e+00 + 14 EWK_RAP 3.375000000000e+00 6.463838404000e+03 7.000000000000e+03 6.860000000000e+04 6.000000000000e+02 9.326502014910e+02 1.359548398675e+00 -4.444005886406e+02 -6.478142691554e-01 6.141380061287e+02 8.952449068931e-01 -1.310228683014e+02 -1.909954348417e-01 -7.257197028127e+01 -1.057900441418e-01 2.150109182940e+01 3.134269945976e-02 1.022650746649e+02 1.490744528643e-01 1.690826785571e+02 2.464762078092e-01 7.987202483881e+02 1.164315230886e+00 -1.299109392438e+02 -1.893745470026e-01 3.800772180443e+01 5.540484228051e-02 -4.548627883016e+01 -6.630652890694e-02 -6.010745132287e+01 -8.762019143275e-02 2.800551773826e+02 4.082436988084e-01 -5.633331797816e+01 -8.211853932676e-02 -1.167157863049e+00 -1.701396301821e-03 1.948884804545e-01 2.840939948316e-04 1.265316707685e-01 1.844484996625e-04 -2.988588455624e-04 -4.356542938228e-07 -2.795114872830e-04 -4.074511476429e-07 2.377810315069e-03 3.466195794561e-06 1.342362017431e-03 1.956795943776e-06 4.404106214022e-03 6.419979903823e-06 -4.275478568418e-03 -6.232476047257e-06 1.771193560292e-02 2.581914810922e-05 2.444613714157e-02 3.563576842794e-05 1.219593907555e-02 1.777833684483e-05 5.823941875838e-02 8.489711189268e-05 -1.434006881667e-02 -2.090389040330e-05 8.587811147052e-03 1.251867514147e-05 -1.290248760599e-02 -1.880829097084e-05 3.469714922785e-02 5.057893473447e-05 3.725089162310e-02 5.430159128731e-05 6.000000000000e+02 8.746355685131e-01 1.200000000000e+03 1.749271137026e+00 + 15 EWK_RAP 3.750000000000e+00 6.463838404000e+03 7.000000000000e+03 9.590000000000e+04 7.000000000000e+02 3.968000721375e+02 4.137644130735e-01 -5.351658354307e+01 -5.580457095210e-02 3.314558511117e+02 3.456265392198e-01 -1.577062525130e+02 -1.644486470417e-01 -1.251738766502e+02 -1.305254188219e-01 1.230127851305e+02 1.282719344427e-01 5.995143389946e+02 6.251452961362e-01 7.843730567738e+02 8.179072541959e-01 -2.979314190589e+02 -3.106688415629e-01 -7.712695782982e+01 -8.042435644402e-02 1.888754466578e-01 1.969504136160e-04 7.916586562811e+00 8.255043339740e-03 2.316270009449e+00 2.415297194421e-03 3.718866788404e+01 3.877859007720e-02 2.078504538556e+02 2.167366567838e-01 1.129661792542e+01 1.177958073558e-02 1.320522949673e-01 1.376979092464e-04 1.022973973374e-01 1.066709044186e-04 -5.654626102173e-04 -5.896377583080e-07 2.734327577674e-04 2.851227922496e-07 1.798648722034e-03 1.875546112653e-06 4.752701240113e-03 4.955892846833e-06 -7.255705247004e-04 -7.565907452559e-07 -1.550315094142e-02 -1.616595510054e-05 -2.311414294422e-02 -2.410233883651e-05 1.436118654730e-02 1.497516845391e-05 3.795445403138e-03 3.957711577829e-06 1.130500988979e-01 1.178833148049e-04 -1.351761513442e-02 -1.409553194413e-05 3.340450560300e-02 3.483264400730e-05 1.163811640522e-01 1.213567925466e-04 7.161470115145e-02 7.467643498587e-05 -2.270027997254e-02 -2.367078203602e-05 9.000000000000e+02 9.384775808133e-01 1.600000000000e+03 1.668404588113e+00 + 16 EWK_RAP 4.250000000000e+00 6.463838404000e+03 7.000000000000e+03 4.380000000000e+04 8.000000000000e+02 1.180403910891e+02 2.694986097924e-01 4.489255154510e+01 1.024944099203e-01 1.140768673104e+02 2.604494687451e-01 -8.872082538814e+01 -2.025589620734e-01 -7.301875251111e+01 -1.667094806190e-01 1.134345900900e+02 2.589830823974e-01 9.484935405413e+02 2.165510366533e+00 -6.955046935341e+02 -1.587910259210e+00 7.178292123392e-01 1.638879480226e-03 -3.413590098555e+01 -7.793584699897e-02 7.243064790250e-01 1.653667760331e-03 3.935320666192e+00 8.984750379434e-03 1.133299314770e+01 2.587441357923e-02 -4.871279725857e+00 -1.112164320972e-02 -4.361282518296e+00 -9.957266023507e-03 1.572501182602e+01 3.590185348407e-02 1.240026394395e-01 2.831110489486e-04 5.713029250391e-02 1.304344577715e-04 -1.436770291157e-03 -3.280297468396e-06 5.777315326641e-04 1.319021764073e-06 4.904587524079e-03 1.119768841114e-05 1.852438115586e-02 4.229310766177e-05 1.614126719025e-03 3.685220819693e-06 -3.116585543023e-02 -7.115492107358e-05 -5.681395516433e-02 -1.297122264026e-04 -6.927373076339e-03 -1.581592026562e-05 -8.883483901942e-03 -2.028192671676e-05 2.305038082044e-02 5.262644022931e-05 -9.608860269080e-03 -2.193803714402e-05 8.633516535934e-02 1.971122496789e-04 8.323499885858e-02 1.900342439694e-04 2.010964580188e-02 4.591243333762e-05 -2.714092597291e-02 -6.196558441303e-05 4.000000000000e+02 9.132420091324e-01 7.000000000000e+02 1.598173515982e+00 diff --git a/nnpdfcpp/data/commondata/DATA_LHCBWMU8TEV.dat b/nnpdfcpp/data/commondata/DATA_LHCBWMU8TEV.dat new file mode 100644 index 0000000000..edbe564e50 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_LHCBWMU8TEV.dat @@ -0,0 +1,17 @@ +LHCBWMU8TEV 36 16 + 1 EWK_RAP 2.125000000000e+00 6.463838404000e+03 8.000000000000e+03 2.365000000000e+05 1.200000000000e+03 3.038579301980e+03 1.284811544177e+00 7.681516197290e+02 3.247998392089e-01 4.851095075129e+02 2.051202991598e-01 -5.308972426746e+01 -2.244808637102e-02 7.850087868618e+00 3.319276054384e-03 -8.807520308797e+01 -3.724110067145e-02 -1.372555607165e+02 -5.803617789281e-02 2.835081811025e+02 1.198766093457e-01 2.394261818068e+02 1.012372861762e-01 1.149282210891e+02 4.859544232099e-02 8.422450321819e+00 3.561289776667e-03 3.198627693876e+01 1.352485282823e-02 1.507174843915e+00 6.372832320995e-04 -6.896281410681e+00 -2.915975226504e-03 7.595533001147e+00 3.211641860950e-03 7.633120097777e+00 3.227534925064e-03 1.019554927280e+00 4.311014491672e-04 3.415602574189e-03 1.444229418262e-06 -1.133910367561e-03 -4.794547008716e-07 -7.284609808370e-07 -3.080173280495e-10 1.677835558232e-05 7.094442106689e-09 -2.553774607161e-04 -1.079820129878e-07 5.932843196958e-03 2.508601774612e-06 1.280796093802e-01 5.415628303604e-05 -7.564443436644e-06 -3.198496167714e-09 -1.622247067033e-02 -6.859395632274e-06 6.514473289196e-02 2.754534160337e-05 1.037104827256e-01 4.385221256895e-05 6.929157468650e-02 2.929876308097e-05 -1.877629863894e-02 -7.939238325135e-06 2.188171252925e-02 9.252309737526e-06 -3.606518967772e-02 -1.524955166077e-05 3.731793154008e-02 1.577925223682e-05 -6.212574248847e-03 -2.626881289153e-06 2.400000000000e+03 1.014799154334e+00 2.700000000000e+03 1.141649048626e+00 + 2 EWK_RAP 2.375000000000e+00 6.463838404000e+03 8.000000000000e+03 2.084000000000e+05 9.000000000000e+02 7.574168560908e+02 3.634437889111e-01 7.590309841402e+01 3.642183225241e-02 -1.987058827170e+03 -9.534831224427e-01 -3.805021771497e+02 -1.825826185939e-01 1.866540628119e+02 8.956528925716e-02 -9.892177817595e+01 -4.746726399998e-02 -1.938615156561e+01 -9.302375991176e-03 9.024316654080e+01 4.330286302342e-02 -9.786762228902e+01 -4.696143104080e-02 -2.578863004737e+02 -1.237458255632e-01 2.780542496923e+01 1.334233443821e-02 1.821786676656e+02 8.741778678773e-02 -4.010697689291e+01 -1.924519044765e-02 -1.134420533632e+01 -5.443476648907e-03 3.739982404710e+01 1.794617276732e-02 3.234179686209e+01 1.551909638296e-02 1.094322733230e+00 5.251068777494e-04 3.391244744211e-03 1.627276748662e-06 1.654260439462e-03 7.937909978226e-07 6.383721005027e-06 3.063205856539e-09 3.428582414866e-05 1.645193097344e-08 -4.659314022218e-04 -2.235755288972e-07 -4.148891256763e-03 -1.990830737410e-06 9.165474667749e-03 4.398020473968e-06 8.144508683749e-03 3.908113571856e-06 2.615015161123e-02 1.254805739502e-05 -6.131551104168e-02 -2.942203025033e-05 1.268720515765e-02 6.087910344360e-06 1.869349808552e-02 8.970008678274e-06 -1.425778424608e-02 -6.841547143035e-06 6.241271517855e-03 2.994851975938e-06 -6.706266150265e-03 -3.217977999167e-06 2.538949958848e-02 1.218306122288e-05 5.430933419185e-03 2.606014116692e-06 2.100000000000e+03 1.007677543186e+00 2.400000000000e+03 1.151631477927e+00 + 3 EWK_RAP 2.625000000000e+00 6.463838404000e+03 8.000000000000e+03 1.820000000000e+05 8.000000000000e+02 5.391116598567e+02 2.962151977235e-01 -1.082196953898e+03 -5.946137109330e-01 -1.392653826342e+02 -7.651944100780e-02 -2.590007882802e+02 -1.423081254287e-01 -1.235363886048e+03 -6.787713659604e-01 -1.478992484251e+02 -8.126332331052e-02 3.097196513909e+01 1.701756326323e-02 6.612783421119e+01 3.633397484131e-02 -7.927645225016e+01 -4.355849024734e-02 -6.108339536541e+00 -3.356230514583e-03 2.988256052266e+02 1.641898929816e-01 -1.603305281460e+02 -8.809369678353e-02 1.237444832951e+02 6.799147433797e-02 3.243971184140e+01 1.782401749528e-02 1.181103744601e+01 6.489581014290e-03 2.392189941106e+01 1.314390077531e-02 5.767811158596e-01 3.169127010218e-04 -1.379628806295e-04 -7.580378056568e-08 4.789353762500e-04 2.631513056319e-07 2.877751006089e-06 1.581181871478e-09 1.774625906249e-05 9.750691792577e-09 1.566867459789e-03 8.609161866974e-07 -1.519355835630e-02 -8.348108986979e-06 -8.368951181576e-02 -4.598324825042e-05 3.252795209785e-02 1.787250115266e-05 -1.207473980070e-02 -6.634472417968e-06 -7.568283304918e-02 -4.158397420284e-05 -1.083968275525e-01 -5.955869645742e-05 -6.354115477157e-02 -3.491272240196e-05 -2.213794876897e-02 -1.216370811482e-05 4.077164731373e-04 2.240200401853e-07 2.919091810475e-02 1.603896599162e-05 -4.533828618271e-02 -2.491114625423e-05 9.281120605357e-03 5.099516816130e-06 1.800000000000e+03 9.890109890110e-01 2.100000000000e+03 1.153846153846e+00 + 4 EWK_RAP 2.875000000000e+00 6.463838404000e+03 8.000000000000e+03 1.533000000000e+05 7.000000000000e+02 3.466272090628e+02 2.261103777317e-01 -1.030181994955e+03 -6.720039106034e-01 -2.390594329861e+00 -1.559422263445e-03 6.727845398399e+02 4.388679320547e-01 4.312413715122e+02 2.813055261006e-01 -7.362297158517e+02 -4.802542177767e-01 9.211964079291e-01 6.009108988448e-04 1.671895577702e+02 1.090603768886e-01 -1.252753210723e+02 -8.171906136485e-02 -6.952330910213e-01 -4.535114748997e-04 1.536669942345e+02 1.002393961086e-01 -1.325124896205e+02 -8.643998018295e-02 -3.190057886061e+02 -2.080924909368e-01 -9.220109904875e+01 -6.014422638536e-02 -5.213495525831e+01 -3.400845091867e-02 -1.101914337370e+01 -7.187960452512e-03 8.035534599422e-01 5.241705544306e-04 1.211182521476e-03 7.900733995278e-07 1.711608329874e-03 1.116509021444e-06 1.949409066649e-06 1.271630180463e-09 -4.555292374756e-04 -2.971488828934e-07 5.602017511290e-04 3.654284090861e-07 -1.309374023920e-02 -8.541252602219e-06 -6.633287088029e-02 -4.326997448160e-05 5.741342860064e-03 3.745168206174e-06 5.243893280994e-03 3.420674025437e-06 -1.489857513260e-02 -9.718574776650e-06 -7.832385774730e-02 -5.109188372296e-05 -8.103685999455e-03 -5.286161773943e-06 2.847857139028e-02 1.857701982406e-05 2.209874007864e-02 1.441535556336e-05 6.915915493569e-02 4.511360400241e-05 -5.225712733557e-02 -3.408814568530e-05 -2.144640092330e-02 -1.398982447704e-05 1.500000000000e+03 9.784735812133e-01 1.800000000000e+03 1.174168297456e+00 + 5 EWK_RAP 3.125000000000e+00 6.463838404000e+03 8.000000000000e+03 1.195000000000e+05 6.000000000000e+02 2.748755548246e+02 2.300213847904e-01 -7.128587225878e+02 -5.965344958894e-01 -9.424364874673e+00 -7.886497803073e-03 3.108102674355e+02 2.600922740046e-01 1.626361173239e+02 1.360971693087e-01 7.287752580650e+02 6.098537724393e-01 7.645444548335e+01 6.397861546724e-02 5.080244085137e+02 4.251250280450e-01 -1.582720758281e+02 -1.324452517390e-01 -4.722082110865e+01 -3.951533147167e-02 3.417774149118e+01 2.860062049471e-02 1.315272958056e+01 1.100646826825e-02 -1.177021162615e+02 -9.849549477949e-02 3.771740405636e+02 3.156268121871e-01 -4.851723655536e+01 -4.060019795428e-02 -3.156153128981e+01 -2.641132325508e-02 9.822152491275e-01 8.219374469686e-04 6.347847483483e-03 5.312006262329e-06 -1.815465250726e-03 -1.519217783034e-06 2.461999837111e-06 2.060250909716e-09 -5.612970734063e-04 -4.697046639383e-07 -5.386362464868e-04 -4.507416288592e-07 -1.722710906098e-02 -1.441599084601e-05 -9.711895842622e-02 -8.127109491734e-05 3.514572275552e-02 2.941064665734e-05 -4.299205294743e-02 -3.597661334513e-05 -1.116760971115e-02 -9.345280093009e-06 -4.891378723112e-02 -4.093203952395e-05 -9.846940785885e-02 -8.240117812456e-05 -2.063997187140e-02 -1.727194298862e-05 3.877240980628e-02 3.244553121864e-05 6.848351774561e-02 5.730838305072e-05 -4.952056140386e-02 -4.143980033796e-05 -3.110697809999e-03 -2.603094401672e-06 1.200000000000e+03 1.004184100418e+00 1.400000000000e+03 1.171548117155e+00 + 6 EWK_RAP 3.375000000000e+00 6.463838404000e+03 8.000000000000e+03 8.440000000000e+04 5.000000000000e+02 1.671107452547e+02 1.979985133350e-01 -5.695733146002e+02 -6.748498988154e-01 4.773246147184e+01 5.655504913725e-02 6.180663852923e+01 7.323061437113e-02 1.000278141321e+02 1.185163674551e-01 1.383275429010e+02 1.638951930106e-01 6.813641786502e+01 8.073035292064e-02 -1.751887840587e+02 -2.075696493587e-01 5.176949326378e+02 6.133826216088e-01 -3.757857410542e+02 -4.452437690215e-01 -2.235891354937e+01 -2.649160373149e-02 -1.715425678929e+02 -2.032494880248e-01 -7.779872639766e+01 -9.217858577921e-02 2.062483812310e+01 2.443701199419e-02 3.338357010746e+02 3.955399301832e-01 -1.414699124883e+02 -1.676183797254e-01 4.815832275130e-01 5.705962411291e-04 6.142676190769e-03 7.278052358731e-06 1.580074776259e-03 1.872126512155e-06 -4.342515998462e-06 -5.145161135619e-09 -1.246568770181e-04 -1.476977215854e-07 -2.705298702987e-04 -3.205330216809e-07 1.054054450238e-02 1.248879680377e-05 -9.906325673279e-02 -1.173735269346e-04 2.814902488221e-02 3.335192521589e-05 -4.982507679279e-03 -5.903445117629e-06 2.905722572719e-02 3.442799256776e-05 -6.471540581682e-02 -7.667702110998e-05 -4.520273973784e-02 -5.355774850455e-05 -5.994446708868e-02 -7.102425010508e-05 -5.655868692293e-02 -6.701266223096e-05 -1.759802246305e-02 -2.085073751547e-05 3.433469192100e-02 4.068091459835e-05 -9.203113870856e-03 -1.090416335409e-05 8.000000000000e+02 9.478672985782e-01 1.000000000000e+03 1.184834123223e+00 + 7 EWK_RAP 3.750000000000e+00 6.463838404000e+03 8.000000000000e+03 8.640000000000e+04 5.000000000000e+02 1.882022891019e+02 2.178267234976e-01 -7.777968807962e+02 -9.002278712918e-01 8.352314957183e+01 9.667031200443e-02 2.196902172849e+02 2.542710848204e-01 1.184340249288e+02 1.370764177416e-01 2.527137844344e+02 2.924928060583e-01 -2.943555458082e+02 -3.406892891298e-01 -3.709454328088e+02 -4.293349916769e-01 2.091045510062e+02 2.420191562571e-01 1.304239378292e+02 1.509536317467e-01 3.656282260301e+02 4.231808171645e-01 4.806203850588e+02 5.562735938181e-01 2.007994775874e+01 2.324068027632e-02 -6.706685990861e+01 -7.762368044978e-02 -6.532932344673e+01 -7.561264287817e-02 -8.747120757017e+01 -1.012398235766e-01 -9.826105456668e-02 -1.137280724151e-04 2.061594320153e-02 2.386104537214e-05 8.413697309130e-03 9.738075589271e-06 -8.386171914434e-06 -9.706217493558e-09 1.022470024738e-03 1.183414380483e-06 1.994399799693e-03 2.308333101496e-06 -3.529448123666e-02 -4.085009402391e-05 -1.840140486352e-01 -2.129792229574e-04 5.945090840247e-02 6.880892176211e-05 -5.920112777607e-03 -6.851982381489e-06 3.843289571388e-02 4.448251818736e-05 1.778891141374e-02 2.058901783997e-05 -4.235602286262e-02 -4.902317460952e-05 -1.992625382316e-02 -2.306279377680e-05 -1.782321105530e-02 -2.062871649919e-05 -2.840736089390e-02 -3.287888992349e-05 -1.516861420515e-02 -1.755626644114e-05 -9.995764039382e-03 -1.156917134188e-05 9.000000000000e+02 1.041666666667e+00 1.000000000000e+03 1.157407407407e+00 + 8 EWK_RAP 4.250000000000e+00 6.463838404000e+03 8.000000000000e+03 2.300000000000e+04 4.000000000000e+02 2.041828221487e+01 8.877514006465e-02 -2.941283888544e+02 -1.278819081976e+00 5.860919723330e+01 2.548225966665e-01 1.984189671916e+02 8.626911617026e-01 5.383653778533e+01 2.340719034145e-01 9.456972392251e+01 4.111727127065e-01 2.358070160636e+02 1.025247895928e+00 -9.875510182570e+01 -4.293700079378e-01 1.436864981687e+02 6.247239050811e-01 1.299779634055e+02 5.651215800241e-01 3.428747071369e+01 1.490759596247e-01 1.066323327296e+02 4.636188379548e-01 -6.603659873896e+01 -2.871156466911e-01 2.716844164266e+01 1.181236593159e-01 1.734434011121e+02 7.541017439655e-01 4.447463117441e+02 1.933679616279e+00 -2.415799202881e-01 -1.050347479514e-03 1.736211565471e-02 7.548745936830e-05 8.251447625955e-03 3.587585924328e-05 1.903535231552e-05 8.276240137184e-08 2.068021197130e-03 8.991396509260e-06 2.768681927242e-03 1.203774750975e-05 -5.594231669989e-04 -2.432274639126e-06 -4.801766306144e-04 -2.087724480932e-06 4.177596292426e-02 1.816346214098e-04 1.915065301472e-03 8.326370875964e-06 -3.489947235171e-02 -1.517368363118e-04 1.615529584502e-01 7.024041671748e-04 4.501640058815e-02 1.957234808180e-04 3.105103105080e-02 1.350044828296e-04 -7.999837636282e-03 -3.478190276644e-05 -1.345409740231e-01 -5.849607566224e-04 8.854643213536e-02 3.849844875451e-04 -3.573913246434e-02 -1.553875324537e-04 2.000000000000e+02 8.695652173913e-01 3.000000000000e+02 1.304347826087e+00 + 9 EWK_RAP 2.125000000000e+00 6.463838404000e+03 8.000000000000e+03 1.340000000000e+05 9.000000000000e+02 1.418566028696e+03 1.058631364699e+00 -3.008361897603e+02 -2.245046192241e-01 3.721785778299e+02 2.777452073357e-01 -1.108522907735e+02 -8.272559012947e-02 2.130729456719e+02 1.590096609492e-01 1.920356083581e+02 1.433101554911e-01 3.150880721533e+02 2.351403523532e-01 -6.883892318077e+02 -5.137233073192e-01 -5.379263076607e+02 -4.014375430304e-01 -1.882713964977e+02 -1.405010421625e-01 -4.637284914904e+01 -3.460660384257e-02 -5.869340052789e+01 -4.380104517007e-02 -1.450487641934e+01 -1.082453464130e-02 1.474470779206e+01 1.100351327766e-02 -3.880705575242e+00 -2.896048936747e-03 -8.664528816324e+00 -6.466066280839e-03 8.337970308503e-01 6.222365901868e-04 -3.709249582710e-03 -2.768096703515e-06 1.065925797835e-03 7.954670133097e-07 3.098814478317e-06 2.312548118147e-09 8.957681649085e-05 6.684837051556e-08 2.853717212058e-04 2.129639710491e-07 -6.878015330548e-03 -5.132847261603e-06 1.905472722646e-01 1.421994569139e-04 -2.448665756562e-02 -1.827362504897e-05 -5.353427455160e-03 -3.995095115791e-06 8.616988285675e-02 6.430588272892e-05 1.499649785821e-01 1.119141631210e-04 1.139090069095e-01 8.500672157428e-05 3.560935114676e-02 2.657414264684e-05 -1.268182589601e-02 -9.464049176127e-06 -3.089693251743e-02 -2.305741232644e-05 5.081019720209e-02 3.791805761350e-05 5.278760057427e-02 3.939373177184e-05 1.200000000000e+03 8.955223880597e-01 1.600000000000e+03 1.194029850746e+00 + 10 EWK_RAP 2.375000000000e+00 6.463838404000e+03 8.000000000000e+03 1.198000000000e+05 7.000000000000e+02 3.797758627502e+02 3.170082326796e-01 -6.147027426319e+02 -5.131074646343e-01 -8.069723200389e+02 -6.735995993647e-01 -1.293489782687e+02 -1.079707665014e-01 3.295697346931e+02 2.750999454868e-01 1.801001765649e+02 1.503340371994e-01 8.325772608029e+01 6.949726717888e-02 -2.499734247674e+02 -2.086589522265e-01 2.171995291688e+02 1.813017772694e-01 6.251260740967e+02 5.218080752059e-01 -8.905430339410e+01 -7.433581251594e-02 -3.201639682552e+02 -2.672487214150e-01 7.013671643345e+01 5.854483842525e-02 2.802170633911e+01 2.339040595919e-02 -5.604682273599e+01 -4.678365837728e-02 -4.758911806040e+01 -3.972380472488e-02 4.556251546297e-01 3.803214980214e-04 -1.050150026453e-02 -8.765859987089e-06 -5.874689172632e-03 -4.903747222564e-06 -1.149583961129e-05 -9.595859441813e-09 -1.325823036459e-04 -1.106697025425e-07 -1.381739901387e-04 -1.153372204830e-07 1.794623114827e-02 1.498015955615e-05 2.164446818001e-01 1.806716876462e-04 -3.488192226889e-02 -2.911679655166e-05 6.857859750276e-02 5.724423831616e-05 -4.922123760244e-02 -4.108617496030e-05 7.731091052140e-02 6.453331429165e-05 7.604399926463e-02 6.347579237448e-05 2.564318360227e-02 2.140499465966e-05 2.770793057262e-02 2.312848962656e-05 -3.939296565434e-02 -3.288227517057e-05 8.744923901338e-03 7.299602588763e-06 5.484652229037e-03 4.578173813887e-06 1.000000000000e+03 8.347245409015e-01 1.400000000000e+03 1.168614357262e+00 + 11 EWK_RAP 2.625000000000e+00 6.463838404000e+03 8.000000000000e+03 1.106000000000e+05 6.000000000000e+02 2.396134926211e+02 2.166487275055e-01 -6.788206626587e+02 -6.137619011381e-01 -4.304893366922e+01 -3.892308650020e-02 5.583800780749e+01 5.048644467224e-02 -6.344991542700e+02 -5.736882045841e-01 -2.594755426812e+01 -2.346071814478e-02 -4.142790442248e+01 -3.745741810351e-02 -5.405330881160e+01 -4.887279277721e-02 1.636237924361e+01 1.479419461447e-02 1.293827349946e+02 1.169825813695e-01 -5.927873743873e+02 -5.359741178908e-01 2.563760680903e+02 2.318047631920e-01 -2.655698980460e+02 -2.401174485045e-01 -4.329483884631e+01 -3.914542391167e-02 1.621153875102e+00 1.465781080562e-03 -4.876481505905e+01 -4.409115285629e-02 8.098292641352e-01 7.322145245345e-04 1.862728186319e-03 1.684202700108e-06 -1.769568846136e-04 -1.599971831949e-07 2.808164448916e-06 2.539027530666e-09 -1.080886817208e-04 -9.772936864448e-08 -1.635589344701e-03 -1.478833042225e-06 7.389095578738e-03 6.680918244791e-06 9.727117032053e-02 8.794861692634e-05 -4.215152100616e-03 -3.811168264571e-06 5.318909529513e-03 4.809140623430e-06 -1.322897970470e-02 -1.196110280714e-05 2.784867494506e-03 2.517963376587e-06 7.434987123381e-02 6.722411503961e-05 3.340711118054e-02 3.020534464786e-05 -2.074583797520e-02 -1.875753885642e-05 -3.494504746845e-02 -3.159588378702e-05 4.376355950706e-02 3.956922197745e-05 -2.172061472291e-02 -1.963889215453e-05 1.000000000000e+03 9.041591320072e-01 1.300000000000e+03 1.175406871609e+00 + 12 EWK_RAP 2.875000000000e+00 6.463838404000e+03 8.000000000000e+03 1.024000000000e+05 6.000000000000e+02 2.228001680056e+02 2.175782890679e-01 -7.425368422507e+02 -7.251336350104e-01 3.682727486026e+01 3.596413560573e-02 4.081920481982e+02 3.986250470686e-01 2.633376002741e+02 2.571656252676e-01 -4.567349906081e+02 -4.460302642657e-01 7.855868883323e+00 7.671746956370e-03 7.872472843090e+01 7.687961760831e-02 -4.468970834520e+01 -4.364229330586e-02 -4.211339132490e+01 -4.112635871572e-02 -2.381712756857e+02 -2.325891364118e-01 1.476273626390e+02 1.441673463272e-01 5.226255945867e+02 5.103765572136e-01 1.640366589992e+02 1.601920498040e-01 6.606062046337e+01 6.451232467126e-02 -1.044628090901e+01 -1.020144620021e-02 7.081767021412e-01 6.915788106848e-04 -5.052468688492e-04 -4.934051453605e-07 -1.464777909491e-03 -1.430447177237e-06 4.695676677231e-06 4.585621755109e-09 1.868136902919e-04 1.824352444257e-07 -8.357494857515e-04 -8.161616071792e-07 -1.511537237976e-02 -1.476110583961e-05 4.813289205339e-03 4.700477739589e-06 2.460006759210e-02 2.402350350791e-05 -2.837806872972e-02 -2.771295774386e-05 -2.254224212979e-03 -2.201390832987e-06 -5.325945713637e-02 -5.201118860973e-05 -4.791596442697e-02 -4.679293401071e-05 -6.819233827444e-02 -6.659408034613e-05 -4.485150499449e-02 -4.380029784618e-05 2.893751825512e-05 2.825929517102e-08 2.477697819845e-03 2.419626777193e-06 1.624354351429e-02 1.586283546318e-05 9.000000000000e+02 8.789062500000e-01 1.200000000000e+03 1.171875000000e+00 + 13 EWK_RAP 3.125000000000e+00 6.463838404000e+03 8.000000000000e+03 9.250000000000e+04 6.000000000000e+02 2.210340648033e+02 2.389557457333e-01 -5.987026972314e+02 -6.472461591690e-01 -7.879832997777e+00 -8.518738375975e-03 2.184763315198e+02 2.361906286700e-01 1.197980553229e+02 1.295114111599e-01 5.400535716311e+02 5.838416990606e-01 1.433569796840e+01 1.549805185773e-02 3.703375464348e+02 4.003649150646e-01 -1.565632398287e+02 -1.692575565716e-01 -4.885089017217e+01 -5.281177315911e-02 -7.225805431862e+01 -7.811681547959e-02 -6.023608515279e+01 -6.512009205707e-02 1.662409610003e+02 1.797199578381e-01 -4.960419192105e+02 -5.362615342816e-01 4.290701380970e+01 4.638596087535e-02 1.603726295711e+01 1.733758157526e-02 4.785205369484e-01 5.173194994037e-04 4.502053808522e-03 4.867085198403e-06 5.305379878289e-03 5.735545814366e-06 4.710614020287e-06 5.092555697607e-09 9.205968158778e-05 9.952398009490e-08 1.289444818082e-03 1.393994397927e-06 -9.383386501247e-03 -1.014420162297e-05 -1.241067869379e-01 -1.341694993923e-04 3.652483327628e-02 3.948630624462e-05 2.612495440402e-02 2.824319395030e-05 2.700475754578e-02 2.919433248192e-05 -2.217773972682e-02 -2.397593483981e-05 -4.456292446838e-02 -4.817613456041e-05 -2.875750635452e-02 -3.108919605894e-05 -5.203761053451e-02 -5.625687625352e-05 5.860786606371e-02 6.335985520401e-05 -5.914759281177e-02 -6.394334358030e-05 3.348043001920e-03 3.619505948022e-06 8.000000000000e+02 8.648648648649e-01 1.100000000000e+03 1.189189189189e+00 + 14 EWK_RAP 3.375000000000e+00 6.463838404000e+03 8.000000000000e+03 7.990000000000e+04 5.000000000000e+02 1.759523483065e+02 2.202157050144e-01 -4.582971920159e+02 -5.735884756144e-01 2.522158009032e+01 3.156643315434e-02 -3.436989661893e+01 -4.301614094985e-02 3.682367806380e+01 4.608720658798e-02 6.823139353147e+01 8.539598689796e-02 4.566847954319e+01 5.715704573616e-02 -1.113279222702e+02 -1.393340704258e-01 4.248650642159e+02 5.317460127858e-01 -4.085006539032e+02 -5.112648985021e-01 -1.280163835813e+02 -1.602207554209e-01 -1.051786311665e+02 -1.316378362535e-01 4.958952197883e+01 6.206448307738e-02 -1.721094042219e+01 -2.154060127934e-02 -3.923340808182e+02 -4.910313902606e-01 1.232075973069e+02 1.542022494454e-01 7.580998432848e-01 9.488108176280e-04 1.331394273298e-02 1.666325748808e-05 5.410694702776e-03 6.771833169932e-06 -5.007363639595e-06 -6.267038347428e-09 3.688488823123e-04 4.616381505785e-07 1.297838636231e-03 1.624328706172e-06 -5.115695988736e-02 -6.402623265002e-05 -2.345885807267e-01 -2.936027293201e-04 6.360147645472e-02 7.960134725246e-05 -1.330943372570e-02 -1.665761417485e-05 -4.071310626279e-02 -5.095507667433e-05 -2.817785212283e-02 -3.526639815123e-05 -1.799505617142e-01 -2.252197268012e-04 2.169242324782e-02 2.714946589214e-05 7.009667327654e-03 8.773050472659e-06 3.717354123810e-02 4.652508290125e-05 -1.204396633561e-01 -1.507380016973e-04 1.543371412091e-02 1.931628801115e-05 7.000000000000e+02 8.760951188986e-01 9.000000000000e+02 1.126408010013e+00 + 15 EWK_RAP 3.750000000000e+00 6.463838404000e+03 8.000000000000e+03 1.193000000000e+05 6.000000000000e+02 1.831471323643e+02 1.535181327446e-01 5.673613770804e+02 4.755753370330e-01 -4.685631214610e+02 -3.927603700427e-01 9.425696139986e+02 7.900834987415e-01 -3.097732932894e+02 -2.596590890943e-01 1.936845903929e+02 1.623508720812e-01 -7.112139889473e+02 -5.961559002073e-01 -2.815128856875e+02 -2.359705663768e-01 -1.082139143905e+02 -9.070738842459e-02 -7.790499127010e+01 -6.530175295063e-02 -5.804127429123e+01 -4.865152916281e-02 -1.985639555860e+02 -1.664408680520e-01 2.354786254953e+01 1.973835922006e-02 4.382890699206e+01 3.673839647281e-02 2.050657414286e+01 1.718908142737e-02 6.743375805284e+01 5.652452477187e-02 1.419006487505e+00 1.189443828588e-03 1.435099886471e-02 1.202933685223e-05 5.908187636419e-03 4.952378572019e-06 3.892991343643e-06 3.263194755778e-09 1.779767176782e-04 1.491841724042e-07 1.774422933193e-03 1.487362056322e-06 -2.762243269223e-02 -2.315375749558e-05 -1.875036051463e-01 -1.571698282869e-04 5.462605794530e-02 4.578881638332e-05 -1.028457841930e-02 -8.620769840149e-06 -4.081526804414e-02 -3.421229509148e-05 -3.921710742970e-02 -3.287268015901e-05 -1.371256172369e-01 -1.149418417744e-04 -1.775950055693e-02 -1.488642125476e-05 -6.695235138006e-02 -5.612099864213e-05 -3.746692428422e-03 -3.140563644947e-06 -6.196728952751e-02 -5.194240530386e-05 -1.928733465502e-02 -1.616708688602e-05 1.000000000000e+03 8.382229673093e-01 1.400000000000e+03 1.173512154233e+00 + 16 EWK_RAP 4.250000000000e+00 6.463838404000e+03 8.000000000000e+03 6.000000000000e+04 7.000000000000e+02 1.085711870211e+02 1.809519783684e-01 8.398291501072e+02 1.399715250179e+00 -4.598390870184e+02 -7.663984783639e-01 9.256968612905e+02 1.542828102151e+00 -4.004040360456e+02 -6.673400600760e-01 4.268917936257e+01 7.114863227095e-02 7.522174879814e+02 1.253695813302e+00 -5.307108189482e+01 -8.845180315803e-02 1.280920802234e+02 2.134868003724e-01 3.298357281981e+01 5.497262136635e-02 7.402432402618e+01 1.233738733770e-01 7.852675750388e+01 1.308779291731e-01 3.642357651871e+01 6.070596086452e-02 -3.917038903485e+01 -6.528398172475e-02 -5.370701716655e+01 -8.951169527759e-02 -9.408338628292e+01 -1.568056438049e-01 6.888256080273e-01 1.148042680046e-03 1.576189784794e-02 2.626982974657e-05 7.539424403550e-03 1.256570733925e-05 -4.136991762625e-07 -6.894986271042e-10 8.576650387610e-04 1.429441731268e-06 2.692624413597e-03 4.487707355994e-06 -4.972357343845e-02 -8.287262239741e-05 -1.413553179132e-01 -2.355921965221e-04 8.199691279108e-02 1.366615213185e-04 -1.018840373770e-02 -1.698067289616e-05 2.352486740754e-02 3.920811234591e-05 -4.847116685695e-02 -8.078527809492e-05 -3.684786732394e-02 -6.141311220657e-05 7.012670525561e-03 1.168778420927e-05 -1.275766566595e-02 -2.126277610992e-05 2.273651715641e-02 3.789419526068e-05 -4.112496966631e-02 -6.854161611052e-05 1.846240957404e-02 3.077068262340e-05 5.000000000000e+02 8.333333333333e-01 7.000000000000e+02 1.166666666667e+00 diff --git a/nnpdfcpp/data/commondata/DATA_LHCBZMU7TEV.dat b/nnpdfcpp/data/commondata/DATA_LHCBZMU7TEV.dat new file mode 100644 index 0000000000..d7a09aee76 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_LHCBZMU7TEV.dat @@ -0,0 +1,18 @@ +LHCBZMU7TEV 35 17 + 1 EWK_RAP 2.062500000000e+00 8.315178393760e+03 7.000000000000e+03 9.690000000000e+02 3.900000000000e+01 5.144425552739e+00 5.309004698389e-01 6.572983562411e+00 6.783264770290e-01 -1.901231466028e+00 -1.962055176499e-01 4.518921666484e-01 4.663489851893e-02 5.594228802133e-02 5.773197938218e-03 3.604304421115e-01 3.719612405692e-02 2.843587009219e-01 2.934558317048e-02 2.158969946147e-01 2.228039160111e-02 3.940396089457e-01 4.066456232670e-02 9.963074820243e-01 1.028181096000e-01 2.729184708433e-01 2.816496087134e-02 -1.725003121682e-01 -1.780188980064e-02 2.412067740461e-01 2.489233994283e-02 1.656016888830e-01 1.708995757307e-02 -1.104936410749e-01 -1.140285253611e-02 -7.783131982623e-02 -8.032127949043e-03 -5.551997533968e+00 -5.729615618130e-01 -1.116984809926e-01 -1.152719102091e-02 -1.658810316311e-02 -1.711878551405e-03 3.904571434612e-03 4.029485484636e-04 -2.895258007054e-03 -2.987882360221e-04 6.694374851694e-02 6.908539578632e-03 -3.000232601652e+01 -3.096215275182e+00 -1.865445346433e+00 -1.925124196525e-01 3.731119418276e-01 3.850484435785e-02 5.424011750467e-01 5.597535346199e-02 4.732682414679e-01 4.884089179235e-02 2.268287138718e-01 2.340853600328e-02 -3.378319602398e+00 -3.486397938491e-01 1.527578158907e-01 1.576448048407e-02 -5.151443949292e-01 -5.316247625689e-02 1.411560590879e+00 1.456718876036e-01 1.757247150542e-01 1.813464551643e-02 1.200000000000e+01 1.238390092879e+00 1.700000000000e+01 1.754385964912e+00 + 2 EWK_RAP 2.187500000000e+00 8.315178393760e+03 7.000000000000e+03 2.840000000000e+03 6.300000000000e+01 7.297911572460e+00 2.569687173402e-01 1.300086912702e+01 4.577770819374e-01 1.042212440323e+00 3.669762113815e-02 1.735444785864e+00 6.110721076985e-02 4.746267757321e-01 1.671221041310e-02 -9.573237207650e-03 -3.370858171708e-04 -1.221800703845e-01 -4.302115154385e-03 -2.543064571411e-02 -8.954452716237e-04 5.399448945847e-01 1.901214417552e-02 2.136848343480e+00 7.524113885492e-02 8.943324783832e-04 3.149058022476e-05 -5.360948474574e-01 -1.887657913582e-02 -4.443972829327e-01 -1.564779165256e-02 -3.095894348283e-01 -1.090103643762e-02 1.081782410242e-01 3.809092993811e-03 2.420685014488e-01 8.523538783409e-03 -1.424152877077e+01 -5.014622806609e-01 -2.174093835900e-01 -7.655259985563e-03 -5.916154160698e-03 -2.083152873485e-04 1.292787122406e-03 4.552067332417e-05 3.415644742627e-02 1.202691810784e-03 9.648547898626e-02 3.397376020643e-03 2.607404943233e+00 9.181003321245e-02 -4.122313900568e-02 -1.451518979073e-03 -3.998287194514e-01 -1.407847603702e-02 1.651638915368e+00 5.815629983689e-02 1.963402041598e+00 6.913387470416e-02 1.539976122969e+00 5.422451137216e-02 -4.480936472069e+01 -1.577794532419e+00 1.184274038094e+00 4.169979007372e-02 -1.487023835470e+00 -5.235999420668e-02 6.129738977371e+00 2.158358794849e-01 1.011997356133e-01 3.563370972298e-03 3.600000000000e+01 1.267605633803e+00 4.900000000000e+01 1.725352112676e+00 + 3 EWK_RAP 2.312500000000e+00 8.315178393760e+03 7.000000000000e+03 4.428000000000e+03 7.700000000000e+01 7.699157805059e+00 1.738743858414e-01 1.771474186844e+01 4.000619211482e-01 5.635692680353e+00 1.272739991046e-01 5.396681593615e-01 1.218762780852e-02 1.198463911290e+00 2.706558065245e-02 -7.177770158017e-01 -1.620995970645e-02 -4.247910820243e-01 -9.593294535326e-03 -3.091214924304e-01 -6.981063514687e-03 4.698710408480e-01 1.061136045276e-02 2.605356064192e+00 5.883821283179e-02 4.066246734901e-01 9.183032373308e-03 6.905443288022e-01 1.559494870827e-02 1.065586789781e+00 2.406474231665e-02 -4.122883510640e-01 -9.310938370912e-03 -2.222918868605e-03 -5.020141979687e-05 2.111637371373e-01 4.768828751972e-03 -4.526100377543e+01 -1.022154556807e+00 5.958871381355e+01 1.345725244209e+00 -5.003254483911e-03 -1.129912936746e-04 1.014292746329e-03 2.290634025134e-05 -6.825287451754e-03 -1.541392830116e-04 -2.769392323918e-02 -6.254273540917e-04 6.852271010188e-01 1.547486678001e-02 -4.406223106422e-02 -9.950820023536e-04 -9.996058489347e-02 -2.257465783502e-03 -4.316724639363e+00 -9.748700630901e-02 -3.101131179780e+00 -7.003457948917e-02 -4.029424219011e-01 -9.099874026675e-03 3.231381514043e+00 7.297609561975e-02 -4.929906955107e-02 -1.113348454180e-03 2.520226453000e+00 5.691568322041e-02 -4.750051696163e+00 -1.072730735357e-01 4.819160671156e-02 1.088338001616e-03 5.500000000000e+01 1.242095754291e+00 7.600000000000e+01 1.716350496838e+00 + 4 EWK_RAP 2.437500000000e+00 8.315178393760e+03 7.000000000000e+03 5.823000000000e+03 8.800000000000e+01 5.838278576612e+00 1.002623832494e-01 1.439097310940e+01 2.471401873502e-01 5.566035904089e+00 9.558708404755e-02 -2.391986214651e+00 -4.107824514255e-02 -3.551921928468e-01 -6.099814405749e-03 -1.737443068735e-02 -2.983759348678e-04 -3.296774884858e-01 -5.661643285005e-03 -4.550736904528e-01 -7.815107169033e-03 6.014060984872e-01 1.032811434805e-02 2.095698384753e+00 3.599001175945e-02 8.035075574423e-01 1.379885896346e-02 1.005424051139e+00 1.726642711899e-02 7.408314091395e-01 1.272250402094e-02 -5.331301450047e-01 -9.155592392318e-03 -1.443900304104e-01 -2.479650187367e-03 4.857155411278e-01 8.341328200717e-03 -2.253807456375e+01 -3.870526286063e-01 -4.141360551526e+00 -7.112073761851e-02 -2.563392326853e-03 -4.402185002324e-05 -3.141318628169e-04 -5.394673927818e-06 1.038453870984e-02 1.783365740999e-04 -1.791503264108e-02 -3.076598427114e-04 9.487168334078e-01 1.629257828281e-02 -3.297155395541e-02 -5.662296746593e-04 -5.617137822940e-01 -9.646467152567e-03 3.677621647866e+00 6.315682033087e-02 3.466288787994e+00 5.952754229768e-02 -5.761160003537e-02 -9.893800452579e-04 7.426141561134e+00 1.275311963101e-01 2.739325236364e+00 4.704319485427e-02 -1.021972090034e+01 -1.755061119757e-01 5.074646898191e+01 8.714832385697e-01 4.471619432744e+00 7.679236532276e-02 7.300000000000e+01 1.253649321656e+00 1.000000000000e+02 1.717327837884e+00 + 5 EWK_RAP 2.562500000000e+00 8.315178393760e+03 7.000000000000e+03 6.877000000000e+03 9.500000000000e+01 5.996893917219e+00 8.720217997992e-02 1.484301497729e+01 2.158356111283e-01 5.269489895299e+00 7.662483488875e-02 -3.594970337236e+00 -5.227527028117e-02 -2.741187219997e+00 -3.986021840914e-02 1.246993725811e+00 1.813281555636e-02 -4.892499106280e-01 -7.114292723978e-03 -5.005765425755e-01 -7.278995820495e-03 7.965903106528e-01 1.158339843904e-02 2.585917906466e+00 3.760241248314e-02 1.796022833475e-01 2.611637099717e-03 8.595719321260e-01 1.249922832814e-02 5.897927826985e-01 8.576309185670e-03 1.133989273312e-01 1.648959245763e-03 -1.249790192327e-01 -1.817347960342e-03 5.870502811290e-01 8.536429855010e-03 -3.116440970132e+01 -4.531686738596e-01 -1.245548443193e+01 -1.811179937753e-01 -1.358414400409e-03 -1.975300858527e-05 -6.272593525656e-04 -9.121118984522e-06 9.692372147240e-04 1.409389580811e-05 5.617481071959e-02 8.168505266772e-04 6.423520184264e-01 9.340584825163e-03 -1.830675052535e-01 -2.662025668947e-03 -7.933777125670e-01 -1.153668332946e-02 2.196384251372e+01 3.193811620434e-01 4.451969291625e+01 6.473708436274e-01 2.246957677473e+01 3.267351574048e-01 3.752631298142e+00 5.456785368827e-02 1.081366240440e+00 1.572438912956e-02 1.125368066835e+01 1.636422955991e-01 -8.368031529335e+00 -1.216814240124e-01 -6.105904367428e-02 -8.878732539521e-04 8.600000000000e+01 1.250545295914e+00 1.180000000000e+02 1.715864475789e+00 + 6 EWK_RAP 2.687500000000e+00 8.315178393760e+03 7.000000000000e+03 7.669000000000e+03 1.000000000000e+02 5.949907003475e+00 7.758387017179e-02 1.413708255814e+01 1.843406253507e-01 5.277680065465e+00 6.881836048330e-02 -4.324795651635e+00 -5.639321491244e-02 -3.881762419546e+00 -5.061627877880e-02 3.050024424577e+00 3.977082311354e-02 -3.601690663545e-01 -4.696428039568e-03 1.059092272240e-01 1.381004397235e-03 1.365437369674e+00 1.780463384632e-02 2.029811904786e+00 2.646775205094e-02 5.096533176950e-01 6.645629387078e-03 2.471867974655e-01 3.223194646831e-03 4.315757865303e-01 5.627536660977e-03 -2.819219297349e-01 -3.676123741491e-03 -2.760050884899e-01 -3.598971032598e-03 6.540969041576e-01 8.529102935945e-03 -3.286048530825e+01 -4.284846173980e-01 -1.769822854830e+01 -2.307762230839e-01 -1.256896513772e-05 -1.638931430137e-07 -1.263697281219e-03 -1.647799297456e-05 2.834729980282e-02 3.696348911569e-04 1.264931117016e-01 1.649408158842e-03 5.245922592698e-01 6.840425860866e-03 -3.328874883915e-01 -4.340689638695e-03 -5.689330600890e-01 -7.418608163893e-03 2.922100600365e+01 3.810275916502e-01 -4.238654839833e+01 -5.526998096014e-01 1.709617534083e+01 2.229257444365e-01 2.252150437953e+00 2.936693751406e-02 1.602360084831e+00 2.089398989218e-02 8.884046829058e+00 1.158436149310e-01 -4.695198903532e+00 -6.122309171380e-02 -1.566783623812e+00 -2.043009028311e-02 9.600000000000e+01 1.251792932586e+00 1.320000000000e+02 1.721215282305e+00 + 7 EWK_RAP 2.812500000000e+00 8.315178393760e+03 7.000000000000e+03 8.306000000000e+03 1.040000000000e+02 5.835444039374e+00 7.025576738953e-02 1.308828552662e+01 1.575762765064e-01 5.492704668225e+00 6.612936032055e-02 -4.021133143361e+00 -4.841239036072e-02 -3.912196688307e+00 -4.710085105113e-02 3.486660073697e+00 4.197760743676e-02 2.117924831785e-01 2.549873382837e-03 8.777885622213e-01 1.056812620059e-02 1.878636012772e+00 2.261781859827e-02 9.027896072396e-01 1.086912602022e-02 -1.183085707080e+00 -1.424374797833e-02 1.140197903034e+00 1.372740071074e-02 4.738053765137e-01 5.704374867730e-03 -3.155168234501e-01 -3.798661491092e-03 -6.446447044376e-01 -7.761193166839e-03 5.576028659724e-01 6.713253864344e-03 -3.436525962411e+01 -4.137401832905e-01 -2.288666792955e+01 -2.755437988147e-01 4.724214571572e-04 5.687713185134e-06 -1.347815966577e-03 -1.622701621210e-05 2.537502237640e-02 3.055023161136e-04 1.123918942704e-01 1.353141033836e-03 4.070390546187e-01 4.900542434610e-03 -2.853761232434e-01 -3.435782846658e-03 -9.633357122381e-01 -1.159807021717e-02 -5.080381634416e+01 -6.116520147382e-01 -4.120146803768e+00 -4.960446428808e-02 1.412750180240e+01 1.700879099735e-01 1.845178331846e+00 2.221500519920e-02 1.495579517246e+00 1.800601393265e-02 9.740693365026e+00 1.172729757407e-01 -2.787873471685e+00 -3.356457346117e-02 2.992023172942e-01 3.602243165112e-03 1.040000000000e+02 1.252106910667e+00 1.430000000000e+02 1.721647002167e+00 + 8 EWK_RAP 2.937500000000e+00 8.315178393760e+03 7.000000000000e+03 8.241000000000e+03 1.030000000000e+02 4.578463173209e+00 5.555713109100e-02 1.149297540280e+01 1.394609319597e-01 5.342727368766e+00 6.483105653156e-02 -4.126356809329e+00 -5.007106915822e-02 -3.992260887375e+00 -4.844388893793e-02 3.659835297394e+00 4.441008733641e-02 1.241780764646e+00 1.506832623038e-02 2.207417830905e+00 2.678580064198e-02 1.554592021193e+00 1.886411868940e-02 6.499439295901e-01 7.886711923191e-03 -2.024145569790e-01 -2.456189260757e-03 7.346344891239e-01 8.914385258147e-03 1.501660626415e-01 1.822182534177e-03 -1.871901022181e-01 -2.271448880210e-03 -9.502953125299e-01 -1.153131067261e-02 6.382116555838e-01 7.744347234362e-03 -2.802284174040e+01 -3.400417636258e-01 -1.536037063964e+01 -1.863896449417e-01 -1.010497871591e-02 -1.226183559751e-04 4.262158936433e-03 5.171895323908e-05 5.849862498121e-02 7.098486225120e-04 2.142649251588e-01 2.599986957394e-03 4.065927686351e-01 4.933779500486e-03 -5.178959102669e-01 -6.284381874371e-03 -1.054833331548e+00 -1.279982200641e-02 5.178392681818e+00 6.283694553838e-02 3.829689715120e+00 4.647117722509e-02 -5.120257865708e+01 -6.213151153632e-01 1.098105440925e+00 1.332490524117e-02 3.038890187922e+00 3.687526013738e-02 2.030107936111e+01 2.463424264180e-01 -2.839324583945e+00 -3.445364135353e-02 4.512831009069e-01 5.476072089636e-03 1.030000000000e+02 1.249848319379e+00 1.420000000000e+02 1.723091857784e+00 + 9 EWK_RAP 3.062500000000e+00 8.315178393760e+03 7.000000000000e+03 7.783000000000e+03 9.900000000000e+01 3.946085893979e+00 5.070134773196e-02 9.331747682826e+00 1.198991093772e-01 4.502646795677e+00 5.785232938040e-02 -3.526619992171e+00 -4.531183338264e-02 -3.639029666607e+00 -4.675613088278e-02 3.225984386534e+00 4.144911199453e-02 2.158848236182e+00 2.773799609639e-02 2.236535199328e+00 2.873615828508e-02 1.213648254249e+00 1.559357900872e-02 2.967678491359e-01 3.813026456840e-03 8.236260631450e-01 1.058237264737e-02 3.484094277138e-01 4.476544105278e-03 8.854711601839e-02 1.137699036598e-03 -9.344478855826e-01 -1.200626860571e-02 -1.053365235501e+00 -1.353418007839e-02 -8.875471213300e-02 -1.140366338597e-03 -2.005967984288e+01 -2.577371173439e-01 -8.695726652384e+00 -1.117271829935e-01 -1.042377464094e-02 -1.339300352171e-04 4.045355376677e-03 5.197681326837e-05 6.267162582013e-02 8.052373868704e-04 2.381279322202e-01 3.059590546321e-03 3.754999968959e-01 4.824617716766e-03 -6.042913104888e-01 -7.764246569302e-03 -2.189527828655e+00 -2.813218333104e-02 3.262907577218e-01 4.192352020067e-03 2.665093396520e+00 3.424249513710e-02 -7.492399150283e+00 -9.626621033384e-02 1.845347179457e+00 2.370997275417e-02 6.137185313168e+00 7.885372366913e-02 -3.440405226289e+01 -4.420410158409e-01 -8.058504970994e+00 -1.035398300269e-01 -3.836148149358e+01 -4.928881086159e-01 9.700000000000e+01 1.246306051651e+00 1.340000000000e+02 1.721701143518e+00 + 10 EWK_RAP 3.187500000000e+00 8.315178393760e+03 7.000000000000e+03 7.094000000000e+03 9.600000000000e+01 3.329647992192e+00 4.693611491672e-02 7.588394300457e+00 1.069691894623e-01 3.714550452723e+00 5.236186147059e-02 -3.355035483932e+00 -4.729398765058e-02 -3.621024089380e+00 -5.104347461770e-02 3.303344767856e+00 4.656533363203e-02 2.778731234034e+00 3.917016117894e-02 1.790874580344e+00 2.524491937332e-02 6.991734741610e-01 9.855842601649e-03 2.116857061311e-01 2.984010517777e-03 -4.193254329695e-01 -5.910987214118e-03 1.034664667892e+00 1.458506721021e-02 9.249825327155e-01 1.303894182007e-02 -1.151342889063e+00 -1.622981236345e-02 -3.175887779463e-01 -4.476864645423e-03 -8.103817316899e-01 -1.142348085269e-02 -1.765115184322e+01 -2.488180412070e-01 -8.468050345075e+00 -1.193691900913e-01 -2.284100993512e-02 -3.219764580649e-04 3.460528125958e-03 4.878105618773e-05 1.033576253892e-01 1.456972446986e-03 3.639258931235e-01 5.130052059818e-03 4.209886404778e-01 5.934432484886e-03 -9.238706063651e-01 -1.302326763977e-02 -2.541392203981e+00 -3.582453064535e-02 1.439461394709e+00 2.029125168747e-02 5.679517012299e-01 8.006085441640e-03 -6.136048179722e+00 -8.649630927153e-02 1.193661271391e+00 1.682635003371e-02 7.949020796080e+00 1.120527318308e-01 -3.306818546504e+01 -4.661430147313e-01 -1.423410830257e+01 -2.006499619759e-01 3.793320406535e+01 5.347223578426e-01 8.900000000000e+01 1.254581336341e+00 1.220000000000e+02 1.719763180152e+00 + 11 EWK_RAP 3.312500000000e+00 8.315178393760e+03 7.000000000000e+03 5.894000000000e+03 8.700000000000e+01 2.264497044802e+00 3.842037741436e-02 5.303611386018e+00 8.998322677329e-02 2.996558016485e+00 5.084082145376e-02 -2.980807370554e+00 -5.057358959203e-02 -2.671718796563e+00 -4.532946719652e-02 2.820379868591e+00 4.785171137753e-02 3.075916761244e+00 5.218725417788e-02 6.002068928431e-01 1.018335413714e-02 5.652411860656e-01 9.590111741866e-03 -1.566211518698e-01 -2.657298131486e-03 -5.227061713302e-01 -8.868445390739e-03 2.012909067865e-01 3.415183352333e-03 -5.896119165051e-03 -1.000359546157e-04 -7.277698680109e-01 -1.234763943011e-02 -8.209984498231e-01 -1.392939344797e-02 -1.141179059817e+00 -1.936170783538e-02 -1.131013888738e+01 -1.918924141055e-01 -5.191444509732e+00 -8.808015795270e-02 -2.707280314159e-02 -4.593281836035e-04 1.224337898487e-02 2.077261449758e-04 1.243196398124e-01 2.109257546868e-03 6.384437220314e-01 1.083209572500e-02 2.366452339608e-01 4.015019239240e-03 -1.418444272579e+00 -2.406590214759e-02 -6.182965470300e+00 -1.049027056379e-01 7.831071066216e-01 1.328651351581e-02 3.367636386205e-01 5.713668792340e-03 -3.607855843972e+00 -6.121234889671e-02 2.585577771625e-02 4.386796354979e-04 -4.518748682643e+01 -7.666692708929e-01 -8.204394050542e+00 -1.391990846716e-01 -8.109805549899e-01 -1.375942577180e-02 1.608490642009e+00 2.729030610806e-02 7.400000000000e+01 1.255514082117e+00 1.010000000000e+02 1.713607058025e+00 + 12 EWK_RAP 3.437500000000e+00 8.315178393760e+03 7.000000000000e+03 4.160000000000e+03 7.300000000000e+01 1.513515582228e+00 3.638258611124e-02 3.204453826819e+00 7.703014006777e-02 1.799559002831e+00 4.325862987574e-02 -2.038005776687e+00 -4.899052347804e-02 -2.137992517158e+00 -5.139405089322e-02 2.256180641108e+00 5.423511156510e-02 2.632218317869e+00 6.327447879492e-02 2.569300036796e-01 6.176202011529e-03 3.290430192703e-01 7.909687963228e-03 -4.158887653751e-01 -9.997326090747e-03 -1.247072403050e-01 -2.997770199640e-03 3.381443620304e-01 8.128470241117e-03 3.436493649734e-01 8.260802042630e-03 -1.198437815210e+00 -2.880860132716e-02 -5.030735536073e-01 -1.209311426941e-02 -1.151770908762e+00 -2.768680069140e-02 -6.947361726461e+00 -1.670038876553e-01 -3.100402076840e+00 -7.452889607789e-02 -3.595434514380e-02 -8.642871428797e-04 1.526984407446e-02 3.670635594821e-04 1.735749527780e-01 4.172474826393e-03 7.430732660387e-01 1.786233812593e-02 6.040761669964e-01 1.452106170664e-02 -2.666394271415e+00 -6.409601613978e-02 3.896666071836e+01 9.366985749605e-01 3.034345369236e-02 7.294099445279e-04 5.885813903365e-01 1.414859111386e-02 -1.603678879423e+00 -3.854997306305e-02 7.008919590570e-02 1.684836440041e-03 -5.872159828054e+00 -1.411576881744e-01 -4.203612781037e+00 -1.010483841596e-01 -1.047641377416e+00 -2.518368695713e-02 5.798344606414e-01 1.393832838080e-02 5.200000000000e+01 1.250000000000e+00 7.200000000000e+01 1.730769230769e+00 + 13 EWK_RAP 3.562500000000e+00 8.315178393760e+03 7.000000000000e+03 2.896000000000e+03 6.100000000000e+01 9.599677202731e-01 3.314805663927e-02 1.890105760902e+00 6.526608290408e-02 1.037815979114e+00 3.583618712409e-02 -1.274120810302e+00 -4.399588433362e-02 -1.475782148750e+00 -5.095932834082e-02 1.471073157680e+00 5.079672505801e-02 2.111110656304e+00 7.289746741381e-02 2.702139970611e-01 9.330593821171e-03 1.883685532753e-01 6.504438994313e-03 -4.503325027711e-01 -1.555015548243e-02 -2.300516023220e-01 -7.943770798412e-03 4.381571310580e-01 1.512973518847e-02 1.044932945599e-01 3.608193872925e-03 -3.979064815391e-01 -1.373986469403e-02 -4.820039908600e-01 -1.664378421478e-02 -1.205219592605e+00 -4.161669863968e-02 -3.879639564559e+00 -1.339654545773e-01 -1.600871097203e+00 -5.527869810784e-02 -5.258820632226e-02 -1.815891102288e-03 2.174493239245e-02 7.508609251536e-04 2.841202770326e-01 9.810783046705e-03 1.938211920111e+00 6.692720718615e-02 -1.802312772999e+00 -6.223455707870e-02 2.894269103912e+01 9.994023148866e-01 3.028573834326e+00 1.045778257709e-01 1.877888611644e-01 6.484422001534e-03 2.317626729747e-03 8.002854729790e-05 -1.037006973423e+00 -3.580825184471e-02 -8.391998313438e-02 -2.897789472872e-03 -2.140868155812e+00 -7.392500538024e-02 -1.873047094950e+00 -6.467704057148e-02 -7.474623468953e-01 -2.581016391213e-02 5.228886016722e-01 1.805554563785e-02 3.600000000000e+01 1.243093922652e+00 5.000000000000e+01 1.726519337017e+00 + 14 EWK_RAP 3.687500000000e+00 8.315178393760e+03 7.000000000000e+03 1.741000000000e+03 4.700000000000e+01 6.016101755163e-01 3.455543799634e-02 1.159718312656e+00 6.661219486821e-02 4.396384762276e-01 2.525206641169e-02 -6.948774891508e-01 -3.991254963531e-02 -9.415241508082e-01 -5.407950320553e-02 9.991327629540e-01 5.738844129546e-02 1.517455373657e+00 8.715998699927e-02 -1.275478452722e-01 -7.326125518217e-03 1.364818263896e-01 7.839277793771e-03 -4.969527771764e-02 -2.854409978038e-03 -2.737254510374e-01 -1.572231194930e-02 -9.215309773611e-02 -5.293113023326e-03 1.935480716390e-02 1.111706327622e-03 -2.177774022184e-01 -1.250875371731e-02 -2.160632741753e-01 -1.241029719560e-02 -9.735042680170e-01 -5.591638529678e-02 -2.057800954270e+00 -1.181964936398e-01 -1.064487522164e+00 -6.114230454701e-02 -8.033514707305e-02 -4.614310572835e-03 3.174027000874e-02 1.823105686889e-03 5.208458815890e-01 2.991647797754e-02 -2.246423802267e+01 -1.290306606702e+00 -1.861080012114e-01 -1.068971862214e-02 2.308734684644e+00 1.326096889514e-01 1.269956526867e+00 7.294408540305e-02 9.091516552426e-02 5.222008358659e-03 -3.267479133670e-02 -1.876782960178e-03 -6.681291423820e-01 -3.837617130281e-02 -1.328050850874e-01 -7.628092193420e-03 -1.398910191813e+00 -8.035095874862e-02 -1.096506654742e+00 -6.298142761300e-02 -5.238493042773e-01 -3.008898933241e-02 3.056880593235e-01 1.755818835862e-02 2.200000000000e+01 1.263641585296e+00 3.000000000000e+01 1.723147616312e+00 + 15 EWK_RAP 3.812500000000e+00 8.315178393760e+03 7.000000000000e+03 8.250000000000e+02 3.200000000000e+01 3.036352892130e-01 3.680427748036e-02 4.648760921171e-01 5.634861722632e-02 1.247745665661e-01 1.512418988679e-02 -2.990583911457e-01 -3.624950195705e-02 -2.470346698835e-01 -2.994359634951e-02 3.700600797043e-01 4.485576723689e-02 7.531431717298e-01 9.129008142179e-02 4.223931399266e-02 5.119916847595e-03 1.371971130064e-01 1.662995309169e-02 -5.124500846424e-02 -6.211516177484e-03 3.683431175744e-02 4.464765061507e-03 -5.947581630079e-02 -7.209189854641e-03 1.642122107606e-01 1.990451039522e-02 -5.626317963546e-03 -6.819779349753e-04 -1.498812218492e-01 -1.816742083020e-02 -4.003126761957e-01 -4.852274862979e-02 -8.420927175200e-01 -1.020718445479e-01 -4.362886784121e-01 -5.288347617117e-02 -1.268571768674e-01 -1.537662749908e-02 3.590177446606e-02 4.351730238310e-03 -1.384914420416e+01 -1.678684145959e+00 -7.806083967758e-01 -9.461919960919e-02 -1.158105012621e-02 -1.403763651662e-03 6.179383606707e-01 7.490161947524e-02 5.014764801033e-01 6.078502789130e-02 2.547230563101e-02 3.087552197698e-03 -4.103092349987e-02 -4.973445272711e-03 -3.260498029392e-01 -3.952118823505e-02 -8.077100472462e-02 -9.790424815105e-03 -4.611880391127e-01 -5.590158049850e-02 -4.947110792670e-01 -5.996497930510e-02 -1.691193148182e-01 -2.049931088706e-02 1.549263300014e-01 1.877894909108e-02 1.000000000000e+01 1.212121212121e+00 1.400000000000e+01 1.696969696970e+00 + 16 EWK_RAP 3.937500000000e+00 8.315178393760e+03 7.000000000000e+03 3.210000000000e+02 2.000000000000e+01 1.054743946557e-01 3.285806687094e-02 1.890484796076e-01 5.889360735439e-02 6.667300003303e-02 2.077040499471e-02 -6.995541406090e-02 -2.179296388190e-02 -7.973775749773e-02 -2.484042289649e-02 8.186155470483e-02 2.550204196412e-02 3.604189154263e-01 1.122800359584e-01 7.937458417984e-03 2.472728479123e-03 1.042563000352e-02 3.247859814180e-03 -8.489985408109e-03 -2.644855267324e-03 -1.446984880781e-02 -4.507741061624e-03 2.872353555604e-02 8.948141917768e-03 -1.097531886161e-02 -3.419102449099e-03 -9.030114418191e-03 -2.813119756446e-03 -7.014820567991e-02 -2.185302357630e-02 -1.720488845844e-01 -5.359778335964e-02 -3.004615413739e-01 -9.360172628469e-02 -7.927931968985e-02 -2.469760738002e-02 7.961504650894e+00 2.480219517412e+00 1.450203160325e-01 4.517766854594e-02 -2.098455905845e-01 -6.537245812600e-02 -2.160960617221e-01 -6.731964539631e-02 -6.734604526794e-02 -2.098007640746e-02 1.966034495991e-01 6.124718056048e-02 1.817441829290e-01 5.661812552306e-02 2.387752429938e-02 7.438481090150e-03 2.189847310561e-02 6.821954238508e-03 -1.244162960116e-01 -3.875897072012e-02 -3.063305733633e-02 -9.543008515992e-03 -1.759780815503e-01 -5.482183225865e-02 -1.928278224849e-01 -6.007097273672e-02 -5.513058728121e-02 -1.717463778231e-02 7.793893164793e-02 2.428004101182e-02 4.000000000000e+00 1.246105919003e+00 6.000000000000e+00 1.869158878505e+00 + 17 EWK_RAP 4.125000000000e+00 8.315178393760e+03 7.000000000000e+03 1.150000000000e+02 1.300000000000e+01 2.431429482113e-02 2.114286506186e-02 9.692113929868e-02 8.427925156407e-02 3.333161308883e-02 2.898401138159e-02 -6.107345051605e-02 -5.310734827483e-02 -6.352349208670e-02 -5.523781920582e-02 6.298347307032e-02 5.476823745246e-02 1.846655932998e-01 1.605787767824e-01 -1.854758747129e-02 -1.612833693156e-02 -2.871769259811e-02 -2.497190660705e-02 -5.370278836507e-02 -4.669807683919e-02 5.287405830174e-02 4.597744200152e-02 2.245687540264e-02 1.952771774143e-02 -3.088389927409e-02 -2.685556458617e-02 -6.185834377487e-02 -5.378986415206e-02 -9.215479111592e-03 -8.013460097037e-03 -1.371952082797e-01 -1.193001811128e-01 -1.172368426051e-01 -1.019450805262e-01 -3.585346561827e-02 -3.117692662458e-02 1.914372746921e-01 1.664671953845e-01 -5.982138587282e+00 -5.201859641114e+00 -8.356906426435e-02 -7.266875153421e-02 -1.183224539938e-01 -1.028890904294e-01 -2.564716783907e-02 -2.230188507745e-02 1.137984782274e-01 9.895519845861e-02 1.088119461591e-01 9.461908361657e-02 1.107845929051e-02 9.633442861317e-03 1.241181587627e-02 1.079288337067e-02 -7.756686666245e-02 -6.744944927169e-02 -1.230576529054e-02 -1.070066547003e-02 -1.193173530295e-01 -1.037542200256e-01 -8.057415546990e-02 -7.006448301730e-02 -2.658392835319e-02 -2.311645943756e-02 7.594828848132e-03 6.604198998376e-03 1.000000000000e+00 8.695652173913e-01 2.000000000000e+00 1.739130434783e+00 diff --git a/nnpdfcpp/data/commondata/DATA_LHCBZMU8TEV.dat b/nnpdfcpp/data/commondata/DATA_LHCBZMU8TEV.dat new file mode 100644 index 0000000000..d3fa983949 --- /dev/null +++ b/nnpdfcpp/data/commondata/DATA_LHCBZMU8TEV.dat @@ -0,0 +1,19 @@ +LHCBZMU8TEV 36 18 + 1 EWK_RAP 2.062500000000e+00 8.315178393760e+03 8.000000000000e+03 1.223000000000e+03 3.300000000000e+01 1.312937135745e+01 1.073538132252e+00 6.853465481115e-01 5.603814784231e-02 1.813615312414e+00 1.482923395269e-01 1.637891956526e+00 1.339241174592e-01 1.005644788150e+00 8.222770140226e-02 9.250488794403e-01 7.563768433690e-02 6.130610634101e-01 5.012764214310e-02 -1.033777871097e+00 -8.452803524917e-02 -9.022978319043e-01 -7.377741879839e-02 -5.049756150291e-01 -4.128991128611e-02 -8.765726686087e-01 -7.167397126808e-02 5.378206330644e-01 4.397552191859e-02 -1.089552309328e-01 -8.908849626557e-03 4.881555518108e-01 3.991459949394e-02 2.655680538396e-01 2.171447701060e-02 -3.401879609855e-02 -2.781585944281e-03 -1.151594407699e+01 -9.416143971373e-01 8.061168467579e-02 6.591307005380e-03 5.449798823334e-02 4.456090615972e-03 9.944936568493e-05 8.131591634091e-06 7.574441556976e-03 6.193329155336e-04 -3.607870927392e-03 -2.950017111523e-04 -2.232461165909e-01 -1.825397519141e-02 -5.565016708389e+00 -4.550299843327e-01 2.609714050557e-01 2.133862674208e-02 3.997407191474e+01 3.268525912898e+00 -2.794315526081e+01 -2.284804191399e+00 -1.632894214901e+01 -1.335154713738e+00 -4.436995222446e+00 -3.627960116473e-01 8.115865284673e-01 6.636030486241e-02 3.755659425690e-01 3.070858074972e-02 1.969601356722e+00 1.610467176388e-01 -2.632405659704e+00 -2.152416729112e-01 -1.664720971068e-01 -1.361178226547e-02 1.400000000000e+01 1.144726083401e+00 1.400000000000e+01 1.144726083401e+00 + 2 EWK_RAP 2.187500000000e+00 8.315178393760e+03 8.000000000000e+03 3.263000000000e+03 5.100000000000e+01 1.984410989916e+01 6.081553753956e-01 -3.342805276756e-01 -1.024457639214e-02 -2.670922737160e+00 -8.185481879130e-02 1.122291532866e+00 3.439446928795e-02 2.244539640696e+00 6.878760774427e-02 1.231841204003e+00 3.775179908069e-02 9.643207591597e-01 2.955319519337e-02 -2.290860727969e+00 -7.020719362454e-02 -1.134280089907e+00 -3.476187832997e-02 8.548057471099e-01 2.619692758535e-02 -1.796249557178e+00 -5.504902105970e-02 -7.911083910552e-02 -2.424481737834e-03 -4.729515020258e-01 -1.449437640287e-02 -2.558186095240e-01 -7.839981903894e-03 3.882769649811e-01 1.189938599391e-02 6.521893670246e-02 1.998741547731e-03 -2.003065356652e+01 -6.138723127956e-01 -8.725074045326e-02 -2.673942398200e-03 4.723338963289e-02 1.447544886083e-03 5.938906839721e-05 1.820075648091e-06 5.317597654019e-03 1.629665232614e-04 1.228096137838e-02 3.763702537044e-04 2.200826518230e-01 6.744794723354e-03 -1.033430306699e+01 -3.167117090712e-01 -1.891030561789e+00 -5.795374078422e-02 -3.141218722750e+01 -9.626781252680e-01 -3.161235148558e+01 -9.688124880655e-01 -2.407634153634e+01 -7.378590725204e-01 -7.556695045742e+00 -2.315873443378e-01 -1.063614256142e+00 -3.259620766600e-02 -1.678562392085e+00 -5.144230438508e-02 3.831782907903e+00 1.174312874013e-01 -4.904694970248e+00 -1.503124416257e-01 -1.446277076600e+00 -4.432353897026e-02 3.800000000000e+01 1.164572479314e+00 3.800000000000e+01 1.164572479314e+00 + 3 EWK_RAP 2.312500000000e+00 8.315178393760e+03 8.000000000000e+03 4.983000000000e+03 6.200000000000e+01 2.106803631144e+01 4.227982402457e-01 -2.818726360958e+00 -5.656685452454e-02 -7.429751053130e+00 -1.491019677530e-01 1.236385409231e+00 2.481206921997e-02 4.400202992756e-01 8.830429445628e-03 8.285805636547e-01 1.662814697280e-02 1.833307684412e-01 3.679124391756e-03 -1.886683246120e+00 -3.786239707246e-02 -1.074860104126e+00 -2.157054192506e-02 9.841457536128e-01 1.975006529426e-02 -2.226573863378e+00 -4.468340083038e-02 -5.655169182101e-01 -1.134892470821e-02 -4.881568704057e-01 -9.796445322209e-03 7.820357793523e-01 1.569407544355e-02 5.919509595143e-02 1.187940918150e-03 1.109725097614e+00 2.227022070268e-02 -2.469985819748e+01 -4.956824843965e-01 2.846572509886e-02 5.712567750123e-04 3.260600131398e-02 6.543447985948e-04 3.105265933389e-05 6.231719713805e-07 -2.763372642623e-03 -5.545600326356e-05 1.714976905992e-02 3.441655440482e-04 1.467691264232e-01 2.945396877849e-03 -1.256580518240e+01 -2.521734935260e-01 6.256157595738e-01 1.255500219895e-02 3.587946103171e+00 7.200373476160e-02 3.192536187497e+01 6.406855684320e-01 -4.075747797835e+01 -8.179305233464e-01 -8.403699350567e+00 -1.686473881310e-01 2.152584070890e+00 4.319855650993e-02 -1.111898663890e+00 -2.231384033493e-02 3.401419929564e+00 6.826048423768e-02 -4.750919333405e+00 -9.534255134267e-02 -1.094803557002e+00 -2.197077176403e-02 5.700000000000e+01 1.143889223359e+00 5.800000000000e+01 1.163957455348e+00 + 4 EWK_RAP 2.437500000000e+00 8.315178393760e+03 8.000000000000e+03 6.719000000000e+03 7.000000000000e+01 2.333879393521e+01 3.473551709363e-01 -5.015020292076e+00 -7.463938520726e-02 -8.195207361706e+00 -1.219706408946e-01 3.616794632949e+00 5.382935902589e-02 -1.537589695146e+00 -2.288420442247e-02 -5.055645332319e-01 -7.524401447119e-03 1.656605444021e-01 2.465553570504e-03 -1.367423699519e+00 -2.035159546837e-02 -9.863174769317e-01 -1.467952786027e-02 1.168914762977e-01 1.739715378742e-03 -2.762797963782e+00 -4.111918386341e-02 -7.334770006817e-01 -1.091646079300e-02 -3.971020272107e-01 -5.910135841802e-03 9.513343420516e-01 1.415886801684e-02 5.236614050230e-01 7.793740214661e-03 -1.432810303335e-01 -2.132475522154e-03 -3.310807446118e+01 -4.927530058219e-01 -3.803307862355e-03 -5.660526659257e-05 4.012076569188e-02 5.971240614954e-04 1.167698609016e-05 1.737905356475e-07 5.199428393584e-03 7.738396180360e-05 -3.020457034224e-03 -4.495396687340e-05 -1.382310113905e-01 -2.057315246175e-03 -2.018490057863e+01 -3.004152489750e-01 7.835344757734e-01 1.166147456129e-02 1.542861258893e+00 2.296266198680e-02 2.911339229778e+00 4.332994835211e-02 1.987734374494e+01 2.958378292147e-01 -1.881752249516e+01 -2.800643324179e-01 -5.171011463680e+00 -7.696102788630e-02 -3.266548144615e+00 -4.861658200052e-02 4.533543603498e+01 6.747348717813e-01 -6.762197326304e+00 -1.006429130273e-01 -1.077789565837e+01 -1.604092224792e-01 7.700000000000e+01 1.146003869623e+00 7.800000000000e+01 1.160887036761e+00 + 5 EWK_RAP 2.562500000000e+00 8.315178393760e+03 8.000000000000e+03 8.051000000000e+03 7.600000000000e+01 2.362879238802e+01 2.934889130297e-01 -6.871934369335e+00 -8.535504122886e-02 -8.838236802398e+00 -1.097781244864e-01 5.753727209186e+00 7.146599440052e-02 -1.540298433635e+00 -1.913176541591e-02 -3.451192706498e-01 -4.286663403923e-03 -4.131058166845e-01 -5.131111870383e-03 5.073510714926e-01 6.301714960782e-03 -1.578894111876e+00 -1.961115528351e-02 -7.607246969865e-01 -9.448822469090e-03 -2.673007365634e+00 -3.320093610277e-02 -1.241747481749e+00 -1.542351859085e-02 -7.432869137168e-01 -9.232230949159e-03 5.989974516239e-01 7.440037903663e-03 6.637383592046e-02 8.244172887898e-04 -7.411626588090e-01 -9.205845967073e-03 -3.649951097455e+01 -4.533537569811e-01 1.532856339107e-01 1.903932851953e-03 5.044391052271e-02 6.265545959844e-04 -5.846611289619e-06 -7.261969059271e-08 1.752413952334e-04 2.176641351800e-06 8.085268741457e-03 1.004256457764e-04 -4.911013493766e-01 -6.099880131370e-03 -1.763914440712e+01 -2.190925898289e-01 1.555577025693e+00 1.932153801631e-02 2.941962686747e-01 3.654158100543e-03 1.451310044454e+00 1.802645689299e-02 1.299733153219e+01 1.614374802160e-01 -2.222192546156e+01 -2.760144759851e-01 -7.424115260800e+00 -9.221357919265e-02 1.012457166503e+01 1.257554547886e-01 -2.284933790302e+01 -2.838074512858e-01 -1.078810436100e+01 -1.339970731710e-01 4.044768877868e+01 5.023933521138e-01 9.300000000000e+01 1.155136007949e+00 9.400000000000e+01 1.167556825239e+00 + 6 EWK_RAP 2.687500000000e+00 8.315178393760e+03 8.000000000000e+03 8.967000000000e+03 7.900000000000e+01 2.330563882218e+01 2.599045257297e-01 -7.893736699339e+00 -8.803096575599e-02 -9.253795984806e+00 -1.031983493343e-01 7.241905559105e+00 8.076174371702e-02 -1.912372224724e+00 -2.132677846240e-02 5.912138549586e-01 6.593217965414e-03 -4.652249383991e-02 -5.188189343137e-04 7.199048005799e-01 8.028379620607e-03 -1.828692488405e+00 -2.039358189366e-02 -2.183225702046e+00 -2.434733692479e-02 -2.015036523294e+00 -2.247169090325e-02 -1.835374982911e+00 -2.046810508432e-02 1.518734723204e-03 1.693693234309e-05 4.820989621951e-01 5.376368486618e-03 -1.213798569671e+00 -1.353628381478e-02 -1.121115480524e+00 -1.250268183924e-02 -3.692425033444e+01 -4.117793056143e-01 2.127352107076e-01 2.372423449399e-03 9.023808536278e-02 1.006335288979e-03 -1.418860172918e-05 -1.582313118008e-07 8.850403418054e-03 9.869971471009e-05 2.487825307335e-02 2.774423226648e-04 -5.683465667233e-01 -6.338201926210e-03 -9.560426327352e+00 -1.066178914615e-01 1.683538823935e+00 1.877482796850e-02 6.834505876370e-01 7.621842172823e-03 6.825047571967e-01 7.611294270065e-03 7.890847045524e+00 8.799874033148e-02 -1.445530599396e+01 -1.612055982375e-01 -1.042790997024e+01 -1.162920705949e-01 2.656207575694e+00 2.962203162366e-02 -2.980150469562e+01 -3.323464335410e-01 1.883353500367e+01 2.100316159660e-01 -4.025708269327e+01 -4.489470580269e-01 1.030000000000e+02 1.148656183785e+00 1.050000000000e+02 1.170960187354e+00 + 7 EWK_RAP 2.812500000000e+00 8.315178393760e+03 8.000000000000e+03 9.561000000000e+03 8.100000000000e+01 2.312287055366e+01 2.418457332251e-01 -8.472992295351e+00 -8.862035660863e-02 -9.978884071327e+00 -1.043707151064e-01 8.191892596978e+00 8.568029073295e-02 -2.170985058689e+00 -2.270667355600e-02 1.192720228358e+00 1.247484811587e-02 -1.027768527952e+00 -1.074959238523e-02 1.322256330842e+00 1.382968654787e-02 -3.390668514565e-01 -3.546353430149e-03 -2.559980432575e+00 -2.677523724061e-02 -1.607483272459e+00 -1.681291990858e-02 -1.614987442947e+00 -1.689140720581e-02 -1.816302646114e-01 -1.899699452059e-03 1.317510032847e+00 1.378004427201e-02 -1.293720350513e+00 -1.353122424969e-02 -4.372359769180e-01 -4.573119725113e-03 -3.900203494075e+01 -4.079284064507e-01 2.942383397581e-01 3.077484988580e-03 5.958653229903e-02 6.232248959212e-04 -1.548696283131e-05 -1.619805755811e-07 6.718922393634e-03 7.027426413172e-05 1.818785300700e-02 1.902296099467e-04 -8.058671737706e-01 -8.428691285123e-03 -7.740143059286e+00 -8.095537139719e-02 2.274379055527e+00 2.378808760095e-02 9.438822433667e-01 9.872212565283e-03 2.354691524266e-01 2.462808831991e-03 4.673162285710e+00 4.887733799509e-02 3.163416661777e+01 3.308667149647e-01 -4.348764566811e+00 -4.548441132529e-02 -4.720725640418e+01 -4.937481058904e-01 -6.675227803606e+00 -6.981725555493e-02 -7.705400922725e+00 -8.059199793667e-02 4.070133303428e+00 4.257016319870e-02 1.100000000000e+02 1.150507269114e+00 1.120000000000e+02 1.171425583098e+00 + 8 EWK_RAP 2.937500000000e+00 8.315178393760e+03 8.000000000000e+03 9.822000000000e+03 8.200000000000e+01 2.085999640062e+01 2.123803339505e-01 -8.242540680871e+00 -8.391916799909e-02 -8.961204056550e+00 -9.123604211515e-02 8.614385898952e+00 8.770500813431e-02 -2.306048360099e+00 -2.347839910506e-02 1.379918925231e+00 1.404926619051e-02 -1.763104057565e+00 -1.795056055351e-02 1.204438762600e+00 1.226266302790e-02 2.922352968786e-02 2.975313549975e-04 -3.021580237130e+00 -3.076339072623e-02 -1.414299254216e+00 -1.439930008365e-02 -1.188972363053e+00 -1.210519612150e-02 9.257611979898e-01 9.425383811747e-03 6.372331880604e-01 6.487814987379e-03 -3.263646033902e-01 -3.322791726636e-03 -8.296699988914e-01 -8.447057614452e-03 -3.431148751935e+01 -3.493330026405e-01 4.318081034914e-01 4.396335812374e-03 1.217992677226e-01 1.240065849344e-03 -2.223371221677e-05 -2.263664448867e-07 4.079579657238e-03 4.153512173934e-05 4.109755671296e-02 4.184235055280e-04 -1.238366902775e+00 -1.260809308466e-02 5.553499113305e-01 5.654142856145e-03 3.847663593633e+00 3.917393192459e-02 -1.214500716627e+00 -1.236510605404e-02 -1.089658879005e+00 -1.109406311347e-02 5.220822383000e+00 5.315437164529e-02 4.056607732585e+00 4.130123938693e-02 5.373393248419e+01 5.470773007960e-01 5.961938629068e+00 6.069984350507e-02 1.723904769556e-01 1.755146375031e-03 1.369996479874e+01 1.394824353364e-01 2.433988169905e+00 2.478098320001e-02 1.130000000000e+02 1.150478517614e+00 1.150000000000e+02 1.170840969253e+00 + 9 EWK_RAP 3.062500000000e+00 8.315178393760e+03 8.000000000000e+03 9.721000000000e+03 8.100000000000e+01 2.022398325060e+01 2.080442675713e-01 -8.154175836436e+00 -8.388206806333e-02 -9.263273566379e+00 -9.529136474003e-02 9.718752686920e+00 9.997688187347e-02 -2.815203846765e+00 -2.896002311249e-02 1.870230536609e+00 1.923907557462e-02 -1.642208435164e+00 -1.689341050472e-02 -1.622478671960e-01 -1.669045028248e-03 2.245271174694e-01 2.309712143498e-03 -3.572768532873e+00 -3.675309672743e-02 -1.807628621364e+00 -1.859508920239e-02 -9.629409377418e-01 -9.905780657769e-03 5.171356641658e-01 5.319778460712e-03 6.176549011257e-01 6.353820606170e-03 -2.939686520237e-01 -3.024057730930e-03 -1.922811023104e-01 -1.977997143405e-03 -3.597332885136e+01 -3.700579040362e-01 4.367334843617e-01 4.492680633286e-03 2.029827971103e-01 2.088085558177e-03 -2.103031895222e-05 -2.163390489890e-07 1.573421063355e-02 1.618579429436e-04 3.959349841839e-02 4.072986155579e-04 -1.222881890842e+00 -1.257979519434e-02 8.050128059305e+00 8.281172779863e-02 3.706780158718e+00 3.813167532886e-02 -2.856448791761e-01 -2.938431017139e-03 3.134908927481e-01 3.224883167864e-03 1.831682047644e+00 1.884252697915e-02 3.211772042507e+01 3.303952312012e-01 -6.005329354851e+00 -6.177686817047e-02 3.591989545512e+01 3.695082342878e-01 -2.011206048262e-02 -2.068929172165e-04 -3.062631510529e+01 -3.150531334769e-01 -1.070501425116e+01 -1.101225619912e-01 1.120000000000e+02 1.152144841066e+00 1.140000000000e+02 1.172718856085e+00 + 10 EWK_RAP 3.187500000000e+00 8.315178393760e+03 8.000000000000e+03 9.030000000000e+03 7.800000000000e+01 1.704123512386e+01 1.887179969419e-01 -7.918393116786e+00 -8.768984625455e-02 -8.440143768235e+00 -9.346781581655e-02 1.002402010797e+01 1.110079746176e-01 -2.684703450732e+00 -2.973093522406e-02 2.067166924945e+00 2.289221400825e-02 -1.837279687306e+00 -2.034639742311e-02 3.650568659959e-01 4.042711694307e-03 4.904354192348e-01 5.431178507583e-03 -3.056868456895e+00 -3.385236386374e-02 -1.063880157349e+00 -1.178161857529e-02 -1.358245619266e+00 -1.504147972609e-02 7.169286786160e-02 7.939409508483e-04 2.199043557753e-01 2.435264183558e-03 -1.574430445433e+00 -1.743555310558e-02 1.329240667376e-03 1.472027317139e-05 -3.211721511436e+01 -3.556723711447e-01 6.435224332446e-01 7.126494277349e-03 2.132859532475e-01 2.361970689341e-03 -1.563925465248e-05 -1.731921888425e-07 1.602557329814e-02 1.774703576760e-04 6.980990577093e-02 7.730886574853e-04 -1.968944344839e+00 -2.180447779446e-02 1.289965278862e+01 1.428532977699e-01 5.004417879946e+00 5.541991007692e-02 -4.905581183298e-01 -5.432537301548e-03 -6.767901157596e-01 -7.494907151269e-03 -5.192725175081e+00 -5.750526218252e-02 1.590697875224e+01 1.761570182972e-01 -2.016293066604e+01 -2.232882687269e-01 1.198733158974e+01 1.327500729761e-01 1.425514530242e+01 1.578642890634e-01 4.378533938226e+01 4.848874793163e-01 1.753546136519e+01 1.941911557607e-01 1.040000000000e+02 1.151716500554e+00 1.050000000000e+02 1.162790697674e+00 + 11 EWK_RAP 3.312500000000e+00 8.315178393760e+03 8.000000000000e+03 7.748000000000e+03 7.200000000000e+01 1.494965869166e+01 1.929486150189e-01 -7.165496747474e+00 -9.248188884194e-02 -7.808477726717e+00 -1.007805591987e-01 9.563054093267e+00 1.234260982611e-01 -2.670729336857e+00 -3.446991916438e-02 1.870910013083e+00 2.414700584774e-02 -1.134378485773e+00 -1.464092005386e-02 5.731050576351e-01 7.396812824408e-03 8.237338552005e-01 1.063156756841e-02 -3.475192583360e+00 -4.485276953226e-02 -1.385142283775e-01 -1.787741718863e-03 -1.002361602276e-01 -1.293703668400e-03 -2.975667575736e-01 -3.840562178286e-03 1.650093308799e-02 2.129702257097e-04 -6.964491524517e-01 -8.988760356889e-03 -2.065417319098e-02 -2.665742538846e-04 -2.991414324734e+01 -3.860885808898e-01 6.436033819978e-01 8.306703433115e-03 1.988462861960e-01 2.566420833711e-03 2.595663656500e-06 3.350107971735e-08 2.076869363903e-02 2.680523185213e-04 5.834119476439e-02 7.529839282961e-04 -1.616593825386e+00 -2.086465959456e-02 5.683115477670e+01 7.334945118315e-01 4.207755805619e+00 5.430763817268e-02 -1.354616593848e-01 -1.748343564594e-03 1.679456788096e-01 2.167600397646e-03 -1.254823525198e+00 -1.619545076404e-02 -2.391565302609e+01 -3.086687277502e-01 -1.316650496015e+00 -1.699342405802e-02 -1.259376213707e+01 -1.625421029565e-01 1.475379610023e+00 1.904207034103e-02 -1.188261280170e+01 -1.533636138578e-01 -6.558219352411e-01 -8.464402881274e-03 8.900000000000e+01 1.148683531234e+00 9.000000000000e+01 1.161590087765e+00 + 12 EWK_RAP 3.437500000000e+00 8.315178393760e+03 8.000000000000e+03 6.059000000000e+03 6.300000000000e+01 9.149049767315e+00 1.509993359847e-01 -4.972284733299e+00 -8.206444517741e-02 -4.934501253784e+00 -8.144085251335e-02 7.146715955713e+00 1.179520705680e-01 -2.480683242649e+00 -4.094212316634e-02 1.671603651748e+00 2.758877127823e-02 -3.731925008924e-01 -6.159308481472e-03 4.690692536356e-01 7.741694233959e-03 1.087081450232e+00 1.794159845241e-02 -2.186426049623e+00 -3.608559250080e-02 -8.527632330601e-02 -1.407432304110e-03 -1.252636370982e-02 -2.067397872556e-04 4.243834079319e-01 7.004182339197e-03 1.345657962147e-01 2.220924182451e-03 -4.790045408799e-01 -7.905669927049e-03 1.534041916905e-01 2.531840100520e-03 -1.487981063298e+01 -2.455819546621e-01 1.204788925465e+00 1.988428660613e-02 4.495879379658e-01 7.420167320775e-03 2.456468050259e-04 4.054246658292e-06 4.544359342930e-02 7.500180463657e-04 1.251769557362e-01 2.065967250969e-03 -6.991666808012e+00 -1.153930814988e-01 5.151973939331e+00 8.503010297625e-02 -4.564159328049e+01 -7.532859098942e-01 1.378443477905e+00 2.275034622718e-02 1.565294265897e+00 2.583420145069e-02 1.409320903182e+00 2.325995879159e-02 2.328009122842e+00 3.842233244498e-02 7.987670255568e-01 1.318314945629e-02 1.492549105843e+00 2.463358814727e-02 1.634737023741e-01 2.698031067405e-03 2.022897365248e+00 3.338665398990e-02 1.008066369713e+00 1.663750403883e-02 7.000000000000e+01 1.155306156131e+00 7.100000000000e+01 1.171810529790e+00 + 13 EWK_RAP 3.562500000000e+00 8.315178393760e+03 8.000000000000e+03 4.385000000000e+03 5.400000000000e+01 6.326085258886e+00 1.442664825287e-01 -3.439415506883e+00 -7.843592946141e-02 -3.341327737674e+00 -7.619903620693e-02 5.541898966162e+00 1.263831007107e-01 -1.666176480785e+00 -3.799718314218e-02 9.793752178742e-01 2.233466859462e-02 -2.485455876128e-04 -5.668086376575e-06 -8.187806243714e-02 -1.867230614302e-03 4.333148438936e-01 9.881752426307e-03 -1.768835651967e+00 -4.033832729686e-02 1.673892047972e-01 3.817313678386e-03 1.105532568097e-01 2.521168912421e-03 4.269058132515e-01 9.735594372897e-03 1.138800538387e-01 2.597036575568e-03 -9.613977606948e-01 -2.192469237617e-02 1.382052895681e-02 3.151773992430e-04 -9.506358516912e+00 -2.167926685727e-01 1.947072274655e+00 4.440301652577e-02 5.827172665109e-01 1.328887722944e-02 3.224919588650e-04 7.354434637742e-06 4.499426072411e-02 1.026094885385e-03 1.375554489632e-01 3.136954366322e-03 3.751338943830e+01 8.554934877605e-01 3.666147114227e+00 8.360654764485e-02 -7.529167532070e+00 -1.717027943459e-01 6.017477237189e-01 1.372286713156e-02 1.699317696165e-01 3.875296912577e-03 8.185166967642e-01 1.866628726942e-02 1.513953963948e+00 3.452574604214e-02 2.381249692410e-01 5.430443996375e-03 8.615737285413e-01 1.964820361554e-02 9.807293782638e-02 2.236555024547e-03 1.548883383250e+00 3.532231204674e-02 7.674261131263e-01 1.750116563572e-02 5.000000000000e+01 1.140250855188e+00 5.100000000000e+01 1.163055872292e+00 + 14 EWK_RAP 3.687500000000e+00 8.315178393760e+03 8.000000000000e+03 2.724000000000e+03 4.200000000000e+01 3.581622334817e+00 1.314839329962e-01 -1.595201474768e+00 -5.856099393422e-02 -1.696419758224e+00 -6.227678994948e-02 3.146991276460e+00 1.155283141138e-01 -8.213111707131e-01 -3.015092403499e-02 8.751706472028e-01 3.212814417044e-02 -2.206946879338e-01 -8.101860790520e-03 -1.039628140716e-01 -3.816549708944e-03 6.365967085277e-01 2.336992322055e-02 -9.100948097627e-01 -3.341023530700e-02 1.302544404313e-01 4.781734230225e-03 3.485205805134e-01 1.279444128169e-02 9.634194009991e-04 3.536781941994e-05 2.441540783404e-02 8.963071892087e-04 -2.368312662368e-01 -8.694246190780e-03 2.131235182572e-01 7.823917704009e-03 -4.887880950067e+00 -1.794376266544e-01 -2.560581500776e+01 -9.400078930895e-01 1.590603225067e+00 5.839218887911e-02 9.666121424544e-05 3.548502725603e-06 8.679639349475e-02 3.186358057810e-03 2.179591422002e-01 8.001436938332e-03 2.280210781652e+00 8.370817847474e-02 2.064997634263e+00 7.580754898174e-02 -2.190450694894e+00 -8.041302110478e-02 3.157588836555e-01 1.159173581702e-02 1.359336155772e-01 4.990220836169e-03 2.645398552229e-01 9.711448429622e-03 7.254250538684e-01 2.663087569267e-02 1.487361196764e-01 5.460209973438e-03 3.472172709894e-01 1.274659585130e-02 -6.366415037864e-02 -2.337156768672e-03 7.056752902129e-01 2.590584765833e-02 3.418947995636e-01 1.255120409558e-02 3.100000000000e+01 1.138032305433e+00 3.200000000000e+01 1.174743024963e+00 + 15 EWK_RAP 3.812500000000e+00 8.315178393760e+03 8.000000000000e+03 1.584000000000e+03 3.200000000000e+01 1.927044395121e+00 1.216568431263e-01 -8.906975447978e-01 -5.623090560592e-02 -9.859044565823e-01 -6.224144296605e-02 1.900006590187e+00 1.199499109967e-01 -5.000615975386e-01 -3.156954529916e-02 4.696847671780e-01 2.965181610972e-02 -2.656750900700e-02 -1.677241730240e-03 -2.464415131886e-01 -1.555817633767e-02 2.541442287433e-01 1.604445888531e-02 -5.977450748892e-01 -3.773643149553e-02 1.246114710530e-01 7.866885798803e-03 2.210648954705e-01 1.395611713829e-02 2.600996773551e-03 1.642043417646e-04 -1.856731584096e-01 -1.172179030364e-02 -1.188075652932e-01 -7.500477606895e-03 1.856799910382e-01 1.172222165645e-02 -2.827258869382e+00 -1.784885649862e-01 -1.979298289528e+00 -1.249557000965e-01 -1.933064816977e+01 -1.220369202637e+00 1.990574440578e-04 1.256675783193e-05 1.121901030963e-01 7.082708528805e-03 3.620340097657e-01 2.285568243470e-02 1.076070580397e+00 6.793374876246e-02 9.794399369759e-01 6.183332935454e-02 -1.269039719858e+00 -8.011614393041e-02 1.107756833672e-01 6.993414353990e-03 -4.550177309559e-02 -2.872586685328e-03 1.470947299450e-02 9.286283456121e-04 3.343664195544e-01 2.110899113349e-02 -1.154124894713e-02 -7.286142012077e-04 3.839086612902e-01 2.423665790974e-02 6.978441016574e-02 4.405581449857e-03 2.652311021248e-01 1.674438776041e-02 6.515123857761e-02 4.113083243536e-03 1.800000000000e+01 1.136363636364e+00 1.900000000000e+01 1.199494949495e+00 + 16 EWK_RAP 3.937500000000e+00 8.315178393760e+03 8.000000000000e+03 7.490000000000e+02 2.200000000000e+01 8.296601388640e-01 1.107690439071e-01 -3.805251722783e-01 -5.080442887560e-02 -4.256454984305e-01 -5.682850446336e-02 8.640659174103e-01 1.153626057958e-01 -3.029421108714e-01 -4.044620972917e-02 2.176950458025e-01 2.906475911916e-02 5.130151104931e-02 6.849333918466e-03 -1.291910301868e-01 -1.724846864978e-02 1.072104716032e-01 1.431381463327e-02 -1.529847335093e-01 -2.042519806533e-02 1.748760490121e-01 2.334793711778e-02 -1.248019049424e-02 -1.666247061981e-03 4.226511417813e-02 5.642872386934e-03 -7.817088485424e-02 -1.043670024756e-02 -7.360831837475e-02 -9.827545844426e-03 1.096321972416e-01 1.463714248886e-02 -1.212004225354e+00 -1.618163184718e-01 -4.778721145844e-01 -6.380135041180e-02 -5.401002869185e-01 -7.210951761262e-02 4.648904008981e-04 6.206814431217e-05 2.580363395866e-01 3.445077965108e-02 -1.179583433424e+01 -1.574877748230e+00 4.012872851790e-01 5.357640656596e-02 4.773980799993e-01 6.373806141513e-02 -5.578977015712e-01 -7.448567444208e-02 -1.591031666170e-02 -2.124207832002e-03 3.931534009798e-02 5.249044071826e-03 -3.491699302092e-02 -4.661814822553e-03 1.507933437772e-01 2.013262266718e-02 2.544812746286e-02 3.397613813465e-03 1.294786911407e-01 1.728687465163e-02 3.045495351607e-03 4.066081911358e-04 2.153979208948e-01 2.875806687514e-02 5.043277234420e-02 6.733347442483e-03 9.000000000000e+00 1.201602136182e+00 9.000000000000e+00 1.201602136182e+00 + 17 EWK_RAP 4.125000000000e+00 8.315178393760e+03 8.000000000000e+03 3.830000000000e+02 1.600000000000e+01 4.239372855009e-01 1.106885862927e-01 -1.489439685955e-01 -3.888876464634e-02 -1.981748571053e-01 -5.174278253402e-02 3.993023179385e-01 1.042564798795e-01 -1.176551557811e-01 -3.071936182274e-02 1.069448812314e-01 2.792294549122e-02 7.370908109907e-02 1.924519088749e-02 -1.344175518288e-01 -3.509596653494e-02 1.153604910917e-01 3.012023266101e-02 -4.875973725734e-02 -1.273100189487e-02 4.521689153204e-02 1.180597690131e-02 1.013038956877e-01 2.645010331272e-02 4.322115716787e-02 1.128489743286e-02 -2.813618535346e-02 -7.346262494376e-03 -4.731362627783e-03 -1.235342722659e-03 1.151605510201e-01 3.006802898698e-02 -6.185243817055e-01 -1.614946166333e-01 -3.020038060079e-01 -7.885216867046e-02 -2.667253838685e-01 -6.964109239385e-02 8.188847909514e-04 2.138080394129e-04 -7.911038971978e+00 -2.065545423493e+00 -3.752800559584e-01 -9.798434881421e-02 2.136989781424e-01 5.579607784396e-02 2.553303274367e-01 6.666588183725e-02 -3.315218861762e-01 -8.655923921050e-02 3.180232046119e-02 8.303477927204e-03 -4.502654465664e-02 -1.175627797824e-02 1.586101551858e-02 4.141257315557e-03 6.645220360766e-02 1.735044480618e-02 -3.990159797845e-02 -1.041817179594e-02 5.325010135976e-02 1.390342072057e-02 2.819711947909e-02 7.362172187753e-03 4.831256818403e-02 1.261424756763e-02 -1.828330837240e-02 -4.773709757807e-03 4.000000000000e+00 1.044386422977e+00 4.000000000000e+00 1.044386422977e+00 + 18 EWK_RAP 4.375000000000e+00 8.315178393760e+03 8.000000000000e+03 1.100000000000e+01 3.000000000000e+00 1.341418481095e-02 1.219471346450e-01 -3.796080264343e-03 -3.450982058494e-02 -7.050325110555e-03 -6.409386464141e-02 1.279367884201e-02 1.163061712910e-01 -6.988237873417e-03 -6.352943521288e-02 -1.152730392232e-03 -1.047936720211e-02 3.828274413001e-03 3.480249466364e-02 5.803516665110e-03 5.275924241009e-02 -1.011089292324e-02 -9.191720839308e-02 -6.099701507314e-03 -5.545183188467e-02 -2.713842573770e-03 -2.467129612518e-02 3.884474841333e-03 3.531340764848e-02 -2.192947913701e-04 -1.993589012456e-03 5.673249488264e-05 5.157499534785e-04 5.283439658297e-03 4.803126962088e-02 1.041343514448e-02 9.466759222252e-02 -9.022711855029e-03 -8.202465322753e-02 -2.448050388056e-03 -2.225500352778e-02 -3.870372245120e-03 -3.518520222836e-02 -9.993144938596e-01 -9.084677216906e+00 -6.305972549479e-03 -5.732702317708e-02 -5.629159396334e-03 -5.117417633031e-02 1.128119646006e-02 1.025563314551e-01 1.603895525081e-03 1.458086840983e-02 -1.500122302195e-02 -1.363747547450e-01 2.858815829938e-03 2.598923481762e-02 -3.202429830490e-03 -2.911299845900e-02 -3.789582290619e-03 -3.445074809653e-02 -1.281017022983e-03 -1.164560929985e-02 -2.095213867030e-04 -1.904739879118e-03 2.487670121814e-04 2.261518292558e-03 1.599311417493e-03 1.453919470448e-02 1.836099148958e-05 1.669181044507e-04 4.537969396256e-04 4.125426723869e-03 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml new file mode 100644 index 0000000000..ede2874579 --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml @@ -0,0 +1,26 @@ +dataset_label: "ATLAS $W$ 7 TeV 2011 Central selection" +x: k1 + +x_label: '$\left\|\eta/y\right|$' + +y_label: '$d\sigma/dy$ (fb)' + +line_by: + - Boson + +normalize: + line_by: [] + figure_by: + - Boson + + +extra_labels: + Boson: ['$W^+$', '$W^+$', '$W^+$', '$W^+$', '$W^+$', '$W^+$', + '$W^+$', '$W^+$', '$W^+$', '$W^+$', '$W^+$', '$W^-$', '$W^-$', + '$W^-$', '$W^-$', '$W^-$', '$W^-$', '$W^-$', '$W^-$', '$W^-$', + '$W^-$', '$W^-$'] + + +experiment: "ATLAS" + +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml new file mode 100644 index 0000000000..49d2755c99 --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml @@ -0,0 +1,20 @@ +dataset_label: "ATLAS $W$ 7 TeV 2010" +x: k1 + +x_label: '$\left\|\eta/y\right|$' + +y_label: '$d\sigma/dy$ (fb)' + +line_by: + - Boson + +normalize: + figure_by: + - Boson + +extra_labels: + Boson: ["$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$"] + +experiment: "ATLAS" + +nnpdf31_process: DY_CC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml index 9ee41e87d8..99ebea3f72 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CC.yaml @@ -29,5 +29,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC -#TO SPLIT \ No newline at end of file +nnpdf31_process: DY diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml index 5854d76ba1..13b6519fd3 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml @@ -23,5 +23,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC -#TO SPLIT \ No newline at end of file +nnpdf31_process: DY_NC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml index 68ccd59bfd..15c5e0dabe 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP36PB.yaml @@ -17,5 +17,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC -#TO SPLIT \ No newline at end of file +nnpdf31_process: DY \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml new file mode 100644 index 0000000000..8e9c27cc32 --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml @@ -0,0 +1,29 @@ +dataset_label: "ATLAS $Z$ 7 TeV 2011 Central selection" +x: k1 + +x_label: '$\left\|\eta/y\right|$' + +y_label: '$d\sigma/dy$ (fb)' + +line_by: + - Boson + +normalize: + line_by: [] + figure_by: + - Boson + + +extra_labels: + Boson: ['$Z_{low}$', '$Z_{low}$', '$Z_{low}$', + '$Z_{low}$', '$Z_{low}$', '$Z_{low}$', '$Z_{peak}$', + '$Z_{peak}$', '$Z_{peak}$', '$Z_{peak}$', '$Z_{peak}$', + '$Z_{peak}$', '$Z_{peak}$', '$Z_{peak}$', '$Z_{peak}$', + '$Z_{peak}$', '$Z_{peak}$', '$Z_{peak}$', '$Z_{high}$', + '$Z_{high}$', '$Z_{high}$', '$Z_{high}$', '$Z_{high}$', + '$Z_{high}$'] + + +experiment: "ATLAS" + +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml new file mode 100644 index 0000000000..c26c605f74 --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml @@ -0,0 +1,20 @@ +dataset_label: "ATLAS $Z$ 7 TeV 2010" +x: k1 + +x_label: '$\left\|\eta/y\right|$' + +y_label: '$d\sigma/dy$ (fb)' + +line_by: + - Boson + +normalize: + figure_by: + - Boson + +extra_labels: + Boson: ["$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$"] + +experiment: "ATLAS" + +nnpdf31_process: DY_NC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml index 3bc431fc5b..21fb7083f8 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WZ_TOT_13TEV.yaml @@ -17,5 +17,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC -#TO SPLIT +nnpdf31_process: DY + diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml new file mode 100644 index 0000000000..f7c9216d9d --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml @@ -0,0 +1,19 @@ +dataset_label: "ATLAS $W$ inclusive 13 TeV" + +x: " " + +y_label: $\sigma^{fid}$ (fb) +figure_by: + - boson +extra_labels: + " ": + - $W^-$ + - $W^+$ + boson: + - W + - W + +experiment: "ATLAS" + +nnpdf31_process: DY_CC + diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml new file mode 100644 index 0000000000..2db585750a --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml @@ -0,0 +1,17 @@ +dataset_label: "ATLAS $Z$ inclusive 13 TeV" + +x: " " + +y_label: $\sigma^{fid}$ (fb) +figure_by: + - boson +extra_labels: + " ": + - Z + boson: + - Z + +experiment: "ATLAS" + +nnpdf31_process: DY_CC + diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml new file mode 100644 index 0000000000..53771db628 --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml @@ -0,0 +1,16 @@ +dataset_label: "LHCb $W \\to \\mu$ 7 TeV" +x: k1 + +y_label: '$d\sigma/dy$ (fb)' + +kinematics_override: ewk_pseudorapity_sqrt_scale + +figure_by: + - Boson + +extra_labels: + Boson: ["$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$", "$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$"] + +experiment: "LHCb" + +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml new file mode 100644 index 0000000000..7c356b841a --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml @@ -0,0 +1,16 @@ +dataset_label: "LHCb $W \\to \\mu$ 8 TeV" +x: k1 + +y_label: '$d\sigma/dy$ (fb)' + +kinematics_override: ewk_pseudorapity_sqrt_scale + +figure_by: + - Boson + +extra_labels: + Boson: ["$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$","$W^+$", "$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$","$W^-$"] + +experiment: "LHCb" + +nnpdf31_process: DY_CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml index 73dcb11b4f..f37e08e95c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU7TEV.yaml @@ -13,5 +13,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_NC -#TO SPLIT \ No newline at end of file +nnpdf31_process: DY diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml index 6df6463d47..9be274af7a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWZMU8TEV.yaml @@ -12,5 +12,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_NC -#TO SPLIT \ No newline at end of file +nnpdf31_process: DY diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml new file mode 100644 index 0000000000..0d6cd1f3c7 --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml @@ -0,0 +1,16 @@ +dataset_label: "LHCb $Z \\to \\mu$ 7 TeV" +x: k1 + +y_label: '$d\sigma/dy$ (fb)' + +kinematics_override: ewk_pseudorapity_sqrt_scale + +figure_by: + - Boson + +extra_labels: + Boson: ["$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$"] + +experiment: "LHCb" + +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml new file mode 100644 index 0000000000..e5f34d775d --- /dev/null +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml @@ -0,0 +1,16 @@ +dataset_label: "LHCb $Z \\to \\mu$ 8 TeV" +x: k1 + +y_label: '$d\sigma/dy$ (fb)' + +kinematics_override: ewk_pseudorapity_sqrt_scale + +figure_by: + - Boson + +extra_labels: + Boson: ["$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$","$Z$"] + +experiment: "LHCb" + +nnpdf31_process: DY_NC diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP11CC_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP11CC_DEFAULT.dat new file mode 100644 index 0000000000..362d8ef98a --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP11CC_DEFAULT.dat @@ -0,0 +1,134 @@ +133 +1 MULT UNCORR +2 MULT ATLASWZRAP11_1001 +3 MULT ATLASWZRAP11_1002 +4 MULT ATLASWZRAP11_1003 +5 MULT ATLASWZRAP11_1004 +6 MULT ATLASWZRAP11_1005 +7 MULT ATLASWZRAP11_1006 +8 MULT ATLASWZRAP11_1007 +9 MULT ATLASWZRAP11_1008 +10 MULT ATLASWZRAP11_1009 +11 MULT ATLASWZRAP11_1010 +12 MULT ATLASWZRAP11_1011 +13 MULT ATLASWZRAP11_1012 +14 MULT ATLASWZRAP11_1013 +15 MULT ATLASWZRAP11_1014 +16 MULT ATLASWZRAP11_1015 +17 MULT ATLASWZRAP11_1016 +18 MULT ATLASWZRAP11_1017 +19 MULT ATLASWZRAP11_1018 +20 MULT ATLASWZRAP11_1019 +21 MULT ATLASWZRAP11_1020 +22 MULT ATLASWZRAP11_1021 +23 MULT ATLASWZRAP11_1022 +24 MULT ATLASWZRAP11_1023 +25 MULT ATLASWZRAP11_1024 +26 MULT ATLASWZRAP11_1025 +27 MULT ATLASWZRAP11_1026 +28 MULT ATLASWZRAP11_1027 +29 MULT ATLASWZRAP11_1028 +30 MULT ATLASWZRAP11_1029 +31 MULT ATLASWZRAP11_1030 +32 MULT ATLASWZRAP11_1031 +33 MULT ATLASWZRAP11_1032 +34 MULT ATLASWZRAP11_1033 +35 MULT ATLASWZRAP11_1034 +36 MULT ATLASWZRAP11_1035 +37 MULT ATLASWZRAP11_1036 +38 MULT ATLASWZRAP11_1037 +39 MULT ATLASWZRAP11_1038 +40 MULT ATLASWZRAP11_1039 +41 MULT ATLASWZRAP11_1040 +42 MULT ATLASWZRAP11_1041 +43 MULT ATLASWZRAP11_1042 +44 MULT ATLASWZRAP11_1043 +45 MULT ATLASWZRAP11_1044 +46 MULT ATLASWZRAP11_1045 +47 MULT ATLASWZRAP11_1046 +48 MULT ATLASWZRAP11_1047 +49 MULT ATLASWZRAP11_1048 +50 MULT ATLASWZRAP11_1049 +51 MULT ATLASWZRAP11_1050 +52 MULT ATLASWZRAP11_1051 +53 MULT ATLASWZRAP11_1052 +54 MULT ATLASWZRAP11_1053 +55 MULT ATLASWZRAP11_1054 +56 MULT ATLASWZRAP11_1055 +57 MULT ATLASWZRAP11_1056 +58 MULT ATLASWZRAP11_1057 +59 MULT ATLASWZRAP11_1058 +60 MULT ATLASWZRAP11_1059 +61 MULT ATLASWZRAP11_1060 +62 MULT ATLASWZRAP11_1061 +63 MULT ATLASWZRAP11_1062 +64 MULT ATLASWZRAP11_1063 +65 MULT ATLASWZRAP11_1064 +66 MULT ATLASWZRAP11_1065 +67 MULT ATLASWZRAP11_1066 +68 MULT ATLASWZRAP11_1067 +69 MULT ATLASWZRAP11_1068 +70 MULT ATLASWZRAP11_1069 +71 MULT ATLASWZRAP11_1070 +72 MULT ATLASWZRAP11_1071 +73 MULT ATLASWZRAP11_1072 +74 MULT ATLASWZRAP11_1073 +75 MULT ATLASWZRAP11_1074 +76 MULT ATLASWZRAP11_1075 +77 MULT ATLASWZRAP11_1076 +78 MULT ATLASWZRAP11_1077 +79 MULT ATLASWZRAP11_1078 +80 MULT ATLASWZRAP11_1079 +81 MULT ATLASWZRAP11_1080 +82 MULT ATLASWZRAP11_1081 +83 MULT ATLASWZRAP11_1082 +84 MULT ATLASWZRAP11_1083 +85 MULT ATLASWZRAP11_1084 +86 MULT ATLASWZRAP11_1085 +87 MULT ATLASWZRAP11_1086 +88 MULT ATLASWZRAP11_1087 +89 MULT ATLASWZRAP11_1088 +90 MULT ATLASWZRAP11_1089 +91 MULT ATLASWZRAP11_1090 +92 MULT ATLASWZRAP11_1091 +93 MULT ATLASWZRAP11_1092 +94 MULT ATLASWZRAP11_1093 +95 MULT ATLASWZRAP11_1094 +96 MULT ATLASWZRAP11_1095 +97 MULT ATLASWZRAP11_1096 +98 MULT ATLASWZRAP11_1097 +99 MULT ATLASWZRAP11_1098 +100 MULT ATLASWZRAP11_1099 +101 MULT ATLASWZRAP11_1100 +102 MULT ATLASWZRAP11_1101 +103 MULT ATLASWZRAP11_1102 +104 MULT ATLASWZRAP11_1103 +105 MULT ATLASWZRAP11_1104 +106 MULT ATLASWZRAP11_1105 +107 MULT ATLASWZRAP11_1106 +108 MULT ATLASWZRAP11_1107 +109 MULT ATLASWZRAP11_1108 +110 MULT ATLASWZRAP11_1109 +111 MULT ATLASWZRAP11_1110 +112 MULT ATLASWZRAP11_1111 +113 MULT ATLASWZRAP11_1112 +114 MULT ATLASWZRAP11_1113 +115 MULT ATLASWZRAP11_1114 +116 MULT ATLASWZRAP11_1115 +117 MULT ATLASWZRAP11_1116 +118 MULT ATLASWZRAP11_1117 +119 MULT ATLASWZRAP11_1118 +120 MULT ATLASWZRAP11_1119 +121 MULT ATLASWZRAP11_1120 +122 MULT ATLASWZRAP11_1121 +123 MULT ATLASWZRAP11_1122 +124 MULT ATLASWZRAP11_1123 +125 MULT ATLASWZRAP11_1124 +126 MULT ATLASWZRAP11_1125 +127 MULT ATLASWZRAP11_1126 +128 MULT ATLASWZRAP11_1127 +129 MULT ATLASWZRAP11_1128 +130 MULT ATLASWZRAP11_1129 +131 MULT ATLASWZRAP11_1130 +132 MULT ATLASLUMI11 +133 MULT UNCORR diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP36PB_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP36PB_DEFAULT.dat new file mode 100644 index 0000000000..e65eb78ac1 --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASWRAP36PB_DEFAULT.dat @@ -0,0 +1,33 @@ +32 +1 MULT UNCORR +2 MULT ATLASLUMI10 +3 MULT ATLASWZRAP36PB_0 +4 MULT ATLASWZRAP36PB_1 +5 MULT ATLASWZRAP36PB_2 +6 MULT ATLASWZRAP36PB_3 +7 MULT ATLASWZRAP36PB_4 +8 MULT ATLASWZRAP36PB_5 +9 MULT ATLASWZRAP36PB_6 +10 MULT ATLASWZRAP36PB_7 +11 MULT ATLASWZRAP36PB_8 +12 MULT ATLASWZRAP36PB_9 +13 MULT ATLASWZRAP36PB_10 +14 MULT ATLASWZRAP36PB_11 +15 MULT ATLASWZRAP36PB_12 +16 MULT ATLASWZRAP36PB_13 +17 MULT ATLASWZRAP36PB_14 +18 MULT ATLASWZRAP36PB_15 +19 MULT ATLASWZRAP36PB_16 +20 MULT ATLASWZRAP36PB_17 +21 MULT ATLASWZRAP36PB_18 +22 MULT ATLASWZRAP36PB_19 +23 MULT ATLASWZRAP36PB_20 +24 MULT ATLASWZRAP36PB_21 +25 MULT ATLASWZRAP36PB_22 +26 MULT ATLASWZRAP36PB_23 +27 MULT ATLASWZRAP36PB_24 +28 MULT ATLASWZRAP36PB_25 +29 MULT ATLASWZRAP36PB_26 +30 MULT ATLASWZRAP36PB_27 +31 MULT ATLASWZRAP36PB_28 +32 MULT ATLASWZRAP36PB_29 diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP11CC_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP11CC_DEFAULT.dat new file mode 100644 index 0000000000..362d8ef98a --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP11CC_DEFAULT.dat @@ -0,0 +1,134 @@ +133 +1 MULT UNCORR +2 MULT ATLASWZRAP11_1001 +3 MULT ATLASWZRAP11_1002 +4 MULT ATLASWZRAP11_1003 +5 MULT ATLASWZRAP11_1004 +6 MULT ATLASWZRAP11_1005 +7 MULT ATLASWZRAP11_1006 +8 MULT ATLASWZRAP11_1007 +9 MULT ATLASWZRAP11_1008 +10 MULT ATLASWZRAP11_1009 +11 MULT ATLASWZRAP11_1010 +12 MULT ATLASWZRAP11_1011 +13 MULT ATLASWZRAP11_1012 +14 MULT ATLASWZRAP11_1013 +15 MULT ATLASWZRAP11_1014 +16 MULT ATLASWZRAP11_1015 +17 MULT ATLASWZRAP11_1016 +18 MULT ATLASWZRAP11_1017 +19 MULT ATLASWZRAP11_1018 +20 MULT ATLASWZRAP11_1019 +21 MULT ATLASWZRAP11_1020 +22 MULT ATLASWZRAP11_1021 +23 MULT ATLASWZRAP11_1022 +24 MULT ATLASWZRAP11_1023 +25 MULT ATLASWZRAP11_1024 +26 MULT ATLASWZRAP11_1025 +27 MULT ATLASWZRAP11_1026 +28 MULT ATLASWZRAP11_1027 +29 MULT ATLASWZRAP11_1028 +30 MULT ATLASWZRAP11_1029 +31 MULT ATLASWZRAP11_1030 +32 MULT ATLASWZRAP11_1031 +33 MULT ATLASWZRAP11_1032 +34 MULT ATLASWZRAP11_1033 +35 MULT ATLASWZRAP11_1034 +36 MULT ATLASWZRAP11_1035 +37 MULT ATLASWZRAP11_1036 +38 MULT ATLASWZRAP11_1037 +39 MULT ATLASWZRAP11_1038 +40 MULT ATLASWZRAP11_1039 +41 MULT ATLASWZRAP11_1040 +42 MULT ATLASWZRAP11_1041 +43 MULT ATLASWZRAP11_1042 +44 MULT ATLASWZRAP11_1043 +45 MULT ATLASWZRAP11_1044 +46 MULT ATLASWZRAP11_1045 +47 MULT ATLASWZRAP11_1046 +48 MULT ATLASWZRAP11_1047 +49 MULT ATLASWZRAP11_1048 +50 MULT ATLASWZRAP11_1049 +51 MULT ATLASWZRAP11_1050 +52 MULT ATLASWZRAP11_1051 +53 MULT ATLASWZRAP11_1052 +54 MULT ATLASWZRAP11_1053 +55 MULT ATLASWZRAP11_1054 +56 MULT ATLASWZRAP11_1055 +57 MULT ATLASWZRAP11_1056 +58 MULT ATLASWZRAP11_1057 +59 MULT ATLASWZRAP11_1058 +60 MULT ATLASWZRAP11_1059 +61 MULT ATLASWZRAP11_1060 +62 MULT ATLASWZRAP11_1061 +63 MULT ATLASWZRAP11_1062 +64 MULT ATLASWZRAP11_1063 +65 MULT ATLASWZRAP11_1064 +66 MULT ATLASWZRAP11_1065 +67 MULT ATLASWZRAP11_1066 +68 MULT ATLASWZRAP11_1067 +69 MULT ATLASWZRAP11_1068 +70 MULT ATLASWZRAP11_1069 +71 MULT ATLASWZRAP11_1070 +72 MULT ATLASWZRAP11_1071 +73 MULT ATLASWZRAP11_1072 +74 MULT ATLASWZRAP11_1073 +75 MULT ATLASWZRAP11_1074 +76 MULT ATLASWZRAP11_1075 +77 MULT ATLASWZRAP11_1076 +78 MULT ATLASWZRAP11_1077 +79 MULT ATLASWZRAP11_1078 +80 MULT ATLASWZRAP11_1079 +81 MULT ATLASWZRAP11_1080 +82 MULT ATLASWZRAP11_1081 +83 MULT ATLASWZRAP11_1082 +84 MULT ATLASWZRAP11_1083 +85 MULT ATLASWZRAP11_1084 +86 MULT ATLASWZRAP11_1085 +87 MULT ATLASWZRAP11_1086 +88 MULT ATLASWZRAP11_1087 +89 MULT ATLASWZRAP11_1088 +90 MULT ATLASWZRAP11_1089 +91 MULT ATLASWZRAP11_1090 +92 MULT ATLASWZRAP11_1091 +93 MULT ATLASWZRAP11_1092 +94 MULT ATLASWZRAP11_1093 +95 MULT ATLASWZRAP11_1094 +96 MULT ATLASWZRAP11_1095 +97 MULT ATLASWZRAP11_1096 +98 MULT ATLASWZRAP11_1097 +99 MULT ATLASWZRAP11_1098 +100 MULT ATLASWZRAP11_1099 +101 MULT ATLASWZRAP11_1100 +102 MULT ATLASWZRAP11_1101 +103 MULT ATLASWZRAP11_1102 +104 MULT ATLASWZRAP11_1103 +105 MULT ATLASWZRAP11_1104 +106 MULT ATLASWZRAP11_1105 +107 MULT ATLASWZRAP11_1106 +108 MULT ATLASWZRAP11_1107 +109 MULT ATLASWZRAP11_1108 +110 MULT ATLASWZRAP11_1109 +111 MULT ATLASWZRAP11_1110 +112 MULT ATLASWZRAP11_1111 +113 MULT ATLASWZRAP11_1112 +114 MULT ATLASWZRAP11_1113 +115 MULT ATLASWZRAP11_1114 +116 MULT ATLASWZRAP11_1115 +117 MULT ATLASWZRAP11_1116 +118 MULT ATLASWZRAP11_1117 +119 MULT ATLASWZRAP11_1118 +120 MULT ATLASWZRAP11_1119 +121 MULT ATLASWZRAP11_1120 +122 MULT ATLASWZRAP11_1121 +123 MULT ATLASWZRAP11_1122 +124 MULT ATLASWZRAP11_1123 +125 MULT ATLASWZRAP11_1124 +126 MULT ATLASWZRAP11_1125 +127 MULT ATLASWZRAP11_1126 +128 MULT ATLASWZRAP11_1127 +129 MULT ATLASWZRAP11_1128 +130 MULT ATLASWZRAP11_1129 +131 MULT ATLASWZRAP11_1130 +132 MULT ATLASLUMI11 +133 MULT UNCORR diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP36PB_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP36PB_DEFAULT.dat new file mode 100644 index 0000000000..e65eb78ac1 --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLASZRAP36PB_DEFAULT.dat @@ -0,0 +1,33 @@ +32 +1 MULT UNCORR +2 MULT ATLASLUMI10 +3 MULT ATLASWZRAP36PB_0 +4 MULT ATLASWZRAP36PB_1 +5 MULT ATLASWZRAP36PB_2 +6 MULT ATLASWZRAP36PB_3 +7 MULT ATLASWZRAP36PB_4 +8 MULT ATLASWZRAP36PB_5 +9 MULT ATLASWZRAP36PB_6 +10 MULT ATLASWZRAP36PB_7 +11 MULT ATLASWZRAP36PB_8 +12 MULT ATLASWZRAP36PB_9 +13 MULT ATLASWZRAP36PB_10 +14 MULT ATLASWZRAP36PB_11 +15 MULT ATLASWZRAP36PB_12 +16 MULT ATLASWZRAP36PB_13 +17 MULT ATLASWZRAP36PB_14 +18 MULT ATLASWZRAP36PB_15 +19 MULT ATLASWZRAP36PB_16 +20 MULT ATLASWZRAP36PB_17 +21 MULT ATLASWZRAP36PB_18 +22 MULT ATLASWZRAP36PB_19 +23 MULT ATLASWZRAP36PB_20 +24 MULT ATLASWZRAP36PB_21 +25 MULT ATLASWZRAP36PB_22 +26 MULT ATLASWZRAP36PB_23 +27 MULT ATLASWZRAP36PB_24 +28 MULT ATLASWZRAP36PB_25 +29 MULT ATLASWZRAP36PB_26 +30 MULT ATLASWZRAP36PB_27 +31 MULT ATLASWZRAP36PB_28 +32 MULT ATLASWZRAP36PB_29 diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_W_TOT_13TEV_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_W_TOT_13TEV_DEFAULT.dat new file mode 100644 index 0000000000..0d79f337cf --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_W_TOT_13TEV_DEFAULT.dat @@ -0,0 +1,5 @@ +4 +1 ADD ATLAS_WZ_TOT_13TEV_0 +2 ADD ATLAS_WZ_TOT_13TEV_1 +3 ADD ATLAS_WZ_TOT_13TEV_2 +4 MULT ATLASLUMI13 diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_Z_TOT_13TEV_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_Z_TOT_13TEV_DEFAULT.dat new file mode 100644 index 0000000000..0d79f337cf --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_ATLAS_Z_TOT_13TEV_DEFAULT.dat @@ -0,0 +1,5 @@ +4 +1 ADD ATLAS_WZ_TOT_13TEV_0 +2 ADD ATLAS_WZ_TOT_13TEV_1 +3 ADD ATLAS_WZ_TOT_13TEV_2 +4 MULT ATLASLUMI13 diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU7TEV_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU7TEV_DEFAULT.dat new file mode 100644 index 0000000000..9d9f7de09e --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU7TEV_DEFAULT.dat @@ -0,0 +1,36 @@ +35 +1 MULT LHCBWZMU7TEV_0 +2 MULT LHCBWZMU7TEV_1 +3 MULT LHCBWZMU7TEV_2 +4 MULT LHCBWZMU7TEV_3 +5 MULT LHCBWZMU7TEV_4 +6 MULT LHCBWZMU7TEV_5 +7 MULT LHCBWZMU7TEV_6 +8 MULT LHCBWZMU7TEV_7 +9 MULT LHCBWZMU7TEV_8 +10 MULT LHCBWZMU7TEV_9 +11 MULT LHCBWZMU7TEV_10 +12 MULT LHCBWZMU7TEV_11 +13 MULT LHCBWZMU7TEV_12 +14 MULT LHCBWZMU7TEV_13 +15 MULT LHCBWZMU7TEV_14 +16 MULT LHCBWZMU7TEV_15 +17 MULT LHCBWZMU7TEV_16 +18 MULT LHCBWZMU7TEV_17 +19 MULT LHCBWZMU7TEV_18 +20 MULT LHCBWZMU7TEV_19 +21 MULT LHCBWZMU7TEV_20 +22 MULT LHCBWZMU7TEV_21 +23 MULT LHCBWZMU7TEV_22 +24 MULT LHCBWZMU7TEV_23 +25 MULT LHCBWZMU7TEV_24 +26 MULT LHCBWZMU7TEV_25 +27 MULT LHCBWZMU7TEV_26 +28 MULT LHCBWZMU7TEV_27 +29 MULT LHCBWZMU7TEV_28 +30 MULT LHCBWZMU7TEV_29 +31 MULT LHCBWZMU7TEV_30 +32 MULT LHCBWZMU7TEV_31 +33 MULT LHCBWZMU7TEV_32 +34 MULT LHCBBEAM7TEV +35 MULT LHCBLUMI7TEV diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU8TEV_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU8TEV_DEFAULT.dat new file mode 100644 index 0000000000..62ba4f6680 --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBWMU8TEV_DEFAULT.dat @@ -0,0 +1,37 @@ +36 +1 MULT LHCBWZMU8TEV_0 +2 MULT LHCBWZMU8TEV_1 +3 MULT LHCBWZMU8TEV_2 +4 MULT LHCBWZMU8TEV_3 +5 MULT LHCBWZMU8TEV_4 +6 MULT LHCBWZMU8TEV_5 +7 MULT LHCBWZMU8TEV_6 +8 MULT LHCBWZMU8TEV_7 +9 MULT LHCBWZMU8TEV_8 +10 MULT LHCBWZMU8TEV_9 +11 MULT LHCBWZMU8TEV_10 +12 MULT LHCBWZMU8TEV_11 +13 MULT LHCBWZMU8TEV_12 +14 MULT LHCBWZMU8TEV_13 +15 MULT LHCBWZMU8TEV_14 +16 MULT LHCBWZMU8TEV_15 +17 MULT LHCBWZMU8TEV_16 +18 MULT LHCBWZMU8TEV_17 +19 MULT LHCBWZMU8TEV_18 +20 MULT LHCBWZMU8TEV_19 +21 MULT LHCBWZMU8TEV_20 +22 MULT LHCBWZMU8TEV_21 +23 MULT LHCBWZMU8TEV_22 +24 MULT LHCBWZMU8TEV_23 +25 MULT LHCBWZMU8TEV_24 +26 MULT LHCBWZMU8TEV_25 +27 MULT LHCBWZMU8TEV_26 +28 MULT LHCBWZMU8TEV_27 +29 MULT LHCBWZMU8TEV_28 +30 MULT LHCBWZMU8TEV_29 +31 MULT LHCBWZMU8TEV_30 +32 MULT LHCBWZMU8TEV_31 +33 MULT LHCBWZMU8TEV_32 +34 MULT LHCBWZMU8TEV_33 +35 MULT LHCBBEAM8TEV +36 MULT LHCBLUMI8TEV diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU7TEV_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU7TEV_DEFAULT.dat new file mode 100644 index 0000000000..9d9f7de09e --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU7TEV_DEFAULT.dat @@ -0,0 +1,36 @@ +35 +1 MULT LHCBWZMU7TEV_0 +2 MULT LHCBWZMU7TEV_1 +3 MULT LHCBWZMU7TEV_2 +4 MULT LHCBWZMU7TEV_3 +5 MULT LHCBWZMU7TEV_4 +6 MULT LHCBWZMU7TEV_5 +7 MULT LHCBWZMU7TEV_6 +8 MULT LHCBWZMU7TEV_7 +9 MULT LHCBWZMU7TEV_8 +10 MULT LHCBWZMU7TEV_9 +11 MULT LHCBWZMU7TEV_10 +12 MULT LHCBWZMU7TEV_11 +13 MULT LHCBWZMU7TEV_12 +14 MULT LHCBWZMU7TEV_13 +15 MULT LHCBWZMU7TEV_14 +16 MULT LHCBWZMU7TEV_15 +17 MULT LHCBWZMU7TEV_16 +18 MULT LHCBWZMU7TEV_17 +19 MULT LHCBWZMU7TEV_18 +20 MULT LHCBWZMU7TEV_19 +21 MULT LHCBWZMU7TEV_20 +22 MULT LHCBWZMU7TEV_21 +23 MULT LHCBWZMU7TEV_22 +24 MULT LHCBWZMU7TEV_23 +25 MULT LHCBWZMU7TEV_24 +26 MULT LHCBWZMU7TEV_25 +27 MULT LHCBWZMU7TEV_26 +28 MULT LHCBWZMU7TEV_27 +29 MULT LHCBWZMU7TEV_28 +30 MULT LHCBWZMU7TEV_29 +31 MULT LHCBWZMU7TEV_30 +32 MULT LHCBWZMU7TEV_31 +33 MULT LHCBWZMU7TEV_32 +34 MULT LHCBBEAM7TEV +35 MULT LHCBLUMI7TEV diff --git a/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU8TEV_DEFAULT.dat b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU8TEV_DEFAULT.dat new file mode 100644 index 0000000000..62ba4f6680 --- /dev/null +++ b/nnpdfcpp/data/commondata/systypes/SYSTYPE_LHCBZMU8TEV_DEFAULT.dat @@ -0,0 +1,37 @@ +36 +1 MULT LHCBWZMU8TEV_0 +2 MULT LHCBWZMU8TEV_1 +3 MULT LHCBWZMU8TEV_2 +4 MULT LHCBWZMU8TEV_3 +5 MULT LHCBWZMU8TEV_4 +6 MULT LHCBWZMU8TEV_5 +7 MULT LHCBWZMU8TEV_6 +8 MULT LHCBWZMU8TEV_7 +9 MULT LHCBWZMU8TEV_8 +10 MULT LHCBWZMU8TEV_9 +11 MULT LHCBWZMU8TEV_10 +12 MULT LHCBWZMU8TEV_11 +13 MULT LHCBWZMU8TEV_12 +14 MULT LHCBWZMU8TEV_13 +15 MULT LHCBWZMU8TEV_14 +16 MULT LHCBWZMU8TEV_15 +17 MULT LHCBWZMU8TEV_16 +18 MULT LHCBWZMU8TEV_17 +19 MULT LHCBWZMU8TEV_18 +20 MULT LHCBWZMU8TEV_19 +21 MULT LHCBWZMU8TEV_20 +22 MULT LHCBWZMU8TEV_21 +23 MULT LHCBWZMU8TEV_22 +24 MULT LHCBWZMU8TEV_23 +25 MULT LHCBWZMU8TEV_24 +26 MULT LHCBWZMU8TEV_25 +27 MULT LHCBWZMU8TEV_26 +28 MULT LHCBWZMU8TEV_27 +29 MULT LHCBWZMU8TEV_28 +30 MULT LHCBWZMU8TEV_29 +31 MULT LHCBWZMU8TEV_30 +32 MULT LHCBWZMU8TEV_31 +33 MULT LHCBWZMU8TEV_32 +34 MULT LHCBWZMU8TEV_33 +35 MULT LHCBBEAM8TEV +36 MULT LHCBLUMI8TEV diff --git a/validphys2/src/validphys/cuts/filters.yaml b/validphys2/src/validphys/cuts/filters.yaml index 0e103fce04..8374fb7b56 100644 --- a/validphys2/src/validphys/cuts/filters.yaml +++ b/validphys2/src/validphys/cuts/filters.yaml @@ -76,6 +76,24 @@ PTO: NNLO rule: "etay >= 2.25" +- dataset: LHCBWMU8TEV + reason: | + The first two bins in rapidity have unnaturally large K-factors which we + don't understand, and theory calculations are unstable here, so we remove + these points at NNLO. + # Only evaluate rule if PTO matches + PTO: NNLO + rule: "etay >= 2.25" + +- dataset: LHCBZMU8TEV + reason: | + The first two bins in rapidity have unnaturally large K-factors which we + don't understand, and theory calculations are unstable here, so we remove + these points at NNLO. + # Only evaluate rule if PTO matches + PTO: NNLO + rule: "etay >= 2.25" + - dataset: LHCBWZMU7TEV reason: | The first two bins in rapidity have unnaturally large K-factors which we @@ -84,6 +102,22 @@ PTO: NNLO rule: "etay >= 2.25" +- dataset: LHCBWMU7TEV + reason: | + The first two bins in rapidity have unnaturally large K-factors which we + don't understand, and theory calculations are unstable here, so we remove + these points at NNLO. + PTO: NNLO + rule: "etay >= 2.25" + +- dataset: LHCBZMU7TEV + reason: | + The first two bins in rapidity have unnaturally large K-factors which we + don't understand, and theory calculations are unstable here, so we remove + these points at NNLO. + PTO: NNLO + rule: "etay >= 2.25" + - dataset: LHCB_Z_13TEV_DIELECTRON reason: | The first two bins in rapidity have unnaturally large K-factors which we From e1983cbd736ed9e31f14c7b7471eb19fa9532ab6 Mon Sep 17 00:00:00 2001 From: andreab1997 Date: Mon, 26 Jun 2023 14:21:28 +0200 Subject: [PATCH 110/134] Remove leftover comments --- nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml index 3d99510f0a..1a741f7202 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml @@ -17,5 +17,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_NC -#TO SPLIT +nnpdf31_process: DY_NC \ No newline at end of file From b43816a7559b5497ff77481fff792db388530699 Mon Sep 17 00:00:00 2001 From: andreab1997 Date: Mon, 26 Jun 2023 17:22:59 +0200 Subject: [PATCH 111/134] Remove underscore in group names and add new groups output --- nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml | 3 +-- nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml | 2 +- .../data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml | 2 +- .../data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml | 2 +- .../data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml | 2 +- .../data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml | 2 +- nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml | 2 +- validphys2/src/validphys/theorycovariance/output.py | 2 +- 80 files changed, 80 insertions(+), 81 deletions(-) diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml index 1a69c2adc0..62c3a1be80 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASDY2D8TEV.yaml @@ -9,4 +9,4 @@ x_label: '$|y_{\ell\ell}|$' kinematics_override: ewk_rap_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml index 5b2ed32b91..8f81988d5f 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASLOMASSDY11EXT.yaml @@ -3,4 +3,4 @@ x: k2 y_label: '$d\sigma_{Z/\gamma^{*}}/dM_{ll}$ (fb)' experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml index 94f9f2113b..32f91f2799 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWPT31PB.yaml @@ -7,4 +7,4 @@ y_label: '$d\sigma_{W}/dp_T$' kinematics_override: ewk_pt_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml index ede2874579..c4d9b39df9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP11CC.yaml @@ -23,4 +23,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml index 49d2755c99..063bedb6b8 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWRAP36PB.yaml @@ -17,4 +17,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC \ No newline at end of file +nnpdf31_process: DY CC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml index 0a35b7bde8..0da5c2151a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11.yaml @@ -19,5 +19,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC -#TO SPLIT +nnpdf31_process: DY CC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml index 13b6519fd3..c109494e2e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZRAP11CF.yaml @@ -23,4 +23,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_NC \ No newline at end of file +nnpdf31_process: DY NC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml index 1a741f7202..a7600022e2 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASWZTOT13TEV81PB.yaml @@ -17,4 +17,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_NC \ No newline at end of file +nnpdf31_process: DY NC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml index 4156d3ba35..f0b0c7b824 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZHIGHMASS49FB.yaml @@ -7,4 +7,4 @@ kinematics_override: ewk_mll_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml index d679f58a2c..3f84d7b7dd 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT7TEV.yaml @@ -10,4 +10,4 @@ kinematics_override: jet_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml index 07a8b21d6a..c54223ac65 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVMDIST.yaml @@ -6,4 +6,4 @@ figure_by: experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml index 4c1b5d2528..41140acf3c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZPT8TEVYDIST.yaml @@ -8,4 +8,4 @@ kinematics_override: jet_sqrt_scale experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml index 8e9c27cc32..c07827d50e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP11CC.yaml @@ -26,4 +26,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml index c26c605f74..e9ee71340b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLASZRAP36PB.yaml @@ -17,4 +17,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_NC \ No newline at end of file +nnpdf31_process: DY NC \ No newline at end of file diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml index b494b6c51e..a471b7f29e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_DY_2D_8TEV_LOWMASS.yaml @@ -7,4 +7,4 @@ figure_by: x_label: '$|y_{\ell\ell}|$' experiment: "ATLAS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml index 918f95eb4e..dfd2f915f2 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WM_DIFF_7TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W^-+c)/d|\eta^\ell|$ (fb)' x_label: '$|\eta^\ell|$' experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml index d9d9d05b02..74675379e1 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WCHARM_WP_DIFF_7TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W^++\bar{c})/d|\eta^\ell|$ (fb)' x_label: '$|\eta^\ell|$' experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml index feb12bc8e2..b88f170c89 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WMU_8TEV.yaml @@ -21,4 +21,4 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml index 6138c59e5f..23a7377c2e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PT.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml index 1552e18994..7bdaa632d6 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WM_JET_8TEV_PTJ.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml index b6c178092a..598f067d17 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PT.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml index 7dbd5b4f58..799e6c4fba 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_WP_JET_8TEV_PTJ.yaml @@ -7,4 +7,4 @@ y_scale: log experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml index f7c9216d9d..1bd30f5f4c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_W_TOT_13TEV.yaml @@ -15,5 +15,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml index 2db585750a..cb834a8e5c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_ATLAS_Z_TOT_13TEV.yaml @@ -13,5 +13,5 @@ extra_labels: experiment: "ATLAS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml index db0d6a4176..e7215c7ba2 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "CDF" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml index 817e04a0fc..73fa3aec4d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CDFZRAP_NEW.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "CDF" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml index 27a2108506..59cf625453 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D11.yaml @@ -8,4 +8,4 @@ kinematics_override: ewk_mll_sqrt_scale experiment: "CMS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml index 3884ff636b..b2d44bc1b3 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSDY2D12.yaml @@ -6,4 +6,4 @@ figure_by: experiment: "CMS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml index 1def4ee86a..3d79f76de9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMRAT.yaml @@ -4,4 +4,4 @@ y_label: '$\sigma(W^+ + \bar{c})/\sigma(W^- + c)$' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml index 14320503e3..3e619d672e 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWCHARMTOT.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W+c)/d|\eta_l|$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml index aac897de5c..dd5d94a176 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWEASY840PB.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{e}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml index ea30ef23e2..894bf0a5d8 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWMASY47FB.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{\mu}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "CMS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml index 49d1c2032b..145aa93931 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSWMU8TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W\to l\nu)/dy_l$' #x_label: 'Lepton rapidity $|y_l|$' experiment: "CMS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml index c878834004..2fce34db17 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMSZDIFF12.yaml @@ -6,4 +6,4 @@ figure_by: experiment: "CMS" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml index 822b1b080c..65df1624f4 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_CMS_WCHARM_DIFF_UNNORM_13TEV.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma(W+c)/d|\eta^\mu|$ (fb)' x_label: '$|\eta^\mu|$' experiment: "CMS" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml index 9e44c95e52..cfe6327851 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0WEASY.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{e}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "D0" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml index b34fe74e97..6106b64db9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0WMASY.yaml @@ -4,4 +4,4 @@ y_label: '$dA_{\mu}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "D0" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml index 8a47b94d24..42fb285454 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP.yaml @@ -4,4 +4,4 @@ y_label: '$1/\sigma\;d\sigma_{Z/\gamma^{*}}/dy$' #x_label: 'Boson rapidity $|y|$' experiment: "D0" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml index eac902793b..d8660dd6bb 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_40.yaml @@ -5,4 +5,4 @@ y_label: '$1/\sigma\;d\sigma_{Z/\gamma^{*}}/dy$' experiment: "D0" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml index eac902793b..d8660dd6bb 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_D0ZRAP_SF.yaml @@ -5,4 +5,4 @@ y_label: '$1/\sigma\;d\sigma_{Z/\gamma^{*}}/dy$' experiment: "D0" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml index f20fb7043a..79de5a2f7a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "DYE605" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml index c6b7ef132d..f4e1ae3a6d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml index c6b7ef132d..f4e1ae3a6d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_dw_ite.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml index c6b7ef132d..f4e1ae3a6d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml index c6b7ef132d..f4e1ae3a6d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE605_sh_ite.yaml @@ -9,4 +9,4 @@ line_by: - k1 experiment: "NUCLEAR" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml index be14382f77..594c9f7b5d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886P.yaml @@ -47,4 +47,4 @@ extra_labels: experiment: "DYE886" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml index 509adc7b3d..f43cc1ddb3 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DYE886" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml index fb6605a60d..46d5d8a3b9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml index fb6605a60d..46d5d8a3b9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_dw_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml index fb6605a60d..46d5d8a3b9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml index fb6605a60d..46d5d8a3b9 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886R_sh_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml index d16110cac0..fa7b5d872d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE886_D.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml index 9c2146a65e..ed67905296 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DYE906" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml index 63425b21b9..5066c966e2 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN01.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml index eb8b37b5b5..596ca710b5 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN02.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml index c5411dba40..c8af2662e3 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN03.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml index 7118bd2f19..6456a4ad1c 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN04.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml index aebfcd29e6..8b71da16df 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN05.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml index c6199b5dcc..18e44b898b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN06.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml index d7ef0697be..101b6b6132 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN07.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml index 0b3728efe8..4394055eac 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN08.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml index c57ba2d02a..73b885351b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN09.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml index ce45afe960..e5b23d9e38 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_BIN10.yml @@ -8,4 +8,4 @@ extra_labels: experiment: "AUXILIARY" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml index e2c765ee51..286446f963 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_dw_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml index e2c765ee51..286446f963 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906R_sh_ite.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml b/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml index c4f850aa17..d1eff98df1 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_DYE906_D.yaml @@ -8,4 +8,4 @@ extra_labels: experiment: "DEUTERON" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml index 1dc68c0a1c..0480755a48 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB.yaml @@ -12,4 +12,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml index b61c9bd40e..85a9bf55db 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBW36PB_40.yaml @@ -12,4 +12,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml index 53771db628..e12a9452ea 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU7TEV.yaml @@ -13,4 +13,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml index 7c356b841a..8f354c5606 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBWMU8TEV.yaml @@ -13,4 +13,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml index 3f41ad6950..adc530193b 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZ940PB.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml index 566b0374a9..224163bb79 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml index 566b0374a9..224163bb79 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZEE2FB_40.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z/\gamma^{*}}/dy$ (fb)' #x_label: 'Boson rapidity $|y|$' experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml index 0d6cd1f3c7..899384d3dd 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU7TEV.yaml @@ -13,4 +13,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml index e5f34d775d..6f98a01f5a 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCBZMU8TEV.yaml @@ -13,4 +13,4 @@ extra_labels: experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml index 3991ef7c09..9a3ae07d3d 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_A.yaml @@ -6,4 +6,4 @@ x_label: '$\eta^e$' experiment: "LHCb" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml index 366788c98e..d1814d6c07 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_WENU_8TEV_R.yaml @@ -6,4 +6,4 @@ x_label: '$\eta^e$' experiment: "LHCb" -nnpdf31_process: DY_CC +nnpdf31_process: DY CC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml index d34084a4fa..ec7ae88c01 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIELECTRON.yaml @@ -5,4 +5,4 @@ x_label: 'y' experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml index 34b6489c6d..2a45a9ee84 100644 --- a/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml +++ b/nnpdfcpp/data/commondata/PLOTTING_LHCB_Z_13TEV_DIMUON.yaml @@ -4,4 +4,4 @@ y_label: '$d\sigma_{Z}/dy$ (fb)' x_label: 'y' experiment: "LHCb" -nnpdf31_process: DY_NC +nnpdf31_process: DY NC diff --git a/validphys2/src/validphys/theorycovariance/output.py b/validphys2/src/validphys/theorycovariance/output.py index 2eab9d20c3..e9c4428e54 100644 --- a/validphys2/src/validphys/theorycovariance/output.py +++ b/validphys2/src/validphys/theorycovariance/output.py @@ -128,7 +128,7 @@ def plot_covmat_heatmap(covmat, title): return fig -_procorder = ("DIS NC", "DIS CC", "DY", "JETS", "TOP") +_procorder = ("DIS NC", "DIS CC", "DY NC", "DY CC", "JETS", "TOP", "SINGLETOP", "PHOTON", "DIJET") _dsorder = ( "BCDMSP", From 768c0c2e9d7a019b7631890c5ad1bba80115a325 Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Thu, 29 Jun 2023 12:27:49 +0200 Subject: [PATCH 112/134] Add theory 527 and extend comments in theories 522, 523, 524, 525, 526 --- nnpdfcpp/data/theory.db | Bin 110592 -> 110592 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/nnpdfcpp/data/theory.db b/nnpdfcpp/data/theory.db index fa202758dff642f46054edb4265f30c67e5fa0c5..3dd3177dd2864e72c1516b9afc0bac11798042cc 100644 GIT binary patch delta 580 zcmZp8z}E19ZGtqTz(g5mMuCk9OXQj5I9N8bD_AfwvTU|fI>O4q&dkKb#LvXv%%icL zM}zTex;T3|0|%2B1K%8$qfBDlADDC45fs1 z8q@1%Gwz&Tpu)&G{my(w30;Mv(!9LPymW=coPvzR)Lb2ff{gr<{5*y9)V$Q9#FEq$ zg~SqtK!c{x7Cx9ss@P02AkHL11NYRhrmz-nm|^PJ3^OLyFtBMME&N&xoYU*3Gb(d8 zs&a6;`TP0!=sHbLoXvP0>{XUPR~Lop59c!q6YWZn!Q48GRvQb=7`Jbn!C1}2!t23s zWMbg~)~1jaUYP5ZvAJH4IM&;<2KmE@vM(*kJ zf*Cod8_Z=CVKX#Pa8C`}zHtU)H4|%-X$vnzJ!AUxk5d>QqN*0<1gUMZXyJh-QAK>!|8Pcn$T;Ou=fETDYNV3$&nWs=V bG+Vf!?rnVycCW Date: Fri, 30 Jun 2023 15:03:48 +0200 Subject: [PATCH 113/134] Change the order of the process for the output --- validphys2/src/validphys/theorycovariance/output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/theorycovariance/output.py b/validphys2/src/validphys/theorycovariance/output.py index e9c4428e54..7299579863 100644 --- a/validphys2/src/validphys/theorycovariance/output.py +++ b/validphys2/src/validphys/theorycovariance/output.py @@ -128,7 +128,7 @@ def plot_covmat_heatmap(covmat, title): return fig -_procorder = ("DIS NC", "DIS CC", "DY NC", "DY CC", "JETS", "TOP", "SINGLETOP", "PHOTON", "DIJET") +_procorder = ("DIS NC", "DIS CC", "TOP", "DY NC", "DY CC", "SINGLETOP", "JETS", "PHOTON", "DIJET") _dsorder = ( "BCDMSP", From c8d087b959de313e94687b3b1e111ea1af9f0f7c Mon Sep 17 00:00:00 2001 From: niclaurenti Date: Mon, 3 Jul 2023 16:06:24 +0200 Subject: [PATCH 114/134] Change also luxset with vp-nextfitruncard --- validphys2/src/validphys/eff_exponents.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/validphys2/src/validphys/eff_exponents.py b/validphys2/src/validphys/eff_exponents.py index 0a3a6c7a1f..6ed9b168e1 100644 --- a/validphys2/src/validphys/eff_exponents.py +++ b/validphys2/src/validphys/eff_exponents.py @@ -599,5 +599,8 @@ def iterated_runcard_yaml(fit, update_runcard_description_yaml): closuretest_data = filtermap["closuretest"] if "filterseed" in closuretest_data: closuretest_data["filterseed"] = random.randrange(0, maxint) + + if "fiatlux" in filtermap: + filtermap['fiatlux']['luxset'] = fit.name return yaml.dump(filtermap, Dumper=yaml.RoundTripDumper) From 6617da2cb8284182eadb1a18b1296bc5f805ec35 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 5 Jul 2023 10:14:49 +0200 Subject: [PATCH 115/134] Remove duplicate imports Co-authored-by: Roy Stegeman --- n3fit/src/n3fit/layers/__init__.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/n3fit/src/n3fit/layers/__init__.py b/n3fit/src/n3fit/layers/__init__.py index f3e0f7cd54..a9168bda13 100644 --- a/n3fit/src/n3fit/layers/__init__.py +++ b/n3fit/src/n3fit/layers/__init__.py @@ -1,7 +1,3 @@ -from .preprocessing import Preprocessing -from .rotations import FkRotation, FlavourToEvolution, ObsRotation -from .x_operations import xIntegrator, xDivide -from .msr_normalization import MSR_Normalization from n3fit.backends import MetaLayer from .DIS import DIS From 5aa72fc3a0a605fd8ab3938a6032435786141e2b Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 5 Jul 2023 10:14:58 +0200 Subject: [PATCH 116/134] Remove duplicate imports Co-authored-by: Roy Stegeman --- n3fit/src/n3fit/model_gen.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index ec8d43b43d..d8f3cbb15e 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -14,8 +14,6 @@ import numpy as np from n3fit.msr import generate_msr_model_and_grid -from n3fit.layers import DIS, DY, ObsRotation, losses -from n3fit.layers.observable import is_unique from n3fit.backends import Input, Lambda, MetaLayer, MetaModel, base_layer_selector from n3fit.backends import operations as op From a80a77e4af9d8e3ad3bc828de026431cfdfbced2 Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 5 Jul 2023 10:18:22 +0200 Subject: [PATCH 117/134] Add link to plot_model documentation --- doc/sphinx/source/n3fit/methodology.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/sphinx/source/n3fit/methodology.rst b/doc/sphinx/source/n3fit/methodology.rst index 78562f323f..8380d5526d 100644 --- a/doc/sphinx/source/n3fit/methodology.rst +++ b/doc/sphinx/source/n3fit/methodology.rst @@ -127,7 +127,8 @@ provide a faster convergence to the solution. Parameters like the number of layers, nodes, activation functions are hyper-parameters that require tuning. -To see the structure of the model, one can use Keras's ``plot_model`` function as illustrated in the script below: +To see the structure of the model, one can use Keras's ``plot_model`` function as illustrated in the script below. +See the `Keras documentation `_ for more details. .. code-block:: python From f82b4070df34a52a7fa665caab50bebf07e43a7d Mon Sep 17 00:00:00 2001 From: Aron Date: Wed, 5 Jul 2023 10:40:47 +0200 Subject: [PATCH 118/134] Move photon integrals down to final loop --- n3fit/src/n3fit/model_gen.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index d8f3cbb15e..b46b6b23c0 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -604,14 +604,6 @@ def pdfNN_layer_generator( model_input["integrator_input"] = integrator_input else: sumrule_layer = lambda x: x - # The photon is treated separately, need to get its integrals to normalize the pdf - if photons: - photon_integrals = photons.integral - else: - photon_integrals = [0.0 for _ in range(len(seed))] - import tensorflow as tf - photon_integrals = [tf.constant(photon_integrals[i_replica]) - for i_replica in range(len(seed))] # Now we need a trainable network per replica to be trained in parallel pdf_models = [] @@ -686,13 +678,15 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): "pdf_x": pdf_unnormalized, "pdf_xgrid_integration": pdf_integration_grid, "xgrid_integration": integrator_input, - "photon_integral": photon_integrals[i_replica], + # The photon is treated separately, need to get its integrals to normalize the pdf + "photon_integral": op.numpy_to_tensor(0.0 if not photons else photons.integral[i_replica]), }) if photons: - pdf_normalized = layer_photon(pdf_normalized, i_replica) - - model_output = pdf_normalized + # Add in the photon component + model_output = layer_photon(pdf_normalized, i_replica) + else: + model_output = pdf_normalized # Create the model pdf_model = MetaModel(model_input, model_output, name=f"PDF_{i_replica}", scaler=scaler) From abf98bc9d9439d65a94f5d6921c673371bab979d Mon Sep 17 00:00:00 2001 From: Andrea Barontini Date: Wed, 5 Jul 2023 11:20:06 +0200 Subject: [PATCH 119/134] Add theoryids for alpha variation but same thcovmat --- .../scalevariationtheoryids.yaml | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml b/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml index a1f7b7c681..a74805c98c 100644 --- a/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml +++ b/validphys2/src/validphys/scalevariations/scalevariationtheoryids.yaml @@ -24,6 +24,32 @@ scale_variations_for: (2, 1): 408 (2, 2): 409 +#alpha=0.117 + - theoryid: 528 + variations: + (0.5, 0.5): 401 + (0.5, 1): 402 + (0.5, 2): 403 + (1, 0.5): 404 + (1, 1): 405 + (1, 2): 406 + (2, 0.5): 407 + (2, 1): 408 + (2, 2): 409 + +#alpha=0.119 + - theoryid: 529 + variations: + (0.5, 0.5): 401 + (0.5, 1): 402 + (0.5, 2): 403 + (1, 0.5): 404 + (1, 1): 405 + (1, 2): 406 + (2, 0.5): 407 + (2, 1): 408 + (2, 2): 409 + - theoryid: 414 variations: (0.5, 0.5): 410 @@ -48,6 +74,32 @@ scale_variations_for: (2, 1): 427 (2, 2): 428 +#alpha=0.117 + - theoryid: 530 + variations: + (0.5, 0.5): 420 + (0.5, 1): 421 + (0.5, 2): 422 + (1, 0.5): 423 + (1, 1): 424 + (1, 2): 425 + (2, 0.5): 426 + (2, 1): 427 + (2, 2): 428 + +#alpha=0.119 + - theoryid: 531 + variations: + (0.5, 0.5): 420 + (0.5, 1): 421 + (0.5, 2): 422 + (1, 0.5): 423 + (1, 1): 424 + (1, 2): 425 + (2, 0.5): 426 + (2, 1): 427 + (2, 2): 428 + - theoryid: 434 variations: (0.5, 0.5): 430 From 78d83d64a2afebd2e21ac37286993f5b3727deca Mon Sep 17 00:00:00 2001 From: andreab1997 Date: Wed, 5 Jul 2023 11:33:19 +0200 Subject: [PATCH 120/134] Add theory database with new theories --- nnpdfcpp/data/theory.db | Bin 110592 -> 110592 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/nnpdfcpp/data/theory.db b/nnpdfcpp/data/theory.db index 3dd3177dd2864e72c1516b9afc0bac11798042cc..410e2ed89b005d9cabad725972b463c94a0fe35d 100644 GIT binary patch delta 404 zcmZp8z}E19ZGtqT$V3@uK@kSMa1UPoHw;Yd4;a`V@NeDhC{Vz@`2o9%1hW$Rlg;c3 zmP{P%f7rjUzX9?bl;*H1uro6;F$psXgJ~fqAuuh-BnYMjm;{0CGZ?FxK-z?0+9u!I$}`;M7>-~b2U54E#F5O4>x;0Gia10Dzj zvj-qK0t5&|2t2WIzy*T@D7OSC0sUte2X_Dn0u}%coCL)J77OqLYz7|*@d&Z8asC0f z?3)2s0RvTp4wvwo0VlU+nE@{W16G6!m++ebC%0{#0Wtvu4=Ml&myJ>ZB)1Nj0WARp z3oHRTv2iv51A;t+lhM8>mq1zp3%4wi0Y(A@4M+gQk#WETf>eYJm!O^jQkUFP0k@ZM aBmoJRs+$2q1ONa5RIzbT0k@o<0b~(H%0zDf From 80ef5d72a5bf1c2476ba1f0bd1374b2d7239c700 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 5 Jul 2023 13:25:12 +0200 Subject: [PATCH 121/134] Simplify numpy_to_input, removing unused no_reshape and setting gridpoints to None in shape always --- .../backends/keras_backend/operations.py | 23 +++++-------------- n3fit/src/n3fit/model_gen.py | 4 +--- n3fit/src/n3fit/msr.py | 8 ++----- 3 files changed, 9 insertions(+), 26 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 4020466a23..77c45bdfae 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -114,9 +114,7 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation def numpy_to_input( numpy_array: np.ndarray, - no_reshape: bool = False, name: str = None, - custom_shape: tuple = None, ): """ Takes a numpy array and generates a Input layer. @@ -126,26 +124,17 @@ def numpy_to_input( Parameters ---------- numpy_array: np.ndarray - no_reshape: bool - if true, don't add batch dimension, take the first dimension of the array as the batch name: bool name to give to the layer - custom_shape: tuple - To specify a more general shape with None values """ - if no_reshape: - batched_array = numpy_array - batch_size = numpy_array.shape[0] - shape = numpy_array.shape[1:] - else: - batched_array = np.expand_dims(numpy_array, 0) - batch_size = 1 - shape = numpy_array.shape - if custom_shape is not None: - shape = custom_shape + batched_array = np.expand_dims(numpy_array, 0) + batch_size = 1 + shape = list(numpy_array.shape) + # set the number of gridpoints to None, otherwise shapes don't show in model.summary + shape[0] = None + input_layer = Input(batch_size=batch_size, shape=shape, name=name) input_layer.tensor_content = batched_array - input_layer.original_shape = no_reshape return input_layer diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index b46b6b23c0..4262887937 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -577,9 +577,7 @@ def pdfNN_layer_generator( input_x_eq_1 = scaler(input_x_eq_1)[0] # the layer that subtracts 1 from the NN output subtract_one_layer = Lambda(op.op_subtract, name='subtract_one') - layer_x_eq_1 = op.numpy_to_input( - np.array(input_x_eq_1).reshape(1, 1), name='x_ones', custom_shape=(None, 1) - ) # Just to make shapes consistent + layer_x_eq_1 = op.numpy_to_input(np.array(input_x_eq_1).reshape(1, 1), name='x_eq_1') model_input["layer_x_eq_1"] = layer_x_eq_1 # the layer that multiplies the NN output by the preprocessing factor diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index e015486df3..c74450676a 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -59,12 +59,8 @@ def generate_msr_model_and_grid( if scaler: xgrid_integration = scaler(xgrid_integration) - # Turn into input layer. Specify a custom shape here using None, - # so shapes will display properly in the model summary - grid_shape = 2 if scaler is not None else 1 - xgrid_integration = op.numpy_to_input( - xgrid_integration, name="integration_grid", custom_shape=(None, grid_shape) - ) + # Turn into input layer. + xgrid_integration = op.numpy_to_input(xgrid_integration, name="integration_grid") # 1c Get the original grid if scaler: From 0a4d684cd148d6d4d63a11872bc9372d8744b890 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Fri, 7 Jul 2023 09:08:11 +0200 Subject: [PATCH 122/134] Improve numpy_to_input documentation --- n3fit/src/n3fit/backends/keras_backend/operations.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 77c45bdfae..a53e3f3e71 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -117,23 +117,21 @@ def numpy_to_input( name: str = None, ): """ - Takes a numpy array and generates a Input layer. - By default it adds a batch dimension (of size 1) so that the shape of the layer - is that of the array + Takes a numpy array and generates an Input layer with the same shape, + but with a batch dimension (of size 1) added. Parameters ---------- numpy_array: np.ndarray - name: bool + name: str name to give to the layer """ batched_array = np.expand_dims(numpy_array, 0) - batch_size = 1 shape = list(numpy_array.shape) # set the number of gridpoints to None, otherwise shapes don't show in model.summary shape[0] = None - input_layer = Input(batch_size=batch_size, shape=shape, name=name) + input_layer = Input(batch_size=1, shape=shape, name=name) input_layer.tensor_content = batched_array return input_layer From 94d6e80cd1d5c58f65051bda21c0cfc1086094ef Mon Sep 17 00:00:00 2001 From: RoyStegeman Date: Mon, 10 Jul 2023 11:17:36 +0100 Subject: [PATCH 123/134] remove mention that vp-comparefit doesn't always have to be the first step --- doc/sphinx/source/tutorials/run-fit.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/doc/sphinx/source/tutorials/run-fit.md b/doc/sphinx/source/tutorials/run-fit.md index f0a1d10201..0a5c5bb2b8 100644 --- a/doc/sphinx/source/tutorials/run-fit.md +++ b/doc/sphinx/source/tutorials/run-fit.md @@ -122,15 +122,6 @@ following the points presented above you can proceed with a fit. downloaded automatically. Alternatively they can be obtained with the ``vp-get`` tool. - ```eval_rst - .. note:: - This step is not strictly necessary when producing a standard fit with - ``n3fit`` but it is required by :ref:`validphys ` - and it should therefore always be done. Note that :ref:`vp-upload ` - will fail unless this step has been followed. If necessary, this step can - be done after the fit has been run. - ``` - 2. The ``n3fit`` program takes a ``runcard.yml`` as input and a replica number, e.g. ```n3fit runcard.yml replica``` where ``replica`` goes from 1-n where n is the maximum number of desired replicas. Note that if you desire, for example, a 100 From 883cb192f741c6f81134ee676ab0e941d2d5fe9a Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Mon, 10 Jul 2023 13:05:09 +0200 Subject: [PATCH 124/134] Implement FkRotation as subclass of Rotation by rewriting using a rotation tensor --- n3fit/src/n3fit/layers/rotations.py | 53 +++++++++++++---------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/n3fit/src/n3fit/layers/rotations.py b/n3fit/src/n3fit/layers/rotations.py index 686d3c5bbb..6001a312bc 100644 --- a/n3fit/src/n3fit/layers/rotations.py +++ b/n3fit/src/n3fit/layers/rotations.py @@ -56,7 +56,7 @@ def __init__( super().__init__(rotation_matrix, axes=1, **kwargs) -class FkRotation(MetaLayer): +class FkRotation(Rotation): """ Applies a transformation from the dimension-8 evolution basis to the dimension-14 evolution basis used by the fktables. @@ -64,36 +64,31 @@ class FkRotation(MetaLayer): The input to this layer is a `pdf_raw` variable which is expected to have a shape (1, None, 8), and it is then rotated to an output (1, None, 14) """ - - # TODO: Generate a rotation matrix in the input and just do tf.tensordot in call - # the matrix should be: (8, 14) so that we can just do tf.tensordot(pdf, rotmat, axes=1) - # i.e., create the matrix and inherit from the Rotation layer above def __init__(self, output_dim=14, name="evolution", **kwargs): self.output_dim = output_dim - super().__init__(name=name, **kwargs) - - def call(self, pdf_raw): - # Transpose the PDF so that the flavour index is the first one - x = op.transpose(pdf_raw) - pdf_raw_list = [ - 0 * x[0], # photon - x[0], # sigma - x[1], # g - x[2], # v - x[3], # v3 - x[4], # v8 - x[8], # v15 - x[2], # v24 - x[2], # v35 - x[5], # t3 - x[6], # t8 - x[0] - 4 * x[7], # t15 (c-) - x[0], # t24 - x[0], # t35 - ] - ret = op.concatenate(pdf_raw_list) - # Concatenating destroys the batch index so we have to regenerate it - return op.batchit(ret) + rotation_matrix = self._create_rotation_matrix() + super().__init__(rotation_matrix, axes=1, name=name, **kwargs) + + def _create_rotation_matrix(self): + """Create the rotation matrix""" + array = np.array([ + [0, 0, 0, 0, 0, 0, 0, 0, 0], # photon + [1, 0, 0, 0, 0, 0, 0, 0, 0], # sigma + [0, 1, 0, 0, 0, 0, 0, 0, 0], # g + [0, 0, 1, 0, 0, 0, 0, 0, 0], # v + [0, 0, 0, 1, 0, 0, 0, 0, 0], # v3 + [0, 0, 0, 0, 1, 0, 0, 0, 0], # v8 + [0, 0, 0, 0, 0, 0, 0, 0, 1], # v15 + [0, 0, 1, 0, 0, 0, 0, 0, 0], # v24 + [0, 0, 1, 0, 0, 0, 0, 0, 0], # v35 + [0, 0, 0, 0, 0, 1, 0, 0, 0], # t3 + [0, 0, 0, 0, 0, 0, 1, 0, 0], # t8 + [1, 0, 0, 0, 0, 0, 0,-4, 0], # t15 (c-) + [1, 0, 0, 0, 0, 0, 0, 0, 0], # t24 + [1, 0, 0, 0, 0, 0, 0, 0, 0], # t35 + ]) + tensor = op.numpy_to_tensor(array.T) + return tensor class AddPhoton(MetaLayer): From e7a91405a59b13b5662541d38dc48e887e99c5e4 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Mon, 10 Jul 2023 13:56:52 +0200 Subject: [PATCH 125/134] Change 8 to 9 in docstring --- n3fit/src/n3fit/layers/rotations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/layers/rotations.py b/n3fit/src/n3fit/layers/rotations.py index 6001a312bc..ed58cdbe15 100644 --- a/n3fit/src/n3fit/layers/rotations.py +++ b/n3fit/src/n3fit/layers/rotations.py @@ -58,11 +58,11 @@ def __init__( class FkRotation(Rotation): """ - Applies a transformation from the dimension-8 evolution basis + Applies a transformation from the dimension-9 evolution basis to the dimension-14 evolution basis used by the fktables. The input to this layer is a `pdf_raw` variable which is expected to have - a shape (1, None, 8), and it is then rotated to an output (1, None, 14) + a shape (1, None, 9), and it is then rotated to an output (1, None, 14) """ def __init__(self, output_dim=14, name="evolution", **kwargs): self.output_dim = output_dim From 0518c7cc6f133d1fe91d0dba840bc3d347684dc6 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Mon, 10 Jul 2023 14:10:36 +0200 Subject: [PATCH 126/134] Apply black and isort to all affected files --- .../backends/keras_backend/operations.py | 8 +++---- n3fit/src/n3fit/layers/preprocessing.py | 10 ++------ n3fit/src/n3fit/layers/x_operations.py | 3 ++- n3fit/src/n3fit/model_gen.py | 23 +++++++++++-------- n3fit/src/n3fit/model_trainer.py | 12 +++------- n3fit/src/n3fit/msr.py | 7 +++--- n3fit/src/n3fit/scaler.py | 1 + n3fit/src/n3fit/tests/test_xops.py | 1 + 8 files changed, 29 insertions(+), 36 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index a53e3f3e71..37097ed00f 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -25,13 +25,12 @@ import numpy as np import tensorflow as tf +from tensorflow.keras import backend as K +from tensorflow.keras.layers import Input from tensorflow.keras.layers import Lambda as keras_Lambda from tensorflow.keras.layers import multiply as keras_multiply from tensorflow.keras.layers import subtract as keras_subtract -from tensorflow.keras.layers import Input -from tensorflow.keras import backend as K - from validphys.convolution import OP @@ -113,8 +112,7 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation def numpy_to_input( - numpy_array: np.ndarray, - name: str = None, + numpy_array: np.ndarray, name: str = None, ): """ Takes a numpy array and generates an Input layer with the same shape, diff --git a/n3fit/src/n3fit/layers/preprocessing.py b/n3fit/src/n3fit/layers/preprocessing.py index 3aefbadaec..e5d45c7038 100644 --- a/n3fit/src/n3fit/layers/preprocessing.py +++ b/n3fit/src/n3fit/layers/preprocessing.py @@ -1,5 +1,4 @@ -from n3fit.backends import MetaLayer -from n3fit.backends import constraints +from n3fit.backends import MetaLayer, constraints from n3fit.backends import operations as op @@ -35,12 +34,7 @@ class Preprocessing(MetaLayer): """ def __init__( - self, - flav_info=None, - seed=0, - initializer="random_uniform", - large_x=True, - **kwargs, + self, flav_info=None, seed=0, initializer="random_uniform", large_x=True, **kwargs, ): if flav_info is None: raise ValueError( diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index c56a369a75..d8a3d47b3d 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -14,7 +14,8 @@ from n3fit.backends import MetaLayer from n3fit.backends import operations as op -BASIS_SIZE=14 +BASIS_SIZE = 14 + class xDivide(MetaLayer): """ diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 4262887937..55eba95447 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -9,11 +9,10 @@ """ -from typing import List, Callable from dataclasses import dataclass +from typing import Callable, List import numpy as np -from n3fit.msr import generate_msr_model_and_grid from n3fit.backends import Input, Lambda, MetaLayer, MetaModel, base_layer_selector from n3fit.backends import operations as op @@ -29,7 +28,7 @@ losses, ) from n3fit.layers.observable import is_unique - +from n3fit.msr import generate_msr_model_and_grid from validphys.photon.compute import Photon # only used for type hint here @@ -672,13 +671,17 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, preprocessing_factor) pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, preprocessing_factor) - pdf_normalized = sumrule_layer({ - "pdf_x": pdf_unnormalized, - "pdf_xgrid_integration": pdf_integration_grid, - "xgrid_integration": integrator_input, - # The photon is treated separately, need to get its integrals to normalize the pdf - "photon_integral": op.numpy_to_tensor(0.0 if not photons else photons.integral[i_replica]), - }) + pdf_normalized = sumrule_layer( + { + "pdf_x": pdf_unnormalized, + "pdf_xgrid_integration": pdf_integration_grid, + "xgrid_integration": integrator_input, + # The photon is treated separately, need to get its integrals to normalize the pdf + "photon_integral": op.numpy_to_tensor( + 0.0 if not photons else photons.integral[i_replica] + ), + } + ) if photons: # Add in the photon component diff --git a/n3fit/src/n3fit/model_trainer.py b/n3fit/src/n3fit/model_trainer.py index 974dd18b16..2f77590a6e 100644 --- a/n3fit/src/n3fit/model_trainer.py +++ b/n3fit/src/n3fit/model_trainer.py @@ -16,10 +16,10 @@ from n3fit import model_gen from n3fit.backends import MetaModel, callbacks, clear_backend_state -from n3fit.scaler import generate_scaler from n3fit.backends import operations as op import n3fit.hyper_optimization.penalties import n3fit.hyper_optimization.rewards +from n3fit.scaler import generate_scaler from n3fit.stopping import Stopping from n3fit.vpinterface import N3PDF from validphys.photon.compute import Photon @@ -846,9 +846,7 @@ def hyperparametrizable(self, params): # Initialize all photon classes for the different replicas: if self.lux_params: photons = Photon( - theoryid=self.theoryid, - lux_params=self.lux_params, - replicas=self.replicas, + theoryid=self.theoryid, lux_params=self.lux_params, replicas=self.replicas, ) else: photons = None @@ -920,11 +918,7 @@ def hyperparametrizable(self, params): for model in models.values(): model.compile(**params["optimizer"]) - passed = self._train_and_fit( - models["training"], - stopping_object, - epochs=epochs, - ) + passed = self._train_and_fit(models["training"], stopping_object, epochs=epochs,) if self.mode_hyperopt: # If doing a hyperparameter scan we need to keep track of the loss function diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index c74450676a..b7f86fc591 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -5,8 +5,8 @@ import numpy as np +from n3fit.backends import Input, Lambda, MetaModel from n3fit.backends import operations as op -from n3fit.backends import MetaModel, Lambda, Input from n3fit.layers import MSR_Normalization, xDivide, xIntegrator log = logging.getLogger(__name__) @@ -85,8 +85,9 @@ def generate_msr_model_and_grid( # 6. Compute the normalization factor # For now set the photon component to None - normalization_factor = MSR_Normalization( - output_dim, mode, name="msr_weights")(pdf_integrated, photon_integral) + normalization_factor = MSR_Normalization(output_dim, mode, name="msr_weights")( + pdf_integrated, photon_integral + ) # 7. Apply the normalization factor to the pdf pdf_normalized = Lambda(lambda pdf_norm: pdf_norm[0] * pdf_norm[1], name="pdf_normalized")( diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index b8434a5759..f4f5abff72 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -1,4 +1,5 @@ from typing import Callable, List + import numpy as np from scipy.interpolate import PchipInterpolator diff --git a/n3fit/src/n3fit/tests/test_xops.py b/n3fit/src/n3fit/tests/test_xops.py index 8aa2248c91..99ed67f64e 100644 --- a/n3fit/src/n3fit/tests/test_xops.py +++ b/n3fit/src/n3fit/tests/test_xops.py @@ -2,6 +2,7 @@ Test the x operations """ import numpy as np + from n3fit.layers import xDivide From e92b706e6c966bd71b7482ac0c6ca44614316f45 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Mon, 10 Jul 2023 15:19:48 +0200 Subject: [PATCH 127/134] Update n3fit/src/n3fit/backends/keras_backend/operations.py formatting Co-authored-by: Juan M. Cruz-Martinez --- n3fit/src/n3fit/backends/keras_backend/operations.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 37097ed00f..41cc1b84a9 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -111,9 +111,7 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation -def numpy_to_input( - numpy_array: np.ndarray, name: str = None, -): +def numpy_to_input(numpy_array: np.ndarray, name: str = None): """ Takes a numpy array and generates an Input layer with the same shape, but with a batch dimension (of size 1) added. From 5bcf1694cca62bf0b5ae9b2781c45dc29060bab1 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Mon, 10 Jul 2023 15:33:58 +0200 Subject: [PATCH 128/134] Restore comments in scaler --- n3fit/src/n3fit/scaler.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index f4f5abff72..0a8be1f91c 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -23,6 +23,9 @@ def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = No input_arr = np.sort(input_arr) input_arr_size = input_arr.size + # Define an evenly spaced grid in the domain [0,1] + # force_set_smallest is used to make sure the smallest point included in the scaling is + # 1e-9, to prevent trouble when saving it to the LHAPDF grid force_set_smallest = input_arr.min() > 1e-9 if force_set_smallest: new_xgrid = np.linspace( @@ -31,17 +34,23 @@ def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = No else: new_xgrid = np.linspace(start=0, stop=1.0, endpoint=False, num=input_arr_size) + # When mapping the FK xgrids onto our new grid, we need to consider degeneracies among + # the x-values in the FK grids unique, counts = np.unique(input_arr, return_counts=True) map_to_complete = [] for cumsum_ in np.cumsum(counts): + # Make sure to include the smallest new_xgrid value, such that we have a point at + # x<=1e-9 map_to_complete.append(new_xgrid[cumsum_ - counts[0]]) map_to_complete = np.array(map_to_complete) map_from_complete = unique + # If needed, set feature_scaling(x=1e-9)=0 if force_set_smallest: map_from_complete = np.insert(map_from_complete, 0, 1e-9) map_to_complete = np.insert(map_to_complete, 0, 0.0) + # Select the indices of the points that will be used by the interpolator onein = map_from_complete.size / (int(interpolation_points) - 1) selected_points = [round(i * onein - 1) for i in range(1, int(interpolation_points))] if selected_points[0] != 0: From 1a9ce3038db0121ab7bb52f028187b085cff66b7 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 12 Jul 2023 10:31:12 +0200 Subject: [PATCH 129/134] Add Optional type hint for arguments that can be None --- n3fit/src/n3fit/backends/keras_backend/operations.py | 4 +++- n3fit/src/n3fit/layers/x_operations.py | 6 ++++-- n3fit/src/n3fit/msr.py | 7 ++++++- n3fit/src/n3fit/scaler.py | 8 +++++--- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 41cc1b84a9..677e8aacba 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -23,6 +23,8 @@ equally operations are automatically converted to layers when used as such. """ +from typing import Optional + import numpy as np import tensorflow as tf from tensorflow.keras import backend as K @@ -111,7 +113,7 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation -def numpy_to_input(numpy_array: np.ndarray, name: str = None): +def numpy_to_input(numpy_array: np.ndarray, name: Optional[str] = None): """ Takes a numpy array and generates an Input layer with the same shape, but with a batch dimension (of size 1) added. diff --git a/n3fit/src/n3fit/layers/x_operations.py b/n3fit/src/n3fit/layers/x_operations.py index d8a3d47b3d..a71a42d93d 100644 --- a/n3fit/src/n3fit/layers/x_operations.py +++ b/n3fit/src/n3fit/layers/x_operations.py @@ -9,7 +9,7 @@ for all flavours. The choice of flavours on which to act in a different way is given as an input argument. """ -from typing import List +from typing import List, Optional from n3fit.backends import MetaLayer from n3fit.backends import operations as op @@ -34,7 +34,9 @@ class xDivide(MetaLayer): 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: List = None, **kwargs): + def __init__( + self, output_dim: int = BASIS_SIZE, div_list: Optional[List[int]] = None, **kwargs + ): if div_list is None: div_list = [3, 4, 5, 6] self.output_dim = output_dim diff --git a/n3fit/src/n3fit/msr.py b/n3fit/src/n3fit/msr.py index b7f86fc591..17392d3022 100644 --- a/n3fit/src/n3fit/msr.py +++ b/n3fit/src/n3fit/msr.py @@ -2,6 +2,7 @@ The constraint module include functions to impose the momentum sum rules on the PDFs """ import logging +from typing import Callable, Optional import numpy as np @@ -13,7 +14,11 @@ def generate_msr_model_and_grid( - output_dim: int = 14, mode: str = "ALL", nx: int = int(2e3), scaler=None, **kwargs + output_dim: int = 14, + mode: str = "ALL", + nx: int = int(2e3), + scaler: Optional[Callable] = None, + **kwargs ) -> MetaModel: """ Generates a model that applies the sum rules to the PDF. diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index 0a8be1f91c..50a6b2d80d 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -1,10 +1,12 @@ -from typing import Callable, List +from typing import Callable, List, Optional import numpy as np from scipy.interpolate import PchipInterpolator -def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = None) -> Callable: +def generate_scaler( + input_list: List[np.ndarray], interpolation_points: Optional[int] = None +) -> Callable: """ Generate the scaler function that applies feature scaling to the input data. @@ -16,7 +18,7 @@ def generate_scaler(input_list: List[np.ndarray], interpolation_points: int = No Returns ------- - _scaler : function + _scaler : Callable The scaler function that applies feature scaling to the input data. """ input_arr = np.concatenate(input_list, axis=1) From 9b6a675587c6ffd407f859a962d2023c117fb81b Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 12 Jul 2023 10:41:14 +0200 Subject: [PATCH 130/134] Use numpy.typing --- n3fit/src/n3fit/backends/keras_backend/operations.py | 3 ++- n3fit/src/n3fit/scaler.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/backends/keras_backend/operations.py b/n3fit/src/n3fit/backends/keras_backend/operations.py index 677e8aacba..efff803b92 100644 --- a/n3fit/src/n3fit/backends/keras_backend/operations.py +++ b/n3fit/src/n3fit/backends/keras_backend/operations.py @@ -26,6 +26,7 @@ from typing import Optional import numpy as np +import numpy.typing as npt import tensorflow as tf from tensorflow.keras import backend as K from tensorflow.keras.layers import Input @@ -113,7 +114,7 @@ def batchit(x, batch_dimension=0, **kwarg): # layer generation -def numpy_to_input(numpy_array: np.ndarray, name: Optional[str] = None): +def numpy_to_input(numpy_array: npt.NDArray, name: Optional[str] = None): """ Takes a numpy array and generates an Input layer with the same shape, but with a batch dimension (of size 1) added. diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index 50a6b2d80d..c52a5718d6 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -1,11 +1,12 @@ from typing import Callable, List, Optional import numpy as np +import numpy.typing as npt from scipy.interpolate import PchipInterpolator def generate_scaler( - input_list: List[np.ndarray], interpolation_points: Optional[int] = None + input_list: List[npt.NDArray], interpolation_points: Optional[int] = None ) -> Callable: """ Generate the scaler function that applies feature scaling to the input data. From 8566728017776b0c083f67f40370db618d58f647 Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 12 Jul 2023 10:43:30 +0200 Subject: [PATCH 131/134] Raise error from original error --- n3fit/src/n3fit/scaler.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/n3fit/src/n3fit/scaler.py b/n3fit/src/n3fit/scaler.py index c52a5718d6..2129f24d7f 100644 --- a/n3fit/src/n3fit/scaler.py +++ b/n3fit/src/n3fit/scaler.py @@ -64,8 +64,10 @@ def generate_scaler( try: scaler = PchipInterpolator(map_from, map_to) - except ValueError: - raise ValueError("interpolation_points is larger than the number of unique input x-values") + except ValueError as e: + raise ValueError( + "interpolation_points is larger than the number of unique input x-values" + ) from e def _scaler(x): x_scaled = scaler(np.log(x)) From 27f9357e2862e34670e35394cc635167f7def78b Mon Sep 17 00:00:00 2001 From: Aron Jansen Date: Wed, 12 Jul 2023 11:17:07 +0200 Subject: [PATCH 132/134] Fix error when not imposing sumrule --- n3fit/src/n3fit/model_gen.py | 38 ++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/n3fit/src/n3fit/model_gen.py b/n3fit/src/n3fit/model_gen.py index 55eba95447..2bd898021b 100644 --- a/n3fit/src/n3fit/model_gen.py +++ b/n3fit/src/n3fit/model_gen.py @@ -669,28 +669,32 @@ def compute_unnormalized_pdf(x, neural_network, compute_preprocessing_factor): zip(preprocessing_factor_replicas, nn_replicas) ): pdf_unnormalized = compute_unnormalized_pdf(pdf_input, nn, preprocessing_factor) - pdf_integration_grid = compute_unnormalized_pdf(integrator_input, nn, preprocessing_factor) - - pdf_normalized = sumrule_layer( - { - "pdf_x": pdf_unnormalized, - "pdf_xgrid_integration": pdf_integration_grid, - "xgrid_integration": integrator_input, - # The photon is treated separately, need to get its integrals to normalize the pdf - "photon_integral": op.numpy_to_tensor( - 0.0 if not photons else photons.integral[i_replica] - ), - } - ) + + if impose_sumrule: + pdf_integration_grid = compute_unnormalized_pdf( + integrator_input, nn, preprocessing_factor + ) + pdf_normalized = sumrule_layer( + { + "pdf_x": pdf_unnormalized, + "pdf_xgrid_integration": pdf_integration_grid, + "xgrid_integration": integrator_input, + # The photon is treated separately, need to get its integrals to normalize the pdf + "photon_integral": op.numpy_to_tensor( + 0.0 if not photons else photons.integral[i_replica] + ), + } + ) + pdf = pdf_normalized + else: + pdf = pdf_unnormalized if photons: # Add in the photon component - model_output = layer_photon(pdf_normalized, i_replica) - else: - model_output = pdf_normalized + pdf = layer_photon(pdf, i_replica) # Create the model - pdf_model = MetaModel(model_input, model_output, name=f"PDF_{i_replica}", scaler=scaler) + pdf_model = MetaModel(model_input, pdf, name=f"PDF_{i_replica}", scaler=scaler) pdf_models.append(pdf_model) return pdf_models From 52ddc1d98e9b3e3b96cfbc4ab9d01a17707c60b1 Mon Sep 17 00:00:00 2001 From: Zahari Kassabov Date: Wed, 12 Jul 2023 11:05:34 +0100 Subject: [PATCH 133/134] Fix consistency of lumy plot label Make the absolute value bars both double. --- validphys2/src/validphys/pdfplots.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validphys2/src/validphys/pdfplots.py b/validphys2/src/validphys/pdfplots.py index 07cc497f4c..3c6a74fffd 100644 --- a/validphys2/src/validphys/pdfplots.py +++ b/validphys2/src/validphys/pdfplots.py @@ -824,7 +824,7 @@ def plot_lumi1d( ax.set_title( f"${LUMI_CHANNELS[lumi_channel]}$ luminosity\n" f"$\\sqrt{{s}}={format_number(sqrts/1000)}$ TeV " - f"$\\|y|<{format_number(y_cut)}$" + f"$\\|y\\|<{format_number(y_cut)}$" ) return fig From f13a50669e14cb58b5ce14fda9cb2d7359656c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Laurenti?= Date: Thu, 13 Jul 2023 09:55:38 +0200 Subject: [PATCH 134/134] Change fiatlux_dis_F{2,L} -> FIATLUX_DIS_F{2,L} --- validphys2/src/validphys/photon/compute.py | 7 +++---- validphys2/src/validphys/tests/photon/test_compute.py | 4 ++-- .../src/validphys/tests/photon/test_structurefunctions.py | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/validphys2/src/validphys/photon/compute.py b/validphys2/src/validphys/photon/compute.py index c9a5805f07..7a0c1638b7 100644 --- a/validphys2/src/validphys/photon/compute.py +++ b/validphys2/src/validphys/photon/compute.py @@ -75,9 +75,8 @@ def __init__(self, theoryid, lux_params, replicas): self.additional_errors = lux_params["additional_errors"] self.luxseed = lux_params["luxseed"] - # TODO : maybe find a different name for fiatlux_dis_F2 - path_to_F2 = theoryid.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" - path_to_FL = theoryid.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" + path_to_F2 = theoryid.path / "fastkernel/FIATLUX_DIS_F2.pineappl.lz4" + path_to_FL = theoryid.path / "fastkernel/FIATLUX_DIS_FL.pineappl.lz4" self.path_to_eko_photon = theoryid.path / "eko_photon.tar" with EKO.read(self.path_to_eko_photon) as eko: self.q_in = np.sqrt(eko.mu20) @@ -97,7 +96,7 @@ def __init__(self, theoryid, lux_params, replicas): fl = sf.InterpStructureFunction(path_to_FL, self.luxpdfset.members[replica]) if not np.isclose(f2.q2_max, fl.q2_max): log.error( - "FKtables for fiatlux_dis_F2 and fiatlux_dis_FL have two different q2_max" + "FKtables for FIATLUX_DIS_F2 and FIATLUX_DIS_FL have two different q2_max" ) fiatlux_runcard["q2_max"] = float(f2.q2_max) diff --git a/validphys2/src/validphys/tests/photon/test_compute.py b/validphys2/src/validphys/tests/photon/test_compute.py index 82787e7492..bd7a65c862 100644 --- a/validphys2/src/validphys/tests/photon/test_compute.py +++ b/validphys2/src/validphys/tests/photon/test_compute.py @@ -111,8 +111,8 @@ def test_photon(): photon = Photon(test_theory, fiatlux_runcard, [replica]) # set up fiatlux - path_to_F2 = test_theory.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" - path_to_FL = test_theory.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" + path_to_F2 = test_theory.path / "fastkernel/FIATLUX_DIS_F2.pineappl.lz4" + path_to_FL = test_theory.path / "fastkernel/FIATLUX_DIS_FL.pineappl.lz4" pdfs = fiatlux_runcard["luxset"].load() f2 = sf.InterpStructureFunction(path_to_F2, pdfs.members[replica]) fl = sf.InterpStructureFunction(path_to_FL, pdfs.members[replica]) diff --git a/validphys2/src/validphys/tests/photon/test_structurefunctions.py b/validphys2/src/validphys/tests/photon/test_structurefunctions.py index 5e83e6458f..879f552c73 100644 --- a/validphys2/src/validphys/tests/photon/test_structurefunctions.py +++ b/validphys2/src/validphys/tests/photon/test_structurefunctions.py @@ -44,8 +44,8 @@ def test_zero_pdfs(): pdfs = ZeroPdfs() test_theory = API.theoryid(theoryid=THEORY_QED) theory = test_theory.get_description() - path_to_F2 = test_theory.path / "fastkernel/fiatlux_dis_F2.pineappl.lz4" - path_to_FL = test_theory.path / "fastkernel/fiatlux_dis_FL.pineappl.lz4" + path_to_F2 = test_theory.path / "fastkernel/FIATLUX_DIS_F2.pineappl.lz4" + path_to_FL = test_theory.path / "fastkernel/FIATLUX_DIS_FL.pineappl.lz4" f2 = sf.InterpStructureFunction(path_to_F2, pdfs) fl = sf.InterpStructureFunction(path_to_FL, pdfs) @@ -78,7 +78,7 @@ def test_params(): test_theory = API.theoryid(theoryid=THEORY_QED) theory = test_theory.get_description() for channel in ["F2", "FL"]: - tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" + tmp = "fastkernel/FIATLUX_DIS_" + channel + ".pineappl.lz4" path_to_fktable = test_theory.path / tmp struct_func = sf.InterpStructureFunction(path_to_fktable, pdfs.members[replica]) np.testing.assert_allclose(struct_func.q2_max, 1e8) @@ -94,7 +94,7 @@ def test_interpolation_grid(): test_theory = API.theoryid(theoryid=THEORY_QED) for replica in [1, 2, 3]: for channel in ["F2", "FL"]: - tmp = "fastkernel/fiatlux_dis_" + channel + ".pineappl.lz4" + tmp = "fastkernel/FIATLUX_DIS_" + channel + ".pineappl.lz4" path_to_fktable = test_theory.path / tmp fktable = pineappl.fk_table.FkTable.read(path_to_fktable) x = np.unique(fktable.bin_left(1))