In [102]:
%matplotlib inline
from array import array
import matplotlib.pyplot as plt
import numpy as np
import dmdd
import pylab as pl
import matplotlib.patches as patches
import matplotlib.path as path
# having trouble because when overwriting a pre assigned KWARG in mainplotter() doesn't overwrite KWARGS in the
# functions it calls
# the only way I can see how to make it do what I want is to make everything not a KWARG
In [92]:
def expectvalues(element, Qmin=5, Qmax=100, binsize=1, exposure=2000, sigma_name='sigma_si', sigma_val=200, efficiency= dmdd.eff.efficiency_unit, v_lag = 220):
#auto pass efficiency function. sigma val is cross section, sigma name is theory
bins = (Qmax - Qmin)/binsize #number of bins graph has
#energylist = np.arange(Qmin, Qmax+binsize, binsize) #includes the last point
energy_lower = np.arange(Qmin, Qmax, binsize)
energy_upper = np.arange(Qmin+binsize, Qmax+binsize, binsize)
#return energy_upper
#pseudocode for what I want it to do
result = []
for qmin, qmax in zip(energy_lower,energy_upper):
#print qmin,qmax
n = dmdd.Nexpected(element, qmin, qmax, exposure, efficiency, sigma_name, sigma_val, v_lag)
result.append(n)
return result
In [93]:
data = expectvalues('xenon')
print data
In [94]:
data = expectvalues('xenon', v_lag = 500) #this is a generator
data_list = list(data) #puts data into a list
data_array = np.asarray(data_list) #turns list into an array
#print data_array
In [95]:
energy_lower = np.arange(5., 100., 1)
energy_upper = np.arange(5+1, 100+1, 1)
qmid = np.zeros(len(energy_lower))
#for i in np.arange(len(energy_upper)):
#qmid[i] = (energy_upper[i] + energy_lower[i])/2
In [96]:
def calc_xy(Qmin, Qmax, binsize, v_lag = 220): #combine calc_xy and expectvalues into one -> v_lag needs to pass into Nexpected!
energy_lower = np.arange(Qmin, Qmax, binsize)
energy_upper = np.arange(Qmin+binsize, Qmax+binsize, binsize)
qmid = np.zeros(len(energy_lower))
qmid = (energy_upper + energy_lower)/2
for i in np.arange(len(energy_upper)):
qmid[i] = (energy_upper[i] + energy_lower[i])/2
data = expectvalues('xenon') #this is a generator
data_list = list(data) #puts data into a list
data_array = np.asarray(data_list) #turns list into an array
#√ package these 2 into 1 2d list using list=[], list.append(qmid)
#√ save qmid,data_array into 1 file; use np.savetxt(filename, 2d list);
#√ then that file can be read using 2dlist=np.loadtxt(filename)
datalist = []
datalist.append(qmid)
datalist.append(data_array)
np.savetxt('xenondata.txt', datalist)#float argument required, not np.ndarray
datalist=np.loadtxt('xenondata.txt')
return datalist
In [97]:
x,y = calc_xy(5., 100., 1.)
In [98]:
def plot_xy(x,y):
#make plot look pretty!
#√ write a seperate function that calls this and first function gets passed sigma, element, ect that will calculate and plot EVERYTHING
#√ include in calculator function the argument v_lag= 220 km/s (in dmdd.Nexpected), make it a KWARG and pass to Nexpected/calc_xy
plt.figure()
plt.plot(x, y) #scatter makes dots, plot makes lines
plt.title('Dark Matter-Nucleus Collisions', fontsize = 15)
plt.xlabel('Energy [keV]', fontsize = 13)
plt.ylabel('Number of Expected Recoil Events', fontsize = 13)
plt.show()
plt.savefig('/Users/katelynneese/dmdd/results/darkmattercollisions.png')
In [99]:
plot_xy(x,y)
In [100]:
def mainplotter(element='xenon', Qmin=5, Qmax=100, binsize=1, exposure=2000, sigma_name='sigma_si', sigma_val=200, efficiency= dmdd.eff.efficiency_unit, v_lag = 500):
expectvalues(element, Qmin, Qmax, binsize, exposure, sigma_name, sigma_val, efficiency, v_lag)
x,y = calc_xy(Qmin, Qmax, binsize, v_lag)
plot_xy(x,y)
In [101]:
mainplotter(element = 'xenon', v_lag = 220)
In [ ]: