arfullSpectrum = np.zeros(len(E_R)) pbrecoilDict = {} pbfullSpectrum = np.zeros(len(E_R)) alrecoilDict = {} alfullSpectrum = np.zeros(len(E_R)) birecoilDict = {} bifullSpectrum = np.zeros(len(E_R)) for A in xedetector.isotopes: xerecoilSpectrum = np.zeros(len(E_R)) for i in range(0, len(E_R)): energy = E_R[i] xecs[A] = dSigdEr(int(A), int(A) - 54, energy, E_nu * 1000) xemask[A] = (E_nu * 1000 > np.sqrt( float(A) * 1.e6 * energy / 2.)) * (xecs[A] > 0.) if len(E_nu[xemask[A]]) == 0: continue isotopeFraction = xedetector.isotopes[A] kgPerMole = float(A) / 1000. atomsPerMole = 6.022e23 secondsPerDay = 86400 xerecoilSpectrum[i] = np.sum( reactor.fullSpectrum[xemask[A]] * xecs[A][xemask[A]]) * dE_nu *\ xedetector.fluxFactor * isotopeFraction *\ atomsPerMole / kgPerMole * secondsPerDay xefullSpectrum[i] += xerecoilSpectrum[i]
# P239, P241, and U235, using the expoential 5th-order polynomial # parameterization plt.figure(1) plt.plot(E_nu, reactor.fullSpectrum, '-k') plt.axis([0.01, 10., 1.e14, 1.e22]) plt.yscale('log') plt.xlabel('Neutrino energy (MeV)') plt.ylabel('Neutrinos/MeV') ################################################################## # Plot the calculated cross sections of the various isotopes plt.figure(2) cs = {} mask = {} for A in detector.isotopes: cs[A] = dSigdEr(int(A), int(A) - 18, E_R, 10000) mask[A] = cs[A] > 0. plt.plot(E_R[mask[A]], cs[A][mask[A]], label=('Ar' + A)) plt.axis([0., 8., 0., 0.5e-40]) plt.xlabel('Recoil energy (keV)') plt.ylabel('CENNS cross section (cm2)') legend = plt.gca().legend(loc='upper right') ################################################################## # Calculate recoil spectrum by summing over isotopes in their # natural abundances, then integrating the reactor spectrum # times the cross-section recoilDict = {} fullSpectrum = np.zeros(len(E_R)) for A in detector.isotopes:
secondsPerDay = 86400 ######################################################################### # Show total cross sections vs. energy xerecoilDict = {} xeTotalCS = np.zeros(len(E_nu)) xecs = {} xemask = {} for A in xedetector.isotopes: xePartialCS = np.zeros(len(E_nu)) for i in range(0, len(E_nu)): energy = E_nu[i] xecs[A] = dSigdEr(int(A), int(A) - 18, E_R, energy * 1000) # xemask[A] = (xecs[A] > 0.)*(E_R > 0.) xemask[A] = (E_R < 2. * (energy * 1000.)**2 / (float(A) * 1.e6)) * (E_R > 0.) isotopeFraction = xedetector.isotopes[A] kgPerMole = float(A) / 1000. if (np.sum(xemask[A]) > 0.): xePartialCS[i] = np.sum( xecs[A][xemask[A]] ) * dE_R *\ isotopeFraction else: xePartialCS[i] = 0. xeTotalCS[i] += xePartialCS[i]
plt.ylabel('Neutrinos/MeV') #plt.savefig('input_spectrum.png',dpi=600) ################################################################## # Plot the calculated cross sections of the various isotopes print('Plotting cross sections from various isotopes') plt.figure(2) xecs = {} xecs_yo = {} gecs = {} arcs = {} xemask = {} gemask = {} armask = {} for A in xedetector.isotopes: xecs_yo[A] = dSigdEr(int(A), int(A) - 54, E_R, 10000) xemask[A] = xecs_yo[A] > 0. plt.plot(E_R[xemask[A]], xecs_yo[A][xemask[A]], label=('Xe' + A)) plt.axis([0., 2., 0., 5e-39]) plt.xlabel('Recoil energy (keV)') plt.ylabel('CENNS cross section (cm^2)') legend = plt.gca().legend(loc='upper right') #plt.savefig('cross_sections.png',dpi=600) ################################################################## # Calculate recoil spectrum by summing over isotopes in their # natural abundances, then integrating the reactor spectrum # times the cross-section print('Plotting recoil spectrum from reactor neutrinos') xerecoilDict = {}
######################################################################### # Show total cross sections vs. energy E_nu_temp = np.linspace(0.01, 50., 500) xerecoilDict = {} xeTotalCS = np.zeros(len(E_nu_temp)) xecs = {} xemask = {} for A in xedetector.isotopes: xePartialCS = np.zeros(len(E_nu_temp)) for i in range(0, len(E_nu_temp)): energy = E_nu_temp[i] xecs[A] = dSigdEr(int(A), int(A) - 54, E_R, energy * 1000) # print(E_R[i]) # print(xecs[A]) xemask[A] = (xecs[A] > 0.) * (E_R > 0.) # print(mask[A]) isotopeFraction = xedetector.isotopes[A] kgPerMole = float(A) / 1000. atomsPerMole = 6.022e23 secondsPerDay = 86400 if (np.sum(xemask[A]) > 0.): xePartialCS[i] = np.sum( xecs[A][xemask[A]] ) * dE_R *\ isotopeFraction else: