Skip to content

New ht thcovmat#2126

Open
achiefa wants to merge 43 commits into
masterfrom
new_ht_thcovmat
Open

New ht thcovmat#2126
achiefa wants to merge 43 commits into
masterfrom
new_ht_thcovmat

Conversation

@achiefa
Copy link
Copy Markdown
Contributor

@achiefa achiefa commented Jul 15, 2024

This PR allows for the inclusion of theory uncertainties due to the effect of power corrections. The theory covariance matrix is constructed by computing the shifts for the theoretical predictions as done for the MHOUs. The shift is computed at the level of the structure functions. Then, the shifts for the structure functions are combined to reconstruct the shift for the xsec. For this reason, the calculation of the shift depends on the dataset. Currently, only 1-JET and DIS (NC and CC) are supported.

At the level of the runcard, power corrections are specified as follows

theorycovmatconfig:
  point_prescriptions: ["power corrections"]
  pc_parameters:
  - {ht: H2p, yshift: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0], nodes: [0.0, 0.001, 0.01, 0.1, 0.3, 0.5, 0.7, 0.9, 1]}
  - {ht: H2d, yshift: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0], nodes: [0.0, 0.001, 0.01, 0.1, 0.3, 0.5, 0.7, 0.9, 1]}
  - {ht: HLp, yshift: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0], nodes: [0.0, 0.001, 0.01, 0.1, 0.3, 0.5, 0.7, 0.9, 1]}
  - {ht: HLd, yshift: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0], nodes: [0.0, 0.001, 0.01, 0.1, 0.3, 0.5, 0.7, 0.9, 1]}
  - {ht: H3p, yshift: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0], nodes: [0.0, 0.001, 0.01, 0.1, 0.3, 0.5, 0.7, 0.9, 1]}
  - {ht: H3d, yshift: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0], nodes: [0.0, 0.001, 0.01, 0.1, 0.3, 0.5, 0.7, 0.9, 1]}
  - {ht: Hj, yshift: [2.0, 2.0, 2.0, 2.0, 2.0, 2.0], nodes: [0.25, 0.75, 1.25, 1.75, 2.25, 2.75]}
  pc_included_procs: ["JETS", "DIS NC", "DIS CC"]
  pc_excluded_exps: [HERA_NC_318GEV_EAVG_CHARM-SIGMARED,
                     HERA_NC_318GEV_EAVG_BOTTOM-SIGMARED]
  pdf: 240701-02-rs-nnpdf40-baseline
  use_thcovmat_in_fitting: true
  use_thcovmat_in_sampling: true

For each process/sf implemented, we need to specify a series of information:

  1. The name of the power correction, under the key ht. This is useful to identify the type of power correction, in particular when computing the posterior.
  2. The values in yshift are the magnitudes of the prior.
  3. nodes contains the points where the prior is shifted

The array pc_included_procs specifies the processes for which the shifts are computed. I've also implemented the possibility to exclude some particular datasets within the selected processes, and this can be done by specifying the names in pc_excluded_exps.

The key func_type is temporary and will be deleted once we decide which function to use to construct the prior.

All the relevant details for this PR are contained in the module higher_twist_functions.py. For each observable for which the shift has to be computed, I implemented a factory that constructs a function which will then compute the shift. I thought it was kind of necessary to make the shift dependent on the shift parameters (yshift and nodes) and on the prescription according to which we vary the parameters (which for now is fixed), and not on the kinematics (I think this is known as currying in computer science).

TO DO

  • Add documentation
  • [x] Remove func_type
  • What happens if power_corrections is specified but the parameters are not given?
  • Change the name ht to name (?)
  • Something else?

@achiefa achiefa added the run-fit-bot Starts fit bot from a PR. label Jul 15, 2024
@achiefa achiefa requested a review from RoyStegeman July 15, 2024 10:11
@achiefa achiefa self-assigned this Jul 15, 2024
@github-actions
Copy link
Copy Markdown

Greetings from your nice fit 🤖 !
I have good news for you, I just finished my tasks:

Check the report carefully, and please buy me a ☕ , or better, a GPU 😉!

@scarlehoff scarlehoff marked this pull request as draft July 17, 2024 14:26
Comment thread n3fit/src/n3fit/layers/DIS.py Outdated
Comment thread n3fit/src/n3fit/layers/DIS.py Outdated
Comment thread n3fit/src/n3fit/layers/DIS.py Outdated
Comment thread n3fit/src/n3fit/scripts/vp_setupfit.py Outdated
Comment thread n3fit/src/n3fit/scripts/n3fit_exec.py Outdated
Comment thread validphys2/src/validphys/results.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
@achiefa achiefa force-pushed the new_ht_thcovmat branch 2 times, most recently from 28662e8 to 6b71fae Compare October 11, 2024 22:16
@achiefa achiefa force-pushed the new_ht_thcovmat branch 2 times, most recently from 348be41 to 9ac473c Compare January 14, 2025 14:06
@achiefa
Copy link
Copy Markdown
Contributor Author

achiefa commented Jan 14, 2025

Hi @roy, I've updated the code so that now the covmat for power corrections can be constructed as in the case of scale variations. Please, look and let me know if something is unclear. I'd like if you could double-check the functions that compute the shifts, in particular when normalisation factors and conversion factors are used.

There are few things that I still don't like here and there, but you're free to propose modifications.

@achiefa achiefa added run-fit-bot Starts fit bot from a PR. and removed run-fit-bot Starts fit bot from a PR. labels Jan 14, 2025
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
@achiefa achiefa removed the run-fit-bot Starts fit bot from a PR. label Jan 14, 2025
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
@github-actions
Copy link
Copy Markdown

Greetings from your nice fit 🤖 !
I have good news for you, I just finished my tasks:

Check the report carefully, and please buy me a ☕ , or better, a GPU 😉!

@achiefa achiefa marked this pull request as ready for review January 30, 2025 14:13
@achiefa achiefa requested a review from scarlehoff February 21, 2025 15:37
Copy link
Copy Markdown
Member

@scarlehoff scarlehoff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @achiefa thanks for this.

I've left a few comments on the code. The 1000line higher_twist_functions I haven't look into in much detail, but one thing that I'd like to mention is please avoid using commondata_table. This is basically an object containing all commondata information like in the old days which was necessary to add for some of validphys functions but the idea is to instead get only the information you want.

For instance, the process type is part of the metadata now (no need to load the data and uncertainties!)
Same for the kinematics (although by the time you need the kinematics you often have already read the whole commondata). You can get the kinematics directly with cd.metadata.load_kinematics() and then you already have x, Q, and y for DIS as god intended!

Comment thread n3fit/runcards/examples/Basic_runcard_pc_covmat.yml
Comment thread validphys2/examples/theory_covariance/chi2table_ht.yaml Outdated
Comment thread validphys2/src/validphys/commondata.py Outdated
Comment thread validphys2/src/validphys/config.py Outdated
Comment thread validphys2/src/validphys/config.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/higher_twist_functions.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/higher_twist_functions.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/higher_twist_functions.py Outdated
Copy link
Copy Markdown
Member

@scarlehoff scarlehoff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a few comments but haven't run the code yet. I've also look at higher_twist_functions very superficially for now, just got curious about the cuts.

I'm a bit worried about all the if conditions that this one prescription adds and whether it breaks some assumptions in the code. In particular the one where theoryid(s) is a one-item list...

Comment thread nnpdf_data/nnpdf_data/commondata/CMS_2JET_7TEV/metadata.yaml
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated
Comment thread validphys2/src/validphys/theorycovariance/construction.py
Comment thread validphys2/src/validphys/theorycovariance/construction.py
Comment thread validphys2/src/validphys/theorycovariance/construction.py Outdated

pc_type = get_pc_type(exp_name, process_type, experiment=experiment, pc_dict=pc_dict)

if process_type.startswith('DIS'):
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Counting the days until someone call a process DISASTER for some reason 🙈

I would perhaps also guard against processes that have no x or no Q2.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Counting the days until someone call a process DISASTER for some reason 🙈

Highly likely. Do you have a better idea?

I would perhaps also guard against processes that have no x or no Q2.

Why would this happen?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's what I meant, check both that startswith('DIS') and that the processes have x and Q2 and we agree that everything that complies with both is a DIS process even if it called DISNOTREALLY

This hard codes the theories needed for each prescription to avoid user error."""
th = t0id.id
if point_prescription == 'power corrections':
return NSList([t0id], nskey="theoryid")
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder how many things across the code will assume that a theory covmat needs more than one theory...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eheh, we can ask our AI companions...

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't even know how to start prompting it. Perhaps starting with "write a test for everything that uses this function" :__)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants