Exemple #1
0
def dRdE_nu(E_r,t,sol,E_nu,Flux,Nuc):
    N = Nuc.NumberOfNeutrons
    Z = Nuc.NumberOfProtons
    Q_W = 1.0*N-(1-4.0*sinTheta_Wsq)*Z # weak nuclear hypercharge
    m_N_GeV = 0.93141941*(N+Z) # nucleus mass in GeV
    m_N_keV = m_N_GeV*1.0e6 # nucleus mass in keV

    dRdE = zeros(shape=shape(E_r))
    FF = LabFuncs.FormFactorHelm(E_r,N+Z)**2.0
    ne = size(E_r)

    if Flux[1]>0.0:
        for i in range(0,ne):
            diff_sigma = (G_F_GeV**2.0 /(4.0*pi))*(Q_W**2.0)*m_N_GeV*(1.0 \
                        -(m_N_keV*E_r[i])/(2.0*(E_nu*1000.0)**2.0))*\
                        (0.197e-13)**2.0*(1.0e-6)*1000.0/(1.0*N+1.0*Z)*(N_A)
            diff_sigma[diff_sigma<0.0] = 0.0
            dRdE[i] = trapz(diff_sigma*Flux*FF[i],x=E_nu)
    else:
        for i in range(0,ne):
            diff_sigma = (G_F_GeV**2.0 /(4.0*pi))*(Q_W**2.0)*m_N_GeV*(1.0 \
                        -(m_N_keV*E_r[i])/(2.0*(E_nu[0]*1000.0)**2.0))*\
                        (0.197e-13)**2.0*(1.0e-6)*1000.0/(1.0*N+1.0*Z)*(N_A)
            if diff_sigma>0:
                dRdE[i] = diff_sigma*Flux[0]*E_nu[0] # for monochromatic nu's

    if sol:
        fMod = LabFuncs.EarthSunDistanceMod(t)
    else:
        fMod = 1.0

    # Convert into /ton/year/keV
    dRdE = fMod*dRdE*(365.0*3600.0*24.0*1000.0)
    return dRdE
Exemple #2
0
def dRdEe_nu(E_r, t, sol, E_nu, Flux, Atom, flav):
    N = Atom.NumberOfNeutrons
    Z = Atom.NumberOfProtons
    Q_W = 1.0 * N - (1 - 4.0 * sinTheta_Wsq) * Z  # weak nuclear hypercharge
    m_N_GeV = 0.93141941 * (N + Z)  # nucleus mass in GeV
    m_N_keV = m_N_GeV * 1.0e6  # nucleus mass in keV
    m_e_GeV = 5.109989461e-4

    ne = size(E_r)

    if sol:
        fMod = LabFuncs.EarthSunDistanceMod(t)
    else:
        fMod = 1.0

    gV = array([
        2 * sinTheta_Wsq + 0.5, 2 * sinTheta_Wsq - 0.5, 2 * sinTheta_Wsq - 0.5,
        2 * sinTheta_Wsq + 0.5, 2 * sinTheta_Wsq - 0.5, 2 * sinTheta_Wsq - 0.5
    ])
    gA = array([0.5, -0.5, -0.5, -0.5, 0.5, 0.5])

    T = E_r / 1000  # MeV
    Tmax = 2 * E_nu**2.0 / (2 * E_nu + m_e_GeV * 1000)

    dR = 0.0
    for ii in arange(0, 6)[flav > 0]:
        dRdE = zeros(shape=ne)
        As = (gV[ii] + gA[ii])**2.0
        Bs = (gV[ii] - gA[ii])**2.0
        Cs = (gA[ii]**2.0 - gV[ii]**2.0)
        if Flux[1] > 0.0:
            for i in range(0, ne):
                diff_sigma = (G_F_GeV**2.0 * m_e_GeV /
                              (2 * pi)) * (As + Bs *
                                           (1 - T[i] / E_nu)**2.0 + Cs * 1000 *
                                           m_e_GeV * T[i] / E_nu**2.0)
                diff_sigma *= (0.197e-13)**2.0 * (1.0e-6) * 1000.0 / (
                    1.0 * N + 1.0 * Z) * (N_A)
                diff_sigma[T[i] > Tmax] = 0.0
                dRdE[i] = trapz(diff_sigma * Flux, x=E_nu)
        else:
            diff_sigma = (G_F_GeV**2.0 * m_e_GeV /
                          (2 * pi)) * (As + Bs * (1 - T / E_nu[0])**2.0 +
                                       Cs * 1000 * m_e_GeV * T / E_nu[0]**2.0)
            diff_sigma *= (0.197e-13)**2.0 * (1.0e-6) * 1000.0 / (
                1.0 * N + 1.0 * Z) * (N_A)
            diff_sigma[T > Tmax[0]] = 0.0
            dRdE = diff_sigma * Flux[0] * E_nu[0] * (
                diff_sigma > 0.0)  # for monochromatic nu's

        # Convert into /ton/year/keV
        dRdE = fMod * dRdE * (365.0 * 3600.0 * 24.0 * 1000.0)
        dRdE = dRdE * Z * flav[ii]

        dR += dRdE

    return dR
Exemple #3
0
def dRdEdO_solarnu(E,t,E_nu,Flux,Nuc,Loc): # Directional CEnuNS for Solar
    N = Nuc.NumberOfNeutrons
    Z = Nuc.NumberOfProtons
    Q_W = N-(1-4.0*sinTheta_Wsq)*Z # weak nuclear hypercharge
    m_N_GeV = 0.93141941*(N+Z) # nucleus mass in GeV
    m_N_keV = m_N_GeV*1.0e6 # nucleus mass in keV
    E_nu_keV = E_nu*1e3


    E_r = sqrt(E[:,0]**2 + E[:,1]**2 + E[:,2]**2) # Recoil energy
    x = zeros(shape=shape(E))
    x_sun = zeros(shape=shape(E))
    x[:,0] = E[:,0]/E_r # Recoil direction
    x[:,1] = E[:,1]/E_r
    x[:,2] = E[:,2]/E_r
    ne =size(E_r)
    dRdEdO = zeros(shape=ne)
    for i in range(0,ne):
        x_sun[i,:] = LabFuncs.SolarDirection(t[i],Loc)
    cos_th_sun = -(x_sun[:,0]*x[:,0]+x_sun[:,1]*x[:,1]+x_sun[:,2]*x[:,2])
    FF = LabFuncs.FormFactorHelm(E_r,N+Z)**2.0


    # CHROMATIC NEUTRINOS
    if Flux[1]>0.0:
        E_max = 2*m_N_keV*E_nu_keV[-1]**2.0/(m_N_keV+E_nu_keV[-1])**2
        i_range = range(0,ne)*(E_r<=E_max)
        i_sel = i_range[i_range!=0]
        for i in i_sel:
            costh = cos_th_sun[i]
            E_nu_min = sqrt(m_N_keV*E_r[i]/2.0)
            if costh>(E_nu_min/m_N_keV):
                Eps = 1.0/(costh/E_nu_min - 1.0/m_N_keV)
                diff_sigma = (G_F_GeV**2/(4*pi))*Q_W**2*m_N_GeV*\
                            (1-(m_N_keV*E_r[i])/(2*Eps**2))*(0.197e-13)**2.0\
                            *1e-6*1000/(N+1.0*Z)*(N_A)
                Eps = Eps*(Eps>E_nu_min)
                Eps = Eps*(Eps<E_nu_keV[-1])
                F_value = interp(Eps,E_nu_keV,Flux)
                dRdEdO[i] = diff_sigma*F_value*Eps**2.0/(1000*E_nu_min)*FF[i] # /kg/keV

    # MONOCHROMATIC NEUTRINOS
    else:
        E_max = 2*m_N_keV*E_nu_keV[0]**2.0/(m_N_keV+E_nu_keV[0])**2
        i_range = range(0,ne)*(E_r<=E_max)
        i_sel = i_range[i_range!=0]
        for i in i_sel:
            costh = cos_th_sun[i]
            E_nu_min = sqrt(m_N_keV*E_r[i]/2.0)
            costh_r = ((E_nu_keV[0]+m_N_keV)/E_nu_keV[0])*sqrt(E_r[i]/(2*m_N_keV))

            # just need to accept angles close enough to costh_r to be accurate
            # around 0.01 is enough to be disguised by most angular resolutions
            if abs((costh)-(costh_r))<0.01:
                Eps = E_nu_keV[0]
                diff_sigma = (G_F_GeV**2/(4*pi))*Q_W**2*m_N_GeV*\
                            (1-(m_N_keV*E_r[i])/(2*Eps**2))*(0.197e-13)**2.0\
                            *1e-6*1000/(N+1.0*Z)*(N_A)*FF[i]
                dRdEdO[i] = diff_sigma*(Flux[0]/1000.0)*E_nu_keV[0] # /kg/keV


    fMod = LabFuncs.EarthSunDistanceMod(t)
    dRdEdO = fMod*dRdEdO*3600*24*365*1000/(2*pi) # /ton/year
    return dRdEdO