def crossSection(element, m_A, E_R): # returns 1/GeV^3 ''' crossSection(element, m_A, E_R) Returns the differntial scattering cross section for a massive dark photon [m_A] = GeV [E_R] = GeV ''' m_N = amu2GeV(atomicNumbers[element]) FN2 = formFactor2(element, E_R) function = (FN2) / ((2 * m_N * E_R + m_A**2)**2) return function
def eMax(element, m_X, rIndex, u): ''' eMax(element, m_X, rIndex, u) Returns the maximum kinetic energy allowed by the kinematics [m_X] = GeV rIndex specifies the index in the escape velocity array escVel2_List[rIndex] ''' m_N = amu2GeV(atomicNumbers[element]) mu = m_N * m_X / (m_N + m_X) vCross2 = (escVel2_List[rIndex]) function = 2 * mu**2 * (u**2 + vCross2) / m_N # assert (function >= 0), '(element, m_X, rIndex, u): (%s, %e, %i, %e) result in negative eMax' %(element, m_X, rIndex, u) return function
def singleElementCap(element, m_X, m_A, epsilon, alpha, alpha_X): ''' singleElementCap(element, m_X, m_A, epsilon, alpha, alpha_X) Returns the capture rate due to a single element for the specified parameters [m_X] = GeV [m_A] = GeV ''' Z_N = nProtons[element] m_N = amu2GeV(atomicNumbers[element]) n_X = 0.3/m_X # GeV/cm^3 conversion = (5.06e13)**-3 * (1.52e24) # (cm^-3)(GeV^-2) -> s^-1 prefactors = (4*np.pi)**2 crossSectionFactors = 2 * (4*np.pi) * epsilon**2 * alpha_X * alpha * Z_N**2 * m_N function = n_X * conversion* crossSectionFactors* prefactors * sumOverR(element, m_X, m_A) return function
def EminEmaxIntersection(element, m_X, rIndex): ''' EminEmaxIntersection(element, m_X, rIndex): Returns the velocity uInt when eMin = eMax. [m_X] = GeV ''' m_N = amu2GeV(atomicNumbers[element]) mu = (m_N * m_X) / (m_N + m_X) sqrtvCross2 = np.sqrt(escVel2_List[rIndex]) # Calculate the intersection uInt of eMin and eMax given a specific rIndex A = m_X / 2. B = 2. * mu**2 / m_N uInt = np.sqrt((B) / (A - B)) * sqrtvCross2 return uInt
def singleElementCapKappa0(element, m_X, alpha): ''' singleElementCapKappa0(element, m_X, alpha): Returns a single kappa0 value for 'element' and the specified parameters [m_X] = GeV ''' Z_N = nProtons[element] m_N = amu2GeV(atomicNumbers[element]) n_X = 0.3/m_X # 1/cm^3 conversion = (5.06e13)**-3 * (1.52e24) # cm^-3 GeV^-2 -> s^-1 crossSectionFactors = 2 * (4*np.pi) * alpha * Z_N**2 * m_N prefactor = (4*np.pi)**2 function = n_X * conversion * prefactor * crossSectionFactors * sumOverRKappa0(element, m_X) return function