wimpydd is hosted by Hepforge, IPPP Durham

Nuclear Response Functions

In one nucleon approximation WIMP and nuclear physics are factorized in the scattering amplitude:

\[\frac{1}{2j_\chi+1}\frac{1}{2j_T+1}|\mathcal{M}|^2=\frac{4\pi}{2j_T+1}\sum_{\tau =0,1}\sum_{\tau^\prime =0,1}\sum_k R^{\tau\tau^\prime}_k W^{\tau\tau^\prime}_{Tk}\] where \(j_\chi\) and \(j_T\) are the WIMP and nuclear target spins, respectively, the WIMP response functions are denoted by \( R^{\tau\tau^\prime}_k\) while the nuclear response functions are represented as \(W^{\tau\tau^\prime}_{Tk}\). Assuming that the nuclear ground state is \(CP\)-even the following nuclear response functions contribute to the amplitude: \(k= M, \Sigma^{\prime\prime}, \Sigma^\prime, \Phi^{\prime\prime}, \Phi^{\prime\prime} M, \tilde \Phi^\prime, \Delta, \Delta \Sigma^\prime\).

In WimPyDD the nuclear response functions \(W^{\tau\tau^\prime}_{Tk}\) are implemented for the following 30 isotopes:

 C, 19F, 23Na, 28Si, 70Ge, 72Ge, 73Ge, 74Ge, 76Ge, 127I
 128Xe, 129Xe, 130Xe, 131Xe, 132Xe, 134Xe, 136Xe, 16O
 40Ar, 40Ca, H, 3He, 4He, 14N, 20Ne, 24Mg, 27Al, 32S
 56Fe, 59Ni

using the determinations in N. Anand et al. and R. Catena et al..

Upon instantiation the element object acquires the method func_w, an array that contains a nuclear for each isotope of the element. For instance, using the element class to define a Nickel target:

 >>> ni=WD.element('Ni')

ni.func_w is an array of nuclear response functions of the momentum transfer \(q\) in GeV, one for each of the isotopes listed in the ni.isotopes attribute:

 >>> ni.isotopes
     ['58Ni', '59Ni', '60Ni', '61Ni', '62Ni', '64Ni']

i.e. in the case of Nickel for \({}^{58}\)Ni, \({}^{59}\)Ni, \({}^{60}\)Ni, \({}^{61}\)Ni, \({}^{62}\)Ni, \({}^{64}\)Ni. Each function returns an array with shape (8,2,2) \(\rightarrow\) (k,tau,tau_prime) i.e. eight 2\(\times\)2 matrices \(W^{\tau\tau^\prime}_{Tk}\) with \(k=0\dots 7\). The mapping between \(k\) and the nuclear currents is: \[0=M, 1=\Sigma^{\prime\prime}, 2=\Sigma^\prime, 3=\Phi^{\prime\prime}, 4=\tilde \Phi^\prime, 5=\Delta, 6=\Phi^{\prime\prime} M, 7=\Delta \Sigma^\prime\] and for convenience is also provided by the dictionary:

 >>> WD.nuclear_current
 >>> {'M': 0, 'Sigma_prime_prime': 1, 'Sigma_prime': 2, 'Phi_prime_prime': 3,
     'Phi_tilde_prime': 4, 'Delta': 5, 'Phi_prime_prime-M': 6, 'Delta-Sigma_prime': 7} 

For instance:

 >>> ni.isotopes[1]

 >>> ni.func_w[1](q=0.001)
     array([[[ 2.76974325e+02, -1.40831795e+01],
            [-1.40831795e+01,  7.16079175e-01]], 

            [[ 4.32402314e-02, -4.31357437e-02],
            [-4.31357437e-02,  4.30315559e-02]],

            [[ 8.64770873e-02, -8.62681258e-02],
            [-8.62681258e-02,  8.60596642e-02]],

            [[ 2.29030771e+01, -1.39462465e+00],
            [-1.39462465e+00,  9.23353467e-02]],

            [[ 1.29157709e-02, -1.27681600e-02],
            [-1.27681600e-02,  1.26222473e-02]],

            [[ 2.23458314e-02, -2.20597592e-02],
            [-2.20597592e-02,  2.17774866e-02]],

            [[-7.96316503e+01,  4.04898547e+00],
            [ 4.82118321e+00, -2.45139687e-01]],

            [[-4.39590258e-02,  4.38528413e-02],
            [ 4.33964023e-02, -4.32915176e-02]]])

returns the eight matrices \(W^{\tau\tau^\prime}_{{}^{59}Ni,k}\), while:

 >>> ni.func_w[1](0.001)[7] 
     array([[-0.04395903,  0.04385284], 
            [0.0433964 , -0.04329152]])

returns \(W^{\tau\tau^\prime}_{{}^{59}Ni,\Delta-\Sigma^{\prime}}\).

The information about the nuclear response functions is stored in:


Customization of the nuclear response functions

The user can customize the definition of the nuclear response function or add the nuclear response functions for additional targets by adding the file:


in the Nuclear_response_functions directory. The first function parsed in the file is loaded. It must have the same behaviour of each of those in the func_w array, i.e. it must take the transferred momentum \(q\) in GeV as an input and must return an array with shape (8,2,2). <isotope_name> in the file name must match one of the entries of the isotopes attribute of the element. For instance, for Tungsten:

 >>> tungsten=WD.element('W')
 >>> tungsten.isotopes
     array(['180W', '182W', '183W', '184W', '186W'])

The nuclear response functions for 183W can be implemented by adding the file:


to the folder WimPyDD/Targets/Nuclear_response_functions. If such file is present the definition of the nuclear response function contained in nuclear_response_functions_coefficients_table.dat is ignored.