wimpydd is hosted by Hepforge, IPPP Durham #### Momentum-dependent Wilson coefficients

The effective Hamiltonian:

${\cal H}_1(g,M,\alpha)=\left (\frac{g}{M^2}+\frac{\alpha}{q^2} \right)e^{\tau}{\cal O}_1^{\tau}= \frac{q}{M^2} e^{\tau}{\cal O}_1^{\tau}+\frac{\alpha}{q_0^2}\frac{q_0^2}{q^2}e^{\tau}{\cal O}_1^{\tau}=\frac{g}{M^2}e^{\tau} {\cal O}_1^{\tau}+\frac{\alpha}{q_0^2}e^{\tau}{\cal O}_1^{\tau\prime}$

is implemented (with $$e^{0}=e^{1}=1$$) by:

 >>> wc_dict1={1: lambda g,M: [g/M**2,g/M**2],
     (1,'qm2'): lambda alpha,q, q0=0.01: [alpha/q**2,alpha/q**2]}
 >>> H1=WD.eft_hamiltonian('H1',wc_dict1)

The same model can also be implemented using the alternative base:

${\cal H}_2(g,M,\alpha)=\left (\frac{g}{M^2}+\frac{\alpha}{q^2} \right)e^{\tau}{\cal O}_{M,0,0}^{\tau}= \frac{g}{M^2}e^{\tau}{\cal O}_{M,0,0}^{\tau}+\frac{\alpha}{q_0^2}\frac{q_0^2}{q^2}e^{\tau}{\cal O}_{M,0,0}^{\tau}$
${\cal H}_2(g,M,\alpha)=\frac{g}{M^2}e^{\tau}{\cal O}_{M,0,0}^{\tau}+\frac{\alpha}{q_0^2}e^{\tau}{\cal O}_{M,0,0}^{\tau\prime}$
 >>> wc_dict2={('M',0,0): lambda g,M: [g/M**2,g/M**2],
     ('M',0,0,'qm2'): lambda alpha,q, q0=0.01: [alpha/q**2,alpha/q**2]}
 >>> H2=WD.eft_hamiltonian('H2',wc_dict2)

In the case of $${\cal H}_1$$, $${\cal O}_1$$ and $${\cal O}_1^{\prime}$$ = $$q^2/q_0^2{\cal O}_1$$ are handled as different operators, since the additional momentum dependence due to the $$q_0^2/q^2$$ term requires the calculation of a different response function for $${\cal O}_1^{\prime}$$ compared to $${\cal O}_1$$, so they require different keys in the input dictionaries. The same happens in $${\cal H}_2$$ for $${\cal O}_{M,0,0}$$ and $${\cal O}_{M,0,0}^{\prime}$$. In wc_dict1 this is accomplished by using (1,'qm2') for $${\cal O}_1^{\prime}$$, i.e. by extending the key that identifies the $${\cal O}_1$$ operator to a tuple with one (or more) specification strings of user's choice. Analogously, in wc_dict2 the key ('M',0,0,'qm2') is used instead of ('M',0,0) for $${\cal O}_{M,0,0}^{\prime}$$. The specification strings are incorporated in the names of the output files where the tabulated response functions are saved. For instance, for H1 the response functions are saved in the files:

c_1_c_1.npy
c_1_qm2_c_1_qm2.npy
c_1_c_1_qm2.npy
c_1_qm2_c_1.npy

while for H2:

c_M_0_0_c_M_0_0.npy
c_M_0_0_qm2_c_M_0_0_qm2.npy
c_M_0_0_c_M_0_0_qm2.npy
c_M_0_0_qm2_c_M_0_0.npy

Any other Hamiltonian object containing the key ('M',0,0,'qm2') in its Wilson coefficient dictionary will load the response functions from the c_M_0_0_qm2_c_M_0_0_qm2.npy file. So, an accurate use of specification strings in the coupling keys allows to share the same set of tabulated response functions among different Hamiltonians, giving full control to the user on which set of response functions is used by each effective Hamiltonian.

Notice that all interferences are included:

 >>> print(H1)
     Hamiltonian name:H1
     Hamiltonian:c_1(M)* O_1+c_1_qm2(alpha, q, q0=0.01)* O_1_qm2'(q)
     Squared amplitude contributions:
     O_1*O_1, O_1*O_1_qm2'(q), O_1_qm2'(q)*O_1, O_1_qm2'(q)*O_1_qm2'(q)

#### Factorization of Wilson coefficients momentum dependence

Any argument of a Wilson coefficient starting with q0 is reserved for the $$q_0$$ reference scale for momentum-dependent Wilson coefficients. Notice that the argument is not passed to the function that parameterizes the Wilson coefficient, but handled internally through the default_args attribute. Moreover momentum reference scales are set at the Hamiltonian instantiation and cannot be changed at run-time. A different $$q_0$$ can be used when more than one momentum-dependent Wilson coefficient is present. If no such argument is passed $$q_0$$ is set to 1 GeV by default. Notice that since the momentum dependence of the Wilson coefficients is included in the calculation of the response functions, the choice of $$q_0$$ affects the overall normalization of the the tables saved by load_response_functions. For instance, the Hamiltonian:

${\cal H}_3(g,M,\alpha)=\frac{g}{M^2+q^2}e^{\tau} {\cal O}_1^{\tau}+\frac{\alpha}{q^2}e^{\tau}{\cal O}_1^{\tau}=c_1^{\prime\tau}(q_{0,prop}){\cal O}_1^{\prime\tau}+ c_1^{\prime\prime\tau}(q_{lr}){\cal O}_1^{\prime\prime\tau}$

with:

${\cal O}_1^{\prime\tau}=\frac{c_1^{\prime\tau}(q)}{c_1^{\prime\tau}(q_{0,prop})}{\cal O}_1^{\tau}$ ${\cal O}_1^{\prime\prime\tau}=\frac{c_1^{\prime\prime\tau}(q)}{c_1^{\prime\tau}(q_{0,lr})}{\cal O}_1^{\tau}$

can be implemented with:

 >>> wc_dict3={(1,'propagator'): lambda g,q,q0_propagator=0.1,M=0.1:
     g/(M**2+q**2)*np.array([1,1]), (1,'qm2'): lambda alpha,q, q0_long_range=0.01:
     alpha/q**2*np.array([1,1])}
 >>> H3=WD.eft_hamiltonian('H3',wc_dict3)

The method H3.coeff_squared_q_dependence returns the factorized momentum dependences $$\frac{c_1^{\prime\tau}(q_{0,prop})}{c_1^{\prime\tau}(q)}\frac{c_1^{\prime\tau}(q_{0,prop})}{c_1^{\prime\tau}(q)}$$, $$\frac{c_1^{\prime\tau}(q_{0,prop})}{c_1^{\prime\tau}(q)}\frac{c_1^{\prime\prime\tau}(q_{0,lr})}{c_1^{\prime\prime\tau}(q)}$$ ,$$\frac{c_1^{\prime\prime\tau}(q_{0,lr})}{c_1^{\prime\prime\tau}(q)}\frac{c_1^{\prime\tau}(q_{0,prop})}{c_1^{\prime\tau}(q)}$$ and $$\frac{c_1^{\prime\prime\tau}(q_{0,lr})}{c_1^{\prime\prime\tau}(q)}\frac{c_1^{\prime\prime\tau}(q_{0,lr})}{c_1^{\prime\prime\tau}(q)}$$:

 >>> H3.coeff_squared_q_dependence(0.01,(1,'qm2'),(1,'qm2'))
     1
 >>> H3.coeff_squared_q_dependence(0.01,(1,'propagator'),(1,'qm2'))
     1.9801980198019802

that are used to calculate the response functions.