Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Numerical FONLL #195

Merged
merged 100 commits into from
Nov 1, 2023
Merged

Numerical FONLL #195

merged 100 commits into from
Nov 1, 2023

Conversation

RoyStegeman
Copy link
Member

@RoyStegeman RoyStegeman commented May 24, 2023

Implements numerical FONLL - supersedes #175

@RoyStegeman RoyStegeman marked this pull request as draft May 24, 2023 19:06
@RoyStegeman
Copy link
Member Author

For now I just went with a quick-and-dirty implementation where the output are just the asy terms as implemented, this implementation is mainly for my own understanding. I get some qualitative agreement with apfel though in most of the kinematic domain at least ~10% off.

Before I proceed though, @alecandido @felixhekhorn, do you know if the definition of the FFN0 scheme in apfel is the same as what we need? And if so, what is the level of agreement I should find?

@felixhekhorn felixhekhorn added physics physics features benchmarks Benchmark (or infrastructure) related labels May 25, 2023
@felixhekhorn felixhekhorn mentioned this pull request May 25, 2023
5 tasks
@RoyStegeman RoyStegeman mentioned this pull request May 30, 2023
5 tasks
Copy link
Member

@alecandido alecandido left a comment

Choose a reason for hiding this comment

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

Most of the files have small modifications, and the correct ones.

Now I'm on the phone, so I'm not really comfortable with the large files. But I'll try to finalize later today the review for the combiner and kernels. Apparently they look good as well.

src/yadism/input/compatibility.py Outdated Show resolved Hide resolved
src/yadism/observable_name.py Outdated Show resolved Hide resolved
src/yadism/observable_name.py Outdated Show resolved Hide resolved
src/yadism/coefficient_functions/__init__.py Outdated Show resolved Hide resolved
src/yadism/coefficient_functions/__init__.py Show resolved Hide resolved
@RoyStegeman
Copy link
Member Author

@giacomomagni thanks for your comments, I hope I addressed all of them adequately.

Benchmark runners are quite dirty/contain old stuff, but this should be fine

It was quite dirty when I found it. However, since FONLL won't be benchmarked against apfel again (at least using this runner) I'd also be happy to undo the changes to the apfel_.py module introduced by this PR.

@alecandido
Copy link
Member

It was quite dirty when I found it. However, since FONLL won't be benchmarked against apfel again (at least using this runner) I'd also be happy to undo the changes to the apfel_.py module introduced by this PR.

We could stop benchmarking FONLL, since it requires quite different operations. But it might be worth to benchmark instead FFNO, that was in APFEL, but not in yadism before this PR.

Co-authored-by: Giacomo Magni <39065935+giacomomagni@users.noreply.github.com>
@andreab1997
Copy link
Contributor

I realized something (tell me if you agree): when we ask yadism to do renormalization scale variations to the 7 subgrids of nFONLL for FONLL-B, it is using a different PTO for each of them (either 1 or 2). This means that, for some of them, we are doing actually NNLO ren sv instead of NLO (as we used to do in aFONLL and as we should do I believe). @RoyStegeman Can you confirm this?

CC: @felixhekhorn, @giacomomagni @alecandido

@@ -116,11 +116,12 @@ def compute_local(self):
if self._computed:
return
cfc = cf.Combiner(self)
full_orders = [(o, 0, 0, 0) for o in self.orders]
# prepare scale variations
sv_manager = self.info.configs.managers["sv_manager"]
if sv_manager is not None:
full_orders = sv.build_orders(self.info.configs.theory["pto"])
Copy link
Contributor

Choose a reason for hiding this comment

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

as @andreab1997 pointed out: this should be "pto_evol". Since FONLL-B is a NLO scheme we also need to have NLO scale variations. Actually, this means that also the massive grids need to have that setting!

@RoyStegeman
Copy link
Member Author

RoyStegeman commented Oct 11, 2023

Thanks for pointing this out - I did not think about SV, but indeed if SV is NLO for all contributions (i.e. similar to FONLL-A) instead of the same order as FONLL-B for the central scale, then for SV the runcards will need to be updated to have PTO=1. If it were only FFN0 it would indeed have been possible to replace pto with pto_evol, but for massive this won't work.

So I suppose this should be fixed in pineko?

@andreab1997
Copy link
Contributor

andreab1997 commented Oct 12, 2023

Thanks for pointing this out - I did not think about SV, but indeed if SV is NLO for all contributions (i.e. similar to FONLL-A) instead of the same order as FONLL-B for the central scale, then for SV the runcards will need to be updated to have PTO=1. If it were only FFN0 it would indeed have been possible to replace pto with pto_evol, but for massive this won't work.

So I suppose this should be fixed in pineko?

I believe at this point we should just have a PTO (we can call it as you like) that we use for EKO and for the renormalization scale variations in yadism and that would be always 1 for FONLL-A and B and always 2 for FONLL-C and D. Then we need another PTO (that can be PTODIS maybe) that instead is used only by yadism and that is 2 always for FONLL-C but it is the usual 2,2,1,2,2,1,2 for FONLL-B. Then we would be only left with what PTODIS is used at the moment: as far as I understood it is used for the FFNS0. Could this instead be lifted to yadism?

@RoyStegeman
Copy link
Member Author

Your proposal is exactly what yadism already does for the central scale, though I'm not exactly sure what you mean here:

Then we would be only left with what PTODIS is used at the moment: as far as I understood it is used for the FFNS0. Could this instead be lifted to yadism?

I'd have to look at how SV is implemented to see if it requires any changes, but from what I understood SV at NLO corresponds to both PTO=1 and PTODIS=1?

@andreab1997
Copy link
Contributor

Your proposal is exactly what yadism already does for the central scale, though I'm not exactly sure what you mean here:

Then we would be only left with what PTODIS is used at the moment: as far as I understood it is used for the FFNS0. Could this instead be lifted to yadism?

I'd have to look at how SV is implemented to see if it requires any changes, but from what I understood SV at NLO corresponds to both PTO=1 and PTODIS=1?

As far as I understood PTODIS is used for the asy parts in the case of FONLL-B. For SV it would be enough to ask for the sv kernel related to PTO=1 for each of the 7 theories, which in my mind could have been PTO since it has to be 1 already for the eko computation. So I would say SV should not use PTODIS at all. What I was saying is that if PTO we put equal to 1 always (for the reasons I said), then in yadism you need a different parameter that should be 2,2,1,2,2,1,2, according to the subtheory (which at the moment is instead PTO). Right?
As far as I understood then PTODIS is on top of all this discussion because being related to the asy components is yet another parameter which we may need to keep or to lift in yadism (if possible). But maybe I misunderstood the role of PTODIS

@felixhekhorn
Copy link
Contributor

Just to be clear (and as @RoyStegeman already pointed out, it can be confusing): there are only two (2) couplings powers in the game - and no more. Unfortunately there names are ambiguously:

  1. the (old) "PTO" in the theory card: since this is inherited from a NNPDF theory this refers to the PTO of evolution and in yadism this corresponds thus to pto_evol
  2. the (new) "PTODIS" in the theory card: this we invented ourselves to exactly accommodate FONLL-B and it refers to pto inside yadism

the fallback for 2 is 1

  • 2 should be used to compute coefficient functions
  • 1 should be used to compute anything related to resummation, i.e. the logs in asy and $a_s$

@alecandido
Copy link
Member

As @felixhekhorn said, PTODIS has been introduced to support FONLL-B (and all the skewed FONLL schemes), the whole of it, not just asy (indeed the fixed order in the asymptotic has to be the exact same as in the massive part, you can play just with the logs).

Concerning SV, I'm not sure I understand the point: they should be computed with the exact same settings of the central one, just varying the scale.
If central uses a non-trivial PTODIS, then SV have to do it as well.

@felixhekhorn
Copy link
Contributor

Concerning SV, I'm not sure I understand the point: they should be computed with the exact same settings of the central one, just varying the scale.
If central uses a non-trivial PTODIS, then SV have to do it as well.

The question is to which order are you generating the logs? (inside the coeff fnc <=> inside the as expansion)

Copy link
Contributor

@felixhekhorn felixhekhorn left a comment

Choose a reason for hiding this comment

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

I didn't check everything super carefully, but all in all it looks good (and I trust in the benchmarks ;-) )

@niclaurenti
Copy link
Contributor

Accidentally pushed here...sorry

@RoyStegeman RoyStegeman merged commit a1937ab into master Nov 1, 2023
4 of 5 checks passed
@RoyStegeman RoyStegeman deleted the numerical_fonll branch November 1, 2023 13:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
benchmarks Benchmark (or infrastructure) related physics physics features
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Clean up inputcard keys Most exact FONLL implementation
6 participants