Closed hoodyn closed 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.
@peterstangl I'm attaching some notes which may help you checking the code after me.
For too many bugs and misargumentation in this PR, I've iniciated a new one (#141).
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.
The KS->e mu is no longer an invalid option in the function
amplitudes_eff
.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:amplitudes
has been renamed toamplitudes_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-.Also the amplitude for K0->l1+l2- can be obtained from this function as
I can attach some notes about why it is like this.
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 casel1 == 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 theamplitudes
, 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 newamplitudes
function now takesK
as a mandatory argument (to be'KL'
or'KS
').amplitudes
within theamplitudes_eff
function, which now serves purely to sum the short-distanceamplitudes
withamplitudes_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:
amplitudes_LD(par, K, l)
was originally giving long-distance contributions for both KL and KS, although it takesK
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.amplitudes
andamplitudes_LD
bysqrt(2)
and reduced the prefactor ofbr_kll
by 2 accordingly. The purpose is solely to makebr_kll
more consistent withbr_inst
in ./physics/kdecays/kll.py or with arXiv:1602.00881 from which the formulae have been adopted; also, the normalization ofamplitudes
as linear combinations ofamplitudes_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.
amplitudes_eff
for the caseK=='KS'
was was summing the effective scalar amplitude asSeff = 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 amplitudeS
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: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).