flav-io / flavio

A Python package for flavour physics phenomenology in the Standard model and beyond
http://flav-io.github.io/
MIT License
71 stars 62 forks source link

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

Closed hoodyn closed 3 years ago

hoodyn commented 3 years ago

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.

Furthermore, I made some additional small commits:

  1. 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.
  2. 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.

  1. 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 OA. 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 OA. 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).

peterstangl commented 3 years ago

@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.

hoodyn commented 3 years ago

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

kaon_decays.pdf

hoodyn commented 3 years ago

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