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

K to ll' revision (fix to #138) #140

Closed
wants to merge 7 commits into from

Conversation

hoodyn
Copy link
Contributor

@hoodyn hoodyn commented Jan 29, 2021

In the discussion in #138, we agreed that there are some bugs in Kll.py. I tried to repair them. Moreover, I commited some other small changes aiming to improve the readability of the code.

  1. The KS->e mu is no longer an invalid option in the function amplitudes_eff.

  2. Amplitudes for LFV decays (i.e. l1!=l2) were not calculated correctly. The fix needed some nontrivial extension of the code as well as some physics considerations, which I will summarize now:

  • the original function function amplitudes has been renamed to amplitudes_weak_eigst as it actually does not yield the relevant amplitudes for KL -> l1+l2- nor KS->l1+l2-, but for the decay of weak eigenstate K0bar -> l1+ l2-.
   S_K0bar, P_K0bar = amplitudes_weak_eigst(par, wc, l1, l2)

Also the amplitude for K0->l1+l2- can be obtained from this function as

    S_aux, P_aux = amplitudes_weak_eigst(par, wc, l2, l1)
    S_K0 = -S_aux.conjugate()
    P_K0 = P_aux.conjugate()

I can attach some notes about why it is like this.

  • An entirely new function amplitudes(par, wc, K, l1, l2) has been implemented. It simply makes proper linear combinations of amplitudes for K0 and K0bar which correspond to the approximate mass eigenstates KL, KS (in fact, CP eigenstates are used instead). In the special case l1 == l2, this can be simplified to the expressions with imaginary or real parts of S,P, which had been there originally, adopted from ArXiv:1711.11030 (I guess). I implemented this special case separately inside the amplitudes, for the reason of both effectivity and better possibility to check that the new formulae are consistent with the old ones. If the maintainers find this separate treatment redundant, it can be removed, of course. The new amplitudes function now takes K as a mandatory argument (to be 'KL' or 'KS').
  • There is no longer a need to take real or imaginary parts of the amplitudes within the amplitudes_eff function, which now serves purely to sum the short-distance amplitudes with amplitudes_LD in the LF conserving cases. It also seems more consistent now - amplitudes_eff has one and only one purpose.

Furthermore, I made some additional small commits:
3. The function amplitudes_LD(par, K, l) was originally giving long-distance contributions for both KL and KS, although it takes K as an argument. Eventually, everything had been calculated correctly but the implementation seemed little awkward to me. So I've changed it in order to make things clearer.
4. I dared to change the normalization of the new short-distance amplitudes and amplitudes_LD by sqrt(2) and reduced the prefactor of br_kll by 2 accordingly. The purpose is solely to make br_kll more consistent with br_inst in ./physics/kdecays/kll.py or with arXiv:1602.00881 from which the formulae have been adopted; also, the normalization of amplitudes as linear combinations of amplitudes_weak_eigst is the standard one, following from KL = (K0+K0bar)/sqrt(2),KS = (K0-K0bar)/sqrt(2).

I also think I may have found another bug, which we haven't discussed in #138.
5. Originally, amplitudes_eff for the case K=='KS' was was summing the effective scalar amplitude as Seff = S.real + SLD. However, ArXiv:1711.11030 (which is the cited source in the code) claims that these two terms should subtract from each other (overall phase is irrelevant). SLD is implemented in flavio correctly according to Eq. (2.15) in 1711.11030 including the sign. Also, both flavio and 1711.11030 use the same convention for WCs: L_eff=-H_eff=C_A O_A. Thus, I think that originally the interference was inappropriately implemented. In my proposal it is corrected by the fact that the short-distance amplitude S is obtained as -S_K0bar.real * sqrt(2). (The minus sign is the important thing there; the sqrt(2) relates to what I discuss above in point 4.). Note that both flavio and 1711.11030 use the same convention for WCs: L_eff=-H_eff=C_A O_A.
The similar issue for the case of KL (Peff = P + PLD) was (and still is) probably correctly handled by the extra minus sign in the definition of PLD:

        ALgaga = 2.02e-4 * (par['chi_disp(KL->gammagamma)'] - 5.21j)
        SLD = 0
        PLD = -pre * ALgaga

I didn't dig to details there (like what's the default sign of the parameter enteging ALgaga in flavio when in fact it is not known).

The original `amplitudes` function renamed to `amplitudes_weak_eigst` as it actually only yields amplitudes relevant for decays of weak eigenstates K0, K0bar.

A new `amplitudes` function, which newly takes also `K` (to be `'KL'` or `'KS'`) as an argument, has been implemented. In merely makes proper linear combinations of amplitudes for K0 and K0bar. 

For l1=l2, `amplitudes` yields the imag/real parts of the S, P weak_eigs coefficients, as it should. Thus, taking real/imag parts is no longer tackled in `amplitudes_eff`, which now serves merely to add up short- and long-distance contributions, as it should, I believe.

The bug which lead to error in `amplitudes_eff` for 'KS' and l1!=l2, has been fixed.
There was an odd comment above a normalization coefficient, so I've updated it.
Originally, the function `amplitudes_LD(par, K, l)` was always sending both long-distance coefficients - for KL and KS, despite the fact that it takes `K` as an argument; `amplitudes_eff` then always thrown one of them away.
Now, it should be clearer.
Taking an extra factor of 2 from the prefactor in `br_kll` and putting a factor of sqrt(2) to both short distance `amplitudes` and `amplitudes_LD`. This does not affect the result, of course. Now, the formula for the BR is the more standard one (the same that is used for B->l1 l2 in flavio), and also combining weak-K0-eigenstate amplitudes to those of KL or KS is more intuitive now.
Like almost everywhere else, there is no need to distinguish between mass of KL and KS in the prefactors in amplitudes_LD.
@peterstangl
Copy link
Collaborator

@hoodyn thank you very much for your PR and the detailed explanations of what you did! I hope I find time soon to check everything in detail.

Copy link
Collaborator

@peterstangl peterstangl left a comment

Choose a reason for hiding this comment

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

I found some small typos

flavio/physics/kdecays/kll.py Outdated Show resolved Hide resolved
flavio/physics/kdecays/kll.py Outdated Show resolved Hide resolved
flavio/physics/kdecays/kll.py Outdated Show resolved Hide resolved
flavio/physics/kdecays/kll.py Outdated Show resolved Hide resolved
As @peterstangl noted, comparisons like
```
'K' == 'KL'
``` 
were present, while the correct version is 
``` 
K == 'KL'
```
@hoodyn
Copy link
Contributor Author

hoodyn commented Jan 29, 2021

@peterstangl I'm attaching some notes which may help you checking the code after me.

kaon_decays.pdf

@hoodyn
Copy link
Contributor Author

hoodyn commented Feb 11, 2021

For too many bugs and misargumentation in this PR, I've iniciated a new one (#141).

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.

None yet

2 participants