#!/usr/bin/env python
# coding: utf-8
# Calculate the frequency of daisy drive alleles for different systems and release sizes.
#
# Select values for the following:
# * drive_init - the number of organisms to be released.
#
# * C - either 'Single release' or 'Repeated releases every generation.' Repeated release option releases drive_init organisms.
#
# * n - the number
# of elements in the daisy drive ranging from 1 element (A) to 6 elements (F->E->D->C->B->A)
#
# * payload_cost - the fitness cost of the payload in element A. Select none (0.02), moderate (0.1), or severe (0.4)
# In[1]:
num_elements = {'A':1, 'B->A':2, 'C->B->A':3, 'D->C->B->A':4, 'E->D->C->B->A':5, 'F->E->D->C->B->A':6}
#print num_elements.keys()
cost1_elements = {'none':0, 'minor':0.05, 'moderate':0.1}
#print cost1_elements.keys()
cost2_elements = {'none':0.02, 'moderate':0.01, 'severe':0.4}
#print cost2_elements.keys()
driveinit_elements = {
'One per thousand wild organisms': 0.001,
'One per hundred wild organisms': 0.01,
'One per ten wild organisms':0.1,
'One for every wild organism':1}
#print driveinit_elements.keys()
#repeated seeding frequency, or 0 if you don’t want repeated seeding
C_elements = {'Repeated seeding':1, 'No repeated seeding':0}
# In[2]:
from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di # Example: di.display_html('
%s:
' % str, raw=True)
# This line will hide code by default when the notebook is exported as HTML
di.display_html('', raw=True)
# This line will add a button to toggle visibility of code blocks, for use with the HTML export version
#di.display_html('''''', raw=True)
# In[3]:
import percache
cache = percache.Cache("cache.txt")
import numpy as np
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')
# In[4]:
@cache
def daisy_drive(n, cost2, P, C, drive_init, t_max):
# create file with the input parameters for the matlab function
#s = [n, cost1, cost2, P, C, drive_init, t_max]
s = [n, cost2, P, C, drive_init, t_max]
print s
import csv
with open('params.txt', 'w') as outfile:
writer = csv.writer(outfile)
writer.writerow(s)
# execute matlab function (bash)
get_ipython().system('rm T.txt')
get_ipython().system('rm Y.txt')
get_ipython().system('/Applications/MATLAB_R2016a.app/bin/matlab -nodesktop -nosplash -r "cd(\'/Users/erika/daisy_drive\');simulate_applet2()"')
# read in matlab output files
from numpy import genfromtxt
T = genfromtxt('T.txt', delimiter=',')
Y = genfromtxt('Y.txt', delimiter=',')
return(T,Y)
# In[5]:
def plot(n, payload_cost, C, drive_init):
n = num_elements[n]
cost2 = cost2_elements[payload_cost]
drive_init = driveinit_elements[drive_init]
fig, ax = plt.subplots(figsize=(4, 3),
subplot_kw={'axisbg':'#EEEEEE',
'axisbelow':True})
ax.grid(color='w', linewidth=2, linestyle='solid')
if C == 'Repeated seeding':
C = drive_init
else:
C = 0
(T,Y) = daisy_drive(n, cost2, 1, C, drive_init, 200)
for i in range(0, n):
if n > 1:
Y_i = [b[i] for b in Y]
else:
Y_i = Y
ax.plot(T, Y_i,lw=5, alpha=0.4)
#ax.set_xlim(0, 10)
#ax.set_ylim(-1.1, 1.1)
return fig
# In[6]:
# hide silly little matplotlib warning
import warnings
warnings.filterwarnings('ignore')
# In[7]:
from ipywidgets import StaticInteract, RangeWidget, RadioWidget
StaticInteract(plot,
n=RadioWidget(['A', 'B->A', 'C->B->A', 'D->C->B->A', 'E->D->C->B->A', 'F->E->D->C->B->A']),
payload_cost=RadioWidget(cost2_elements.keys()),
C=RadioWidget(C_elements.keys()),
drive_init=RadioWidget(driveinit_elements.keys()) )
# In[12]:
cache.close()