From 359b37dafbd6f07d415764a62562a597cf123cd5 Mon Sep 17 00:00:00 2001 From: toonhasenack Date: Mon, 11 Dec 2023 14:57:49 +0100 Subject: [PATCH] g1f1 polarized flag fix and kfactors --- data/kfactors/generate.py | 149 --------------------------------- data/kfactors/generate_g1.py | 15 ++-- data/kfactors/generate_g1f1.py | 37 +++----- src/pineko/scale_variations.py | 2 + 4 files changed, 23 insertions(+), 180 deletions(-) delete mode 100644 data/kfactors/generate.py diff --git a/data/kfactors/generate.py b/data/kfactors/generate.py deleted file mode 100644 index c8a27932..00000000 --- a/data/kfactors/generate.py +++ /dev/null @@ -1,149 +0,0 @@ -import lhapdf -import pineappl -from glob import glob -from datetime import datetime as dt -import numpy as np -import os -import argparse -from typing import List, Tuple - - -def get_gpaths(folder: str) -> Tuple[str, List[str]]: - """ - Get a list of paths to PineAPPL grids in the specified folder. - - Parameters - ---------- - folder : str - The folder path where PineAPPL grids are located. - - Returns - ------- - pdf_name : str - The name of the PDF dataset. - gpaths : List[str] - List of paths to PineAPPL grid files. - """ - paths = glob(folder + "/*F1*") # Find grids with "_F1" in the filename - gpaths = [] - for p in paths: - gpaths.append(glob(p + "/*.pineappl.lz4")[0]) - print(f"Found {len(gpaths)} pineapple grids.") - return pdf_name, gpaths - - -def get_prediction(gpath: str, pdf_name: str) -> np.ndarray: - """ - Get predictions by convoluting a PineAPPL grid with a LHAPDF PDF. - - Parameters - ---------- - gpath : str - Path to the PineAPPL grid file. - pdf_name : str - The name of the LHAPDF dataset. - - Returns - ------- - prediction : np.ndarray - Computed predictions. - """ - # Load the PineAPPL grid - grid = pineappl.grid.Grid.read(gpath) - - # Load the LHAPDF - pdf = lhapdf.mkPDF(pdf_name) - - # Perform the convolution - prediction = grid.convolute_with_one( - 2212, # Proton target - pdf.xfxQ2, # The PDF callable pdf.xfxQ2(pid, x, Q2) -> xfx - pdf.alphasQ2, # The alpha_s callable pdf.alpha_s(Q2) -> alpha_s - ) - - # Compute the k-factor (1 / F1) - prediction = 1 / prediction - - return prediction - - -def save_data( - data: np.ndarray, - dataset_name: str, - pdf_name: str, - author_name: str, - theory_name: str, - output_name: str = "results", -): - """ - Save computed data to a file with metadata. - - Parameters - ---------- - data : np.ndarray - Computed data. - dataset_name : str - Name of the dataset. - author_name : str - Name of the author. - theory_name : str - Name of the theory. - output_name : str, optional - Output folder name, default is "results". - """ - strf_data = "" - for i in range(data.shape[0]): - strf_data += f"{data[i]} 0.0\n" - - date = dt.now().date() - string = ( - f"""******************************************************************************** -SetName: {dataset_name} -Author: {author_name} -Date: {date} -CodesUsed: https://github.com/NNPDF/yadism -TheoryInput: {theory_name} -PDFset: {pdf_name} -Warnings: F1 normalization for {dataset_name} -******************************************************************************** -""" - + strf_data - ) - - os.makedirs(output_name, exist_ok=True) - with open( - output_name + f"/CF_NRM_{dataset_name}.dat".replace("F1", "G1"), "w" - ) as file: - file.write(string) - - -# Create an argument parser -parser = argparse.ArgumentParser() -parser.add_argument("pdf", help="The name of the PDF dataset of LHAPDF") -parser.add_argument("folder", help="The folder name of the F1 pineapple grids") -parser.add_argument("--author", help="The name of the author", default="A.J. Hasenack") -parser.add_argument( - "--theory", help="The theory used, formatted as 'theory_'+int", default="theory_800" -) -parser.add_argument("--output", help="The name of the output folder", default="results") -args = parser.parse_args() - -# Extract command line arguments -pdf_name = args.pdf -folder_name = args.folder -author = args.author -theory = args.theory -output = args.output - -# Get PineAPPL grid paths and PDF name -pdf_name, gpaths = get_gpaths(folder_name) - -# Process each PineAPPL grid -for gpath in gpaths: - dataset_name = os.path.splitext( - os.path.splitext(os.path.basename(os.path.normpath(gpath)))[0] - )[0] - - # Get predictions and save data - data = get_prediction(gpath, pdf_name) - save_data(data, dataset_name, pdf_name, author, theory, output) diff --git a/data/kfactors/generate_g1.py b/data/kfactors/generate_g1.py index 38262ee2..17099814 100644 --- a/data/kfactors/generate_g1.py +++ b/data/kfactors/generate_g1.py @@ -9,7 +9,7 @@ from typing import List, Tuple -def get_prediction(folder: str, pdf_name: str) -> np.ndarray: +def get_prediction(folder: str) -> np.ndarray: """ Get predictions by convoluting a PineAPPL grid with a LHAPDF PDF. @@ -79,16 +79,13 @@ def save_data( ) os.makedirs(output_name, exist_ok=True) - dataset_name = list(dataset_name) - dataset_name[-2] = "G" - dataset_name = "".join(dataset_name) - with open(output_name + f"/CF_NRM_{dataset_name}.dat", "w") as file: + with open(output_name + f"/CF_NRM_{dataset_name}_G1.dat", "w") as file: file.write(string) # Create an argument parser parser = argparse.ArgumentParser() -parser.add_argument("folder", help="The folder name of the F1 pineapple grids") +parser.add_argument("folder", help="The folder name of the commondata set") parser.add_argument("--author", help="The name of the author", default="A.J. Hasenack") parser.add_argument( "--theory", help="The theory used, formatted as 'theory_'+int", default="theory_800" @@ -102,6 +99,10 @@ def save_data( theory = args.theory output = args.output +dataset_name = os.path.splitext( + os.path.splitext(os.path.basename(os.path.normpath(folder_name)))[0] +)[0] + # Get predictions and save data data = get_prediction(folder_name) -save_data(data, folder_name, author, theory, output) +save_data(data, dataset_name, author, theory, output) diff --git a/data/kfactors/generate_g1f1.py b/data/kfactors/generate_g1f1.py index 8cedce67..d53e4359 100644 --- a/data/kfactors/generate_g1f1.py +++ b/data/kfactors/generate_g1f1.py @@ -8,7 +8,7 @@ from typing import List, Tuple -def get_gpaths(folder: str) -> Tuple[str, List[str]]: +def get_gpaths(folder: str, data: str) -> Tuple[str, List[str]]: """ Get a list of paths to PineAPPL grids in the specified folder. @@ -16,6 +16,8 @@ def get_gpaths(folder: str) -> Tuple[str, List[str]]: ---------- folder : str The folder path where PineAPPL grids are located. + data : str + Name of the commondata set. Returns ------- @@ -24,7 +26,7 @@ def get_gpaths(folder: str) -> Tuple[str, List[str]]: gpaths : List[str] List of paths to PineAPPL grid files. """ - paths = glob(folder + "/*F1*") # Find grids with "_F1" in the filename + paths = glob(folder + f"/*{data}*F1*") # Find the grids gpaths = [] for p in paths: gpaths.append(glob(p + "/*.pineappl.lz4")[0]) @@ -32,7 +34,7 @@ def get_gpaths(folder: str) -> Tuple[str, List[str]]: return gpaths -def get_prediction(gpath: str, pdf_name: str, target: str) -> np.ndarray: +def get_prediction(gpath: str, pdf_name: str) -> np.ndarray: """ Get predictions by convoluting a PineAPPL grid with a LHAPDF PDF. @@ -54,13 +56,8 @@ def get_prediction(gpath: str, pdf_name: str, target: str) -> np.ndarray: # Load the LHAPDF pdf = lhapdf.mkPDF(pdf_name) - # Make case distinction for target cases - if target == "proton": - nr = 2212 - elif target == "neutron": - nr = 2112 - else: - pass + # Proton reference number + nr = 2212 # Perform the convolution prediction = grid.convolute_with_one( @@ -117,11 +114,7 @@ def save_data( """ + strf_data ) - - os.makedirs(output_name, exist_ok=True) - dataset_name = list(dataset_name) - dataset_name[-2] = "G" - dataset_name = "".join(dataset_name) + dataset_name += "_G1" with open(output_name + f"/CF_NRM_{dataset_name}.dat", "w") as file: file.write(string) @@ -130,7 +123,7 @@ def save_data( parser = argparse.ArgumentParser() parser.add_argument("pdf", help="The name of the PDF dataset of LHAPDF") parser.add_argument("folder", help="The folder name of the F1 pineapple grids") -parser.add_argument("target", help="Add the target type") +parser.add_argument("data", help="Name of the commondata set") parser.add_argument("--author", help="The name of the author", default="A.J. Hasenack") parser.add_argument( "--theory", help="The theory used, formatted as 'theory_'+int", default="theory_800" @@ -141,20 +134,16 @@ def save_data( # Extract command line arguments pdf_name = args.pdf folder_name = args.folder -target = args.target +data = args.data author = args.author theory = args.theory output = args.output # Get PineAPPL grid paths and PDF name -gpaths = get_gpaths(folder_name) +gpaths = get_gpaths(folder_name, data) # Process each PineAPPL grid for gpath in gpaths: - dataset_name = os.path.splitext( - os.path.splitext(os.path.basename(os.path.normpath(gpath)))[0] - )[0] - # Get predictions and save data - data = get_prediction(gpath, pdf_name, target) - save_data(data, dataset_name, pdf_name, author, theory, output) + df = get_prediction(gpath, pdf_name) + save_data(df, data, pdf_name, author, theory, output) diff --git a/src/pineko/scale_variations.py b/src/pineko/scale_variations.py index adea5518..9839b746 100644 --- a/src/pineko/scale_variations.py +++ b/src/pineko/scale_variations.py @@ -224,6 +224,8 @@ def construct_and_dump_order_exists_grid(ori_grid, to_construct_order): remap_obj = pineappl.bin.BinRemapper(norma, limits) new_grid.set_remapper(remap_obj) new_grid.set_key_value("initial_state_2", ori_grid.key_values()["initial_state_2"]) + if "polarized" in ori_grid.key_values(): + new_grid.set_key_value("polarized", ori_grid.key_values()["polarized"]) return new_grid